Compare commits

...
Author SHA1 Message Date
Devessier 74e3dba98f Merge remote-tracking branch 'origin/main' into rpl-front-components 2026-04-02 14:25:41 +02:00
Félix MalfaitGitHubclaude[bot] <41898282+claude[bot]@users.noreply.github.com>
2ebff5f4d7 fix: harden token renewal and soften refresh token revocation (#19175)
## Summary
- **Apollo factory** (`apollo.factory.ts`): Bail early with `EMPTY` when
no token pair exists so no request is forwarded without credentials.
Propagate renewal success/failure as a boolean so failed renewals stop
the operation chain instead of forwarding with stale tokens.
- **Refresh token service** (`refresh-token.service.ts`): When a revoked
refresh token is reused past the grace period, reject only that token
instead of mass-revoking all user tokens. The most common cause is a
lost renewal response (e.g. navigation during refresh), not actual token
theft. This eliminates the "Suspicious activity detected" errors users
were seeing. Also switches to `findOneBy` since the `appTokens` relation
is no longer needed.

## Test plan
- [x] `refresh-token.service.spec.ts` — all 7 tests pass
- [ ] Verify login flow: sign in from `app.localhost`, get redirected to
workspace subdomain without "Suspicious activity" errors
- [ ] Verify token renewal: let access token expire, confirm silent
renewal works and operations resume
- [ ] Verify concurrent tabs: open multiple tabs, let tokens expire,
confirm no mass revocation cascade

Made with [Cursor](https://cursor.com)

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
2026-04-02 12:01:31 +00:00
Charles BochetandGitHub b8e7179a85 Add missing index on viewField.viewFieldGroupId (#19253)
## Summary

- Adds an index on `viewField.viewFieldGroupId` to fix a ~28s `DELETE
FROM core.viewFieldGroup WHERE workspaceId = $1` query observed in
production
- The slow query is triggered during workspace hard deletion
(`deleteWorkspaceSyncableMetadataEntities` in `workspace.service.ts`)
- Root cause: the FK constraint `viewField.viewFieldGroupId →
viewFieldGroup.id` with `ON DELETE SET NULL` forces PostgreSQL to
sequentially scan the entire `viewField` table for every deleted
`viewFieldGroup` row, because no index exists on the referencing column
- Uses `CREATE INDEX CONCURRENTLY` in the migration to avoid locking the
table on production
2026-04-02 11:57:27 +00:00
Baptiste DevessierandGitHub b1a7155431 Disable edition for record page layouts disabled in the side panel (#19248)
## Before


https://github.com/user-attachments/assets/8e5151d8-7e90-420c-a826-b6e670c68000

## After


https://github.com/user-attachments/assets/a230bc46-5991-4972-94d1-9fffe894ff4a

Fixes
https://discord.com/channels/1130383047699738754/1488106565117673513
2026-04-02 11:51:44 +00:00
EtienneandGitHub a303d9ca1b Gql direct execution - Handle introspection queries (#19219)
### Context
GraphQL introspection queries (__schema, __type) were going through the
full Yoga server pipeline, which forces a complete workspace schema
build, loading flat metadata maps, building all GraphQL types, wiring
all resolver factories, and calling makeExecutableSchema. This is
expensive, even though introspection only needs the type structure and
zero resolver execution.

A new WorkspaceGraphqlSchemaSDLService extracts the SDL computation that
was previously embedded inside WorkspaceSchemaFactory.

From `direct-execution.service.ts` : 
- `buildSchema(sdl)` reconstructs a resolver-free GraphQLSchema from the
SDL
     - pure CPU, not cached, not sure it worths it ?

- `execute({ schema, document, variableValues })` from graphql-js,
introspection is answered entirely by the graphql-js runtime from type
metadata, no resolver execution needed


#### Nice to do ?
- Use new cache service for typeDefs ?


### Renaming bonus: `typeDefs` → `sdl`

`typeDefs` is an Apollo/graphql-tools convention. It's the parameter
name in
`makeExecutableSchema({ typeDefs, resolvers })`, not a native GraphQL
spec term.

In proper GraphQL semantics, what this service produces is the **SDL**
(Schema
Definition Language): the official term for the string representation of
a schema.
`printSchema()` produces it, `buildSchema()` consumes it.

##### Why the distinction matters

- **Type definitions** implies partial type declarations (objects,
scalars, enums…)
- **Schema SDL** conveys a *complete* schema document: all types
**plus** the root
operation types (`Query`, `Mutation`) which is exactly what
`printSchema(schema)`
  produces
2026-04-02 11:50:18 +00:00
EtienneandGitHub 579714b62f Investigate memory leak (#19213)
In search for cache leak + Remove old instrumentation
2026-04-02 11:23:10 +00:00
Baptiste DevessierandGitHub 885ab8b444 Seed Front Components (#19220)
https://github.com/user-attachments/assets/6b0887e8-8ba4-49c9-9371-e3db3e9fdde8
2026-04-02 11:20:08 +00:00
Abdullah.andGitHub 268543a08e Complete sections of the new website. (#19239)
This PR completes the markup for all the sections of all pages of the
new website. There are a lot of improvements to come, but the entire
structure is in place now.
2026-04-02 11:17:30 +00:00
nitinandGitHub c854d28d60 fix: make models.dev provider logos theme-aware (#19225)
closes
https://discord.com/channels/1130383047699738754/1486675857245212682
2026-04-02 11:10:30 +00:00
223943550c [AI] Unify code-interpreter streaming rendering and fix assistant width jitter (#19235)
closes
https://discord.com/channels/1130383047699738754/1480991390782455838

- Use data-code-execution as the streaming source of truth and hide
duplicate code-interpreter tool parts (including tool-execute_tool
wrappers).
- Ensure wrapped execute_tool code-interpreter outputs still render
correctly after refetch.
- Gate code-interpreter server behavior by enablement state and keep
assistant messages full-width to avoid streaming vs completed width
shifts.

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
2026-04-02 10:58:14 +00:00
1c7bda8448 i18n - docs translations (#19251)
Created by Github action

Co-authored-by: github-actions <github-actions@twenty.com>
2026-04-02 12:36:19 +02:00
391f6c0dab i18n - translations (#19250)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-04-02 12:33:12 +02:00
Charles BochetandGitHub 81f10c586f Add workspace DDL lock env var and maintenance mode UI (#19130)
## Summary

- Add `WORKSPACE_SCHEMA_DDL_LOCKED` env-only boolean config variable
that blocks all workspace schema DDL changes when set to `true`. This is
intended for hot upgrades where logical replication cannot handle DDL
changes. Enforced at two chokepoints:
- `WorkspaceMigrationRunnerService.run` — blocks all metadata-driven DDL
(object/field/index CRUD, app sync/uninstall, standard app sync, upgrade
commands)
- `WorkspaceDataSourceService.createWorkspaceDBSchema` /
`deleteWorkspaceDBSchema` — blocks workspace creation (sign-up) and hard
deletion. Uses a dedicated `WorkspaceDataSourceException` (not
ForbiddenException)

- Add maintenance mode feature with Admin Panel UI and user-facing
banner:
- **Backend**: `MaintenanceModeService` stores maintenance window
(startAt, endAt, optional link) in `core.keyValuePair` as
`CONFIG_VARIABLE`. Validates endAt > startAt. Uses `GraphQLISODateTime`
scalar for date fields. Exposed via `clientConfig` REST endpoint and
admin GraphQL mutations (`setMaintenanceMode`, `clearMaintenanceMode`)
- **Admin Panel**: New "Maintenance Mode" section in Health tab with UTC
datetime pickers and activate/deactivate controls
- **Banner**: `InformationBannerMaintenance` displayed at the top of
`DefaultLayout` for all users, using Temporal API for timezone-aware
formatting with an optional "Learn more" link

These two features are **independent** — the DDL lock is controlled via
env var for operational use, while maintenance mode is a UI notification
mechanism controlled from the admin panel.
2026-04-02 10:17:04 +00:00
9438b9869c i18n - translations (#19249)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-04-02 12:06:28 +02:00
Raphaël BosiandGitHub f688db30a9 Command to deduplicate command menu items (#19202)
- Deduplicate standard record command menu items by merging
single-record and multi-record delete, restore, destroy, and export
actions into shared record commands.
- Update frontend command registrations and engine component mappings to
use the new unified keys, while keeping deprecated engine keys
temporarily mapped for backward compatibility.
- Add a 1-21 upgrade command that removes legacy command menu items from
workspaces and creates the new unified standard items.
2026-04-02 09:51:15 +00:00
Raphaël BosiandGitHub 16033e9f99 Fix front component worker re-creation on every render (#19245)
- `frontComponentHostCommunicationApi` gets a new object reference on
every render, causing the `useMemo`/`useEffect` in
`FrontComponentWorkerEffect` to tear down and re-create the web worker
each time.
- Decouple the host API lifecycle from the worker lifecycle by moving
thread.exports updates into a dedicated
`FrontComponentUpdateHostCommunicationApiEffect` that mutates the
thread's exports object in place via Object.assign.
- Rename `FrontComponentHostCommunicationApiEffect` to
`FrontComponentInitializeHostCommunicationApiEffect` for clarity.

## Before


https://github.com/user-attachments/assets/6f3a5c14-2ae7-4317-82b5-1625abb4143e

## After


https://github.com/user-attachments/assets/1059d6cd-e02c-4477-b3e8-8e965a716434
2026-04-02 09:29:42 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Abdullah
2c73d47555 Bump @storybook/react-vite from 10.2.13 to 10.3.3 (#19232)
Bumps
[@storybook/react-vite](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/react-vite)
from 10.2.13 to 10.3.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/releases"><code>@​storybook/react-vite</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v10.3.3</h2>
<h2>10.3.3</h2>
<ul>
<li>Addon-Vitest: Streamline vite(st) config detection across init and
postinstall - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34193">#34193</a>,
thanks <a
href="https://github.com/valentinpalkovic"><code>@​valentinpalkovic</code></a>!</li>
</ul>
<h2>v10.3.2</h2>
<h2>10.3.2</h2>
<ul>
<li>CLI: Shorten CTA link messages - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34236">#34236</a>,
thanks <a
href="https://github.com/shilman"><code>@​shilman</code></a>!</li>
<li>React Native Web: Fix vite8 support by bumping vite-plugin-rnw - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34231">#34231</a>,
thanks <a
href="https://github.com/dannyhw"><code>@​dannyhw</code></a>!</li>
</ul>
<h2>v10.3.1</h2>
<h2>10.3.1</h2>
<ul>
<li>CLI: Use npm info to fetch versions in repro command - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34214">#34214</a>,
thanks <a
href="https://github.com/yannbf"><code>@​yannbf</code></a>!</li>
<li>Core: Prevent story-local viewport from persisting in URL - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34153">#34153</a>,
thanks <a
href="https://github.com/ghengeveld"><code>@​ghengeveld</code></a>!</li>
</ul>
<h2>v10.3.0</h2>
<h2>10.3.0</h2>
<p><em>&gt; Improved developer experience, AI-assisting tools, and
broader ecosystem support</em></p>
<p>Storybook 10.3 contains hundreds of fixes and improvements
including:</p>
<ul>
<li>🤖 Storybook MCP: Agentic component dev, docs, and test (Preview
release for React)</li>
<li> Vite 8 support</li>
<li>▲ Next.js 16.2 support</li>
<li>📝 ESLint 10 support</li>
<li>〰️ Addon Pseudo-States: Tailwind v4 support</li>
<li>🔧 Addon-Vitest: Simplified configuration - no more setup files
required</li>
<li> Numerous accessibility improvements across the UI</li>
</ul>
<!-- raw HTML omitted -->
<ul>
<li>A11y: Add ScrollArea prop focusable for when it has static children
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/33876">#33876</a>,
thanks <a
href="https://github.com/Sidnioulz"><code>@​Sidnioulz</code></a>!</li>
<li>A11y: Ensure popover dialogs have an ARIA label - <a
href="https://redirect.github.com/storybookjs/storybook/pull/33500">#33500</a>,
thanks <a
href="https://github.com/gayanMatch"><code>@​gayanMatch</code></a>!</li>
<li>A11y: Make resize handles for addon panel and sidebar accessible <a
href="https://redirect.github.com/storybookjs/storybook/pull/33980">#33980</a></li>
<li>A11y: Underline MDX links for WCAG SC 1.4.1 compliance - <a
href="https://redirect.github.com/storybookjs/storybook/pull/33139">#33139</a>,
thanks <a
href="https://github.com/NikhilChowdhury27"><code>@​NikhilChowdhury27</code></a>!</li>
<li>Actions: Add expandLevel parameter to configure tree depth - <a
href="https://redirect.github.com/storybookjs/storybook/pull/33977">#33977</a>,
thanks <a
href="https://github.com/mixelburg"><code>@​mixelburg</code></a>!</li>
<li>Actions: Fix HandlerFunction type to support async callback props -
<a
href="https://redirect.github.com/storybookjs/storybook/pull/33864">#33864</a>,
thanks <a
href="https://github.com/mixelburg"><code>@​mixelburg</code></a>!</li>
<li>Addon-Docs: Add React as optimizeDeps entry - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34176">#34176</a>,
thanks <a
href="https://github.com/valentinpalkovic"><code>@​valentinpalkovic</code></a>!</li>
<li>Addon-Docs: Add support for `sourceState: 'none'` to canvas block
parameters - <a
href="https://redirect.github.com/storybookjs/storybook/pull/33627">#33627</a>,
thanks <a
href="https://github.com/quisido"><code>@​quisido</code></a>!</li>
<li>Addon-docs: Restore `docs.components` overrides for doc blocks <a
href="https://redirect.github.com/storybookjs/storybook/pull/34111">#34111</a></li>
<li>Addon-Vitest: Add channel API to programmatically trigger test runs
- <a
href="https://redirect.github.com/storybookjs/storybook/pull/33206">#33206</a>,
thanks <a
href="https://github.com/JReinhold"><code>@​JReinhold</code></a>!</li>
<li>Addon-Vitest: Handle additional vitest config export patterns in
postinstall - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34106">#34106</a>,
thanks <a
href="https://github.com/copilot-swe-agent"><code>@​copilot-swe-agent</code></a>!</li>
<li>Addon-Vitest: Make Playwright `--with-deps` platform-aware to avoid
`sudo` prompt on Linux <a
href="https://redirect.github.com/storybookjs/storybook/pull/34121">#34121</a></li>
<li>Addon-Vitest: Refactor Vitest setup to eliminate the need for a
dedicated setup file - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34025">#34025</a>,
thanks <a
href="https://github.com/valentinpalkovic"><code>@​valentinpalkovic</code></a>!</li>
<li>Addon-Vitest: Support Vitest canaries - <a
href="https://redirect.github.com/storybookjs/storybook/pull/33833">#33833</a>,
thanks <a
href="https://github.com/valentinpalkovic"><code>@​valentinpalkovic</code></a>!</li>
<li>Angular: Add moduleResolution: bundler to tsconfig - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34085">#34085</a>,
thanks <a
href="https://github.com/valentinpalkovic"><code>@​valentinpalkovic</code></a>!</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md"><code>@​storybook/react-vite</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>10.3.3</h2>
<ul>
<li>Addon-Vitest: Streamline vite(st) config detection across init and
postinstall - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34193">#34193</a>,
thanks <a
href="https://github.com/valentinpalkovic"><code>@​valentinpalkovic</code></a>!</li>
</ul>
<h2>10.3.2</h2>
<ul>
<li>CLI: Shorten CTA link messages - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34236">#34236</a>,
thanks <a
href="https://github.com/shilman"><code>@​shilman</code></a>!</li>
<li>React Native Web: Fix vite8 support by bumping vite-plugin-rnw - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34231">#34231</a>,
thanks <a
href="https://github.com/dannyhw"><code>@​dannyhw</code></a>!</li>
</ul>
<h2>10.3.1</h2>
<ul>
<li>CLI: Use npm info to fetch versions in repro command - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34214">#34214</a>,
thanks <a
href="https://github.com/yannbf"><code>@​yannbf</code></a>!</li>
<li>Core: Prevent story-local viewport from persisting in URL - <a
href="https://redirect.github.com/storybookjs/storybook/pull/34153">#34153</a>,
thanks <a
href="https://github.com/ghengeveld"><code>@​ghengeveld</code></a>!</li>
</ul>
<h2>10.3.0</h2>
<p><em>&gt; Improved developer experience, AI-assisting tools, and
broader ecosystem support</em></p>
<p>Storybook 10.3 contains hundreds of fixes and improvements
including:</p>
<ul>
<li>🤖 Storybook MCP: Agentic component dev, docs, and test (Preview
release for React)</li>
<li> Vite 8 support</li>
<li>▲ Next.js 16.2 support</li>
<li>📝 ESLint 10 support</li>
<li>〰️ Addon Pseudo-States: Tailwind v4 support</li>
<li>🔧 Addon-Vitest: Simplified configuration - no more setup files
required</li>
<li> Numerous accessibility improvements across the UI</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/storybookjs/storybook/commit/b0acfb41eb86f7e167ffba404acade8c397681df"><code>b0acfb4</code></a>
Bump version from &quot;10.3.2&quot; to &quot;10.3.3&quot; [skip
ci]</li>
<li><a
href="https://github.com/storybookjs/storybook/commit/308656fe0f4c6d783b72e24390d6b26ce23e8a91"><code>308656f</code></a>
Bump version from &quot;10.3.1&quot; to &quot;10.3.2&quot; [skip
ci]</li>
<li><a
href="https://github.com/storybookjs/storybook/commit/24c2c2c3f2221844406694acc2241e6cdaeb51ac"><code>24c2c2c</code></a>
Bump version from &quot;10.3.0&quot; to &quot;10.3.1&quot; [skip
ci]</li>
<li><a
href="https://github.com/storybookjs/storybook/commit/06cb6a6874742c8815f29f650b4b8d0a5273b46e"><code>06cb6a6</code></a>
Bump version from &quot;10.3.0-beta.3&quot; to &quot;10.3.0&quot; [skip
ci]</li>
<li><a
href="https://github.com/storybookjs/storybook/commit/94b94304e47ed422010a061beb9f31c12c07d242"><code>94b9430</code></a>
Bump version from &quot;10.3.0-beta.2&quot; to &quot;10.3.0-beta.3&quot;
[skip ci]</li>
<li><a
href="https://github.com/storybookjs/storybook/commit/af5b7de899701eb55e511197dbb0420850156125"><code>af5b7de</code></a>
Bump version from &quot;10.3.0-beta.1&quot; to &quot;10.3.0-beta.2&quot;
[skip ci]</li>
<li><a
href="https://github.com/storybookjs/storybook/commit/a571619e5c16b91c3d9f7b52c74955804ef6287c"><code>a571619</code></a>
Bump version from &quot;10.3.0-beta.0&quot; to &quot;10.3.0-beta.1&quot;
[skip ci]</li>
<li><a
href="https://github.com/storybookjs/storybook/commit/546aece1ec7381700b603eece590c0048d16205d"><code>546aece</code></a>
Bump version from &quot;10.3.0-alpha.17&quot; to
&quot;10.3.0-beta.0&quot; [skip ci]</li>
<li><a
href="https://github.com/storybookjs/storybook/commit/ceda0b4de602b3cc5675684bcfbad66fab3601dc"><code>ceda0b4</code></a>
Bump version from &quot;10.3.0-alpha.16&quot; to
&quot;10.3.0-alpha.17&quot; [skip ci]</li>
<li><a
href="https://github.com/storybookjs/storybook/commit/1ed871cb53eff30e332b080c3d73ba0cd50acff3"><code>1ed871c</code></a>
Bump version from &quot;10.3.0-alpha.15&quot; to
&quot;10.3.0-alpha.16&quot; [skip ci]</li>
<li>Additional commits viewable in <a
href="https://github.com/storybookjs/storybook/commits/v10.3.3/code/frameworks/react-vite">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@storybook/react-vite&package-manager=npm_and_yarn&previous-version=10.2.13&new-version=10.3.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Abdullah <125115953+mabdullahabaid@users.noreply.github.com>
2026-04-02 08:49:11 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
6d5580c6fd Bump qs from 6.14.2 to 6.15.0 (#19233)
Bumps [qs](https://github.com/ljharb/qs) from 6.14.2 to 6.15.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ljharb/qs/blob/main/CHANGELOG.md">qs's
changelog</a>.</em></p>
<blockquote>
<h2><strong>6.15.0</strong></h2>
<ul>
<li>[New] <code>parse</code>: add <code>strictMerge</code> option to
wrap object/primitive conflicts in an array (<a
href="https://redirect.github.com/ljharb/qs/issues/425">#425</a>, <a
href="https://redirect.github.com/ljharb/qs/issues/122">#122</a>)</li>
<li>[Fix] <code>duplicates</code> option should not apply to bracket
notation keys (<a
href="https://redirect.github.com/ljharb/qs/issues/514">#514</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/ljharb/qs/commit/d9b4c66303375493c68c42d68e363e50b1753771"><code>d9b4c66</code></a>
v6.15.0</li>
<li><a
href="https://github.com/ljharb/qs/commit/cb41a545a32422ad3044584d3c4fa8f953552605"><code>cb41a54</code></a>
[New] <code>parse</code>: add <code>strictMerge</code> option to wrap
object/primitive conflicts in...</li>
<li><a
href="https://github.com/ljharb/qs/commit/88e15636da953397262bd3014ab8b0d17d5c8039"><code>88e1563</code></a>
[Fix] <code>duplicates</code> option should not apply to bracket
notation keys</li>
<li><a
href="https://github.com/ljharb/qs/commit/9d441d270486c3cc77f17289a9e0921c0f742aff"><code>9d441d2</code></a>
Merge backport release tags v6.0.6–v6.13.3 into main</li>
<li><a
href="https://github.com/ljharb/qs/commit/85cc8cac6b444c9b4cb1172a151ac8fdee0a0301"><code>85cc8ca</code></a>
v6.12.5</li>
<li><a
href="https://github.com/ljharb/qs/commit/ffc12aa71030f508ab28cccbb1987424abf52379"><code>ffc12aa</code></a>
v6.11.4</li>
<li><a
href="https://github.com/ljharb/qs/commit/0506b11e457f6b3847b1dcf65b5c11c0eaf5dfb9"><code>0506b11</code></a>
[actions] update reusable workflows</li>
<li><a
href="https://github.com/ljharb/qs/commit/6a37fafc75ce8a3d00ef611c9d7acfccc6ec449c"><code>6a37faf</code></a>
[actions] update reusable workflows</li>
<li><a
href="https://github.com/ljharb/qs/commit/8e8df5a3b147ec2f86830c2e3de1016a7ecbc18b"><code>8e8df5a</code></a>
[Fix] fix regressions from robustness refactor</li>
<li><a
href="https://github.com/ljharb/qs/commit/d60bab35a42b3c789d7a1461ea176eaee74eb751"><code>d60bab3</code></a>
v6.10.7</li>
<li>Additional commits viewable in <a
href="https://github.com/ljharb/qs/compare/v6.14.2...v6.15.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=qs&package-manager=npm_and_yarn&previous-version=6.14.2&new-version=6.15.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-02 08:35:51 +00:00
Raphaël BosiandGitHub 691c86a4a7 Fix front component not opening in side panel (#19238)
# PR Description

Fix branching priority in `useCommandMenuItemsFromBackend` so
non-headless front components are routed through
`FrontComponentCommandMenuItem` (which opens the side panel) instead of
always going through the `HeadlessCommandMenuItem` path.

# Video QA

## Before


https://github.com/user-attachments/assets/4449b849-ae71-4ca2-b22e-0efd62ad1b1b

## After


https://github.com/user-attachments/assets/d361d1d1-83fb-4588-a5da-d1bae8747954
2026-04-02 08:33:58 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1af7ac5fc4 Bump react-hotkeys-hook from 4.5.0 to 4.6.2 (#19231)
Bumps
[react-hotkeys-hook](https://github.com/JohannesKlauss/react-keymap-hook)
from 4.5.0 to 4.6.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/JohannesKlauss/react-keymap-hook/releases">react-hotkeys-hook's
releases</a>.</em></p>
<blockquote>
<h2>v4.6.2</h2>
<h2>What's Changed</h2>
<ul>
<li>Update advanced-usage.mdx by <a
href="https://github.com/VladimirTambovtsev"><code>@​VladimirTambovtsev</code></a>
in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1232">JohannesKlauss/react-hotkeys-hook#1232</a></li>
<li>feature(addEventListener): passthrough event listener options by <a
href="https://github.com/wiserockryan"><code>@​wiserockryan</code></a>
in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1234">JohannesKlauss/react-hotkeys-hook#1234</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/VladimirTambovtsev"><code>@​VladimirTambovtsev</code></a>
made their first contribution in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1232">JohannesKlauss/react-hotkeys-hook#1232</a></li>
<li><a
href="https://github.com/wiserockryan"><code>@​wiserockryan</code></a>
made their first contribution in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1234">JohannesKlauss/react-hotkeys-hook#1234</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/JohannesKlauss/react-hotkeys-hook/compare/v4.6.1...v4.6.2">https://github.com/JohannesKlauss/react-hotkeys-hook/compare/v4.6.1...v4.6.2</a></p>
<h2>v4.6.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Consider custom element when checking if event is by <a
href="https://github.com/HJK181"><code>@​HJK181</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1164">JohannesKlauss/react-hotkeys-hook#1164</a></li>
<li>Bump http-proxy-middleware from 2.0.6 to 2.0.7 in /documentation by
<a href="https://github.com/dependabot"><code>@​dependabot</code></a> in
<a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1217">JohannesKlauss/react-hotkeys-hook#1217</a></li>
<li>Bump express from 4.19.2 to 4.21.0 in /documentation by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1210">JohannesKlauss/react-hotkeys-hook#1210</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/HJK181"><code>@​HJK181</code></a> made
their first contribution in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1164">JohannesKlauss/react-hotkeys-hook#1164</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/JohannesKlauss/react-hotkeys-hook/compare/v4.6.0...v4.6.1">https://github.com/JohannesKlauss/react-hotkeys-hook/compare/v4.6.0...v4.6.1</a></p>
<h2>v4.6.0</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(deps): update all non-major dependencies by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1204">JohannesKlauss/react-hotkeys-hook#1204</a></li>
<li>Feat: Helps to identify which Shortcut was triggered exactly by <a
href="https://github.com/prostoandrei"><code>@​prostoandrei</code></a>
in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1219">JohannesKlauss/react-hotkeys-hook#1219</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/prostoandrei"><code>@​prostoandrei</code></a>
made their first contribution in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1219">JohannesKlauss/react-hotkeys-hook#1219</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/JohannesKlauss/react-hotkeys-hook/compare/v4.5.1...v4.6.0">https://github.com/JohannesKlauss/react-hotkeys-hook/compare/v4.5.1...v4.6.0</a></p>
<h2>v4.5.1</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(deps): update all non-major dependencies by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1136">JohannesKlauss/react-hotkeys-hook#1136</a></li>
<li>chore(deps): update dependency <code>@​types/react</code> to
v18.2.56 by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1140">JohannesKlauss/react-hotkeys-hook#1140</a></li>
<li>fix: example code in use-hotkeys docs by <a
href="https://github.com/jvn4dev"><code>@​jvn4dev</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1142">JohannesKlauss/react-hotkeys-hook#1142</a></li>
<li>chore(deps): update actions/setup-node action to v4 by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1141">JohannesKlauss/react-hotkeys-hook#1141</a></li>
<li>chore(deps): update actions/checkout action to v4 by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1137">JohannesKlauss/react-hotkeys-hook#1137</a></li>
<li>chore(deps): update all non-major dependencies by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1147">JohannesKlauss/react-hotkeys-hook#1147</a></li>
<li>chore(deps): update all non-major dependencies by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1149">JohannesKlauss/react-hotkeys-hook#1149</a></li>
<li>chore(deps): update all non-major dependencies by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1156">JohannesKlauss/react-hotkeys-hook#1156</a></li>
<li>chore(deps): update all non-major dependencies by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1158">JohannesKlauss/react-hotkeys-hook#1158</a></li>
<li>chore(deps): update all non-major dependencies by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1162">JohannesKlauss/react-hotkeys-hook#1162</a></li>
<li>chore(deps): update all non-major dependencies by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1166">JohannesKlauss/react-hotkeys-hook#1166</a></li>
<li>chore(deps): update dependency <code>@​types/react</code> to
v18.2.79 by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1169">JohannesKlauss/react-hotkeys-hook#1169</a></li>
<li>chore(deps): update all non-major dependencies by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1171">JohannesKlauss/react-hotkeys-hook#1171</a></li>
<li>chore(deps): update all non-major dependencies to v7.24.5 by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1173">JohannesKlauss/react-hotkeys-hook#1173</a></li>
<li>chore(deps): update dependency <code>@​types/react</code> to v18.3.2
by <a href="https://github.com/renovate"><code>@​renovate</code></a> in
<a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1175">JohannesKlauss/react-hotkeys-hook#1175</a></li>
<li>chore(deps): update all non-major dependencies by <a
href="https://github.com/renovate"><code>@​renovate</code></a> in <a
href="https://redirect.github.com/JohannesKlauss/react-hotkeys-hook/pull/1178">JohannesKlauss/react-hotkeys-hook#1178</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/JohannesKlauss/react-hotkeys-hook/commit/47f15a6554a60ea3ccaaf62c49f925295c852165"><code>47f15a6</code></a>
4.6.2</li>
<li><a
href="https://github.com/JohannesKlauss/react-hotkeys-hook/commit/bfe319bb5fea77e2ecd3ef7fdafe5c274ec1e371"><code>bfe319b</code></a>
Merge pull request <a
href="https://redirect.github.com/JohannesKlauss/react-keymap-hook/issues/1234">#1234</a>
from wiserockryan/feature/passthrough-event-listener...</li>
<li><a
href="https://github.com/JohannesKlauss/react-hotkeys-hook/commit/67b1f2e3d903365999f89b5aa8374d51d93a641c"><code>67b1f2e</code></a>
Merge pull request <a
href="https://redirect.github.com/JohannesKlauss/react-keymap-hook/issues/1232">#1232</a>
from VladimirTambovtsev/patch-1</li>
<li><a
href="https://github.com/JohannesKlauss/react-hotkeys-hook/commit/aa6ce063788e5b01cf0d806fb137c9a57f749bbe"><code>aa6ce06</code></a>
feature(addEventListener): fix removeEventListener and add abort signal
test</li>
<li><a
href="https://github.com/JohannesKlauss/react-hotkeys-hook/commit/e1cb7b41f2b95e195d413c765fbc4c16bb8652b4"><code>e1cb7b4</code></a>
feat(addEventListener): passthrough event listener options</li>
<li><a
href="https://github.com/JohannesKlauss/react-hotkeys-hook/commit/157b512253d2f5e128b790aae1d5c122df7d6f50"><code>157b512</code></a>
Update advanced-usage.mdx</li>
<li><a
href="https://github.com/JohannesKlauss/react-hotkeys-hook/commit/bc55a281f1d212d09de786aeb5cd236c58d9531d"><code>bc55a28</code></a>
4.6.1</li>
<li><a
href="https://github.com/JohannesKlauss/react-hotkeys-hook/commit/0e41a2ac4a3a7b01159632614b552f51726756cd"><code>0e41a2a</code></a>
Fix ts error</li>
<li><a
href="https://github.com/JohannesKlauss/react-hotkeys-hook/commit/1f95c28ee20dbf018a0493a2dba2495988e08398"><code>1f95c28</code></a>
Fix ts error</li>
<li><a
href="https://github.com/JohannesKlauss/react-hotkeys-hook/commit/4668ebb8c69c66dc61e4bae681c6daab3120474b"><code>4668ebb</code></a>
Merge pull request <a
href="https://redirect.github.com/JohannesKlauss/react-keymap-hook/issues/1210">#1210</a>
from JohannesKlauss/dependabot/npm_and_yarn/document...</li>
<li>Additional commits viewable in <a
href="https://github.com/JohannesKlauss/react-keymap-hook/compare/v4.5.0...v4.6.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=react-hotkeys-hook&package-manager=npm_and_yarn&previous-version=4.5.0&new-version=4.6.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-02 08:29:48 +00:00
72ac10fb7a i18n - translations (#19242)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-04-02 10:40:25 +02:00
986256f56d i18n - docs translations (#19240)
Created by Github action

Co-authored-by: github-actions <github-actions@twenty.com>
2026-04-02 10:39:32 +02:00
nitinandGitHub ade6ed9c32 [AI] agent node prompt tab new design + refactor (#19012) 2026-04-02 08:24:58 +00:00
nitinandGitHub 19c710b87f fix read only text editor color (#19223) 2026-04-02 10:23:46 +02:00
7991ce7823 i18n - translations (#19237)
Created by Github action

Co-authored-by: github-actions <github-actions@twenty.com>
2026-04-02 10:21:19 +02:00
fd7387928c feat: queue messages + replace AI SDK with GraphQL SSE subscription (#19203)
## Summary

- **Queue messages while streaming**: Messages sent during active AI
streaming are queued server-side and auto-flushed when the current
stream completes. Frontend renders queued messages optimistically in a
dedicated queue UI.
- **Drop `@ai-sdk/react` + `resumable-stream`**: Replace the dual HTTP
SSE + AI SDK client architecture with a single GraphQL SSE subscription
per thread. All events (token chunks, message persistence, queue
updates, errors) flow through Redis PubSub → GraphQL subscription.
- **Server-driven architecture**: The server decides whether to queue or
stream (via `POST /:threadId/message`). The frontend mirrors this
decision for optimistic rendering but defers to the server response.
- **Reuse AI SDK accumulation logic**: `readUIMessageStream` from the
`ai` package handles chunk-to-message accumulation on the frontend,
avoiding a custom 780-line accumulator.

## Key files

**Backend:**
- `agent-chat-event-publisher.service.ts` — publishes events to Redis
PubSub
- `agent-chat-subscription.resolver.ts` — GraphQL subscription resolver
- `stream-agent-chat.job.ts` — publishes chunks via PubSub instead of
resumable-stream
- `agent-chat.controller.ts` — unified `POST /:threadId/message`
endpoint

**Frontend:**
- `useAgentChatSubscription.ts` — subscribes to `onAgentChatEvent`,
bridges to `readUIMessageStream`
- `useAgentChat.ts` — send/stop/optimistic rendering (no more AI SDK)
- `AgentChatStreamSubscriptionEffect.tsx` — replaces
`AgentChatAiSdkStreamEffect.tsx`

## Test plan

- [ ] Send message on new thread → optimistic render, streaming response
appears
- [ ] Send message while streaming → queued instantly (no flash in main
thread)
- [ ] Queued message auto-flushes after current stream completes
- [ ] Remove queued message via queue UI
- [ ] Stop streaming mid-response
- [ ] Leave chat idle for several minutes → streaming still works after
(SSE client recycling)
- [ ] Token refresh during session → requests succeed (authenticated
fetch)
- [ ] Switch threads while streaming → clean subscription handoff


Made with [Cursor](https://cursor.com)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 10:10:13 +02:00
3733a5a763 i18n - translations (#19236)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-04-02 09:30:11 +02:00
WeikoandGitHub 0b2f4cdb57 Add delete widget action in fields widget side panel (#19167)
## Context
Add a new "Manage" section in FIELDS widget side panel with a "Delete
widget" action

Next step: Deleting a non-custom fields widget should be reversible
("Reset to default" followup)

<img width="1286" height="398" alt="Screenshot 2026-03-31 at 15 17 31"
src="https://github.com/user-attachments/assets/9ee63c14-52f1-470e-9112-4538271dc6fc"
/>
2026-04-02 07:15:19 +00:00
1622c87b7a i18n - docs translations (#19234)
Created by Github action

Co-authored-by: github-actions <github-actions@twenty.com>
2026-04-02 08:44:39 +02:00
Devessier d225d132f9 Merge remote-tracking branch 'origin/main' into rpl-front-components 2026-03-25 14:38:41 +01:00
Devessier 020000b3c5 fixup 2026-03-25 14:37:44 +01:00
Devessier 0a94f93f0c feat: scaffolding 2026-03-25 14:37:41 +01:00
532 changed files with 17950 additions and 7555 deletions
+6 -6
View File
@@ -82,11 +82,11 @@
"@sentry/types": "^8",
"@storybook-community/storybook-addon-cookie": "^5.0.0",
"@storybook/addon-coverage": "^3.0.0",
"@storybook/addon-docs": "^10.2.13",
"@storybook/addon-links": "^10.2.13",
"@storybook/addon-vitest": "^10.2.13",
"@storybook/addon-docs": "^10.3.3",
"@storybook/addon-links": "^10.3.3",
"@storybook/addon-vitest": "^10.3.3",
"@storybook/icons": "^2.0.1",
"@storybook/react-vite": "^10.2.13",
"@storybook/react-vite": "^10.3.3",
"@storybook/test-runner": "^0.24.2",
"@swc-node/register": "^1.11.1",
"@swc/cli": "^0.7.10",
@@ -154,9 +154,9 @@
"raw-loader": "^4.0.2",
"rimraf": "^5.0.5",
"source-map-support": "^0.5.20",
"storybook": "^10.2.13",
"storybook": "^10.3.3",
"storybook-addon-mock-date": "2.0.0",
"storybook-addon-pseudo-states": "^10.2.13",
"storybook-addon-pseudo-states": "^10.3.3",
"supertest": "^6.1.3",
"ts-jest": "^29.1.1",
"ts-loader": "^9.2.3",
@@ -1732,11 +1732,16 @@ enum FeatureFlagKey {
IS_DIRECT_GRAPHQL_EXECUTION_ENABLED
IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED
IS_CONNECTED_ACCOUNT_MIGRATED
IS_GRAPHQL_QUERY_TIMING_ENABLED
IS_RECORD_TABLE_WIDGET_ENABLED
IS_DATASOURCE_MIGRATED
}
type ClientConfigMaintenanceMode {
startAt: DateTime!
endAt: DateTime!
link: String
}
type ClientConfig {
appVersion: String
authProviders: AuthProviders!
@@ -1765,6 +1770,8 @@ type ClientConfig {
calendarBookingPageId: String
isCloudflareIntegrationEnabled: Boolean!
isClickHouseConfigured: Boolean!
isWorkspaceSchemaDDLLocked: Boolean!
maintenance: ClientConfigMaintenanceMode
}
type UsageBreakdownItem {
@@ -1961,6 +1968,12 @@ type AdminPanelHealthServiceData {
queues: [AdminPanelWorkerQueueHealth!]
}
type MaintenanceMode {
startAt: DateTime!
endAt: DateTime!
link: String
}
type ModelsDevModelSuggestion {
modelId: String!
name: String!
@@ -2267,6 +2280,33 @@ type FieldConnection {
edges: [FieldEdge!]!
}
type AuthToken {
token: String!
expiresAt: DateTime!
}
type ApplicationTokenPair {
applicationAccessToken: AuthToken!
applicationRefreshToken: AuthToken!
}
type FrontComponent {
id: UUID!
name: String!
description: String
sourceComponentPath: String!
builtComponentPath: String!
componentName: String!
builtComponentChecksum: String!
universalIdentifier: UUID
applicationId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
isHeadless: Boolean!
usesSdkClient: Boolean!
applicationTokenPair: ApplicationTokenPair
}
type LogicFunctionLogs {
"""Execution Logs"""
logs: String!
@@ -2289,11 +2329,6 @@ type AuthorizeApp {
redirectUrl: String!
}
type AuthToken {
token: String!
expiresAt: DateTime!
}
type AuthTokenPair {
accessOrWorkspaceAgnosticToken: AuthToken!
refreshToken: AuthToken!
@@ -2402,11 +2437,6 @@ type WorkspaceMigration {
actions: JSON!
}
type ApplicationTokenPair {
applicationAccessToken: AuthToken!
applicationRefreshToken: AuthToken!
}
type File {
id: UUID!
path: String!
@@ -2526,23 +2556,6 @@ type PostgresCredentials {
workspaceId: UUID!
}
type FrontComponent {
id: UUID!
name: String!
description: String
sourceComponentPath: String!
builtComponentPath: String!
componentName: String!
builtComponentChecksum: String!
universalIdentifier: UUID
applicationId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
isHeadless: Boolean!
usesSdkClient: Boolean!
applicationTokenPair: ApplicationTokenPair
}
type CommandMenuItem {
id: UUID!
workflowVersionId: UUID
@@ -2567,20 +2580,15 @@ enum EngineComponentKey {
NAVIGATE_TO_NEXT_RECORD
NAVIGATE_TO_PREVIOUS_RECORD
CREATE_NEW_RECORD
DELETE_SINGLE_RECORD
DELETE_MULTIPLE_RECORDS
RESTORE_SINGLE_RECORD
RESTORE_MULTIPLE_RECORDS
DESTROY_SINGLE_RECORD
DESTROY_MULTIPLE_RECORDS
DELETE_RECORDS
RESTORE_RECORDS
DESTROY_RECORDS
ADD_TO_FAVORITES
REMOVE_FROM_FAVORITES
EXPORT_NOTE_TO_PDF
EXPORT_FROM_RECORD_INDEX
EXPORT_FROM_RECORD_SHOW
EXPORT_RECORDS
UPDATE_MULTIPLE_RECORDS
MERGE_MULTIPLE_RECORDS
EXPORT_MULTIPLE_RECORDS
IMPORT_RECORDS
EXPORT_VIEW
SEE_DELETED_RECORDS
@@ -2623,6 +2631,15 @@ enum EngineComponentKey {
VIEW_PREVIOUS_AI_CHATS
TRIGGER_WORKFLOW_VERSION
FRONT_COMPONENT_RENDERER
DELETE_SINGLE_RECORD
DELETE_MULTIPLE_RECORDS
RESTORE_SINGLE_RECORD
RESTORE_MULTIPLE_RECORDS
DESTROY_SINGLE_RECORD
DESTROY_MULTIPLE_RECORDS
EXPORT_FROM_RECORD_INDEX
EXPORT_FROM_RECORD_SHOW
EXPORT_MULTIPLE_RECORDS
}
enum CommandMenuItemAvailabilityType {
@@ -2787,10 +2804,12 @@ type AgentChatThread {
type AgentMessage {
id: UUID!
threadId: UUID!
turnId: UUID!
turnId: UUID
agentId: UUID
role: String!
status: String!
parts: [AgentMessagePart!]!
processedAt: DateTime
createdAt: DateTime!
}
@@ -2805,6 +2824,22 @@ type AISystemPromptPreview {
estimatedTokenCount: Int!
}
type ChatStreamCatchupChunks {
chunks: [JSON!]!
maxSeq: Int!
}
type SendChatMessageResult {
messageId: String!
queued: Boolean!
streamId: String
}
type AgentChatEvent {
threadId: String!
event: JSON!
}
type AgentChatThreadEdge {
"""The node containing the AgentChatThread"""
node: AgentChatThread!
@@ -3152,6 +3187,7 @@ type Query {
minimalMetadata: MinimalMetadata!
chatThread(id: UUID!): AgentChatThread!
chatMessages(threadId: UUID!): [AgentMessage!]!
chatStreamCatchupChunks(threadId: UUID!): ChatStreamCatchupChunks!
getAISystemPromptPreview: AISystemPromptPreview!
skills: [Skill!]!
skill(id: UUID!): Skill
@@ -3202,6 +3238,7 @@ type Query {
getModelsDevProviders: [ModelsDevProviderSuggestion!]!
getModelsDevSuggestions(providerType: String!): [ModelsDevModelSuggestion!]!
getAdminAiUsageByWorkspace(periodStart: DateTime, periodEnd: DateTime): [UsageBreakdownItem!]!
getMaintenanceMode: MaintenanceMode
getUsageAnalytics(input: UsageAnalyticsInput): UsageAnalytics!
getPostgresCredentials: PostgresCredentials
findManyPublicDomains: [PublicDomain!]!
@@ -3452,6 +3489,9 @@ type Mutation {
updateWebhook(input: UpdateWebhookInput!): Webhook!
deleteWebhook(id: UUID!): Webhook!
createChatThread: AgentChatThread!
sendChatMessage(threadId: UUID!, text: String!, messageId: UUID!, browsingContext: JSON, modelId: String): SendChatMessageResult!
stopAgentChatStream(threadId: UUID!): Boolean!
deleteQueuedChatMessage(messageId: UUID!): Boolean!
createSkill(input: CreateSkillInput!): Skill!
updateSkill(input: UpdateSkillInput!): Skill!
deleteSkill(id: UUID!): Skill!
@@ -3519,6 +3559,8 @@ type Mutation {
removeAiProvider(providerName: String!): Boolean!
addModelToProvider(providerName: String!, modelConfig: JSON!): Boolean!
removeModelFromProvider(providerName: String!, modelName: String!): Boolean!
setMaintenanceMode(startAt: DateTime!, endAt: DateTime!, link: String): Boolean!
clearMaintenanceMode: Boolean!
enablePostgresProxy: PostgresCredentials!
disablePostgresProxy: PostgresCredentials!
createPublicDomain(domain: String!): PublicDomain!
@@ -4541,6 +4583,7 @@ enum FileFolder {
type Subscription {
onEventSubscription(eventStreamId: String!): EventSubscription
logicFunctionLogs(input: LogicFunctionLogsInput!): LogicFunctionLogs!
onAgentChatEvent(threadId: UUID!): AgentChatEvent!
}
input LogicFunctionLogsInput {
@@ -1422,7 +1422,14 @@ export interface PublicFeatureFlag {
__typename: 'PublicFeatureFlag'
}
export type FeatureFlagKey = 'IS_UNIQUE_INDEXES_ENABLED' | 'IS_JSON_FILTER_ENABLED' | 'IS_AI_ENABLED' | 'IS_COMMAND_MENU_ITEM_ENABLED' | 'IS_MARKETPLACE_ENABLED' | 'IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED' | 'IS_PUBLIC_DOMAIN_ENABLED' | 'IS_EMAILING_DOMAIN_ENABLED' | 'IS_JUNCTION_RELATIONS_ENABLED' | 'IS_DRAFT_EMAIL_ENABLED' | 'IS_USAGE_ANALYTICS_ENABLED' | 'IS_RICH_TEXT_V1_MIGRATED' | 'IS_DIRECT_GRAPHQL_EXECUTION_ENABLED' | 'IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED' | 'IS_CONNECTED_ACCOUNT_MIGRATED' | 'IS_GRAPHQL_QUERY_TIMING_ENABLED' | 'IS_RECORD_TABLE_WIDGET_ENABLED' | 'IS_DATASOURCE_MIGRATED'
export type FeatureFlagKey = 'IS_UNIQUE_INDEXES_ENABLED' | 'IS_JSON_FILTER_ENABLED' | 'IS_AI_ENABLED' | 'IS_COMMAND_MENU_ITEM_ENABLED' | 'IS_MARKETPLACE_ENABLED' | 'IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED' | 'IS_PUBLIC_DOMAIN_ENABLED' | 'IS_EMAILING_DOMAIN_ENABLED' | 'IS_JUNCTION_RELATIONS_ENABLED' | 'IS_DRAFT_EMAIL_ENABLED' | 'IS_USAGE_ANALYTICS_ENABLED' | 'IS_RICH_TEXT_V1_MIGRATED' | 'IS_DIRECT_GRAPHQL_EXECUTION_ENABLED' | 'IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED' | 'IS_CONNECTED_ACCOUNT_MIGRATED' | 'IS_RECORD_TABLE_WIDGET_ENABLED' | 'IS_DATASOURCE_MIGRATED'
export interface ClientConfigMaintenanceMode {
startAt: Scalars['DateTime']
endAt: Scalars['DateTime']
link?: Scalars['String']
__typename: 'ClientConfigMaintenanceMode'
}
export interface ClientConfig {
appVersion?: Scalars['String']
@@ -1452,6 +1459,8 @@ export interface ClientConfig {
calendarBookingPageId?: Scalars['String']
isCloudflareIntegrationEnabled: Scalars['Boolean']
isClickHouseConfigured: Scalars['Boolean']
isWorkspaceSchemaDDLLocked: Scalars['Boolean']
maintenance?: ClientConfigMaintenanceMode
__typename: 'ClientConfig'
}
@@ -1621,6 +1630,13 @@ export interface AdminPanelHealthServiceData {
__typename: 'AdminPanelHealthServiceData'
}
export interface MaintenanceMode {
startAt: Scalars['DateTime']
endAt: Scalars['DateTime']
link?: Scalars['String']
__typename: 'MaintenanceMode'
}
export interface ModelsDevModelSuggestion {
modelId: Scalars['String']
name: Scalars['String']
@@ -1939,6 +1955,36 @@ export interface FieldConnection {
__typename: 'FieldConnection'
}
export interface AuthToken {
token: Scalars['String']
expiresAt: Scalars['DateTime']
__typename: 'AuthToken'
}
export interface ApplicationTokenPair {
applicationAccessToken: AuthToken
applicationRefreshToken: AuthToken
__typename: 'ApplicationTokenPair'
}
export interface FrontComponent {
id: Scalars['UUID']
name: Scalars['String']
description?: Scalars['String']
sourceComponentPath: Scalars['String']
builtComponentPath: Scalars['String']
componentName: Scalars['String']
builtComponentChecksum: Scalars['String']
universalIdentifier?: Scalars['UUID']
applicationId: Scalars['UUID']
createdAt: Scalars['DateTime']
updatedAt: Scalars['DateTime']
isHeadless: Scalars['Boolean']
usesSdkClient: Scalars['Boolean']
applicationTokenPair?: ApplicationTokenPair
__typename: 'FrontComponent'
}
export interface LogicFunctionLogs {
/** Execution Logs */
logs: Scalars['String']
@@ -1966,12 +2012,6 @@ export interface AuthorizeApp {
__typename: 'AuthorizeApp'
}
export interface AuthToken {
token: Scalars['String']
expiresAt: Scalars['DateTime']
__typename: 'AuthToken'
}
export interface AuthTokenPair {
accessOrWorkspaceAgnosticToken: AuthToken
refreshToken: AuthToken
@@ -2101,12 +2141,6 @@ export interface WorkspaceMigration {
__typename: 'WorkspaceMigration'
}
export interface ApplicationTokenPair {
applicationAccessToken: AuthToken
applicationRefreshToken: AuthToken
__typename: 'ApplicationTokenPair'
}
export interface File {
id: Scalars['UUID']
path: Scalars['String']
@@ -2233,24 +2267,6 @@ export interface PostgresCredentials {
__typename: 'PostgresCredentials'
}
export interface FrontComponent {
id: Scalars['UUID']
name: Scalars['String']
description?: Scalars['String']
sourceComponentPath: Scalars['String']
builtComponentPath: Scalars['String']
componentName: Scalars['String']
builtComponentChecksum: Scalars['String']
universalIdentifier?: Scalars['UUID']
applicationId: Scalars['UUID']
createdAt: Scalars['DateTime']
updatedAt: Scalars['DateTime']
isHeadless: Scalars['Boolean']
usesSdkClient: Scalars['Boolean']
applicationTokenPair?: ApplicationTokenPair
__typename: 'FrontComponent'
}
export interface CommandMenuItem {
id: Scalars['UUID']
workflowVersionId?: Scalars['UUID']
@@ -2272,7 +2288,7 @@ export interface CommandMenuItem {
__typename: 'CommandMenuItem'
}
export type EngineComponentKey = 'NAVIGATE_TO_NEXT_RECORD' | 'NAVIGATE_TO_PREVIOUS_RECORD' | 'CREATE_NEW_RECORD' | 'DELETE_SINGLE_RECORD' | 'DELETE_MULTIPLE_RECORDS' | 'RESTORE_SINGLE_RECORD' | 'RESTORE_MULTIPLE_RECORDS' | 'DESTROY_SINGLE_RECORD' | 'DESTROY_MULTIPLE_RECORDS' | 'ADD_TO_FAVORITES' | 'REMOVE_FROM_FAVORITES' | 'EXPORT_NOTE_TO_PDF' | 'EXPORT_FROM_RECORD_INDEX' | 'EXPORT_FROM_RECORD_SHOW' | 'UPDATE_MULTIPLE_RECORDS' | 'MERGE_MULTIPLE_RECORDS' | 'EXPORT_MULTIPLE_RECORDS' | 'IMPORT_RECORDS' | 'EXPORT_VIEW' | 'SEE_DELETED_RECORDS' | 'CREATE_NEW_VIEW' | 'HIDE_DELETED_RECORDS' | 'GO_TO_PEOPLE' | 'GO_TO_COMPANIES' | 'GO_TO_DASHBOARDS' | 'GO_TO_OPPORTUNITIES' | 'GO_TO_SETTINGS' | 'GO_TO_TASKS' | 'GO_TO_NOTES' | 'EDIT_RECORD_PAGE_LAYOUT' | 'EDIT_DASHBOARD_LAYOUT' | 'SAVE_DASHBOARD_LAYOUT' | 'CANCEL_DASHBOARD_LAYOUT' | 'DUPLICATE_DASHBOARD' | 'GO_TO_WORKFLOWS' | 'ACTIVATE_WORKFLOW' | 'DEACTIVATE_WORKFLOW' | 'DISCARD_DRAFT_WORKFLOW' | 'TEST_WORKFLOW' | 'SEE_ACTIVE_VERSION_WORKFLOW' | 'SEE_RUNS_WORKFLOW' | 'SEE_VERSIONS_WORKFLOW' | 'ADD_NODE_WORKFLOW' | 'TIDY_UP_WORKFLOW' | 'DUPLICATE_WORKFLOW' | 'GO_TO_RUNS' | 'SEE_VERSION_WORKFLOW_RUN' | 'SEE_WORKFLOW_WORKFLOW_RUN' | 'STOP_WORKFLOW_RUN' | 'SEE_RUNS_WORKFLOW_VERSION' | 'SEE_WORKFLOW_WORKFLOW_VERSION' | 'USE_AS_DRAFT_WORKFLOW_VERSION' | 'SEE_VERSIONS_WORKFLOW_VERSION' | 'SEARCH_RECORDS' | 'SEARCH_RECORDS_FALLBACK' | 'ASK_AI' | 'VIEW_PREVIOUS_AI_CHATS' | 'TRIGGER_WORKFLOW_VERSION' | 'FRONT_COMPONENT_RENDERER'
export type EngineComponentKey = 'NAVIGATE_TO_NEXT_RECORD' | 'NAVIGATE_TO_PREVIOUS_RECORD' | 'CREATE_NEW_RECORD' | 'DELETE_RECORDS' | 'RESTORE_RECORDS' | 'DESTROY_RECORDS' | 'ADD_TO_FAVORITES' | 'REMOVE_FROM_FAVORITES' | 'EXPORT_NOTE_TO_PDF' | 'EXPORT_RECORDS' | 'UPDATE_MULTIPLE_RECORDS' | 'MERGE_MULTIPLE_RECORDS' | 'IMPORT_RECORDS' | 'EXPORT_VIEW' | 'SEE_DELETED_RECORDS' | 'CREATE_NEW_VIEW' | 'HIDE_DELETED_RECORDS' | 'GO_TO_PEOPLE' | 'GO_TO_COMPANIES' | 'GO_TO_DASHBOARDS' | 'GO_TO_OPPORTUNITIES' | 'GO_TO_SETTINGS' | 'GO_TO_TASKS' | 'GO_TO_NOTES' | 'EDIT_RECORD_PAGE_LAYOUT' | 'EDIT_DASHBOARD_LAYOUT' | 'SAVE_DASHBOARD_LAYOUT' | 'CANCEL_DASHBOARD_LAYOUT' | 'DUPLICATE_DASHBOARD' | 'GO_TO_WORKFLOWS' | 'ACTIVATE_WORKFLOW' | 'DEACTIVATE_WORKFLOW' | 'DISCARD_DRAFT_WORKFLOW' | 'TEST_WORKFLOW' | 'SEE_ACTIVE_VERSION_WORKFLOW' | 'SEE_RUNS_WORKFLOW' | 'SEE_VERSIONS_WORKFLOW' | 'ADD_NODE_WORKFLOW' | 'TIDY_UP_WORKFLOW' | 'DUPLICATE_WORKFLOW' | 'GO_TO_RUNS' | 'SEE_VERSION_WORKFLOW_RUN' | 'SEE_WORKFLOW_WORKFLOW_RUN' | 'STOP_WORKFLOW_RUN' | 'SEE_RUNS_WORKFLOW_VERSION' | 'SEE_WORKFLOW_WORKFLOW_VERSION' | 'USE_AS_DRAFT_WORKFLOW_VERSION' | 'SEE_VERSIONS_WORKFLOW_VERSION' | 'SEARCH_RECORDS' | 'SEARCH_RECORDS_FALLBACK' | 'ASK_AI' | 'VIEW_PREVIOUS_AI_CHATS' | 'TRIGGER_WORKFLOW_VERSION' | 'FRONT_COMPONENT_RENDERER' | 'DELETE_SINGLE_RECORD' | 'DELETE_MULTIPLE_RECORDS' | 'RESTORE_SINGLE_RECORD' | 'RESTORE_MULTIPLE_RECORDS' | 'DESTROY_SINGLE_RECORD' | 'DESTROY_MULTIPLE_RECORDS' | 'EXPORT_FROM_RECORD_INDEX' | 'EXPORT_FROM_RECORD_SHOW' | 'EXPORT_MULTIPLE_RECORDS'
export type CommandMenuItemAvailabilityType = 'GLOBAL' | 'RECORD_SELECTION' | 'FALLBACK'
@@ -2448,10 +2464,12 @@ export interface AgentChatThread {
export interface AgentMessage {
id: Scalars['UUID']
threadId: Scalars['UUID']
turnId: Scalars['UUID']
turnId?: Scalars['UUID']
agentId?: Scalars['UUID']
role: Scalars['String']
status: Scalars['String']
parts: AgentMessagePart[]
processedAt?: Scalars['DateTime']
createdAt: Scalars['DateTime']
__typename: 'AgentMessage'
}
@@ -2469,6 +2487,25 @@ export interface AISystemPromptPreview {
__typename: 'AISystemPromptPreview'
}
export interface ChatStreamCatchupChunks {
chunks: Scalars['JSON'][]
maxSeq: Scalars['Int']
__typename: 'ChatStreamCatchupChunks'
}
export interface SendChatMessageResult {
messageId: Scalars['String']
queued: Scalars['Boolean']
streamId?: Scalars['String']
__typename: 'SendChatMessageResult'
}
export interface AgentChatEvent {
threadId: Scalars['String']
event: Scalars['JSON']
__typename: 'AgentChatEvent'
}
export interface AgentChatThreadEdge {
/** The node containing the AgentChatThread */
node: AgentChatThread
@@ -2713,6 +2750,7 @@ export interface Query {
minimalMetadata: MinimalMetadata
chatThread: AgentChatThread
chatMessages: AgentMessage[]
chatStreamCatchupChunks: ChatStreamCatchupChunks
getAISystemPromptPreview: AISystemPromptPreview
skills: Skill[]
skill?: Skill
@@ -2754,6 +2792,7 @@ export interface Query {
getModelsDevProviders: ModelsDevProviderSuggestion[]
getModelsDevSuggestions: ModelsDevModelSuggestion[]
getAdminAiUsageByWorkspace: UsageBreakdownItem[]
getMaintenanceMode?: MaintenanceMode
getUsageAnalytics: UsageAnalytics
getPostgresCredentials?: PostgresCredentials
findManyPublicDomains: PublicDomain[]
@@ -2899,6 +2938,9 @@ export interface Mutation {
updateWebhook: Webhook
deleteWebhook: Webhook
createChatThread: AgentChatThread
sendChatMessage: SendChatMessageResult
stopAgentChatStream: Scalars['Boolean']
deleteQueuedChatMessage: Scalars['Boolean']
createSkill: Skill
updateSkill: Skill
deleteSkill: Skill
@@ -2966,6 +3008,8 @@ export interface Mutation {
removeAiProvider: Scalars['Boolean']
addModelToProvider: Scalars['Boolean']
removeModelFromProvider: Scalars['Boolean']
setMaintenanceMode: Scalars['Boolean']
clearMaintenanceMode: Scalars['Boolean']
enablePostgresProxy: PostgresCredentials
disablePostgresProxy: PostgresCredentials
createPublicDomain: PublicDomain
@@ -3001,6 +3045,7 @@ export type FileFolder = 'ProfilePicture' | 'WorkspaceLogo' | 'Attachment' | 'Pe
export interface Subscription {
onEventSubscription?: EventSubscription
logicFunctionLogs: LogicFunctionLogs
onAgentChatEvent: AgentChatEvent
__typename: 'Subscription'
}
@@ -4482,6 +4527,14 @@ export interface PublicFeatureFlagGenqlSelection{
__scalar?: boolean | number
}
export interface ClientConfigMaintenanceModeGenqlSelection{
startAt?: boolean | number
endAt?: boolean | number
link?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface ClientConfigGenqlSelection{
appVersion?: boolean | number
authProviders?: AuthProvidersGenqlSelection
@@ -4510,6 +4563,8 @@ export interface ClientConfigGenqlSelection{
calendarBookingPageId?: boolean | number
isCloudflareIntegrationEnabled?: boolean | number
isClickHouseConfigured?: boolean | number
isWorkspaceSchemaDDLLocked?: boolean | number
maintenance?: ClientConfigMaintenanceModeGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
@@ -4685,6 +4740,14 @@ export interface AdminPanelHealthServiceDataGenqlSelection{
__scalar?: boolean | number
}
export interface MaintenanceModeGenqlSelection{
startAt?: boolean | number
endAt?: boolean | number
link?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface ModelsDevModelSuggestionGenqlSelection{
modelId?: boolean | number
name?: boolean | number
@@ -5034,6 +5097,39 @@ export interface FieldConnectionGenqlSelection{
__scalar?: boolean | number
}
export interface AuthTokenGenqlSelection{
token?: boolean | number
expiresAt?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface ApplicationTokenPairGenqlSelection{
applicationAccessToken?: AuthTokenGenqlSelection
applicationRefreshToken?: AuthTokenGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
export interface FrontComponentGenqlSelection{
id?: boolean | number
name?: boolean | number
description?: boolean | number
sourceComponentPath?: boolean | number
builtComponentPath?: boolean | number
componentName?: boolean | number
builtComponentChecksum?: boolean | number
universalIdentifier?: boolean | number
applicationId?: boolean | number
createdAt?: boolean | number
updatedAt?: boolean | number
isHeadless?: boolean | number
usesSdkClient?: boolean | number
applicationTokenPair?: ApplicationTokenPairGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
export interface LogicFunctionLogsGenqlSelection{
/** Execution Logs */
logs?: boolean | number
@@ -5066,13 +5162,6 @@ export interface AuthorizeAppGenqlSelection{
__scalar?: boolean | number
}
export interface AuthTokenGenqlSelection{
token?: boolean | number
expiresAt?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface AuthTokenPairGenqlSelection{
accessOrWorkspaceAgnosticToken?: AuthTokenGenqlSelection
refreshToken?: AuthTokenGenqlSelection
@@ -5223,13 +5312,6 @@ export interface WorkspaceMigrationGenqlSelection{
__scalar?: boolean | number
}
export interface ApplicationTokenPairGenqlSelection{
applicationAccessToken?: AuthTokenGenqlSelection
applicationRefreshToken?: AuthTokenGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
export interface FileGenqlSelection{
id?: boolean | number
path?: boolean | number
@@ -5366,25 +5448,6 @@ export interface PostgresCredentialsGenqlSelection{
__scalar?: boolean | number
}
export interface FrontComponentGenqlSelection{
id?: boolean | number
name?: boolean | number
description?: boolean | number
sourceComponentPath?: boolean | number
builtComponentPath?: boolean | number
componentName?: boolean | number
builtComponentChecksum?: boolean | number
universalIdentifier?: boolean | number
applicationId?: boolean | number
createdAt?: boolean | number
updatedAt?: boolean | number
isHeadless?: boolean | number
usesSdkClient?: boolean | number
applicationTokenPair?: ApplicationTokenPairGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
export interface CommandMenuItemGenqlSelection{
id?: boolean | number
workflowVersionId?: boolean | number
@@ -5598,7 +5661,9 @@ export interface AgentMessageGenqlSelection{
turnId?: boolean | number
agentId?: boolean | number
role?: boolean | number
status?: boolean | number
parts?: AgentMessagePartGenqlSelection
processedAt?: boolean | number
createdAt?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
@@ -5619,6 +5684,28 @@ export interface AISystemPromptPreviewGenqlSelection{
__scalar?: boolean | number
}
export interface ChatStreamCatchupChunksGenqlSelection{
chunks?: boolean | number
maxSeq?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface SendChatMessageResultGenqlSelection{
messageId?: boolean | number
queued?: boolean | number
streamId?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface AgentChatEventGenqlSelection{
threadId?: boolean | number
event?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface AgentChatThreadEdgeGenqlSelection{
/** The node containing the AgentChatThread */
node?: AgentChatThreadGenqlSelection
@@ -5868,6 +5955,7 @@ export interface QueryGenqlSelection{
minimalMetadata?: MinimalMetadataGenqlSelection
chatThread?: (AgentChatThreadGenqlSelection & { __args: {id: Scalars['UUID']} })
chatMessages?: (AgentMessageGenqlSelection & { __args: {threadId: Scalars['UUID']} })
chatStreamCatchupChunks?: (ChatStreamCatchupChunksGenqlSelection & { __args: {threadId: Scalars['UUID']} })
getAISystemPromptPreview?: AISystemPromptPreviewGenqlSelection
skills?: SkillGenqlSelection
skill?: (SkillGenqlSelection & { __args: {id: Scalars['UUID']} })
@@ -5915,6 +6003,7 @@ export interface QueryGenqlSelection{
getModelsDevProviders?: ModelsDevProviderSuggestionGenqlSelection
getModelsDevSuggestions?: (ModelsDevModelSuggestionGenqlSelection & { __args: {providerType: Scalars['String']} })
getAdminAiUsageByWorkspace?: (UsageBreakdownItemGenqlSelection & { __args?: {periodStart?: (Scalars['DateTime'] | null), periodEnd?: (Scalars['DateTime'] | null)} })
getMaintenanceMode?: MaintenanceModeGenqlSelection
getUsageAnalytics?: (UsageAnalyticsGenqlSelection & { __args?: {input?: (UsageAnalyticsInput | null)} })
getPostgresCredentials?: PostgresCredentialsGenqlSelection
findManyPublicDomains?: PublicDomainGenqlSelection
@@ -6079,6 +6168,9 @@ export interface MutationGenqlSelection{
updateWebhook?: (WebhookGenqlSelection & { __args: {input: UpdateWebhookInput} })
deleteWebhook?: (WebhookGenqlSelection & { __args: {id: Scalars['UUID']} })
createChatThread?: AgentChatThreadGenqlSelection
sendChatMessage?: (SendChatMessageResultGenqlSelection & { __args: {threadId: Scalars['UUID'], text: Scalars['String'], messageId: Scalars['UUID'], browsingContext?: (Scalars['JSON'] | null), modelId?: (Scalars['String'] | null)} })
stopAgentChatStream?: { __args: {threadId: Scalars['UUID']} }
deleteQueuedChatMessage?: { __args: {messageId: Scalars['UUID']} }
createSkill?: (SkillGenqlSelection & { __args: {input: CreateSkillInput} })
updateSkill?: (SkillGenqlSelection & { __args: {input: UpdateSkillInput} })
deleteSkill?: (SkillGenqlSelection & { __args: {id: Scalars['UUID']} })
@@ -6146,6 +6238,8 @@ export interface MutationGenqlSelection{
removeAiProvider?: { __args: {providerName: Scalars['String']} }
addModelToProvider?: { __args: {providerName: Scalars['String'], modelConfig: Scalars['JSON']} }
removeModelFromProvider?: { __args: {providerName: Scalars['String'], modelName: Scalars['String']} }
setMaintenanceMode?: { __args: {startAt: Scalars['DateTime'], endAt: Scalars['DateTime'], link?: (Scalars['String'] | null)} }
clearMaintenanceMode?: boolean | number
enablePostgresProxy?: PostgresCredentialsGenqlSelection
disablePostgresProxy?: PostgresCredentialsGenqlSelection
createPublicDomain?: (PublicDomainGenqlSelection & { __args: {domain: Scalars['String']} })
@@ -6496,6 +6590,7 @@ export interface WorkspaceMigrationDeleteActionInput {type: WorkspaceMigrationAc
export interface SubscriptionGenqlSelection{
onEventSubscription?: (EventSubscriptionGenqlSelection & { __args: {eventStreamId: Scalars['String']} })
logicFunctionLogs?: (LogicFunctionLogsGenqlSelection & { __args: {input: LogicFunctionLogsInput} })
onAgentChatEvent?: (AgentChatEventGenqlSelection & { __args: {threadId: Scalars['UUID']} })
__typename?: boolean | number
__scalar?: boolean | number
}
@@ -7447,6 +7542,14 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const ClientConfigMaintenanceMode_possibleTypes: string[] = ['ClientConfigMaintenanceMode']
export const isClientConfigMaintenanceMode = (obj?: { __typename?: any } | null): obj is ClientConfigMaintenanceMode => {
if (!obj?.__typename) throw new Error('__typename is missing in "isClientConfigMaintenanceMode"')
return ClientConfigMaintenanceMode_possibleTypes.includes(obj.__typename)
}
const ClientConfig_possibleTypes: string[] = ['ClientConfig']
export const isClientConfig = (obj?: { __typename?: any } | null): obj is ClientConfig => {
if (!obj?.__typename) throw new Error('__typename is missing in "isClientConfig"')
@@ -7607,6 +7710,14 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const MaintenanceMode_possibleTypes: string[] = ['MaintenanceMode']
export const isMaintenanceMode = (obj?: { __typename?: any } | null): obj is MaintenanceMode => {
if (!obj?.__typename) throw new Error('__typename is missing in "isMaintenanceMode"')
return MaintenanceMode_possibleTypes.includes(obj.__typename)
}
const ModelsDevModelSuggestion_possibleTypes: string[] = ['ModelsDevModelSuggestion']
export const isModelsDevModelSuggestion = (obj?: { __typename?: any } | null): obj is ModelsDevModelSuggestion => {
if (!obj?.__typename) throw new Error('__typename is missing in "isModelsDevModelSuggestion"')
@@ -7919,6 +8030,30 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const AuthToken_possibleTypes: string[] = ['AuthToken']
export const isAuthToken = (obj?: { __typename?: any } | null): obj is AuthToken => {
if (!obj?.__typename) throw new Error('__typename is missing in "isAuthToken"')
return AuthToken_possibleTypes.includes(obj.__typename)
}
const ApplicationTokenPair_possibleTypes: string[] = ['ApplicationTokenPair']
export const isApplicationTokenPair = (obj?: { __typename?: any } | null): obj is ApplicationTokenPair => {
if (!obj?.__typename) throw new Error('__typename is missing in "isApplicationTokenPair"')
return ApplicationTokenPair_possibleTypes.includes(obj.__typename)
}
const FrontComponent_possibleTypes: string[] = ['FrontComponent']
export const isFrontComponent = (obj?: { __typename?: any } | null): obj is FrontComponent => {
if (!obj?.__typename) throw new Error('__typename is missing in "isFrontComponent"')
return FrontComponent_possibleTypes.includes(obj.__typename)
}
const LogicFunctionLogs_possibleTypes: string[] = ['LogicFunctionLogs']
export const isLogicFunctionLogs = (obj?: { __typename?: any } | null): obj is LogicFunctionLogs => {
if (!obj?.__typename) throw new Error('__typename is missing in "isLogicFunctionLogs"')
@@ -7959,14 +8094,6 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const AuthToken_possibleTypes: string[] = ['AuthToken']
export const isAuthToken = (obj?: { __typename?: any } | null): obj is AuthToken => {
if (!obj?.__typename) throw new Error('__typename is missing in "isAuthToken"')
return AuthToken_possibleTypes.includes(obj.__typename)
}
const AuthTokenPair_possibleTypes: string[] = ['AuthTokenPair']
export const isAuthTokenPair = (obj?: { __typename?: any } | null): obj is AuthTokenPair => {
if (!obj?.__typename) throw new Error('__typename is missing in "isAuthTokenPair"')
@@ -8135,14 +8262,6 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const ApplicationTokenPair_possibleTypes: string[] = ['ApplicationTokenPair']
export const isApplicationTokenPair = (obj?: { __typename?: any } | null): obj is ApplicationTokenPair => {
if (!obj?.__typename) throw new Error('__typename is missing in "isApplicationTokenPair"')
return ApplicationTokenPair_possibleTypes.includes(obj.__typename)
}
const File_possibleTypes: string[] = ['File']
export const isFile = (obj?: { __typename?: any } | null): obj is File => {
if (!obj?.__typename) throw new Error('__typename is missing in "isFile"')
@@ -8255,14 +8374,6 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const FrontComponent_possibleTypes: string[] = ['FrontComponent']
export const isFrontComponent = (obj?: { __typename?: any } | null): obj is FrontComponent => {
if (!obj?.__typename) throw new Error('__typename is missing in "isFrontComponent"')
return FrontComponent_possibleTypes.includes(obj.__typename)
}
const CommandMenuItem_possibleTypes: string[] = ['CommandMenuItem']
export const isCommandMenuItem = (obj?: { __typename?: any } | null): obj is CommandMenuItem => {
if (!obj?.__typename) throw new Error('__typename is missing in "isCommandMenuItem"')
@@ -8423,6 +8534,30 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const ChatStreamCatchupChunks_possibleTypes: string[] = ['ChatStreamCatchupChunks']
export const isChatStreamCatchupChunks = (obj?: { __typename?: any } | null): obj is ChatStreamCatchupChunks => {
if (!obj?.__typename) throw new Error('__typename is missing in "isChatStreamCatchupChunks"')
return ChatStreamCatchupChunks_possibleTypes.includes(obj.__typename)
}
const SendChatMessageResult_possibleTypes: string[] = ['SendChatMessageResult']
export const isSendChatMessageResult = (obj?: { __typename?: any } | null): obj is SendChatMessageResult => {
if (!obj?.__typename) throw new Error('__typename is missing in "isSendChatMessageResult"')
return SendChatMessageResult_possibleTypes.includes(obj.__typename)
}
const AgentChatEvent_possibleTypes: string[] = ['AgentChatEvent']
export const isAgentChatEvent = (obj?: { __typename?: any } | null): obj is AgentChatEvent => {
if (!obj?.__typename) throw new Error('__typename is missing in "isAgentChatEvent"')
return AgentChatEvent_possibleTypes.includes(obj.__typename)
}
const AgentChatThreadEdge_possibleTypes: string[] = ['AgentChatThreadEdge']
export const isAgentChatThreadEdge = (obj?: { __typename?: any } | null): obj is AgentChatThreadEdge => {
if (!obj?.__typename) throw new Error('__typename is missing in "isAgentChatThreadEdge"')
@@ -8961,7 +9096,6 @@ export const enumFeatureFlagKey = {
IS_DIRECT_GRAPHQL_EXECUTION_ENABLED: 'IS_DIRECT_GRAPHQL_EXECUTION_ENABLED' as const,
IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED: 'IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED' as const,
IS_CONNECTED_ACCOUNT_MIGRATED: 'IS_CONNECTED_ACCOUNT_MIGRATED' as const,
IS_GRAPHQL_QUERY_TIMING_ENABLED: 'IS_GRAPHQL_QUERY_TIMING_ENABLED' as const,
IS_RECORD_TABLE_WIDGET_ENABLED: 'IS_RECORD_TABLE_WIDGET_ENABLED' as const,
IS_DATASOURCE_MIGRATED: 'IS_DATASOURCE_MIGRATED' as const
}
@@ -9061,20 +9195,15 @@ export const enumEngineComponentKey = {
NAVIGATE_TO_NEXT_RECORD: 'NAVIGATE_TO_NEXT_RECORD' as const,
NAVIGATE_TO_PREVIOUS_RECORD: 'NAVIGATE_TO_PREVIOUS_RECORD' as const,
CREATE_NEW_RECORD: 'CREATE_NEW_RECORD' as const,
DELETE_SINGLE_RECORD: 'DELETE_SINGLE_RECORD' as const,
DELETE_MULTIPLE_RECORDS: 'DELETE_MULTIPLE_RECORDS' as const,
RESTORE_SINGLE_RECORD: 'RESTORE_SINGLE_RECORD' as const,
RESTORE_MULTIPLE_RECORDS: 'RESTORE_MULTIPLE_RECORDS' as const,
DESTROY_SINGLE_RECORD: 'DESTROY_SINGLE_RECORD' as const,
DESTROY_MULTIPLE_RECORDS: 'DESTROY_MULTIPLE_RECORDS' as const,
DELETE_RECORDS: 'DELETE_RECORDS' as const,
RESTORE_RECORDS: 'RESTORE_RECORDS' as const,
DESTROY_RECORDS: 'DESTROY_RECORDS' as const,
ADD_TO_FAVORITES: 'ADD_TO_FAVORITES' as const,
REMOVE_FROM_FAVORITES: 'REMOVE_FROM_FAVORITES' as const,
EXPORT_NOTE_TO_PDF: 'EXPORT_NOTE_TO_PDF' as const,
EXPORT_FROM_RECORD_INDEX: 'EXPORT_FROM_RECORD_INDEX' as const,
EXPORT_FROM_RECORD_SHOW: 'EXPORT_FROM_RECORD_SHOW' as const,
EXPORT_RECORDS: 'EXPORT_RECORDS' as const,
UPDATE_MULTIPLE_RECORDS: 'UPDATE_MULTIPLE_RECORDS' as const,
MERGE_MULTIPLE_RECORDS: 'MERGE_MULTIPLE_RECORDS' as const,
EXPORT_MULTIPLE_RECORDS: 'EXPORT_MULTIPLE_RECORDS' as const,
IMPORT_RECORDS: 'IMPORT_RECORDS' as const,
EXPORT_VIEW: 'EXPORT_VIEW' as const,
SEE_DELETED_RECORDS: 'SEE_DELETED_RECORDS' as const,
@@ -9116,7 +9245,16 @@ export const enumEngineComponentKey = {
ASK_AI: 'ASK_AI' as const,
VIEW_PREVIOUS_AI_CHATS: 'VIEW_PREVIOUS_AI_CHATS' as const,
TRIGGER_WORKFLOW_VERSION: 'TRIGGER_WORKFLOW_VERSION' as const,
FRONT_COMPONENT_RENDERER: 'FRONT_COMPONENT_RENDERER' as const
FRONT_COMPONENT_RENDERER: 'FRONT_COMPONENT_RENDERER' as const,
DELETE_SINGLE_RECORD: 'DELETE_SINGLE_RECORD' as const,
DELETE_MULTIPLE_RECORDS: 'DELETE_MULTIPLE_RECORDS' as const,
RESTORE_SINGLE_RECORD: 'RESTORE_SINGLE_RECORD' as const,
RESTORE_MULTIPLE_RECORDS: 'RESTORE_MULTIPLE_RECORDS' as const,
DESTROY_SINGLE_RECORD: 'DESTROY_SINGLE_RECORD' as const,
DESTROY_MULTIPLE_RECORDS: 'DESTROY_MULTIPLE_RECORDS' as const,
EXPORT_FROM_RECORD_INDEX: 'EXPORT_FROM_RECORD_INDEX' as const,
EXPORT_FROM_RECORD_SHOW: 'EXPORT_FROM_RECORD_SHOW' as const,
EXPORT_MULTIPLE_RECORDS: 'EXPORT_MULTIPLE_RECORDS' as const
}
export const enumCommandMenuItemAvailabilityType = {
File diff suppressed because it is too large Load Diff
@@ -4,24 +4,24 @@ description: Defina objetos, funções de lógica, componentes de front-end e mu
---
<Warning>
Apps are currently in alpha. The feature works but is still evolving.
Os aplicativos estão atualmente em testes alfa. O recurso é funcional, mas ainda está evoluindo.
</Warning>
The `twenty-sdk` package provides typed building blocks to create your app. This page covers every entity type and API client available in the SDK.
O pacote `twenty-sdk` fornece blocos de construção tipados para criar seu app. Esta página cobre todos os tipos de entidade e clientes de API disponíveis no SDK.
## DefineEntity functions
## Funções DefineEntity
The SDK provides functions to define your app entities. You must use `export default defineEntity({...})` for the SDK to detect your entities. Essas funções validam sua configuração em tempo de compilação e oferecem autocompletar na IDE e segurança de tipos.
O SDK fornece funções para definir as entidades do seu app. Você deve usar `export default defineEntity({...})` para que o SDK detecte suas entidades. Essas funções validam sua configuração em tempo de compilação e oferecem autocompletar na IDE e segurança de tipos.
<Note>
**File organization is up to you.**
Entity detection is AST-based — the SDK finds `export default defineEntity(...)` calls regardless of where the file lives. Grouping files by type (e.g., `logic-functions/`, `roles/`) is just a convention, not a requirement.
**A organização de arquivos fica a seu critério.**
A detecção de entidades é baseada em AST — o SDK encontra chamadas a `export default defineEntity(...)` independentemente de onde o arquivo esteja. Agrupar arquivos por tipo (por exemplo, `logic-functions/`, `roles/`) é apenas uma convenção, não um requisito.
</Note>
<AccordionGroup>
<Accordion title="defineRole" description="Configura permissões de papéis e acesso a objetos">
Roles encapsulate permissions on your workspace's objects and actions.
Papéis encapsulam permissões sobre os objetos e ações do seu espaço de trabalho.
```ts restricted-company-role.ts
import {
@@ -69,12 +69,12 @@ export default defineRole({
</Accordion>
<Accordion title="defineApplication" description="Configurar metadados do aplicativo (obrigatório, um por app)">
Every app must have exactly one `defineApplication` call that describes:
Todo app deve ter exatamente uma chamada a `defineApplication` que descreve:
* **Identity**: identifiers, display name, and description.
* **Permissions**: which role its functions and front components use.
* **(Optional) Variables**: keyvalue pairs exposed to your functions as environment variables.
* **(Optional) Pre-install / post-install functions**: logic functions that run before or after installation.
* **Identidade**: identificadores, nome de exibição e descrição.
* **Permissões**: qual papel é usado por suas funções e componentes de front-end.
* **Variáveis (opcional)**: pares chavevalor expostos às suas funções como variáveis de ambiente.
* **(Opcional) Funções de pré-instalação/pós-instalação**: funções de lógica que são executadas antes ou depois da instalação.
```ts src/application-config.ts
import { defineApplication } from 'twenty-sdk';
@@ -98,21 +98,21 @@ export default defineApplication({
```
Notas:
* `universalIdentifier` fields are deterministic IDs you own. Generate them once and keep them stable across syncs.
* `applicationVariables` become environment variables for your functions and front components (e.g., `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
* `defaultRoleUniversalIdentifier` must reference a role defined with `defineRole()` (see above).
* Pre-install and post-install functions are detected automatically during the manifest build — you do not need to reference them in `defineApplication()`.
* Os campos `universalIdentifier` são IDs determinísticos que você controla. Gere-os uma vez e mantenha-os estáveis entre sincronizações.
* `applicationVariables` tornam-se variáveis de ambiente para suas funções e componentes de front-end (por exemplo, `DEFAULT_RECIPIENT_NAME` fica disponível como `process.env.DEFAULT_RECIPIENT_NAME`).
* `defaultRoleUniversalIdentifier` deve fazer referência a um papel definido com `defineRole()` (veja acima).
* As funções de pré-instalação e pós-instalação são detectadas automaticamente durante a construção do manifesto — você não precisa referenciá-las em `defineApplication()`.
#### Metadados do Marketplace
If you plan to [publish your app](/l/pt/developers/extend/apps/publishing), these optional fields control how it appears in the marketplace:
Se você planeja [publicar seu app](/l/pt/developers/extend/apps/publishing), estes campos opcionais controlam como seu app aparece no marketplace:
| Campo | Descrição |
| ------------------ | ----------------------------------------------------------------------------------------------------------------- |
| `autor` | Nome do autor ou da empresa |
| `categoria` | Categoria do app para filtragem no marketplace |
| `logoUrl` | Path to your app logo (e.g., `public/logo.png`) |
| `screenshots` | Array of screenshot paths (e.g., `public/screenshot-1.png`) |
| `logoUrl` | Caminho para o logo do seu app (por exemplo, `public/logo.png`) |
| `screenshots` | Array de caminhos de capturas de tela (por exemplo, `public/screenshot-1.png`) |
| `aboutDescription` | Descrição em markdown mais longa para a aba "Sobre". Se omitido, o marketplace usa o `README.md` do pacote no npm |
| `websiteUrl` | Link para seu site |
| `termsUrl` | Link para os Termos de Serviço |
@@ -121,15 +121,15 @@ If you plan to [publish your app](/l/pt/developers/extend/apps/publishing), thes
#### Papéis e permissões
The `defaultRoleUniversalIdentifier` in `application-config.ts` designates the default role used by your app's logic functions and front components. See `defineRole` above for details.
O campo `defaultRoleUniversalIdentifier` em `application-config.ts` designa o papel padrão usado pelas funções de lógica e pelos componentes de front-end do seu app. Veja `defineRole` acima para detalhes.
* The runtime token injected as `TWENTY_APP_ACCESS_TOKEN` is derived from this role.
* The typed client is restricted to the permissions granted to that role.
* Follow least-privilege: create a dedicated role with only the permissions your functions need.
* O token em tempo de execução injetado como `TWENTY_APP_ACCESS_TOKEN` é derivado desse papel.
* O cliente tipado é restrito às permissões concedidas a esse papel.
* Siga o princípio do menor privilégio: crie um papel dedicado com apenas as permissões de que suas funções precisam.
##### Default function role
##### Papel de função padrão
When you scaffold a new app, the CLI creates a default role file:
Ao criar um novo app com o scaffold, a CLI cria um arquivo de papel padrão:
```ts src/roles/default-role.ts
import { defineRole, PermissionFlag } from 'twenty-sdk';
@@ -155,16 +155,16 @@ export default defineRole({
});
```
This role's `universalIdentifier` is referenced in `application-config.ts` as `defaultRoleUniversalIdentifier`:
O `universalIdentifier` desse papel é referenciado em `application-config.ts` como `defaultRoleUniversalIdentifier`:
* **\*.role.ts** defines what the role can do.
* **\*.role.ts** define o que o papel pode fazer.
* **application-config.ts** aponta para esse papel para que suas funções herdem suas permissões.
Notas:
* Comece pelo papel gerado pelo scaffold e depois restrinja-o progressivamente seguindo o princípio do menor privilégio.
* Replace `objectPermissions` and `fieldPermissions` with the objects and fields your functions actually need.
* `permissionFlags` controlam o acesso a recursos em nível de plataforma. Keep them minimal.
* See a working example: [`hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
* Substitua `objectPermissions` e `fieldPermissions` pelos objetos e campos de que suas funções realmente precisam.
* `permissionFlags` controlam o acesso a recursos em nível de plataforma. Mantenha-os no mínimo necessário.
* Veja um exemplo funcional: [`hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
</Accordion>
<Accordion title="defineObject" description="Define objetos personalizados com campos">
@@ -256,7 +256,7 @@ mas isso não é recomendado.
</Note>
</Accordion>
<Accordion title="defineField — Standard fields" description="Estender objetos existentes com campos adicionais">
<Accordion title="defineField — Campos padrão" description="Estender objetos existentes com campos adicionais">
Use `defineField()` para adicionar campos a objetos que não são seus — como objetos padrão do Twenty (Person, Company, etc.). ou a objetos de outros apps. Ao contrário dos campos inline em `defineObject()`, os campos independentes exigem um `objectUniversalIdentifier` para especificar qual objeto eles estendem:
@@ -284,7 +284,7 @@ Pontos-chave:
* `defineField()` é a única forma de adicionar campos a objetos que você não criou com `defineObject()`.
</Accordion>
<Accordion title="defineField — Relation fields" description="Connect objects together with bidirectional relations">
<Accordion title="defineField — Campos de relação" description="Conecte objetos com relações bidirecionais">
As relações conectam objetos entre si. No Twenty, as relações são sempre **bidirecionais** — você define ambos os lados, e cada lado faz referência ao outro.
@@ -443,7 +443,7 @@ export default defineObject({
});
```
</Accordion>
<Accordion title="defineLogicFunction" description="Define logic functions and their triggers">
<Accordion title="defineLogicFunction" description="Defina funções de lógica e seus gatilhos">
Cada arquivo de função usa `defineLogicFunction()` para exportar uma configuração com um handler e gatilhos opcionais.
@@ -487,15 +487,15 @@ export default defineLogicFunction({
});
```
Available trigger types:
* **httpRoute**: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
> e.g. `path: '/post-card/create'` is callable at `https://your-twenty-server.com/s/post-card/create`
Tipos de gatilho disponíveis:
* **httpRoute**: Expõe sua função em um caminho e método HTTP **no endpoint `/s/`**:
> por exemplo, `path: '/post-card/create'` é acessível em `https://your-twenty-server.com/s/post-card/create`
* **cron**: Executa sua função em um agendamento usando uma expressão CRON.
* **databaseEvent**: Executa em eventos do ciclo de vida de objetos do espaço de trabalho. Quando a operação do evento é `updated`, campos específicos a serem observados podem ser especificados no array `updatedFields`. Se deixar indefinido ou vazio, qualquer atualização acionará a função.
> e.g. `person.updated`, `*.created`, `company.*`
> por exemplo, `person.updated`, `*.created`, `company.*`
<Note>
You can also manually execute a function using the CLI:
Você também pode executar manualmente uma função usando a CLI:
```bash filename="Terminal"
yarn twenty exec -n create-new-post-card -p '{"key": "value"}'
@@ -505,7 +505,7 @@ yarn twenty exec -n create-new-post-card -p '{"key": "value"}'
yarn twenty exec -y e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf
```
You can watch logs with:
Você pode acompanhar os logs com:
```bash filename="Terminal"
yarn twenty logs
@@ -514,9 +514,8 @@ yarn twenty logs
#### Payload de gatilho de rota
When a route trigger invokes your logic function, it receives a `RoutePayload` object that follows the
[AWS HTTP API v2 format](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html).
Import the `RoutePayload` type from `twenty-sdk`:
Quando um gatilho de rota invoca sua função de lógica, ela recebe um objeto `RoutePayload` que segue o [formato HTTP API v2 da AWS](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html).
Importe o tipo `RoutePayload` de `twenty-sdk`:
```ts
import { defineLogicFunction, type RoutePayload } from 'twenty-sdk';
@@ -533,9 +532,9 @@ O tipo `RoutePayload` tem a seguinte estrutura:
| Propriedade | Tipo | Descrição | Exemplo |
| ---------------------------- | ------------------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | Cabeçalhos HTTP (apenas aqueles listados em `forwardedRequestHeaders`) | see section below |
| `headers` | `Record<string, string \| undefined>` | Cabeçalhos HTTP (apenas aqueles listados em `forwardedRequestHeaders`) | veja a seção abaixo |
| `queryStringParameters` | `Record<string, string \| undefined>` | Parâmetros de query string (valores múltiplos unidos por vírgulas) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
| `pathParameters` | `Record<string, string \| undefined>` | Path parameters extracted from the route pattern | `/users/:id`, `/users/123` -> `{ id: '123' }` |
| `pathParameters` | `Record<string, string \| undefined>` | Parâmetros de caminho extraídos do padrão de rota | `/users/:id`, `/users/123` -> `{ id: '123' }` |
| `body` | `object \| null` | Corpo da requisição analisado (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
| `isBase64Encoded` | `boolean` | Se o corpo está codificado em base64 | |
| `requestContext.http.method` | `string` | Método HTTP (GET, POST, PUT, PATCH, DELETE) | |
@@ -545,7 +544,7 @@ O tipo `RoutePayload` tem a seguinte estrutura:
#### forwardedRequestHeaders
Por padrão, os cabeçalhos HTTP das requisições recebidas **não** são repassados para sua função de lógica por motivos de segurança.
To access specific headers, list them in the `forwardedRequestHeaders` array:
Para acessar cabeçalhos específicos, liste-os explicitamente no array `forwardedRequestHeaders`:
```ts
export default defineLogicFunction({
@@ -561,7 +560,7 @@ export default defineLogicFunction({
});
```
In your handler, access the forwarded headers like this:
No seu handler, acesse os cabeçalhos encaminhados assim:
```ts
const handler = async (event: RoutePayload) => {
@@ -574,14 +573,14 @@ const handler = async (event: RoutePayload) => {
```
<Note>
Os nomes dos cabeçalhos são normalizados para minúsculas. Access them using lowercase keys (e.g., `event.headers['content-type']`).
Os nomes dos cabeçalhos são normalizados para minúsculas. Acesse-os usando chaves em minúsculas (por exemplo, `event.headers['content-type']`).
</Note>
#### Exposing a function as a tool
#### Expor uma função como ferramenta
Funções lógicas podem ser expostas como **ferramentas** para agentes de IA e fluxos de trabalho. When marked as a tool, a function becomes discoverable by Twenty's AI features and can be used in workflow automations.
Funções lógicas podem ser expostas como **ferramentas** para agentes de IA e fluxos de trabalho. Quando marcada como ferramenta, uma função fica detectável pelos recursos de IA do Twenty e pode ser usada em automações de fluxos de trabalho.
To mark a logic function as a tool, set `isTool: true`:
Para marcar uma função de lógica como ferramenta, defina `isTool: true`:
```ts src/logic-functions/enrich-company.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
@@ -617,8 +616,8 @@ export default defineLogicFunction({
Pontos-chave:
* You can combine `isTool` with triggers — a function can be both a tool (callable by AI agents) and triggered by events at the same time.
* **`toolInputSchema`** (optional): A JSON Schema object describing the parameters your function accepts. The schema is computed automatically from source code static analysis, but you can set it explicitly:
* Você pode combinar `isTool` com gatilhos — uma função pode ser ao mesmo tempo uma ferramenta (chamável por agentes de IA) e acionada por eventos.
* **`toolInputSchema`** (opcional): Um objeto JSON Schema que descreve os parâmetros que sua função aceita. O schema é calculado automaticamente a partir da análise estática do código-fonte, mas você pode defini-lo explicitamente:
```ts
export default defineLogicFunction({
@@ -715,11 +714,11 @@ Pontos-chave:
</Accordion>
<Accordion title="defineFrontComponent" description="Definir componentes de front-end para UI personalizada">
Front components are React components that render directly inside Twenty's UI. They run in an **isolated Web Worker** using Remote DOM — your code is sandboxed but renders natively in the page, not in an iframe.
Componentes de front-end são componentes React que renderizam diretamente dentro da UI do Twenty. Eles são executados em um Web Worker isolado usando Remote DOM — seu código é sandboxed, mas renderiza nativamente na página, não em um iframe.
#### Basic example
#### Exemplo básico
The quickest way to see a front component in action is to register it as a **command**. Adding a `command` field with `isPinned: true` makes it appear as a quick-action button in the top-right corner of the page — no page layout needed:
A maneira mais rápida de ver um componente de front-end em ação é registrá-lo como um **comando**. Adicionar um campo `command` com `isPinned: true` faz com que ele apareça como um botão de ação rápida no canto superior direito da página — não é necessário layout de página:
```tsx src/front-components/hello-world.tsx
import { defineFrontComponent } from 'twenty-sdk';
@@ -749,34 +748,34 @@ export default defineFrontComponent({
});
```
After syncing with `yarn twenty dev`, the quick action appears in the top-right corner of the page:
Após sincronizar com `yarn twenty dev`, a ação rápida aparece no canto superior direito da página:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/quick-action.png" alt="Quick action button in the top-right corner" />
<img src="/images/docs/developers/extends/apps/quick-action.png" alt="Botão de ação rápida no canto superior direito" />
</div>
Click it to render the component inline.
Clique nele para renderizar o componente inline.
{/* TODO: add screenshot of the rendered front component */}
#### Configuration fields
#### Campos de configuração
| Campo | Obrigatório | Descrição |
| --------------------- | ----------- | ----------------------------------------------------------------------------------- |
| `universalIdentifier` | Sim | Stable unique ID for this component |
| `component` | Sim | A React component function |
| `name` | Não | Display name |
| `description` | Não | Description of what the component does |
| `isHeadless` | Não | Set to `true` if the component has no visible UI (see below) |
| `command` | Não | Register the component as a command (see [command options](#command-options) below) |
| Campo | Obrigatório | Descrição |
| --------------------- | ----------- | ----------------------------------------------------------------------------------------- |
| `universalIdentifier` | Sim | ID único e estável para este componente |
| `component` | Sim | Uma função de componente React |
| `name` | Não | Nome de Exibição |
| `description` | Não | Descrição do que o componente faz |
| `isHeadless` | Não | Defina como `true` se o componente não tiver interface visível (veja abaixo) |
| `command` | Não | Registre o componente como um comando (veja [opções de comando](#command-options) abaixo) |
#### Placing a front component on a page
#### Colocando um componente de front-end em uma página
Beyond commands, you can embed a front component directly into a record page by adding it as a widget in a **page layout**. See the [definePageLayout](#definepagelayout) section for details.
Além de comandos, você pode incorporar um componente de front-end diretamente em uma página de registro adicionando-o como um widget em um **layout de página**. Veja a seção [definePageLayout](#definepagelayout) para obter detalhes.
#### Headless components (`isHeadless: true`)
#### Componentes sem interface (`isHeadless: true`)
Headless components render no visible UI but still run React logic. This is useful for **effect components** — components that perform side effects when mounted, such as syncing data, starting a timer, listening to events, or triggering a notification.
Componentes sem interface não renderizam nenhuma UI visível, mas ainda executam a lógica do React. Isso é útil para **componentes de efeito** — componentes que executam efeitos colaterais quando montados, como sincronizar dados, iniciar um temporizador, ouvir eventos ou disparar uma notificação.
```tsx src/front-components/sync-tracker.tsx
import { defineFrontComponent, useRecordId, enqueueSnackbar } from 'twenty-sdk';
@@ -801,11 +800,11 @@ export default defineFrontComponent({
});
```
Because the component returns `null`, Twenty skips rendering a container for it — no empty space appears in the layout. The component still has access to all hooks and the host communication API.
Como o componente retorna `null`, o Twenty ignora renderizar um contêiner para ele — nenhum espaço vazio aparece no layout. O componente ainda tem acesso a todos os hooks e à API de comunicação do host.
#### Accessing runtime context
#### Acessando o contexto de execução
Inside your component, use SDK hooks to access the current user, record, and component instance:
Dentro do seu componente, use hooks do SDK para acessar o usuário atual, o registro e a instância do componente:
```tsx src/front-components/record-info.tsx
import {
@@ -836,47 +835,47 @@ export default defineFrontComponent({
});
```
Available hooks:
Hooks disponíveis:
| Hook | Returns | Descrição |
| --------------------------------------------- | ------------------ | ---------------------------------------------------------- |
| `useUserId()` | `string` or `null` | The current user's ID |
| `useRecordId()` | `string` or `null` | The current record's ID (when placed on a record page) |
| `useFrontComponentId()` | `string` | This component instance's ID |
| `useFrontComponentExecutionContext(selector)` | varia | Access the full execution context with a selector function |
| Hook | Retorna | Descrição |
| --------------------------------------------- | ------------------ | ------------------------------------------------------------------ |
| `useUserId()` | `string` ou `null` | O ID do usuário atual |
| `useRecordId()` | `string` ou `null` | O ID do registro atual (quando colocado em uma página de registro) |
| `useFrontComponentId()` | `string` | O ID desta instância do componente |
| `useFrontComponentExecutionContext(selector)` | varia | Acesse o contexto de execução completo com uma função seletora |
#### Host communication API
#### API de comunicação do host
Front components can trigger navigation, modals, and notifications using functions from `twenty-sdk`:
Componentes de front-end podem acionar navegação, modais e notificações usando funções de `twenty-sdk`:
| Função | Descrição |
| ----------------------------------------------- | ----------------------------- |
| `navigate(to, params?, queryParams?, options?)` | Navigate to a page in the app |
| `openSidePanelPage(params)` | Open a side panel |
| `closeSidePanel()` | Fecha o painel lateral |
| `openCommandConfirmationModal(params)` | Show a confirmation dialog |
| `enqueueSnackbar(params)` | Show a toast notification |
| `unmountFrontComponent()` | Unmount the component |
| `updateProgress(progress)` | Update a progress indicator |
| Função | Descrição |
| ----------------------------------------------- | ------------------------------------- |
| `navigate(to, params?, queryParams?, options?)` | Navegar para uma página no app |
| `openSidePanelPage(params)` | Abrir um painel lateral |
| `closeSidePanel()` | Fecha o painel lateral |
| `openCommandConfirmationModal(params)` | Mostrar um diálogo de confirmação |
| `enqueueSnackbar(params)` | Mostrar uma notificação do tipo toast |
| `unmountFrontComponent()` | Desmontar o componente |
| `updateProgress(progress)` | Atualizar um indicador de progresso |
#### Command options
#### Opções de comando
Adding a `command` field to `defineFrontComponent` registers the component in the command menu (Cmd+K). If `isPinned` is `true`, it also appears as a quick-action button in the top-right corner of the page.
Adicionar um campo `command` a `defineFrontComponent` registra o componente no menu de comandos (Cmd+K). Se `isPinned` for `true`, ele também aparece como um botão de ação rápida no canto superior direito da página.
| Campo | Obrigatório | Descrição |
| --------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `universalIdentifier` | Sim | Stable unique ID for the command |
| `label` | Sim | Full label shown in the command menu (Cmd+K) |
| `shortLabel` | Não | Shorter label displayed on the pinned quick-action button |
| `icon` | Não | Icon name displayed next to the label (e.g. `'IconBolt'`, `'IconSend'`) |
| `isPinned` | Não | When `true`, shows the command as a quick-action button in the top-right corner of the page |
| `availabilityType` | Não | Controls where the command appears: `'GLOBAL'` (always available), `'RECORD_SELECTION'` (only when records are selected), or `'FALLBACK'` (shown when no other commands match) |
| `availabilityObjectUniversalIdentifier` | Não | Restrict the command to pages of a specific object type (e.g. only on Company records) |
| `conditionalAvailabilityExpression` | Não | A boolean expression to dynamically control whether the command is visible (see below) |
| Campo | Obrigatório | Descrição |
| --------------------------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `universalIdentifier` | Sim | ID exclusivo e estável para o comando |
| `label` | Sim | Rótulo completo exibido no menu de comandos (Cmd+K) |
| `shortLabel` | Não | Rótulo mais curto exibido no botão fixado de ação rápida |
| `icon` | Não | Nome do ícone exibido ao lado do rótulo (por exemplo, `'IconBolt'`, `'IconSend'`) |
| `isPinned` | Não | Quando `true`, mostra o comando como um botão de ação rápida no canto superior direito da página |
| `availabilityType` | Não | Controla onde o comando aparece: `'GLOBAL'` (sempre disponível), `'RECORD_SELECTION'` (apenas quando registros estão selecionados) ou `'FALLBACK'` (exibido quando nenhum outro comando corresponde) |
| `availabilityObjectUniversalIdentifier` | Não | Restringe o comando a páginas de um tipo específico de objeto (por exemplo, somente em registros de Company) |
| `conditionalAvailabilityExpression` | Não | Uma expressão booleana para controlar dinamicamente se o comando é visível (veja abaixo) |
#### Conditional availability expressions
#### Expressões de disponibilidade condicional
The `conditionalAvailabilityExpression` field lets you control when a command is visible based on the current page context. Import typed variables and operators from `twenty-sdk` to build expressions:
O campo `conditionalAvailabilityExpression` permite controlar quando um comando é visível com base no contexto da página atual. Importe variáveis tipadas e operadores de `twenty-sdk` para construir expressões:
```tsx
import {
@@ -905,45 +904,45 @@ export default defineFrontComponent({
});
```
**Context variables** — these represent the current state of the page:
**Variáveis de contexto** — representam o estado atual da página:
| Variável | Tipo | Descrição |
| ------------------------------ | --------- | ---------------------------------------------------------------- |
| `pageType` | `string` | Current page type (e.g. `'RecordIndexPage'`, `'RecordShowPage'`) |
| `isInSidePanel` | `boolean` | Whether the component is rendered in a side panel |
| `numberOfSelectedRecords` | `number` | Number of currently selected records |
| `isSelectAll` | `boolean` | Whether "select all" is active |
| `selectedRecords` | `array` | The selected record objects |
| `favoriteRecordIds` | `array` | IDs of favorited records |
| `objectPermissions` | `object` | Permissions for the current object type |
| `targetObjectReadPermissions` | `object` | Read permissions for the target object |
| `targetObjectWritePermissions` | `object` | Write permissions for the target object |
| `featureFlags` | `object` | Active feature flags |
| `objectMetadataItem` | `object` | Metadata of the current object type |
| `hasAnySoftDeleteFilterOnView` | `boolean` | Whether the current view has a soft-delete filter |
| Variável | Tipo | Descrição |
| ------------------------------ | --------- | --------------------------------------------------------------------------- |
| `pageType` | `string` | Tipo de página atual (por exemplo, `'RecordIndexPage'`, `'RecordShowPage'`) |
| `isInSidePanel` | `boolean` | Se o componente é renderizado em um painel lateral |
| `numberOfSelectedRecords` | `number` | Número de registros atualmente selecionados |
| `isSelectAll` | `boolean` | Se "selecionar tudo" está ativo |
| `selectedRecords` | `array` | Os objetos de registro selecionados |
| `favoriteRecordIds` | `array` | IDs dos registros marcados como favoritos |
| `objectPermissions` | `object` | Permissões para o tipo de objeto atual |
| `targetObjectReadPermissions` | `object` | Permissões de leitura para o objeto alvo |
| `targetObjectWritePermissions` | `object` | Permissões de escrita para o objeto alvo |
| `featureFlags` | `object` | Flags de recurso ativas |
| `objectMetadataItem` | `object` | Metadados do tipo de objeto atual |
| `hasAnySoftDeleteFilterOnView` | `boolean` | Se a visualização atual tem um filtro de soft-delete |
**Operators** — combine variables into boolean expressions:
**Operadores** — combine variáveis em expressões booleanas:
| Operator | Descrição |
| ----------------------------------- | ----------------------------------------------------------------- |
| `isDefined(value)` | `true` if the value is not null/undefined |
| `isNonEmptyString(value)` | `true` if the value is a non-empty string |
| `includes(array, value)` | `true` if the array contains the value |
| `includesEvery(array, prop, value)` | `true` if every item's property includes the value |
| `every(array, prop)` | `true` if the property is truthy on every item |
| `everyDefined(array, prop)` | `true` if the property is defined on every item |
| `everyEquals(array, prop, value)` | `true` if the property equals the value on every item |
| `some(array, prop)` | `true` if the property is truthy on at least one item |
| `someDefined(array, prop)` | `true` if the property is defined on at least one item |
| `someEquals(array, prop, value)` | `true` if the property equals the value on at least one item |
| `someNonEmptyString(array, prop)` | `true` if the property is a non-empty string on at least one item |
| `none(array, prop)` | `true` if the property is falsy on every item |
| `noneDefined(array, prop)` | `true` if the property is undefined on every item |
| `noneEquals(array, prop, value)` | `true` if the property does not equal the value on any item |
| Operador | Descrição |
| ----------------------------------- | ---------------------------------------------------------------------- |
| `isDefined(value)` | `true` se o valor não for null/undefined |
| `isNonEmptyString(value)` | `true` se o valor for uma string não vazia |
| `includes(array, value)` | `true` se o array contiver o valor |
| `includesEvery(array, prop, value)` | `true` se a propriedade de cada item incluir o valor |
| `every(array, prop)` | `true` se a propriedade for truthy em cada item |
| `everyDefined(array, prop)` | `true` se a propriedade estiver definida em cada item |
| `everyEquals(array, prop, value)` | `true` se a propriedade for igual ao valor em cada item |
| `some(array, prop)` | `true` se a propriedade for truthy em pelo menos um item |
| `someDefined(array, prop)` | `true` se a propriedade estiver definida em pelo menos um item |
| `someEquals(array, prop, value)` | `true` se a propriedade for igual ao valor em pelo menos um item |
| `someNonEmptyString(array, prop)` | `true` se a propriedade for uma string não vazia em pelo menos um item |
| `none(array, prop)` | `true` se a propriedade for falsy em cada item |
| `noneDefined(array, prop)` | `true` se a propriedade for undefined em cada item |
| `noneEquals(array, prop, value)` | `true` se a propriedade não for igual ao valor em nenhum item |
#### Public assets
#### Recursos públicos
Front components can access files from the app's `public/` directory using `getPublicAssetUrl`:
Componentes de front-end podem acessar arquivos do diretório `public/` do app usando `getPublicAssetUrl`:
```tsx
import { defineFrontComponent, getPublicAssetUrl } from 'twenty-sdk';
@@ -957,18 +956,18 @@ export default defineFrontComponent({
});
```
See the [public assets section](#accessing-public-assets-with-getpublicasseturl) for details.
Veja a [seção de recursos públicos](#accessing-public-assets-with-getpublicasseturl) para obter detalhes.
#### Estilização
Front components support multiple styling approaches. You can use:
Componentes de front-end suportam várias abordagens de estilização. Você pode usar:
* **Inline styles** — `style={{ color: 'red' }}`
* **Twenty UI components** — import from `twenty-sdk/ui` (Button, Tag, Status, Chip, Avatar, and more)
* **Emotion** — CSS-in-JS with `@emotion/react`
* **Styled-components** — `styled.div` patterns
* **Tailwind CSS** — utility classes
* **Any CSS-in-JS library** compatible with React
* **Estilos inline** — `style={{ color: 'red' }}`
* **Componentes de UI do Twenty** — importe de `twenty-sdk/ui` (Button, Tag, Status, Chip, Avatar e mais)
* **Emotion** — CSS-in-JS com `@emotion/react`
* **Styled-components** — padrões `styled.div`
* **Tailwind CSS** — classes utilitárias
* **Qualquer biblioteca CSS-in-JS** compatível com React
```tsx
import { defineFrontComponent } from 'twenty-sdk';
@@ -1022,9 +1021,9 @@ Pontos-chave:
* `description` (opcional) fornece contexto adicional sobre a finalidade da habilidade.
</Accordion>
<Accordion title="defineAgent" description="Define AI agents with custom prompts">
<Accordion title="defineAgent" description="Defina agentes de IA com prompts personalizados">
Agents are AI assistants that live inside your workspace. Use `defineAgent()` to create agents with a custom system prompt:
Agentes são assistentes de IA que vivem dentro do seu espaço de trabalho. Use `defineAgent()` para criar agentes com um prompt de sistema personalizado:
```ts src/agents/example-agent.ts
import { defineAgent } from 'twenty-sdk';
@@ -1040,17 +1039,17 @@ export default defineAgent({
```
Pontos-chave:
* `name` is the unique identifier string for the agent (kebab-case recommended).
* `label` is the display name shown in the UI.
* `prompt` is the system prompt that defines the agent's behavior.
* `description` (optional) provides context about what the agent does.
* `name` é a string de identificador exclusiva do agente (recomenda-se kebab-case).
* `label` é o nome de exibição mostrado na UI.
* `prompt` é o prompt do sistema que define o comportamento do agente.
* `description` (opcional) fornece contexto sobre o que o agente faz.
* `icon` (opcional) define o ícone exibido na UI.
* `modelId` (optional) overrides the default AI model used by the agent.
* `modelId` (opcional) substitui o modelo de IA padrão usado pelo agente.
</Accordion>
<Accordion title="defineView" description="Define visualizações salvas para objetos">
Views are saved configurations for how records of an object are displayed — including which fields are visible, their order, and any filters or groups applied. Use `defineView()` to ship pre-configured views with your app:
As visualizações são configurações salvas de como os registros de um objeto são exibidos — incluindo quais campos são visíveis, sua ordem e quaisquer filtros ou grupos aplicados. Use `defineView()` para enviar visualizações pré-configuradas com seu app:
```ts src/views/example-view.ts
import { defineView, ViewKey } from 'twenty-sdk';
@@ -1077,16 +1076,16 @@ export default defineView({
```
Pontos-chave:
* `objectUniversalIdentifier` specifies which object this view applies to.
* `key` determines the view type (e.g., `ViewKey.INDEX` for the main list view).
* `fields` controls which columns appear and their order. Each field references a `fieldMetadataUniversalIdentifier`.
* You can also define `filters`, `filterGroups`, `groups`, and `fieldGroups` for more advanced configurations.
* `position` controls the ordering when multiple views exist for the same object.
* `objectUniversalIdentifier` especifica a qual objeto esta visualização se aplica.
* `key` determina o tipo de visualização (por exemplo, `ViewKey.INDEX` para a visualização de lista principal).
* `fields` controla quais colunas aparecem e sua ordem. Cada campo referencia um `fieldMetadataUniversalIdentifier`.
* Você também pode definir `filters`, `filterGroups`, `groups` e `fieldGroups` para configurações mais avançadas.
* `position` controla a ordenação quando existem várias visualizações para o mesmo objeto.
</Accordion>
<Accordion title="defineNavigationMenuItem" description="Define links de navegação da barra lateral">
Navigation menu items add custom entries to the workspace sidebar. Use `defineNavigationMenuItem()` to link to views, external URLs, or objects:
Os itens do menu de navegação adicionam entradas personalizadas à barra lateral do espaço de trabalho. Use `defineNavigationMenuItem()` para vincular a visualizações, URLs externas ou objetos:
```ts src/navigation-menu-items/example-navigation-menu-item.ts
import { defineNavigationMenuItem, NavigationMenuItemType } from 'twenty-sdk';
@@ -1104,15 +1103,15 @@ export default defineNavigationMenuItem({
```
Pontos-chave:
* `type` determines what the menu item links to: `NavigationMenuItemType.VIEW` for a saved view, or `NavigationMenuItemType.LINK` for an external URL.
* For view links, set `viewUniversalIdentifier`. For external links, set `link`.
* `position` controls the ordering in the sidebar.
* `icon` and `color` (optional) customize the appearance.
* `type` determina para o que o item de menu aponta: `NavigationMenuItemType.VIEW` para uma visualização salva ou `NavigationMenuItemType.LINK` para uma URL externa.
* Para links de visualização, defina `viewUniversalIdentifier`. Para links externos, defina `link`.
* `position` controla a ordenação na barra lateral.
* `icon` e `color` (opcionais) personalizam a aparência.
</Accordion>
<Accordion title="definePageLayout" description="Define custom page layouts for record views">
<Accordion title="definePageLayout" description="Defina layouts de página personalizados para visualizações de registro">
Page layouts let you customize how a record detail page looks — which tabs appear, what widgets are inside each tab, and how they are arranged. Use `definePageLayout()` to ship custom layouts with your app:
Layouts de página permitem personalizar como uma página de detalhes do registro se parece — quais abas aparecem, quais widgets estão dentro de cada aba e como eles são organizados. Use `definePageLayout()` para enviar layouts personalizados com seu app:
```ts src/page-layouts/example-record-page-layout.ts
import { definePageLayout, PageLayoutTabLayoutMode } from 'twenty-sdk';
@@ -1149,33 +1148,33 @@ export default definePageLayout({
```
Pontos-chave:
* `type` is typically `'RECORD_PAGE'` to customize the detail view of a specific object.
* `objectUniversalIdentifier` specifies which object this layout applies to.
* Each `tab` defines a section of the page with a `title`, `position`, and `layoutMode` (`CANVAS` for free-form layout).
* Each `widget` inside a tab can render a front component, a relation list, or other built-in widget types.
* `position` on tabs controls their order. Use higher values (e.g., 50) to place custom tabs after built-in ones.
* `type` geralmente é `'RECORD_PAGE'` para personalizar a visualização de detalhes de um objeto específico.
* `objectUniversalIdentifier` especifica a qual objeto este layout se aplica.
* Cada `tab` define uma seção da página com um `title`, `position` e `layoutMode` (`CANVAS` para layout livre).
* Cada `widget` dentro de uma aba pode renderizar um componente de front-end, uma lista de relações ou outros tipos de widget incorporados.
* `position` nas abas controla sua ordem. Use valores mais altos (por exemplo, 50) para colocar abas personalizadas após as nativas.
</Accordion>
</AccordionGroup>
## Public assets (`public/` folder)
## Recursos públicos (pasta `public/`)
The `public/` folder at the root of your app holds static files — images, icons, fonts, or any other assets your app needs at runtime. These files are automatically included in builds, synced during dev mode, and uploaded to the server.
A pasta `public/` na raiz do seu app contém arquivos estáticos — imagens, ícones, fontes ou quaisquer outros recursos de que seu app precisa em tempo de execução. Esses arquivos são incluídos automaticamente nas compilações, sincronizados durante o modo de desenvolvimento e enviados para o servidor.
Files placed in `public/` are:
Arquivos colocados em `public/` são:
* **Publicly accessible** — once synced to the server, assets are served at a public URL. No authentication is needed to access them.
* **Available in front components** — use asset URLs to display images, icons, or any media inside your React components.
* **Available in logic functions** — reference asset URLs in emails, API responses, or any server-side logic.
* **Used for marketplace metadata** — the `logoUrl` and `screenshots` fields in `defineApplication()` reference files from this folder (e.g., `public/logo.png`). These are displayed in the marketplace when your app is published.
* **Auto-synced in dev mode** — when you add, update, or delete a file in `public/`, it is synced to the server automatically. No restart needed.
* **Included in builds** — `yarn twenty build` bundles all public assets into the distribution output.
* **Publicamente acessíveis** — depois de sincronizados com o servidor, os recursos são servidos em uma URL pública. Não é necessária autenticação para acessá-los.
* **Disponíveis em componentes de front-end** — use URLs de recursos para exibir imagens, ícones ou qualquer mídia dentro de seus componentes React.
* **Disponíveis em funções lógicas** — referencie URLs de recursos em e-mails, respostas de API ou qualquer lógica no lado do servidor.
* **Usados para metadados do marketplace** — os campos `logoUrl` e `screenshots` em `defineApplication()` referenciam arquivos desta pasta (por exemplo, `public/logo.png`). Eles são exibidos no marketplace quando seu app é publicado.
* **Sincronizados automaticamente no modo de desenvolvimento** — quando você adiciona, atualiza ou exclui um arquivo em `public/`, ele é sincronizado automaticamente com o servidor. Não é necessário reiniciar.
* **Incluídos nas compilações** — `yarn twenty build` agrupa todos os recursos públicos na saída de distribuição.
### Accessing public assets with `getPublicAssetUrl`
### Acessando recursos públicos com `getPublicAssetUrl`
Use the `getPublicAssetUrl` helper from `twenty-sdk` to get the full URL of a file in your `public/` directory. It works in both **logic functions** and **front components**.
Use o helper `getPublicAssetUrl` de `twenty-sdk` para obter a URL completa de um arquivo no seu diretório `public/`. Funciona tanto em **funções lógicas** quanto em **componentes de front-end**.
**In a logic function:**
**Em uma função lógica:**
```ts src/logic-functions/send-invoice.ts
import { defineLogicFunction, getPublicAssetUrl } from 'twenty-sdk';
@@ -1200,7 +1199,7 @@ export default defineLogicFunction({
});
```
**In a front component:**
**Em um componente de front-end:**
```tsx src/front-components/company-card.tsx
import { defineFrontComponent, getPublicAssetUrl } from 'twenty-sdk';
@@ -1212,19 +1211,19 @@ export default defineFrontComponent(() => {
});
```
The `path` argument is relative to your app's `public/` folder. Both `getPublicAssetUrl('logo.png')` and `getPublicAssetUrl('public/logo.png')` resolve to the same URL — the `public/` prefix is stripped automatically if present.
O argumento `path` é relativo à pasta `public/` do seu app. Tanto `getPublicAssetUrl('logo.png')` quanto `getPublicAssetUrl('public/logo.png')` resolvem para a mesma URL — o prefixo `public/` é removido automaticamente, se presente.
## Using npm packages
## Usando pacotes npm
You can install and use any npm package in your app. Both logic functions and front components are bundled with [esbuild](https://esbuild.github.io/), which inlines all dependencies into the output — no `node_modules` are needed at runtime.
Você pode instalar e usar qualquer pacote npm no seu app. Tanto funções lógicas quanto componentes de front-end são empacotados com [esbuild](https://esbuild.github.io/), que incorpora todas as dependências na saída — nenhum `node_modules` é necessário em tempo de execução.
### Installing a package
### Instalando um pacote
```bash filename="Terminal"
yarn add axios
```
Then import it in your code:
Em seguida, importe-o no seu código:
```ts src/logic-functions/fetch-data.ts
import { defineLogicFunction } from 'twenty-sdk';
@@ -1245,7 +1244,7 @@ export default defineLogicFunction({
});
```
The same works for front components:
O mesmo vale para componentes de front-end:
```tsx src/front-components/chart.tsx
import { defineFrontComponent } from 'twenty-sdk';
@@ -1262,27 +1261,27 @@ export default defineFrontComponent({
});
```
### How bundling works
### Como o empacotamento funciona
The build step (`yarn twenty dev` or `yarn twenty build`) uses esbuild to produce a single self-contained file per logic function and per front component. All imported packages are inlined into the bundle.
A etapa de build (`yarn twenty dev` ou `yarn twenty build`) usa o esbuild para produzir um único arquivo independente por função lógica e por componente de front-end. Todos os pacotes importados são incorporados ao bundle.
**Logic functions** run in a Node.js environment. Node built-in modules (`fs`, `path`, `crypto`, `http`, etc.) are available and do not need to be installed.
**Funções lógicas** são executadas em um ambiente Node.js. Módulos nativos do Node (`fs`, `path`, `crypto`, `http`, etc.) estão disponíveis e não precisam ser instalados.
**Front components** run in a Web Worker. Node built-in modules are **not** available — only browser APIs and npm packages that work in a browser environment.
**Componentes de front-end** são executados em um Web Worker. Módulos nativos do Node **não** estão disponíveis — apenas APIs do navegador e pacotes npm que funcionam em um ambiente de navegador.
Both environments have `twenty-client-sdk/core` and `twenty-client-sdk/metadata` available as pre-provided modules — these are not bundled but resolved at runtime by the server.
Ambos os ambientes têm `twenty-client-sdk/core` e `twenty-client-sdk/metadata` disponíveis como módulos pré-fornecidos — eles não são empacotados, mas resolvidos em tempo de execução pelo servidor.
## Scaffolding entities with `yarn twenty add`
## Gerando entidades com `yarn twenty add`
Instead of creating entity files by hand, you can use the interactive scaffolder:
Em vez de criar arquivos de entidade manualmente, você pode usar o scaffolder interativo:
```bash filename="Terminal"
yarn twenty add
```
This prompts you to pick an entity type and walks you through the required fields. It generates a ready-to-use file with a stable `universalIdentifier` and the correct `defineEntity()` call.
Isso solicita que você escolha um tipo de entidade e orienta você pelos campos obrigatórios. Ele gera um arquivo pronto para uso com um `universalIdentifier` estável e a chamada correta de `defineEntity()`.
You can also pass the entity type directly to skip the first prompt:
Você também pode passar o tipo de entidade diretamente para pular o primeiro prompt:
```bash filename="Terminal"
yarn twenty add object
@@ -1290,44 +1289,44 @@ yarn twenty add logicFunction
yarn twenty add frontComponent
```
### Available entity types
### Tipos de entidade disponíveis
| Tipo de entidade | Comando | Generated file |
| -------------------- | ------------------------------------ | ------------------------------------- |
| Objeto | `yarn twenty add object` | `src/objects/<name>.ts` |
| Campo | `yarn twenty add field` | `src/fields/<name>.ts` |
| Logic function | `yarn twenty add logicFunction` | `src/logic-functions/<name>.ts` |
| Front component | `yarn twenty add frontComponent` | `src/front-components/<name>.tsx` |
| Função | `yarn twenty add role` | `src/roles/<name>.ts` |
| Habilidade | `yarn twenty add skill` | `src/skills/<name>.ts` |
| Agente | `yarn twenty add agent` | `src/agents/<name>.ts` |
| Vista | `yarn twenty add view` | `src/views/<name>.ts` |
| Navigation menu item | `yarn twenty add navigationMenuItem` | `src/navigation-menu-items/<name>.ts` |
| Page layout | `yarn twenty add pageLayout` | `src/page-layouts/<name>.ts` |
| Tipo de entidade | Comando | Arquivo gerado |
| ------------------------- | ------------------------------------ | ------------------------------------- |
| Objeto | `yarn twenty add object` | `src/objects/<name>.ts` |
| Campo | `yarn twenty add field` | `src/fields/<name>.ts` |
| Função lógica | `yarn twenty add logicFunction` | `src/logic-functions/<name>.ts` |
| Componente de front-end | `yarn twenty add frontComponent` | `src/front-components/<name>.tsx` |
| Função | `yarn twenty add role` | `src/roles/<name>.ts` |
| Habilidade | `yarn twenty add skill` | `src/skills/<name>.ts` |
| Agente | `yarn twenty add agent` | `src/agents/<name>.ts` |
| Vista | `yarn twenty add view` | `src/views/<name>.ts` |
| Item do menu de navegação | `yarn twenty add navigationMenuItem` | `src/navigation-menu-items/<name>.ts` |
| Layout da página | `yarn twenty add pageLayout` | `src/page-layouts/<name>.ts` |
### What the scaffolder generates
### O que o scaffolder gera
Each entity type has its own template. For example, `yarn twenty add object` asks for:
Cada tipo de entidade tem seu próprio modelo. Por exemplo, `yarn twenty add object` solicita:
1. **Name (singular)** — e.g., `invoice`
2. **Name (plural)** — e.g., `invoices`
3. **Label (singular)** — auto-populated from the name (e.g., `Invoice`)
4. **Label (plural)** — auto-populated (e.g., `Invoices`)
5. **Create a view and navigation item?** — if you answer yes, the scaffolder also generates a matching view and sidebar link for the new object.
1. **Nome (singular)** — por exemplo, `invoice`
2. **Nome (plural)** — por exemplo, `invoices`
3. **Rótulo (singular)** — preenchido automaticamente a partir do nome (por exemplo, `Invoice`)
4. **Rótulo (plural)** — preenchido automaticamente (por exemplo, `Invoices`)
5. **Criar uma view e um item de navegação?** — se você responder sim, o scaffolder também gera uma view correspondente e um link na barra lateral para o novo objeto.
Other entity types have simpler prompts — most only ask for a name.
Outros tipos de entidade têm prompts mais simples — a maioria pede apenas um nome.
The `field` entity type is more detailed: it asks for the field name, label, type (from a list of all available field types like `TEXT`, `NUMBER`, `SELECT`, `RELATION`, etc.), and the target object's `universalIdentifier`.
O tipo de entidade `field` é mais detalhado: ele solicita o nome do campo, rótulo, tipo (a partir de uma lista de todos os tipos de campo disponíveis como `TEXT`, `NUMBER`, `SELECT`, `RELATION`, etc.) e o `universalIdentifier` do objeto de destino.
### Custom output path
### Caminho de saída personalizado
Use the `--path` flag to place the generated file in a custom location:
Use a opção `--path` para colocar o arquivo gerado em um local personalizado:
```bash filename="Terminal"
yarn twenty add logicFunction --path src/custom-folder
```
## Typed API clients (twenty-client-sdk)
## Clientes de API tipados (twenty-client-sdk)
O pacote `twenty-client-sdk` fornece dois clientes GraphQL tipados para interagir com a API do Twenty a partir das suas funções de lógica e componentes de front-end.
@@ -1337,9 +1336,9 @@ O pacote `twenty-client-sdk` fornece dois clientes GraphQL tipados para interagi
| `MetadataApiClient` | `twenty-client-sdk/metadata` | `/metadata` — configuração do espaço de trabalho, upload de arquivos | Não, vem pré-compilado |
<AccordionGroup>
<Accordion title="CoreApiClient" description="Query and mutate workspace data (records, objects)">
<Accordion title="CoreApiClient" description="Consultar e modificar dados do espaço de trabalho (registros, objetos)">
`CoreApiClient` é o cliente principal para consultar e mutar dados do espaço de trabalho. It is **generated from your workspace schema** during `yarn twenty dev` or `yarn twenty build`, so it is fully typed to match your objects and fields.
`CoreApiClient` é o cliente principal para consultar e mutar dados do espaço de trabalho. Ele é **gerado a partir do schema do seu espaço de trabalho** durante `yarn twenty dev` ou `yarn twenty build`, então é totalmente tipado para corresponder aos seus objetos e campos.
```ts
import { CoreApiClient } from 'twenty-client-sdk/core';
@@ -1379,12 +1378,12 @@ const { createCompany } = await client.mutation({
O cliente usa uma sintaxe de selection-set: passe `true` para incluir um campo, use `__args` para argumentos e aninhe objetos para relações. Você tem preenchimento automático e verificação de tipos completos com base no schema do seu espaço de trabalho.
<Note>
**CoreApiClient is generated at dev/build time.** If you use it without running `yarn twenty dev` or `yarn twenty build` first, it throws an error. The generation happens automatically — the CLI introspects your workspace's GraphQL schema and generates a typed client using `@genql/cli`.
**CoreApiClient é gerado em tempo de dev/build.** Se você usá-lo sem executar primeiro `yarn twenty dev` ou `yarn twenty build`, ele lançará um erro. A geração ocorre automaticamente — a CLI analisa o schema GraphQL do seu espaço de trabalho e gera um cliente tipado usando `@genql/cli`.
</Note>
#### Usando CoreSchema para anotações de tipo
`CoreSchema` provides TypeScript types matching your workspace objects — useful for typing component state or function parameters:
`CoreSchema` fornece tipos TypeScript que correspondem aos objetos do seu espaço de trabalho — útil para tipar o estado de componentes ou parâmetros de função:
```ts
import { CoreApiClient, CoreSchema } from 'twenty-client-sdk/core';
@@ -1406,7 +1405,7 @@ setCompany(result.company);
```
</Accordion>
<Accordion title="MetadataApiClient" description="Workspace config, applications, and file uploads">
<Accordion title="MetadataApiClient" description="Configuração do espaço de trabalho, aplicativos e upload de arquivos">
`MetadataApiClient` é fornecido pré-compilado com o SDK (não é necessário gerar). Ele consulta o endpoint `/metadata` para configuração do espaço de trabalho, aplicativos e upload de arquivos.
@@ -1462,7 +1461,7 @@ console.log(uploadedFile);
| ---------------------------------- | -------- | -------------------------------------------------------------- |
| `fileBuffer` | `Buffer` | O conteúdo bruto do arquivo |
| `filename` | `string` | O nome do arquivo (usado para armazenamento e exibição) |
| `contentType` | `string` | MIME type (defaults to `application/octet-stream` if omitted) |
| `contentType` | `string` | Tipo MIME (padrão para `application/octet-stream` se omitido) |
| `fieldMetadataUniversalIdentifier` | `string` | O `universalIdentifier` do campo do tipo arquivo no seu objeto |
Pontos-chave:
@@ -1476,24 +1475,24 @@ Pontos-chave:
Quando seu código é executado no Twenty (funções de lógica ou componentes de front-end), a plataforma injeta credenciais como variáveis de ambiente:
* `TWENTY_API_URL` — URL base da API do Twenty
* `TWENTY_APP_ACCESS_TOKEN` — Short-lived key scoped to your application's default function role
* `TWENTY_APP_ACCESS_TOKEN` — Chave de curta duração com escopo para o papel de função padrão do seu aplicativo
Você **não** precisa passá-las para os clientes — eles leem de `process.env` automaticamente. As permissões da chave de API são determinadas pelo papel referenciado em `defaultRoleUniversalIdentifier` no seu `application-config.ts`.
</Note>
## Testing your app
## Testando seu aplicativo
The SDK provides programmatic APIs that let you build, deploy, install, and uninstall your app from test code. Combined with [Vitest](https://vitest.dev/) and the typed API clients, you can write integration tests that verify your app works end-to-end against a real Twenty server.
O SDK fornece APIs programáticas que permitem compilar, implantar, instalar e desinstalar seu aplicativo a partir de código de teste. Em conjunto com [Vitest](https://vitest.dev/) e os clientes de API tipados, você pode escrever testes de integração que verificam que seu aplicativo funciona de ponta a ponta em um servidor Twenty real.
### Configuração
The scaffolded app already includes Vitest. If you set it up manually, install the dependencies:
O aplicativo gerado pelo scaffolder já inclui o Vitest. Se você configurá-lo manualmente, instale as dependências:
```bash filename="Terminal"
yarn add -D vitest vite-tsconfig-paths
```
Create a `vitest.config.ts` at the root of your app:
Crie um `vitest.config.ts` na raiz do seu aplicativo:
```ts vitest.config.ts
import tsconfigPaths from 'vite-tsconfig-paths';
@@ -1519,7 +1518,7 @@ export default defineConfig({
});
```
Create a setup file that verifies the server is reachable before tests run:
Crie um arquivo de configuração que verifique se o servidor está acessível antes da execução dos testes:
```ts src/__tests__/setup-test.ts
import * as fs from 'fs';
@@ -1559,22 +1558,22 @@ beforeAll(async () => {
});
```
### Programmatic SDK APIs
### APIs programáticas do SDK
The `twenty-sdk/cli` subpath exports functions you can call directly from test code:
O subcaminho `twenty-sdk/cli` exporta funções que você pode chamar diretamente a partir do código de teste:
| Função | Descrição |
| -------------- | ------------------------------------------- |
| `appBuild` | Build the app and optionally pack a tarball |
| `appDeploy` | Upload a tarball to the server |
| `appInstall` | Install the app on the active workspace |
| `appUninstall` | Uninstall the app from the active workspace |
| Função | Descrição |
| -------------- | ------------------------------------------------------------ |
| `appBuild` | Compilar o aplicativo e, opcionalmente, empacotar um tarball |
| `appDeploy` | Enviar um tarball para o servidor |
| `appInstall` | Instalar o aplicativo no espaço de trabalho ativo |
| `appUninstall` | Desinstalar o aplicativo do espaço de trabalho ativo |
Each function returns a result object with `success: boolean` and either `data` or `error`.
Cada função retorna um objeto de resultado com `success: boolean` e `data` ou `error`.
### Writing an integration test
### Escrevendo um teste de integração
Here is a full example that builds, deploys, and installs the app, then verifies it appears in the workspace:
Aqui está um exemplo completo que compila, implanta e instala o aplicativo e, em seguida, verifica se ele aparece no espaço de trabalho:
```ts src/__tests__/app-install.integration-test.ts
import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/application-config';
@@ -1637,37 +1636,37 @@ describe('App installation', () => {
});
```
### Running tests
### Executando testes
Make sure your local Twenty server is running, then:
Certifique-se de que seu servidor Twenty local esteja em execução e, em seguida:
```bash filename="Terminal"
yarn test
```
Or in watch mode during development:
Ou no modo watch durante o desenvolvimento:
```bash filename="Terminal"
yarn test:watch
```
### Type checking
### Verificação de tipos
You can also run type checking on your app without running tests:
Você também pode executar a verificação de tipos no seu aplicativo sem executar os testes:
```bash filename="Terminal"
yarn twenty typecheck
```
This runs `tsc --noEmit` and reports any type errors.
Isso executa `tsc --noEmit` e informa quaisquer erros de tipo.
## Referência da CLI
Beyond `dev`, `build`, `add`, and `typecheck`, the CLI provides commands for executing functions, viewing logs, and managing app installations.
Além de `dev`, `build`, `add` e `typecheck`, a CLI fornece comandos para executar funções, visualizar logs e gerenciar instalações de aplicativos.
### Executing functions (`yarn twenty exec`)
### Executando funções (`yarn twenty exec`)
Run a logic function manually without triggering it via HTTP, cron, or database event:
Execute manualmente uma função de lógica sem acioná-la via HTTP, cron ou evento de banco de dados:
```bash filename="Terminal"
# Execute by function name
@@ -1684,9 +1683,9 @@ yarn twenty exec --preInstall
yarn twenty exec --postInstall
```
### Viewing function logs (`yarn twenty logs`)
### Visualizando logs de funções (`yarn twenty logs`)
Stream execution logs for your app's logic functions:
Transmita os logs de execução das funções de lógica do seu aplicativo:
```bash filename="Terminal"
# Stream all function logs
@@ -1700,12 +1699,12 @@ yarn twenty logs -u e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf
```
<Note>
This is different from `yarn twenty server logs`, which shows the Docker container logs. `yarn twenty logs` shows your app's function execution logs from the Twenty server.
Isso é diferente de `yarn twenty server logs`, que mostra os logs do contêiner Docker. `yarn twenty logs` mostra os logs de execução de funções do seu aplicativo a partir do servidor Twenty.
</Note>
### Uninstalling an app (`yarn twenty uninstall`)
### Desinstalando um aplicativo (`yarn twenty uninstall`)
Remove your app from the active workspace:
Remova seu aplicativo do espaço de trabalho ativo:
```bash filename="Terminal"
yarn twenty uninstall
@@ -4,142 +4,142 @@ description: Crie seu primeiro app do Twenty em minutos.
---
<Warning>
Apps are currently in alpha. The feature works but is still evolving.
Os aplicativos estão atualmente em testes alfa. O recurso é funcional, mas ainda está evoluindo.
</Warning>
Os apps permitem que você estenda o Twenty com objetos, campos, funções de lógica, habilidades de IA e componentes de UI personalizados — tudo gerenciado como código.
## Pré-requisitos
Before you begin, make sure the following is installed on your machine:
Antes de começar, verifique se o seguinte está instalado na sua máquina:
* **Node.js 24+** — [Download here](https://nodejs.org/)
* **Yarn 4** — Comes with Node.js via Corepack. Enable it by running `corepack enable`
* **Docker** — [Download here](https://www.docker.com/products/docker-desktop/). Required to run a local Twenty instance. Not needed if you already have a Twenty server running.
* **Node.js 24+** — [Baixe aqui](https://nodejs.org/)
* **Yarn 4** — Vem com o Node.js via Corepack. Ative-o executando `corepack enable`
* **Docker** — [Baixe aqui](https://www.docker.com/products/docker-desktop/). Necessário para executar uma instância local do Twenty. Não é necessário se você já tiver um servidor Twenty em execução.
## Step 1: Scaffold your app
## Passo 1: Gere o scaffold do seu aplicativo
Open a terminal and run:
Abra um terminal e execute:
```bash filename="Terminal"
npx create-twenty-app@latest my-twenty-app
```
You will be prompted to enter a name and a description for your app. Press **Enter** to accept the defaults.
Será solicitado que você informe um nome e uma descrição para o seu aplicativo. Pressione **Enter** para aceitar os valores padrão.
This creates a new folder called `my-twenty-app` with everything you need.
Isso cria uma nova pasta chamada `my-twenty-app` com tudo de que você precisa.
<Note>
The scaffolder supports these flags:
O gerador de scaffold oferece suporte a estas flags:
* `--minimal` — scaffold only the essential files, no examples (default)
* `--exhaustive` — scaffold all example entities
* `--name <name>` — set the app name (skips the prompt)
* `--display-name <displayName>` — set the display name (skips the prompt)
* `--description <description>` — set the description (skips the prompt)
* `--skip-local-instance` — skip the local server setup prompt
* `--minimal` — gera apenas os arquivos essenciais, sem exemplos (padrão)
* `--exhaustive` — gera todas as entidades de exemplo
* `--name <name>` — define o nome do aplicativo (pula o prompt)
* `--display-name <displayName>` — define o nome de exibição (pula o prompt)
* `--description <description>` — define a descrição (pula o prompt)
* `--skip-local-instance` — ignora o prompt de configuração do servidor local
</Note>
## Step 2: Set up a local Twenty instance
## Passo 2: Configure uma instância local do Twenty
The scaffolder will ask:
O gerador de scaffold perguntará:
> **Would you like to set up a local Twenty instance?**
> **Você gostaria de configurar uma instância local do Twenty?**
* **Type `yes`** (recommended) — This pulls the `twenty-app-dev` Docker image and starts a local Twenty server on port `2020`. Make sure Docker is running before you continue.
* **Type `no`** — Choose this if you already have a Twenty server running locally.
* **Digite `yes`** (recomendado) — Isso baixa a imagem Docker `twenty-app-dev` e inicia um servidor Twenty local na porta `2020`. Certifique-se de que o Docker esteja em execução antes de continuar.
* **Digite `no`** — Escolha esta opção se você já tiver um servidor Twenty em execução localmente.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/start-instance.png" alt="Should start local instance?" />
<img src="/images/docs/developers/extends/apps/start-instance.png" alt="Deve iniciar instância local?" />
</div>
## Step 3: Sign in to your workspace
## Passo 3: Faça login no seu espaço de trabalho
Next, a browser window will open with the Twenty login page. Sign in with the pre-seeded demo account:
Em seguida, uma janela do navegador será aberta com a página de login do Twenty. Faça login com a conta de demonstração pré-configurada:
* **Email:** `tim@apple.dev`
* **Password:** `tim@apple.dev`
* **E-mail:** `tim@apple.dev`
* **Senha:** `tim@apple.dev`
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/login.png" alt="Twenty login screen" />
<img src="/images/docs/developers/extends/apps/login.png" alt="Tela de login do Twenty" />
</div>
## Step 4: Authorize the app
## Passo 4: Autorize o aplicativo
After you sign in, you will see an authorization screen. This lets your app interact with your workspace.
Após fazer login, você verá uma tela de autorização. Isso permite que seu aplicativo interaja com seu espaço de trabalho.
Click **Authorize** to continue.
Clique em **Authorize** para continuar.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/authorize.png" alt="Twenty CLI authorization screen" />
<img src="/images/docs/developers/extends/apps/authorize.png" alt="Tela de autorização da CLI do Twenty" />
</div>
Once authorized, your terminal will confirm that everything is set up.
Depois de autorizado, seu terminal confirmará que tudo está configurado.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/scaffolded.png" alt="App scaffolded successfully" />
<img src="/images/docs/developers/extends/apps/scaffolded.png" alt="Scaffold do aplicativo criado com sucesso" />
</div>
## Step 5: Start developing
## Passo 5: Comece a desenvolver
Go into your new app folder and start the development server:
Entre na nova pasta do seu aplicativo e inicie o servidor de desenvolvimento:
```bash filename="Terminal"
cd my-twenty-app
yarn twenty dev
```
This watches your source files, rebuilds on every change, and syncs your app to the local Twenty server automatically. You should see a live status panel in your terminal.
Isso observa seus arquivos-fonte, recompila a cada alteração e sincroniza seu aplicativo com o servidor Twenty local automaticamente. Você deverá ver um painel de status em tempo real no seu terminal.
For more detailed output (build logs, sync requests, error traces), use the `--verbose` flag:
Para uma saída mais detalhada (logs de build, solicitações de sincronização, rastros de erro), use a flag `--verbose`:
```bash filename="Terminal"
yarn twenty dev --verbose
```
<Warning>
Dev mode is only available on Twenty instances running in development (`NODE_ENV=development`). Production instances reject dev sync requests. Use `yarn twenty deploy` to deploy to production servers — see [Publishing Apps](/l/pt/developers/extend/apps/publishing) for details.
O modo de desenvolvimento só está disponível em instâncias do Twenty em modo de desenvolvimento (`NODE_ENV=development`). Instâncias de produção rejeitam solicitações de sincronização de desenvolvimento. Use `yarn twenty deploy` para fazer o deploy em servidores de produção — veja [Publicando aplicativos](/l/pt/developers/extend/apps/publishing) para detalhes.
</Warning>
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/dev.jpg" alt="Dev mode terminal output" />
<img src="/images/docs/developers/extends/apps/dev.jpg" alt="Saída do terminal no modo de desenvolvimento" />
</div>
## Step 6: See your app in Twenty
## Passo 6: Veja seu aplicativo no Twenty
Open [http://localhost:2020/settings/applications#developer](http://localhost:2020/settings/applications#developer) in your browser. Navigate to **Settings > Apps** and select the **Developer** tab. You should see your app listed under **Your Apps**:
Abra [http://localhost:2020/settings/applications#developer](http://localhost:2020/settings/applications#developer) no seu navegador. Navegue até **Settings > Apps** e selecione a aba **Developer**. Você deverá ver seu aplicativo listado em **Your Apps**:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-1.png" alt="Your Apps list showing My twenty app" />
<img src="/images/docs/developers/extends/apps/app-in-ui-1.png" alt="Lista Your Apps exibindo My twenty app" />
</div>
Click on **My twenty app** to open its **application registration**. A registration is a server-level record that describes your app — its name, unique identifier, OAuth credentials, and source (local, npm, or tarball). It lives on the server, not inside any specific workspace. When you install an app into a workspace, Twenty creates a workspace-scoped **application** that points back to this registration. One registration can be installed across multiple workspaces on the same server.
Clique em **My twenty app** para abrir o seu **registro do aplicativo**. Um registro é um registro em nível de servidor que descreve seu aplicativo — seu nome, identificador exclusivo, credenciais OAuth e origem (local, npm ou tarball). Ele reside no servidor, não dentro de nenhum espaço de trabalho específico. Quando você instala um aplicativo em um espaço de trabalho, o Twenty cria uma **aplicação** com escopo do espaço de trabalho que aponta para esse registro. Um registro pode ser instalado em vários espaços de trabalho no mesmo servidor.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-2.png" alt="Application registration details" />
<img src="/images/docs/developers/extends/apps/app-in-ui-2.png" alt="Detalhes do registro do aplicativo" />
</div>
Click **View installed app** to see the installed app. The **About** tab shows the current version and management options:
Clique em **View installed app** para ver o aplicativo instalado. A aba **About** mostra a versão atual e as opções de gerenciamento:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-3.png" alt="Installed app — About tab" />
<img src="/images/docs/developers/extends/apps/app-in-ui-3.png" alt="Aplicativo instalado — aba About" />
</div>
Switch to the **Content** tab to see everything your app provides — objects, fields, logic functions, and agents:
Altere para a aba **Content** para ver tudo o que seu aplicativo oferece — objetos, campos, funções de lógica e agentes:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-4.png" alt="Installed app — Content tab" />
<img src="/images/docs/developers/extends/apps/app-in-ui-4.png" alt="Aplicativo instalado — aba Content" />
</div>
You are all set! Edit any file in `src/` and the changes will be picked up automatically.
Tudo pronto! Edite qualquer arquivo em `src/` e as alterações serão detectadas automaticamente.
Head over to [Building Apps](/l/pt/developers/extend/apps/building) for a detailed guide on creating objects, logic functions, front components, skills, and more.
Acesse [Criando aplicativos](/l/pt/developers/extend/apps/building) para um guia detalhado sobre criação de objetos, funções de lógica, componentes de front-end, habilidades e mais.
---
## Project structure
## Estrutura do projeto
The scaffolder generates the following file structure (shown with `--exhaustive` mode, which includes examples for every entity type):
O gerador de scaffold cria a seguinte estrutura de arquivos (mostrada com o modo `--exhaustive`, que inclui exemplos para cada tipo de entidade):
```text filename="my-twenty-app/"
my-twenty-app/
@@ -190,30 +190,30 @@ my-twenty-app/
└── example-agent.ts # Example AI agent definition
```
By default (`--minimal`), only the core files are created: `application-config.ts`, `roles/default-role.ts`, `logic-functions/pre-install.ts`, and `logic-functions/post-install.ts`. Use `--exhaustive` to include all the example files shown above.
Por padrão (`--minimal`), apenas os arquivos principais são criados: `application-config.ts`, `roles/default-role.ts`, `logic-functions/pre-install.ts` e `logic-functions/post-install.ts`. Use `--exhaustive` para incluir todos os arquivos de exemplo mostrados acima.
### Key files
### Arquivos principais
| File / Folder | Finalidade |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `package.json` | Declares your app name, version, and dependencies. Includes a `twenty` script so you can run `yarn twenty help` to see all commands. |
| `src/application-config.ts` | **Required.** The main configuration file for your app. |
| `src/roles/` | Defines roles that control what your logic functions can access. |
| `src/logic-functions/` | Server-side functions triggered by routes, cron schedules, or database events. |
| `src/front-components/` | React components that render inside Twenty's UI. |
| `src/objects/` | Custom object definitions to extend your data model. |
| `src/fields/` | Custom fields added to existing objects. |
| `src/views/` | Saved view configurations. |
| `src/navigation-menu-items/` | Custom links in the sidebar navigation. |
| `src/skills/` | Habilidades que estendem os agentes de IA do Twenty. |
| `src/agents/` | AI agents with custom prompts. |
| `src/page-layouts/` | Custom page layouts for record views. |
| `src/__tests__/` | Integration tests (setup + example test). |
| `public/` | Static assets (images, fonts) served with your app. |
| Arquivo / Pasta | Finalidade |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `package.json` | Declara o nome, a versão e as dependências do seu aplicativo. Inclui um script `twenty` para que você possa executar `yarn twenty help` e ver todos os comandos. |
| `src/application-config.ts` | **Obrigatório.** O principal arquivo de configuração do seu aplicativo. |
| `src/roles/` | Define papéis que controlam o que suas funções de lógica podem acessar. |
| `src/logic-functions/` | Funções do lado do servidor acionadas por rotas, agendamentos do cron ou eventos de banco de dados. |
| `src/front-components/` | Componentes React que renderizam dentro da interface do Twenty. |
| `src/objects/` | Definições de objetos personalizados para estender seu modelo de dados. |
| `src/fields/` | Campos personalizados adicionados a objetos existentes. |
| `src/views/` | Configurações de visualizações salvas. |
| `src/navigation-menu-items/` | Links personalizados na navegação da barra lateral. |
| `src/skills/` | Habilidades que estendem os agentes de IA do Twenty. |
| `src/agents/` | Agentes de IA com prompts personalizados. |
| `src/page-layouts/` | Layouts de página personalizados para visualizações de registros. |
| `src/__tests__/` | Testes de integração (configuração + teste de exemplo). |
| `public/` | Recursos estáticos (imagens, fontes) servidos com seu aplicativo. |
## Managing remotes
## Gerenciando remotos
A **remote** is a Twenty server that your app connects to. During setup, the scaffolder creates one for you automatically. You can add more remotes or switch between them at any time.
Um **remoto** é um servidor Twenty ao qual seu aplicativo se conecta. Durante a configuração, o gerador de scaffold cria um para você automaticamente. Você pode adicionar mais remotos ou alternar entre eles a qualquer momento.
```bash filename="Terminal"
# Add a new remote (opens a browser for OAuth login)
@@ -232,11 +232,11 @@ yarn twenty remote list
yarn twenty remote switch <name>
```
Your credentials are stored in `~/.twenty/config.json`.
Suas credenciais são armazenadas em `~/.twenty/config.json`.
## Local development server (`yarn twenty server`)
## Servidor de desenvolvimento local (`yarn twenty server`)
The CLI can manage a local Twenty server running in Docker. This is the same server started automatically when you scaffold an app with `create-twenty-app`, but you can also manage it manually.
A CLI pode gerenciar um servidor Twenty local em execução no Docker. Este é o mesmo servidor iniciado automaticamente quando você cria o scaffold de um aplicativo com `create-twenty-app`, mas você também pode gerenciá-lo manualmente.
### Iniciando o servidor
@@ -244,85 +244,85 @@ The CLI can manage a local Twenty server running in Docker. This is the same ser
yarn twenty server start
```
This pulls the `twentycrm/twenty-app-dev:latest` Docker image (if not already present), creates a container named `twenty-app-dev`, and starts it on port **2020**. The CLI waits until the server passes its health check before returning.
Isso baixa a imagem Docker `twentycrm/twenty-app-dev:latest` (se ainda não estiver presente), cria um contêiner chamado `twenty-app-dev` e o inicia na porta **2020**. A CLI aguarda até que o servidor passe na verificação de integridade antes de retornar.
Two Docker volumes are created to persist data between restarts:
Dois volumes do Docker são criados para persistir os dados entre reinicializações:
* `twenty-app-dev-data` — PostgreSQL database
* `twenty-app-dev-storage` — file storage
* `twenty-app-dev-data` — banco de dados PostgreSQL
* `twenty-app-dev-storage` — armazenamento de arquivos
If port 2020 is already in use, you can start on a different port:
Se a porta 2020 já estiver em uso, você pode iniciar em uma porta diferente:
```bash filename="Terminal"
yarn twenty server start --port 3030
```
The CLI automatically configures the container's internal `NODE_PORT` and `SERVER_URL` to match the chosen port, so logic functions, OAuth, and all other internal networking work correctly.
A CLI configura automaticamente as variáveis internas do contêiner `NODE_PORT` e `SERVER_URL` para corresponderem à porta escolhida, para que as funções de lógica, o OAuth e toda a comunicação interna de rede funcionem corretamente.
Once started, the server is automatically registered as the `local` remote in your CLI config.
Depois de iniciado, o servidor é registrado automaticamente como o remoto `local` na configuração da sua CLI.
### Checking server status
### Verificando o status do servidor
```bash filename="Terminal"
yarn twenty server status
```
Displays whether the server is running, its URL, and the default login credentials (`tim@apple.dev` / `tim@apple.dev`).
Exibe se o servidor está em execução, sua URL e as credenciais de login padrão (`tim@apple.dev` / `tim@apple.dev`).
### Viewing server logs
### Visualizando os logs do servidor
```bash filename="Terminal"
yarn twenty server logs
```
Streams the container logs. Use `--lines` to control how many recent lines to show:
Transmite os logs do contêiner. Use `--lines` para controlar quantas linhas recentes mostrar:
```bash filename="Terminal"
yarn twenty server logs --lines 100
```
### Stopping the server
### Parando o servidor
```bash filename="Terminal"
yarn twenty server stop
```
Stops the container. Your data is preserved in the Docker volumes — the next `start` picks up where you left off.
Interrompe o contêiner. Seus dados são preservados nos volumes do Docker — o próximo `start` continua de onde você parou.
### Resetting the server
### Redefinindo o servidor
```bash filename="Terminal"
yarn twenty server reset
```
Removes the container **and** deletes both Docker volumes, wiping all data. The next `start` creates a fresh instance.
Remove o contêiner **e** exclui os dois volumes do Docker, apagando todos os dados. O próximo `start` cria uma instância nova.
<Note>
The server requires **Docker** to be running. If you see a "Docker not running" error, make sure Docker Desktop (or the Docker daemon) is started.
O servidor requer que o **Docker** esteja em execução. Se você vir um erro "Docker not running", certifique-se de que o Docker Desktop (ou o daemon do Docker) esteja iniciado.
</Note>
### Command reference
### Referência de comandos
| Comando | Descrição |
| -------------------------------------- | ---------------------------------------------- |
| `yarn twenty server start` | Start the local server (pulls image if needed) |
| `yarn twenty server start --port 3030` | Start on a custom port |
| `yarn twenty server stop` | Stop the server (preserves data) |
| `yarn twenty server status` | Show server status, URL, and credentials |
| `yarn twenty server logs` | Stream server logs |
| `yarn twenty server logs --lines 100` | Show the last 100 log lines |
| `yarn twenty server reset` | Delete all data and start fresh |
| Comando | Descrição |
| -------------------------------------- | ------------------------------------------------------ |
| `yarn twenty server start` | Inicia o servidor local (baixa a imagem se necessário) |
| `yarn twenty server start --port 3030` | Iniciar em uma porta personalizada |
| `yarn twenty server stop` | Interrompe o servidor (preserva os dados) |
| `yarn twenty server status` | Mostra o status do servidor, a URL e as credenciais |
| `yarn twenty server logs` | Transmite os logs do servidor |
| `yarn twenty server logs --lines 100` | Mostra as últimas 100 linhas de log |
| `yarn twenty server reset` | Exclui todos os dados e inicia do zero |
## CI with GitHub Actions
## CI com GitHub Actions
The scaffolder generates a ready-to-use GitHub Actions workflow at `.github/workflows/ci.yml`. It runs your integration tests automatically on every push to `main` and on pull requests.
O gerador de scaffold cria um workflow do GitHub Actions pronto para uso em `.github/workflows/ci.yml`. Ele executa seus testes de integração automaticamente a cada push para `main` e em pull requests.
The workflow:
O workflow:
1. Checks out your code
2. Spins up a temporary Twenty server using the `twentyhq/twenty/.github/actions/spawn-twenty-docker-image` action
3. Installs dependencies with `yarn install --immutable`
4. Runs `yarn test` with `TWENTY_API_URL` and `TWENTY_API_KEY` injected from the action outputs
1. Faz checkout do seu código
2. Inicializa um servidor Twenty temporário usando a ação `twentyhq/twenty/.github/actions/spawn-twenty-docker-image`
3. Instala as dependências com `yarn install --immutable`
4. Executa `yarn test` com `TWENTY_API_URL` e `TWENTY_API_KEY` injetados a partir das saídas da ação
```yaml .github/workflows/ci.yml
name: CI
@@ -369,21 +369,21 @@ jobs:
TWENTY_API_KEY: ${{ steps.twenty.outputs.access-token }}
```
You don't need to configure any secretsthe `spawn-twenty-docker-image` action starts an ephemeral Twenty server directly in the runner and outputs the connection details. The `GITHUB_TOKEN` secret is provided automatically by GitHub.
Você não precisa configurar nenhum segredoa ação `spawn-twenty-docker-image` inicia um servidor Twenty efêmero diretamente no runner e fornece os detalhes de conexão. O segredo `GITHUB_TOKEN` é fornecido automaticamente pelo GitHub.
To pin a specific Twenty version instead of `latest`, change the `TWENTY_VERSION` environment variable at the top of the workflow.
Para fixar uma versão específica do Twenty em vez de `latest`, altere a variável de ambiente `TWENTY_VERSION` no topo do workflow.
## Configuração manual (sem o gerador)
If you prefer to set things up yourself instead of using `create-twenty-app`, you can do it in two steps.
Se preferir configurar tudo por conta própria em vez de usar `create-twenty-app`, você pode fazer isso em duas etapas.
**1. Add `twenty-sdk` and `twenty-client-sdk` as dependencies:**
**1. Adicione `twenty-sdk` e `twenty-client-sdk` como dependências:**
```bash filename="Terminal"
yarn add twenty-sdk twenty-client-sdk
```
**2. Add a `twenty` script to your `package.json`:**
**2. Adicione um script `twenty` ao seu `package.json`:**
```json filename="package.json"
{
@@ -393,19 +393,19 @@ yarn add twenty-sdk twenty-client-sdk
}
```
You can now run `yarn twenty dev`, `yarn twenty help`, and all other commands.
Agora você pode executar `yarn twenty dev`, `yarn twenty help` e todos os outros comandos.
<Note>
Do not install `twenty-sdk` globally. Always use it as a local project dependency so that each project can pin its own version.
Não instale o `twenty-sdk` globalmente. Use-o sempre como uma dependência local do projeto para que cada projeto possa fixar sua própria versão.
</Note>
## Resolução de Problemas
If you run into issues:
Se você tiver problemas:
* Make sure **Docker is running** before starting the scaffolder with a local instance.
* Make sure you are using **Node.js 24+** (`node -v` to check).
* Make sure **Corepack is enabled** (`corepack enable`) so Yarn 4 is available.
* Try deleting `node_modules` and running `yarn install` again if dependencies seem broken.
* Certifique-se de que o **Docker está em execução** antes de iniciar o scaffolder com uma instância local.
* Certifique-se de que está usando **Node.js 24+** (`node -v` para verificar).
* Certifique-se de que o **Corepack está ativado** (`corepack enable`) para que o Yarn 4 esteja disponível.
* Tente excluir `node_modules` e executar `yarn install` novamente se as dependências parecerem corrompidas.
Still stuck? Ask for help on the [Twenty Discord](https://discord.com/channels/1130383047699738754/1130386664812982322).
Ainda com dificuldades? Peça ajuda no [Discord da Twenty](https://discord.com/channels/1130383047699738754/1130386664812982322).
@@ -4,24 +4,24 @@ description: Определяйте объекты, функции логики,
---
<Warning>
Apps are currently in alpha. The feature works but is still evolving.
Приложения сейчас проходят альфа-тестирование. Функция работает, но продолжает развиваться.
</Warning>
The `twenty-sdk` package provides typed building blocks to create your app. This page covers every entity type and API client available in the SDK.
Пакет `twenty-sdk` предоставляет типизированные строительные блоки для создания вашего приложения. На этой странице описаны все типы сущностей и клиенты API, доступные в SDK.
## DefineEntity functions
## Функции DefineEntity
The SDK provides functions to define your app entities. You must use `export default defineEntity({...})` for the SDK to detect your entities. Эти функции проверяют вашу конфигурацию на этапе сборки и обеспечивают автодополнение в IDE и безопасность типов.
SDK предоставляет функции для определения сущностей вашего приложения. Вы должны использовать `export default defineEntity({...})`, чтобы SDK обнаруживал ваши сущности. Эти функции проверяют вашу конфигурацию на этапе сборки и обеспечивают автодополнение в IDE и безопасность типов.
<Note>
**File organization is up to you.**
Entity detection is AST-based — the SDK finds `export default defineEntity(...)` calls regardless of where the file lives. Grouping files by type (e.g., `logic-functions/`, `roles/`) is just a convention, not a requirement.
**Организация файлов — на ваше усмотрение.**
Обнаружение сущностей основано на AST — SDK находит вызовы `export default defineEntity(...)` независимо от расположения файла. Группировка файлов по типу (например, `logic-functions/`, `roles/`) — это лишь соглашение, а не требование.
</Note>
<AccordionGroup>
<Accordion title="defineRole" description="Настраивает права роли и доступ к объектам">
Roles encapsulate permissions on your workspace's objects and actions.
Роли инкапсулируют права на объекты и действия вашего рабочего пространства.
```ts restricted-company-role.ts
import {
@@ -69,12 +69,12 @@ export default defineRole({
</Accordion>
<Accordion title="defineApplication" description="Настройка метаданных приложения (обязательно, по одному на приложение)">
Every app must have exactly one `defineApplication` call that describes:
В каждом приложении должен быть ровно один вызов `defineApplication`, который описывает:
* **Identity**: identifiers, display name, and description.
* **Permissions**: which role its functions and front components use.
* **(Optional) Variables**: keyvalue pairs exposed to your functions as environment variables.
* **(Optional) Pre-install / post-install functions**: logic functions that run before or after installation.
* **Идентификация**: идентификаторы, отображаемое имя и описание.
* **Разрешения**: какую роль используют его функции и фронтенд-компоненты.
* **(Необязательно) Переменные**: пары ключ–значение, доступные вашим функциям как переменные окружения.
* **(Необязательно) Предустановочные / постустановочные функции**: логические функции, которые запускаются до или после установки.
```ts src/application-config.ts
import { defineApplication } from 'twenty-sdk';
@@ -98,21 +98,21 @@ export default defineApplication({
```
Заметки:
* `universalIdentifier` fields are deterministic IDs you own. Generate them once and keep them stable across syncs.
* `applicationVariables` become environment variables for your functions and front components (e.g., `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
* `defaultRoleUniversalIdentifier` must reference a role defined with `defineRole()` (see above).
* Pre-install and post-install functions are detected automatically during the manifest build — you do not need to reference them in `defineApplication()`.
* Поля `universalIdentifier` — это детерминированные идентификаторы, которые принадлежат вам. Сгенерируйте их один раз и сохраняйте неизменными между синхронизациями.
* `applicationVariables` становятся переменными окружения для ваших функций и фронтенд-компонентов (например, `DEFAULT_RECIPIENT_NAME` доступна как `process.env.DEFAULT_RECIPIENT_NAME`).
* `defaultRoleUniversalIdentifier` должен ссылаться на роль, определённую с помощью `defineRole()` (см. выше).
* Предустановочные и постустановочные функции обнаруживаются автоматически во время сборки манифеста — вам не нужно указывать их в `defineApplication()`.
#### Метаданные маркетплейса
If you plan to [publish your app](/l/ru/developers/extend/apps/publishing), these optional fields control how it appears in the marketplace:
Если вы планируете [опубликовать приложение](/l/ru/developers/extend/apps/publishing), эти необязательные поля определяют, как оно отображается в маркетплейсе:
| Поле | Описание |
| ------------------ | ------------------------------------------------------------------------------------------------------------------- |
| `author` | Имя автора или название компании |
| `category` | Категория приложения для фильтрации в маркетплейсе |
| `logoUrl` | Path to your app logo (e.g., `public/logo.png`) |
| `screenshots` | Array of screenshot paths (e.g., `public/screenshot-1.png`) |
| `logoUrl` | Путь к логотипу вашего приложения (например, `public/logo.png`) |
| `screenshots` | Массив путей к скриншотам (например, `public/screenshot-1.png`) |
| `aboutDescription` | Расширенное описание в Markdown для вкладки "About". Если опущено, маркетплейс использует `README.md` пакета из npm |
| `websiteUrl` | Ссылка на ваш сайт |
| `termsUrl` | Ссылка на условия предоставления услуг |
@@ -121,15 +121,15 @@ If you plan to [publish your app](/l/ru/developers/extend/apps/publishing), thes
#### Роли и разрешения
The `defaultRoleUniversalIdentifier` in `application-config.ts` designates the default role used by your app's logic functions and front components. See `defineRole` above for details.
Поле `defaultRoleUniversalIdentifier` в `application-config.ts` обозначает роль по умолчанию, используемую логическими функциями и фронтенд-компонентами вашего приложения. Подробности см. в `defineRole` выше.
* The runtime token injected as `TWENTY_APP_ACCESS_TOKEN` is derived from this role.
* The typed client is restricted to the permissions granted to that role.
* Follow least-privilege: create a dedicated role with only the permissions your functions need.
* Токен времени выполнения, подставляемый как `TWENTY_APP_ACCESS_TOKEN`, формируется из этой роли.
* Типизированный клиент ограничен правами, предоставленными этой ролью.
* Следуйте принципу наименьших привилегий: создайте отдельную роль только с теми правами, которые нужны вашим функциям.
##### Default function role
##### Роль функции по умолчанию
When you scaffold a new app, the CLI creates a default role file:
Когда вы генерируете новое приложение, CLI создаёт файл роли по умолчанию:
```ts src/roles/default-role.ts
import { defineRole, PermissionFlag } from 'twenty-sdk';
@@ -155,16 +155,16 @@ export default defineRole({
});
```
This role's `universalIdentifier` is referenced in `application-config.ts` as `defaultRoleUniversalIdentifier`:
Значение `universalIdentifier` этой роли указывается в `application-config.ts` как `defaultRoleUniversalIdentifier`:
* **\*.role.ts** defines what the role can do.
* **\*.role.ts** определяет, что может делать роль.
* **application-config.ts** указывает на эту роль, чтобы ваши функции наследовали её права.
Заметки:
* Начните со сгенерированной роли, затем постепенно ограничивайте её, следуя принципу наименьших привилегий.
* Replace `objectPermissions` and `fieldPermissions` with the objects and fields your functions actually need.
* `permissionFlags` управляют доступом к возможностям на уровне платформы. Keep them minimal.
* See a working example: [`hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
* Замените `objectPermissions` и `fieldPermissions` на объекты и поля, которые действительно нужны вашим функциям.
* `permissionFlags` управляют доступом к возможностям на уровне платформы. Сведите их к минимуму.
* См. рабочий пример: [`hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
</Accordion>
<Accordion title="defineObject" description="Определяет пользовательские объекты с полями">
@@ -256,7 +256,7 @@ export default defineObject({
</Note>
</Accordion>
<Accordion title="defineField — Standard fields" description="Расширение существующих объектов дополнительными полями">
<Accordion title="defineField — Стандартные поля" description="Расширение существующих объектов дополнительными полями">
Используйте `defineField()` для добавления полей к объектам, которые вам не принадлежат — например, к стандартным объектам Twenty (Person, Company и т. д.). или к объектам из других приложений. В отличие от встроенных полей в `defineObject()`, отдельные поля требуют `objectUniversalIdentifier`, чтобы указать, какой объект они расширяют:
@@ -284,7 +284,7 @@ export default defineField({
* `defineField()` — единственный способ добавить поля к объектам, которые вы не создавали с помощью `defineObject()`.
</Accordion>
<Accordion title="defineField — Relation fields" description="Connect objects together with bidirectional relations">
<Accordion title="defineField — Поля связей" description="Связывайте объекты двунаправленными связями">
Отношения связывают объекты между собой. В Twenty отношения всегда двунаправленные — вы определяете обе стороны, и каждая сторона ссылается на другую.
@@ -443,7 +443,7 @@ export default defineObject({
});
```
</Accordion>
<Accordion title="defineLogicFunction" description="Define logic functions and their triggers">
<Accordion title="defineLogicFunction" description="Определяйте логические функции и их триггеры">
Каждый файл функции использует `defineLogicFunction()` для экспорта конфигурации с обработчиком и необязательными триггерами.
@@ -487,15 +487,15 @@ export default defineLogicFunction({
});
```
Available trigger types:
* **httpRoute**: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
> e.g. `path: '/post-card/create'` is callable at `https://your-twenty-server.com/s/post-card/create`
Доступные типы триггеров:
* **httpRoute**: Публикует вашу функцию по HTTP-пути и методу **под конечной точкой `/s/`**:
> например, `path: '/post-card/create'` вызывается по адресу `https://your-twenty-server.com/s/post-card/create`
* **cron**: Запускает вашу функцию по расписанию с использованием выражения CRON.
* **databaseEvent**: Запускается при событиях жизненного цикла объектов рабочего пространства. Когда операция события — `updated`, можно указать конкретные поля для отслеживания в массиве `updatedFields`. Если оставить не заданным или пустым, любое обновление будет вызывать функцию.
> e.g. `person.updated`, `*.created`, `company.*`
> например, `person.updated`, `*.created`, `company.*`
<Note>
You can also manually execute a function using the CLI:
Вы также можете вручную выполнить функцию с помощью CLI:
```bash filename="Terminal"
yarn twenty exec -n create-new-post-card -p '{"key": "value"}'
@@ -505,7 +505,7 @@ yarn twenty exec -n create-new-post-card -p '{"key": "value"}'
yarn twenty exec -y e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf
```
You can watch logs with:
Вы можете просматривать логи с помощью:
```bash filename="Terminal"
yarn twenty logs
@@ -514,9 +514,8 @@ yarn twenty logs
#### Полезная нагрузка триггера маршрута
When a route trigger invokes your logic function, it receives a `RoutePayload` object that follows the
[AWS HTTP API v2 format](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html).
Import the `RoutePayload` type from `twenty-sdk`:
Когда триггер маршрута вызывает вашу логическую функцию, она получает объект `RoutePayload`, который соответствует [формату AWS HTTP API v2](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html).
Импортируйте тип `RoutePayload` из `twenty-sdk`:
```ts
import { defineLogicFunction, type RoutePayload } from 'twenty-sdk';
@@ -533,9 +532,9 @@ const handler = async (event: RoutePayload) => {
| Свойство | Тип | Описание | Пример |
| ---------------------------- | ------------------------------------- | ------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | HTTP-заголовки (только перечисленные в `forwardedRequestHeaders`) | see section below |
| `headers` | `Record<string, string \| undefined>` | HTTP-заголовки (только перечисленные в `forwardedRequestHeaders`) | см. раздел ниже |
| `queryStringParameters` | `Record<string, string \| undefined>` | Параметры строки запроса (несколько значений объединяются запятыми) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
| `pathParameters` | `Record<string, string \| undefined>` | Path parameters extracted from the route pattern | `/users/:id`, `/users/123` -> `{ id: '123' }` |
| `pathParameters` | `Record<string, string \| undefined>` | Параметры пути, извлечённые из шаблона маршрута | `/users/:id`, `/users/123` -> `{ id: '123' }` |
| `body` | `object \| null` | Разобранное тело запроса (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
| `isBase64Encoded` | `логический тип` | Является ли тело закодированным в base64 | |
| `requestContext.http.method` | `строка` | Метод HTTP (GET, POST, PUT, PATCH, DELETE) | |
@@ -545,7 +544,7 @@ const handler = async (event: RoutePayload) => {
#### forwardedRequestHeaders
По умолчанию HTTP-заголовки из входящих запросов **не** передаются в вашу логическую функцию по соображениям безопасности.
To access specific headers, list them in the `forwardedRequestHeaders` array:
Чтобы получить доступ к определённым заголовкам, перечислите их в массиве `forwardedRequestHeaders`:
```ts
export default defineLogicFunction({
@@ -561,7 +560,7 @@ export default defineLogicFunction({
});
```
In your handler, access the forwarded headers like this:
В обработчике обращайтесь к переданным заголовкам следующим образом:
```ts
const handler = async (event: RoutePayload) => {
@@ -574,14 +573,14 @@ const handler = async (event: RoutePayload) => {
```
<Note>
Имена заголовков приводятся к нижнему регистру. Access them using lowercase keys (e.g., `event.headers['content-type']`).
Имена заголовков приводятся к нижнему регистру. Обращайтесь к ним, используя ключи в нижнем регистре (например, `event.headers['content-type']`).
</Note>
#### Exposing a function as a tool
#### Предоставление функции как инструмента
Логические функции можно предоставлять как **инструменты** для ИИ-агентов и рабочих процессов. When marked as a tool, a function becomes discoverable by Twenty's AI features and can be used in workflow automations.
Логические функции можно предоставлять как **инструменты** для ИИ-агентов и рабочих процессов. Когда функция помечена как инструмент, она становится доступной для функций ИИ Twenty и может использоваться в автоматизациях рабочих процессов.
To mark a logic function as a tool, set `isTool: true`:
Чтобы пометить логическую функцию как инструмент, установите `isTool: true`:
```ts src/logic-functions/enrich-company.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
@@ -617,8 +616,8 @@ export default defineLogicFunction({
Основные моменты:
* You can combine `isTool` with triggers — a function can be both a tool (callable by AI agents) and triggered by events at the same time.
* **`toolInputSchema`** (optional): A JSON Schema object describing the parameters your function accepts. The schema is computed automatically from source code static analysis, but you can set it explicitly:
* Вы можете комбинировать `isTool` с триггерами — функция может одновременно быть инструментом (вызываемым агентами ИИ) и запускаться событиями.
* **`toolInputSchema`** (необязательно): объект JSON Schema, описывающий параметры, которые принимает ваша функция. Схема вычисляется автоматически на основе статического анализа исходного кода, но вы можете задать её явно:
```ts
export default defineLogicFunction({
@@ -715,11 +714,11 @@ yarn twenty exec --postInstall
</Accordion>
<Accordion title="defineFrontComponent" description="Определение фронт-компонентов для настраиваемого интерфейса">
Front components are React components that render directly inside Twenty's UI. They run in an **isolated Web Worker** using Remote DOM — your code is sandboxed but renders natively in the page, not in an iframe.
Фронтенд-компоненты — это компоненты React, которые отображаются непосредственно внутри интерфейса Twenty. Они выполняются в изолированном Web Worker с использованием Remote DOM — ваш код изолирован (sandboxed), но рендерится нативно на странице, а не в iframe.
#### Basic example
#### Простой пример
The quickest way to see a front component in action is to register it as a **command**. Adding a `command` field with `isPinned: true` makes it appear as a quick-action button in the top-right corner of the page — no page layout needed:
Самый быстрый способ увидеть фронтенд-компонент в действии — зарегистрировать его как **команду**. Добавление поля `command` с `isPinned: true` делает его кнопкой быстрого действия в правом верхнем углу страницы — макет страницы не требуется:
```tsx src/front-components/hello-world.tsx
import { defineFrontComponent } from 'twenty-sdk';
@@ -749,34 +748,34 @@ export default defineFrontComponent({
});
```
After syncing with `yarn twenty dev`, the quick action appears in the top-right corner of the page:
После синхронизации с помощью `yarn twenty dev` быстрое действие появится в правом верхнем углу страницы:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/quick-action.png" alt="Quick action button in the top-right corner" />
<img src="/images/docs/developers/extends/apps/quick-action.png" alt="Кнопка быстрого действия в правом верхнем углу" />
</div>
Click it to render the component inline.
Нажмите её, чтобы отобразить компонент инлайн.
{/* TODO: add screenshot of the rendered front component */}
#### Configuration fields
#### Поля конфигурации
| Поле | Обязательно | Описание |
| --------------------- | ----------- | ----------------------------------------------------------------------------------- |
| `universalIdentifier` | Да | Stable unique ID for this component |
| `component` | Да | A React component function |
| `name` | Нет | Display name |
| `description` | Нет | Description of what the component does |
| `isHeadless` | Нет | Set to `true` if the component has no visible UI (see below) |
| `command` | Нет | Register the component as a command (see [command options](#command-options) below) |
| Поле | Обязательно | Описание |
| --------------------- | ----------- | -------------------------------------------------------------------------------------------------- |
| `universalIdentifier` | Да | Стабильный уникальный идентификатор для этого компонента |
| `component` | Да | Функция компонента React |
| `name` | Нет | Отображаемое имя |
| `description` | Нет | Описание того, что делает компонент |
| `isHeadless` | Нет | Установите значение `true`, если у компонента нет видимого пользовательского интерфейса (см. ниже) |
| `command` | Нет | Зарегистрируйте компонент как команду (см. [параметры команды](#command-options) ниже) |
#### Placing a front component on a page
#### Размещение фронт-компонента на странице
Beyond commands, you can embed a front component directly into a record page by adding it as a widget in a **page layout**. See the [definePageLayout](#definepagelayout) section for details.
Помимо команд, вы можете встроить фронт-компонент непосредственно на страницу записи, добавив его как виджет в **макет страницы**. См. раздел [definePageLayout](#definepagelayout) для подробностей.
#### Headless components (`isHeadless: true`)
#### Headless-компоненты (`isHeadless: true`)
Headless components render no visible UI but still run React logic. This is useful for **effect components** — components that perform side effects when mounted, such as syncing data, starting a timer, listening to events, or triggering a notification.
Headless-компоненты не отображают видимый UI, но при этом выполняют логику React. Это полезно для **компонентов-эффектов** — компонентов, которые выполняют побочные эффекты при монтировании, например синхронизацию данных, запуск таймера, прослушивание событий или показ уведомления.
```tsx src/front-components/sync-tracker.tsx
import { defineFrontComponent, useRecordId, enqueueSnackbar } from 'twenty-sdk';
@@ -801,11 +800,11 @@ export default defineFrontComponent({
});
```
Because the component returns `null`, Twenty skips rendering a container for it — no empty space appears in the layout. The component still has access to all hooks and the host communication API.
Поскольку компонент возвращает `null`, Twenty пропускает рендеринг контейнера для него — в макете не появляется пустое место. Компонент по-прежнему имеет доступ ко всем хукам и API взаимодействия с хостом.
#### Accessing runtime context
#### Доступ к контексту времени выполнения
Inside your component, use SDK hooks to access the current user, record, and component instance:
Внутри вашего компонента используйте хуки SDK для доступа к текущему пользователю, записи и экземпляру компонента:
```tsx src/front-components/record-info.tsx
import {
@@ -836,47 +835,47 @@ export default defineFrontComponent({
});
```
Available hooks:
Доступные хуки:
| Хук | Returns | Описание |
| --------------------------------------------- | ------------------ | ---------------------------------------------------------- |
| `useUserId()` | `string` or `null` | The current user's ID |
| `useRecordId()` | `string` or `null` | The current record's ID (when placed on a record page) |
| `useFrontComponentId()` | `строка` | This component instance's ID |
| `useFrontComponentExecutionContext(selector)` | различается | Access the full execution context with a selector function |
| Хук | Возвращает | Описание |
| --------------------------------------------- | ------------------- | ----------------------------------------------------------------- |
| `useUserId()` | `string` или `null` | ID текущего пользователя |
| `useRecordId()` | `string` или `null` | ID текущей записи (при размещении на странице записи) |
| `useFrontComponentId()` | `строка` | ID этого экземпляра компонента |
| `useFrontComponentExecutionContext(selector)` | различается | Доступ к полному контексту выполнения с помощью функции-селектора |
#### Host communication API
#### API взаимодействия с хостом
Front components can trigger navigation, modals, and notifications using functions from `twenty-sdk`:
Компоненты фронтенда могут вызывать навигацию, модальные окна и уведомления с помощью функций из `twenty-sdk`:
| Функция | Описание |
| ----------------------------------------------- | ----------------------------- |
| `navigate(to, params?, queryParams?, options?)` | Navigate to a page in the app |
| `openSidePanelPage(params)` | Open a side panel |
| `closeSidePanel()` | Закрыть боковую панель |
| `openCommandConfirmationModal(params)` | Show a confirmation dialog |
| `enqueueSnackbar(params)` | Show a toast notification |
| `unmountFrontComponent()` | Unmount the component |
| `updateProgress(progress)` | Update a progress indicator |
| Функция | Описание |
| ----------------------------------------------- | -------------------------------- |
| `navigate(to, params?, queryParams?, options?)` | Перейти на страницу в приложении |
| `openSidePanelPage(params)` | Открыть боковую панель |
| `closeSidePanel()` | Закрыть боковую панель |
| `openCommandConfirmationModal(params)` | Показать диалог подтверждения |
| `enqueueSnackbar(params)` | Показать всплывающее уведомление |
| `unmountFrontComponent()` | Размонтировать компонент |
| `updateProgress(progress)` | Обновить индикатор прогресса |
#### Command options
#### Параметры команды
Adding a `command` field to `defineFrontComponent` registers the component in the command menu (Cmd+K). If `isPinned` is `true`, it also appears as a quick-action button in the top-right corner of the page.
Добавление поля `command` в `defineFrontComponent` регистрирует компонент в меню команд (Cmd+K). Если `isPinned` имеет значение `true`, команда также отображается как кнопка быстрого действия в правом верхнем углу страницы.
| Поле | Обязательно | Описание |
| --------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `universalIdentifier` | Да | Stable unique ID for the command |
| `label` | Да | Full label shown in the command menu (Cmd+K) |
| `shortLabel` | Нет | Shorter label displayed on the pinned quick-action button |
| `icon` | Нет | Icon name displayed next to the label (e.g. `'IconBolt'`, `'IconSend'`) |
| `isPinned` | Нет | When `true`, shows the command as a quick-action button in the top-right corner of the page |
| `availabilityType` | Нет | Controls where the command appears: `'GLOBAL'` (always available), `'RECORD_SELECTION'` (only when records are selected), or `'FALLBACK'` (shown when no other commands match) |
| `availabilityObjectUniversalIdentifier` | Нет | Restrict the command to pages of a specific object type (e.g. only on Company records) |
| `conditionalAvailabilityExpression` | Нет | A boolean expression to dynamically control whether the command is visible (see below) |
| Поле | Обязательно | Описание |
| --------------------------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `universalIdentifier` | Да | Стабильный уникальный идентификатор для команды |
| `label` | Да | Полная метка, отображаемая в меню команд (Cmd+K) |
| `shortLabel` | Нет | Короткая метка, отображаемая на закреплённой кнопке быстрого действия |
| `icon` | Нет | Имя значка, отображаемое рядом с меткой (например, `'IconBolt'`, `'IconSend'`) |
| `isPinned` | Нет | При значении `true` показывает команду как кнопку быстрого действия в правом верхнем углу страницы |
| `availabilityType` | Нет | Определяет, где отображается команда: `'GLOBAL'` (доступна всегда), `'RECORD_SELECTION'` (только при выборе записей) или `'FALLBACK'` (показывается, когда другие команды не подходят) |
| `availabilityObjectUniversalIdentifier` | Нет | Ограничивает команду страницами определённого типа объектов (например, только для записей Company) |
| `conditionalAvailabilityExpression` | Нет | Логическое выражение для динамического управления видимостью команды (см. ниже) |
#### Conditional availability expressions
#### Выражения условной доступности
The `conditionalAvailabilityExpression` field lets you control when a command is visible based on the current page context. Import typed variables and operators from `twenty-sdk` to build expressions:
Поле `conditionalAvailabilityExpression` позволяет управлять видимостью команды в зависимости от текущего контекста страницы. Импортируйте типизированные переменные и операторы из `twenty-sdk`, чтобы составлять выражения:
```tsx
import {
@@ -905,45 +904,45 @@ export default defineFrontComponent({
});
```
**Context variables** — these represent the current state of the page:
**Переменные контекста** — представляют текущее состояние страницы:
| Переменная | Тип | Описание |
| ------------------------------ | --------- | ---------------------------------------------------------------- |
| `pageType` | `строка` | Current page type (e.g. `'RecordIndexPage'`, `'RecordShowPage'`) |
| `isInSidePanel` | `boolean` | Whether the component is rendered in a side panel |
| `numberOfSelectedRecords` | `number` | Number of currently selected records |
| `isSelectAll` | `boolean` | Whether "select all" is active |
| `selectedRecords` | `array` | The selected record objects |
| `favoriteRecordIds` | `array` | IDs of favorited records |
| `objectPermissions` | `object` | Permissions for the current object type |
| `targetObjectReadPermissions` | `object` | Read permissions for the target object |
| `targetObjectWritePermissions` | `object` | Write permissions for the target object |
| `featureFlags` | `object` | Active feature flags |
| `objectMetadataItem` | `object` | Metadata of the current object type |
| `hasAnySoftDeleteFilterOnView` | `boolean` | Whether the current view has a soft-delete filter |
| Переменная | Тип | Описание |
| ------------------------------ | --------- | ------------------------------------------------------------------------ |
| `pageType` | `строка` | Текущий тип страницы (например, `'RecordIndexPage'`, `'RecordShowPage'`) |
| `isInSidePanel` | `boolean` | Указывает, рендерится ли компонент в боковой панели |
| `numberOfSelectedRecords` | `number` | Количество выбранных в данный момент записей |
| `isSelectAll` | `boolean` | Активен ли режим "выбрать все" |
| `selectedRecords` | `массив` | Объекты выбранных записей |
| `favoriteRecordIds` | `массив` | ID избранных записей |
| `objectPermissions` | `object` | Разрешения для текущего типа объекта |
| `targetObjectReadPermissions` | `object` | Права на чтение для целевого объекта |
| `targetObjectWritePermissions` | `object` | Права на запись для целевого объекта |
| `featureFlags` | `object` | Активные флаги функций |
| `objectMetadataItem` | `object` | Метаданные текущего типа объекта |
| `hasAnySoftDeleteFilterOnView` | `boolean` | Есть ли у текущего представления фильтр мягкого удаления |
**Operators** — combine variables into boolean expressions:
**Операторы** — комбинируют переменные в логические выражения:
| Operator | Описание |
| ----------------------------------- | ----------------------------------------------------------------- |
| `isDefined(value)` | `true` if the value is not null/undefined |
| `isNonEmptyString(value)` | `true` if the value is a non-empty string |
| `includes(array, value)` | `true` if the array contains the value |
| `includesEvery(array, prop, value)` | `true` if every item's property includes the value |
| `every(array, prop)` | `true` if the property is truthy on every item |
| `everyDefined(array, prop)` | `true` if the property is defined on every item |
| `everyEquals(array, prop, value)` | `true` if the property equals the value on every item |
| `some(array, prop)` | `true` if the property is truthy on at least one item |
| `someDefined(array, prop)` | `true` if the property is defined on at least one item |
| `someEquals(array, prop, value)` | `true` if the property equals the value on at least one item |
| `someNonEmptyString(array, prop)` | `true` if the property is a non-empty string on at least one item |
| `none(array, prop)` | `true` if the property is falsy on every item |
| `noneDefined(array, prop)` | `true` if the property is undefined on every item |
| `noneEquals(array, prop, value)` | `true` if the property does not equal the value on any item |
| Оператор | Описание |
| ----------------------------------- | ------------------------------------------------------------------------- |
| `isDefined(value)` | `true`, если значение не null/undefined |
| `isNonEmptyString(value)` | `true`, если значение — непустая строка |
| `includes(array, value)` | `true`, если массив содержит значение |
| `includesEvery(array, prop, value)` | `true`, если свойство каждого элемента включает значение |
| `every(array, prop)` | `true`, если свойство истинно для каждого элемента |
| `everyDefined(array, prop)` | `true`, если свойство определено у каждого элемента |
| `everyEquals(array, prop, value)` | `true`, если свойство равно значению у каждого элемента |
| `some(array, prop)` | `true`, если свойство истинно хотя бы у одного элемента |
| `someDefined(array, prop)` | `true`, если свойство определено хотя бы у одного элемента |
| `someEquals(array, prop, value)` | `true`, если свойство равно значению хотя бы у одного элемента |
| `someNonEmptyString(array, prop)` | `true`, если свойство является непустой строкой хотя бы у одного элемента |
| `none(array, prop)` | `true`, если свойство ложно для каждого элемента |
| `noneDefined(array, prop)` | `true`, если свойство не определено ни у одного элемента |
| `noneEquals(array, prop, value)` | `true`, если свойство не равно значению ни у одного элемента |
#### Public assets
#### Публичные ресурсы
Front components can access files from the app's `public/` directory using `getPublicAssetUrl`:
Компоненты фронтенда могут получать доступ к файлам из каталога приложения `public/` с помощью `getPublicAssetUrl`:
```tsx
import { defineFrontComponent, getPublicAssetUrl } from 'twenty-sdk';
@@ -957,18 +956,18 @@ export default defineFrontComponent({
});
```
See the [public assets section](#accessing-public-assets-with-getpublicasseturl) for details.
См. [раздел о публичных ресурсах](#accessing-public-assets-with-getpublicasseturl) для подробностей.
#### Стилизация
Front components support multiple styling approaches. You can use:
Компоненты фронтенда поддерживают несколько подходов к стилизации. Вы можете использовать:
* **Inline styles** — `style={{ color: 'red' }}`
* **Twenty UI components** — import from `twenty-sdk/ui` (Button, Tag, Status, Chip, Avatar, and more)
* **Emotion** — CSS-in-JS with `@emotion/react`
* **Styled-components** — `styled.div` patterns
* **Tailwind CSS** — utility classes
* **Any CSS-in-JS library** compatible with React
* **Встроенные стили** — `style={{ color: 'red' }}`
* **Компоненты Twenty UI** — импорт из `twenty-sdk/ui` (Button, Tag, Status, Chip, Avatar и другие)
* **Emotion** — CSS-in-JS с `@emotion/react`
* **Styled-components** — паттерны `styled.div`
* **Tailwind CSS** — утилитарные классы
* **Любая библиотека CSS-in-JS**, совместимая с React
```tsx
import { defineFrontComponent } from 'twenty-sdk';
@@ -1022,9 +1021,9 @@ export default defineSkill({
* `description` (необязательно) предоставляет дополнительный контекст о назначении навыка.
</Accordion>
<Accordion title="defineAgent" description="Define AI agents with custom prompts">
<Accordion title="defineAgent" description="Определяйте ИИ-агентов с пользовательскими промптами">
Agents are AI assistants that live inside your workspace. Use `defineAgent()` to create agents with a custom system prompt:
Агенты — это ИИ-помощники, работающие в вашем рабочем пространстве. Используйте `defineAgent()` для создания агентов с пользовательским системным промптом:
```ts src/agents/example-agent.ts
import { defineAgent } from 'twenty-sdk';
@@ -1040,17 +1039,17 @@ export default defineAgent({
```
Основные моменты:
* `name` is the unique identifier string for the agent (kebab-case recommended).
* `label` is the display name shown in the UI.
* `prompt` is the system prompt that defines the agent's behavior.
* `description` (optional) provides context about what the agent does.
* `name` — уникальная строка-идентификатор агента (рекомендуется kebab-case).
* `label` — отображаемое имя, показываемое в UI.
* `prompt` — это системный промпт, определяющий поведение агента.
* `description` (необязательно) предоставляет контекст о том, что делает агент.
* `icon` (необязательно) задаёт значок, отображаемый в UI.
* `modelId` (optional) overrides the default AI model used by the agent.
* `modelId` (необязательно) переопределяет модель ИИ по умолчанию, используемую агентом.
</Accordion>
<Accordion title="defineView" description="Определяйте сохранённые представления для объектов">
Views are saved configurations for how records of an object are displayed — including which fields are visible, their order, and any filters or groups applied. Use `defineView()` to ship pre-configured views with your app:
Представления — это сохранённые конфигурации отображения записей объекта: какие поля видны, их порядок, а также применённые фильтры и группы. Используйте `defineView()` для поставки преднастроенных представлений вместе с вашим приложением:
```ts src/views/example-view.ts
import { defineView, ViewKey } from 'twenty-sdk';
@@ -1077,16 +1076,16 @@ export default defineView({
```
Основные моменты:
* `objectUniversalIdentifier` specifies which object this view applies to.
* `key` determines the view type (e.g., `ViewKey.INDEX` for the main list view).
* `fields` controls which columns appear and their order. Each field references a `fieldMetadataUniversalIdentifier`.
* You can also define `filters`, `filterGroups`, `groups`, and `fieldGroups` for more advanced configurations.
* `position` controls the ordering when multiple views exist for the same object.
* `objectUniversalIdentifier` указывает, к какому объекту применяется это представление.
* `key` определяет тип представления (например, `ViewKey.INDEX` для основного списка).
* `fields` управляет тем, какие столбцы отображаются и в каком порядке. Каждое поле ссылается на `fieldMetadataUniversalIdentifier`.
* Также вы можете определить `filters`, `filterGroups`, `groups` и `fieldGroups` для более продвинутых конфигураций.
* `position` управляет порядком, когда для одного и того же объекта существует несколько представлений.
</Accordion>
<Accordion title="defineNavigationMenuItem" description="Определяйте ссылки боковой панели навигации">
Navigation menu items add custom entries to the workspace sidebar. Use `defineNavigationMenuItem()` to link to views, external URLs, or objects:
Пункты навигационного меню добавляют пользовательские элементы в боковую панель рабочего пространства. Используйте `defineNavigationMenuItem()` для ссылок на представления, внешние URL или объекты:
```ts src/navigation-menu-items/example-navigation-menu-item.ts
import { defineNavigationMenuItem, NavigationMenuItemType } from 'twenty-sdk';
@@ -1104,15 +1103,15 @@ export default defineNavigationMenuItem({
```
Основные моменты:
* `type` determines what the menu item links to: `NavigationMenuItemType.VIEW` for a saved view, or `NavigationMenuItemType.LINK` for an external URL.
* For view links, set `viewUniversalIdentifier`. For external links, set `link`.
* `position` controls the ordering in the sidebar.
* `icon` and `color` (optional) customize the appearance.
* `type` определяет, на что ссылается пункт меню: `NavigationMenuItemType.VIEW` для сохранённого представления или `NavigationMenuItemType.LINK` для внешнего URL.
* Для ссылок на представления укажите `viewUniversalIdentifier`. Для внешних ссылок укажите `link`.
* `position` управляет порядком в боковой панели.
* `icon` и `color` (необязательно) настраивают внешний вид.
</Accordion>
<Accordion title="definePageLayout" description="Define custom page layouts for record views">
<Accordion title="definePageLayout" description="Определяйте пользовательские макеты страниц для представлений записей">
Page layouts let you customize how a record detail page looks — which tabs appear, what widgets are inside each tab, and how they are arranged. Use `definePageLayout()` to ship custom layouts with your app:
Макеты страниц позволяют настраивать вид страницы с деталями записи: какие вкладки отображаются, какие виджеты внутри каждой вкладки и как они расположены. Используйте `definePageLayout()` для поставки пользовательских макетов вместе с вашим приложением:
```ts src/page-layouts/example-record-page-layout.ts
import { definePageLayout, PageLayoutTabLayoutMode } from 'twenty-sdk';
@@ -1149,33 +1148,33 @@ export default definePageLayout({
```
Основные моменты:
* `type` is typically `'RECORD_PAGE'` to customize the detail view of a specific object.
* `objectUniversalIdentifier` specifies which object this layout applies to.
* Each `tab` defines a section of the page with a `title`, `position`, and `layoutMode` (`CANVAS` for free-form layout).
* Each `widget` inside a tab can render a front component, a relation list, or other built-in widget types.
* `position` on tabs controls their order. Use higher values (e.g., 50) to place custom tabs after built-in ones.
* `type` обычно равен `'RECORD_PAGE'` для настройки детального представления конкретного объекта.
* `objectUniversalIdentifier` указывает, к какому объекту применяется этот макет.
* Каждая `tab` определяет раздел страницы с `title`, `position` и `layoutMode` (`CANVAS` для свободного макета).
* Каждый `widget` внутри вкладки может отображать компонент фронтенда, список связей или другие встроенные типы виджетов.
* `position` у вкладок управляет их порядком. Используйте большие значения (например, 50), чтобы разместить пользовательские вкладки после встроенных.
</Accordion>
</AccordionGroup>
## Public assets (`public/` folder)
## Публичные ресурсы (папка `public/`)
The `public/` folder at the root of your app holds static files — images, icons, fonts, or any other assets your app needs at runtime. These files are automatically included in builds, synced during dev mode, and uploaded to the server.
Папка `public/` в корне вашего приложения содержит статические файлы — изображения, значки, шрифты и любые другие ресурсы, необходимые вашему приложению во время выполнения. Эти файлы автоматически включаются в сборки, синхронизируются в режиме разработки и загружаются на сервер.
Files placed in `public/` are:
Файлы, размещённые в `public/`, являются:
* **Publicly accessible** — once synced to the server, assets are served at a public URL. No authentication is needed to access them.
* **Available in front components** — use asset URLs to display images, icons, or any media inside your React components.
* **Available in logic functions** — reference asset URLs in emails, API responses, or any server-side logic.
* **Used for marketplace metadata** — the `logoUrl` and `screenshots` fields in `defineApplication()` reference files from this folder (e.g., `public/logo.png`). These are displayed in the marketplace when your app is published.
* **Auto-synced in dev mode** — when you add, update, or delete a file in `public/`, it is synced to the server automatically. No restart needed.
* **Included in builds** — `yarn twenty build` bundles all public assets into the distribution output.
* **Публично доступными** — после синхронизации с сервером ресурсы доступны по публичному URL. Для доступа к ним аутентификация не требуется.
* **Доступными в компонентах фронтенда** — используйте URL ресурсов для отображения изображений, значков или любого медиа внутри ваших компонентов React.
* **Доступными в логических функциях** — используйте URL ресурсов в письмах, ответах API или любой серверной логике.
* **Используются для метаданных маркетплейса** — поля `logoUrl` и `screenshots` в `defineApplication()` ссылаются на файлы из этой папки (например, `public/logo.png`). Они отображаются в маркетплейсе при публикации вашего приложения.
* **Автосинхронизация в режиме разработки** — когда вы добавляете, обновляете или удаляете файл в `public/`, он автоматически синхронизируется с сервером. Перезапуск не требуется.
* **Включены в сборки** — `yarn twenty build` упаковывает все публичные ресурсы в выходной дистрибутив.
### Accessing public assets with `getPublicAssetUrl`
### Доступ к публичным ресурсам с помощью `getPublicAssetUrl`
Use the `getPublicAssetUrl` helper from `twenty-sdk` to get the full URL of a file in your `public/` directory. It works in both **logic functions** and **front components**.
Используйте хелпер `getPublicAssetUrl` из `twenty-sdk`, чтобы получить полный URL файла в каталоге `public/` вашего приложения. Он работает как в **логических функциях**, так и в **компонентах фронтенда**.
**In a logic function:**
**В логической функции:**
```ts src/logic-functions/send-invoice.ts
import { defineLogicFunction, getPublicAssetUrl } from 'twenty-sdk';
@@ -1200,7 +1199,7 @@ export default defineLogicFunction({
});
```
**In a front component:**
**В компоненте фронтенда:**
```tsx src/front-components/company-card.tsx
import { defineFrontComponent, getPublicAssetUrl } from 'twenty-sdk';
@@ -1212,19 +1211,19 @@ export default defineFrontComponent(() => {
});
```
The `path` argument is relative to your app's `public/` folder. Both `getPublicAssetUrl('logo.png')` and `getPublicAssetUrl('public/logo.png')` resolve to the same URL — the `public/` prefix is stripped automatically if present.
Аргумент `path` задаётся относительно папки `public/` вашего приложения. И `getPublicAssetUrl('logo.png')`, и `getPublicAssetUrl('public/logo.png')` приводят к одному и тому же URL — префикс `public/`, если он есть, удаляется автоматически.
## Using npm packages
## Использование пакетов npm
You can install and use any npm package in your app. Both logic functions and front components are bundled with [esbuild](https://esbuild.github.io/), which inlines all dependencies into the output — no `node_modules` are needed at runtime.
Вы можете устанавливать и использовать любые пакеты npm в своём приложении. И логические функции, и компоненты фронтенда собираются с помощью [esbuild](https://esbuild.github.io/), который встраивает все зависимости в выходной файл — каталоги `node_modules` во время выполнения не нужны.
### Installing a package
### Установка пакета
```bash filename="Terminal"
yarn add axios
```
Then import it in your code:
Затем импортируйте его в своём коде:
```ts src/logic-functions/fetch-data.ts
import { defineLogicFunction } from 'twenty-sdk';
@@ -1245,7 +1244,7 @@ export default defineLogicFunction({
});
```
The same works for front components:
То же самое работает для компонентов фронтенда:
```tsx src/front-components/chart.tsx
import { defineFrontComponent } from 'twenty-sdk';
@@ -1262,27 +1261,27 @@ export default defineFrontComponent({
});
```
### How bundling works
### Как работает бандлинг
The build step (`yarn twenty dev` or `yarn twenty build`) uses esbuild to produce a single self-contained file per logic function and per front component. All imported packages are inlined into the bundle.
Этап сборки (`yarn twenty dev` или `yarn twenty build`) использует esbuild для создания одного самодостаточного файла на каждую логическую функцию и на каждый компонент фронтенда. Все импортированные пакеты встроены в бандл.
**Logic functions** run in a Node.js environment. Node built-in modules (`fs`, `path`, `crypto`, `http`, etc.) are available and do not need to be installed.
**Логические функции** выполняются в среде Node.js. Встроенные модули Node (`fs`, `path`, `crypto`, `http` и т. д.) доступны и не требуют установки.
**Front components** run in a Web Worker. Node built-in modules are **not** available — only browser APIs and npm packages that work in a browser environment.
**Компоненты фронтенда** выполняются в Web Worker. Встроенные модули Node недоступны — доступны только браузерные API и пакеты npm, работающие в браузерной среде.
Both environments have `twenty-client-sdk/core` and `twenty-client-sdk/metadata` available as pre-provided modules — these are not bundled but resolved at runtime by the server.
В обеих средах доступны как предварительно предоставленные модули `twenty-client-sdk/core` и `twenty-client-sdk/metadata` — они не включаются в бандл, а подставляются сервером во время выполнения.
## Scaffolding entities with `yarn twenty add`
## Создание заготовок сущностей с помощью `yarn twenty add`
Instead of creating entity files by hand, you can use the interactive scaffolder:
Вместо ручного создания файлов сущностей вы можете использовать интерактивный генератор:
```bash filename="Terminal"
yarn twenty add
```
This prompts you to pick an entity type and walks you through the required fields. It generates a ready-to-use file with a stable `universalIdentifier` and the correct `defineEntity()` call.
Он предложит выбрать тип сущности и проведёт вас по обязательным полям. Он генерирует готовый к использованию файл со стабильным `universalIdentifier` и корректным вызовом `defineEntity()`.
You can also pass the entity type directly to skip the first prompt:
Вы также можете передать тип сущности напрямую, чтобы пропустить первый запрос:
```bash filename="Terminal"
yarn twenty add object
@@ -1290,44 +1289,44 @@ yarn twenty add logicFunction
yarn twenty add frontComponent
```
### Available entity types
### Доступные типы сущностей
| Тип сущности | Команда | Generated file |
| Тип сущности | Команда | Сгенерированный файл |
| -------------------- | ------------------------------------ | ------------------------------------- |
| Объект | `yarn twenty add object` | `src/objects/<name>.ts` |
| Поле | `yarn twenty add field` | `src/fields/<name>.ts` |
| Logic function | `yarn twenty add logicFunction` | `src/logic-functions/<name>.ts` |
| Front component | `yarn twenty add frontComponent` | `src/front-components/<name>.tsx` |
| Логическая функция | `yarn twenty add logicFunction` | `src/logic-functions/<name>.ts` |
| Компонент фронтенда | `yarn twenty add frontComponent` | `src/front-components/<name>.tsx` |
| Роль | `yarn twenty add role` | `src/roles/<name>.ts` |
| Навык | `yarn twenty add skill` | `src/skills/<name>.ts` |
| Агент | `yarn twenty add agent` | `src/agents/<name>.ts` |
| Представление | `yarn twenty add view` | `src/views/<name>.ts` |
| Navigation menu item | `yarn twenty add navigationMenuItem` | `src/navigation-menu-items/<name>.ts` |
| Page layout | `yarn twenty add pageLayout` | `src/page-layouts/<name>.ts` |
| Пункт меню навигации | `yarn twenty add navigationMenuItem` | `src/navigation-menu-items/<name>.ts` |
| Макет страницы | `yarn twenty add pageLayout` | `src/page-layouts/<name>.ts` |
### What the scaffolder generates
### Что генерирует скэффолдер
Each entity type has its own template. For example, `yarn twenty add object` asks for:
У каждого типа сущности есть свой шаблон. Например, `yarn twenty add object` запрашивает:
1. **Name (singular)** — e.g., `invoice`
2. **Name (plural)** — e.g., `invoices`
3. **Label (singular)** — auto-populated from the name (e.g., `Invoice`)
4. **Label (plural)** — auto-populated (e.g., `Invoices`)
5. **Create a view and navigation item?** — if you answer yes, the scaffolder also generates a matching view and sidebar link for the new object.
1. **Имя (единственное число)** — например, `invoice`
2. **Имя (множественное число)** — например, `invoices`
3. **Метка (единственное число)** — заполняется автоматически из имени (например, `Invoice`)
4. **Метка (множественное число)** — заполняется автоматически (например, `Invoices`)
5. **Создать представление и пункт навигации?** — если вы ответите «да», скэффолдер также сгенерирует соответствующее представление и ссылку в боковой панели для нового объекта.
Other entity types have simpler prompts — most only ask for a name.
У других типов сущностей подсказки проще — в большинстве случаев запрашивается только имя.
The `field` entity type is more detailed: it asks for the field name, label, type (from a list of all available field types like `TEXT`, `NUMBER`, `SELECT`, `RELATION`, etc.), and the target object's `universalIdentifier`.
Тип сущности `field` более детализирован: он запрашивает имя поля, метку, тип (из списка всех доступных типов полей, таких как `TEXT`, `NUMBER`, `SELECT`, `RELATION` и т. д.), а также `universalIdentifier` целевого объекта.
### Custom output path
### Пользовательский путь вывода
Use the `--path` flag to place the generated file in a custom location:
Используйте флаг `--path`, чтобы поместить сгенерированный файл в пользовательское расположение:
```bash filename="Terminal"
yarn twenty add logicFunction --path src/custom-folder
```
## Typed API clients (twenty-client-sdk)
## Типизированные клиенты API (twenty-client-sdk)
Пакет `twenty-client-sdk` предоставляет два типизированных клиента GraphQL для взаимодействия с API Twenty из ваших логических функций и фронт-компонентов.
@@ -1337,9 +1336,9 @@ yarn twenty add logicFunction --path src/custom-folder
| `MetadataApiClient` | `twenty-client-sdk/metadata` | `/metadata` — конфигурация рабочего пространства, загрузка файлов | Нет, поставляется в готовом виде |
<AccordionGroup>
<Accordion title="CoreApiClient" description="Query and mutate workspace data (records, objects)">
<Accordion title="CoreApiClient" description="Запрос и изменение данных рабочего пространства (записи, объекты)">
`CoreApiClient` — основной клиент для запросов и изменений данных рабочего пространства. It is **generated from your workspace schema** during `yarn twenty dev` or `yarn twenty build`, so it is fully typed to match your objects and fields.
`CoreApiClient` — основной клиент для запросов и изменений данных рабочего пространства. Он **генерируется из схемы вашего рабочего пространства** во время `yarn twenty dev` или `yarn twenty build`, поэтому полностью типизирован в соответствии с вашими объектами и полями.
```ts
import { CoreApiClient } from 'twenty-client-sdk/core';
@@ -1379,12 +1378,12 @@ const { createCompany } = await client.mutation({
Клиент использует синтаксис selection-set: передайте `true`, чтобы включить поле, используйте `__args` для аргументов и вкладывайте объекты для отношений. Вы получаете полное автодополнение и проверку типов на основе схемы вашего рабочего пространства.
<Note>
**CoreApiClient is generated at dev/build time.** If you use it without running `yarn twenty dev` or `yarn twenty build` first, it throws an error. The generation happens automatically — the CLI introspects your workspace's GraphQL schema and generates a typed client using `@genql/cli`.
**CoreApiClient генерируется на этапе dev/build.** Если вы используете его, не запустив сначала `yarn twenty dev` или `yarn twenty build`, он выбросит ошибку. Генерация происходит автоматически — CLI анализирует GraphQL-схему вашего рабочего пространства и создает типизированный клиент с помощью `@genql/cli`.
</Note>
#### Использование CoreSchema для аннотаций типов
`CoreSchema` provides TypeScript types matching your workspace objects — useful for typing component state or function parameters:
`CoreSchema` предоставляет типы TypeScript, соответствующие объектам вашего рабочего пространства — это полезно для типизации состояния компонентов или параметров функций:
```ts
import { CoreApiClient, CoreSchema } from 'twenty-client-sdk/core';
@@ -1406,7 +1405,7 @@ setCompany(result.company);
```
</Accordion>
<Accordion title="MetadataApiClient" description="Workspace config, applications, and file uploads">
<Accordion title="MetadataApiClient" description="Конфигурация рабочего пространства, приложения и загрузка файлов">
`MetadataApiClient` поставляется в готовом виде вместе с SDK (генерация не требуется). Он выполняет запросы к эндпоинту `/metadata` для получения конфигурации рабочего пространства, приложений и загрузки файлов.
@@ -1462,7 +1461,7 @@ console.log(uploadedFile);
| ---------------------------------- | -------- | ------------------------------------------------------------------ |
| `fileBuffer` | `Buffer` | Необработанное содержимое файла |
| `filename` | `строка` | Имя файла (используется для хранения и отображения) |
| `contentType` | `string` | MIME type (defaults to `application/octet-stream` if omitted) |
| `contentType` | `string` | Тип MIME (по умолчанию `application/octet-stream`, если не указан) |
| `fieldMetadataUniversalIdentifier` | `string` | Значение `universalIdentifier` для поля типа файла в вашем объекте |
Основные моменты:
@@ -1476,24 +1475,24 @@ console.log(uploadedFile);
Когда ваш код выполняется на Twenty (логические функции или фронт-компоненты), платформа предоставляет учётные данные в виде переменных окружения:
* `TWENTY_API_URL` — базовый URL API Twenty
* `TWENTY_APP_ACCESS_TOKEN` — Short-lived key scoped to your application's default function role
* `TWENTY_APP_ACCESS_TOKEN` — краткоживущий ключ, ограниченный ролью функции по умолчанию вашего приложения
Вам не нужно передавать их клиентам — они автоматически читаются из `process.env`. Права ключа API определяются ролью, указанной в `defaultRoleUniversalIdentifier` в вашем `application-config.ts`.
</Note>
## Testing your app
## Тестирование вашего приложения
The SDK provides programmatic APIs that let you build, deploy, install, and uninstall your app from test code. Combined with [Vitest](https://vitest.dev/) and the typed API clients, you can write integration tests that verify your app works end-to-end against a real Twenty server.
SDK предоставляет программные API, которые позволяют собирать, разворачивать, устанавливать и удалять ваше приложение из тестового кода. В сочетании с [Vitest](https://vitest.dev/) и типизированными клиентами API вы можете писать интеграционные тесты, которые проверяют, что ваше приложение работает сквозным образом на реальном сервере Twenty.
### Настройка
The scaffolded app already includes Vitest. If you set it up manually, install the dependencies:
Приложение, созданное скэффолдером, уже включает Vitest. Если вы настраиваете его вручную, установите зависимости:
```bash filename="Terminal"
yarn add -D vitest vite-tsconfig-paths
```
Create a `vitest.config.ts` at the root of your app:
Создайте `vitest.config.ts` в корне вашего приложения:
```ts vitest.config.ts
import tsconfigPaths from 'vite-tsconfig-paths';
@@ -1519,7 +1518,7 @@ export default defineConfig({
});
```
Create a setup file that verifies the server is reachable before tests run:
Создайте файл инициализации, который проверяет доступность сервера перед запуском тестов:
```ts src/__tests__/setup-test.ts
import * as fs from 'fs';
@@ -1559,22 +1558,22 @@ beforeAll(async () => {
});
```
### Programmatic SDK APIs
### Программные API SDK
The `twenty-sdk/cli` subpath exports functions you can call directly from test code:
Подпуть `twenty-sdk/cli` экспортирует функции, которые можно вызывать напрямую из тестового кода:
| Функция | Описание |
| -------------- | ------------------------------------------- |
| `appBuild` | Build the app and optionally pack a tarball |
| `appDeploy` | Upload a tarball to the server |
| `appInstall` | Install the app on the active workspace |
| `appUninstall` | Uninstall the app from the active workspace |
| Функция | Описание |
| -------------- | ---------------------------------------------------------- |
| `appBuild` | Собрать приложение и при необходимости упаковать tar-архив |
| `appDeploy` | Загрузить tar-архив на сервер |
| `appInstall` | Установить приложение в активное рабочее пространство |
| `appUninstall` | Удалить приложение из активного рабочего пространства |
Each function returns a result object with `success: boolean` and either `data` or `error`.
Каждая функция возвращает объект результата с `success: boolean` и либо `data`, либо `error`.
### Writing an integration test
### Написание интеграционного теста
Here is a full example that builds, deploys, and installs the app, then verifies it appears in the workspace:
Полный пример, который собирает, разворачивает и устанавливает приложение, а затем проверяет, что оно появляется в рабочем пространстве:
```ts src/__tests__/app-install.integration-test.ts
import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/application-config';
@@ -1637,37 +1636,37 @@ describe('App installation', () => {
});
```
### Running tests
### Запуск тестов
Make sure your local Twenty server is running, then:
Убедитесь, что ваш локальный сервер Twenty запущен, затем:
```bash filename="Terminal"
yarn test
```
Or in watch mode during development:
Или в режиме наблюдения во время разработки:
```bash filename="Terminal"
yarn test:watch
```
### Type checking
### Проверка типов
You can also run type checking on your app without running tests:
Вы также можете запустить проверку типов для своего приложения без запуска тестов:
```bash filename="Terminal"
yarn twenty typecheck
```
This runs `tsc --noEmit` and reports any type errors.
Это запускает `tsc --noEmit` и сообщает о любых ошибках типов.
## Справочник по CLI
Beyond `dev`, `build`, `add`, and `typecheck`, the CLI provides commands for executing functions, viewing logs, and managing app installations.
Помимо `dev`, `build`, `add` и `typecheck`, CLI предоставляет команды для выполнения функций, просмотра логов и управления установками приложений.
### Executing functions (`yarn twenty exec`)
### Выполнение функций (`yarn twenty exec`)
Run a logic function manually without triggering it via HTTP, cron, or database event:
Запустите функцию логики вручную, не вызывая ее через HTTP, cron или событие базы данных:
```bash filename="Terminal"
# Execute by function name
@@ -1684,9 +1683,9 @@ yarn twenty exec --preInstall
yarn twenty exec --postInstall
```
### Viewing function logs (`yarn twenty logs`)
### Просмотр логов функций (`yarn twenty logs`)
Stream execution logs for your app's logic functions:
Потоковая передача журналов выполнения функций логики вашего приложения:
```bash filename="Terminal"
# Stream all function logs
@@ -1700,12 +1699,12 @@ yarn twenty logs -u e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf
```
<Note>
This is different from `yarn twenty server logs`, which shows the Docker container logs. `yarn twenty logs` shows your app's function execution logs from the Twenty server.
Это отличается от `yarn twenty server logs`, который показывает логи контейнера Docker. `yarn twenty logs` показывает журналы выполнения функций вашего приложения с сервера Twenty.
</Note>
### Uninstalling an app (`yarn twenty uninstall`)
### Удаление приложения (`yarn twenty uninstall`)
Remove your app from the active workspace:
Удалите свое приложение из активного рабочего пространства:
```bash filename="Terminal"
yarn twenty uninstall
@@ -4,142 +4,142 @@ description: Создайте своё первое приложение Twenty
---
<Warning>
Apps are currently in alpha. The feature works but is still evolving.
Приложения сейчас проходят альфа-тестирование. Функция работает, но продолжает развиваться.
</Warning>
Приложения позволяют расширять Twenty с помощью пользовательских объектов, полей, логических функций, навыков ИИ и UI-компонентов — всё это управляется как код.
## Требования
Before you begin, make sure the following is installed on your machine:
Прежде чем начать, убедитесь, что на вашем компьютере установлено следующее:
* **Node.js 24+** — [Download here](https://nodejs.org/)
* **Yarn 4** — Comes with Node.js via Corepack. Enable it by running `corepack enable`
* **Docker** — [Download here](https://www.docker.com/products/docker-desktop/). Required to run a local Twenty instance. Not needed if you already have a Twenty server running.
* **Node.js 24+** — [Скачать здесь](https://nodejs.org/)
* **Yarn 4** — Поставляется вместе с Node.js через Corepack. Включите его, выполнив `corepack enable`
* **Docker** — [Скачать здесь](https://www.docker.com/products/docker-desktop/). Требуется для запуска локального экземпляра Twenty. Не требуется, если у вас уже запущен сервер Twenty.
## Step 1: Scaffold your app
## Шаг 1: Сгенерируйте каркас приложения
Open a terminal and run:
Откройте терминал и выполните:
```bash filename="Terminal"
npx create-twenty-app@latest my-twenty-app
```
You will be prompted to enter a name and a description for your app. Press **Enter** to accept the defaults.
Вам будет предложено ввести имя и описание вашего приложения. Нажмите **Enter**, чтобы принять значения по умолчанию.
This creates a new folder called `my-twenty-app` with everything you need.
Будет создана новая папка `my-twenty-app` со всем необходимым.
<Note>
The scaffolder supports these flags:
Генератор поддерживает следующие флаги:
* `--minimal` — scaffold only the essential files, no examples (default)
* `--exhaustive` — scaffold all example entities
* `--name <name>` — set the app name (skips the prompt)
* `--display-name <displayName>` — set the display name (skips the prompt)
* `--description <description>` — set the description (skips the prompt)
* `--skip-local-instance` — skip the local server setup prompt
* `--minimal` — сгенерировать только основные файлы, без примеров (по умолчанию)
* `--exhaustive` — сгенерировать все примеры сущностей
* `--name <name>` — задать имя приложения (пропускает запрос)
* `--display-name <displayName>` — задать отображаемое имя (пропускает запрос)
* `--description <description>` — задать описание (пропускает запрос)
* `--skip-local-instance` — пропустить запрос на настройку локального сервера
</Note>
## Step 2: Set up a local Twenty instance
## Шаг 2: Настройте локальный экземпляр Twenty
The scaffolder will ask:
Скэффолдер спросит:
> **Would you like to set up a local Twenty instance?**
> **Хотите настроить локальный экземпляр Twenty?**
* **Type `yes`** (recommended) — This pulls the `twenty-app-dev` Docker image and starts a local Twenty server on port `2020`. Make sure Docker is running before you continue.
* **Type `no`** — Choose this if you already have a Twenty server running locally.
* **Введите `yes`** (рекомендуется) — это скачает Docker-образ `twenty-app-dev` и запустит локальный сервер Twenty на порту `2020`. Перед продолжением убедитесь, что Docker запущен.
* **Введите `no`** — выберите это, если у вас уже запущен локальный сервер Twenty.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/start-instance.png" alt="Should start local instance?" />
<img src="/images/docs/developers/extends/apps/start-instance.png" alt="Запустить локальный экземпляр?" />
</div>
## Step 3: Sign in to your workspace
## Шаг 3: Войдите в своё рабочее пространство
Next, a browser window will open with the Twenty login page. Sign in with the pre-seeded demo account:
Затем откроется окно браузера со страницей входа в Twenty. Войдите, используя предварительно созданную демонстрационную учётную запись:
* **Email:** `tim@apple.dev`
* **Password:** `tim@apple.dev`
* **Электронная почта:** `tim@apple.dev`
* **Пароль:** `tim@apple.dev`
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/login.png" alt="Twenty login screen" />
<img src="/images/docs/developers/extends/apps/login.png" alt="Экран входа в Twenty" />
</div>
## Step 4: Authorize the app
## Шаг 4: Авторизуйте приложение
After you sign in, you will see an authorization screen. This lets your app interact with your workspace.
После входа вы увидите экран авторизации. Это позволит вашему приложению взаимодействовать с вашим рабочим пространством.
Click **Authorize** to continue.
Нажмите **Authorize**, чтобы продолжить.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/authorize.png" alt="Twenty CLI authorization screen" />
<img src="/images/docs/developers/extends/apps/authorize.png" alt="Экран авторизации Twenty CLI" />
</div>
Once authorized, your terminal will confirm that everything is set up.
После авторизации в терминале появится подтверждение, что всё настроено.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/scaffolded.png" alt="App scaffolded successfully" />
<img src="/images/docs/developers/extends/apps/scaffolded.png" alt="Каркас приложения успешно создан" />
</div>
## Step 5: Start developing
## Шаг 5: Начните разработку
Go into your new app folder and start the development server:
Перейдите в папку вашего нового приложения и запустите сервер разработки:
```bash filename="Terminal"
cd my-twenty-app
yarn twenty dev
```
This watches your source files, rebuilds on every change, and syncs your app to the local Twenty server automatically. You should see a live status panel in your terminal.
Он отслеживает исходные файлы, пересобирает при каждом изменении и автоматически синхронизирует ваше приложение с локальным сервером Twenty. В терминале должна появиться панель текущего статуса.
For more detailed output (build logs, sync requests, error traces), use the `--verbose` flag:
Для более подробного вывода (журналы сборки, запросы синхронизации, трассировки ошибок) используйте флаг `--verbose`:
```bash filename="Terminal"
yarn twenty dev --verbose
```
<Warning>
Dev mode is only available on Twenty instances running in development (`NODE_ENV=development`). Production instances reject dev sync requests. Use `yarn twenty deploy` to deploy to production servers — see [Publishing Apps](/l/ru/developers/extend/apps/publishing) for details.
Режим разработки доступен только на экземплярах Twenty, запущенных в режиме разработки (`NODE_ENV=development`). Экземпляры в продакшене отклоняют запросы синхронизации из режима разработки. Используйте `yarn twenty deploy` для развёртывания на продакшен-серверах — подробности см. в разделе [Публикация приложений](/l/ru/developers/extend/apps/publishing).
</Warning>
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/dev.jpg" alt="Dev mode terminal output" />
<img src="/images/docs/developers/extends/apps/dev.jpg" alt="Вывод терминала в режиме разработки" />
</div>
## Step 6: See your app in Twenty
## Шаг 6: Посмотрите своё приложение в Twenty
Open [http://localhost:2020/settings/applications#developer](http://localhost:2020/settings/applications#developer) in your browser. Navigate to **Settings > Apps** and select the **Developer** tab. You should see your app listed under **Your Apps**:
Откройте [http://localhost:2020/settings/applications#developer](http://localhost:2020/settings/applications#developer) в браузере. Перейдите в **Settings > Apps** и выберите вкладку **Developer**. Вы должны увидеть своё приложение в разделе **Your Apps**:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-1.png" alt="Your Apps list showing My twenty app" />
<img src="/images/docs/developers/extends/apps/app-in-ui-1.png" alt="Список Your Apps с приложением My twenty app" />
</div>
Click on **My twenty app** to open its **application registration**. A registration is a server-level record that describes your app — its name, unique identifier, OAuth credentials, and source (local, npm, or tarball). It lives on the server, not inside any specific workspace. When you install an app into a workspace, Twenty creates a workspace-scoped **application** that points back to this registration. One registration can be installed across multiple workspaces on the same server.
Нажмите **My twenty app**, чтобы открыть его **регистрацию приложения**. Регистрация — это запись на уровне сервера, описывающая ваше приложение: его имя, уникальный идентификатор, учётные данные OAuth и источник (локальный, npm или tarball). Она хранится на сервере, а не внутри какого-либо конкретного рабочего пространства. Когда вы устанавливаете приложение в рабочее пространство, Twenty создаёт привязанное к рабочему пространству **приложение**, которое ссылается на эту регистрацию. Одну и ту же регистрацию можно установить в нескольких рабочих пространствах на одном сервере.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-2.png" alt="Application registration details" />
<img src="/images/docs/developers/extends/apps/app-in-ui-2.png" alt="Сведения о регистрации приложения" />
</div>
Click **View installed app** to see the installed app. The **About** tab shows the current version and management options:
Нажмите **View installed app**, чтобы посмотреть установленное приложение. Вкладка **About** показывает текущую версию и параметры управления:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-3.png" alt="Installed app — About tab" />
<img src="/images/docs/developers/extends/apps/app-in-ui-3.png" alt="Установленное приложение — вкладка About" />
</div>
Switch to the **Content** tab to see everything your app provides — objects, fields, logic functions, and agents:
Переключитесь на вкладку **Content**, чтобы увидеть всё, что предоставляет ваше приложение: объекты, поля, логические функции и агенты:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-4.png" alt="Installed app — Content tab" />
<img src="/images/docs/developers/extends/apps/app-in-ui-4.png" alt="Установленное приложение — вкладка Content" />
</div>
You are all set! Edit any file in `src/` and the changes will be picked up automatically.
Готово! Отредактируйте любой файл в `src/`, и изменения будут подхвачены автоматически.
Head over to [Building Apps](/l/ru/developers/extend/apps/building) for a detailed guide on creating objects, logic functions, front components, skills, and more.
Перейдите к разделу [Создание приложений](/l/ru/developers/extend/apps/building) за подробным руководством по созданию объектов, логических функций, фронтенд-компонентов, навыков и многого другого.
---
## Project structure
## Структура проекта
The scaffolder generates the following file structure (shown with `--exhaustive` mode, which includes examples for every entity type):
Скэффолдер генерирует следующую структуру файлов (показано в режиме `--exhaustive`, который включает примеры для каждого типа сущностей):
```text filename="my-twenty-app/"
my-twenty-app/
@@ -190,30 +190,30 @@ my-twenty-app/
└── example-agent.ts # Example AI agent definition
```
By default (`--minimal`), only the core files are created: `application-config.ts`, `roles/default-role.ts`, `logic-functions/pre-install.ts`, and `logic-functions/post-install.ts`. Use `--exhaustive` to include all the example files shown above.
По умолчанию (`--minimal`) создаются только основные файлы: `application-config.ts`, `roles/default-role.ts`, `logic-functions/pre-install.ts` и `logic-functions/post-install.ts`. Используйте `--exhaustive`, чтобы включить все показанные выше файлы-примеры.
### Key files
### Ключевые файлы
| File / Folder | Назначение |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `package.json` | Declares your app name, version, and dependencies. Includes a `twenty` script so you can run `yarn twenty help` to see all commands. |
| `src/application-config.ts` | **Required.** The main configuration file for your app. |
| `src/roles/` | Defines roles that control what your logic functions can access. |
| `src/logic-functions/` | Server-side functions triggered by routes, cron schedules, or database events. |
| `src/front-components/` | React components that render inside Twenty's UI. |
| `src/objects/` | Custom object definitions to extend your data model. |
| `src/fields/` | Custom fields added to existing objects. |
| `src/views/` | Saved view configurations. |
| `src/navigation-menu-items/` | Custom links in the sidebar navigation. |
| `src/skills/` | Навыки, расширяющие возможности ИИ-агентов Twenty. |
| `src/agents/` | AI agents with custom prompts. |
| `src/page-layouts/` | Custom page layouts for record views. |
| `src/__tests__/` | Integration tests (setup + example test). |
| `public/` | Static assets (images, fonts) served with your app. |
| Файл / Папка | Назначение |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `package.json` | Содержит имя, версию и зависимости вашего приложения. Содержит скрипт `twenty`, чтобы вы могли выполнить `yarn twenty help` и увидеть все команды. |
| `src/application-config.ts` | **Обязательно.** Основной файл конфигурации для вашего приложения. |
| `src/roles/` | Определяет роли, которые контролируют доступ логических функций. |
| `src/logic-functions/` | Серверные функции, запускаемые маршрутами, расписаниями cron или событиями базы данных. |
| `src/front-components/` | Компоненты React, которые отображаются внутри интерфейса Twenty. |
| `src/objects/` | Пользовательские определения объектов для расширения вашей модели данных. |
| `src/fields/` | Пользовательские поля, добавляемые к существующим объектам. |
| `src/views/` | Конфигурации сохранённых представлений. |
| `src/navigation-menu-items/` | Пользовательские ссылки в боковой навигации. |
| `src/skills/` | Навыки, расширяющие возможности ИИ-агентов Twenty. |
| `src/agents/` | ИИ-агенты с пользовательскими промптами. |
| `src/page-layouts/` | Пользовательские макеты страниц для представлений записей. |
| `src/__tests__/` | Интеграционные тесты (настройка + пример теста). |
| `public/` | Статические ресурсы (изображения, шрифты), обслуживаемые вместе с вашим приложением. |
## Managing remotes
## Управление удалёнными серверами
A **remote** is a Twenty server that your app connects to. During setup, the scaffolder creates one for you automatically. You can add more remotes or switch between them at any time.
Remote — это сервер Twenty, к которому подключается ваше приложение. Во время настройки скэффолдер автоматически создаст его для вас. Вы можете в любой момент добавлять новые remotes или переключаться между ними.
```bash filename="Terminal"
# Add a new remote (opens a browser for OAuth login)
@@ -232,11 +232,11 @@ yarn twenty remote list
yarn twenty remote switch <name>
```
Your credentials are stored in `~/.twenty/config.json`.
Ваши учётные данные хранятся в `~/.twenty/config.json`.
## Local development server (`yarn twenty server`)
## Локальный сервер разработки (`yarn twenty server`)
The CLI can manage a local Twenty server running in Docker. This is the same server started automatically when you scaffold an app with `create-twenty-app`, but you can also manage it manually.
CLI может управлять локальным сервером Twenty, запущенным в Docker. Это тот же сервер, который автоматически запускается при создании каркаса приложения с помощью `create-twenty-app`, но им можно управлять и вручную.
### Запуск сервера
@@ -244,85 +244,85 @@ The CLI can manage a local Twenty server running in Docker. This is the same ser
yarn twenty server start
```
This pulls the `twentycrm/twenty-app-dev:latest` Docker image (if not already present), creates a container named `twenty-app-dev`, and starts it on port **2020**. The CLI waits until the server passes its health check before returning.
Эта команда скачивает Docker-образ `twentycrm/twenty-app-dev:latest` (если его ещё нет), создаёт контейнер с именем `twenty-app-dev` и запускает его на порту **2020**. CLI ждёт, пока сервер пройдёт проверку работоспособности, прежде чем вернуть управление.
Two Docker volumes are created to persist data between restarts:
Создаются два тома Docker для сохранения данных между перезапусками:
* `twenty-app-dev-data` — PostgreSQL database
* `twenty-app-dev-storage` — file storage
* `twenty-app-dev-data` — база данных PostgreSQL
* `twenty-app-dev-storage` — файловое хранилище
If port 2020 is already in use, you can start on a different port:
Если порт 2020 уже используется, вы можете запустить на другом порту:
```bash filename="Terminal"
yarn twenty server start --port 3030
```
The CLI automatically configures the container's internal `NODE_PORT` and `SERVER_URL` to match the chosen port, so logic functions, OAuth, and all other internal networking work correctly.
CLI автоматически настраивает внутренние `NODE_PORT` и `SERVER_URL` контейнера в соответствии с выбранным портом, чтобы логические функции, OAuth и прочие внутренние сетевые взаимодействия работали корректно.
Once started, the server is automatically registered as the `local` remote in your CLI config.
После запуска сервер автоматически регистрируется как remote `local` в конфигурации вашего CLI.
### Checking server status
### Проверка состояния сервера
```bash filename="Terminal"
yarn twenty server status
```
Displays whether the server is running, its URL, and the default login credentials (`tim@apple.dev` / `tim@apple.dev`).
Показывает, запущен ли сервер, его URL и учётные данные по умолчанию (`tim@apple.dev` / `tim@apple.dev`).
### Viewing server logs
### Просмотр журналов сервера
```bash filename="Terminal"
yarn twenty server logs
```
Streams the container logs. Use `--lines` to control how many recent lines to show:
Выводит журналы контейнера в потоковом режиме. Используйте `--lines`, чтобы задать, сколько последних строк показывать:
```bash filename="Terminal"
yarn twenty server logs --lines 100
```
### Stopping the server
### Остановка сервера
```bash filename="Terminal"
yarn twenty server stop
```
Stops the container. Your data is preserved in the Docker volumes — the next `start` picks up where you left off.
Останавливает контейнер. Ваши данные сохраняются в томах Docker — следующий `start` продолжит с того места, где вы остановились.
### Resetting the server
### Сброс сервера
```bash filename="Terminal"
yarn twenty server reset
```
Removes the container **and** deletes both Docker volumes, wiping all data. The next `start` creates a fresh instance.
Удаляет контейнер и оба тома Docker, полностью стирая все данные. Следующий `start` создаст новый чистый экземпляр.
<Note>
The server requires **Docker** to be running. If you see a "Docker not running" error, make sure Docker Desktop (or the Docker daemon) is started.
Для работы сервера необходимо, чтобы **Docker** был запущен. Если вы видите ошибку "Docker not running", убедитесь, что запущен Docker Desktop (или демон Docker).
</Note>
### Command reference
### Справочник команд
| Команда | Описание |
| -------------------------------------- | ---------------------------------------------- |
| `yarn twenty server start` | Start the local server (pulls image if needed) |
| `yarn twenty server start --port 3030` | Start on a custom port |
| `yarn twenty server stop` | Stop the server (preserves data) |
| `yarn twenty server status` | Show server status, URL, and credentials |
| `yarn twenty server logs` | Stream server logs |
| `yarn twenty server logs --lines 100` | Show the last 100 log lines |
| `yarn twenty server reset` | Delete all data and start fresh |
| Команда | Описание |
| -------------------------------------- | -------------------------------------------------------------- |
| `yarn twenty server start` | Запустить локальный сервер (при необходимости скачивает образ) |
| `yarn twenty server start --port 3030` | Запустить на пользовательском порту |
| `yarn twenty server stop` | Остановить сервер (данные сохраняются) |
| `yarn twenty server status` | Показать состояние сервера, URL и учётные данные |
| `yarn twenty server logs` | Потоковый вывод журналов сервера |
| `yarn twenty server logs --lines 100` | Показать последние 100 строк журнала |
| `yarn twenty server reset` | Удалить все данные и начать с чистого листа |
## CI with GitHub Actions
## CI с GitHub Actions
The scaffolder generates a ready-to-use GitHub Actions workflow at `.github/workflows/ci.yml`. It runs your integration tests automatically on every push to `main` and on pull requests.
Скэффолдер генерирует готовый к использованию workflow GitHub Actions в `.github/workflows/ci.yml`. Он автоматически запускает ваши интеграционные тесты при каждом пуше в `main` и в pull request'ах.
The workflow:
Рабочий процесс:
1. Checks out your code
2. Spins up a temporary Twenty server using the `twentyhq/twenty/.github/actions/spawn-twenty-docker-image` action
3. Installs dependencies with `yarn install --immutable`
4. Runs `yarn test` with `TWENTY_API_URL` and `TWENTY_API_KEY` injected from the action outputs
1. Извлекает ваш код
2. Поднимает временный сервер Twenty с помощью экшена `twentyhq/twenty/.github/actions/spawn-twenty-docker-image`
3. Устанавливает зависимости с помощью `yarn install --immutable`
4. Запускает `yarn test` с `TWENTY_API_URL` и `TWENTY_API_KEY`, переданными из выходных данных экшена
```yaml .github/workflows/ci.yml
name: CI
@@ -369,21 +369,21 @@ jobs:
TWENTY_API_KEY: ${{ steps.twenty.outputs.access-token }}
```
You don't need to configure any secrets — the `spawn-twenty-docker-image` action starts an ephemeral Twenty server directly in the runner and outputs the connection details. The `GITHUB_TOKEN` secret is provided automatically by GitHub.
Вам не нужно настраивать секреты — экшен `spawn-twenty-docker-image` запускает эфемерный сервер Twenty прямо в раннере и выводит данные для подключения. Секрет `GITHUB_TOKEN` предоставляется GitHub автоматически.
To pin a specific Twenty version instead of `latest`, change the `TWENTY_VERSION` environment variable at the top of the workflow.
Чтобы закрепить конкретную версию Twenty вместо `latest`, измените переменную окружения `TWENTY_VERSION` в начале workflow.
## Ручная настройка (без генератора)
If you prefer to set things up yourself instead of using `create-twenty-app`, you can do it in two steps.
Если вы предпочитаете настроить всё самостоятельно, не используя `create-twenty-app`, это можно сделать в два шага.
**1. Add `twenty-sdk` and `twenty-client-sdk` as dependencies:**
**1. Добавьте `twenty-sdk` и `twenty-client-sdk` в зависимости:**
```bash filename="Terminal"
yarn add twenty-sdk twenty-client-sdk
```
**2. Add a `twenty` script to your `package.json`:**
**2. Добавьте скрипт `twenty` в ваш `package.json`:**
```json filename="package.json"
{
@@ -393,19 +393,19 @@ yarn add twenty-sdk twenty-client-sdk
}
```
You can now run `yarn twenty dev`, `yarn twenty help`, and all other commands.
Теперь вы можете запускать `yarn twenty dev`, `yarn twenty help` и все остальные команды.
<Note>
Do not install `twenty-sdk` globally. Always use it as a local project dependency so that each project can pin its own version.
Не устанавливайте `twenty-sdk` глобально. Всегда используйте его как локальную зависимость проекта, чтобы каждый проект мог закреплять свою версию.
</Note>
## Устранение неполадок
If you run into issues:
Если столкнётесь с проблемами:
* Make sure **Docker is running** before starting the scaffolder with a local instance.
* Make sure you are using **Node.js 24+** (`node -v` to check).
* Make sure **Corepack is enabled** (`corepack enable`) so Yarn 4 is available.
* Try deleting `node_modules` and running `yarn install` again if dependencies seem broken.
* Перед запуском генератора с локальным экземпляром убедитесь, что **Docker запущен**.
* Убедитесь, что используете **Node.js 24+** (`node -v` для проверки).
* Убедитесь, что **Corepack включён** (`corepack enable`), чтобы Yarn 4 был доступен.
* Если зависимости, похоже, повреждены, попробуйте удалить `node_modules` и снова выполнить `yarn install`.
Still stuck? Ask for help on the [Twenty Discord](https://discord.com/channels/1130383047699738754/1130386664812982322).
Все ещё не получается? Попросите помощи на [Discord-сервере Twenty](https://discord.com/channels/1130383047699738754/1130386664812982322).
@@ -4,24 +4,24 @@ description: Nesneleri, mantık fonksiyonlarını, ön uç bileşenlerini ve dah
---
<Warning>
Apps are currently in alpha. The feature works but is still evolving.
Uygulamalar şu anda alfa aşamasında. Özellik işlevsel ancak hâlâ gelişmekte.
</Warning>
The `twenty-sdk` package provides typed building blocks to create your app. This page covers every entity type and API client available in the SDK.
`twenty-sdk` paketi, uygulamanızı oluşturmak için türlendirilmiş yapı taşları sağlar. Bu sayfa, SDK'da mevcut olan tüm varlık türlerini ve API istemcilerini kapsar.
## DefineEntity functions
## DefineEntity fonksiyonları
The SDK provides functions to define your app entities. You must use `export default defineEntity({...})` for the SDK to detect your entities. Bu fonksiyonlar, derleme zamanında yapılandırmanızı doğrular ve IDE otomatik tamamlama ile tür güvenliği sağlar.
SDK, uygulama varlıklarınızı tanımlamak için fonksiyonlar sağlar. SDK'nin varlıklarınızı algılayabilmesi için `export default defineEntity({...})` kullanmanız gerekir. Bu fonksiyonlar, derleme zamanında yapılandırmanızı doğrular ve IDE otomatik tamamlama ile tür güvenliği sağlar.
<Note>
**File organization is up to you.**
Entity detection is AST-based — the SDK finds `export default defineEntity(...)` calls regardless of where the file lives. Grouping files by type (e.g., `logic-functions/`, `roles/`) is just a convention, not a requirement.
**Dosya organizasyonu size kalmış.**
Varlık algılama AST tabanlıdır — dosyanın nerede bulunduğundan bağımsız olarak SDK `export default defineEntity(...)` çağrılarını bulur. Dosyaları türe göre gruplamak (örn. `logic-functions/`, `roles/`) bir gereklilik değil, yalnızca bir gelenektir.
</Note>
<AccordionGroup>
<Accordion title="defineRole" description="Rol izinlerini ve nesne erişimini yapılandırın">
Roles encapsulate permissions on your workspace's objects and actions.
Roller, çalışma alanınızdaki nesneler ve eylemler üzerindeki izinleri kapsar.
```ts restricted-company-role.ts
import {
@@ -69,12 +69,12 @@ export default defineRole({
</Accordion>
<Accordion title="defineApplication" description="Uygulama meta verilerini yapılandırın (zorunlu, uygulama başına bir adet)">
Every app must have exactly one `defineApplication` call that describes:
Her uygulamanın, şunları tanımlayan tam olarak bir adet `defineApplication` çağrısı olmalıdır:
* **Identity**: identifiers, display name, and description.
* **Permissions**: which role its functions and front components use.
* **(Optional) Variables**: keyvalue pairs exposed to your functions as environment variables.
* **(Optional) Pre-install / post-install functions**: logic functions that run before or after installation.
* **Kimlik**: tanımlayıcılar, görünen ad ve açıklama.
* **İzinler**: işlevlerinin ve ön bileşenlerinin hangi rolü kullandığı.
* **(İsteğe bağlı) Değişkenler**: fonksiyonlarınıza ortam değişkenleri olarak sunulan anahtardeğer çiftleri.
* **(İsteğe bağlı) Kurulum öncesi / kurulum sonrası fonksiyonlar**: kurulumdan önce veya sonra çalışan mantık fonksiyonları.
```ts src/application-config.ts
import { defineApplication } from 'twenty-sdk';
@@ -98,21 +98,21 @@ export default defineApplication({
```
Notlar:
* `universalIdentifier` fields are deterministic IDs you own. Generate them once and keep them stable across syncs.
* `applicationVariables` become environment variables for your functions and front components (e.g., `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
* `defaultRoleUniversalIdentifier` must reference a role defined with `defineRole()` (see above).
* Pre-install and post-install functions are detected automatically during the manifest build — you do not need to reference them in `defineApplication()`.
* `universalIdentifier` alanları, size ait deterministik kimliklerdir. Bunları bir kez oluşturun ve senkronizasyonlar boyunca kararlı tutun.
* `applicationVariables`, fonksiyonlarınız ve ön bileşenleriniz için ortam değişkenlerine dönüşür (örn. `DEFAULT_RECIPIENT_NAME`, `process.env.DEFAULT_RECIPIENT_NAME` olarak kullanılabilir).
* `defaultRoleUniversalIdentifier`, `defineRole()` ile tanımlanmış bir role referans vermelidir (yukarıya bakın).
* Kurulum öncesi ve kurulum sonrası fonksiyonlar manifest derlemesi sırasında otomatik olarak algılanır — bunlara `defineApplication()` içinde referans vermeniz gerekmez.
#### Pazaryeri meta verileri
If you plan to [publish your app](/l/tr/developers/extend/apps/publishing), these optional fields control how it appears in the marketplace:
Eğer [uygulamanızı yayımlamayı](/l/tr/developers/extend/apps/publishing) planlıyorsanız, bu isteğe bağlı alanlar uygulamanızın pazaryerinde nasıl görüneceğini kontrol eder:
| Alan | Açıklama |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| `author` | Yazar veya şirket adı |
| `category` | Pazaryerinde filtreleme için uygulama kategorisi |
| `logoUrl` | Path to your app logo (e.g., `public/logo.png`) |
| `screenshots` | Array of screenshot paths (e.g., `public/screenshot-1.png`) |
| `logoUrl` | Uygulamanızın logosuna giden yol (örn. `public/logo.png`) |
| `screenshots` | Ekran görüntüsü yollarının dizisi (örn. `public/screenshot-1.png`) |
| `aboutDescription` | "Hakkında" sekmesi için daha uzun bir markdown açıklaması. Belirtilmezse, pazaryeri npm'deki paketin `README.md` dosyasını kullanır |
| `websiteUrl` | Web sitenize bağlantı |
| `termsUrl` | Hizmet Koşulları'na bağlantı |
@@ -121,15 +121,15 @@ If you plan to [publish your app](/l/tr/developers/extend/apps/publishing), thes
#### Roller ve izinler
The `defaultRoleUniversalIdentifier` in `application-config.ts` designates the default role used by your app's logic functions and front components. See `defineRole` above for details.
`application-config.ts` içindeki `defaultRoleUniversalIdentifier`, uygulamanızın mantık fonksiyonları ve ön bileşenleri tarafından kullanılan varsayılan rolü belirtir. Ayrıntılar için yukarıdaki `defineRole` bölümüne bakın.
* The runtime token injected as `TWENTY_APP_ACCESS_TOKEN` is derived from this role.
* The typed client is restricted to the permissions granted to that role.
* Follow least-privilege: create a dedicated role with only the permissions your functions need.
* `TWENTY_APP_ACCESS_TOKEN` olarak enjekte edilen çalışma zamanı belirteci bu rolden türetilir.
* Türlendirilmiş istemci, o role tanınan izinlerle sınırlandırılır.
* En az ayrıcalık ilkesini izleyin: Yalnızca fonksiyonlarınızın ihtiyaç duyduğu izinlere sahip özel bir rol oluşturun.
##### Default function role
##### Varsayılan fonksiyon rolü
When you scaffold a new app, the CLI creates a default role file:
Yeni bir uygulama iskeleti oluşturduğunuzda, CLI varsayılan bir rol dosyası oluşturur:
```ts src/roles/default-role.ts
import { defineRole, PermissionFlag } from 'twenty-sdk';
@@ -155,16 +155,16 @@ export default defineRole({
});
```
This role's `universalIdentifier` is referenced in `application-config.ts` as `defaultRoleUniversalIdentifier`:
Bu rolün `universalIdentifier` değeri, `application-config.ts` içinde `defaultRoleUniversalIdentifier` olarak referans verilir:
* **\*.role.ts** defines what the role can do.
* **\*.role.ts**, bir rolün neler yapabileceğini tanımlar.
* **application-config.ts**, fonksiyonlarınızın izinlerini devralması için bu role işaret eder.
Notlar:
* Oluşturulan rolden başlayın ve en az ayrıcalık ilkesini izleyerek bunu aşamalı olarak kısıtlayın.
* Replace `objectPermissions` and `fieldPermissions` with the objects and fields your functions actually need.
* `permissionFlags`, platform düzeyindeki yeteneklere erişimi kontrol eder. Keep them minimal.
* See a working example: [`hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
* `objectPermissions` ve `fieldPermissions` değerlerini, fonksiyonlarınızın ihtiyaç duyduğu nesneler ve alanlarla değiştirin.
* `permissionFlags`, platform düzeyindeki yeteneklere erişimi kontrol eder. Bunları asgari düzeyde tutun.
* Çalışan bir örnek için bkz.: [`hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
</Accordion>
<Accordion title="defineObject" description="Alanlara sahip özel nesneler tanımlayın">
@@ -256,7 +256,7 @@ ancak bu önerilmez.
</Note>
</Accordion>
<Accordion title="defineField — Standard fields" description="Mevcut nesneleri ek alanlarla genişletin">
<Accordion title="defineField — Standart alanlar" description="Mevcut nesneleri ek alanlarla genişletin">
Sahibi olmadığınız nesnelere alan eklemek için `defineField()` kullanın — standart Twenty nesneleri (Person, Company, vb.) gibi. veya diğer uygulamalardaki nesneler. `defineObject()` içindeki satır içi alanların aksine, bağımsız alanlar hangi nesneyi genişlettiklerini belirtmek için bir `objectUniversalIdentifier` gerektirir:
@@ -284,7 +284,7 @@ export default defineField({
* `defineField()`, `defineObject()` ile oluşturmadığınız nesnelere alan eklemenin tek yoludur.
</Accordion>
<Accordion title="defineField — Relation fields" description="Connect objects together with bidirectional relations">
<Accordion title="defineField — İlişki alanları" description="Nesneleri çift yönlü ilişkilerle birbirine bağlayın">
İlişkiler nesneleri birbirine bağlar. Twenty'de ilişkiler her zaman **çift yönlüdür** — her iki tarafı da tanımlarsınız ve her taraf diğerine başvurur.
@@ -443,7 +443,7 @@ export default defineObject({
});
```
</Accordion>
<Accordion title="defineLogicFunction" description="Define logic functions and their triggers">
<Accordion title="defineLogicFunction" description="Mantık fonksiyonlarını ve tetikleyicilerini tanımlayın">
Her fonksiyon dosyası, bir işleyici ve isteğe bağlı tetikleyiciler içeren bir yapılandırmayı dışa aktarmak için `defineLogicFunction()` kullanır.
@@ -487,15 +487,15 @@ export default defineLogicFunction({
});
```
Available trigger types:
* **httpRoute**: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
> e.g. `path: '/post-card/create'` is callable at `https://your-twenty-server.com/s/post-card/create`
Kullanılabilir tetikleyici türleri:
* **httpRoute**: Fonksiyonunuzu bir HTTP yolu ve yöntemiyle **`/s/` uç noktasının altında** kullanıma sunar:
> örn. `path: '/post-card/create'` `https://your-twenty-server.com/s/post-card/create` adresinden çağrılabilir
* **cron**: Bir CRON ifadesi kullanarak fonksiyonunuzu bir zamanlamayla çalıştırır.
* **databaseEvent**: Çalışma alanı nesnesi yaşam döngüsü olaylarında çalışır. Olay işlemi `updated` olduğunda, dinlenecek belirli alanlar `updatedFields` dizisinde belirtilebilir. Tanımsız veya boş bırakılırsa, herhangi bir güncelleme fonksiyonu tetikler.
> e.g. `person.updated`, `*.created`, `company.*`
> örn. `person.updated`, `*.created`, `company.*`
<Note>
You can also manually execute a function using the CLI:
Bir fonksiyonu CLI kullanarak manuel olarak da çalıştırabilirsiniz:
```bash filename="Terminal"
yarn twenty exec -n create-new-post-card -p '{"key": "value"}'
@@ -505,7 +505,7 @@ yarn twenty exec -n create-new-post-card -p '{"key": "value"}'
yarn twenty exec -y e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf
```
You can watch logs with:
Günlükleri şu şekilde izleyebilirsiniz:
```bash filename="Terminal"
yarn twenty logs
@@ -514,9 +514,9 @@ yarn twenty logs
#### Rota tetikleyicisi yükü
When a route trigger invokes your logic function, it receives a `RoutePayload` object that follows the
[AWS HTTP API v2 format](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html).
Import the `RoutePayload` type from `twenty-sdk`:
Bir rota tetikleyicisi mantık fonksiyonunuzu çağırdığında,
[AWS HTTP API v2 formatını](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html) izleyen bir `RoutePayload` nesnesi alır.
`RoutePayload` türünü `twenty-sdk` içinden içe aktarın:
```ts
import { defineLogicFunction, type RoutePayload } from 'twenty-sdk';
@@ -533,9 +533,9 @@ const handler = async (event: RoutePayload) => {
| Özellik | Tür | Açıklama | Örnek |
| ---------------------------- | ------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | HTTP başlıkları (`forwardedRequestHeaders` içinde listelenenlerle sınırlı) | see section below |
| `headers` | `Record<string, string \| undefined>` | HTTP başlıkları (`forwardedRequestHeaders` içinde listelenenlerle sınırlı) | aşağıdaki bölüme bakın |
| `queryStringParameters` | `Record<string, string \| undefined>` | Sorgu dizesi parametreleri (birden çok değer virgülle birleştirilir) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
| `pathParameters` | `Record<string, string \| undefined>` | Path parameters extracted from the route pattern | `/users/:id`, `/users/123` -> `{ id: '123' }` |
| `pathParameters` | `Record<string, string \| undefined>` | Rota deseninden çıkarılan yol parametreleri | `/users/:id`, `/users/123` -> `{ id: '123' }` |
| `body` | `object \| null` | Ayrıştırılmış istek gövdesi (JSON) | `{ id: 1 }` -> `{ id: 1 }` |
| `isBase64Encoded` | `boolean` | Gövdenin base64 ile kodlanıp kodlanmadığı | |
| `requestContext.http.method` | `string` | HTTP yöntemi (GET, POST, PUT, PATCH, DELETE) | |
@@ -545,7 +545,7 @@ const handler = async (event: RoutePayload) => {
#### forwardedRequestHeaders
Varsayılan olarak, güvenlik nedenleriyle gelen isteklerden HTTP başlıkları mantık fonksiyonunuza **aktarılmaz**.
To access specific headers, list them in the `forwardedRequestHeaders` array:
Belirli başlıklara erişmek için bunları `forwardedRequestHeaders` dizisinde listeleyin:
```ts
export default defineLogicFunction({
@@ -561,7 +561,7 @@ export default defineLogicFunction({
});
```
In your handler, access the forwarded headers like this:
İşleyicinizde, iletilen başlıklara şu şekilde erişin:
```ts
const handler = async (event: RoutePayload) => {
@@ -574,14 +574,14 @@ const handler = async (event: RoutePayload) => {
```
<Note>
Başlık adları küçük harfe normalize edilir. Access them using lowercase keys (e.g., `event.headers['content-type']`).
Başlık adları küçük harfe normalize edilir. Onlara küçük harfli anahtarlarla erişin (örneğin, `event.headers['content-type']`).
</Note>
#### Exposing a function as a tool
#### Bir fonksiyonu araç olarak sunma
Mantık işlevleri, yapay zeka ajanları ve iş akışları için **araçlar** olarak sunulabilir. When marked as a tool, a function becomes discoverable by Twenty's AI features and can be used in workflow automations.
Mantık işlevleri, yapay zeka ajanları ve iş akışları için **araçlar** olarak sunulabilir. Bir fonksiyon bir araç olarak işaretlendiğinde, Twenty'nin yapay zeka özellikleri tarafından keşfedilebilir hâle gelir ve iş akışı otomasyonlarında kullanılabilir.
To mark a logic function as a tool, set `isTool: true`:
Bir mantık fonksiyonunu araç olarak işaretlemek için `isTool: true` olarak ayarlayın:
```ts src/logic-functions/enrich-company.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
@@ -617,8 +617,8 @@ export default defineLogicFunction({
Önemli noktalar:
* You can combine `isTool` with triggers — a function can be both a tool (callable by AI agents) and triggered by events at the same time.
* **`toolInputSchema`** (optional): A JSON Schema object describing the parameters your function accepts. The schema is computed automatically from source code static analysis, but you can set it explicitly:
* `isTool` özelliğini tetikleyicilerle birleştirebilirsiniz — bir fonksiyon aynı anda hem bir araç (yapay zeka ajanları tarafından çağrılabilir) olabilir hem de olaylar tarafından tetiklenebilir.
* **`toolInputSchema`** (isteğe bağlı): Fonksiyonunuzun kabul ettiği parametreleri tanımlayan bir JSON Schema nesnesi. Şema, kaynak kodun statik analizinden otomatik olarak oluşturulur, ancak bunu açıkça belirleyebilirsiniz:
```ts
export default defineLogicFunction({
@@ -715,11 +715,11 @@ yarn twenty exec --postInstall
</Accordion>
<Accordion title="defineFrontComponent" description="Özel kullanıcı arayüzü için ön uç bileşenlerini tanımlayın">
Front components are React components that render directly inside Twenty's UI. They run in an **isolated Web Worker** using Remote DOM — your code is sandboxed but renders natively in the page, not in an iframe.
Ön uç bileşenler, Twenty'nin UI'si içinde doğrudan görüntülenen React bileşenleridir. Remote DOM kullanan izole bir Web Worker içinde çalışırlar — kodunuz izole bir ortamda (sandbox) çalışır ancak bir iframe içinde değil, sayfada yerel olarak işlenir.
#### Basic example
#### Basit örnek
The quickest way to see a front component in action is to register it as a **command**. Adding a `command` field with `isPinned: true` makes it appear as a quick-action button in the top-right corner of the page — no page layout needed:
Bir ön uç bileşenini çalışırken görmenin en hızlı yolu, onu bir komut olarak kaydetmektir. `isPinned: true` ile bir `command` alanı eklemek, sayfanın sağ üst köşesinde hızlı işlem düğmesi olarak görünmesini sağlar — herhangi bir sayfa düzenine gerek yoktur:
```tsx src/front-components/hello-world.tsx
import { defineFrontComponent } from 'twenty-sdk';
@@ -749,34 +749,34 @@ export default defineFrontComponent({
});
```
After syncing with `yarn twenty dev`, the quick action appears in the top-right corner of the page:
`yarn twenty dev` ile senkronize ettikten sonra, hızlı işlem sayfanın sağ üst köşesinde görünür:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/quick-action.png" alt="Quick action button in the top-right corner" />
<img src="/images/docs/developers/extends/apps/quick-action.png" alt="Sağ üst köşedeki hızlı işlem düğmesi" />
</div>
Click it to render the component inline.
Bileşeni satır içi işlemek için üzerine tıklayın.
{/* TODO: add screenshot of the rendered front component */}
#### Configuration fields
#### Yapılandırma alanları
| Alan | Zorunlu | Açıklama |
| --------------------- | ------- | ----------------------------------------------------------------------------------- |
| `universalIdentifier` | Evet | Stable unique ID for this component |
| `component` | Evet | A React component function |
| `name` | Hayır | Display name |
| `description` | Hayır | Description of what the component does |
| `isHeadless` | Hayır | Set to `true` if the component has no visible UI (see below) |
| `command` | Hayır | Register the component as a command (see [command options](#command-options) below) |
| Alan | Zorunlu | Açıklama |
| --------------------- | ------- | ------------------------------------------------------------------------------------------ |
| `universalIdentifier` | Evet | Bu bileşen için kalıcı benzersiz kimlik |
| `component` | Evet | Bir React bileşen fonksiyonu |
| `name` | Hayır | Görünen Ad |
| `description` | Hayır | Bileşenin ne yaptığına dair açıklama |
| `isHeadless` | Hayır | Bileşenin görünür bir kullanıcı arayüzü yoksa `true` olarak ayarlayın (aşağıya bakın) |
| `command` | Hayır | Bileşeni bir komut olarak kaydedin (aşağıda [komut seçeneklerine](#command-options) bakın) |
#### Placing a front component on a page
#### Bir ön uç bileşenini bir sayfaya yerleştirme
Beyond commands, you can embed a front component directly into a record page by adding it as a widget in a **page layout**. See the [definePageLayout](#definepagelayout) section for details.
Komutların ötesinde, bir ön uç bileşenini bir **sayfa düzeninde** widget olarak ekleyerek doğrudan bir kayıt sayfasına gömebilirsiniz. Ayrıntılar için [definePageLayout](#definepagelayout) bölümüne bakın.
#### Headless components (`isHeadless: true`)
#### Headless bileşenler (`isHeadless: true`)
Headless components render no visible UI but still run React logic. This is useful for **effect components** — components that perform side effects when mounted, such as syncing data, starting a timer, listening to events, or triggering a notification.
Headless bileşenler görünür bir kullanıcı arayüzü oluşturmaz ancak yine de React mantığını çalıştırır. Bu, **etki bileşenleri** için kullanışlıdır — bağlandıklarında veri senkronizasyonu yapmak, bir zamanlayıcı başlatmak, olayları dinlemek veya bir bildirimi tetiklemek gibi yan etkiler gerçekleştiren bileşenler.
```tsx src/front-components/sync-tracker.tsx
import { defineFrontComponent, useRecordId, enqueueSnackbar } from 'twenty-sdk';
@@ -801,11 +801,11 @@ export default defineFrontComponent({
});
```
Because the component returns `null`, Twenty skips rendering a container for it — no empty space appears in the layout. The component still has access to all hooks and the host communication API.
Bileşen `null` döndürdüğü için, Twenty bunun için bir kapsayıcı oluşturmayı atlar — düzende boş alan görünmez. Bileşen yine de tüm hook'lara ve host iletişim API'sine erişime sahiptir.
#### Accessing runtime context
#### Çalışma zamanı bağlamına erişme
Inside your component, use SDK hooks to access the current user, record, and component instance:
Bileşeninizin içinde, geçerli kullanıcıya, kayda ve bileşen örneğine erişmek için SDK hook'larını kullanın:
```tsx src/front-components/record-info.tsx
import {
@@ -836,47 +836,47 @@ export default defineFrontComponent({
});
```
Available hooks:
Kullanılabilir hook'lar:
| Hook | Returns | Açıklama |
| --------------------------------------------- | ------------------ | ---------------------------------------------------------- |
| `useUserId()` | `string` or `null` | The current user's ID |
| `useRecordId()` | `string` or `null` | The current record's ID (when placed on a record page) |
| `useFrontComponentId()` | `string` | This component instance's ID |
| `useFrontComponentExecutionContext(selector)` | değişir | Access the full execution context with a selector function |
| Hook | Döndürür | Açıklama |
| --------------------------------------------- | -------------------- | ------------------------------------------------------------- |
| `useUserId()` | `string` veya `null` | Geçerli kullanıcının ID'si |
| `useRecordId()` | `string` veya `null` | Geçerli kaydın ID'si (bir kayıt sayfasına yerleştirildiğinde) |
| `useFrontComponentId()` | `string` | Bu bileşen örneğinin ID'si |
| `useFrontComponentExecutionContext(selector)` | değişir | Bir seçici işlevle tam yürütme bağlamına erişin |
#### Host communication API
#### Host iletişim API'si
Front components can trigger navigation, modals, and notifications using functions from `twenty-sdk`:
Ön uç bileşenleri, `twenty-sdk`'deki işlevleri kullanarak gezinmeyi, modalları ve bildirimleri tetikleyebilir:
| Fonksiyon | Açıklama |
| ----------------------------------------------- | ----------------------------- |
| `navigate(to, params?, queryParams?, options?)` | Navigate to a page in the app |
| `openSidePanelPage(params)` | Open a side panel |
| `closeSidePanel()` | Yan paneli kapat |
| `openCommandConfirmationModal(params)` | Show a confirmation dialog |
| `enqueueSnackbar(params)` | Show a toast notification |
| `unmountFrontComponent()` | Unmount the component |
| `updateProgress(progress)` | Update a progress indicator |
| Fonksiyon | Açıklama |
| ----------------------------------------------- | ---------------------------------- |
| `navigate(to, params?, queryParams?, options?)` | Uygulamada bir sayfaya git |
| `openSidePanelPage(params)` | Bir yan panel aç |
| `closeSidePanel()` | Yan paneli kapat |
| `openCommandConfirmationModal(params)` | Bir onay iletişim kutusu göster |
| `enqueueSnackbar(params)` | Bir toast bildirimi göster |
| `unmountFrontComponent()` | Bileşeni kaldır (unmount) |
| `updateProgress(progress)` | Bir ilerleme göstergesini güncelle |
#### Command options
#### Komut seçenekleri
Adding a `command` field to `defineFrontComponent` registers the component in the command menu (Cmd+K). If `isPinned` is `true`, it also appears as a quick-action button in the top-right corner of the page.
`defineFrontComponent` içine bir `command` alanı eklemek, bileşeni komut menüsüne (Cmd+K) kaydeder. `isPinned` `true` ise, sayfanın sağ üst köşesinde bir hızlı işlem düğmesi olarak da görünür.
| Alan | Zorunlu | Açıklama |
| --------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `universalIdentifier` | Evet | Stable unique ID for the command |
| `label` | Evet | Full label shown in the command menu (Cmd+K) |
| `shortLabel` | Hayır | Shorter label displayed on the pinned quick-action button |
| `icon` | Hayır | Icon name displayed next to the label (e.g. `'IconBolt'`, `'IconSend'`) |
| `isPinned` | Hayır | When `true`, shows the command as a quick-action button in the top-right corner of the page |
| `availabilityType` | Hayır | Controls where the command appears: `'GLOBAL'` (always available), `'RECORD_SELECTION'` (only when records are selected), or `'FALLBACK'` (shown when no other commands match) |
| `availabilityObjectUniversalIdentifier` | Hayır | Restrict the command to pages of a specific object type (e.g. only on Company records) |
| `conditionalAvailabilityExpression` | Hayır | A boolean expression to dynamically control whether the command is visible (see below) |
| Alan | Zorunlu | Açıklama |
| --------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `universalIdentifier` | Evet | Komut için kararlı benzersiz kimlik |
| `label` | Evet | Komut menüsünde (Cmd+K) gösterilen tam etiket |
| `shortLabel` | Hayır | Sabitlenmiş hızlı işlem düğmesinde görüntülenen daha kısa etiket |
| `icon` | Hayır | Etiketin yanında görüntülenen simge adı (örn. `'IconBolt'`, `'IconSend'`) |
| `isPinned` | Hayır | `true` olduğunda, komutu sayfanın sağ üst köşesinde bir hızlı işlem düğmesi olarak gösterir |
| `availabilityType` | Hayır | Komutun nerede görüneceğini kontrol eder: `'GLOBAL'` (her zaman kullanılabilir), `'RECORD_SELECTION'` (yalnızca kayıtlar seçiliyken) veya `'FALLBACK'` (başka hiçbir komut eşleşmediğinde gösterilir) |
| `availabilityObjectUniversalIdentifier` | Hayır | Komutu belirli bir nesne türünün sayfalarıyla sınırlandırın (örn. yalnızca Company kayıtlarında) |
| `conditionalAvailabilityExpression` | Hayır | Komutun görünür olup olmadığını dinamik olarak kontrol eden bir boolean ifade (aşağıya bakın) |
#### Conditional availability expressions
#### Koşullu kullanılabilirlik ifadeleri
The `conditionalAvailabilityExpression` field lets you control when a command is visible based on the current page context. Import typed variables and operators from `twenty-sdk` to build expressions:
`conditionalAvailabilityExpression` alanı, geçerli sayfa bağlamına göre bir komutun ne zaman görünür olacağını kontrol etmenizi sağlar. İfadeler oluşturmak için `twenty-sdk`'den türlendirilmiş değişkenleri ve operatörleri içe aktarın:
```tsx
import {
@@ -905,45 +905,45 @@ export default defineFrontComponent({
});
```
**Context variables** — these represent the current state of the page:
**Bağlam değişkenleri** — bunlar sayfanın mevcut durumunu temsil eder:
| Değişken | Tür | Açıklama |
| ------------------------------ | --------- | ---------------------------------------------------------------- |
| `pageType` | `string` | Current page type (e.g. `'RecordIndexPage'`, `'RecordShowPage'`) |
| `isInSidePanel` | `boolean` | Whether the component is rendered in a side panel |
| `numberOfSelectedRecords` | `number` | Number of currently selected records |
| `isSelectAll` | `boolean` | Whether "select all" is active |
| `selectedRecords` | `array` | The selected record objects |
| `favoriteRecordIds` | `array` | IDs of favorited records |
| `objectPermissions` | `object` | Permissions for the current object type |
| `targetObjectReadPermissions` | `object` | Read permissions for the target object |
| `targetObjectWritePermissions` | `object` | Write permissions for the target object |
| `featureFlags` | `object` | Active feature flags |
| `objectMetadataItem` | `object` | Metadata of the current object type |
| `hasAnySoftDeleteFilterOnView` | `boolean` | Whether the current view has a soft-delete filter |
| Değişken | Tür | Açıklama |
| ------------------------------ | --------- | ----------------------------------------------------------------- |
| `pageType` | `string` | Geçerli sayfa türü (örn. `'RecordIndexPage'`, `'RecordShowPage'`) |
| `isInSidePanel` | `boolean` | Bileşenin bir yan panelde oluşturulup oluşturulmadığı |
| `numberOfSelectedRecords` | `number` | Şu anda seçili kayıt sayısı |
| `isSelectAll` | `boolean` | "tümünü seç" seçeneğinin etkin olup olmadığı |
| `selectedRecords` | `array` | Seçili kayıt nesneleri |
| `favoriteRecordIds` | `array` | Favorilere eklenen kayıtların ID'leri |
| `objectPermissions` | `object` | Geçerli nesne türü için izinler |
| `targetObjectReadPermissions` | `object` | Hedef nesne için okuma izinleri |
| `targetObjectWritePermissions` | `object` | Hedef nesne için yazma izinleri |
| `featureFlags` | `object` | Etkin özellik bayrakları |
| `objectMetadataItem` | `object` | Geçerli nesne türünün üst verileri |
| `hasAnySoftDeleteFilterOnView` | `boolean` | Geçerli görünümde soft-delete filtresi olup olmadığı |
**Operators** — combine variables into boolean expressions:
**Operatörler** — değişkenleri boolean ifadelere dönüştürmek için birleştirin:
| Operator | Açıklama |
| ----------------------------------- | ----------------------------------------------------------------- |
| `isDefined(value)` | `true` if the value is not null/undefined |
| `isNonEmptyString(value)` | `true` if the value is a non-empty string |
| `includes(array, value)` | `true` if the array contains the value |
| `includesEvery(array, prop, value)` | `true` if every item's property includes the value |
| `every(array, prop)` | `true` if the property is truthy on every item |
| `everyDefined(array, prop)` | `true` if the property is defined on every item |
| `everyEquals(array, prop, value)` | `true` if the property equals the value on every item |
| `some(array, prop)` | `true` if the property is truthy on at least one item |
| `someDefined(array, prop)` | `true` if the property is defined on at least one item |
| `someEquals(array, prop, value)` | `true` if the property equals the value on at least one item |
| `someNonEmptyString(array, prop)` | `true` if the property is a non-empty string on at least one item |
| `none(array, prop)` | `true` if the property is falsy on every item |
| `noneDefined(array, prop)` | `true` if the property is undefined on every item |
| `noneEquals(array, prop, value)` | `true` if the property does not equal the value on any item |
| Operatör | Açıklama |
| ----------------------------------- | --------------------------------------------------------- |
| `isDefined(value)` | Değer null/undefined değilse `true` |
| `isNonEmptyString(value)` | Değer boş olmayan bir string ise `true` |
| `includes(array, value)` | Dizi değeri içeriyorsa `true` |
| `includesEvery(array, prop, value)` | Her bir öğenin özelliği değeri içeriyorsa `true` |
| `every(array, prop)` | Özellik her öğede truthy ise `true` |
| `everyDefined(array, prop)` | Özellik her öğede tanımlıysa `true` |
| `everyEquals(array, prop, value)` | Özellik her öğede değere eşitse `true` |
| `some(array, prop)` | Özellik en az bir öğede truthy ise `true` |
| `someDefined(array, prop)` | Özellik en az bir öğede tanımlıysa `true` |
| `someEquals(array, prop, value)` | Özellik en az bir öğede değere eşitse `true` |
| `someNonEmptyString(array, prop)` | Özellik en az bir öğede boş olmayan bir string ise `true` |
| `none(array, prop)` | Özellik her öğede falsy ise `true` |
| `noneDefined(array, prop)` | Özellik her öğede tanımsızsa `true` |
| `noneEquals(array, prop, value)` | Özellik hiçbir öğede değere eşit değilse `true` |
#### Public assets
#### Genel varlıklar
Front components can access files from the app's `public/` directory using `getPublicAssetUrl`:
Ön uç bileşenleri, `getPublicAssetUrl` kullanarak uygulamanın `public/` dizinindeki dosyalara erişebilir:
```tsx
import { defineFrontComponent, getPublicAssetUrl } from 'twenty-sdk';
@@ -957,18 +957,18 @@ export default defineFrontComponent({
});
```
See the [public assets section](#accessing-public-assets-with-getpublicasseturl) for details.
Ayrıntılar için [genel varlıklar bölümüne](#accessing-public-assets-with-getpublicasseturl) bakın.
#### Stil
Front components support multiple styling approaches. You can use:
Ön uç bileşenleri birden fazla biçimlendirme yaklaşımını destekler. Şunları kullanabilirsiniz:
* **Inline styles** — `style={{ color: 'red' }}`
* **Twenty UI components** — import from `twenty-sdk/ui` (Button, Tag, Status, Chip, Avatar, and more)
* **Emotion** — CSS-in-JS with `@emotion/react`
* **Styled-components** — `styled.div` patterns
* **Tailwind CSS** — utility classes
* **Any CSS-in-JS library** compatible with React
* **Satır içi stiller** — `style={{ color: 'red' }}`
* **Twenty UI bileşenleri** — `twenty-sdk/ui` içinden içe aktarın (Button, Tag, Status, Chip, Avatar ve daha fazlası)
* **Emotion** — `@emotion/react` ile CSS-in-JS
* **Styled-components** — `styled.div` kalıpları
* **Tailwind CSS** — yardımcı sınıflar
* **React ile uyumlu herhangi bir CSS-in-JS kitaplığı**
```tsx
import { defineFrontComponent } from 'twenty-sdk';
@@ -1022,9 +1022,9 @@ export default defineSkill({
* `description` (isteğe bağlı), yeteneğin amacı hakkında ek bağlam sağlar.
</Accordion>
<Accordion title="defineAgent" description="Define AI agents with custom prompts">
<Accordion title="defineAgent" description="Özel istemlerle yapay zekâ ajanları tanımlayın">
Agents are AI assistants that live inside your workspace. Use `defineAgent()` to create agents with a custom system prompt:
Ajanlar, çalışma alanınız içinde bulunan yapay zekâ asistanlarıdır. Özel bir sistem istemiyle ajanlar oluşturmak için `defineAgent()` kullanın:
```ts src/agents/example-agent.ts
import { defineAgent } from 'twenty-sdk';
@@ -1040,17 +1040,17 @@ export default defineAgent({
```
Önemli noktalar:
* `name` is the unique identifier string for the agent (kebab-case recommended).
* `label` is the display name shown in the UI.
* `prompt` is the system prompt that defines the agent's behavior.
* `description` (optional) provides context about what the agent does.
* `name`, ajan için benzersiz bir tanımlayıcı dizedir (kebab-case önerilir).
* `label`, UI'de gösterilen görünen addır.
* `prompt`, ajanın davranışını tanımlayan sistem istemidir.
* `description` (isteğe bağlı), ajanın ne yaptığı hakkında bağlam sağlar.
* `icon` (isteğe bağlı), UI'de gösterilen simgeyi ayarlar.
* `modelId` (optional) overrides the default AI model used by the agent.
* `modelId` (isteğe bağlı), ajanın kullandığı varsayılan yapay zekâ modelini geçersiz kılar.
</Accordion>
<Accordion title="defineView" description="Nesneler için kaydedilmiş görünümler tanımlayın">
Views are saved configurations for how records of an object are displayed — including which fields are visible, their order, and any filters or groups applied. Use `defineView()` to ship pre-configured views with your app:
Görünümler, bir nesnenin kayıtlarının nasıl görüntüleneceğine ilişkin kaydedilmiş yapılandırmalardır — hangi alanların görünür olacağını, sıralarını ve uygulanan filtreleri veya grupları içerir. Uygulamanızla önceden yapılandırılmış görünümler sunmak için `defineView()` kullanın:
```ts src/views/example-view.ts
import { defineView, ViewKey } from 'twenty-sdk';
@@ -1077,16 +1077,16 @@ export default defineView({
```
Önemli noktalar:
* `objectUniversalIdentifier` specifies which object this view applies to.
* `key` determines the view type (e.g., `ViewKey.INDEX` for the main list view).
* `fields` controls which columns appear and their order. Each field references a `fieldMetadataUniversalIdentifier`.
* You can also define `filters`, `filterGroups`, `groups`, and `fieldGroups` for more advanced configurations.
* `position` controls the ordering when multiple views exist for the same object.
* `objectUniversalIdentifier`, bu görünümün hangi nesneye uygulanacağını belirtir.
* `key`, görünüm türünü belirler (ör. ana liste görünümü için `ViewKey.INDEX`).
* `fields`, hangi sütunların görüneceğini ve sıralarını kontrol eder. Her alan bir `fieldMetadataUniversalIdentifier` öğesine referans verir.
* Daha gelişmiş yapılandırmalar için `filters`, `filterGroups`, `groups` ve `fieldGroups` de tanımlayabilirsiniz.
* `position`, aynı nesne için birden fazla görünüm olduğunda sıralamayı kontrol eder.
</Accordion>
<Accordion title="defineNavigationMenuItem" description="Kenar çubuğu gezinme bağlantılarını tanımlayın">
Navigation menu items add custom entries to the workspace sidebar. Use `defineNavigationMenuItem()` to link to views, external URLs, or objects:
Gezinme menüsü öğeleri, çalışma alanı kenar çubuğuna özel girişler ekler. Görünümlere, harici URL'lere veya nesnelere bağlanmak için `defineNavigationMenuItem()` kullanın:
```ts src/navigation-menu-items/example-navigation-menu-item.ts
import { defineNavigationMenuItem, NavigationMenuItemType } from 'twenty-sdk';
@@ -1104,15 +1104,15 @@ export default defineNavigationMenuItem({
```
Önemli noktalar:
* `type` determines what the menu item links to: `NavigationMenuItemType.VIEW` for a saved view, or `NavigationMenuItemType.LINK` for an external URL.
* For view links, set `viewUniversalIdentifier`. For external links, set `link`.
* `position` controls the ordering in the sidebar.
* `icon` and `color` (optional) customize the appearance.
* `type`, menü öğesinin neye bağlanacağını belirler: kaydedilmiş bir görünüm için `NavigationMenuItemType.VIEW` veya harici bir URL için `NavigationMenuItemType.LINK`.
* Görünüm bağlantıları için `viewUniversalIdentifier` ayarlayın. Harici bağlantılar için `link` ayarlayın.
* `position`, kenar çubuğundaki sıralamayı kontrol eder.
* `icon` ve `color` (isteğe bağlı) görünümü özelleştirir.
</Accordion>
<Accordion title="definePageLayout" description="Define custom page layouts for record views">
<Accordion title="definePageLayout" description="Kayıt görünümleri için özel sayfa düzenleri tanımlayın">
Page layouts let you customize how a record detail page looks — which tabs appear, what widgets are inside each tab, and how they are arranged. Use `definePageLayout()` to ship custom layouts with your app:
Sayfa düzenleri, bir kayıt ayrıntı sayfasının nasıl görüneceğini özelleştirmenizi sağlar — hangi sekmelerin görüneceği, her sekmenin içinde hangi widget'ların olacağı ve bunların nasıl düzenleneceği. Uygulamanızla özel düzenler sunmak için `definePageLayout()` kullanın:
```ts src/page-layouts/example-record-page-layout.ts
import { definePageLayout, PageLayoutTabLayoutMode } from 'twenty-sdk';
@@ -1149,33 +1149,33 @@ export default definePageLayout({
```
Önemli noktalar:
* `type` is typically `'RECORD_PAGE'` to customize the detail view of a specific object.
* `objectUniversalIdentifier` specifies which object this layout applies to.
* Each `tab` defines a section of the page with a `title`, `position`, and `layoutMode` (`CANVAS` for free-form layout).
* Each `widget` inside a tab can render a front component, a relation list, or other built-in widget types.
* `position` on tabs controls their order. Use higher values (e.g., 50) to place custom tabs after built-in ones.
* `type` genellikle belirli bir nesnenin ayrıntı görünümünü özelleştirmek için `'RECORD_PAGE'` olur.
* `objectUniversalIdentifier`, bu düzenin hangi nesneye uygulanacağını belirtir.
* Her `tab`, bir `title`, `position` ve `layoutMode` ile sayfanın bir bölümünü tanımlar (serbest biçimli düzen için `CANVAS`).
* Bir sekmenin içindeki her `widget`, bir ön uç bileşeni, bir ilişki listesi veya diğer yerleşik widget türlerini oluşturabilir.
* Sekmelerdeki `position`, sıralarını kontrol eder. Özel sekmeleri yerleşik olanların sonrasına yerleştirmek için daha yüksek değerler kullanın (ör. 50).
</Accordion>
</AccordionGroup>
## Public assets (`public/` folder)
## Genel varlıklar (`public/` klasörü)
The `public/` folder at the root of your app holds static files — images, icons, fonts, or any other assets your app needs at runtime. These files are automatically included in builds, synced during dev mode, and uploaded to the server.
Uygulamanızın kökündeki `public/` klasörü, statik dosyaları barındırır — görseller, simgeler, yazı tipleri veya uygulamanızın çalışma zamanında ihtiyaç duyduğu diğer varlıklar. Bu dosyalar derlemelere otomatik olarak dahil edilir, geliştirme modunda senkronize edilir ve sunucuya yüklenir.
Files placed in `public/` are:
`public/` içine yerleştirilen dosyalar şunlardır:
* **Publicly accessible** — once synced to the server, assets are served at a public URL. No authentication is needed to access them.
* **Available in front components** — use asset URLs to display images, icons, or any media inside your React components.
* **Available in logic functions** — reference asset URLs in emails, API responses, or any server-side logic.
* **Used for marketplace metadata** — the `logoUrl` and `screenshots` fields in `defineApplication()` reference files from this folder (e.g., `public/logo.png`). These are displayed in the marketplace when your app is published.
* **Auto-synced in dev mode** — when you add, update, or delete a file in `public/`, it is synced to the server automatically. No restart needed.
* **Included in builds** — `yarn twenty build` bundles all public assets into the distribution output.
* **Herkese açık olarak erişilebilir** — sunucuya senkronize edildikten sonra varlıklar genel bir URL'den sunulur. Onlara erişmek için kimlik doğrulama gerekmez.
* **Ön uç bileşenlerinde kullanılabilir** — React bileşenlerinizin içinde görseller, simgeler veya herhangi bir medyayı göstermek için varlık URL'lerini kullanın.
* **Mantık işlevlerinde kullanılabilir** — e-postalarda, API yanıtlarında veya herhangi bir sunucu tarafı mantıkta varlık URL'lerine referans verin.
* **Pazar yeri üst verileri için kullanılır** — `defineApplication()` içindeki `logoUrl` ve `screenshots` alanları bu klasördeki dosyalara referans verir (örn. `public/logo.png`). Bunlar, uygulamanız yayımlandığında pazar yerinde görüntülenir.
* **Geliştirme modunda otomatik senkronize edilir** — `public/` içinde bir dosya eklediğinizde, güncellediğinizde veya sildiğinizde otomatik olarak sunucuya senkronize edilir. Yeniden başlatma gerekmez.
* **Derlemelere dahil edilir** — `yarn twenty build`, tüm genel varlıkları dağıtım çıktısına paketler.
### Accessing public assets with `getPublicAssetUrl`
### `getPublicAssetUrl` ile genel varlıklara erişme
Use the `getPublicAssetUrl` helper from `twenty-sdk` to get the full URL of a file in your `public/` directory. It works in both **logic functions** and **front components**.
`twenty-sdk` içindeki `getPublicAssetUrl` yardımcı işlevini kullanarak `public/` dizininizdeki bir dosyanın tam URL'sini alın. Hem **mantık işlevlerinde** hem de **ön uç bileşenlerinde** çalışır.
**In a logic function:**
**Bir mantık işlevinde:**
```ts src/logic-functions/send-invoice.ts
import { defineLogicFunction, getPublicAssetUrl } from 'twenty-sdk';
@@ -1200,7 +1200,7 @@ export default defineLogicFunction({
});
```
**In a front component:**
**Bir ön uç bileşeninde:**
```tsx src/front-components/company-card.tsx
import { defineFrontComponent, getPublicAssetUrl } from 'twenty-sdk';
@@ -1212,19 +1212,19 @@ export default defineFrontComponent(() => {
});
```
The `path` argument is relative to your app's `public/` folder. Both `getPublicAssetUrl('logo.png')` and `getPublicAssetUrl('public/logo.png')` resolve to the same URL — the `public/` prefix is stripped automatically if present.
`path` bağımsız değişkeni, uygulamanızın `public/` klasörüne göre görelidir. Hem `getPublicAssetUrl('logo.png')` hem de `getPublicAssetUrl('public/logo.png')` aynı URL'ye çözümlenir — `public/` öneki varsa otomatik olarak kaldırılır.
## Using npm packages
## npm paketlerini kullanma
You can install and use any npm package in your app. Both logic functions and front components are bundled with [esbuild](https://esbuild.github.io/), which inlines all dependencies into the output — no `node_modules` are needed at runtime.
Uygulamanızda herhangi bir npm paketini yükleyip kullanabilirsiniz. Hem mantık işlevleri hem de ön uç bileşenleri, tüm bağımlılıkları çıktıya satır içi olarak ekleyen [esbuild](https://esbuild.github.io/) ile paketlenir — çalışma zamanında `node_modules` gerekmez.
### Installing a package
### Bir paketi yükleme
```bash filename="Terminal"
yarn add axios
```
Then import it in your code:
Ardından kodunuza içe aktarın:
```ts src/logic-functions/fetch-data.ts
import { defineLogicFunction } from 'twenty-sdk';
@@ -1245,7 +1245,7 @@ export default defineLogicFunction({
});
```
The same works for front components:
Aynısı ön uç bileşenleri için de geçerlidir:
```tsx src/front-components/chart.tsx
import { defineFrontComponent } from 'twenty-sdk';
@@ -1262,27 +1262,27 @@ export default defineFrontComponent({
});
```
### How bundling works
### Paketleme nasıl çalışır
The build step (`yarn twenty dev` or `yarn twenty build`) uses esbuild to produce a single self-contained file per logic function and per front component. All imported packages are inlined into the bundle.
Derleme adımı (`yarn twenty dev` veya `yarn twenty build`), her mantık işlevi ve her ön uç bileşeni için tek bir bağımsız dosya üretmek üzere esbuild kullanır. Tüm içe aktarılan paketler pakete satır içi eklenir.
**Logic functions** run in a Node.js environment. Node built-in modules (`fs`, `path`, `crypto`, `http`, etc.) are available and do not need to be installed.
**Mantık işlevleri**, Node.js ortamında çalışır. Node yerleşik modülleri (`fs`, `path`, `crypto`, `http` vb.) kullanılabilir ve kurulmaları gerekmez.
**Front components** run in a Web Worker. Node built-in modules are **not** available — only browser APIs and npm packages that work in a browser environment.
**Ön uç bileşenleri**, bir Web Worker içinde çalışır. Node'un yerleşik modülleri **kullanılamaz** — yalnızca tarayıcı ortamında çalışan tarayıcı API'leri ve npm paketleri kullanılabilir.
Both environments have `twenty-client-sdk/core` and `twenty-client-sdk/metadata` available as pre-provided modules — these are not bundled but resolved at runtime by the server.
Her iki ortamda da `twenty-client-sdk/core` ve `twenty-client-sdk/metadata` önceden sağlanmış modüller olarak mevcuttur — bunlar paketlenmez, ancak çalışma zamanında sunucu tarafından çözülür.
## Scaffolding entities with `yarn twenty add`
## `yarn twenty add` ile varlıklar için iskelet oluşturma
Instead of creating entity files by hand, you can use the interactive scaffolder:
Varlık dosyalarını elle oluşturmak yerine etkileşimli iskelet oluşturucuyu kullanabilirsiniz:
```bash filename="Terminal"
yarn twenty add
```
This prompts you to pick an entity type and walks you through the required fields. It generates a ready-to-use file with a stable `universalIdentifier` and the correct `defineEntity()` call.
Bu, bir varlık türü seçmenizi ister ve gerekli alanlar boyunca size yol gösterir. Kararlı bir `universalIdentifier` ve doğru `defineEntity()` çağrısıyla kullanıma hazır bir dosya üretir.
You can also pass the entity type directly to skip the first prompt:
İlk istemi atlamak için varlık türünü doğrudan da geçebilirsiniz:
```bash filename="Terminal"
yarn twenty add object
@@ -1290,46 +1290,46 @@ yarn twenty add logicFunction
yarn twenty add frontComponent
```
### Available entity types
### Kullanılabilir varlık türleri
| Varlık türü | Komut | Generated file |
| Varlık türü | Komut | Oluşturulan dosya |
| -------------------- | ------------------------------------ | ------------------------------------- |
| Nesne | `yarn twenty add object` | `src/objects/<name>.ts` |
| Alan | `yarn twenty add field` | `src/fields/<name>.ts` |
| Logic function | `yarn twenty add logicFunction` | `src/logic-functions/<name>.ts` |
| Front component | `yarn twenty add frontComponent` | `src/front-components/<name>.tsx` |
| Mantık işlevi | `yarn twenty add logicFunction` | `src/logic-functions/<name>.ts` |
| Ön uç bileşeni | `yarn twenty add frontComponent` | `src/front-components/<name>.tsx` |
| Rol | `yarn twenty add role` | `src/roles/<name>.ts` |
| Beceri | `yarn twenty add skill` | `src/skills/<name>.ts` |
| Temsilci | `yarn twenty add agent` | `src/agents/<name>.ts` |
| Görünüm | `yarn twenty add view` | `src/views/<name>.ts` |
| Navigation menu item | `yarn twenty add navigationMenuItem` | `src/navigation-menu-items/<name>.ts` |
| Page layout | `yarn twenty add pageLayout` | `src/page-layouts/<name>.ts` |
| Gezinme menüsü öğesi | `yarn twenty add navigationMenuItem` | `src/navigation-menu-items/<name>.ts` |
| Sayfa düzeni | `yarn twenty add pageLayout` | `src/page-layouts/<name>.ts` |
### What the scaffolder generates
### İskelet oluşturucunun ürettikleri
Each entity type has its own template. For example, `yarn twenty add object` asks for:
Her varlık türünün kendi şablonu vardır. Örneğin, `yarn twenty add object` şunları sorar:
1. **Name (singular)** — e.g., `invoice`
2. **Name (plural)** — e.g., `invoices`
3. **Label (singular)** — auto-populated from the name (e.g., `Invoice`)
4. **Label (plural)** — auto-populated (e.g., `Invoices`)
5. **Create a view and navigation item?** — if you answer yes, the scaffolder also generates a matching view and sidebar link for the new object.
1. **Ad (tekil)** — ör. `invoice`
2. **Ad (çoğul)** — ör. `invoices`
3. **Etiket (tekil)** — adından otomatik doldurulur (ör. `Invoice`)
4. **Etiket (çoğul)** — otomatik doldurulur (ör. `Invoices`)
5. **Bir görünüm ve gezinme öğesi oluşturulsun mu?** — evet derseniz, iskelet oluşturucu yeni nesne için eşleşen bir görünüm ve kenar çubuğu bağlantısı da üretir.
Other entity types have simpler prompts — most only ask for a name.
Diğer varlık türlerinin istemleri daha basittir — çoğu yalnızca bir ad sorar.
The `field` entity type is more detailed: it asks for the field name, label, type (from a list of all available field types like `TEXT`, `NUMBER`, `SELECT`, `RELATION`, etc.), and the target object's `universalIdentifier`.
`field` varlık türü daha ayrıntılıdır: alan adını, etiketi, türü (`TEXT`, `NUMBER`, `SELECT`, `RELATION` vb. gibi mevcut tüm alan türlerinin listesinden) ve hedef nesnenin `universalIdentifier` değerini sorar.
### Custom output path
### Özel çıktı yolu
Use the `--path` flag to place the generated file in a custom location:
`--path` bayrağını kullanarak oluşturulan dosyayı özel bir konuma yerleştirin:
```bash filename="Terminal"
yarn twenty add logicFunction --path src/custom-folder
```
## Typed API clients (twenty-client-sdk)
## Tipli API istemcileri (twenty-client-sdk)
The `twenty-client-sdk` package provides two typed GraphQL clients for interacting with the Twenty API from your logic functions and front components.
`twenty-client-sdk` paketi, mantık fonksiyonlarınızdan ve ön uç bileşenlerinizden Twenty API ile etkileşim kurmak için tip tanımlı iki GraphQL istemcisi sağlar.
| İstemci | İçe Aktar | Uç nokta | Oluşturuldu mu? |
| ------------------- | ---------------------------- | ------------------------------------------------------------- | --------------------------------------- |
@@ -1337,9 +1337,9 @@ The `twenty-client-sdk` package provides two typed GraphQL clients for interacti
| `MetadataApiClient` | `twenty-client-sdk/metadata` | `/metadata` — çalışma alanı yapılandırması, dosya yüklemeleri | Hayır, önceden hazırlanmış olarak gelir |
<AccordionGroup>
<Accordion title="CoreApiClient" description="Query and mutate workspace data (records, objects)">
<Accordion title="CoreApiClient" description="Çalışma alanı verilerini sorgulayın ve değiştirin (kayıtlar, nesneler)">
`CoreApiClient`, çalışma alanı verilerini sorgulamak ve değiştirmek için ana istemcidir. It is **generated from your workspace schema** during `yarn twenty dev` or `yarn twenty build`, so it is fully typed to match your objects and fields.
`CoreApiClient`, çalışma alanı verilerini sorgulamak ve değiştirmek için ana istemcidir. `yarn twenty dev` veya `yarn twenty build` sırasında **çalışma alanı şemanızdan oluşturulur**, bu nedenle nesnelerinize ve alanlarınıza uyacak şekilde tamamen tiplenmiştir.
```ts
import { CoreApiClient } from 'twenty-client-sdk/core';
@@ -1379,12 +1379,12 @@ const { createCompany } = await client.mutation({
İstemci bir seçim kümesi sözdizimi kullanır: Bir alanı dahil etmek için `true` geçin, bağımsız değişkenler için `__args` kullanın ve ilişkiler için nesneleri iç içe yerleştirin. Çalışma alanı şemanıza göre tam otomatik tamamlama ve tip denetimi elde edersiniz.
<Note>
**CoreApiClient is generated at dev/build time.** If you use it without running `yarn twenty dev` or `yarn twenty build` first, it throws an error. The generation happens automatically — the CLI introspects your workspace's GraphQL schema and generates a typed client using `@genql/cli`.
**CoreApiClient geliştirme/derleme zamanında oluşturulur.** Bunu önce `yarn twenty dev` veya `yarn twenty build` çalıştırmadan kullanırsanız, bir hata verir. Oluşturma otomatik olarak gerçekleşir — CLI, çalışma alanınızın GraphQL şemasını inceler ve `@genql/cli` kullanarak tiplenmiş bir istemci üretir.
</Note>
#### Tür açıklamaları için CoreSchema'yı kullanma
`CoreSchema` provides TypeScript types matching your workspace objects — useful for typing component state or function parameters:
`CoreSchema`, çalışma alanı nesnelerinize uyan TypeScript türleri sağlar — bileşen durumunu veya işlev parametrelerini tiplemek için kullanışlıdır:
```ts
import { CoreApiClient, CoreSchema } from 'twenty-client-sdk/core';
@@ -1406,7 +1406,7 @@ setCompany(result.company);
```
</Accordion>
<Accordion title="MetadataApiClient" description="Workspace config, applications, and file uploads">
<Accordion title="MetadataApiClient" description="Çalışma alanı yapılandırması, uygulamalar ve dosya yüklemeleri">
`MetadataApiClient`, SDK ile birlikte önceden hazırlanmış olarak gelir (oluşturma gerektirmez). Çalışma alanı yapılandırması, uygulamalar ve dosya yüklemeleri için `/metadata` uç noktasını sorgular.
@@ -1458,12 +1458,12 @@ console.log(uploadedFile);
// { id: '...', path: '...', size: 12345, createdAt: '...', url: 'https://...' }
```
| Parametre | Tür | Açıklama |
| ---------------------------------- | -------- | ------------------------------------------------------------- |
| `fileBuffer` | `Buffer` | Dosyanın ham içeriği |
| `filename` | `string` | Dosyanın adı (depolama ve görüntüleme için kullanılır) |
| `contentType` | `string` | MIME type (defaults to `application/octet-stream` if omitted) |
| `fieldMetadataUniversalIdentifier` | `string` | Nesnenizdeki dosya türü alanının `universalIdentifier` değeri |
| Parametre | Tür | Açıklama |
| ---------------------------------- | -------- | --------------------------------------------------------------------------------- |
| `fileBuffer` | `Buffer` | Dosyanın ham içeriği |
| `filename` | `string` | Dosyanın adı (depolama ve görüntüleme için kullanılır) |
| `contentType` | `string` | MIME türü (belirtilmezse varsayılan olarak `application/octet-stream` kullanılır) |
| `fieldMetadataUniversalIdentifier` | `string` | Nesnenizdeki dosya türü alanının `universalIdentifier` değeri |
Önemli noktalar:
* Alan için `universalIdentifier` kullanır (çalışma alanına özgü kimliği değil), böylece yükleme kodunuz uygulamanızın yüklü olduğu herhangi bir çalışma alanında çalışır.
@@ -1476,24 +1476,24 @@ console.log(uploadedFile);
Kodunuz Twenty üzerinde çalıştığında (mantık işlevleri veya ön uç bileşenleri), platform kimlik bilgilerini ortam değişkenleri olarak enjekte eder:
* `TWENTY_API_URL` — Twenty API'nin temel URL'si
* `TWENTY_APP_ACCESS_TOKEN` — Short-lived key scoped to your application's default function role
* `TWENTY_APP_ACCESS_TOKEN` — Uygulamanızın varsayılan fonksiyon rolü kapsamında kısa ömürlü anahtar
Bunları istemcilere iletmeniz gerekmez — otomatik olarak `process.env`'den okurlar. API anahtarının izinleri, `application-config.ts` içinde `defaultRoleUniversalIdentifier` ile referans verilen role göre belirlenir.
</Note>
## Testing your app
## Uygulamanızı test etme
The SDK provides programmatic APIs that let you build, deploy, install, and uninstall your app from test code. Combined with [Vitest](https://vitest.dev/) and the typed API clients, you can write integration tests that verify your app works end-to-end against a real Twenty server.
SDK, test kodundan uygulamanızı derlemenize, dağıtmanıza, yüklemenize ve kaldırmanıza olanak tanıyan programatik API'ler sağlar. Tiplenmiş API istemcileriyle birlikte [Vitest](https://vitest.dev/) kullanarak, uygulamanızın gerçek bir Twenty sunucusunda uçtan uca çalıştığını doğrulayan entegrasyon testleri yazabilirsiniz.
### Kurulum
The scaffolded app already includes Vitest. If you set it up manually, install the dependencies:
İskelet aracıyla oluşturulan uygulama zaten Vitest'i içerir. Manuel kurulum yaparsanız, bağımlılıkları yükleyin:
```bash filename="Terminal"
yarn add -D vitest vite-tsconfig-paths
```
Create a `vitest.config.ts` at the root of your app:
Uygulamanızın kök dizininde bir `vitest.config.ts` oluşturun:
```ts vitest.config.ts
import tsconfigPaths from 'vite-tsconfig-paths';
@@ -1519,7 +1519,7 @@ export default defineConfig({
});
```
Create a setup file that verifies the server is reachable before tests run:
Testler çalışmadan önce sunucuya erişilebildiğini doğrulayan bir kurulum dosyası oluşturun:
```ts src/__tests__/setup-test.ts
import * as fs from 'fs';
@@ -1559,22 +1559,22 @@ beforeAll(async () => {
});
```
### Programmatic SDK APIs
### Programatik SDK API'leri
The `twenty-sdk/cli` subpath exports functions you can call directly from test code:
`twenty-sdk/cli` alt yolu, test kodundan doğrudan çağırabileceğiniz fonksiyonları dışa aktarır:
| Fonksiyon | Açıklama |
| -------------- | ------------------------------------------- |
| `appBuild` | Build the app and optionally pack a tarball |
| `appDeploy` | Upload a tarball to the server |
| `appInstall` | Install the app on the active workspace |
| `appUninstall` | Uninstall the app from the active workspace |
| Fonksiyon | Açıklama |
| -------------- | ----------------------------------------------------------------- |
| `appBuild` | Uygulamayı derleyin ve isteğe bağlı olarak bir tarball paketleyin |
| `appDeploy` | Bir tarball'ı sunucuya yükleyin |
| `appInstall` | Uygulamayı etkin çalışma alanına yükleyin |
| `appUninstall` | Uygulamayı etkin çalışma alanından kaldırın |
Each function returns a result object with `success: boolean` and either `data` or `error`.
Her fonksiyon, `success: boolean` ile birlikte `data` veya `error` içeren bir sonuç nesnesi döndürür.
### Writing an integration test
### Bir entegrasyon testi yazma
Here is a full example that builds, deploys, and installs the app, then verifies it appears in the workspace:
İşte uygulamayı derleyen, dağıtan ve yükleyen; ardından çalışma alanında göründüğünü doğrulayan tam bir örnek:
```ts src/__tests__/app-install.integration-test.ts
import { APPLICATION_UNIVERSAL_IDENTIFIER } from 'src/application-config';
@@ -1637,37 +1637,37 @@ describe('App installation', () => {
});
```
### Running tests
### Testleri çalıştırma
Make sure your local Twenty server is running, then:
Yerel Twenty sunucunuzun çalıştığından emin olun, ardından:
```bash filename="Terminal"
yarn test
```
Or in watch mode during development:
Veya geliştirme sırasında izleme modunda:
```bash filename="Terminal"
yarn test:watch
```
### Type checking
### Tip denetimi
You can also run type checking on your app without running tests:
Ayrıca testleri çalıştırmadan uygulamanızda tip denetimi çalıştırabilirsiniz:
```bash filename="Terminal"
yarn twenty typecheck
```
This runs `tsc --noEmit` and reports any type errors.
Bu, `tsc --noEmit` komutunu çalıştırır ve tüm tip hatalarını raporlar.
## CLI başvurusu
Beyond `dev`, `build`, `add`, and `typecheck`, the CLI provides commands for executing functions, viewing logs, and managing app installations.
`dev`, `build`, `add` ve `typecheck` dışında CLI, fonksiyonları çalıştırma, günlükleri görüntüleme ve uygulama kurulumlarını yönetme komutları sağlar.
### Executing functions (`yarn twenty exec`)
### Fonksiyonları çalıştırma (`yarn twenty exec`)
Run a logic function manually without triggering it via HTTP, cron, or database event:
Bir mantık fonksiyonunu HTTP, cron veya veritabanı olayıyla tetiklemeden manuel olarak çalıştırın:
```bash filename="Terminal"
# Execute by function name
@@ -1684,9 +1684,9 @@ yarn twenty exec --preInstall
yarn twenty exec --postInstall
```
### Viewing function logs (`yarn twenty logs`)
### Fonksiyon günlüklerini görüntüleme (`yarn twenty logs`)
Stream execution logs for your app's logic functions:
Uygulamanızın mantık fonksiyonlarının yürütme günlüklerini akış olarak alın:
```bash filename="Terminal"
# Stream all function logs
@@ -1700,12 +1700,12 @@ yarn twenty logs -u e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf
```
<Note>
This is different from `yarn twenty server logs`, which shows the Docker container logs. `yarn twenty logs` shows your app's function execution logs from the Twenty server.
Bu, Docker konteyner günlüklerini gösteren `yarn twenty server logs` komutundan farklıdır. `yarn twenty logs`, uygulamanızın fonksiyon yürütme günlüklerini Twenty sunucusundan gösterir.
</Note>
### Uninstalling an app (`yarn twenty uninstall`)
### Bir uygulamayı kaldırma (`yarn twenty uninstall`)
Remove your app from the active workspace:
Uygulamanızı etkin çalışma alanından kaldırın:
```bash filename="Terminal"
yarn twenty uninstall
@@ -4,142 +4,142 @@ description: İlk Twenty uygulamanızı dakikalar içinde oluşturun.
---
<Warning>
Apps are currently in alpha. The feature works but is still evolving.
Uygulamalar şu anda alfa aşamasında. Özellik işlevsel ancak hâlâ gelişmekte.
</Warning>
Uygulamalar, Twenty'yi özel nesneler, alanlar, mantık işlevleri, Yapay Zeka yetenekleri ve UI bileşenleriyle genişletmenizi sağlar — tümü kod olarak yönetilir.
## Ön Gereksinimler
Before you begin, make sure the following is installed on your machine:
Başlamadan önce, makinenizde aşağıdakilerin kurulu olduğundan emin olun:
* **Node.js 24+** — [Download here](https://nodejs.org/)
* **Yarn 4** — Comes with Node.js via Corepack. Enable it by running `corepack enable`
* **Docker** — [Download here](https://www.docker.com/products/docker-desktop/). Required to run a local Twenty instance. Not needed if you already have a Twenty server running.
* **Node.js 24+** — [Buradan indirin](https://nodejs.org/)
* **Yarn 4** — Corepack aracılığıyla Node.js ile birlikte gelir. `corepack enable` komutunu çalıştırarak etkinleştirin
* **Docker** — [Buradan indirin](https://www.docker.com/products/docker-desktop/). Yerel bir Twenty örneğini çalıştırmak için gereklidir. Zaten çalışan bir Twenty sunucunuz varsa gerekmez.
## Step 1: Scaffold your app
## Adım 1: Uygulamanızın iskeletini oluşturun
Open a terminal and run:
Bir terminal açın ve şunu çalıştırın:
```bash filename="Terminal"
npx create-twenty-app@latest my-twenty-app
```
You will be prompted to enter a name and a description for your app. Press **Enter** to accept the defaults.
Uygulamanız için bir ad ve açıklama girmeniz istenecektir. Varsayılanları kabul etmek için **Enter** tuşuna basın.
This creates a new folder called `my-twenty-app` with everything you need.
Bu, `my-twenty-app` adlı, ihtiyacınız olan her şeyi içeren yeni bir klasör oluşturur.
<Note>
The scaffolder supports these flags:
İskelet oluşturucu şu bayrakları destekler:
* `--minimal` — scaffold only the essential files, no examples (default)
* `--exhaustive` — scaffold all example entities
* `--name <name>` — set the app name (skips the prompt)
* `--display-name <displayName>` — set the display name (skips the prompt)
* `--description <description>` — set the description (skips the prompt)
* `--skip-local-instance` — skip the local server setup prompt
* `--minimal` — yalnızca temel dosyaların iskeletini oluşturur, örnek yok (varsayılan)
* `--exhaustive` — tüm örnek varlıkların iskeletini oluşturur
* `--name <name>` — uygulama adını ayarlar (istemi atlar)
* `--display-name <displayName>` — görünen adı ayarlar (istemi atlar)
* `--description <description>` — açıklamayı ayarlar (istemi atlar)
* `--skip-local-instance` — yerel sunucu kurulum istemini atlar
</Note>
## Step 2: Set up a local Twenty instance
## Adım 2: Yerel bir Twenty örneği kurun
The scaffolder will ask:
İskelet oluşturucu şunu soracaktır:
> **Would you like to set up a local Twenty instance?**
> **Yerel bir Twenty örneği kurmak ister misiniz?**
* **Type `yes`** (recommended) — This pulls the `twenty-app-dev` Docker image and starts a local Twenty server on port `2020`. Make sure Docker is running before you continue.
* **Type `no`** — Choose this if you already have a Twenty server running locally.
* **`yes` yazın** (önerilir) — Bu, `twenty-app-dev` Docker imajını çeker ve `2020` portunda yerel bir Twenty sunucusu başlatır. Devam etmeden önce Docker'ın çalıştığından emin olun.
* **`no` yazın** — Yerelde zaten çalışan bir Twenty sunucunuz varsa bunu seçin.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/start-instance.png" alt="Should start local instance?" />
<img src="/images/docs/developers/extends/apps/start-instance.png" alt="Yerel örnek başlatılsın mı?" />
</div>
## Step 3: Sign in to your workspace
## Adım 3: Çalışma alanınıza giriş yapın
Next, a browser window will open with the Twenty login page. Sign in with the pre-seeded demo account:
Ardından, Twenty oturum açma sayfasıyla bir tarayıcı penceresi açılacaktır. Önceden eklenmiş demo hesabıyla oturum açın:
* **Email:** `tim@apple.dev`
* **Password:** `tim@apple.dev`
* **E-posta:** `tim@apple.dev`
* **Parola:** `tim@apple.dev`
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/login.png" alt="Twenty login screen" />
<img src="/images/docs/developers/extends/apps/login.png" alt="Twenty oturum açma ekranı" />
</div>
## Step 4: Authorize the app
## Adım 4: Uygulamayı yetkilendirin
After you sign in, you will see an authorization screen. This lets your app interact with your workspace.
Oturum açtıktan sonra bir yetkilendirme ekranı göreceksiniz. Bu, uygulamanızın çalışma alanınızla etkileşim kurmasını sağlar.
Click **Authorize** to continue.
Devam etmek için **Authorize**'a tıklayın.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/authorize.png" alt="Twenty CLI authorization screen" />
<img src="/images/docs/developers/extends/apps/authorize.png" alt="Twenty CLI yetkilendirme ekranı" />
</div>
Once authorized, your terminal will confirm that everything is set up.
Yetkilendirildikten sonra terminaliniz her şeyin kurulduğunu onaylayacaktır.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/scaffolded.png" alt="App scaffolded successfully" />
<img src="/images/docs/developers/extends/apps/scaffolded.png" alt="Uygulama iskeleti başarıyla oluşturuldu" />
</div>
## Step 5: Start developing
## Adım 5: Geliştirmeye başlayın
Go into your new app folder and start the development server:
Yeni uygulama klasörünüze gidin ve geliştirme sunucusunu başlatın:
```bash filename="Terminal"
cd my-twenty-app
yarn twenty dev
```
This watches your source files, rebuilds on every change, and syncs your app to the local Twenty server automatically. You should see a live status panel in your terminal.
Bu, kaynak dosyalarınızı izler, her değişiklikte yeniden derler ve uygulamanızı yerel Twenty sunucusuyla otomatik olarak eşitler. Terminalinizde canlı bir durum paneli görmelisiniz.
For more detailed output (build logs, sync requests, error traces), use the `--verbose` flag:
Daha ayrıntılı çıktı (derleme günlükleri, eşitleme istekleri, hata izleri) için `--verbose` bayrağını kullanın:
```bash filename="Terminal"
yarn twenty dev --verbose
```
<Warning>
Dev mode is only available on Twenty instances running in development (`NODE_ENV=development`). Production instances reject dev sync requests. Use `yarn twenty deploy` to deploy to production servers — see [Publishing Apps](/l/tr/developers/extend/apps/publishing) for details.
Geliştirme modu yalnızca geliştirme ortamında (`NODE_ENV=development`) çalışan Twenty örneklerinde kullanılabilir. Üretim örnekleri geliştirme eşitleme isteklerini reddeder. Üretim sunucularına dağıtmak için `yarn twenty deploy` komutunu kullanın — ayrıntılar için [Uygulamaları Yayınlama](/l/tr/developers/extend/apps/publishing) bölümüne bakın.
</Warning>
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/dev.jpg" alt="Dev mode terminal output" />
<img src="/images/docs/developers/extends/apps/dev.jpg" alt="Geliştirme modu terminal çıktısı" />
</div>
## Step 6: See your app in Twenty
## Adım 6: Uygulamanızı Twenty'de görün
Open [http://localhost:2020/settings/applications#developer](http://localhost:2020/settings/applications#developer) in your browser. Navigate to **Settings > Apps** and select the **Developer** tab. You should see your app listed under **Your Apps**:
Tarayıcınızda [http://localhost:2020/settings/applications#developer](http://localhost:2020/settings/applications#developer) adresini açın. **Settings > Apps** bölümüne gidin ve **Developer** sekmesini seçin. **Your Apps** altında uygulamanızın listelendiğini görmelisiniz:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-1.png" alt="Your Apps list showing My twenty app" />
<img src="/images/docs/developers/extends/apps/app-in-ui-1.png" alt="Your Apps listesinde My twenty app gösteriliyor" />
</div>
Click on **My twenty app** to open its **application registration**. A registration is a server-level record that describes your app — its name, unique identifier, OAuth credentials, and source (local, npm, or tarball). It lives on the server, not inside any specific workspace. When you install an app into a workspace, Twenty creates a workspace-scoped **application** that points back to this registration. One registration can be installed across multiple workspaces on the same server.
**My twenty app** üzerine tıklayarak **uygulama kaydını** açın. Kayıt, uygulamanızı tanımlayan sunucu düzeyinde bir kayıttır — adını, benzersiz tanımlayıcısını, OAuth kimlik bilgilerini ve kaynağını (yerel, npm veya tarball). Belirli bir çalışma alanının içinde değil, sunucuda bulunur. Bir uygulamayı bir çalışma alanına kurduğunuzda, Twenty bu kayda işaret eden, çalışma alanı kapsamında bir **uygulama** oluşturur. Tek bir kayıt, aynı sunucudaki birden çok çalışma alanına kurulabilir.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-2.png" alt="Application registration details" />
<img src="/images/docs/developers/extends/apps/app-in-ui-2.png" alt="Uygulama kaydı ayrıntıları" />
</div>
Click **View installed app** to see the installed app. The **About** tab shows the current version and management options:
Yüklü uygulamayı görmek için **View installed app**'e tıklayın. **About** sekmesi, geçerli sürümü ve yönetim seçeneklerini gösterir:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-3.png" alt="Installed app — About tab" />
<img src="/images/docs/developers/extends/apps/app-in-ui-3.png" alt="Yüklü uygulama — About sekmesi" />
</div>
Switch to the **Content** tab to see everything your app provides — objects, fields, logic functions, and agents:
Uygulamanızın sağladığı her şeyi — nesneler, alanlar, mantık işlevleri ve ajanlar — görmek için **Content** sekmesine geçin:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-4.png" alt="Installed app — Content tab" />
<img src="/images/docs/developers/extends/apps/app-in-ui-4.png" alt="Yüklü uygulama — Content sekmesi" />
</div>
You are all set! Edit any file in `src/` and the changes will be picked up automatically.
Her şey hazır! `src/` içindeki herhangi bir dosyayı düzenleyin; değişiklikler otomatik olarak alınacaktır.
Head over to [Building Apps](/l/tr/developers/extend/apps/building) for a detailed guide on creating objects, logic functions, front components, skills, and more.
Nesneler, mantık işlevleri, ön bileşenler, beceriler ve daha fazlasını oluşturma hakkında ayrıntılı bir kılavuz için [Uygulama Oluşturma](/l/tr/developers/extend/apps/building) bölümüne göz atın.
---
## Project structure
## Proje yapısı
The scaffolder generates the following file structure (shown with `--exhaustive` mode, which includes examples for every entity type):
İskelet oluşturucu aşağıdaki dosya yapısını üretir (`--exhaustive` modunda gösterilmiştir; her varlık türü için örnekler içerir):
```text filename="my-twenty-app/"
my-twenty-app/
@@ -190,30 +190,30 @@ my-twenty-app/
└── example-agent.ts # Example AI agent definition
```
By default (`--minimal`), only the core files are created: `application-config.ts`, `roles/default-role.ts`, `logic-functions/pre-install.ts`, and `logic-functions/post-install.ts`. Use `--exhaustive` to include all the example files shown above.
Varsayılan olarak (`--minimal`), yalnızca çekirdek dosyalar oluşturulur: `application-config.ts`, `roles/default-role.ts`, `logic-functions/pre-install.ts` ve `logic-functions/post-install.ts`. Yukarıda gösterilen tüm örnek dosyaları dahil etmek için `--exhaustive` kullanın.
### Key files
### Temel dosyalar
| File / Folder | Amaç |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `package.json` | Declares your app name, version, and dependencies. Includes a `twenty` script so you can run `yarn twenty help` to see all commands. |
| `src/application-config.ts` | **Required.** The main configuration file for your app. |
| `src/roles/` | Defines roles that control what your logic functions can access. |
| `src/logic-functions/` | Server-side functions triggered by routes, cron schedules, or database events. |
| `src/front-components/` | React components that render inside Twenty's UI. |
| `src/objects/` | Custom object definitions to extend your data model. |
| `src/fields/` | Custom fields added to existing objects. |
| `src/views/` | Saved view configurations. |
| `src/navigation-menu-items/` | Custom links in the sidebar navigation. |
| `src/skills/` | Twenty'nin yapay zeka ajanlarının yeteneklerini genişleten beceriler. |
| `src/agents/` | AI agents with custom prompts. |
| `src/page-layouts/` | Custom page layouts for record views. |
| `src/__tests__/` | Integration tests (setup + example test). |
| `public/` | Static assets (images, fonts) served with your app. |
| Dosya / Klasör | Amaç |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `package.json` | Uygulamanızın adını, sürümünü ve bağımlılıklarını bildirir. Tüm komutları görmek için `yarn twenty help` çalıştırabilmeniz amacıyla bir `twenty` betiği içerir. |
| `src/application-config.ts` | **Gerekli.** Uygulamanızın ana yapılandırma dosyası. |
| `src/roles/` | Mantık işlevlerinizin neye erişebileceğini kontrol eden rolleri tanımlar. |
| `src/logic-functions/` | Rotalar, cron zamanlamaları veya veritabanı olayları tarafından tetiklenen sunucu tarafı işlevler. |
| `src/front-components/` | Twenty'nin UI'si içinde görüntülenen React bileşenleri. |
| `src/objects/` | Veri modelinizi genişletmek için özel nesne tanımları. |
| `src/fields/` | Mevcut nesnelere eklenen özel alanlar. |
| `src/views/` | Kaydedilmiş görünüm yapılandırmaları. |
| `src/navigation-menu-items/` | Kenar çubuğu gezintisinde özel bağlantılar. |
| `src/skills/` | Twenty'nin yapay zeka ajanlarının yeteneklerini genişleten beceriler. |
| `src/agents/` | Özel istemlere sahip yapay zekâ ajanları. |
| `src/page-layouts/` | Kayıt görünümleri için özel sayfa düzenleri. |
| `src/__tests__/` | Entegrasyon testleri (kurulum + örnek test). |
| `public/` | Uygulamanızla birlikte sunulan statik varlıklar (görüntüler, yazı tipleri). |
## Managing remotes
## Uzakları yönetme
A **remote** is a Twenty server that your app connects to. During setup, the scaffolder creates one for you automatically. You can add more remotes or switch between them at any time.
Bir **uzak**, uygulamanızın bağlandığı Twenty sunucusudur. Kurulum sırasında iskelet oluşturucu sizin için otomatik olarak bir tane oluşturur. Dilediğiniz zaman daha fazla uzak ekleyebilir veya aralarında geçiş yapabilirsiniz.
```bash filename="Terminal"
# Add a new remote (opens a browser for OAuth login)
@@ -232,11 +232,11 @@ yarn twenty remote list
yarn twenty remote switch <name>
```
Your credentials are stored in `~/.twenty/config.json`.
Kimlik bilgileriniz `~/.twenty/config.json` içinde saklanır.
## Local development server (`yarn twenty server`)
## Yerel geliştirme sunucusu (`yarn twenty server`)
The CLI can manage a local Twenty server running in Docker. This is the same server started automatically when you scaffold an app with `create-twenty-app`, but you can also manage it manually.
CLI, Docker'da çalışan yerel bir Twenty sunucusunu yönetebilir. Bu, `create-twenty-app` ile bir uygulamanın iskeletini oluşturduğunuzda otomatik olarak başlatılan sunucunun aynısıdır; ancak bunu el ile de yönetebilirsiniz.
### Sunucuyu Başlatma
@@ -244,85 +244,85 @@ The CLI can manage a local Twenty server running in Docker. This is the same ser
yarn twenty server start
```
This pulls the `twentycrm/twenty-app-dev:latest` Docker image (if not already present), creates a container named `twenty-app-dev`, and starts it on port **2020**. The CLI waits until the server passes its health check before returning.
Bu, `twentycrm/twenty-app-dev:latest` Docker imajını (zaten mevcut değilse) çeker, `twenty-app-dev` adlı bir konteyner oluşturur ve **2020** portunda başlatır. CLI, dönmeden önce sunucunun sağlık kontrolünü geçmesini bekler.
Two Docker volumes are created to persist data between restarts:
Yeniden başlatmalar arasında verileri kalıcı kılmak için iki Docker birimi oluşturulur:
* `twenty-app-dev-data` — PostgreSQL database
* `twenty-app-dev-storage` — file storage
* `twenty-app-dev-data` — PostgreSQL veritabanı
* `twenty-app-dev-storage` — dosya depolama
If port 2020 is already in use, you can start on a different port:
2020 portu zaten kullanımda ise farklı bir portta başlatabilirsiniz:
```bash filename="Terminal"
yarn twenty server start --port 3030
```
The CLI automatically configures the container's internal `NODE_PORT` and `SERVER_URL` to match the chosen port, so logic functions, OAuth, and all other internal networking work correctly.
CLI, seçilen porta uyacak şekilde konteynerin dahili `NODE_PORT` ve `SERVER_URL` ayarlarını otomatik olarak yapılandırır; böylece mantık işlevleri, OAuth ve diğer tüm dahili ağ işlemleri doğru şekilde çalışır.
Once started, the server is automatically registered as the `local` remote in your CLI config.
Başlatıldığında, sunucu CLI yapılandırmanızda `local` uzak olarak otomatik olarak kaydedilir.
### Checking server status
### Sunucu durumunu kontrol etme
```bash filename="Terminal"
yarn twenty server status
```
Displays whether the server is running, its URL, and the default login credentials (`tim@apple.dev` / `tim@apple.dev`).
Sunucunun çalışıp çalışmadığını, URL'sini ve varsayılan oturum açma kimlik bilgilerini (`tim@apple.dev` / `tim@apple.dev`) gösterir.
### Viewing server logs
### Sunucu günlüklerini görüntüleme
```bash filename="Terminal"
yarn twenty server logs
```
Streams the container logs. Use `--lines` to control how many recent lines to show:
Konteyner günlüklerini akış olarak iletir. Kaç satırın gösterileceğini denetlemek için `--lines` kullanın:
```bash filename="Terminal"
yarn twenty server logs --lines 100
```
### Stopping the server
### Sunucuyu durdurma
```bash filename="Terminal"
yarn twenty server stop
```
Stops the container. Your data is preserved in the Docker volumes — the next `start` picks up where you left off.
Konteyneri durdurur. Verileriniz Docker birimlerinde korunur — bir sonraki `start`, kaldığınız yerden devam eder.
### Resetting the server
### Sunucuyu sıfırlama
```bash filename="Terminal"
yarn twenty server reset
```
Removes the container **and** deletes both Docker volumes, wiping all data. The next `start` creates a fresh instance.
Konteyneri kaldırır ve her iki Docker birimini de silerek tüm verileri temizler. Sonraki `start`, yeni bir örnek oluşturur.
<Note>
The server requires **Docker** to be running. If you see a "Docker not running" error, make sure Docker Desktop (or the Docker daemon) is started.
Sunucunun çalışması için **Docker**'ın çalışıyor olması gerekir. "Docker not running" hatası görürseniz Docker Desktop'ın (veya Docker daemon'ının) başlatıldığından emin olun.
</Note>
### Command reference
### Komut başvurusu
| Komut | Açıklama |
| -------------------------------------- | ---------------------------------------------- |
| `yarn twenty server start` | Start the local server (pulls image if needed) |
| `yarn twenty server start --port 3030` | Start on a custom port |
| `yarn twenty server stop` | Stop the server (preserves data) |
| `yarn twenty server status` | Show server status, URL, and credentials |
| `yarn twenty server logs` | Stream server logs |
| `yarn twenty server logs --lines 100` | Show the last 100 log lines |
| `yarn twenty server reset` | Delete all data and start fresh |
| Komut | Açıklama |
| -------------------------------------- | ------------------------------------------------------ |
| `yarn twenty server start` | Yerel sunucuyu başlatır (gerekirse imajı çeker) |
| `yarn twenty server start --port 3030` | Özel bir portta başlatır |
| `yarn twenty server stop` | Sunucuyu durdurur (verileri korur) |
| `yarn twenty server status` | Sunucu durumunu, URL'yi ve kimlik bilgilerini gösterir |
| `yarn twenty server logs` | Sunucu günlüklerini akış olarak iletir |
| `yarn twenty server logs --lines 100` | Son 100 günlük satırını gösterir |
| `yarn twenty server reset` | Tüm verileri siler ve sıfırdan başlatır |
## CI with GitHub Actions
## GitHub Actions ile CI
The scaffolder generates a ready-to-use GitHub Actions workflow at `.github/workflows/ci.yml`. It runs your integration tests automatically on every push to `main` and on pull requests.
İskelet oluşturucu, `.github/workflows/ci.yml` konumunda kullanıma hazır bir GitHub Actions iş akışı üretir. Entegrasyon testlerinizi `main` dalına yapılan her itmede ve çekme isteklerinde otomatik olarak çalıştırır.
The workflow:
İş akışı:
1. Checks out your code
2. Spins up a temporary Twenty server using the `twentyhq/twenty/.github/actions/spawn-twenty-docker-image` action
3. Installs dependencies with `yarn install --immutable`
4. Runs `yarn test` with `TWENTY_API_URL` and `TWENTY_API_KEY` injected from the action outputs
1. Kodunuzu depodan çıkarır
2. `twentyhq/twenty/.github/actions/spawn-twenty-docker-image` eylemini kullanarak geçici bir Twenty sunucusu başlatır
3. `yarn install --immutable` ile bağımlılıkları kurar
4. Eylem çıktılarından enjekte edilen `TWENTY_API_URL` ve `TWENTY_API_KEY` ile `yarn test` çalıştırır
```yaml .github/workflows/ci.yml
name: CI
@@ -369,21 +369,21 @@ jobs:
TWENTY_API_KEY: ${{ steps.twenty.outputs.access-token }}
```
You don't need to configure any secrets — the `spawn-twenty-docker-image` action starts an ephemeral Twenty server directly in the runner and outputs the connection details. The `GITHUB_TOKEN` secret is provided automatically by GitHub.
Herhangi bir gizli değişken yapılandırmanız gerekmez — `spawn-twenty-docker-image` eylemi, koşucu içinde doğrudan geçici bir Twenty sunucusu başlatır ve bağlantı ayrıntılarını çıktı olarak verir. `GITHUB_TOKEN` gizli değişkeni GitHub tarafından otomatik olarak sağlanır.
To pin a specific Twenty version instead of `latest`, change the `TWENTY_VERSION` environment variable at the top of the workflow.
`latest` yerine belirli bir Twenty sürümünü sabitlemek için iş akışının başındaki `TWENTY_VERSION` ortam değişkenini değiştirin.
## Manuel kurulum (iskelet oluşturucu olmadan)
If you prefer to set things up yourself instead of using `create-twenty-app`, you can do it in two steps.
`create-twenty-app` kullanmak yerine her şeyi kendiniz ayarlamayı tercih ederseniz, bunu iki adımda yapabilirsiniz.
**1. Add `twenty-sdk` and `twenty-client-sdk` as dependencies:**
**1. `twenty-sdk` ve `twenty-client-sdk` paketlerini bağımlılık olarak ekleyin:**
```bash filename="Terminal"
yarn add twenty-sdk twenty-client-sdk
```
**2. Add a `twenty` script to your `package.json`:**
**2. `package.json` dosyanıza bir `twenty` betiği ekleyin:**
```json filename="package.json"
{
@@ -393,19 +393,19 @@ yarn add twenty-sdk twenty-client-sdk
}
```
You can now run `yarn twenty dev`, `yarn twenty help`, and all other commands.
Artık `yarn twenty dev`, `yarn twenty help` ve diğer tüm komutları çalıştırabilirsiniz.
<Note>
Do not install `twenty-sdk` globally. Always use it as a local project dependency so that each project can pin its own version.
`twenty-sdk`'yi global olarak kurmayın. Her projenin kendi sürümünü sabitleyebilmesi için onu her zaman yerel bir proje bağımlılığı olarak kullanın.
</Note>
## Sorun Giderme
If you run into issues:
Sorunlarla karşılaşırsanız:
* Make sure **Docker is running** before starting the scaffolder with a local instance.
* Make sure you are using **Node.js 24+** (`node -v` to check).
* Make sure **Corepack is enabled** (`corepack enable`) so Yarn 4 is available.
* Try deleting `node_modules` and running `yarn install` again if dependencies seem broken.
* Yerel bir örnekle scaffolder'ı başlatmadan önce **Docker'ın çalıştığından** emin olun.
* **Node.js 24+** kullandığınızdan emin olun (kontrol etmek için `node -v`).
* Yarn 4'ün kullanılabilir olması için **Corepack'in etkinleştirildiğinden** emin olun (`corepack enable`).
* Bağımlılıklar bozuk görünüyorsa `node_modules` dizinini silip `yarn install` komutunu yeniden çalıştırmayı deneyin.
Still stuck? Ask for help on the [Twenty Discord](https://discord.com/channels/1130383047699738754/1130386664812982322).
Hâlâ takıldınız mı? Yardım için [Twenty Discord](https://discord.com/channels/1130383047699738754/1130386664812982322) üzerinden yardım isteyin.
@@ -4,24 +4,24 @@ description: 使用 Twenty SDK 定义对象、逻辑函数、前端组件等。
---
<Warning>
Apps are currently in alpha. The feature works but is still evolving.
应用目前处于 Alpha 阶段。 该功能可用,但仍在演进中。
</Warning>
The `twenty-sdk` package provides typed building blocks to create your app. This page covers every entity type and API client available in the SDK.
`twenty-sdk` 包提供类型化的构建块,用于创建你的应用。 本页涵盖 SDK 中可用的所有实体类型和 API 客户端。
## DefineEntity functions
## DefineEntity 函数
The SDK provides functions to define your app entities. You must use `export default defineEntity({...})` for the SDK to detect your entities. 这些函数会在构建时校验你的配置,并提供 IDE 自动补全和类型安全。
SDK 提供用于定义你的应用实体的函数。 你必须使用 `export default defineEntity({...})`,这样 SDK 才能检测到你的实体。 这些函数会在构建时校验你的配置,并提供 IDE 自动补全和类型安全。
<Note>
**File organization is up to you.**
Entity detection is AST-based — the SDK finds `export default defineEntity(...)` calls regardless of where the file lives. Grouping files by type (e.g., `logic-functions/`, `roles/`) is just a convention, not a requirement.
**文件组织由你决定。**
实体检测基于 AST——无论文件位于何处,SDK 都能找到 `export default defineEntity(...)` 的调用。 按类型对文件分组(例如 `logic-functions/``roles/`)只是代码组织的一种约定,并非必需。
</Note>
<AccordionGroup>
<Accordion title="defineRole" description="配置角色权限和对象访问">
Roles encapsulate permissions on your workspace's objects and actions.
角色封装了对你的工作空间对象与操作的权限。
```ts restricted-company-role.ts
import {
@@ -69,12 +69,12 @@ export default defineRole({
</Accordion>
<Accordion title="defineApplication" description="配置应用元数据(必需,每个应用一个)">
Every app must have exactly one `defineApplication` call that describes:
每个应用必须且只能有一个 `defineApplication` 调用,用于描述:
* **Identity**: identifiers, display name, and description.
* **Permissions**: which role its functions and front components use.
* **(Optional) Variables**: keyvalue pairs exposed to your functions as environment variables.
* **(Optional) Pre-install / post-install functions**: logic functions that run before or after installation.
* **应用的身份**:标识符、显示名称和描述。
* **权限**:其函数和前端组件所使用的角色。
* **(可选)变量**:以环境变量形式提供给函数的键值对。
* **(可选)安装前/安装后函数**:在安装之前或之后运行的逻辑函数。
```ts src/application-config.ts
import { defineApplication } from 'twenty-sdk';
@@ -98,21 +98,21 @@ export default defineApplication({
```
备注:
* `universalIdentifier` fields are deterministic IDs you own. Generate them once and keep them stable across syncs.
* `applicationVariables` become environment variables for your functions and front components (e.g., `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
* `defaultRoleUniversalIdentifier` must reference a role defined with `defineRole()` (see above).
* Pre-install and post-install functions are detected automatically during the manifest build — you do not need to reference them in `defineApplication()`.
* `universalIdentifier` 字段是你拥有的确定性 ID。 只需生成一次,并在多次同步过程中保持稳定不变。
* `applicationVariables` 会变成你的函数和前端组件可用的环境变量(例如,`DEFAULT_RECIPIENT_NAME` 可作为 `process.env.DEFAULT_RECIPIENT_NAME` 使用)。
* `defaultRoleUniversalIdentifier` 必须引用使用 `defineRole()` 定义的角色(见上文)。
* 在构建清单时会自动检测安装前/安装后函数——无需在 `defineApplication()` 中引用它们。
#### 应用市场元数据
If you plan to [publish your app](/l/zh/developers/extend/apps/publishing), these optional fields control how it appears in the marketplace:
如果你计划[发布你的应用](/l/zh/developers/extend/apps/publishing),这些可选字段将控制你的应用在应用市场中的展示:
| 字段 | 描述 |
| ------------------ | -------------------------------------------------------------- |
| `作者` | 作者或公司名称 |
| `类别` | 用于应用市场筛选的应用类别 |
| `logoUrl` | Path to your app logo (e.g., `public/logo.png`) |
| `screenshots` | Array of screenshot paths (e.g., `public/screenshot-1.png`) |
| `logoUrl` | 应用徽标的路径(例如 `public/logo.png` |
| `screenshots` | 截图路径数组(例如 `public/screenshot-1.png` |
| `aboutDescription` | 用于“关于”选项卡的更长的 Markdown 描述。 如果省略,市场将使用该软件包在 npm 上的 `README.md`。 |
| `websiteUrl` | 你的网站链接 |
| `termsUrl` | 服务条款链接 |
@@ -121,15 +121,15 @@ If you plan to [publish your app](/l/zh/developers/extend/apps/publishing), thes
#### 角色和权限
The `defaultRoleUniversalIdentifier` in `application-config.ts` designates the default role used by your app's logic functions and front components. See `defineRole` above for details.
`application-config.ts` 中的 `defaultRoleUniversalIdentifier` 字段指定你的应用的逻辑函数和前端组件所使用的默认角色。 详见上文的 `defineRole`。
* The runtime token injected as `TWENTY_APP_ACCESS_TOKEN` is derived from this role.
* The typed client is restricted to the permissions granted to that role.
* Follow least-privilege: create a dedicated role with only the permissions your functions need.
* 作为 `TWENTY_APP_ACCESS_TOKEN` 注入的运行时令牌来源于该角色。
* 类型化客户端将受限于该角色授予的权限。
* 遵循最小权限原则:创建一个仅包含你的函数所需权限的专用角色。
##### Default function role
##### 默认函数角色
When you scaffold a new app, the CLI creates a default role file:
当你使用脚手架创建新应用时,CLI 会创建一个默认角色文件:
```ts src/roles/default-role.ts
import { defineRole, PermissionFlag } from 'twenty-sdk';
@@ -155,16 +155,16 @@ export default defineRole({
});
```
This role's `universalIdentifier` is referenced in `application-config.ts` as `defaultRoleUniversalIdentifier`:
该角色的 `universalIdentifier` 会在 `application-config.ts` 中被引用为 `defaultRoleUniversalIdentifier`
* **\*.role.ts** defines what the role can do.
* **\*.role.ts** 定义该角色可以执行的操作。
* **application-config.ts** 指向该角色,使你的函数继承其权限。
备注:
* 从脚手架生成的角色开始,然后按照最小权限原则逐步收紧权限。
* Replace `objectPermissions` and `fieldPermissions` with the objects and fields your functions actually need.
* `permissionFlags` 控制对平台级能力的访问。 Keep them minimal.
* See a working example: [`hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
* `objectPermissions` `fieldPermissions` 替换为你的函数所需的对象/字段。
* `permissionFlags` 控制对平台级能力的访问。 尽量保持最小化。
* 查看一个可运行示例:[`hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts)
</Accordion>
<Accordion title="defineObject" description="定义带字段的自定义对象">
@@ -256,7 +256,7 @@ export default defineObject({
</Note>
</Accordion>
<Accordion title="defineField — Standard fields" description="为现有对象扩展额外字段">
<Accordion title="defineField — 标准字段" description="为现有对象扩展额外字段">
使用 `defineField()` 向你不拥有的对象添加字段——例如标准的 Twenty 对象(Person、Company 等)。 或来自其他应用的对象。 与在 `defineObject()` 中的内联字段不同,独立字段需要一个 `objectUniversalIdentifier` 来指定它们要扩展的对象:
@@ -284,7 +284,7 @@ export default defineField({
* `defineField()` 是为非通过 `defineObject()` 创建的对象添加字段的唯一方式。
</Accordion>
<Accordion title="defineField — Relation fields" description="Connect objects together with bidirectional relations">
<Accordion title="defineField — 关联字段" description="使用双向关系将对象连接在一起">
关系用于将对象彼此连接。 在 Twenty 中,关系始终是双向的——你需要定义两侧,每一侧都引用另一侧。
@@ -443,7 +443,7 @@ export default defineObject({
});
```
</Accordion>
<Accordion title="defineLogicFunction" description="Define logic functions and their triggers">
<Accordion title="defineLogicFunction" description="定义逻辑函数及其触发器">
每个函数文件都使用 `defineLogicFunction()` 导出包含处理程序和可选触发器的配置。
@@ -487,15 +487,15 @@ export default defineLogicFunction({
});
```
Available trigger types:
* **httpRoute**: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
> e.g. `path: '/post-card/create'` is callable at `https://your-twenty-server.com/s/post-card/create`
可用的触发器类型:
* **httpRoute**:在 **`/s/` 端点**下通过 HTTP 路径和方法公开你的函数:
> 例如 `path: '/post-card/create'` 可在 `https://your-twenty-server.com/s/post-card/create` 调用
* **cron**:使用 CRON 表达式按计划运行你的函数。
* **databaseEvent**:在工作空间对象生命周期事件上运行。 当事件操作为 `updated` 时,可以在 `updatedFields` 数组中指定要监听的特定字段。 如果未定义或为空,任何更新都会触发该函数。
> e.g. `person.updated`, `*.created`, `company.*`
> 例如 `person.updated``*.created``company.*`
<Note>
You can also manually execute a function using the CLI:
你也可以使用 CLI 手动执行函数:
```bash filename="Terminal"
yarn twenty exec -n create-new-post-card -p '{"key": "value"}'
@@ -505,7 +505,7 @@ yarn twenty exec -n create-new-post-card -p '{"key": "value"}'
yarn twenty exec -y e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf
```
You can watch logs with:
你可以通过以下方式查看日志:
```bash filename="Terminal"
yarn twenty logs
@@ -514,9 +514,9 @@ yarn twenty logs
#### 路由触发器负载
When a route trigger invokes your logic function, it receives a `RoutePayload` object that follows the
[AWS HTTP API v2 format](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html).
Import the `RoutePayload` type from `twenty-sdk`:
当路由触发器调用你的逻辑函数时,它会接收一个遵循
[AWS HTTP API v2 格式](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html)的 `RoutePayload` 对象。
从 `twenty-sdk` 导入 `RoutePayload` 类型:
```ts
import { defineLogicFunction, type RoutePayload } from 'twenty-sdk';
@@ -531,21 +531,21 @@ const handler = async (event: RoutePayload) => {
`RoutePayload` 类型具有以下结构:
| 属性 | 类型 | 描述 | 示例 |
| ---------------------------- | ------------------------------------- | ------------------------------------------------ | -------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | HTTP 请求头(仅限 `forwardedRequestHeaders` 中列出的那些) | see section below |
| `queryStringParameters` | `Record<string, string \| undefined>` | 查询字符串参数(多个值以逗号连接) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
| `pathParameters` | `Record<string, string \| undefined>` | Path parameters extracted from the route pattern | `/users/:id`, `/users/123` -> `{ id: '123' }` |
| `body` | `object \| null` | 已解析的请求体(JSON) | `{ id: 1 }` -> `{ id: 1 }` |
| `isBase64Encoded` | `boolean` | 请求体是否为 base64 编码 | |
| `requestContext.http.method` | `string` | HTTP 方法(GET、POST、PUT、PATCH、DELETE | |
| `requestContext.http.path` | `string` | 原始请求路径 | |
| 属性 | 类型 | 描述 | 示例 |
| ---------------------------- | ------------------------------------- | --------------------------------------------- | -------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | HTTP 请求头(仅限 `forwardedRequestHeaders` 中列出的那些) | 见下文 |
| `queryStringParameters` | `Record<string, string \| undefined>` | 查询字符串参数(多个值以逗号连接) | `/users?ids=1&ids=2&ids=3&name=Alice` -> `{ ids: '1,2,3', name: 'Alice' }` |
| `pathParameters` | `Record<string, string \| undefined>` | 从路由模式中提取的路径参数 | `/users/:id``/users/123` -> `{ id: '123' }` |
| `body` | `object \| null` | 已解析的请求体(JSON) | `{ id: 1 }` -> `{ id: 1 }` |
| `isBase64Encoded` | `boolean` | 请求体是否为 base64 编码 | |
| `requestContext.http.method` | `string` | HTTP 方法(GET、POST、PUT、PATCH、DELETE | |
| `requestContext.http.path` | `string` | 原始请求路径 | |
#### forwardedRequestHeaders
出于安全原因,默认**不会**将传入请求的 HTTP 请求头传递给你的逻辑函数。
To access specific headers, list them in the `forwardedRequestHeaders` array:
如需访问特定请求头,请在 `forwardedRequestHeaders` 数组中显式列出:
```ts
export default defineLogicFunction({
@@ -561,7 +561,7 @@ export default defineLogicFunction({
});
```
In your handler, access the forwarded headers like this:
在你的处理程序中,可以这样访问被转发的请求头:
```ts
const handler = async (event: RoutePayload) => {
@@ -574,14 +574,14 @@ const handler = async (event: RoutePayload) => {
```
<Note>
请求头名称会被规范化为小写。 Access them using lowercase keys (e.g., `event.headers['content-type']`).
请求头名称会被规范化为小写。 请使用小写键访问它们(例如,`event.headers['content-type']`)。
</Note>
#### Exposing a function as a tool
#### 将函数作为工具公开
逻辑函数可以作为供 AI 智能体和工作流使用的**工具**对外提供。 When marked as a tool, a function becomes discoverable by Twenty's AI features and can be used in workflow automations.
逻辑函数可以作为供 AI 智能体和工作流使用的**工具**对外提供。 当函数被标记为工具时,Twenty AI 功能即可发现它,并可在工作流自动化中使用。
To mark a logic function as a tool, set `isTool: true`:
要将逻辑函数标记为工具,请设置 `isTool: true`
```ts src/logic-functions/enrich-company.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
@@ -617,8 +617,8 @@ export default defineLogicFunction({
关键点:
* You can combine `isTool` with triggers — a function can be both a tool (callable by AI agents) and triggered by events at the same time.
* **`toolInputSchema`** (optional): A JSON Schema object describing the parameters your function accepts. The schema is computed automatically from source code static analysis, but you can set it explicitly:
* 你可以将 `isTool` 与触发器结合使用——一个函数既可以作为工具(由 AI 代理调用),也可以同时由事件触发。
* **`toolInputSchema`**(可选):描述函数可接受参数的 JSON Schema 对象。 该模式会通过对源代码的静态分析自动推导,但你也可以显式设置:
```ts
export default defineLogicFunction({
@@ -715,11 +715,11 @@ yarn twenty exec --postInstall
</Accordion>
<Accordion title="defineFrontComponent" description="为自定义 UI 定义前端组件">
Front components are React components that render directly inside Twenty's UI. They run in an **isolated Web Worker** using Remote DOM — your code is sandboxed but renders natively in the page, not in an iframe.
前端组件是直接在 Twenty UI 内渲染的 React 组件。 它们在使用 Remote DOM 的**隔离 Web Worker**中运行——你的代码在沙盒中执行,但会原生渲染到页面中,而非在 iframe 里。
#### Basic example
#### 基础示例
The quickest way to see a front component in action is to register it as a **command**. Adding a `command` field with `isPinned: true` makes it appear as a quick-action button in the top-right corner of the page — no page layout needed:
最快体验前端组件运行方式的方法是将其注册为一个**命令**。 添加一个 `command` 字段并设置 `isPinned: true`,即可让它以快速操作按钮的形式出现在页面右上角——无需页面布局:
```tsx src/front-components/hello-world.tsx
import { defineFrontComponent } from 'twenty-sdk';
@@ -749,24 +749,24 @@ export default defineFrontComponent({
});
```
After syncing with `yarn twenty dev`, the quick action appears in the top-right corner of the page:
使用 `yarn twenty dev` 同步后,快速操作会出现在页面右上角:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/quick-action.png" alt="Quick action button in the top-right corner" />
<img src="/images/docs/developers/extends/apps/quick-action.png" alt="右上角的快速操作按钮" />
</div>
Click it to render the component inline.
点击它以内联方式渲染该组件。
{/* TODO: add screenshot of the rendered front component */}
#### Configuration fields
#### 配置字段
| 字段 | 必填 | 描述 |
| --------------------- | -- | ----------------------------------------------------------------------------------- |
| `universalIdentifier` | 是 | Stable unique ID for this component |
| `component` | 是 | A React component function |
| `name` | 否 | Display name |
| `描述` | 否 | Description of what the component does |
| `universalIdentifier` | 是 | 该组件的稳定唯一 ID |
| `component` | 是 | 一个 React 组件函数 |
| `name` | 否 | 显示名称 |
| `描述` | 否 | 组件的功能描述 |
| `isHeadless` | 否 | Set to `true` if the component has no visible UI (see below) |
| `命令` | 否 | Register the component as a command (see [command options](#command-options) below) |
@@ -4,142 +4,142 @@ description: 几分钟内创建你的第一个 Twenty 应用。
---
<Warning>
Apps are currently in alpha. The feature works but is still evolving.
应用目前处于 Alpha 阶段。 该功能可用,但仍在演进中。
</Warning>
应用可通过自定义对象、字段、逻辑函数、AI 技能和 UI 组件来扩展 Twenty——全部以代码进行管理。
## 先决条件
Before you begin, make sure the following is installed on your machine:
在开始之前,请确保你的机器已安装以下内容:
* **Node.js 24+** — [Download here](https://nodejs.org/)
* **Yarn 4** — Comes with Node.js via Corepack. Enable it by running `corepack enable`
* **Docker** — [Download here](https://www.docker.com/products/docker-desktop/). Required to run a local Twenty instance. Not needed if you already have a Twenty server running.
* **Node.js 24+** — [在此下载](https://nodejs.org/)
* **Yarn 4** — 通过 Corepack 随 Node.js 提供。 通过运行 `corepack enable` 启用它
* **Docker** — [在此下载](https://www.docker.com/products/docker-desktop/)。 运行本地 Twenty 实例所必需。 如果你已经有一个正在运行的 Twenty 服务器,则不需要。
## Step 1: Scaffold your app
## 步骤 1:为你的应用创建脚手架
Open a terminal and run:
打开终端并运行:
```bash filename="Terminal"
npx create-twenty-app@latest my-twenty-app
```
You will be prompted to enter a name and a description for your app. Press **Enter** to accept the defaults.
系统会提示你为应用输入名称和描述。 按下 **Enter** 接受默认值。
This creates a new folder called `my-twenty-app` with everything you need.
这会创建一个名为 `my-twenty-app` 的新文件夹,其中包含你所需的一切。
<Note>
The scaffolder supports these flags:
脚手架工具支持以下标志:
* `--minimal` — scaffold only the essential files, no examples (default)
* `--exhaustive` — scaffold all example entities
* `--name <name>` — set the app name (skips the prompt)
* `--display-name <displayName>` — set the display name (skips the prompt)
* `--description <description>` — set the description (skips the prompt)
* `--skip-local-instance` — skip the local server setup prompt
* `--minimal` — 仅创建必要文件,不包含示例(默认)
* `--exhaustive` — 创建所有示例实体
* `--name <name>` — 设置应用名称(跳过提示)
* `--display-name <displayName>` — 设置显示名称(跳过提示)
* `--description <description>` — 设置描述(跳过提示)
* `--skip-local-instance` — 跳过本地服务器设置提示
</Note>
## Step 2: Set up a local Twenty instance
## 步骤 2:设置本地 Twenty 实例
The scaffolder will ask:
脚手架工具会询问:
> **Would you like to set up a local Twenty instance?**
> **是否要设置本地 Twenty 实例?**
* **Type `yes`** (recommended) — This pulls the `twenty-app-dev` Docker image and starts a local Twenty server on port `2020`. Make sure Docker is running before you continue.
* **Type `no`** — Choose this if you already have a Twenty server running locally.
* **输入 `yes`**(推荐)— 这将拉取 `twenty-app-dev` Docker 镜像,并在端口 `2020` 上启动本地 Twenty 服务器。 继续之前,请确保 Docker 正在运行。
* **输入 `no`** — 如果你已经有一个在本地运行的 Twenty 服务器,请选择此项。
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/start-instance.png" alt="Should start local instance?" />
<img src="/images/docs/developers/extends/apps/start-instance.png" alt="是否启动本地实例?" />
</div>
## Step 3: Sign in to your workspace
## 步骤 3:登录你的工作区
Next, a browser window will open with the Twenty login page. Sign in with the pre-seeded demo account:
接下来,将打开一个浏览器窗口,显示 Twenty 登录页面。 使用预置的演示账户登录:
* **Email:** `tim@apple.dev`
* **Password:** `tim@apple.dev`
* **邮箱:** `tim@apple.dev`
* **密码:** `tim@apple.dev`
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/login.png" alt="Twenty login screen" />
<img src="/images/docs/developers/extends/apps/login.png" alt="Twenty 登录界面" />
</div>
## Step 4: Authorize the app
## 步骤 4:授权该应用
After you sign in, you will see an authorization screen. This lets your app interact with your workspace.
登录后,你会看到一个授权界面。 这使你的应用可以与工作区交互。
Click **Authorize** to continue.
点击 **授权** 继续。
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/authorize.png" alt="Twenty CLI authorization screen" />
<img src="/images/docs/developers/extends/apps/authorize.png" alt="Twenty CLI 授权界面" />
</div>
Once authorized, your terminal will confirm that everything is set up.
授权后,你的终端会确认一切已就绪。
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/scaffolded.png" alt="App scaffolded successfully" />
<img src="/images/docs/developers/extends/apps/scaffolded.png" alt="应用脚手架创建成功" />
</div>
## Step 5: Start developing
## 步骤 5:开始开发
Go into your new app folder and start the development server:
进入你的新应用文件夹并启动开发服务器:
```bash filename="Terminal"
cd my-twenty-app
yarn twenty dev
```
This watches your source files, rebuilds on every change, and syncs your app to the local Twenty server automatically. You should see a live status panel in your terminal.
它会监听你的源文件,每次更改都会重建,并自动将你的应用同步到本地 Twenty 服务器。 你应当在终端中看到一个实时状态面板。
For more detailed output (build logs, sync requests, error traces), use the `--verbose` flag:
如需更详细的输出(构建日志、同步请求、错误跟踪),请使用 `--verbose` 标志:
```bash filename="Terminal"
yarn twenty dev --verbose
```
<Warning>
Dev mode is only available on Twenty instances running in development (`NODE_ENV=development`). Production instances reject dev sync requests. Use `yarn twenty deploy` to deploy to production servers — see [Publishing Apps](/l/zh/developers/extend/apps/publishing) for details.
开发模式仅适用于以开发模式运行的 Twenty 实例(`NODE_ENV=development`)。 生产实例会拒绝开发同步请求。 使用 `yarn twenty deploy` 部署到生产服务器——详见[发布应用](/l/zh/developers/extend/apps/publishing)
</Warning>
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/dev.jpg" alt="Dev mode terminal output" />
<img src="/images/docs/developers/extends/apps/dev.jpg" alt="开发模式终端输出" />
</div>
## Step 6: See your app in Twenty
## 步骤 6:在 Twenty 中查看你的应用
Open [http://localhost:2020/settings/applications#developer](http://localhost:2020/settings/applications#developer) in your browser. Navigate to **Settings > Apps** and select the **Developer** tab. You should see your app listed under **Your Apps**:
在浏览器中打开 [http://localhost:2020/settings/applications#developer](http://localhost:2020/settings/applications#developer)。 前往 **设置 > 应用**,并选择 **开发者** 选项卡。 你应当在 **你的应用** 下看到你的应用:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-1.png" alt="Your Apps list showing My twenty app" />
<img src="/images/docs/developers/extends/apps/app-in-ui-1.png" alt="“你的应用”列表显示 My twenty app" />
</div>
Click on **My twenty app** to open its **application registration**. A registration is a server-level record that describes your app — its name, unique identifier, OAuth credentials, and source (local, npm, or tarball). It lives on the server, not inside any specific workspace. When you install an app into a workspace, Twenty creates a workspace-scoped **application** that points back to this registration. One registration can be installed across multiple workspaces on the same server.
点击 **My twenty app** 打开其 **应用注册**。 注册项是一个服务器级记录,用于描述你的应用——其名称、唯一标识符、OAuth 凭据以及来源(本地、npm 或 tarball)。 它位于服务器上,而不在任何特定工作区内。 当你将应用安装到工作区时,Twenty 会创建一个工作区范围的 **应用**,指向该注册项。 同一服务器上的多个工作区可以安装同一个注册项。
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-2.png" alt="Application registration details" />
<img src="/images/docs/developers/extends/apps/app-in-ui-2.png" alt="应用注册详情" />
</div>
Click **View installed app** to see the installed app. The **About** tab shows the current version and management options:
点击 **查看已安装的应用** 以查看已安装的应用。 **关于** 选项卡显示当前版本和管理选项:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-3.png" alt="Installed app — About tab" />
<img src="/images/docs/developers/extends/apps/app-in-ui-3.png" alt="已安装的应用 — “关于”选项卡" />
</div>
Switch to the **Content** tab to see everything your app provides — objects, fields, logic functions, and agents:
切换到 **内容** 选项卡,以查看你的应用提供的全部内容——对象、字段、逻辑函数和智能体:
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/extends/apps/app-in-ui-4.png" alt="Installed app — Content tab" />
<img src="/images/docs/developers/extends/apps/app-in-ui-4.png" alt="已安装的应用 — “内容”选项卡" />
</div>
You are all set! Edit any file in `src/` and the changes will be picked up automatically.
一切就绪! 编辑 `src/` 中的任意文件,更改会被自动检测到。
Head over to [Building Apps](/l/zh/developers/extend/apps/building) for a detailed guide on creating objects, logic functions, front components, skills, and more.
前往[构建应用](/l/zh/developers/extend/apps/building),查看关于创建对象、逻辑函数、前端组件、技能等的详细指南。
---
## Project structure
## 项目结构
The scaffolder generates the following file structure (shown with `--exhaustive` mode, which includes examples for every entity type):
脚手架工具会生成以下文件结构(以 `--exhaustive` 模式展示,其中包含每种实体类型的示例):
```text filename="my-twenty-app/"
my-twenty-app/
@@ -190,30 +190,30 @@ my-twenty-app/
└── example-agent.ts # Example AI agent definition
```
By default (`--minimal`), only the core files are created: `application-config.ts`, `roles/default-role.ts`, `logic-functions/pre-install.ts`, and `logic-functions/post-install.ts`. Use `--exhaustive` to include all the example files shown above.
默认情况下(`--minimal`),仅创建核心文件:`application-config.ts``roles/default-role.ts``logic-functions/pre-install.ts` `logic-functions/post-install.ts`。 使用 `--exhaustive` 可包含上面展示的所有示例文件。
### Key files
### 关键文件
| File / Folder | 目的 |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `package.json` | Declares your app name, version, and dependencies. Includes a `twenty` script so you can run `yarn twenty help` to see all commands. |
| `src/application-config.ts` | **Required.** The main configuration file for your app. |
| `src/roles/` | Defines roles that control what your logic functions can access. |
| `src/logic-functions/` | Server-side functions triggered by routes, cron schedules, or database events. |
| `src/front-components/` | React components that render inside Twenty's UI. |
| `src/objects/` | Custom object definitions to extend your data model. |
| `src/fields/` | Custom fields added to existing objects. |
| `src/views/` | Saved view configurations. |
| `src/navigation-menu-items/` | Custom links in the sidebar navigation. |
| `src/skills/` | 用于扩展 Twenty 的 AI 代理的技能. |
| `src/agents/` | AI agents with custom prompts. |
| `src/page-layouts/` | Custom page layouts for record views. |
| `src/__tests__/` | Integration tests (setup + example test). |
| `public/` | Static assets (images, fonts) served with your app. |
| 文件 / 文件夹 | 目的 |
| ---------------------------- | ------------------------------------------------------------------ |
| `package.json` | 声明应用的名称、版本和依赖。 包含一个 `twenty` 脚本,因此你可以运行 `yarn twenty help` 查看所有命令。 |
| `src/application-config.ts` | **必需。** 应用的主配置文件。 |
| `src/roles/` | 定义角色,用于控制逻辑函数的访问权限。 |
| `src/logic-functions/` | 由路由、cron 调度或数据库事件触发的服务端函数。 |
| `src/front-components/` | Twenty UI 中渲染的 React 组件。 |
| `src/objects/` | 用于扩展数据模型的自定义对象定义。 |
| `src/fields/` | 添加到现有对象的自定义字段。 |
| `src/views/` | 已保存的视图配置。 |
| `src/navigation-menu-items/` | 侧边栏导航中的自定义链接。 |
| `src/skills/` | 用于扩展 Twenty 的 AI 代理的技能. |
| `src/agents/` | 具有自定义提示词的 AI 智能体。 |
| `src/page-layouts/` | 记录视图的自定义页面布局。 |
| `src/__tests__/` | 集成测试(设置 + 示例测试)。 |
| `public/` | 随应用一起提供的静态资源(图像、字体)。 |
## Managing remotes
## 管理远程
A **remote** is a Twenty server that your app connects to. During setup, the scaffolder creates one for you automatically. You can add more remotes or switch between them at any time.
“远程”是指你的应用连接到的 Twenty 服务器。 在设置期间,脚手架工具会为你自动创建一个。 你可以随时添加更多远程或在它们之间切换。
```bash filename="Terminal"
# Add a new remote (opens a browser for OAuth login)
@@ -232,11 +232,11 @@ yarn twenty remote list
yarn twenty remote switch <name>
```
Your credentials are stored in `~/.twenty/config.json`.
你的凭据存储在 `~/.twenty/config.json` 中。
## Local development server (`yarn twenty server`)
## 本地开发服务器(`yarn twenty server`
The CLI can manage a local Twenty server running in Docker. This is the same server started automatically when you scaffold an app with `create-twenty-app`, but you can also manage it manually.
CLI 可以管理在 Docker 中运行的本地 Twenty 服务器。 这与使用 `create-twenty-app` 搭建应用时自动启动的服务器相同,但你也可以手动管理它。
### 启动服务器
@@ -244,85 +244,85 @@ The CLI can manage a local Twenty server running in Docker. This is the same ser
yarn twenty server start
```
This pulls the `twentycrm/twenty-app-dev:latest` Docker image (if not already present), creates a container named `twenty-app-dev`, and starts it on port **2020**. The CLI waits until the server passes its health check before returning.
这将拉取 `twentycrm/twenty-app-dev:latest` Docker 镜像(如果尚未存在),创建名为 `twenty-app-dev` 的容器,并在端口 **2020** 上启动它。 CLI 会等待服务器通过健康检查后再返回。
Two Docker volumes are created to persist data between restarts:
会创建两个 Docker 卷,以在重启之间持久化数据:
* `twenty-app-dev-data` — PostgreSQL database
* `twenty-app-dev-storage` — file storage
* `twenty-app-dev-data` — PostgreSQL 数据库
* `twenty-app-dev-storage` — 文件存储
If port 2020 is already in use, you can start on a different port:
如果端口 2020 已被占用,你可以在其他端口上启动:
```bash filename="Terminal"
yarn twenty server start --port 3030
```
The CLI automatically configures the container's internal `NODE_PORT` and `SERVER_URL` to match the chosen port, so logic functions, OAuth, and all other internal networking work correctly.
CLI 会自动配置容器内部的 `NODE_PORT` `SERVER_URL` 以匹配所选端口,从而使逻辑函数、OAuth 以及所有其他内部网络正常工作。
Once started, the server is automatically registered as the `local` remote in your CLI config.
启动后,该服务器会在你的 CLI 配置中自动注册为 `local` 远程。
### Checking server status
### 检查服务器状态
```bash filename="Terminal"
yarn twenty server status
```
Displays whether the server is running, its URL, and the default login credentials (`tim@apple.dev` / `tim@apple.dev`).
显示服务器是否在运行、其 URL,以及默认登录凭据(`tim@apple.dev` / `tim@apple.dev`)。
### Viewing server logs
### 查看服务器日志
```bash filename="Terminal"
yarn twenty server logs
```
Streams the container logs. Use `--lines` to control how many recent lines to show:
持续输出容器日志。 使用 `--lines` 控制显示的最近日志行数:
```bash filename="Terminal"
yarn twenty server logs --lines 100
```
### Stopping the server
### 停止服务器
```bash filename="Terminal"
yarn twenty server stop
```
Stops the container. Your data is preserved in the Docker volumes — the next `start` picks up where you left off.
停止容器。 你的数据会保存在 Docker 卷中——下次 `start` 会从上次中断处继续。
### Resetting the server
### 重置服务器
```bash filename="Terminal"
yarn twenty server reset
```
Removes the container **and** deletes both Docker volumes, wiping all data. The next `start` creates a fresh instance.
移除容器并删除这两个 Docker 卷,清除所有数据。 下一次 `start` 会创建一个全新实例。
<Note>
The server requires **Docker** to be running. If you see a "Docker not running" error, make sure Docker Desktop (or the Docker daemon) is started.
服务器需要 Docker 处于运行状态。 如果看到 "Docker not running" 错误,请确保 Docker Desktop(或 Docker 守护进程)已启动。
</Note>
### Command reference
### 命令参考
| 命令 | 描述 |
| -------------------------------------- | ---------------------------------------------- |
| `yarn twenty server start` | Start the local server (pulls image if needed) |
| `yarn twenty server start --port 3030` | Start on a custom port |
| `yarn twenty server stop` | Stop the server (preserves data) |
| `yarn twenty server status` | Show server status, URL, and credentials |
| `yarn twenty server logs` | Stream server logs |
| `yarn twenty server logs --lines 100` | Show the last 100 log lines |
| `yarn twenty server reset` | Delete all data and start fresh |
| 命令 | 描述 |
| -------------------------------------- | --------------- |
| `yarn twenty server start` | 启动本地服务器(按需拉取镜像) |
| `yarn twenty server start --port 3030` | 在自定义端口启动 |
| `yarn twenty server stop` | 停止服务器(保留数据) |
| `yarn twenty server status` | 显示服务器状态、URL 和凭据 |
| `yarn twenty server logs` | 流式输出服务器日志 |
| `yarn twenty server logs --lines 100` | 显示最近 100 行日志 |
| `yarn twenty server reset` | 删除所有数据并全新开始 |
## CI with GitHub Actions
## 使用 GitHub Actions 进行 CI
The scaffolder generates a ready-to-use GitHub Actions workflow at `.github/workflows/ci.yml`. It runs your integration tests automatically on every push to `main` and on pull requests.
脚手架工具会在 `.github/workflows/ci.yml` 生成一个开箱即用的 GitHub Actions 工作流。 它会在每次向 `main` 推送以及拉取请求上自动运行你的集成测试。
The workflow:
工作流:
1. Checks out your code
2. Spins up a temporary Twenty server using the `twentyhq/twenty/.github/actions/spawn-twenty-docker-image` action
3. Installs dependencies with `yarn install --immutable`
4. Runs `yarn test` with `TWENTY_API_URL` and `TWENTY_API_KEY` injected from the action outputs
1. 检出你的代码
2. 使用 `twentyhq/twenty/.github/actions/spawn-twenty-docker-image` 动作启动一个临时的 Twenty 服务器
3. 使用 `yarn install --immutable` 安装依赖
4. 运行 `yarn test`,并从该动作的输出中注入 `TWENTY_API_URL` `TWENTY_API_KEY`
```yaml .github/workflows/ci.yml
name: CI
@@ -369,21 +369,21 @@ jobs:
TWENTY_API_KEY: ${{ steps.twenty.outputs.access-token }}
```
You don't need to configure any secrets — the `spawn-twenty-docker-image` action starts an ephemeral Twenty server directly in the runner and outputs the connection details. The `GITHUB_TOKEN` secret is provided automatically by GitHub.
你无需配置任何机密——`spawn-twenty-docker-image` 动作会在运行器中直接启动一个临时的 Twenty 服务器,并输出连接详情。 GitHub 会自动提供 `GITHUB_TOKEN` 机密。
To pin a specific Twenty version instead of `latest`, change the `TWENTY_VERSION` environment variable at the top of the workflow.
若要固定为特定的 Twenty 版本而不是 `latest`,请在工作流顶部修改 `TWENTY_VERSION` 环境变量。
## 手动设置(不使用脚手架)
If you prefer to set things up yourself instead of using `create-twenty-app`, you can do it in two steps.
如果你不想使用 `create-twenty-app`,而是自行完成设置,可以分两步进行。
**1. Add `twenty-sdk` and `twenty-client-sdk` as dependencies:**
\*\*1. `twenty-sdk` `twenty-client-sdk` 添加为依赖项:
```bash filename="Terminal"
yarn add twenty-sdk twenty-client-sdk
```
**2. Add a `twenty` script to your `package.json`:**
\*\*2. 在你的 `package.json` 中添加一个 `twenty` 脚本:
```json filename="package.json"
{
@@ -393,19 +393,19 @@ yarn add twenty-sdk twenty-client-sdk
}
```
You can now run `yarn twenty dev`, `yarn twenty help`, and all other commands.
现在你可以运行 `yarn twenty dev``yarn twenty help` 以及所有其他命令。
<Note>
Do not install `twenty-sdk` globally. Always use it as a local project dependency so that each project can pin its own version.
不要全局安装 `twenty-sdk`。 始终将其作为本地项目依赖使用,以便每个项目都能固定其自己的版本。
</Note>
## 故障排除
If you run into issues:
如果遇到问题:
* Make sure **Docker is running** before starting the scaffolder with a local instance.
* Make sure you are using **Node.js 24+** (`node -v` to check).
* Make sure **Corepack is enabled** (`corepack enable`) so Yarn 4 is available.
* Try deleting `node_modules` and running `yarn install` again if dependencies seem broken.
* 在使用本地实例启动脚手架工具之前,请确保**Docker 已在运行**。
* 请确保使用 **Node.js 24+**(运行 `node -v` 进行检查)。
* 请确保**已启用 Corepack**`corepack enable`),以便可使用 Yarn 4。
* 如果依赖似乎有问题,尝试删除 `node_modules` 并重新运行 `yarn install`
Still stuck? Ask for help on the [Twenty Discord](https://discord.com/channels/1130383047699738754/1130386664812982322).
仍然遇到问题? 在 [Twenty Discord](https://discord.com/channels/1130383047699738754/1130386664812982322) 上寻求帮助。
@@ -1,6 +1,7 @@
import { FrontComponentErrorEffect } from '@/remote/components/FrontComponentErrorEffect';
import { FrontComponentHostCommunicationApiEffect } from '@/remote/components/FrontComponentHostCommunicationApiEffect';
import { FrontComponentInitializeHostCommunicationApiEffect } from '@/remote/components/FrontComponentInitializeHostCommunicationApiEffect';
import { FrontComponentUpdateContextEffect } from '@/remote/components/FrontComponentUpdateContextEffect';
import { FrontComponentUpdateHostCommunicationApiEffect } from '@/remote/components/FrontComponentUpdateHostCommunicationApiEffect';
import { type FrontComponentHostCommunicationApi } from '@/types/FrontComponentHostCommunicationApi';
import { type SdkClientUrls } from '@/types/HostToWorkerRenderContext';
import { type WorkerExports } from '@/types/WorkerExports';
@@ -55,7 +56,6 @@ export const FrontComponentRenderer = ({
apiUrl={apiUrl}
sdkClientUrls={sdkClientUrls}
frontComponentId={executionContext.frontComponentId}
frontComponentHostCommunicationApi={frontComponentHostCommunicationApi}
setReceiver={setReceiver}
setThread={setThread}
setError={setError}
@@ -63,7 +63,6 @@ export const FrontComponentRenderer = ({
);
}, [
componentUrl,
frontComponentHostCommunicationApi,
setError,
setReceiver,
setThread,
@@ -102,7 +101,13 @@ export const FrontComponentRenderer = ({
{isDefined(thread) && (
<>
<FrontComponentHostCommunicationApiEffect thread={thread} />
<FrontComponentUpdateHostCommunicationApiEffect
thread={thread}
frontComponentHostCommunicationApi={
frontComponentHostCommunicationApi
}
/>
<FrontComponentInitializeHostCommunicationApiEffect thread={thread} />
<FrontComponentUpdateContextEffect
thread={thread}
executionContext={executionContext}
@@ -1,8 +1,9 @@
export { FrontComponentRenderer } from './host/components/FrontComponentRenderer';
export { componentRegistry } from './host/generated/host-component-registry';
export { FrontComponentErrorEffect } from './remote/components/FrontComponentErrorEffect';
export { FrontComponentHostCommunicationApiEffect } from './remote/components/FrontComponentHostCommunicationApiEffect';
export { FrontComponentInitializeHostCommunicationApiEffect } from './remote/components/FrontComponentInitializeHostCommunicationApiEffect';
export { FrontComponentUpdateContextEffect } from './remote/components/FrontComponentUpdateContextEffect';
export { FrontComponentUpdateHostCommunicationApiEffect } from './remote/components/FrontComponentUpdateHostCommunicationApiEffect';
export { FrontComponentWorkerEffect } from './remote/components/FrontComponentWorkerEffect';
export {
HtmlA,
@@ -3,13 +3,13 @@ import { type WorkerExports } from '@/types/WorkerExports';
import { type ThreadWebWorker } from '@quilted/threads';
import { useEffect } from 'react';
type FrontComponentHostCommunicationApiEffectProps = {
type FrontComponentInitializeHostCommunicationApiEffectProps = {
thread: ThreadWebWorker<WorkerExports, FrontComponentHostCommunicationApi>;
};
export const FrontComponentHostCommunicationApiEffect = ({
export const FrontComponentInitializeHostCommunicationApiEffect = ({
thread,
}: FrontComponentHostCommunicationApiEffectProps) => {
}: FrontComponentInitializeHostCommunicationApiEffectProps) => {
useEffect(() => {
thread.imports.initializeHostCommunicationApi().catch((error) => {
console.error('Failed to initialize host communication API:', error);
@@ -0,0 +1,20 @@
import { type FrontComponentHostCommunicationApi } from '@/types/FrontComponentHostCommunicationApi';
import { type WorkerExports } from '@/types/WorkerExports';
import { type ThreadWebWorker } from '@quilted/threads';
import { useEffect } from 'react';
type FrontComponentUpdateHostCommunicationApiEffectProps = {
thread: ThreadWebWorker<WorkerExports, FrontComponentHostCommunicationApi>;
frontComponentHostCommunicationApi: FrontComponentHostCommunicationApi;
};
export const FrontComponentUpdateHostCommunicationApiEffect = ({
thread,
frontComponentHostCommunicationApi,
}: FrontComponentUpdateHostCommunicationApiEffectProps) => {
useEffect(() => {
Object.assign(thread.exports, frontComponentHostCommunicationApi);
}, [thread, frontComponentHostCommunicationApi]);
return null;
};
@@ -1,8 +1,8 @@
import { ThreadWebWorker, release, retain } from '@quilted/threads';
import { RemoteReceiver } from '@remote-dom/core/receivers';
import { useEffect, useRef } from 'react';
import { type ConfirmationModalCaller } from 'twenty-shared/types';
import { type CommandConfirmationModalResult } from 'twenty-sdk';
import { type ConfirmationModalCaller } from 'twenty-shared/types';
import { type FrontComponentHostCommunicationApi } from '../../types/FrontComponentHostCommunicationApi';
import { type SdkClientUrls } from '../../types/HostToWorkerRenderContext';
import { type WorkerExports } from '../../types/WorkerExports';
@@ -17,13 +17,26 @@ type CommandMenuItemConfirmationModalResultBrowserEventDetail = {
confirmationResult: CommandConfirmationModalResult;
};
const noopAsync = async () => {};
const HOST_COMMUNICATION_API_NOOP_INITIALIZATION: FrontComponentHostCommunicationApi =
{
navigate: noopAsync,
requestAccessTokenRefresh: async () => '',
openSidePanelPage: noopAsync,
openCommandConfirmationModal: noopAsync,
unmountFrontComponent: noopAsync,
enqueueSnackbar: noopAsync,
closeSidePanel: noopAsync,
updateProgress: noopAsync,
};
type FrontComponentWorkerEffectProps = {
componentUrl: string;
applicationAccessToken?: string;
apiUrl?: string;
sdkClientUrls?: SdkClientUrls;
frontComponentId: string;
frontComponentHostCommunicationApi: FrontComponentHostCommunicationApi;
setReceiver: React.Dispatch<React.SetStateAction<RemoteReceiver | null>>;
setThread: React.Dispatch<
React.SetStateAction<ThreadWebWorker<
@@ -40,7 +53,6 @@ export const FrontComponentWorkerEffect = ({
apiUrl,
sdkClientUrls,
frontComponentId,
frontComponentHostCommunicationApi,
setReceiver,
setThread,
setError,
@@ -68,7 +80,7 @@ export const FrontComponentWorkerEffect = ({
WorkerExports,
FrontComponentHostCommunicationApi
>(worker, {
exports: frontComponentHostCommunicationApi,
exports: { ...HOST_COMMUNICATION_API_NOOP_INITIALIZATION },
});
const handleCommandMenuItemConfirmationModalResultBrowserEvent = (
@@ -135,7 +147,6 @@ export const FrontComponentWorkerEffect = ({
setError,
setReceiver,
setThread,
frontComponentHostCommunicationApi,
]);
return null;
-1
View File
@@ -29,7 +29,6 @@
"workerDirectory": "public"
},
"dependencies": {
"@ai-sdk/react": "3.0.99",
"@apollo/client": "^4.0.0",
"@blocknote/mantine": "^0.47.1",
"@blocknote/react": "^0.47.1",
File diff suppressed because one or more lines are too long
@@ -129,6 +129,7 @@ export type Mutation = {
deactivateWorkflowVersion: Scalars['Boolean'];
deleteWorkflowVersionEdge: WorkflowVersionStepChanges;
deleteWorkflowVersionStep: WorkflowVersionStepChanges;
dismissMaintenanceModeBanner: Scalars['Boolean'];
dismissReconnectAccountBanner: Scalars['Boolean'];
duplicateWorkflow: WorkflowVersionDto;
duplicateWorkflowVersionStep: WorkflowVersionStepChanges;
@@ -249,6 +250,7 @@ export type Query = {
getTimelineThreadsFromCompanyId: TimelineThreadsWithTotal;
getTimelineThreadsFromOpportunityId: TimelineThreadsWithTotal;
getTimelineThreadsFromPersonId: TimelineThreadsWithTotal;
isMaintenanceModeBannerDismissed: Scalars['Boolean'];
search: SearchResultConnection;
};
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Voeg nota by"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Voeg objek by"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "KI Model"
@@ -1366,11 +1366,6 @@ msgstr "AI nie gekonfigureer nie. Stel OPENAI_API_KEY, ANTHROPIC_API_KEY of XAI_
msgid "AI request prep"
msgstr "Voorbereiding van KI-versoek"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "KI Antwoord Skema"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Is jy seker jy wil hierdie verwante {relationObjectMetadataNameSingular}
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Is jy seker jy wil hierdie vaardigheid verwyder? Hierdie aksie kan nie ongedaan gemaak word nie."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Is jy seker jy wil hierdie rekords vernietig? Hulle sal nie meer herstelbaar wees nie."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Is jy seker jy wil hierdie rekord vernietig? Dit kan nie meer herstel word nie."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Is jy seker jy wil hierdie rekords herstel?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Is jy seker jy wil hierdie rekord herstel?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Besluit watter Subadresvelde jy wil vertoon"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Verwyder webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Verwyder widget"
@@ -4781,7 +4781,6 @@ msgstr "Beskryf wat jy wil hê die KI moet doen..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "vernietig"
msgid "Destroy {objectLabelPlural}"
msgstr "Vernietig {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Vernietig rekords"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Aktiveer omseil opsies"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Aktiveer model-spesifieke funksies"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Einddatum"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Kon nie werkruimte-instruksies stoor nie"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Veld verwyder"
msgid "Field name"
msgstr "Veldnaam"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Veldnaam"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "indien"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Inligting"
msgid "Input"
msgstr "Invoer"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Installeer..."
msgid "Instances"
msgstr "Instansies"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Instruksies"
msgid "Instructions Editor"
msgstr "Instruksie-redigeerder"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Instruksies vir KI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Uitlegte"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Kom meer te wete"
@@ -8395,6 +8410,7 @@ msgstr "Lyn grafiek"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Skakel"
@@ -8645,11 +8661,26 @@ msgstr "lus"
msgid "Mail Account"
msgstr "Posrekening"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Toestemming om e-poskonsepte op te stel ontbreek."
msgid "Mission accomplished!"
msgstr "Missie voltooi!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Onderbreking"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Onderbreking"
msgid "Output"
msgstr "Uitset"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Uitvoerveld {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Permanent verwydering. Voer die aantal dae in."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Vernietig rekord permanent"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Vernietig rekords permanent"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Plan"
msgid "Plan switching has been cancelled."
msgstr "Planwisseling is gekanselleer."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "herstel"
msgid "Restore"
msgstr "Herstel"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Herstel rekord"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Herstel rekords"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Hervat"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Probeer weer"
@@ -12038,6 +12067,16 @@ msgstr "Skep die raamwerk vir 'n nuwe toepassing en gebruik dan die CLI om te on
msgid "Schedule"
msgstr "Skedule"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Kies kolom..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Kies datum en tyd"
@@ -12895,6 +12934,11 @@ msgstr "Meld aan of Skep 'n rekening"
msgid "Sign up"
msgstr "Registreer"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Begin 'n nuwe ondernemingsintekening om ondernemingsfunksies weer te akt
msgid "Start a new enterprise subscription."
msgstr "Begin 'n nuwe ondernemingsintekening."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Twenty-velde"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X Soek"
@@ -14473,6 +14522,7 @@ msgstr "Twee-faktor magtiging-setup suksesvol voltooi!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "Ongenoemde"
msgid "Untitled {labelSingular}"
msgstr "Naamlose {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "Veranderlike {variableKey} opgedateer"
msgid "Variable deleted successfully."
msgstr "Veranderlike suksesvol verwyder."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Probeer asseblief oor 'n paar sekondes weer, jammer."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Web Soek"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "أضف ملاحظة"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "إضافة كائن"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "نموذج الذكاء الاصطناعي"
@@ -1366,11 +1366,6 @@ msgstr "لم يتم تهيئة الذكاء الاصطناعي. عيّن OPENAI_
msgid "AI request prep"
msgstr "تحضير طلب الذكاء الاصطناعي"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "نموذج استجابة الذكاء الاصطناعي"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "هل أنت متأكد أنك تريد حذف هذا {relationObjectMeta
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "هل أنت متأكد أنك تريد حذف هذه المهارة؟ لا يمكن التراجع عن هذا الإجراء."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "هل أنت متأكد أنك تريد إتلاف هذه السجلات؟ لن تكون قابلة للاسترداد بعد الآن."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "هل أنت متأكد أنك تريد تدمير هذا السجل؟ لن يمكن استرجاعه بعد الآن."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "هل أنت متأكد أنك تريد استعادة هذه السجلات؟"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "هل أنت متأكد أنك تريد استعادة هذا السجل؟"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "قرر أي حقول العناوين الفرعية تريد عرضها"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "حذف Webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "حذف الأداة"
@@ -4781,7 +4781,6 @@ msgstr "صف ما تريد أن يقوم به الذكاء الاصطناعي...
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "تدمير"
msgid "Destroy {objectLabelPlural}"
msgstr "إتلاف {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "إتلاف السجلات"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "تمكين خيارات التجاوز"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "تمكين الميزات الخاصة بالنموذج"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "تاريخ الانتهاء"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "تعذّر حفظ تعليمات مساحة العمل"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "تم حذف الحقل"
msgid "Field name"
msgstr "اسم الحقل"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "اسم الحقل"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "إذا"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "معلومات"
msgid "Input"
msgstr "إدخال"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "جاري التثبيت..."
msgid "Instances"
msgstr "النماذج"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "إرشادات"
msgid "Instructions Editor"
msgstr "محرر الإرشادات"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "تعليمات إلى الذكاء الاصطناعي"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "تخطيطات"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "معرفة المزيد"
@@ -8395,6 +8410,7 @@ msgstr "الرسم البياني الخطي"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "رابط"
@@ -8645,11 +8661,26 @@ msgstr "حلقة"
msgid "Mail Account"
msgstr "حساب البريد"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "إذن صياغة رسائل البريد الإلكتروني غير م
msgid "Mission accomplished!"
msgstr "تم إنجاز المهمة!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "انقطاع"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "انقطاع"
msgid "Output"
msgstr "المخرجات"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "حقل المخرجات {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "الحذف الدائم. أدخل عدد الأيام."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "اتلاف السجل نهائيًا"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "إتلاف السجلات نهائيًا"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "الخطة"
msgid "Plan switching has been cancelled."
msgstr "تم إلغاء تبديل الخطة."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "استعادة"
msgid "Restore"
msgstr "استعادة"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "استعادة السجل"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "استعادة السجلات"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "استئناف"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "إعادة المحاولة"
@@ -12038,6 +12067,16 @@ msgstr "أنشئ قالبًا لتطبيق جديد، ثم استخدم CLI لل
msgid "Schedule"
msgstr "الجدول الزمني"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "اختر العمود..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "اختر التاريخ والوقت"
@@ -12895,6 +12934,11 @@ msgstr "تسجيل الدخول أو إنشاء حساب"
msgid "Sign up"
msgstr "إنشاء حساب"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "ابدأ اشتراك Enterprise جديدًا لإعادة تفعيل م
msgid "Start a new enterprise subscription."
msgstr "ابدأ اشتراك Enterprise جديدًا."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "حقول Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "تويتر/X بحث"
@@ -14473,6 +14522,7 @@ msgstr "تم إكمال إعداد المصادقة الثنائية بنجاح!
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "بدون عنوان"
msgid "Untitled {labelSingular}"
msgstr "{labelSingular} بدون عنوان"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "تم تحديث المتغيّر {variableKey}"
msgid "Variable deleted successfully."
msgstr "تم حذف المتغير بنجاح."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15410,7 +15470,7 @@ msgid ""
msgstr "نحن في انتظار تأكيد من مزود الدفع لدينا (Stripe).\\nيرجى المحاولة مرة أخرى خلال بضع ثوانٍ، نأسف."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "بحث الويب"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Afegeix una nota"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Afegeix objecte"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "Model IA"
@@ -1366,11 +1366,6 @@ msgstr "La IA no està configurada. Estableix OPENAI_API_KEY, ANTHROPIC_API_KEY
msgid "AI request prep"
msgstr "Preparació de la sol·licitud d'IA"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Esquema de resposta IA"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Segur que vols suprimir aquest {relationObjectMetadataNameSingular} rela
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Segur que vols suprimir aquesta habilitat? Aquesta acció no es pot desfer."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Esteu segur que voleu destruir aquests registres? Ja no seran recuperables."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Esteu segur que voleu destruir aquest registre? No es podrà recuperar més endavant."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Esteu segur que voleu restaurar aquests registres?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Esteu segur que voleu restaurar aquest registre?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Decideix quins camps de Sub-adreça vols mostrar"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Esborrar webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Elimina el giny"
@@ -4781,7 +4781,6 @@ msgstr "Descriviu què voleu que faci la IA..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "destruir"
msgid "Destroy {objectLabelPlural}"
msgstr "Destruir {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Destruir registres"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Habilita opcions per a saltar"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Activar funcionalitats específiques del model"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Data de Finalització"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "No s'han pogut desar les instruccions de l'espai de treball"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Camp eliminat"
msgid "Field name"
msgstr "Nom del camp"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Nom del camp"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "si"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Informació"
msgid "Input"
msgstr "Entrada"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Instal·lant..."
msgid "Instances"
msgstr "Instàncies"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Instruccions"
msgid "Instructions Editor"
msgstr "Editor d'instruccions"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Instruccions per a la IA"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Dissenys"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Més informació"
@@ -8395,6 +8410,7 @@ msgstr "Gràfic de línies"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Enllaç"
@@ -8645,11 +8661,26 @@ msgstr "bucle"
msgid "Mail Account"
msgstr "Compte de correu"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Falta el permís per redactar esborranys de correu electrònic."
msgid "Mission accomplished!"
msgstr "Missió acomplerta!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Interrupció"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Interrupció"
msgid "Output"
msgstr "Sortida"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Camp de sortida {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Eliminació permanent. Introduïu el nombre de dies."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Destruir permanentment el registre"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Destruir permanentment registres"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Pla"
msgid "Plan switching has been cancelled."
msgstr "El canvi de pla ha estat cancel·lat."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "restaura"
msgid "Restore"
msgstr "Restaura"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Restaura el Registre"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Restaura Registres"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Reprendre"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Reintentar"
@@ -12038,6 +12067,16 @@ msgstr "Genera l'esquelet d'una aplicació nova, després utilitza la CLI per de
msgid "Schedule"
msgstr "Horari"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Selecciona columna..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Selecciona data i hora"
@@ -12895,6 +12934,11 @@ msgstr "Inicia sessió o crea un compte"
msgid "Sign up"
msgstr "Registrar-se"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Inicieu una nova subscripció Enterprise per tornar a habilitar les func
msgid "Start a new enterprise subscription."
msgstr "Inicieu una nova subscripció Enterprise."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Camps de Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Cerca de Twitter/X"
@@ -14473,6 +14522,7 @@ msgstr "Configuració de l'autenticació de dos factors completada amb èxit!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "Sense títol"
msgid "Untitled {labelSingular}"
msgstr "{labelSingular} sense títol"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "Variable {variableKey} actualitzada"
msgid "Variable deleted successfully."
msgstr "Variable suprimida amb èxit."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Torna-ho a provar d'aquí a uns segons, si us plau. Disculpa."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Cerca web"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Přidat poznámku"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Přidat objekt"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AI Model"
@@ -1366,11 +1366,6 @@ msgstr "AI není nakonfigurována. V prostředí nastavte hodnotu OPENAI_API_KEY
msgid "AI request prep"
msgstr "Příprava požadavku AI"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Schéma odpovědi AI"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Opravdu chcete smazat tento související objekt {relationObjectMetadata
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Opravdu chcete smazat tuto dovednost? Tuto akci nelze vrátit zpět."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Jste si jistí, že chcete zničit tyto záznamy? Nebude možné je obnovit."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Opravdu chcete zničit tento záznam? Nebude možné jej obnovit."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Opravdu chcete obnovit tyto záznamy?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Opravdu chcete obnovit tento záznam?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Rozhodněte se, která pole podadresy chcete zobrazit"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Smazat Webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Odstranit widget"
@@ -4781,7 +4781,6 @@ msgstr "Popište, co chcete, aby AI dělalo..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "zničit"
msgid "Destroy {objectLabelPlural}"
msgstr "Zničit {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Zničit záznamy"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Povolit možnosti obejití"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Povolit funkce specifické pro model"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Datum ukončení"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Nepodařilo se uložit pokyny pracovního prostoru"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Pole smazáno"
msgid "Field name"
msgstr "Název pole"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Název pole"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "pokud"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Informace"
msgid "Input"
msgstr "Vstup"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Instaluje se..."
msgid "Instances"
msgstr "Instance"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Pokyny"
msgid "Instructions Editor"
msgstr "Editor pokynů"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Pokyny pro AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Rozvržení"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Další informace"
@@ -8395,6 +8410,7 @@ msgstr "Liniový graf"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Odkaz"
@@ -8645,11 +8661,26 @@ msgstr "smyčka"
msgid "Mail Account"
msgstr "E-mailový účet"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Chybí oprávnění pro vytváření konceptů e-mailů."
msgid "Mission accomplished!"
msgstr "Mise splněna!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Výpadek"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Výpadek"
msgid "Output"
msgstr "Výstup"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Výstupní pole {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Trvalé smazání. Zadejte počet dnů."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Trvale zničit záznam"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Trvale zničit záznamy"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Plán"
msgid "Plan switching has been cancelled."
msgstr "Přepínání plánu bylo zrušeno."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "obnovit"
msgid "Restore"
msgstr "Obnovit"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Obnovit záznam"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Obnovit záznamy"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Pokračovat"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Opakovat"
@@ -12038,6 +12067,16 @@ msgstr "Vytvořte kostru nové aplikace a poté pomocí CLI vyvíjejte, publikuj
msgid "Schedule"
msgstr "Plán"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Vybrat sloupec..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Vyberte datum a čas"
@@ -12895,6 +12934,11 @@ msgstr "Přihlásit se nebo vytvořit účet"
msgid "Sign up"
msgstr "Zaregistrovat se"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Zahajte nové předplatné Enterprise a znovu povolte funkce Enterprise.
msgid "Start a new enterprise subscription."
msgstr "Zahajte nové předplatné Enterprise."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Pole Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X Hledat"
@@ -14473,6 +14522,7 @@ msgstr "Nastavení dvoufaktorového ověřování bylo úspěšně dokončeno!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "Nepojmenovaný"
msgid "Untitled {labelSingular}"
msgstr "Nepojmenovaný {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "Proměnná {variableKey} byla aktualizována"
msgid "Variable deleted successfully."
msgstr "Proměnná byla úspěšně odstraněna."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Zkuste to prosím za pár sekund znovu."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Hledání na webu"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Tilføj note"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Tilføj objekt"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AI Model"
@@ -1366,11 +1366,6 @@ msgstr "AI ikke konfigureret. Angiv OPENAI_API_KEY, ANTHROPIC_API_KEY eller XAI_
msgid "AI request prep"
msgstr "Forberedelse af AI-anmodning"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "AI Svarskema"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Er du sikker på, at du vil slette denne relaterede {relationObjectMetad
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Er du sikker på, at du vil slette denne færdighed? Denne handling kan ikke fortrydes."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Er du sikker på, at du vil ødelægge disse optegnelser? De kan ikke gendannes længere."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Er du sikker på, at du vil ødelægge denne post? Den kan ikke gendannes længere."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Er du sikker på, at du vil gendanne disse poster?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Er du sikker på, at du vil gendanne denne post?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Vælg hvilke underadressefelter du vil vise"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Slet webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Slet widget"
@@ -4781,7 +4781,6 @@ msgstr "Beskriv, hvad du vil have AI'en til at gøre..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "ødelæg"
msgid "Destroy {objectLabelPlural}"
msgstr "Ødelæg {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Ødelæg records"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Aktiver forbigående muligheder"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Aktiver model-specifikke funktioner"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Slutdato"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Kunne ikke gemme instruktioner for arbejdsområdet"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Felt slettet"
msgid "Field name"
msgstr "Felt navn"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Feltnavn"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "hvis"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Info"
msgid "Input"
msgstr "Input"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Installerer..."
msgid "Instances"
msgstr "Instanser"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Instruktioner"
msgid "Instructions Editor"
msgstr "Instruktionseditor"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Instruktioner til AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Layouts"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Få mere at vide"
@@ -8395,6 +8410,7 @@ msgstr "Linje Diagram"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Link"
@@ -8645,11 +8661,26 @@ msgstr "loop"
msgid "Mail Account"
msgstr "Mailkonto"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Manglende tilladelse til at oprette e-mail-kladder."
msgid "Mission accomplished!"
msgstr "Mission fuldført!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Nedetid"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Nedetid"
msgid "Output"
msgstr "Output"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Outputfelt {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Permanent sletning. Indtast antal dage."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Permanent slet post"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Permanent slet poster"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Plan"
msgid "Plan switching has been cancelled."
msgstr "Planskift er blevet annulleret."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "gendan"
msgid "Restore"
msgstr "Gendan"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Gendan post"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Gendan poster"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Genoptag"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Prøv igen"
@@ -12038,6 +12067,16 @@ msgstr "Generér et skelet til en ny app, og brug derefter CLI til at udvikle, u
msgid "Schedule"
msgstr "Tidsplan"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Vælg kolonne..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Vælg dato og tidspunkt"
@@ -12895,6 +12934,11 @@ msgstr "Log ind eller Opret en konto"
msgid "Sign up"
msgstr "Tilmeld dig"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Start et nyt Enterprise-abonnement for at aktivere Enterprise-funktioner
msgid "Start a new enterprise subscription."
msgstr "Start et nyt Enterprise-abonnement."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14440,7 +14489,7 @@ msgid "Twenty fields"
msgstr "Twenty-felter"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X Søg"
@@ -14475,6 +14524,7 @@ msgstr "Opsætning af to-faktor godkendelse blev gennemført med succes!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14698,6 +14748,11 @@ msgstr "Uden titel"
msgid "Untitled {labelSingular}"
msgstr "Unavngivet {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15086,6 +15141,11 @@ msgstr "Variablen {variableKey} opdateret"
msgid "Variable deleted successfully."
msgstr "Variabel slettet med succes."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15414,7 +15474,7 @@ msgstr ""
"Prøv igen om et øjeblik, beklager."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Websøgning"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Notiz hinzufügen"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Objekt hinzufügen"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "KI-Modell"
@@ -1366,11 +1366,6 @@ msgstr "KI nicht konfiguriert. Setzen Sie OPENAI_API_KEY, ANTHROPIC_API_KEY oder
msgid "AI request prep"
msgstr "Vorbereitung der KI-Anfrage"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Scheman der KI-Antwort"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Sind Sie sicher, dass Sie dieses zugehörige {relationObjectMetadataName
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Sind Sie sicher, dass Sie diesen Skill löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Sind Sie sicher, dass Sie diese Datensätze zerstören möchten? Sie können nicht wiederhergestellt werden."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Sind Sie sicher, dass Sie diesen Datensatz zerstören möchten? Er kann nicht wiederhergestellt werden."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Sind Sie sicher, dass Sie diese Datensätze wiederherstellen möchten?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Sind Sie sicher, dass Sie diesen Datensatz wiederherstellen möchten?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Entscheiden Sie, welche Unteradressfelder Sie anzeigen möchten"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Webhook löschen"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Widget löschen"
@@ -4781,7 +4781,6 @@ msgstr "Beschreiben Sie, was die KI tun soll..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "zerstören"
msgid "Destroy {objectLabelPlural}"
msgstr "Zerstören {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Datensätze zerstören"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Umgehungsoptionen aktivieren"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Enable model-specific features"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Enddatum"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr "Fehler beim Speichern der Rollenberechtigungen: {errorMessage}"
msgid "Failed to save workspace instructions"
msgstr "Fehler beim Speichern der Arbeitsbereichsanweisungen"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Feld gelöscht"
msgid "Field name"
msgstr "Feldname"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Feldname"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "wenn"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Informationen"
msgid "Input"
msgstr "Eingabe"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Wird installiert..."
msgid "Instances"
msgstr "Instanzen"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Anweisungen"
msgid "Instructions Editor"
msgstr "Editor für Anweisungen"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Anweisungen für die KI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Layouts"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Mehr erfahren"
@@ -8395,6 +8410,7 @@ msgstr "Liniendiagramm"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Link"
@@ -8645,11 +8661,26 @@ msgstr "Schleife"
msgid "Mail Account"
msgstr "Mail-Konto"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Berechtigung zum Erstellen von E-Mail-Entwürfen fehlt."
msgid "Mission accomplished!"
msgstr "Mission erfüllt!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Ausfall"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Ausfall"
msgid "Output"
msgstr "Ausgabe"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Ausgabefeld {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Dauerhafte Löschung. Geben Sie die Anzahl der Tage ein."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Datensatz dauerhaft zerstören"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Datensätze dauerhaft zerstören"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Plan"
msgid "Plan switching has been cancelled."
msgstr "Der Tarifwechsel wurde abgebrochen."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "wiederherstellen"
msgid "Restore"
msgstr "Wiederherstellen"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Datensatz wiederherstellen"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Datensätze wiederherstellen"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Fortsetzen"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Erneut versuchen"
@@ -12038,6 +12067,16 @@ msgstr "Ein neues App-Gerüst erstellen und anschließend die CLI zum Entwickeln
msgid "Schedule"
msgstr "Zeitplan"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Spalte auswählen..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Datum und Uhrzeit auswählen"
@@ -12895,6 +12934,11 @@ msgstr "Anmelden oder ein Konto erstellen"
msgid "Sign up"
msgstr "Registrieren"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Starten Sie ein neues Enterprise-Abonnement, um die Enterprise-Funktione
msgid "Start a new enterprise subscription."
msgstr "Starten Sie ein neues Enterprise-Abonnement."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Twenty-Felder"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X Suche"
@@ -14473,6 +14522,7 @@ msgstr "Einrichtung der Zwei-Faktor-Authentifizierung erfolgreich abgeschlossen!
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "Unbenannt"
msgid "Untitled {labelSingular}"
msgstr "Unbenanntes {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "Variable {variableKey} aktualisiert"
msgid "Variable deleted successfully."
msgstr "Variable erfolgreich gelöscht."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Bitte versuchen Sie es in ein paar Sekunden erneut, Entschuldigung."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Websuche"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Προσθήκη σημείωσης"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Προσθήκη αντικειμένου"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "Μοντέλο AI"
@@ -1366,11 +1366,6 @@ msgstr "Το AI δεν έχει ρυθμιστεί. Ορίστε το OPENAI_API
msgid "AI request prep"
msgstr "Προετοιμασία αιτήματος AI"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Σχήμα Απόκρισης AI"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Είστε βέβαιοι ότι θέλετε να διαγράψετε
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη δεξιότητα; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Είστε βέβαιοι ότι θέλετε να καταστρέψετε αυτές τις εγγραφές; Δεν θα είναι πλέον ανακτήσιμες."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Είστε σίγουροι ότι θέλετε να καταστρέψετε αυτή την εγγραφή; Δεν μπορεί να ανακτηθεί πλέον."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Είστε σίγουροι ότι θέλετε να επαναφέρετε αυτές τις εγγραφές;"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Είστε σίγουροι ότι θέλετε να επαναφέρετε αυτή την εγγραφή;"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Αποφασίστε ποια πεδία Υπο-διευθύνσεων θέλετε να εμφανίζονται"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Διαγραφή webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Διαγραφή γραφικού στοιχείου"
@@ -4781,7 +4781,6 @@ msgstr "Περιγράψτε τι θέλετε να κάνει το AI..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "καταστροφή"
msgid "Destroy {objectLabelPlural}"
msgstr "Καταστροφή {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Καταστροφή εγγραφών"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Ενεργοποίηση επιλογών παράκαμψης"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Ενεργοποιήστε τις λειτουργίες συγκεκριμένου μοντέλου"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Ημερομηνία Λήξης"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Αποτυχία αποθήκευσης των οδηγιών του χώρου εργασίας"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Το πεδίο διαγράφηκε"
msgid "Field name"
msgstr "Όνομα πεδίου"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Όνομα Πεδίου"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "εάν"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Πληροφορίες"
msgid "Input"
msgstr "Εισαγωγή"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Γίνεται εγκατάσταση..."
msgid "Instances"
msgstr "Παραδείγματα"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Οδηγίες"
msgid "Instructions Editor"
msgstr "Επεξεργαστής οδηγιών"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Οδηγίες για το AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Διατάξεις"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Μάθετε περισσότερα"
@@ -8395,6 +8410,7 @@ msgstr "Διάγραμμα γραμμής"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Σύνδεσμος"
@@ -8645,11 +8661,26 @@ msgstr "βρόχο"
msgid "Mail Account"
msgstr "Λογαριασμός Ηλεκτρονικού Ταχυδρομείου"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Λείπει η άδεια για σύνταξη προσχεδίων em
msgid "Mission accomplished!"
msgstr "Αποστολή ολοκληρώθηκε!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Διακοπή λειτουργίας"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Διακοπή λειτουργίας"
msgid "Output"
msgstr "Έξοδος"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Πεδίο Εξόδου {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Μόνιμη διαγραφή. Εισάγετε τον αριθμό ημερών."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Καταστροφή της εγγραφής οριστικά"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Καταστρέψτε μόνιμα τις εγγραφές"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Σχέδιο"
msgid "Plan switching has been cancelled."
msgstr "Η αλλαγή προγράμματος ακυρώθηκε."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "επαναφορά"
msgid "Restore"
msgstr "Επαναφορά"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Επαναφορά εγγραφής"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Επαναφορά εγγραφών"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Συνέχιση"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Δοκιμή ξανά"
@@ -12038,6 +12067,16 @@ msgstr "Δημιουργήστε τον σκελετό μιας νέας εφα
msgid "Schedule"
msgstr "Πρόγραμμα"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Επιλέξτε στήλη..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Επιλέξτε ημερομηνία & ώρα"
@@ -12897,6 +12936,11 @@ msgstr "Σύνδεση ή δημιουργία λογαριασμού"
msgid "Sign up"
msgstr "Εγγραφή"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13211,6 +13255,11 @@ msgstr "Ξεκινήστε μια νέα συνδρομή Enterprise για να
msgid "Start a new enterprise subscription."
msgstr "Ξεκινήστε μια νέα συνδρομή Enterprise."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14442,7 +14491,7 @@ msgid "Twenty fields"
msgstr "Πεδία Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Αναζήτηση Twitter/X"
@@ -14477,6 +14526,7 @@ msgstr "Η εγκατάσταση δύο παραγοντικής ταυτοπο
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14700,6 +14750,11 @@ msgstr "Άτιτλος"
msgid "Untitled {labelSingular}"
msgstr "Χωρίς τίτλο {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15088,6 +15143,11 @@ msgstr "Η μεταβλητή {variableKey} ενημερώθηκε"
msgid "Variable deleted successfully."
msgstr "Η μεταβλητή διαγράφηκε με επιτυχία."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15416,7 +15476,7 @@ msgstr ""
"Παρακαλούμε δοκιμάστε ξανά σε λίγα δευτερόλεπτα, συγγνώμη."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Αναζήτηση στον Ιστό"
+129 -69
View File
@@ -1007,6 +1007,7 @@ msgstr "Add note"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Add object"
@@ -1347,7 +1348,6 @@ msgstr "AI consumption over time."
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AI Model"
@@ -1361,11 +1361,6 @@ msgstr "AI not configured. Set OPENAI_API_KEY, ANTHROPIC_API_KEY, or XAI_API_KEY
msgid "AI request prep"
msgstr "AI request prep"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "AI Response Schema"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2008,25 +2003,29 @@ msgstr "Are you sure you want to delete this related {relationObjectMetadataName
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Are you sure you want to delete this skill? This action cannot be undone."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Are you sure you want to destroy these records? They won't be recoverable anymore."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Are you sure you want to destroy this record? It cannot be recovered anymore."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Are you sure you want to restore these records?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr "Are you sure you want to restore these {0}?"
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Are you sure you want to restore this record?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr "Are you sure you want to restore this {0}?"
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4426,7 +4425,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Decide which Sub-address fields you want to display"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr "default"
@@ -4720,6 +4719,7 @@ msgstr "Delete webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Delete widget"
@@ -4776,7 +4776,6 @@ msgstr "Describe what you want the AI to do..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4796,11 +4795,6 @@ msgstr "destroy"
msgid "Destroy {objectLabelPlural}"
msgstr "Destroy {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Destroy Records"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5471,15 +5465,25 @@ msgid "Enable bypass options"
msgstr "Enable bypass options"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Enable model-specific features"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr "End date"
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "End Date"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr "End date must be after start date."
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6405,6 +6409,11 @@ msgstr "Failed to save role permissions: {errorMessage}"
msgid "Failed to save workspace instructions"
msgstr "Failed to save workspace instructions"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr "Failed to set maintenance mode."
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6567,11 +6576,6 @@ msgstr "Field deleted"
msgid "Field name"
msgstr "Field name"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Field Name"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7409,6 +7413,11 @@ msgstr "if"
msgid "If disabled, use advanced search filters to find these records"
msgstr "If disabled, use advanced search filters to find these records"
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr "If there's no link, no button will appear."
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7625,6 +7634,11 @@ msgstr "Infos"
msgid "Input"
msgstr "Input"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr "Input (Prompt)"
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7705,6 +7719,11 @@ msgstr "Installing..."
msgid "Instances"
msgstr "Instances"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr "Instruction for AI"
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7715,11 +7734,6 @@ msgstr "Instructions"
msgid "Instructions Editor"
msgstr "Instructions Editor"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Instructions for AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8280,6 +8294,7 @@ msgstr "Layouts"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Learn more"
@@ -8390,6 +8405,7 @@ msgstr "Line Chart"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Link"
@@ -8640,11 +8656,26 @@ msgstr "loop"
msgid "Mail Account"
msgstr "Mail Account"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr "Maintenance"
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr "Maintenance mode"
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr "Make HTTP requests to external APIs"
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr "Manage"
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8955,6 +8986,11 @@ msgstr "Missing email draft permission."
msgid "Mission accomplished!"
msgstr "Mission accomplished!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr "Model"
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10531,6 +10567,7 @@ msgstr "Outage"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10541,11 +10578,6 @@ msgstr "Outage"
msgid "Output"
msgstr "Output"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Output Field {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10763,16 +10795,15 @@ msgstr "Perform administrative actions or permanently delete this user"
msgid "Permanent deletion. Enter the number of days."
msgstr "Permanent deletion. Enter the number of days."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Permanently Destroy Record"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr "Permanently Destroy"
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Permanently Destroy Records"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr "Permanently Destroy {objectLabel}"
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10873,6 +10904,12 @@ msgstr "Plan"
msgid "Plan switching has been cancelled."
msgstr "Plan switching has been cancelled."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr "Planned for {formattedStartDate}"
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11779,17 +11816,10 @@ msgstr "restore"
msgid "Restore"
msgstr "Restore"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Restore Record"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Restore Records"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr "Restore {objectLabel}"
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11815,7 +11845,6 @@ msgstr "Resume"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Retry"
@@ -12033,6 +12062,16 @@ msgstr "Scaffold a new app, then use the CLI to develop, publish, and distribute
msgid "Schedule"
msgstr "Schedule"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr "Schedule a maintenance window and notify all users"
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr "Scheduled maintenance: {startFormatted} — {endFormatted}"
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12497,7 +12536,7 @@ msgid "Select column..."
msgstr "Select column..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Select date & time"
@@ -12890,6 +12929,11 @@ msgstr "Sign in or Create an account"
msgid "Sign up"
msgstr "Sign up"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr "Sign-up is temporarily unavailable during maintenance."
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13204,6 +13248,11 @@ msgstr "Start a new enterprise subscription to re-enable enterprise features."
msgid "Start a new enterprise subscription."
msgstr "Start a new enterprise subscription."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr "Start date"
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14435,7 +14484,7 @@ msgid "Twenty fields"
msgstr "Twenty fields"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X Search"
@@ -14470,6 +14519,7 @@ msgstr "Two-factor authentication setup completed successfully!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14693,6 +14743,11 @@ msgstr "Untitled"
msgid "Untitled {labelSingular}"
msgstr "Untitled {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr "Untitled field"
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15081,6 +15136,11 @@ msgstr "Variable {variableKey} updated"
msgid "Variable deleted successfully."
msgstr "Variable deleted successfully."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr "Variable Name"
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15409,7 +15469,7 @@ msgstr ""
"Please try again in a few seconds, sorry."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Web Search"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Agregar nota"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Añadir objeto"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "Modelo de IA"
@@ -1366,11 +1366,6 @@ msgstr "IA no configurada. Establece OPENAI_API_KEY, ANTHROPIC_API_KEY o XAI_API
msgid "AI request prep"
msgstr "Preparación de la solicitud de IA"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Esquema de respuesta de IA"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "¿Estás seguro de que quieres eliminar este {relationObjectMetadataName
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "¿Está seguro de que desea eliminar esta habilidad? Esta acción no se puede deshacer."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "¿Está seguro de que desea destruir estos registros? Ya no serán recuperables."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "¿Está seguro de que desea destruir este registro? Ya no se podrá recuperar."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "¿Está seguro de que desea restaurar estos registros?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "¿Está seguro de que desea restaurar este registro?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Decide qué campos de subdirección deseas mostrar"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Eliminar webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Eliminar widget"
@@ -4781,7 +4781,6 @@ msgstr "Describa lo que quiere que la IA haga..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "destruir"
msgid "Destroy {objectLabelPlural}"
msgstr "Destruir {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Destruir registros"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Habilitar opciones de omisión"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Habilitar funciones específicas del modelo"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Fecha de finalización"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr "Error al guardar los permisos de rol: {errorMessage}"
msgid "Failed to save workspace instructions"
msgstr "Error al guardar las instrucciones del espacio de trabajo"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Campo eliminado"
msgid "Field name"
msgstr "Nombre del campo"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Nombre del campo"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "si"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Información"
msgid "Input"
msgstr "Entrada"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Instalando..."
msgid "Instances"
msgstr "Instancias"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Instrucciones"
msgid "Instructions Editor"
msgstr "Editor de instrucciones"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Instrucciones para la IA"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Diseños"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Más información"
@@ -8395,6 +8410,7 @@ msgstr "Gráfico de líneas"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Enlace"
@@ -8645,11 +8661,26 @@ msgstr "bucle"
msgid "Mail Account"
msgstr "Cuenta de Correo"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Falta el permiso para crear borradores de correos electrónicos."
msgid "Mission accomplished!"
msgstr "¡Misión cumplida!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Interrupción"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Interrupción"
msgid "Output"
msgstr "Salida"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Campo de salida {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Eliminación permanente. Introduzca el número de días."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Destruir registro permanentemente"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Destruir registros de forma permanente"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Plan"
msgid "Plan switching has been cancelled."
msgstr "El cambio de plan ha sido cancelado."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "restaurar"
msgid "Restore"
msgstr "Restaurar"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Restaurar registro"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Restaurar registros"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Resumen"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Reintentar"
@@ -12038,6 +12067,16 @@ msgstr "Crea la estructura inicial de una nueva aplicación y luego usa la CLI p
msgid "Schedule"
msgstr "Programación"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Seleccionar columna..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Seleccione fecha y hora"
@@ -12895,6 +12934,11 @@ msgstr "Inicia sesión o crea una cuenta"
msgid "Sign up"
msgstr "Registrarse"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Inicia una nueva suscripción Enterprise para volver a habilitar las fun
msgid "Start a new enterprise subscription."
msgstr "Inicia una nueva suscripción Enterprise."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14440,7 +14489,7 @@ msgid "Twenty fields"
msgstr "Campos de Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X Buscar"
@@ -14475,6 +14524,7 @@ msgstr "¡La configuración de la autenticación de dos factores se completó co
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14698,6 +14748,11 @@ msgstr "Sin título"
msgid "Untitled {labelSingular}"
msgstr "{labelSingular} sin título"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15086,6 +15141,11 @@ msgstr "Variable {variableKey} actualizada"
msgid "Variable deleted successfully."
msgstr "Variable eliminada con éxito."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15414,7 +15474,7 @@ msgstr ""
"Por favor, inténtalo de nuevo en unos segundos, disculpa."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Buscar en la Web"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Lisää muistiinpano"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Lisää objekti"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AI-malli"
@@ -1366,11 +1366,6 @@ msgstr "AI ei ole määritetty. Aseta ympäristöösi OPENAI_API_KEY, ANTHROPIC_
msgid "AI request prep"
msgstr "AI-pyynnön valmistelu"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "AI-vastauskaavio"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Haluatko varmasti poistaa tämän siihen liittyvän kohteen {relationObj
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Haluatko varmasti poistaa tämän taidon? Tätä toimintoa ei voi perua."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Oletko varma, että haluat tuhota nämä tietueet? Niitä ei voida enää palauttaa."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Oletko varma, että haluat tuhota tämän tietueen? Sitä ei voi enää palauttaa."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Oletko varma, että haluat palauttaa nämä tietueet?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Oletko varma, että haluat palauttaa tämän tietueen?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Päätä, mitkä alikentät haluat näyttää"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Poista Webhooks"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Poista pienoisohjelma"
@@ -4781,7 +4781,6 @@ msgstr "Kuvaile mitä haluat, että tekoäly tekee..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "tuhota"
msgid "Destroy {objectLabelPlural}"
msgstr "Tuhoa {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Tuhota tietueet"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Ota ohitusvaihtoehdot käyttöön"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Ota käyttöön mallikohtaiset ominaisuudet"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Päättymispäivä"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Työtilan ohjeiden tallentaminen epäonnistui"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Kenttä poistettu"
msgid "Field name"
msgstr "Kentän nimi"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Kentän nimi"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "jos"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Tiedot"
msgid "Input"
msgstr "Syöttö"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Asennetaan..."
msgid "Instances"
msgstr "Instanssit"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Ohjeet"
msgid "Instructions Editor"
msgstr "Ohjeeditori"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Ohjeet tekoälylle"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Ulkoasut"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Lue lisää"
@@ -8395,6 +8410,7 @@ msgstr "Viivakaavio"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Linkki"
@@ -8645,11 +8661,26 @@ msgstr "silmukka"
msgid "Mail Account"
msgstr "Sähköpostitili"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Käyttöoikeus sähköpostiluonnosten laatimiseen puuttuu."
msgid "Mission accomplished!"
msgstr "Tehtävä suoritettu!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Katkos"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Katkos"
msgid "Output"
msgstr "Tulos"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Tuloskenttä {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Pysyvä poistaminen. Anna päivien määrä."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Tuhota tiedosto pysyvästi"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Tuhota pysyvästi tietueet"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Suunnitelma"
msgid "Plan switching has been cancelled."
msgstr "Suunnitelman vaihto peruutettu."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "palauta"
msgid "Restore"
msgstr "Palauta"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Palauta tietue"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Palauta tietueet"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Jatka"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Yritä uudelleen"
@@ -12038,6 +12067,16 @@ msgstr "Luo uuden sovelluksen perusrakenne ja käytä sitten CLI:tä kehittämis
msgid "Schedule"
msgstr "Aikataulu"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Valitse sarake..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Valitse päivämäärä ja aika"
@@ -12895,6 +12934,11 @@ msgstr "Kirjaudu sisään tai luo tili"
msgid "Sign up"
msgstr "Rekisteröidy"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Aloita uusi Enterprise-tilaus ottaaksesi Enterprise-ominaisuudet uudelle
msgid "Start a new enterprise subscription."
msgstr "Aloita uusi Enterprise-tilaus."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Twenty-kentät"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X Haku"
@@ -14473,6 +14522,7 @@ msgstr "Kaksivaiheisen todennuksen asennus on valmis!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "Nimetön"
msgid "Untitled {labelSingular}"
msgstr "Nimetön {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "Muuttuja {variableKey} päivitetty"
msgid "Variable deleted successfully."
msgstr "Muuttuja poistettu onnistuneesti."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Yritä hetken kuluttua uudelleen."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Verkkohaku"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Ajouter une note"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Ajouter un objet"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "Modèle IA"
@@ -1366,11 +1366,6 @@ msgstr "IA non configurée. Définissez OPENAI_API_KEY, ANTHROPIC_API_KEY ou XAI
msgid "AI request prep"
msgstr "Préparation de la requête IA"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Schéma de réponse IA"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Voulez-vous vraiment supprimer ce {relationObjectMetadataNameSingular} a
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Voulez-vous vraiment supprimer cette compétence ? Cette action ne peut pas être annulée."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Êtes-vous sûr de vouloir détruire ces enregistrements ? Ils ne seront plus récupérables."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Êtes-vous sûr de vouloir détruire cet enregistrement ? Il ne pourra pas être récupéré."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Êtes-vous sûr de vouloir restaurer ces enregistrements ?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Êtes-vous sûr de vouloir restaurer cet enregistrement ?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Décidez quels champs de sous-adresse vous souhaitez afficher"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Supprimer le webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Supprimer le widget"
@@ -4781,7 +4781,6 @@ msgstr "Décrivez ce que vous voulez que l'IA fasse..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "détruire"
msgid "Destroy {objectLabelPlural}"
msgstr "Détruire {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Détruire les enregistrements"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Activer les options de contournement"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Activer les fonctionnalités spécifiques au modèle"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Date de fin"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Impossible d'enregistrer les instructions de l'espace de travail"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Champ supprimé"
msgid "Field name"
msgstr "Nom du champ"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Nom du champ"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "si"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Informations"
msgid "Input"
msgstr "Entrée "
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Installation en cours..."
msgid "Instances"
msgstr "Instances"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Instructions"
msgid "Instructions Editor"
msgstr "Éditeur d'instructions"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Instructions pour l'IA"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Dispositions"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "En savoir plus"
@@ -8395,6 +8410,7 @@ msgstr ""
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Lien"
@@ -8645,11 +8661,26 @@ msgstr "boucle"
msgid "Mail Account"
msgstr "Compte de messagerie"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Autorisation manquante pour rédiger des brouillons d'e-mails."
msgid "Mission accomplished!"
msgstr "Mission accomplie !"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Panne"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Panne"
msgid "Output"
msgstr "Sortie"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Champ de sortie {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Suppression permanente. Entrez le nombre de jours."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Détruire définitivement l'enregistrement"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Détruire définitivement les enregistrements"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Plan"
msgid "Plan switching has been cancelled."
msgstr "Le changement de plan a été annulé."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "restaurer"
msgid "Restore"
msgstr "Restaurer"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Restaurer l'enregistrement"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Restaurer les enregistrements"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Reprendre"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Recommencer"
@@ -12038,6 +12067,16 @@ msgstr "Générez le squelette d'une nouvelle application, puis utilisez la CLI
msgid "Schedule"
msgstr "Planning"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Sélectionnez la colonne..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Sélectionnez la date et l'heure"
@@ -12895,6 +12934,11 @@ msgstr "Se connecter ou Créer un compte"
msgid "Sign up"
msgstr "S'inscrire"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Démarrez un nouvel abonnement Enterprise pour réactiver les fonctionna
msgid "Start a new enterprise subscription."
msgstr "Démarrez un nouvel abonnement Enterprise."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14440,7 +14489,7 @@ msgid "Twenty fields"
msgstr "Champs Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Recherche Twitter/X"
@@ -14475,6 +14524,7 @@ msgstr "Configuration de l'authentification à deux facteurs terminée avec succ
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14698,6 +14748,11 @@ msgstr "Sans titre"
msgid "Untitled {labelSingular}"
msgstr "{labelSingular} sans titre"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15086,6 +15141,11 @@ msgstr ""
msgid "Variable deleted successfully."
msgstr "Variable supprimée avec succès."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15414,7 +15474,7 @@ msgstr ""
"Veuillez réessayer dans quelques secondes, désolé."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Recherche Web"
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "הוסף הערה"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "הוסף אובייקט"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "מודל AI"
@@ -1366,11 +1366,6 @@ msgstr "ה-AI אינו מוגדר. הגדר את OPENAI_API_KEY, ANTHROPIC_API_K
msgid "AI request prep"
msgstr "הכנת בקשת AI"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "סכמת תגובת AI"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "האם אתה בטוח שברצונך למחוק את ה{relationObjectM
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "האם אתה בטוח שברצונך למחוק את המיומנות הזו? פעולה זו אינה ניתנת לביטול."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "האם אתה בטוח שברצונך להשמיד את הרשומות הללו? רשומות אלו לא תהיינה ניתנות לשחזור."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "האם אתה בטוח שברצונך להשמיד את הרשומה הזו? היא לא תהיה ניתנת לשחזור עוד."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "האם אתה בטוח שברצונך לשחזר את הרשומות הללו?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "האם אתה בטוח שברצונך לשחזר את הרשומה הזו?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "החליטו אילו שדות כתובת משנה אתם רוצים להציג"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "מחק Webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "מחק וידג'ט"
@@ -4781,7 +4781,6 @@ msgstr "תאר מה אתה רוצה שהבינה המלאכותית תעשה..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "הרוס"
msgid "Destroy {objectLabelPlural}"
msgstr "השמדת {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "השמד רשומות"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "הפעל אפשרויות עקיפה"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "הפעל תכונות ספציפיות לדגם"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "תאריך סיום"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "אירע כשל בשמירת הנחיות סביבת העבודה"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "השדה נמחק"
msgid "Field name"
msgstr "שם שדה"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "שם שדה"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "אם"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "מידע"
msgid "Input"
msgstr "קלט"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "מתקין..."
msgid "Instances"
msgstr "מופעים"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "הוראות"
msgid "Instructions Editor"
msgstr "עורך ההוראות"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "הוראות לבינה מלאכותית"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "פריסות"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "למידע נוסף"
@@ -8395,6 +8410,7 @@ msgstr "תרשים קו"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "קישור"
@@ -8645,11 +8661,26 @@ msgstr "לולאה"
msgid "Mail Account"
msgstr "חשבון דואר"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "אין הרשאה ליצירת טיוטות אימייל."
msgid "Mission accomplished!"
msgstr "המשימה הושלמה!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "השבתה"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "השבתה"
msgid "Output"
msgstr "פלט"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "שדה פלט {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "מחיקה קבועה. הזן את מספר הימים."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "השמד לצמיתות את הרשומה"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "השמד לצמיתות את הרשומות"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "תוכנית"
msgid "Plan switching has been cancelled."
msgstr "החלפת התוכנית בוטלה."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "שחזור"
msgid "Restore"
msgstr "שחזור"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "שחזור רשומה"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "שחזור רשומות"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "חדש"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "נסה שוב"
@@ -12038,6 +12067,16 @@ msgstr "צור שלד לאפליקציה חדשה, ולאחר מכן השתמש
msgid "Schedule"
msgstr "לוח זמנים"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "בחר עמודה..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "בחר תאריך ושעה"
@@ -12895,6 +12934,11 @@ msgstr "היכנס או צור חשבון"
msgid "Sign up"
msgstr "\\"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "התחל מנוי Enterprise חדש כדי להפעיל מחדש את ת
msgid "Start a new enterprise subscription."
msgstr "התחל מנוי Enterprise חדש."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "שדות Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "חיפוש Twitter/X"
@@ -14473,6 +14522,7 @@ msgstr "הגדרת האימות הדו-שלבי הושלמה בהצלחה!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "ללא כותרת"
msgid "Untitled {labelSingular}"
msgstr "{labelSingular} ללא כותרת"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "המשתנה {variableKey} עודכן"
msgid "Variable deleted successfully."
msgstr "המשתנה נמחק בהצלחה."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"אנא נסה שוב בעוד מספר שניות, סליחה."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "חיפוש באינטרנט"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Jegyzet hozzáadása"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Objektum hozzáadása"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AI modell"
@@ -1366,11 +1366,6 @@ msgstr "Az AI nincs beállítva. Állítsa be a környezetében az OPENAI_API_KE
msgid "AI request prep"
msgstr "MI-kérés előkészítése"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "AI válasz séma"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Biztosan törli ezt a kapcsolódó {relationObjectMetadataNameSingular}
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Biztosan törölni szeretné ezt a készséget? Ez a művelet nem vonható vissza."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Biztos, hogy megsemmisíti ezeket a rekordokat? Többé nem lesznek visszaállíthatók."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Biztosan meg akarja semmisíteni ezt a rekordot? Többé nem állítható helyre."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Biztos, hogy vissza akarja állítani ezeket a rekordokat?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Biztos, hogy vissza akarja állítani ezt a rekordot?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Döntse el, melyik Al-cím mezőket szeretné megjeleníteni"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Webhook törlése"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Widget törlése"
@@ -4781,7 +4781,6 @@ msgstr "Írja le, mit szeretne, hogy az AI végrehajtson..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "törlés"
msgid "Destroy {objectLabelPlural}"
msgstr "Megsemmisítés {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Rekordok megsemmisítése"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Kikerülési opciók engedélyezése"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Model-specifikus funkciók engedélyezése"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Befejezés dátuma"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Nem sikerült menteni a munkaterületre vonatkozó utasításokat"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Mező törölve"
msgid "Field name"
msgstr "Mező neve"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Mező neve"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "ha"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Információk"
msgid "Input"
msgstr "Bemenet"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Telepítés..."
msgid "Instances"
msgstr "Példányok"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Utasítások"
msgid "Instructions Editor"
msgstr "Utasításszerkesztő"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Utasítások az AI-nak"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Elrendezések"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "További információk"
@@ -8395,6 +8410,7 @@ msgstr "Vonaldiagram"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Link"
@@ -8645,11 +8661,26 @@ msgstr "ciklus"
msgid "Mail Account"
msgstr "Levélfiók"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Hiányzik az e-mail-piszkozatok létrehozásához szükséges engedély.
msgid "Mission accomplished!"
msgstr "Küldetés teljesítve!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Leállás"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Leállás"
msgid "Output"
msgstr "Kimenet"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Kimeneti mező {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Végleges törlés. Írja be a napok számát."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Rekord végleges megsemmisítése"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Rekordok végleges megsemmisítése"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Csomag"
msgid "Plan switching has been cancelled."
msgstr "A csomagváltás törlésre került."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "visszaállítás"
msgid "Restore"
msgstr "Visszaállítás"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Rekord visszaállítása"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Rekordok visszaállítása"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Összefoglaló"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Újrapróbálkozás"
@@ -12038,6 +12067,16 @@ msgstr "Hozz létre egy új alkalmazásvázat, majd használd a CLI-t a fejleszt
msgid "Schedule"
msgstr "Ütemezés"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Oszlop kiválasztása..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Válasszon dátumot és időt"
@@ -12895,6 +12934,11 @@ msgstr "Bejelentkezés vagy Fiók létrehozása"
msgid "Sign up"
msgstr "Regisztráció"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Indítson új Enterprise előfizetést az Enterprise funkciók újbóli
msgid "Start a new enterprise subscription."
msgstr "Indítson új Enterprise előfizetést."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Twenty mezők"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X Keresés"
@@ -14473,6 +14522,7 @@ msgstr "Kétfaktoros hitelesítési beállítás sikeresen befejezve!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "Cím nélkül"
msgid "Untitled {labelSingular}"
msgstr "Cím nélküli {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "A(z) {variableKey} változó frissítve"
msgid "Variable deleted successfully."
msgstr "A változó sikeresen törölve."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Kérjük, próbálja meg néhány másodperc múlva, elnézést."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Webes Keresés"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Aggiungi nota"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Aggiungi oggetto"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "Modello AI"
@@ -1366,11 +1366,6 @@ msgstr "IA non configurata. Imposta OPENAI_API_KEY, ANTHROPIC_API_KEY o XAI_API_
msgid "AI request prep"
msgstr "Preparazione della richiesta IA"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Schema di risposta AI"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Sei sicuro di voler eliminare questo {relationObjectMetadataNameSingular
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Sei sicuro di voler eliminare questa abilità? Questa azione non può essere annullata."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Sei sicuro di voler distruggere questi record? Non saranno più recuperabili."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Sei sicuro di voler distruggere questo record? Non potrà più essere recuperato."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Sei sicuro di voler ripristinare questi record?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Sei sicuro di voler ripristinare questo record?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Decidere quali campi del sottoindirizzo visualizzare"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Elimina webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Elimina widget"
@@ -4781,7 +4781,6 @@ msgstr "Descrivi cosa vuoi che l'AI faccia..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "distruggi"
msgid "Destroy {objectLabelPlural}"
msgstr "Distruggi {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Distruggi record"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Abilita opzioni di bypass"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Abilita le funzionalità specifiche del modello"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Data di fine"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Impossibile salvare le istruzioni dello spazio di lavoro"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Campo eliminato"
msgid "Field name"
msgstr "Nome del campo"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Nome del campo"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "se"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Informazioni"
msgid "Input"
msgstr "Input"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Installazione in corso..."
msgid "Instances"
msgstr "Istanze"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Istruzioni"
msgid "Instructions Editor"
msgstr "Editor delle istruzioni"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Istruzioni per l'AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Disposizioni"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Ulteriori informazioni"
@@ -8395,6 +8410,7 @@ msgstr "Grafico a Linea"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Collegamento"
@@ -8645,11 +8661,26 @@ msgstr "ciclo"
msgid "Mail Account"
msgstr "Account di Posta"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Manca l'autorizzazione a creare bozze di email."
msgid "Mission accomplished!"
msgstr "Missione compiuta!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Interruzione"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Interruzione"
msgid "Output"
msgstr "Output"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Campo di Output {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Cancellazione permanente. Inserisci il numero di giorni."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Distruggi permanentemente il record"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Distruggi definitivamente i record"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Piano"
msgid "Plan switching has been cancelled."
msgstr "Il cambio di piano è stato annullato."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "ripristina"
msgid "Restore"
msgstr "Ripristina"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Ripristina record"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Ripristina record"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Ricomincia"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Riprova"
@@ -12038,6 +12067,16 @@ msgstr "Genera una nuova app, quindi usa la CLI per svilupparla, pubblicarla e d
msgid "Schedule"
msgstr "Pianifica"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Seleziona colonna..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Seleziona una data e un'ora"
@@ -12895,6 +12934,11 @@ msgstr "Accedi o Crea un account"
msgid "Sign up"
msgstr "Registrati"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Avvia un nuovo abbonamento Enterprise per riattivare le funzionalità En
msgid "Start a new enterprise subscription."
msgstr "Avvia un nuovo abbonamento Enterprise."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14440,7 +14489,7 @@ msgid "Twenty fields"
msgstr "Campi di Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Cerca Twitter/X"
@@ -14475,6 +14524,7 @@ msgstr "Configurazione dell'autenticazione a due fattori completata con successo
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14698,6 +14748,11 @@ msgstr "Senza titolo"
msgid "Untitled {labelSingular}"
msgstr "{labelSingular} senza titolo"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15086,6 +15141,11 @@ msgstr "Variabile {variableKey} aggiornata"
msgid "Variable deleted successfully."
msgstr "Variabile eliminata con successo."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15414,7 +15474,7 @@ msgstr ""
"Riprova tra qualche secondo, ci dispiace."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Cerca sul Web"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "メモを追加"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "オブジェクトを追加"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AIモデル"
@@ -1366,11 +1366,6 @@ msgstr "AI が構成されていません。環境変数に OPENAI_API_KEY、ANT
msgid "AI request prep"
msgstr "AI リクエストの準備"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "AIレスポンススキーマ"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "この関連する{relationObjectMetadataNameSingular}を削除しても
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "このスキルを削除してもよろしいですか?この操作は元に戻せません。"
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "これらのレコードを本当に破壊しますか? もう復元できません。"
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "このレコードを削除してもよろしいですか? もう復元することはできません。"
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "これらのレコードを復元してもよろしいですか?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "このレコードを復元しますか?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "表示したいサブアドレスフィールドを選択してください"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Webhookを削除"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "ウィジェットを削除"
@@ -4781,7 +4781,6 @@ msgstr "AIにさせたいことを説明してください..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "破棄"
msgid "Destroy {objectLabelPlural}"
msgstr "{objectLabelPlural}を破壊する"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "レコードを破壊"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "バイパスオプションを有効にする"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "モデル固有の機能を有効にする"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "終了日"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "ワークスペースの指示を保存できませんでした"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "フィールドを削除しました"
msgid "Field name"
msgstr "フィールド名"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "フィールド名"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "条件"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "情報"
msgid "Input"
msgstr "入力"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "インストール中..."
msgid "Instances"
msgstr "インスタンス"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "指示"
msgid "Instructions Editor"
msgstr "指示エディター"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "AIのための指示"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "レイアウト"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "さらに詳しく"
@@ -8395,6 +8410,7 @@ msgstr "ラインチャート"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "リンク"
@@ -8645,11 +8661,26 @@ msgstr "ループ"
msgid "Mail Account"
msgstr "メールアカウント"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "メールの下書き権限がありません。"
msgid "Mission accomplished!"
msgstr "任務完了!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "障害"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "障害"
msgid "Output"
msgstr "出力"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "出力フィールド {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "永続的な削除。日数を入力してください。"
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "レコードを永久に削除"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "レコードを完全に破壊"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "プラン"
msgid "Plan switching has been cancelled."
msgstr "プラン切替がキャンセルされました。"
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "復元"
msgid "Restore"
msgstr "復元"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "レコードを復元"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "レコードを復元"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "履歴書"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "リトライ"
@@ -12038,6 +12067,16 @@ msgstr "新しいアプリのひな型を作成し、CLI を使用して開発
msgid "Schedule"
msgstr "スケジュール"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "列を選択…"
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "日付と時刻を選択"
@@ -12895,6 +12934,11 @@ msgstr "サインインまたはアカウントを作成"
msgid "Sign up"
msgstr "サインアップ"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Enterprise 機能を再度有効化するには、新しい Enterprise
msgid "Start a new enterprise subscription."
msgstr "新しい Enterprise サブスクリプションを開始してください。"
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Twenty のフィールド"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X 検索"
@@ -14473,6 +14522,7 @@ msgstr "二要素認証のセットアップが正常に完了しました!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "無題"
msgid "Untitled {labelSingular}"
msgstr "無題の{labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "変数 {variableKey} を更新しました"
msgid "Variable deleted successfully."
msgstr "変数が正常に削除されました"
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"数秒後にもう一度お試しください。申し訳ありません。"
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "ウェブ検索"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "메모 추가"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "개체 추가"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AI 모델"
@@ -1366,11 +1366,6 @@ msgstr "AI가 구성되지 않았습니다. 환경에 OPENAI_API_KEY, ANTHROPIC_
msgid "AI request prep"
msgstr "AI 요청 준비"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "AI 응답 스키마"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "이 관련 {relationObjectMetadataNameSingular}을(를) 삭제하시겠
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "이 스킬을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "이 기록들을 파괴하시겠습니까? 더 이상 복구할 수 없습니다."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "이 기록을 파괴하시겠습니까? 더 이상 복구할 수 없습니다."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "이 기록들을 복원하시겠습니까?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "이 기록을 복원하시겠습니까?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "표시할 하위 주소 필드를 선택하세요"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Webhook 삭제"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "위젯 삭제"
@@ -4781,7 +4781,6 @@ msgstr "AI에 원하는 작업을 설명하세요..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "파기"
msgid "Destroy {objectLabelPlural}"
msgstr "{objectLabelPlural} 파기"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "기록 파기"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "우회 옵션 활성화"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "모델별 기능 활성화"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "종료 날짜"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "워크스페이스 지침을 저장하지 못했습니다"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "필드 삭제됨"
msgid "Field name"
msgstr "필드 이름"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "필드 이름"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "만약"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "정보"
msgid "Input"
msgstr "입력"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "설치 중..."
msgid "Instances"
msgstr "인스턴스"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "지침"
msgid "Instructions Editor"
msgstr "지침 편집기"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "AI 사용 지침"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "레이아웃"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "자세히 알아보기"
@@ -8395,6 +8410,7 @@ msgstr "선형 차트"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "링크"
@@ -8645,11 +8661,26 @@ msgstr "반복"
msgid "Mail Account"
msgstr "메일 계정"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "이메일 초안 작성 권한이 없습니다."
msgid "Mission accomplished!"
msgstr "임무 완료!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "장애"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "장애"
msgid "Output"
msgstr "출력"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "출력 필드 {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "영구 삭제. 날짜를 입력하세요."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "기록을 영구적으로 파기합니다"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "기록을 영구적으로 파기합니다"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "플랜"
msgid "Plan switching has been cancelled."
msgstr "플랜 전환이 취소되었습니다."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "복원"
msgid "Restore"
msgstr "복원"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "레코드 복원"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "기록 복원"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "다시 시작"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "재시도"
@@ -12038,6 +12067,16 @@ msgstr "새 앱을 스캐폴딩한 다음 CLI를 사용해 개발, 게시 및
msgid "Schedule"
msgstr "일정"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "열 선택..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "날짜 및 시간 선택"
@@ -12895,6 +12934,11 @@ msgstr "로그인 또는 계정 생성"
msgid "Sign up"
msgstr "가입하기"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "엔터프라이즈 기능을 다시 사용하려면 새 엔터프라이
msgid "Start a new enterprise subscription."
msgstr "새 엔터프라이즈 구독을 시작하세요."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Twenty 필드"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "트위터/X 검색"
@@ -14473,6 +14522,7 @@ msgstr "이중 인증 설정이 성공적으로 완료되었습니다!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "제목 없음"
msgid "Untitled {labelSingular}"
msgstr "제목 없음 {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "변수 {variableKey}가 업데이트됨"
msgid "Variable deleted successfully."
msgstr "변수가 성공적으로 삭제되었습니다."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"잠시 후 다시 시도해 주세요. 불편을 드려 죄송합니다."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "웹 검색"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Voeg notitie toe"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Object toevoegen"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AI Model"
@@ -1366,11 +1366,6 @@ msgstr "AI niet geconfigureerd. Stel OPENAI_API_KEY, ANTHROPIC_API_KEY of XAI_AP
msgid "AI request prep"
msgstr "Voorbereiding AI-verzoek"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "AI Antwoord Schema"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Weet je zeker dat je deze gerelateerde {relationObjectMetadataNameSingul
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Weet je zeker dat je deze vaardigheid wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Weet je zeker dat je deze records wilt vernietigen? Ze zijn hierna niet meer te herstellen."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Weet je zeker dat je dit record wilt vernietigen? Het kan niet meer worden hersteld."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Weet je zeker dat je deze records wilt herstellen?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Weet je zeker dat je dit record wilt herstellen?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Beslis welke sub-adresvelden je wilt weergeven"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Verwijder webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Widget verwijderen"
@@ -4781,7 +4781,6 @@ msgstr "Beschrijf wat je wilt dat de AI doet..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "vernietigen"
msgid "Destroy {objectLabelPlural}"
msgstr "Vernietig {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Vernietig Records"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Bypass-opties inschakelen"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Activeer model-specifieke functies"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Einddatum"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Het opslaan van werkruimte-instructies is mislukt"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Veld verwijderd"
msgid "Field name"
msgstr "Veldnaam"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Veldnaam"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "als"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Informatie"
msgid "Input"
msgstr "Invoer"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Installeren..."
msgid "Instances"
msgstr "Instanties"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Instructies"
msgid "Instructions Editor"
msgstr "Editor voor instructies"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Instructies voor AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Lay-outs"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Meer informatie"
@@ -8395,6 +8410,7 @@ msgstr "Lijngrafiek"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Link"
@@ -8645,11 +8661,26 @@ msgstr "lus"
msgid "Mail Account"
msgstr "Mailaccount"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Toestemming voor het opstellen van e-mailconcepten ontbreekt."
msgid "Mission accomplished!"
msgstr "Missie volbracht!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Storing"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Storing"
msgid "Output"
msgstr "Uitvoer"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Uitvoerveld {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Definitieve verwijdering. Voer het aantal dagen in."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Vernietig Record Permanent"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Vernietig Records Permanent"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Plan"
msgid "Plan switching has been cancelled."
msgstr "Planwissel is geannuleerd."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "herstel"
msgid "Restore"
msgstr "Herstel"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Record Herstellen"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Records Herstellen"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Hervatten"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Opnieuw proberen"
@@ -12038,6 +12067,16 @@ msgstr "Zet een nieuwe app op en gebruik vervolgens de CLI om te ontwikkelen, pu
msgid "Schedule"
msgstr "Schema"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Selecteer kolom..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Selecteer datum en tijd"
@@ -12895,6 +12934,11 @@ msgstr "Inloggen of een account aanmaken"
msgid "Sign up"
msgstr "Aanmelden"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Start een nieuw Enterprise-abonnement om Enterprise-functies opnieuw in
msgid "Start a new enterprise subscription."
msgstr "Start een nieuw Enterprise-abonnement."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14440,7 +14489,7 @@ msgid "Twenty fields"
msgstr "Twenty-velden"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X Zoeken"
@@ -14475,6 +14524,7 @@ msgstr "Two-factor authenticatie setup met succes voltooid!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14698,6 +14748,11 @@ msgstr "Naamloos"
msgid "Untitled {labelSingular}"
msgstr "Naamloze {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15086,6 +15141,11 @@ msgstr "Variabele {variableKey} bijgewerkt"
msgid "Variable deleted successfully."
msgstr "Variabele succesvol verwijderd."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15414,7 +15474,7 @@ msgstr ""
"Probeer het over enkele seconden opnieuw, excuses."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Web Zoeken"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Legg til notat"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Legg til objekt"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AI-modell"
@@ -1366,11 +1366,6 @@ msgstr ""
msgid "AI request prep"
msgstr "Forberedelse av AI-forespørsel"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "AI-svarskjema"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Er du sikker på at du vil slette denne relaterte {relationObjectMetadat
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Er du sikker på at du vil slette denne ferdigheten? Denne handlingen kan ikke angres."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Er du sikker på at du vil ødelegge disse postene? De kan ikke gjenopprettes."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Er du sikker på at du vil ødelegge denne posten? Den kan ikke gjenopprettes."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Er du sikker på at du vil gjenopprette disse postene?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Er du sikker på at du vil gjenopprette denne posten?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Bestem hvilke underadressefelt du vil vise"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Slett webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Slett widget"
@@ -4781,7 +4781,6 @@ msgstr "Beskriv hva du vil at AI skal gjøre..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "ødelegg"
msgid "Destroy {objectLabelPlural}"
msgstr "Ødelegg {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Ødelegg poster"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Aktiver omgåelsesalternativer"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Aktiver modellspesifikke funksjoner"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Sluttdato"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Kunne ikke lagre instruksjoner for arbeidsområdet"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Felt slettet"
msgid "Field name"
msgstr "Feltnavn"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Feltnavn"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "hvis"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Info"
msgid "Input"
msgstr "Inndata"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Installerer..."
msgid "Instances"
msgstr "Instanser"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Instruksjoner"
msgid "Instructions Editor"
msgstr "Instruksjonsredigerer"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Instruksjoner for AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Oppsett"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Les mer"
@@ -8395,6 +8410,7 @@ msgstr "Linjediagram"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Lenke"
@@ -8645,11 +8661,26 @@ msgstr "sløyfe"
msgid "Mail Account"
msgstr "Mailkonto"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Mangler tillatelse til å opprette e-postutkast."
msgid "Mission accomplished!"
msgstr "Oppdrag utført!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Nedetid"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Nedetid"
msgid "Output"
msgstr "Utdata"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Utdatafelt {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Permanent sletting. Skriv inn antall dager."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Permanent ødelegg post"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Permanent ødelegge poster"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Plan"
msgid "Plan switching has been cancelled."
msgstr "Planbytte har blitt avbrutt."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "gjenopprett"
msgid "Restore"
msgstr "Gjenopprett"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Gjenopprett post"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Gjenopprett poster"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Gjenoppta"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Prøv igjen"
@@ -12038,6 +12067,16 @@ msgstr "Opprett grunnstrukturen for en ny app, og bruk deretter CLI til å utvik
msgid "Schedule"
msgstr "Tidsplan"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Velg kolonne..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Velg dato og klokkeslett"
@@ -12895,6 +12934,11 @@ msgstr "Logg inn eller opprett en konto"
msgid "Sign up"
msgstr "Registrer deg"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Start et nytt Enterprise-abonnement for å aktivere Enterprise-funksjone
msgid "Start a new enterprise subscription."
msgstr "Start et nytt Enterprise-abonnement."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Twenty-felter"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X Søk"
@@ -14473,6 +14522,7 @@ msgstr "Tofaktorautentiseringsoppsett fullført!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "Uten tittel"
msgid "Untitled {labelSingular}"
msgstr "Uten tittel {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "Variabelen {variableKey} er oppdatert"
msgid "Variable deleted successfully."
msgstr "Variabel slettet vellykket."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Prøv igjen om noen sekunder, takk."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Web Søk"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Dodaj notatkę"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Dodaj obiekt"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "Model AI"
@@ -1366,11 +1366,6 @@ msgstr "AI nie jest skonfigurowane. Ustaw w swoim środowisku OPENAI_API_KEY, AN
msgid "AI request prep"
msgstr "Przygotowanie żądania AI"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Schemat odpowiedzi AI"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Czy na pewno chcesz usunąć ten powiązany {relationObjectMetadataNameS
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Czy na pewno chcesz usunąć tę umiejętność? Tej operacji nie można cofnąć."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Czy na pewno chcesz zniszczyć te rekordy? Nie będą już odzyskiwalne."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Czy na pewno chcesz zniszczyć ten rekord? Nie będzie można go już odzyskać."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Czy na pewno chcesz przywrócić te rekordy?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Czy na pewno chcesz przywrócić ten rekord?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Zdecyduj, które pola podrzędnego adresu chcesz wyświetlić"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Usuń webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Usuń widżet"
@@ -4781,7 +4781,6 @@ msgstr "Opisz, co chcesz, aby AI zrobiło..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "zniszcz"
msgid "Destroy {objectLabelPlural}"
msgstr "Zniszcz {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Zniszcz rekordy"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Włącz opcje obejścia"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Włącz funkcje specyficzne dla modelu"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Data zakończenia"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Nie udało się zapisać instrukcji dla obszaru roboczego"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Pole usunięte"
msgid "Field name"
msgstr "Nazwa pola"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Nazwa pola"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "jeśli"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Informacje"
msgid "Input"
msgstr "Dane wejściowe"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Instalowanie..."
msgid "Instances"
msgstr "Instancje"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Instrukcje"
msgid "Instructions Editor"
msgstr "Edytor instrukcji"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Instrukcje dla AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Układy"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Dowiedz się więcej"
@@ -8395,6 +8410,7 @@ msgstr "Wykres liniowy"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Link"
@@ -8645,11 +8661,26 @@ msgstr "pętla"
msgid "Mail Account"
msgstr "Konto Mailowe"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Brak uprawnień do tworzenia szkiców wiadomości e-mail."
msgid "Mission accomplished!"
msgstr "Misja zakończona!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Awaria"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Awaria"
msgid "Output"
msgstr "Wynik"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Pole Wyjściowe {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Stałe usunięcie. Wprowadź liczbę dni."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Trwale zniszcz rekord"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Trwale zniszcz rekordy"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Plan"
msgid "Plan switching has been cancelled."
msgstr "Przełączanie planu zostało anulowane."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "przywróć"
msgid "Restore"
msgstr "Przywróć"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Przywróć rekord"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Przywróć rekordy"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Anuluj"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Ponów próbę"
@@ -12038,6 +12067,16 @@ msgstr "Wygeneruj szkielet nowej aplikacji, a następnie użyj CLI, aby rozwija
msgid "Schedule"
msgstr "Harmonogram"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Wybierz kolumnę..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Wybierz datę i godzinę"
@@ -12895,6 +12934,11 @@ msgstr "Zaloguj się lub utwórz konto"
msgid "Sign up"
msgstr "Zarejestruj się"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Rozpocznij nową subskrypcję Enterprise, aby ponownie włączyć funkcj
msgid "Start a new enterprise subscription."
msgstr "Rozpocznij nową subskrypcję Enterprise."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Pola Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Szukaj na Twitterze/X"
@@ -14473,6 +14522,7 @@ msgstr "Konfiguracja uwierzytelniania dwuskładnikowego zakończona pomyślnie!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "Nienazwana"
msgid "Untitled {labelSingular}"
msgstr "Bez tytułu {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "Zmienna {variableKey} została zaktualizowana"
msgid "Variable deleted successfully."
msgstr "Zmienna została usunięta pomyślnie."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Spróbuj ponownie za kilka sekund, przepraszamy."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Szukaj w sieci"
+122 -62
View File
@@ -1007,6 +1007,7 @@ msgstr ""
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr ""
@@ -1347,7 +1348,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr ""
@@ -1361,11 +1361,6 @@ msgstr ""
msgid "AI request prep"
msgstr ""
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr ""
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2008,24 +2003,28 @@ msgstr ""
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr ""
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
@@ -4426,7 +4425,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr ""
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4720,6 +4719,7 @@ msgstr ""
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr ""
@@ -4776,7 +4776,6 @@ msgstr ""
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4796,11 +4795,6 @@ msgstr ""
msgid "Destroy {objectLabelPlural}"
msgstr ""
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr ""
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5471,15 +5465,25 @@ msgid "Enable bypass options"
msgstr ""
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr ""
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr ""
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6405,6 +6409,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr ""
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6567,11 +6576,6 @@ msgstr ""
msgid "Field name"
msgstr ""
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr ""
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7409,6 +7413,11 @@ msgstr ""
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7625,6 +7634,11 @@ msgstr ""
msgid "Input"
msgstr ""
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7705,6 +7719,11 @@ msgstr ""
msgid "Instances"
msgstr ""
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7715,11 +7734,6 @@ msgstr ""
msgid "Instructions Editor"
msgstr ""
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr ""
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8280,6 +8294,7 @@ msgstr ""
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr ""
@@ -8390,6 +8405,7 @@ msgstr ""
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr ""
@@ -8640,11 +8656,26 @@ msgstr ""
msgid "Mail Account"
msgstr ""
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8955,6 +8986,11 @@ msgstr ""
msgid "Mission accomplished!"
msgstr ""
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10531,6 +10567,7 @@ msgstr ""
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10541,11 +10578,6 @@ msgstr ""
msgid "Output"
msgstr ""
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr ""
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10763,15 +10795,14 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr ""
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
@@ -10873,6 +10904,12 @@ msgstr ""
msgid "Plan switching has been cancelled."
msgstr ""
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11779,16 +11816,9 @@ msgstr ""
msgid "Restore"
msgstr ""
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr ""
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
@@ -11815,7 +11845,6 @@ msgstr ""
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr ""
@@ -12033,6 +12062,16 @@ msgstr ""
msgid "Schedule"
msgstr ""
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12497,7 +12536,7 @@ msgid "Select column..."
msgstr ""
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr ""
@@ -12890,6 +12929,11 @@ msgstr ""
msgid "Sign up"
msgstr ""
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13204,6 +13248,11 @@ msgstr ""
msgid "Start a new enterprise subscription."
msgstr ""
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14433,7 +14482,7 @@ msgid "Twenty fields"
msgstr ""
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr ""
@@ -14468,6 +14517,7 @@ msgstr ""
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14691,6 +14741,11 @@ msgstr ""
msgid "Untitled {labelSingular}"
msgstr ""
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15079,6 +15134,11 @@ msgstr ""
msgid "Variable deleted successfully."
msgstr ""
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15405,7 +15465,7 @@ msgid ""
msgstr ""
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr ""
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Adicionar nota"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Adicionar Objeto"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "Modelo de IA"
@@ -1366,11 +1366,6 @@ msgstr "IA não configurada. Defina OPENAI_API_KEY, ANTHROPIC_API_KEY ou XAI_API
msgid "AI request prep"
msgstr "Preparação da solicitação de IA"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Esquema de Resposta de IA"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Tem certeza de que deseja excluir este(a) {relationObjectMetadataNameSin
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Tem certeza que deseja excluir esta habilidade? Esta ação não pode ser desfeita."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Tem certeza de que deseja destruir esses registros? Eles não serão mais recuperáveis."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Tem certeza de que deseja destruir este registro? Ele não poderá ser recuperado mais."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Tem certeza de que deseja restaurar esses registros?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Tem certeza de que deseja restaurar este registro?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Decidir quais campos de sub-endereço você deseja exibir"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Excluir Webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Excluir widget"
@@ -4781,7 +4781,6 @@ msgstr "Descreva o que você quer que a IA faça..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "destruir"
msgid "Destroy {objectLabelPlural}"
msgstr "Destruir {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Destruir Registros"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Ativar opções de contorno"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Habilitar recursos específicos do modelo"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Data Final"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Falha ao salvar as instruções do espaço de trabalho"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Campo excluído"
msgid "Field name"
msgstr "Nome do campo"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Nome do campo"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "se"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Informações"
msgid "Input"
msgstr "Entrada"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Instalando..."
msgid "Instances"
msgstr "Instâncias"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Instruções"
msgid "Instructions Editor"
msgstr "Editor de instruções"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Instruções para IA"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Layouts"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Saiba mais"
@@ -8395,6 +8410,7 @@ msgstr "Gráfico de Linhas"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Link"
@@ -8645,11 +8661,26 @@ msgstr "loop"
msgid "Mail Account"
msgstr "Conta de Email"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Falta permissão para criar rascunhos de e-mail."
msgid "Mission accomplished!"
msgstr "Missão cumprida!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Interrupção"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Interrupção"
msgid "Output"
msgstr "Saída"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Campo de Saída {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Exclusão permanente. Insira o número de dias."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Destruir Registro Permanentemente"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Destruir Registros Permanentemente"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Plano"
msgid "Plan switching has been cancelled."
msgstr "Alternância de plano foi cancelada."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "restaurar"
msgid "Restore"
msgstr "Restaurar"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Restaurar Registro"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Restaurar Registros"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Continuar"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Tentar Novamente"
@@ -12038,6 +12067,16 @@ msgstr "Gere a estrutura de um novo aplicativo e, em seguida, use a CLI para des
msgid "Schedule"
msgstr "Agendar"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Selecionar coluna..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Selecione data e hora"
@@ -12895,6 +12934,11 @@ msgstr "Entrar ou Criar uma conta"
msgid "Sign up"
msgstr "Registrar-se"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Inicie uma nova assinatura Enterprise para reativar os recursos Enterpri
msgid "Start a new enterprise subscription."
msgstr "Inicie uma nova assinatura Enterprise."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Campos do Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Pesquisar no Twitter/X"
@@ -14473,6 +14522,7 @@ msgstr "Configuração de autenticação em duas etapas concluída com sucesso!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "Sem Título"
msgid "Untitled {labelSingular}"
msgstr "{labelSingular} sem título"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "Variável {variableKey} atualizada"
msgid "Variable deleted successfully."
msgstr "Variável excluída com sucesso."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Tente novamente em alguns segundos, por favor."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Pesquisar na Web"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Adicionar nota"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Adicionar objeto"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "Modelo de IA"
@@ -1366,11 +1366,6 @@ msgstr "IA não configurada. Defina OPENAI_API_KEY, ANTHROPIC_API_KEY ou XAI_API
msgid "AI request prep"
msgstr "Preparação do pedido de IA"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Esquema de Resposta de IA"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Tem a certeza de que pretende eliminar este {relationObjectMetadataNameS
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Tem certeza de que deseja excluir esta habilidade? Esta ação não pode ser desfeita."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Tem certeza de que deseja destruir esses registros? Eles não serão mais recuperáveis."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Tem certeza de que deseja destruir este registro? Ele não poderá ser recuperado."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Tem certeza de que deseja restaurar esses registros?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Tem certeza de que deseja restaurar este registro?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Decidir quais campos de Sub-endereço você deseja exibir"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Eliminar webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Excluir widget"
@@ -4781,7 +4781,6 @@ msgstr "Descreva o que você quer que a AI faça..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "destruir"
msgid "Destroy {objectLabelPlural}"
msgstr "Destruir {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Destruir Registros"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Ativar opções de contorno"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Ativar recursos específicos do modelo"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Data de Fim"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Falha ao guardar as instruções do espaço de trabalho"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Campo eliminado"
msgid "Field name"
msgstr "Nome do campo"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Nome do Campo"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "se"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Informações"
msgid "Input"
msgstr "Entrada"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Instalando..."
msgid "Instances"
msgstr "Instâncias"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Instruções"
msgid "Instructions Editor"
msgstr "Editor de Instruções"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Instruções para AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Layouts"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Saiba mais"
@@ -8395,6 +8410,7 @@ msgstr "Gráfico de linha"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Ligação"
@@ -8645,11 +8661,26 @@ msgstr "laço"
msgid "Mail Account"
msgstr "Conta de Correio"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Falta permissão para criar rascunhos de e-mail."
msgid "Mission accomplished!"
msgstr "Missão cumprida!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Interrupção"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Interrupção"
msgid "Output"
msgstr "Saída"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Campo de Saída {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Exclusão permanente. Insira o número de dias."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Destruir registro permanentemente"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Destruir Registros Permanentemente"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Plano"
msgid "Plan switching has been cancelled."
msgstr "A mudança de plano foi cancelada."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "restaurar"
msgid "Restore"
msgstr "Restaurar"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Restaurar registro"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Restaurar registros"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Resumo"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Tentar Novamente"
@@ -12038,6 +12067,16 @@ msgstr "Crie a estrutura de um novo aplicativo e, em seguida, use a CLI para des
msgid "Schedule"
msgstr "Agendar"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Selecionar coluna..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Selecione a data e a hora"
@@ -12895,6 +12934,11 @@ msgstr "Entrar ou Criar uma conta"
msgid "Sign up"
msgstr "Inscrever-se"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Inicie uma nova assinatura Enterprise para reativar os recursos Enterpri
msgid "Start a new enterprise subscription."
msgstr "Inicie uma nova assinatura Enterprise."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Campos do Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Pesquisa no Twitter/X"
@@ -14473,6 +14522,7 @@ msgstr "Configuração da autenticação em duas etapas concluída com sucesso!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "Sem título"
msgid "Untitled {labelSingular}"
msgstr "{labelSingular} sem título"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "Variável {variableKey} atualizada"
msgid "Variable deleted successfully."
msgstr "Variável excluída com sucesso."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Tente novamente dentro de alguns segundos, desculpe."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Pesquisa na Web"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Adăugați notă"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Adaugă obiectul"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "Model AI"
@@ -1366,11 +1366,6 @@ msgstr "AI nu este configurată. Setați OPENAI_API_KEY, ANTHROPIC_API_KEY sau X
msgid "AI request prep"
msgstr "Pregătire cerere AI"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Schema răspuns AI"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Sigur doriți să ștergeți {relationObjectMetadataNameSingular} asocia
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Sigur doriți să ștergeți această abilitate? Această acțiune nu poate fi anulată."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Sunteți sigur că doriți să distrugeți aceste înregistrări? Ele nu vor mai fi recuperabile."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Sunteți sigur că doriți să distrugeți această înregistrare? Nu mai poate fi recuperată."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Sunteți sigur că doriți să restaurați aceste înregistrări?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Sunteți sigur că doriți să restaurați această înregistrare?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Decideți ce câmpuri Sub-adresă doriți să afișați"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Șterge webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Șterge widgetul"
@@ -4781,7 +4781,6 @@ msgstr "Descrie ce dorești ca AI să facă..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "distrugere"
msgid "Destroy {objectLabelPlural}"
msgstr "Distruge {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Distruge înregistrările"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Activează opțiunile de evitare"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Activează funcții specifice modelului"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Data de sfârșit"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Nu s-au putut salva instrucțiunile spațiului de lucru"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Câmp șters"
msgid "Field name"
msgstr "Nume câmp"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Nume câmp"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "dacă"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Informații"
msgid "Input"
msgstr "Intrare"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Se instalează..."
msgid "Instances"
msgstr "Instanțe"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Instrucțiuni"
msgid "Instructions Editor"
msgstr "Editor de instrucțiuni"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Instrucțiuni pentru AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Aspecte"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Află mai multe"
@@ -8395,6 +8410,7 @@ msgstr "Grafic liniar"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Link"
@@ -8645,11 +8661,26 @@ msgstr "buclă"
msgid "Mail Account"
msgstr "Cont de E-mail"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Lipsește permisiunea de a redacta e-mailuri."
msgid "Mission accomplished!"
msgstr "Misiune îndeplinită!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Întrerupere"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Întrerupere"
msgid "Output"
msgstr "Ieșire"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Câmp ieșire {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Ștergere permanentă. Introduceți numărul de zile."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Distruge definitiv Înregistrarea"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Distrugere permanentă a înregistrărilor"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Plan"
msgid "Plan switching has been cancelled."
msgstr "Schimbarea planului a fost anulată."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "restaurează"
msgid "Restore"
msgstr "Restaurează"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Restaurează înregistrarea"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Restaurează înregistrările"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Reluare"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Reîncercare"
@@ -12038,6 +12067,16 @@ msgstr "Inițializează o aplicație nouă, apoi folosește CLI-ul pentru a dezv
msgid "Schedule"
msgstr "Program"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Selectează coloana..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Selectați data și ora"
@@ -12895,6 +12934,11 @@ msgstr "Autentificare sau Creează un cont"
msgid "Sign up"
msgstr "Înregistrare"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Începeți un nou abonament Enterprise pentru a reactiva funcționalită
msgid "Start a new enterprise subscription."
msgstr "Începeți un nou abonament Enterprise."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Câmpuri Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Căutare Twitter/X"
@@ -14473,6 +14522,7 @@ msgstr "Configurarea autentificării în doi pași a fost finalizată cu succes!
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "Neintitulat"
msgid "Untitled {labelSingular}"
msgstr "{labelSingular} fără titlu"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "Variabila {variableKey} a fost actualizată"
msgid "Variable deleted successfully."
msgstr "Variabila a fost ștearsă cu succes."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Vă rugăm să încercați din nou peste câteva secunde."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Căutare pe web"
Binary file not shown.
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Додај белешку"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Додајте објекат"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AI модел"
@@ -1366,11 +1366,6 @@ msgstr "AI није подешен. Подесите OPENAI_API_KEY, ANTHROPIC_A
msgid "AI request prep"
msgstr "Припрема AI захтева"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Схема одговора AI"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Да ли сте сигурни да желите да обришете
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Да ли сте сигурни да желите да обришете ову вештину? Ова радња се не може опозвати."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Да ли сте сигурни да желите уништити ове записе? Они више неће бити доступни."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Да ли сте сигурни да желите уништити овај запис? Неповратно је."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Да ли сте сигурни да желите враћати ове записе?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Да ли сте сигурни да желите вратити овај запис?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Одлучите која поља под-адресе желите да прикажете"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Обриши Вебхук"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Обришите виџет"
@@ -4781,7 +4781,6 @@ msgstr "Опишите шта желите да AI уради..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "уништи"
msgid "Destroy {objectLabelPlural}"
msgstr "Уништи {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Уништи записе"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Активирајте опције заобилажења"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Омогући специфичне карактеристике модела"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Датум завршетка"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Није успело чување упутстава за радни простор"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Поље је обрисано"
msgid "Field name"
msgstr "Име поља"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Име поља"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "ако"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Информације"
msgid "Input"
msgstr "Унос"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Инсталирање..."
msgid "Instances"
msgstr "Појаве"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Упутства"
msgid "Instructions Editor"
msgstr "Уређивач упутстава"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Упутства за AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Изгледи"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Сазнајте више"
@@ -8395,6 +8410,7 @@ msgstr "Дијаграм линија"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Линк"
@@ -8645,11 +8661,26 @@ msgstr "петља"
msgid "Mail Account"
msgstr "Имејл налог"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Недостаје дозвола за креирање нацрта и
msgid "Mission accomplished!"
msgstr "Мисија завршена!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Прекид рада"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Прекид рада"
msgid "Output"
msgstr "Излаз"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Излазно поље {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Трајно брисање. Унесите број дана."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Трајно уништите запис"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Трајно уништите записе"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "План"
msgid "Plan switching has been cancelled."
msgstr "Промена плана је отказана."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "врати"
msgid "Restore"
msgstr "Врати"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Врати запис"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Врати записе"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Наставите"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Покушај поново"
@@ -12038,6 +12067,16 @@ msgstr "Генеришите почетну структуру нове апли
msgid "Schedule"
msgstr "Распоред"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Изаберите колону..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Изаберите датум и време"
@@ -12895,6 +12934,11 @@ msgstr "Пријавите се или креирајте налог"
msgid "Sign up"
msgstr "Региструјте се"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Покрените нову Enterprise претплату да бист
msgid "Start a new enterprise subscription."
msgstr "Покрените нову Enterprise претплату."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Twenty поља"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Твитер/X Претрага"
@@ -14473,6 +14522,7 @@ msgstr "Подешавање двофакторске аутентификаци
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "Неназван"
msgid "Untitled {labelSingular}"
msgstr "Без назива {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "Променљива {variableKey} је ажурирана"
msgid "Variable deleted successfully."
msgstr "Променљива је успешно обрисана."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Покушајте поново за неколико секунди, извините."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Веб Претрага"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Lägg till anteckning"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Lägg till objekt"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AI-modell"
@@ -1366,11 +1366,6 @@ msgstr "AI är inte konfigurerat. Ställ in OPENAI_API_KEY, ANTHROPIC_API_KEY el
msgid "AI request prep"
msgstr "Förberedelse av AI-begäran"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "AI-svarsschema"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Är du säker på att du vill ta bort denna relaterade {relationObjectMe
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Är du säker på att du vill ta bort den här färdigheten? Den här åtgärden kan inte ångras."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Är du säker på att du vill förstöra dessa poster? De kommer inte att gå att återställa längre."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Är du säker på att du vill förstöra denna post? Den kan inte återställas längre."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Är du säker på att du vill återställa dessa poster?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Är du säker på att du vill återställa denna post?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Bestäm vilka deladressfält du vill visa"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Ta bort webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Radera widget"
@@ -4781,7 +4781,6 @@ msgstr "Beskriv vad du vill att AI:n ska göra..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "förstör"
msgid "Destroy {objectLabelPlural}"
msgstr "Förstör {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Förstöra poster"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Aktivera förbikopplingsalternativ"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Aktivera modellens specifika funktioner"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Slutdatum"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Det gick inte att spara instruktionerna för arbetsytan"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Fält raderat"
msgid "Field name"
msgstr "Fältnamn"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Fältnamn"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "om"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Information"
msgid "Input"
msgstr "Inmatning"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Installerar..."
msgid "Instances"
msgstr "Instanser"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Instruktioner"
msgid "Instructions Editor"
msgstr "Instruktionsredigerare"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Instruktioner för AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Layouter"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Läs mer"
@@ -8395,6 +8410,7 @@ msgstr "Linjediagram"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Länk"
@@ -8645,11 +8661,26 @@ msgstr "loop"
msgid "Mail Account"
msgstr "E-postkonto"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Behörighet för e-postutkast saknas."
msgid "Mission accomplished!"
msgstr "Uppdrag slutfört!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10538,6 +10574,7 @@ msgstr "Avbrott"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10548,11 +10585,6 @@ msgstr "Avbrott"
msgid "Output"
msgstr "Utdata"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Utdatafält {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10770,16 +10802,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Permanent radering. Ange antalet dagar."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Förstör permanent post"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Förstör permanent poster"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10880,6 +10911,12 @@ msgstr "Plan"
msgid "Plan switching has been cancelled."
msgstr "Planbytet har avbrutits."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11786,17 +11823,10 @@ msgstr "återställ"
msgid "Restore"
msgstr "Återställ"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Återställ post"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Återställ poster"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11822,7 +11852,6 @@ msgstr "Återuppta"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Återförsök"
@@ -12042,6 +12071,16 @@ msgstr "Skapa en ny app med grundstruktur och använd sedan CLI för att utveckl
msgid "Schedule"
msgstr "Schema"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12506,7 +12545,7 @@ msgid "Select column..."
msgstr "Välj kolumn..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Välj datum och tid"
@@ -12899,6 +12938,11 @@ msgstr "Logga in eller Skapa ett konto"
msgid "Sign up"
msgstr "Registrera dig"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13213,6 +13257,11 @@ msgstr "Starta ett nytt Enterprise-abonnemang för att återaktivera Enterprise-
msgid "Start a new enterprise subscription."
msgstr "Starta ett nytt Enterprise-abonnemang."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14446,7 +14495,7 @@ msgid "Twenty fields"
msgstr "Twenty-fält"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X Sök"
@@ -14481,6 +14530,7 @@ msgstr "Tvåfaktorsautentisering uppsättning genomförd lyckades!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14704,6 +14754,11 @@ msgstr "Obetitlad"
msgid "Untitled {labelSingular}"
msgstr "Obetitlad {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15092,6 +15147,11 @@ msgstr "Variabel {variableKey} uppdaterad"
msgid "Variable deleted successfully."
msgstr "Variabel borttagen framgångsrikt."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15420,7 +15480,7 @@ msgstr ""
"Försök igen om några sekunder, tyvärr."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Webbsök"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Not ekle"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Nesne Ekle"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AI Modeli"
@@ -1366,11 +1366,6 @@ msgstr "Yapay Zekâ yapılandırılmadı. Ortamınızda OPENAI_API_KEY, ANTHROPI
msgid "AI request prep"
msgstr "Yapay zeka istek hazırlığı"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "AI Yanıt Şeması"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Bu ilişkili {relationObjectMetadataNameSingular} öğesini silmek isted
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Bu beceriyi silmek istediğinizden emin misiniz? Bu işlem geri alınamaz."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Bu kayıtları yok etmek istediğinizden emin misiniz? Artık kurtarılamayacaklar."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Bu kaydı yok etmek istediğinizden emin misiniz? Artık kurtarılamayacak."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Bu kayıtları geri yüklemek istediğinizden emin misiniz?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Bu kaydı geri yüklemek istediğinizden emin misiniz?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Görüntülemek istediğiniz Alt-adres alanlarını seçin"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Webhook'u Sil"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Bileşeni sil"
@@ -4781,7 +4781,6 @@ msgstr "AI'nın ne yapmasını istediğinizi tarif edin..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "yok Et"
msgid "Destroy {objectLabelPlural}"
msgstr "{objectLabelPlural} Yok Et"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Kayıtları Yok Et"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Atlama seçeneklerini etkinleştir"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Modelde özgül özellikleri etkinleştir"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Bitiş Tarihi"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Çalışma alanı talimatları kaydedilemedi"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Alan silindi"
msgid "Field name"
msgstr "Alan adı"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Alan Adı"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "eğer"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Bilgiler"
msgid "Input"
msgstr "Girdi"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Yükleniyor..."
msgid "Instances"
msgstr "Örnekler"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Talimatlar"
msgid "Instructions Editor"
msgstr "Talimat Düzenleyicisi"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "AI için Talimatlar"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Düzenler"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Daha fazla bilgi edinin"
@@ -8395,6 +8410,7 @@ msgstr "Çizgi Grafiği"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Bağlantı"
@@ -8645,11 +8661,26 @@ msgstr "döngü"
msgid "Mail Account"
msgstr "Mail Hesabı"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "E-posta taslağı oluşturma izni eksik."
msgid "Mission accomplished!"
msgstr "Görev tamamlandı!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Kesinti"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Kesinti"
msgid "Output"
msgstr "Çıktı"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Çıktı Alanı {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Kalıcı silme. Gün sayısını girin."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Kaydı Kalıcı Olarak Yok Et"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Kayıtları Kalıcı Olarak Yok Et"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Plan"
msgid "Plan switching has been cancelled."
msgstr "Plan değişikliği iptal edildi."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "geri yükle"
msgid "Restore"
msgstr "Geri Yükle"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Kaydı Geri Yükle"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Kayıtları Geri Yükle"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Devam"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Tekrar dene"
@@ -12038,6 +12067,16 @@ msgstr "Yeni bir uygulamanın iskeletini oluşturun, ardından geliştirmek, yay
msgid "Schedule"
msgstr "Program"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Sütun seç..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Tarih ve saat seçin"
@@ -12895,6 +12934,11 @@ msgstr "Giriş yapın veya bir hesap oluşturun"
msgid "Sign up"
msgstr "Kaydol"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Kurumsal özellikleri yeniden etkinleştirmek için yeni bir kurumsal ab
msgid "Start a new enterprise subscription."
msgstr "Yeni bir kurumsal abonelik başlatın."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Twenty alanları"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X Ara"
@@ -14473,6 +14522,7 @@ msgstr "İki faktörlü doğrulama kurulumu başarıyla tamamlandı!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "İsimsiz"
msgid "Untitled {labelSingular}"
msgstr "İsimsiz {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "Değişken {variableKey} güncellendi"
msgid "Variable deleted successfully."
msgstr "Değişken başarıyla silindi."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Lütfen birkaç saniye sonra tekrar deneyin, özür dileriz."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Web Ara"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Додати примітку"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Додати об'єкт"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "Модель ІІ"
@@ -1366,11 +1366,6 @@ msgstr "ШІ не налаштовано. Встановіть у своєму
msgid "AI request prep"
msgstr "Підготовка запиту ШІ"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Схема відповіді ІІ"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Ви впевнені, що хочете видалити пов’яз
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Ви впевнені, що хочете видалити цю навичку? Цю дію не можна скасувати."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Ви впевнені, що хочете знищити ці записи? Їх не можна буде відновити."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Ви впевнені, що хочете знищити цей запис? Його не можна буде відновити."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Ви впевнені, що хочете відновити ці записи?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Ви впевнені, що хочете відновити цей запис?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Виберіть, які поля під-адреси ви хочете відобразити"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Видалити вебхук"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Видалити віджет"
@@ -4781,7 +4781,6 @@ msgstr "Опишіть, що ви хочете, щоб AI зробив..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "знищити"
msgid "Destroy {objectLabelPlural}"
msgstr "Знищити {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Знищити записи"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Увімкнути параметри обходу"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Увімкнути функції, специфічні для моделі"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Дата закінчення"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Не вдалося зберегти інструкції робочого простору"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Поле видалено"
msgid "Field name"
msgstr "Назва поля"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Назва поля"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "якщо"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Інформація"
msgid "Input"
msgstr "Вхідні дані"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Встановлення..."
msgid "Instances"
msgstr "Екземпляри"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Інструкції"
msgid "Instructions Editor"
msgstr "Редактор інструкцій"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Інструкції для AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Макети"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Докладніше"
@@ -8395,6 +8410,7 @@ msgstr "Лінійна діаграма"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Посилання"
@@ -8645,11 +8661,26 @@ msgstr "цикл"
msgid "Mail Account"
msgstr "Обліковий запис пошти"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Відсутній дозвіл на створення чернеток
msgid "Mission accomplished!"
msgstr "Місію виконано!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Збій"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Збій"
msgid "Output"
msgstr "Вивід"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Поле результату {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Безповоротне видалення. Введіть кількість днів."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Назавжди знищити записи"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Назавжди знищити записи"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "План"
msgid "Plan switching has been cancelled."
msgstr "Перемикання плану скасовано."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "відновити"
msgid "Restore"
msgstr "Відновити"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Відновити запис"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Відновити записи"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Продовжити"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Повторити спробу"
@@ -12038,6 +12067,16 @@ msgstr "Згенеруйте каркас нового застосунку, п
msgid "Schedule"
msgstr "Розклад"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Виберіть стовпець..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Виберіть дату й час"
@@ -12895,6 +12934,11 @@ msgstr "Увійти або Створити аккаунт"
msgid "Sign up"
msgstr "Зареєструватися"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Почніть нову підписку Enterprise, щоб знову
msgid "Start a new enterprise subscription."
msgstr "Почніть нову підписку Enterprise."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14440,7 +14489,7 @@ msgid "Twenty fields"
msgstr "Поля Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Пошук у Twitter/X"
@@ -14475,6 +14524,7 @@ msgstr "Налаштування двофакторної аутентифіка
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14698,6 +14748,11 @@ msgstr "Неназваний"
msgid "Untitled {labelSingular}"
msgstr "Без назви {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15086,6 +15141,11 @@ msgstr "Змінну {variableKey} оновлено"
msgid "Variable deleted successfully."
msgstr "Змінну успішно видалено."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15414,7 +15474,7 @@ msgstr ""
"Будь ласка, спробуйте ще раз за кілька секунд."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Веб-пошук"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "Thêm ghi chú"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "Thêm đối tượng"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "Mô hình AI"
@@ -1366,11 +1366,6 @@ msgstr "AI chưa được cấu hình. Thiết lập OPENAI_API_KEY, ANTHROPIC_A
msgid "AI request prep"
msgstr "Chuẩn bị yêu cầu AI"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "Schema phản hồi AI"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "Bạn có chắc muốn xóa {relationObjectMetadataNameSingular} liên
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "Bạn có chắc chắn muốn xóa kỹ năng này không? Hành động này không thể hoàn tác."
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "Bạn có chắc chắn muốn hủy bỏ các bản ghi này không? Chúng sẽ không thể khôi phục được nữa."
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "Bạn có chắc chắn muốn hủy bỏ bản ghi này không? Nó sẽ không thể khôi phục được nữa."
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "Bạn có chắc chắn muốn khôi phục các bản ghi này không?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "Bạn có chắc chắn muốn khôi phục bản ghi này không?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "Quyết định các trường Phân nhóm địa chỉ mà bạn muốn hiển thị"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "Xóa Webhooks"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "Xóa tiện ích"
@@ -4781,7 +4781,6 @@ msgstr "Mô tả điều bạn muốn AI làm gì..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "hủy"
msgid "Destroy {objectLabelPlural}"
msgstr "Hủy {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "Hủy bản ghi"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "Kích hoạt tùy chọn bỏ qua"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "Kích hoạt các tính năng cụ thể của mô hình"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "Ngày kết thúc"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "Không thể lưu hướng dẫn của không gian làm việc"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "Đã xóa trường"
msgid "Field name"
msgstr "Tên trường"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "Tên Trường"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "nếu"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "Thông tin"
msgid "Input"
msgstr "Đầu vào"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "Đang cài đặt..."
msgid "Instances"
msgstr "Thực thể"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "Hướng dẫn"
msgid "Instructions Editor"
msgstr "Trình chỉnh sửa hướng dẫn"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "Hướng dẫn cho AI"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "Bố trí"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "Tìm hiểu thêm"
@@ -8395,6 +8410,7 @@ msgstr "Biểu đồ đường"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "Liên kết"
@@ -8645,11 +8661,26 @@ msgstr "vòng lặp"
msgid "Mail Account"
msgstr "Tài Khoản Email"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "Thiếu quyền soạn thảo email."
msgid "Mission accomplished!"
msgstr "Nhiệm vụ đã hoàn thành!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "Gián đoạn"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "Gián đoạn"
msgid "Output"
msgstr "Đầu ra"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "Trường Đầu Ra {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "Xóa vĩnh viễn. Nhập số ngày."
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "Hủy bản ghi vĩnh viễn"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "Hủy bỏ vĩnh viễn các bản ghi"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "Gói"
msgid "Plan switching has been cancelled."
msgstr "Chuyển đổi kế hoạch đã bị hủy."
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "khôi phục"
msgid "Restore"
msgstr "Khôi phục"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "Khôi phục bản ghi"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "Khôi phục bản ghi"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "Tiếp tục"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "Thử lại"
@@ -12038,6 +12067,16 @@ msgstr "Tạo khung cho ứng dụng mới, sau đó dùng CLI để phát tri
msgid "Schedule"
msgstr "Lịch trình"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "Chọn cột..."
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "Chọn ngày & giờ"
@@ -12895,6 +12934,11 @@ msgstr "Đăng nhập hoặc Tạo tài khoản"
msgid "Sign up"
msgstr "Đăng ký"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "Bắt đầu một gói đăng ký Enterprise mới để kích hoạt l
msgid "Start a new enterprise subscription."
msgstr "Bắt đầu một gói đăng ký Enterprise mới."
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Các trường của Twenty"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Tìm kiếm Twitter/X"
@@ -14473,6 +14522,7 @@ msgstr "Thiết lập xác thực hai yếu tố thành công!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "Chưa đặt tên"
msgid "Untitled {labelSingular}"
msgstr "{labelSingular} chưa có tiêu đề"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "Biến {variableKey} đã được cập nhật"
msgid "Variable deleted successfully."
msgstr "Biến đã được xóa thành công."
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"Vui lòng thử lại sau vài giây, xin lỗi."
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "Tìm kiếm web"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "添加笔记"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "添加对象"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AI 模型"
@@ -1366,11 +1366,6 @@ msgstr "未配置 AI。请在您的环境中设置 OPENAI_API_KEY、ANTHROPIC_AP
msgid "AI request prep"
msgstr "AI 请求准备"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "AI 响应架构"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "确定要删除此相关的 {relationObjectMetadataNameSingular} 吗?<
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "确定要删除此技能吗?此操作无法撤销。"
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "您确定要销毁这些记录吗?它们将无法恢复。"
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "您确定要销毁此记录吗?它将无法恢复。"
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "您确定要恢复这些记录吗?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "您确定要恢复此记录吗?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "请选择您要显示的子地址字段"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "删除 Webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "删除小部件"
@@ -4781,7 +4781,6 @@ msgstr "描述你希望 AI 执行的操作..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "销毁"
msgid "Destroy {objectLabelPlural}"
msgstr "销毁 {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "销毁记录"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "启用绕过选项"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "启用特定模型功能"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "结束日期"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "保存工作区说明失败"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "字段已删除"
msgid "Field name"
msgstr "字段名称"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "字段名称"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "如果"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "信息"
msgid "Input"
msgstr "输入"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "正在安装..."
msgid "Instances"
msgstr "实例"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr "指令"
msgid "Instructions Editor"
msgstr "指令编辑器"
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "AI 指令"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "布局"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "了解更多"
@@ -8395,6 +8410,7 @@ msgstr "折线图"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "链接"
@@ -8645,11 +8661,26 @@ msgstr "循环"
msgid "Mail Account"
msgstr "邮件账户"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "缺少电子邮件草稿权限。"
msgid "Mission accomplished!"
msgstr "任务完成!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "中断"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "中断"
msgid "Output"
msgstr "输出"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "输出字段 {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "永久删除。 输入天数。"
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "永久销毁记录"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "永久销毁记录"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "计划"
msgid "Plan switching has been cancelled."
msgstr "计划切换已取消。"
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "恢复"
msgid "Restore"
msgstr "恢复"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "恢复记录"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "恢复记录"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "恢复"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "重试"
@@ -12038,6 +12067,16 @@ msgstr "为新应用搭建脚手架,然后使用 CLI 进行开发、发布和
msgid "Schedule"
msgstr "计划"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "选择列……"
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "选择日期和时间"
@@ -12895,6 +12934,11 @@ msgstr "登录或创建账户"
msgid "Sign up"
msgstr "注册"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "开始新的企业订阅以重新启用企业功能。"
msgid "Start a new enterprise subscription."
msgstr "开始新的企业订阅。"
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Twenty 字段"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X 搜索"
@@ -14473,6 +14522,7 @@ msgstr "双因素身份验证设置成功完成!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "未命名"
msgid "Untitled {labelSingular}"
msgstr "未命名的 {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "变量 {variableKey} 已更新"
msgid "Variable deleted successfully."
msgstr "变量删除成功。"
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"请在几秒后重试,抱歉。"
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "网络搜索"
+129 -69
View File
@@ -1012,6 +1012,7 @@ msgstr "添加筆記"
#. js-lingui-id: dEO3Zx
#: src/pages/settings/data-model/SettingsObjects.tsx
#: src/pages/settings/data-model/SettingsObjects.tsx
msgid "Add object"
msgstr "添加對象"
@@ -1352,7 +1353,6 @@ msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "AI Model"
msgstr "AI模型"
@@ -1366,11 +1366,6 @@ msgstr "未設定 AI。請在您的環境中設定 OPENAI_API_KEY、ANTHROPIC_AP
msgid "AI request prep"
msgstr "AI 請求準備"
#. js-lingui-id: QwgquD
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "AI Response Schema"
msgstr "AI回應結構"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
@@ -2013,25 +2008,29 @@ msgstr "您確定要刪除此相關的 {relationObjectMetadataNameSingular} 嗎
msgid "Are you sure you want to delete this skill? This action cannot be undone."
msgstr "您確定要刪除此技能嗎?此操作無法復原。"
#. js-lingui-id: OJOR8q
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Are you sure you want to destroy these records? They won't be recoverable anymore."
msgstr "您確定要刪除這些記錄嗎?它們將不可恢復。"
#. js-lingui-id: EySr+c
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy these {0}? They won't be recoverable anymore."
msgstr ""
#. js-lingui-id: UK5TO6
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Are you sure you want to destroy this record? It cannot be recovered anymore."
msgstr "您確定要銷毀此記錄嗎?它將無法恢復。"
#. js-lingui-id: GfgNgF
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Are you sure you want to destroy this {0}? It cannot be recovered anymore."
msgstr ""
#. js-lingui-id: mcHVC1
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Are you sure you want to restore these records?"
msgstr "您確定要恢復這些記錄嗎?"
#. js-lingui-id: RzJL8J
#. placeholder {0}: objectMetadataItem.labelPlural
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore these {0}?"
msgstr ""
#. js-lingui-id: lmgkf0
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Are you sure you want to restore this record?"
msgstr "您確定要恢復此記錄嗎?"
#. js-lingui-id: XTKWxO
#. placeholder {0}: objectMetadataItem.labelSingular
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Are you sure you want to restore this {0}?"
msgstr ""
#. js-lingui-id: 9JFf0y
#: src/modules/settings/members/components/MemberPermissionsTab.tsx
@@ -4431,7 +4430,7 @@ msgid "Decide which Sub-address fields you want to display"
msgstr "決定您希望顯示哪些子地址欄位"
#. js-lingui-id: Bn9+El
#: src/modules/ai/components/AIChatEditorSection.tsx
#: src/modules/ai/hooks/useAiModelOptions.ts
msgid "default"
msgstr ""
@@ -4725,6 +4724,7 @@ msgstr "刪除 Webhook"
#. js-lingui-id: tWD0z0
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsFooter.tsx
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Delete widget"
msgstr "刪除小工具"
@@ -4781,7 +4781,6 @@ msgstr "描述您希望 AI 實現的功能..."
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
#: src/modules/settings/logic-functions/components/SettingsLogicFunctionNewForm.tsx
@@ -4801,11 +4800,6 @@ msgstr "銷毀"
msgid "Destroy {objectLabelPlural}"
msgstr "銷毀 {objectLabelPlural}"
#. js-lingui-id: kG5yO6
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Destroy Records"
msgstr "銷毀記錄"
#. js-lingui-id: L68qSB
#: src/modules/settings/roles/role-permissions/objects-permissions/components/SettingsRolePermissionsObjectsSection.tsx
msgid "Destroy Records on All Objects"
@@ -5476,15 +5470,25 @@ msgid "Enable bypass options"
msgstr "啟用繞過選項"
#. js-lingui-id: gZo0V9
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Enable model-specific features"
msgstr "啟用特定模型功能"
#. js-lingui-id: IrI9pg
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date"
msgstr ""
#. js-lingui-id: VFv2ZC
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "End Date"
msgstr "結束日期"
#. js-lingui-id: Fqu/aC
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "End date must be after start date."
msgstr ""
#. js-lingui-id: k1i50B
#: src/modules/information-banner/components/billing/InformationBannerEndTrialPeriod.tsx
msgid "End Trial Period"
@@ -6410,6 +6414,11 @@ msgstr ""
msgid "Failed to save workspace instructions"
msgstr "儲存工作區指示失敗"
#. js-lingui-id: aj02T8
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Failed to set maintenance mode."
msgstr ""
#. js-lingui-id: LVcnN8
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
msgid "Failed to transfer ownership. Check that the subdomain is correct."
@@ -6572,11 +6581,6 @@ msgstr "欄位已刪除"
msgid "Field name"
msgstr "字段名稱"
#. js-lingui-id: fV7qkH
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Field Name"
msgstr "欄位名稱"
#. js-lingui-id: x07QTl
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationForm.tsx
msgid "Field on destination"
@@ -7414,6 +7418,11 @@ msgstr "如果"
msgid "If disabled, use advanced search filters to find these records"
msgstr ""
#. js-lingui-id: bTDz/2
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "If there's no link, no button will appear."
msgstr ""
#. js-lingui-id: ZfP/Ap
#: src/modules/object-record/record-table/empty-state/components/RecordTableEmptyStateRemote.tsx
msgid "If this is unexpected, please verify your settings."
@@ -7630,6 +7639,11 @@ msgstr "資訊"
msgid "Input"
msgstr "輸入"
#. js-lingui-id: /OdOC/
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Input (Prompt)"
msgstr ""
#. js-lingui-id: JE2tjr
#: src/pages/settings/ai/SettingsSkillForm.tsx
#: src/modules/settings/data-model/objects/forms/components/SettingsDataModelObjectAboutForm.tsx
@@ -7710,6 +7724,11 @@ msgstr "安裝中..."
msgid "Instances"
msgstr "實例"
#. js-lingui-id: tc328m
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Instruction for AI"
msgstr ""
#. js-lingui-id: NxHkkp
#: src/pages/settings/ai/SettingsSkillForm.tsx
msgid "Instructions"
@@ -7720,11 +7739,6 @@ msgstr ""
msgid "Instructions Editor"
msgstr ""
#. js-lingui-id: g+29+d
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Instructions for AI"
msgstr "AI 指示"
#. js-lingui-id: RGm66q
#: src/utils/title-utils.ts
msgid "Integrations - Settings"
@@ -8285,6 +8299,7 @@ msgstr "佈局"
#. js-lingui-id: zwWKhA
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder.tsx
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Learn more"
msgstr "瞭解更多"
@@ -8395,6 +8410,7 @@ msgstr "折線圖"
#. js-lingui-id: yzF66j
#: src/modules/side-panel/components/SidePanelLinkInfo.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemMainMenu.tsx
msgid "Link"
msgstr "鏈接"
@@ -8645,11 +8661,26 @@ msgstr "循環"
msgid "Mail Account"
msgstr "郵件帳戶"
#. js-lingui-id: 6Dd2PM
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance"
msgstr ""
#. js-lingui-id: /hmUGb
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Maintenance mode"
msgstr ""
#. js-lingui-id: MOLprz
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useActionRolePermissionFlagConfig.ts
msgid "Make HTTP requests to external APIs"
msgstr ""
#. js-lingui-id: wckWOP
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutFieldsSettings.tsx
msgid "Manage"
msgstr ""
#. js-lingui-id: n0FHLv
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
msgid "Manage API keys and webhooks"
@@ -8960,6 +8991,11 @@ msgstr "缺少撰寫電子郵件草稿的權限。"
msgid "Mission accomplished!"
msgstr "任務完成!"
#. js-lingui-id: scu3wk
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowAiAgentPromptTab.tsx
msgid "Model"
msgstr ""
#. js-lingui-id: bC/dq9
#. placeholder {0}: values.label.trim()
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
@@ -10536,6 +10572,7 @@ msgstr "中斷"
#. js-lingui-id: gh06VD
#: src/pages/settings/admin-panel/SettingsAdminNewAiModel.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
#: src/modules/workflow/components/WorkflowStepExecutionResult.tsx
#: src/modules/side-panel/pages/workflow/step/view-run/components/SidePanelWorkflowRunViewStepContent.tsx
#: src/modules/logic-functions/components/LogicFunctionExecutionResult.tsx
@@ -10546,11 +10583,6 @@ msgstr "中斷"
msgid "Output"
msgstr "輸出"
#. js-lingui-id: xvfn7l
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Output Field {fieldNumber}"
msgstr "輸出欄位 {fieldNumber}"
#. js-lingui-id: i1+tKD
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
@@ -10768,16 +10800,15 @@ msgstr ""
msgid "Permanent deletion. Enter the number of days."
msgstr "永久刪除。輸入天數。"
#. js-lingui-id: 35dBYb
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/DestroySingleRecordCommand.tsx
msgid "Permanently Destroy Record"
msgstr "永久銷毀記錄"
#. js-lingui-id: EPkrPQ
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy"
msgstr ""
#. js-lingui-id: YyP8vD
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/DestroyMultipleRecordsCommand.tsx
msgid "Permanently Destroy Records"
msgstr "永久銷毀記錄"
#. js-lingui-id: 64gHBj
#: src/modules/command-menu-item/engine-command/record/components/DestroyRecordsCommand.tsx
msgid "Permanently Destroy {objectLabel}"
msgstr ""
#. js-lingui-id: yWmZKk
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -10878,6 +10909,12 @@ msgstr "方案"
msgid "Plan switching has been cancelled."
msgstr "方案切換已取消。"
#. js-lingui-id: QLv09h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Planned for {formattedStartDate}"
msgstr ""
#. js-lingui-id: VUi6Nf
#: src/modules/workflow/workflow-trigger/components/CronExpressionHelper.tsx
msgid "Please check your cron expression syntax."
@@ -11784,17 +11821,10 @@ msgstr "還原"
msgid "Restore"
msgstr "還原"
#. js-lingui-id: NzMNOA
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
#: src/modules/command-menu-item/engine-command/record/single-record/components/RestoreSingleRecordCommand.tsx
msgid "Restore Record"
msgstr "還原記錄"
#. js-lingui-id: Xqj0Cb
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
#: src/modules/command-menu-item/engine-command/record/multiple-records/components/RestoreMultipleRecordsCommand.tsx
msgid "Restore Records"
msgstr "還原記錄"
#. js-lingui-id: 8KyDbM
#: src/modules/command-menu-item/engine-command/record/components/RestoreRecordsCommand.tsx
msgid "Restore {objectLabel}"
msgstr ""
#. js-lingui-id: hO3AfV
#: src/pages/settings/ai/components/SettingsAIModelsTab.tsx
@@ -11820,7 +11850,6 @@ msgstr "恢復"
#. js-lingui-id: 6gRgw8
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminRetryJobsConfirmationModal.tsx
#: src/modules/settings/admin-panel/health-status/components/SettingsAdminQueueJobRowDropdownMenu.tsx
#: src/modules/ai/components/AIChatErrorMessage.tsx
msgid "Retry"
msgstr "重試"
@@ -12038,6 +12067,16 @@ msgstr "為新的應用程式搭建腳手架,然後使用 CLI 進行開發、
msgid "Schedule"
msgstr "排程"
#. js-lingui-id: Ys/D8h
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Schedule a maintenance window and notify all users"
msgstr ""
#. js-lingui-id: f5yMQc
#: src/modules/information-banner/components/maintenance/InformationBannerMaintenance.tsx
msgid "Scheduled maintenance: {startFormatted} — {endFormatted}"
msgstr ""
#. js-lingui-id: QJ8HBJ
#: src/modules/settings/playground/components/PlaygroundSetupForm.tsx
msgid "Schema"
@@ -12502,7 +12541,7 @@ msgid "Select column..."
msgstr "選擇欄位……"
#. js-lingui-id: U+WOF9
#: src/pages/settings/security/event-logs/components/EventLogDatePickerInput.tsx
#: src/modules/settings/components/SettingsDatePickerInput.tsx
msgid "Select date & time"
msgstr "選取日期與時間"
@@ -12895,6 +12934,11 @@ msgstr "登入或建立賬戶"
msgid "Sign up"
msgstr "註冊"
#. js-lingui-id: mHC57v
#: src/modules/auth/sign-in-up/components/internal/SignInUpWithCredentials.tsx
msgid "Sign-up is temporarily unavailable during maintenance."
msgstr ""
#. js-lingui-id: BZdVGR
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectForm.tsx
msgid "Single edit"
@@ -13209,6 +13253,11 @@ msgstr "開始新的企業訂閱以重新啟用企業功能。"
msgid "Start a new enterprise subscription."
msgstr "開始新的企業訂閱。"
#. js-lingui-id: WAjFYI
#: src/modules/settings/admin-panel/health-status/maintenance-mode/components/SettingsAdminMaintenanceMode.tsx
msgid "Start date"
msgstr ""
#. js-lingui-id: D3iCkb
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Start Date"
@@ -14438,7 +14487,7 @@ msgid "Twenty fields"
msgstr "Twenty 欄位"
#. js-lingui-id: YIjS4q
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Twitter/X Search"
msgstr "Twitter/X 搜索"
@@ -14473,6 +14522,7 @@ msgstr "雙因素身份驗證設定成功完成!"
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormFieldSettings.tsx
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputFieldTypeSelector.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectRelationsTable.tsx
#: src/modules/settings/components/SettingsDnsRecordsTable.tsx
@@ -14696,6 +14746,11 @@ msgstr "無標題"
msgid "Untitled {labelSingular}"
msgstr "未命名的 {labelSingular}"
#. js-lingui-id: zJsHrW
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Untitled field"
msgstr ""
#. js-lingui-id: RBz20h
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Untitled iFrame"
@@ -15084,6 +15139,11 @@ msgstr "變數 {variableKey} 已更新"
msgid "Variable deleted successfully."
msgstr "變量成功刪除。"
#. js-lingui-id: +woNYv
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Variable Name"
msgstr ""
#. js-lingui-id: dY/1ir
#: src/modules/object-record/record-field/ui/form-types/components/VariableChip.tsx
msgid "Variable not found"
@@ -15412,7 +15472,7 @@ msgstr ""
"請稍後幾秒再試,抱歉。"
#. js-lingui-id: LnnVIT
#: src/pages/settings/ai/components/SettingsAgentModelCapabilities.tsx
#: src/modules/ai/components/SettingsAgentModelCapabilities.tsx
msgid "Web Search"
msgstr "網路搜索"
@@ -29,7 +29,7 @@ const StyledEditorContainer = styled.div<{
box-sizing: border-box;
color: ${({ readonly }) =>
readonly
? themeCssVariables.font.color.light
? themeCssVariables.font.color.secondary
: themeCssVariables.font.color.primary};
font-family: ${themeCssVariables.font.family};
font-size: ${themeCssVariables.font.size.sm};
@@ -6,6 +6,7 @@ import { IconDotsVertical } from 'twenty-ui/display';
import { LazyMarkdownRenderer } from '@/ai/components/LazyMarkdownRenderer';
import { ToolStepRenderer } from '@/ai/components/ToolStepRenderer';
import { groupContiguousThinkingStepParts } from '@/ai/utils/groupContiguousThinkingStepParts';
import { isCodeInterpreterToolPart } from '@/ai/utils/isCodeInterpreterToolPart';
import { styled } from '@linaria/react';
import { isToolUIPart, type ToolUIPart } from 'ai';
import { type ExtendedUIMessagePart } from 'twenty-shared/ai';
@@ -92,16 +93,13 @@ export const AIChatAssistantMessageRenderer = ({
isLastMessageStreaming: boolean;
hasError?: boolean;
}) => {
// Filter out data-code-execution parts when tool-code_interpreter exists
// (the tool part contains the final result, data-code-execution is for streaming updates)
// Also filter out data-thread-title (consumed by useAgentChat, not rendered)
const hasCodeInterpreterTool = messageParts.some(
(part) => part.type === 'tool-code_interpreter',
const hasCodeExecutionData = messageParts.some(
(part) => part.type === 'data-code-execution',
);
const filteredParts = messageParts.filter(
(part) =>
part.type !== 'data-thread-title' &&
(!hasCodeInterpreterTool || part.type !== 'data-code-execution'),
!(hasCodeExecutionData && isCodeInterpreterToolPart(part)),
);
const renderItems = groupContiguousThinkingStepParts(filteredParts);
@@ -11,17 +11,13 @@ import { AIChatEditorFocusEffect } from '@/ai/components/internal/AIChatEditorFo
import { AIChatSkeletonLoader } from '@/ai/components/internal/AIChatSkeletonLoader';
import { SendMessageButton } from '@/ai/components/internal/SendMessageButton';
import { useAIChatEditor } from '@/ai/hooks/useAIChatEditor';
import { useAiModelOptions } from '@/ai/hooks/useAiModelOptions';
import { useAgentChatModelId } from '@/ai/hooks/useAgentChatModelId';
import { useWorkspaceAiModelAvailability } from '@/ai/hooks/useWorkspaceAiModelAvailability';
import { agentChatUserSelectedModelState } from '@/ai/states/agentChatUserSelectedModelState';
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
import { aiModelsState } from '@/client-config/states/aiModelsState';
import { getModelIcon } from '@/settings/admin-panel/ai/utils/getModelIcon';
import { Select } from '@/ui/input/components/Select';
import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile';
import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { t } from '@lingui/core/macro';
import { type SelectOption } from 'twenty-ui/input';
const StyledInputArea = styled.div<{ isMobile: boolean }>`
align-items: flex-end;
@@ -110,9 +106,18 @@ const StyledRightButtonsContainer = styled.div`
export const AIChatEditorSection = () => {
const isMobile = useIsMobile();
const currentWorkspace = useAtomStateValue(currentWorkspaceState);
const aiModels = useAtomStateValue(aiModelsState);
const { enabledModels } = useWorkspaceAiModelAvailability();
const { options, pinnedOption } = useAiModelOptions({
variant: 'pinned-default',
});
const smartModelOptions: SelectOption<string | null>[] = options;
const defaultPinnedOption: SelectOption<string | null> | undefined =
pinnedOption
? {
...pinnedOption,
value: null,
}
: undefined;
const setAgentChatUserSelectedModel = useSetAtomState(
agentChatUserSelectedModelState,
);
@@ -120,36 +125,6 @@ export const AIChatEditorSection = () => {
const { editor, handleSendAndClear } = useAIChatEditor();
const workspaceSmartModel = aiModels.find(
(model) => model.modelId === currentWorkspace?.smartModel,
);
const resolvedDefaultModelId = enabledModels.find(
(model) =>
model.label === workspaceSmartModel?.label &&
model.providerName === workspaceSmartModel?.providerName,
)?.modelId;
const defaultPinnedOption = workspaceSmartModel
? {
value: null as string | null,
label: workspaceSmartModel.label,
Icon: getModelIcon(
workspaceSmartModel.modelFamily,
workspaceSmartModel.providerName,
),
contextualText: t`default`,
}
: undefined;
const smartModelOptions = enabledModels
.filter((model) => model.modelId !== resolvedDefaultModelId)
.map((model) => ({
value: model.modelId as string | null,
label: model.label,
Icon: getModelIcon(model.modelFamily, model.providerName),
}));
return (
<>
<AIChatEditorFocusEffect editor={editor} />
@@ -1,11 +1,6 @@
import { AGENT_CHAT_RETRY_EVENT_NAME } from '@/ai/constants/AgentChatRetryEventName';
import { agentChatIsStreamingState } from '@/ai/states/agentChatIsStreamingState';
import { dispatchBrowserEvent } from '@/browser-event/utils/dispatchBrowserEvent';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { styled } from '@linaria/react';
import { t } from '@lingui/core/macro';
import { IconAlertCircle, IconRefresh } from 'twenty-ui/display';
import { Button } from 'twenty-ui/input';
import { IconAlertCircle } from 'twenty-ui/display';
import { useContext } from 'react';
import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants';
@@ -49,12 +44,6 @@ type AIChatErrorMessageProps = {
};
export const AIChatErrorMessage = ({ error }: AIChatErrorMessageProps) => {
const agentChatIsStreaming = useAtomStateValue(agentChatIsStreamingState);
const handleRetryClick = () => {
dispatchBrowserEvent(AGENT_CHAT_RETRY_EVENT_NAME);
};
const { theme } = useContext(ThemeContext);
return (
@@ -68,14 +57,6 @@ export const AIChatErrorMessage = ({ error }: AIChatErrorMessageProps) => {
{error.message || t`An error occurred while processing your message`}
</StyledErrorMessage>
</StyledErrorContent>
<Button
variant="secondary"
size="small"
Icon={IconRefresh}
onClick={handleRetryClick}
disabled={agentChatIsStreaming}
title={t`Retry`}
/>
</StyledErrorContainer>
);
};
@@ -45,7 +45,7 @@ const StyledMessageText = styled.div<{ isUser?: boolean }>`
padding: ${({ isUser }) =>
isUser ? `0 ${themeCssVariables.spacing[2]}` : '0'};
white-space: normal;
width: fit-content;
width: ${({ isUser }) => (isUser ? 'fit-content' : '100%')};
/* Pre-wrap within the whole container turns every newline between block
elements into extra spacing; keep normal flow and only pre-wrap code. */
word-wrap: break-word;
@@ -189,23 +189,22 @@ export const AIChatMessage = ({
<AIChatErrorRenderer error={error} />
)}
</StyledMessageContainer>
{agentChatMessage.parts.length > 0 &&
agentChatMessage.metadata?.createdAt && (
<StyledMessageFooter className="message-footer">
<StyledMessageTimestamp>
{beautifyPastDateRelativeToNow(
agentChatMessage.metadata?.createdAt,
localeCatalog,
)}
</StyledMessageTimestamp>
<LightCopyIconButton
copyText={
agentChatMessage.parts.find((part) => part.type === 'text')
?.text ?? ''
}
/>
</StyledMessageFooter>
)}
{agentChatMessage.parts.length > 0 && (
<StyledMessageFooter className="message-footer">
<StyledMessageTimestamp>
{beautifyPastDateRelativeToNow(
agentChatMessage.metadata?.createdAt ?? new Date(),
localeCatalog,
)}
</StyledMessageTimestamp>
<LightCopyIconButton
copyText={
agentChatMessage.parts.find((part) => part.type === 'text')
?.text ?? ''
}
/>
</StyledMessageFooter>
)}
</StyledMessageBubble>
);
};
@@ -0,0 +1,78 @@
import { styled } from '@linaria/react';
import { agentChatQueuedMessagesComponentFamilyState } from '@/ai/states/agentChatQueuedMessagesComponentFamilyState';
import { currentAIChatThreadState } from '@/ai/states/currentAIChatThreadState';
import { useDeleteQueuedMessage } from '@/ai/hooks/useDeleteQueuedMessage';
import { useAtomComponentFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentFamilyStateValue';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { isDefined } from 'twenty-shared/utils';
import { IconX } from 'twenty-ui/display';
import { LightIconButton } from 'twenty-ui/input';
import { themeCssVariables } from 'twenty-ui/theme-constants';
const StyledQueueContainer = styled.div`
display: flex;
flex-direction: column;
gap: ${themeCssVariables.spacing[1]};
padding: 0 ${themeCssVariables.spacing[3]};
`;
const StyledQueueLabel = styled.div`
color: ${themeCssVariables.font.color.light};
font-size: ${themeCssVariables.font.size.xs};
padding-left: ${themeCssVariables.spacing[1]};
`;
const StyledQueuedItem = styled.div`
align-items: center;
background: ${themeCssVariables.background.tertiary};
border-radius: ${themeCssVariables.border.radius.sm};
color: ${themeCssVariables.font.color.secondary};
display: flex;
font-size: ${themeCssVariables.font.size.md};
gap: ${themeCssVariables.spacing[2]};
justify-content: space-between;
padding: ${themeCssVariables.spacing[1]} ${themeCssVariables.spacing[2]};
`;
const StyledQueuedText = styled.span`
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
`;
export const AIChatQueuedMessages = () => {
const currentAIChatThread = useAtomStateValue(currentAIChatThreadState);
const agentChatQueuedMessages = useAtomComponentFamilyStateValue(
agentChatQueuedMessagesComponentFamilyState,
{ threadId: currentAIChatThread },
);
const { deleteQueuedMessage } = useDeleteQueuedMessage();
if (!isDefined(currentAIChatThread) || agentChatQueuedMessages.length === 0) {
return null;
}
return (
<StyledQueueContainer>
<StyledQueueLabel>
{agentChatQueuedMessages.length} Queued
</StyledQueueLabel>
{agentChatQueuedMessages.map((message) => {
const textPart = message.parts?.find((part) => part.type === 'text');
const displayText = textPart && 'text' in textPart ? textPart.text : '';
return (
<StyledQueuedItem key={message.id}>
<StyledQueuedText>{displayText}</StyledQueuedText>
<LightIconButton
Icon={IconX}
onClick={() => deleteQueuedMessage(message.id)}
size="small"
/>
</StyledQueuedItem>
);
})}
</StyledQueueContainer>
);
};
@@ -10,6 +10,7 @@ import { currentAIChatThreadState } from '@/ai/states/currentAIChatThreadState';
import { threadIdCreatedFromDraftState } from '@/ai/states/threadIdCreatedFromDraftState';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { AIChatQueuedMessages } from '@/ai/components/AIChatQueuedMessages';
import { AIChatTabMessageList } from '@/ai/components/AIChatTabMessageList';
const StyledContainer = styled.div<{ isDraggingFile: boolean }>`
@@ -51,6 +52,7 @@ export const AIChatTab = () => {
{!isDraggingFile && (
<>
<AIChatTabMessageList />
<AIChatQueuedMessages />
<AIChatEditorSection key={editorSectionKey} />
</>
)}
@@ -1,11 +1,16 @@
import { useCallback, useMemo } from 'react';
import { useStore } from 'jotai';
import { type AgentChatSubscriptionEvent } from 'twenty-shared/ai';
import { isDefined } from 'twenty-shared/utils';
import { AGENT_CHAT_REFETCH_MESSAGES_EVENT_NAME } from '@/ai/constants/AgentChatRefetchMessagesEventName';
import { AGENT_CHAT_UNKNOWN_THREAD_ID } from '@/ai/constants/AgentChatUnknownThreadId';
import { agentChatFirstLiveSeqState } from '@/ai/states/agentChatFirstLiveSeqState';
import { agentChatHandleEventCallbackState } from '@/ai/states/agentChatHandleEventCallbackState';
import { AGENT_CHAT_NEW_THREAD_DRAFT_KEY } from '@/ai/states/agentChatDraftsByThreadIdState';
import { agentChatFetchedMessagesComponentFamilyState } from '@/ai/states/agentChatFetchedMessagesComponentFamilyState';
import { agentChatMessagesLoadingState } from '@/ai/states/agentChatMessagesLoadingState';
import { agentChatQueuedMessagesComponentFamilyState } from '@/ai/states/agentChatQueuedMessagesComponentFamilyState';
import { currentAIChatThreadState } from '@/ai/states/currentAIChatThreadState';
import { skipMessagesSkeletonUntilLoadedState } from '@/ai/states/skipMessagesSkeletonUntilLoadedState';
import { mapDBMessagesToUIMessages } from '@/ai/utils/mapDBMessagesToUIMessages';
@@ -20,6 +25,7 @@ import {
} from '~/generated-metadata/graphql';
export const AgentChatMessagesFetchEffect = () => {
const store = useStore();
const currentAIChatThread = useAtomStateValue(currentAIChatThreadState);
const isNewThread = useMemo(
@@ -42,6 +48,11 @@ export const AgentChatMessagesFetchEffect = () => {
{ threadId: currentAIChatThread },
);
const setAgentChatQueuedMessages = useSetAtomComponentFamilyState(
agentChatQueuedMessagesComponentFamilyState,
{ threadId: currentAIChatThread },
);
const handleFirstLoad = useCallback(
(_data: GetChatMessagesQuery) => {
setSkipMessagesSkeletonUntilLoaded(false);
@@ -52,9 +63,42 @@ export const AgentChatMessagesFetchEffect = () => {
const handleDataLoaded = useCallback(
(data: GetChatMessagesQuery) => {
const uiMessages = mapDBMessagesToUIMessages(data.chatMessages ?? []);
setAgentChatFetchedMessages(uiMessages);
setAgentChatFetchedMessages(
uiMessages.filter((message) => message.status !== 'queued'),
);
setAgentChatQueuedMessages(
uiMessages.filter((message) => message.status === 'queued'),
);
const catchup = data.chatStreamCatchupChunks;
if (!isDefined(catchup) || catchup.chunks.length === 0) {
return;
}
const handleEvent = store.get(agentChatHandleEventCallbackState.atom);
if (!isDefined(handleEvent)) {
return;
}
const firstLiveSeq = store.get(agentChatFirstLiveSeqState.atom);
for (let index = 0; index < catchup.chunks.length; index++) {
const chunkSeq = index + 1;
if (firstLiveSeq !== null && chunkSeq >= firstLiveSeq) {
break;
}
handleEvent({
type: 'stream-chunk',
chunk: catchup.chunks[index],
seq: chunkSeq,
} as AgentChatSubscriptionEvent);
}
},
[setAgentChatFetchedMessages],
[setAgentChatFetchedMessages, setAgentChatQueuedMessages, store],
);
const handleLoadingChange = useCallback(
@@ -1,4 +1,4 @@
import { AgentChatAiSdkStreamEffect } from '@/ai/components/AgentChatAiSdkStreamEffect';
import { AgentChatStreamSubscriptionEffect } from '@/ai/components/AgentChatStreamSubscriptionEffect';
import { AgentChatMessagesFetchEffect } from '@/ai/components/AgentChatMessagesFetchEffect';
import { AgentChatSessionStartTimeEffect } from '@/ai/components/AgentChatSessionStartTimeEffect';
@@ -20,7 +20,7 @@ export const AgentChatProviderContent = ({
>
<AgentChatThreadInitializationEffect />
<AgentChatMessagesFetchEffect />
<AgentChatAiSdkStreamEffect />
<AgentChatStreamSubscriptionEffect />
<AgentChatStreamingPartsDiffSyncEffect />
<AgentChatSessionStartTimeEffect />
<AgentChatStreamingAutoScrollEffect />
@@ -1,11 +1,13 @@
import { useCallback, useEffect } from 'react';
import { isValidUuid } from 'twenty-shared/utils';
import { AGENT_CHAT_ENSURE_THREAD_FOR_DRAFT_EVENT_NAME } from '@/ai/constants/AgentChatEnsureThreadForDraftEventName';
import { AGENT_CHAT_REFETCH_MESSAGES_EVENT_NAME } from '@/ai/constants/AgentChatRefetchMessagesEventName';
import { useAgentChat } from '@/ai/hooks/useAgentChat';
import { useAgentChatSubscription } from '@/ai/hooks/useAgentChatSubscription';
import { useCreateAgentChatThread } from '@/ai/hooks/useCreateAgentChatThread';
import { useEnsureAgentChatThreadExistsForDraft } from '@/ai/hooks/useEnsureAgentChatThreadExistsForDraft';
import { useEnsureAgentChatThreadIdForSend } from '@/ai/hooks/useEnsureAgentChatThreadIdForSend';
import { agentChatDisplayedThreadState } from '@/ai/states/agentChatDisplayedThreadState';
import { agentChatErrorState } from '@/ai/states/agentChatErrorState';
import { agentChatFetchedMessagesComponentFamilyState } from '@/ai/states/agentChatFetchedMessagesComponentFamilyState';
import { agentChatIsInitialScrollPendingOnThreadChangeState } from '@/ai/states/agentChatIsInitialScrollPendingOnThreadChangeState';
import { agentChatIsLoadingState } from '@/ai/states/agentChatIsLoadingState';
@@ -14,23 +16,14 @@ import { agentChatMessagesComponentFamilyState } from '@/ai/states/agentChatMess
import { agentChatMessagesLoadingState } from '@/ai/states/agentChatMessagesLoadingState';
import { agentChatThreadsLoadingState } from '@/ai/states/agentChatThreadsLoadingState';
import { currentAIChatThreadState } from '@/ai/states/currentAIChatThreadState';
import { mergeAgentChatFetchedAndStreamingMessages } from '@/ai/utils/mergeAgentChatFetchedAndStreamingMessages';
import { normalizeAiSdkError } from '@/ai/utils/normalizeAiSdkError';
import { useListenToBrowserEvent } from '@/browser-event/hooks/useListenToBrowserEvent';
import { dispatchBrowserEvent } from '@/browser-event/utils/dispatchBrowserEvent';
import { useAtomComponentFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentFamilyStateValue';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { useSetAtomComponentFamilyState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentFamilyState';
import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState';
import { useCallback, useEffect } from 'react';
import { isValidUuid } from 'twenty-shared/utils';
export const AgentChatAiSdkStreamEffect = () => {
export const AgentChatStreamSubscriptionEffect = () => {
const currentAIChatThread = useAtomStateValue(currentAIChatThreadState);
const agentChatFetchedMessages = useAtomComponentFamilyStateValue(
agentChatFetchedMessagesComponentFamilyState,
{ threadId: currentAIChatThread },
);
const { createChatThread } = useCreateAgentChatThread();
@@ -45,47 +38,27 @@ export const AgentChatAiSdkStreamEffect = () => {
onBrowserEvent: ensureThreadExistsForDraft,
});
const onStreamingComplete = useCallback(() => {
dispatchBrowserEvent(AGENT_CHAT_REFETCH_MESSAGES_EVENT_NAME);
}, []);
useAgentChat(ensureThreadIdForSend);
const chatState = useAgentChat(
agentChatFetchedMessages,
ensureThreadIdForSend,
onStreamingComplete,
const subscriptionThreadId =
currentAIChatThread !== null && isValidUuid(currentAIChatThread)
? currentAIChatThread
: null;
useAgentChatSubscription(subscriptionThreadId);
const agentChatFetchedMessages = useAtomComponentFamilyStateValue(
agentChatFetchedMessagesComponentFamilyState,
{ threadId: currentAIChatThread },
);
// Attempt to resume an active stream when navigating to an existing
// thread. We call resumeStream() manually instead of using useChat's
// resume:true option so that the stop button can coexist with
// resumption (resume:true is incompatible with abort signals).
// Only resume when the thread already has fetched messages — this
// avoids resuming on newly created threads where the thread ID
// transitions from a placeholder to a real UUID mid-conversation.
useEffect(() => {
if (
currentAIChatThread === null ||
!isValidUuid(currentAIChatThread) ||
agentChatFetchedMessages.length === 0 ||
chatState.status === 'streaming' ||
chatState.status === 'submitted'
) {
return;
}
chatState.resumeStream();
// We intentionally omit chatState.resumeStream and status from deps
// to avoid resume loops. We do include agentChatFetchedMessages.length
// so that resume fires once messages are fetched (they may arrive
// after the thread ID is set).
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [currentAIChatThread, agentChatFetchedMessages.length]);
const setAgentChatMessages = useSetAtomComponentFamilyState(
agentChatMessagesComponentFamilyState,
{ threadId: currentAIChatThread },
);
const agentChatIsStreaming = useAtomStateValue(agentChatIsStreamingState);
const agentChatDisplayedThread = useAtomStateValue(
agentChatDisplayedThreadState,
);
@@ -99,22 +72,21 @@ export const AgentChatAiSdkStreamEffect = () => {
);
useEffect(() => {
const mergedMessages = mergeAgentChatFetchedAndStreamingMessages(
agentChatFetchedMessages,
chatState.messages,
);
if (agentChatIsStreaming) {
return;
}
setAgentChatMessages(mergedMessages);
setAgentChatMessages(agentChatFetchedMessages);
if (currentAIChatThread !== agentChatDisplayedThread) {
if (mergedMessages.length > 0) {
if (agentChatFetchedMessages.length > 0) {
setAgentChatIsInitialScrollPendingOnThreadChange(true);
}
setAgentChatDisplayedThread(currentAIChatThread);
}
}, [
agentChatFetchedMessages,
chatState.messages,
agentChatIsStreaming,
setAgentChatMessages,
currentAIChatThread,
agentChatDisplayedThread,
@@ -130,31 +102,20 @@ export const AgentChatAiSdkStreamEffect = () => {
agentChatMessagesLoadingState,
);
useEffect(() => {
const handleLoadingChange = useCallback(() => {
const combinedIsLoading =
chatState.isLoading ||
agentChatMessagesLoading ||
agentChatThreadsLoading;
agentChatMessagesLoading || agentChatThreadsLoading;
setAgentChatIsLoading(combinedIsLoading);
}, [
chatState.isLoading,
agentChatMessagesLoading,
agentChatThreadsLoading,
setAgentChatIsLoading,
]);
const setAgentChatError = useSetAtomState(agentChatErrorState);
useEffect(() => {
setAgentChatError(normalizeAiSdkError(chatState.error));
}, [chatState.error, setAgentChatError]);
const setAgentChatIsStreaming = useSetAtomState(agentChatIsStreamingState);
useEffect(() => {
setAgentChatIsStreaming(chatState.status === 'streaming');
}, [chatState.status, setAgentChatIsStreaming]);
handleLoadingChange();
}, [handleLoadingChange]);
return null;
};
@@ -1,25 +1,24 @@
import { useStore } from 'jotai';
import { useCallback } from 'react';
import { useAtomValue, useStore } from 'jotai';
import { useEffect } from 'react';
import { isDefined } from 'twenty-shared/utils';
import { CHAT_THREADS_PAGE_SIZE } from '@/ai/constants/ChatThreads';
import {
AGENT_CHAT_NEW_THREAD_DRAFT_KEY,
agentChatDraftsByThreadIdState,
} from '@/ai/states/agentChatDraftsByThreadIdState';
import { agentChatInputState } from '@/ai/states/agentChatInputState';
import { agentChatThreadsLoadingState } from '@/ai/states/agentChatThreadsLoadingState';
import { agentChatThreadsSelector } from '@/ai/states/agentChatThreadsSelector';
import { agentChatUsageState } from '@/ai/states/agentChatUsageState';
import { currentAIChatThreadState } from '@/ai/states/currentAIChatThreadState';
import { currentAIChatThreadTitleState } from '@/ai/states/currentAIChatThreadTitleState';
import { hasInitializedAgentChatThreadsState } from '@/ai/states/hasInitializedAgentChatThreadsState';
import { hasTriggeredCreateForDraftState } from '@/ai/states/hasTriggeredCreateForDraftState';
import { useQueryWithCallbacks } from '@/apollo/hooks/useQueryWithCallbacks';
import { metadataStoreState } from '@/metadata-store/states/metadataStoreState';
import { type FlatAgentChatThread } from '@/metadata-store/types/FlatAgentChatThread';
import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState';
import {
type GetChatThreadsQuery,
GetChatThreadsDocument,
} from '~/generated-metadata/graphql';
export const AgentChatThreadInitializationEffect = () => {
const currentAIChatThread = useAtomStateValue(currentAIChatThreadState);
@@ -33,71 +32,82 @@ export const AgentChatThreadInitializationEffect = () => {
agentChatThreadsLoadingState,
);
const store = useStore();
const handleFirstLoad = useCallback(
(data: GetChatThreadsQuery) => {
const threads = data.chatThreads.edges.map((edge) => edge.node);
if (threads.length > 0) {
const firstThread = threads[0];
const draftForThread =
store.get(agentChatDraftsByThreadIdState.atom)[firstThread.id] ?? '';
setCurrentAIChatThread(firstThread.id);
setAgentChatInput(draftForThread);
setCurrentAIChatThreadTitle(firstThread.title ?? null);
const hasUsageData =
(firstThread.conversationSize ?? 0) > 0 &&
isDefined(firstThread.contextWindowTokens);
setAgentChatUsage(
hasUsageData
? {
lastMessage: null,
conversationSize: firstThread.conversationSize ?? 0,
contextWindowTokens: firstThread.contextWindowTokens ?? 0,
inputTokens: firstThread.totalInputTokens,
outputTokens: firstThread.totalOutputTokens,
inputCredits: firstThread.totalInputCredits,
outputCredits: firstThread.totalOutputCredits,
}
: null,
);
} else {
store.set(hasTriggeredCreateForDraftState.atom, false);
setCurrentAIChatThread(AGENT_CHAT_NEW_THREAD_DRAFT_KEY);
setAgentChatInput(
store.get(agentChatDraftsByThreadIdState.atom)[
AGENT_CHAT_NEW_THREAD_DRAFT_KEY
] ?? '',
);
setCurrentAIChatThreadTitle(null);
setAgentChatUsage(null);
}
},
[
setCurrentAIChatThread,
setAgentChatInput,
setCurrentAIChatThreadTitle,
setAgentChatUsage,
store,
],
const agentChatThreads = useAtomStateValue(agentChatThreadsSelector);
const storeEntry = useAtomValue(
metadataStoreState.atomFamily('agentChatThreads'),
);
const [hasInitializedAgentChatThreads, setHasInitializedAgentChatThreads] =
useAtomState(hasInitializedAgentChatThreadsState);
const handleLoadingChange = useCallback(
(loading: boolean) => {
setAgentChatThreadsLoading(loading);
},
[setAgentChatThreadsLoading],
);
useEffect(() => {
setAgentChatThreadsLoading(storeEntry.status === 'empty');
}, [storeEntry.status, setAgentChatThreadsLoading]);
useQueryWithCallbacks(GetChatThreadsDocument, {
variables: { paging: { first: CHAT_THREADS_PAGE_SIZE } },
skip: isDefined(currentAIChatThread),
onFirstLoad: handleFirstLoad,
onLoadingChange: handleLoadingChange,
});
useEffect(() => {
if (hasInitializedAgentChatThreads || isDefined(currentAIChatThread)) {
return;
}
if (storeEntry.status === 'empty') {
return;
}
setHasInitializedAgentChatThreads(true);
const sortedThreads = agentChatThreads.toSorted(
(a: FlatAgentChatThread, b: FlatAgentChatThread) =>
new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime(),
);
if (sortedThreads.length > 0) {
const firstThread = sortedThreads[0];
const draftForThread =
store.get(agentChatDraftsByThreadIdState.atom)[firstThread.id] ?? '';
setCurrentAIChatThread(firstThread.id);
setAgentChatInput(draftForThread);
setCurrentAIChatThreadTitle(firstThread.title ?? null);
const hasUsageData =
(firstThread.conversationSize ?? 0) > 0 &&
isDefined(firstThread.contextWindowTokens);
setAgentChatUsage(
hasUsageData
? {
lastMessage: null,
conversationSize: firstThread.conversationSize ?? 0,
contextWindowTokens: firstThread.contextWindowTokens ?? 0,
inputTokens: firstThread.totalInputTokens,
outputTokens: firstThread.totalOutputTokens,
inputCredits: firstThread.totalInputCredits,
outputCredits: firstThread.totalOutputCredits,
}
: null,
);
} else {
store.set(hasTriggeredCreateForDraftState.atom, false);
setCurrentAIChatThread(AGENT_CHAT_NEW_THREAD_DRAFT_KEY);
setAgentChatInput(
store.get(agentChatDraftsByThreadIdState.atom)[
AGENT_CHAT_NEW_THREAD_DRAFT_KEY
] ?? '',
);
setCurrentAIChatThreadTitle(null);
setAgentChatUsage(null);
}
}, [
agentChatThreads,
currentAIChatThread,
hasInitializedAgentChatThreads,
setHasInitializedAgentChatThreads,
storeEntry.status,
setCurrentAIChatThread,
setAgentChatInput,
setCurrentAIChatThreadTitle,
setAgentChatUsage,
store,
]);
return null;
};
@@ -1,13 +1,13 @@
import { styled } from '@linaria/react';
import { aiModelsState } from '@/client-config/states/aiModelsState';
import { InputLabel } from '@/ui/input/components/InputLabel';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { styled } from '@linaria/react';
import { t } from '@lingui/core/macro';
import { useContext } from 'react';
import { isDefined } from 'twenty-shared/utils';
import { IconBrandX, IconWorld } from 'twenty-ui/display';
import { Checkbox } from 'twenty-ui/input';
import { Section } from 'twenty-ui/layout';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { useContext } from 'react';
import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants';
const StyledCheckboxContainer = styled.div<{ disabled: boolean }>`
@@ -15,8 +15,9 @@ const StyledCheckboxContainer = styled.div<{ disabled: boolean }>`
border-radius: ${themeCssVariables.border.radius.sm};
cursor: ${({ disabled }) => (disabled ? 'not-allowed' : 'pointer')};
display: flex;
height: ${themeCssVariables.spacing[8]};
justify-content: space-between;
padding: ${themeCssVariables.spacing[1]};
padding-inline: ${themeCssVariables.spacing[2]};
transition: background-color
calc(${themeCssVariables.animation.duration.normal} * 1s) ease;
@@ -8,13 +8,13 @@ import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants';
import { CodeExecutionDisplay } from '@/ai/components/CodeExecutionDisplay';
import { ShimmeringText } from '@/ai/components/ShimmeringText';
import { getToolIcon } from '@/ai/utils/getToolIcon';
import { ToolOutputMessageSchema } from '@/ai/schemas/toolOutputMessageSchema';
import { ToolOutputResultSchema } from '@/ai/schemas/toolOutputResultSchema';
import {
getToolDisplayMessage,
resolveToolInput,
} from '@/ai/utils/getToolDisplayMessage';
import { ToolOutputMessageSchema } from '@/ai/schemas/toolOutputMessageSchema';
import { ToolOutputResultSchema } from '@/ai/schemas/toolOutputResultSchema';
import { getToolIcon } from '@/ai/utils/getToolIcon';
import { useLingui } from '@lingui/react/macro';
import { type ToolUIPart } from 'ai';
import { isDefined } from 'twenty-shared/utils';
@@ -152,9 +152,15 @@ export const ToolStepRenderer = ({
const isExpandable = isDefined(output) || hasError;
const ToolIcon = getToolIcon(toolName);
const outputResult = ToolOutputResultSchema.safeParse(output);
const unwrappedOutput =
rawToolName === 'execute_tool' && outputResult.success
? outputResult.data.result
: output;
if (toolName === 'code_interpreter') {
const codeInput = toolInput as { code?: string } | undefined;
const codeOutput = output as {
const codeOutput = unwrappedOutput as {
result?: {
stdout?: string;
stderr?: string;
@@ -168,7 +174,7 @@ export const ToolStepRenderer = ({
};
} | null;
const isRunning = !output && !hasError && isStreaming;
const isRunning = !unwrappedOutput && !hasError && isStreaming;
return (
<CodeExecutionDisplay
@@ -210,12 +216,6 @@ export const ToolStepRenderer = ({
);
}
const outputResult = ToolOutputResultSchema.safeParse(output);
const unwrappedOutput =
rawToolName === 'execute_tool' && outputResult.success
? outputResult.data.result
: output;
const unwrappedResult = ToolOutputResultSchema.safeParse(unwrappedOutput);
const unwrappedMessage = ToolOutputMessageSchema.safeParse(unwrappedOutput);
@@ -109,7 +109,7 @@ describe('AIChatAssistantMessageRenderer', () => {
);
});
it('should keep code interpreter rendering path unchanged and out of thinking grouping', () => {
it('should show data-code-execution during streaming and hide the tool part to avoid duplicates', () => {
const messageParts = [
{
type: 'tool-code_interpreter',
@@ -134,11 +134,65 @@ describe('AIChatAssistantMessageRenderer', () => {
renderAssistantRenderer(messageParts);
expect(screen.queryByTestId('thinking-steps-display')).toBeNull();
expect(screen.queryByTestId('tool-step-renderer')).toBeNull();
expect(screen.getByTestId('code-execution-display')).toBeInTheDocument();
});
it('should render tool-execute_tool wrapping code_interpreter via ToolStepRenderer after refetch', () => {
const messageParts = [
{
type: 'tool-execute_tool',
toolCallId: 'tool-exec-1',
input: {
toolName: 'code_interpreter',
arguments: { code: 'print(42)' },
},
output: {
result: { stdout: '42', stderr: '', exitCode: 0, files: [] },
},
state: 'output-available',
},
] as ExtendedUIMessagePart[];
renderAssistantRenderer(messageParts);
expect(screen.queryByTestId('thinking-steps-display')).toBeNull();
expect(screen.getByTestId('tool-step-renderer')).toHaveTextContent(
'tool-code_interpreter',
'tool-execute_tool',
);
expect(screen.queryByTestId('code-execution-display')).toBeNull();
});
it('should hide execute_tool wrapping code_interpreter when data-code-execution parts exist', () => {
const messageParts = [
{
type: 'tool-execute_tool',
toolCallId: 'tool-exec-1',
input: {
toolName: 'code_interpreter',
arguments: { code: 'print(42)' },
},
output: null,
state: 'call',
},
{
type: 'data-code-execution',
data: {
executionId: 'exec-2',
state: 'running',
code: 'print(42)',
language: 'python',
stdout: '42',
stderr: '',
files: [],
},
},
] as ExtendedUIMessagePart[];
renderAssistantRenderer(messageParts);
expect(screen.queryByTestId('tool-step-renderer')).toBeNull();
expect(screen.getByTestId('code-execution-display')).toBeInTheDocument();
});
it('should render non-thinking parts directly when there are no thinking steps', () => {
@@ -0,0 +1 @@
export const AGENT_CHAT_INSTANCE_ID = 'agentChatComponentInstance';
@@ -1 +0,0 @@
export const AGENT_CHAT_RETRY_EVENT_NAME = 'agent-chat-retry' as const;
@@ -0,0 +1,7 @@
import { gql } from '@apollo/client';
export const DELETE_QUEUED_CHAT_MESSAGE = gql`
mutation DeleteQueuedChatMessage($messageId: UUID!) {
deleteQueuedChatMessage(messageId: $messageId)
}
`;
@@ -0,0 +1,23 @@
import { gql } from '@apollo/client';
export const SEND_CHAT_MESSAGE = gql`
mutation SendChatMessage(
$threadId: UUID!
$text: String!
$messageId: UUID!
$browsingContext: JSON
$modelId: String
) {
sendChatMessage(
threadId: $threadId
text: $text
messageId: $messageId
browsingContext: $browsingContext
modelId: $modelId
) {
messageId
queued
streamId
}
}
`;

Some files were not shown because too many files have changed in this diff Show More