Compare commits

...
Author SHA1 Message Date
Sonarly Claude Code 01c8a64f5b fix: add connection pool resilience for parallel nested relation queries
https://sonarly.com/issue/19549?type=bug

A `FindOneCompany` GraphQL query fails with "Connection terminated unexpectedly" when the server fires many parallel relation queries that exhaust or destabilize the PostgreSQL connection pool under memory pressure.

Fix: Replaced `Promise.all` with a sequential `for...of` loop in `ProcessNestedRelationsV2Helper.processNestedRelations()` to serialize nested relation database queries.

**Problem:** The `FindOneCompany` GraphQL query (and similar record queries) request 10+ relations simultaneously (accountOwner, attachments, favorites, people, noteTargets, opportunities, timelineActivities, etc.). The previous code fired all these as parallel database queries via `Promise.all`, which could exhaust the default PostgreSQL connection pool (10 connections), causing `Connection terminated unexpectedly` errors.

**Fix:** Sequential execution ensures only 1 relation query runs at a time, keeping concurrent DB connections well within pool limits. Individual relation queries are fast (typically 2-50ms), so serialization adds negligible wall-clock time (~100-500ms total for 10 relations) compared to the catastrophic failure it prevents.

**Precedent:** This follows the exact same pattern merged in commit `0a1ac48eea` which serialized cache recomputation in `WorkspaceCacheService.recomputeDataFromProvider()` to prevent the same class of pool exhaustion bug.
2026-03-30 12:08:52 +00:00
Raphaël BosiandGitHub cb85a1b5a3 Fix record name hover (#19109)
## Before


https://github.com/user-attachments/assets/1972f3ac-17b2-4531-a64e-22f2672de71c

## After


https://github.com/user-attachments/assets/0fffdac6-0fcb-4446-9b7f-1791ec08e2df
2026-03-30 13:15:02 +02:00
neo773andGitHub ef8789fad6 fix: convert empty parentFolderId to null in messageFolder core dual-write (#19110) 2026-03-30 13:11:38 +02:00
Raphaël BosiandGitHub ee479001a1 Fix workspace dropdown (#19106)
## Before


https://github.com/user-attachments/assets/2ebc682d-f868-4a8b-8a1a-fe304222652e

## After


https://github.com/user-attachments/assets/e6fddab2-b5a1-4941-b60f-f45ad2bfaadd
2026-03-30 12:56:23 +02:00
6af7e32c54 i18n - docs translations (#19113)
Created by Github action

Co-authored-by: github-actions <github-actions@twenty.com>
2026-03-30 12:45:45 +02:00
Abdullah.andGitHub d246b16063 More parts of the new website. (#19094)
This PR brings in a few more components and some refactor of the
existing components for the website due to design requirements.
2026-03-30 12:00:32 +02:00
0b2f435b3e i18n - translations (#19108)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-03-30 11:00:52 +02:00
martmullandGitHub 039a04bc2f Fix warning about ../../tsconfig.base.json not found (#19105)
as title
2026-03-30 10:56:59 +02:00
martmullandGitHub fe1377f18b Provide applicatiion assets (#18973)
- improve backend
- improve frontend

<img width="1293" height="824" alt="image"
src="https://github.com/user-attachments/assets/7a4633f1-85cd-4126-b058-dbeae6ba2218"
/>
2026-03-30 10:53:31 +02:00
58189e1c05 chore: sync AI model catalog from models.dev (#19100)
Automated daily sync of `ai-providers.json` from
[models.dev](https://models.dev).

This PR updates pricing, context windows, and model availability based
on the latest data.
New models meeting inclusion criteria (tool calling, pricing data,
context limits) are added automatically.
Deprecated models are detected based on cost-efficiency within the same
model family.

**Please review before merging** — verify no critical models were
incorrectly deprecated.

Co-authored-by: FelixMalfait <6399865+FelixMalfait@users.noreply.github.com>
2026-03-30 08:31:25 +02:00
Charles BochetandGitHub a3f468ef98 chore: remove IS_ROW_LEVEL_PERMISSION_PREDICATES_ENABLED and IS_DATE_TIME_WHOLE_DAY_FILTER_ENABLED feature flags (#19082)
## Summary
- Removes `IS_ROW_LEVEL_PERMISSION_PREDICATES_ENABLED` feature flag,
making row-level permission predicates always enabled. Removes
early-return guards from query builders (select, update, insert) and the
shared utility, the public feature flag metadata entry, and
`updateFeatureFlag` calls from integration tests.
- Removes `IS_DATE_TIME_WHOLE_DAY_FILTER_ENABLED` feature flag, making
whole-day datetime filtering always enabled. Simplifies filter input
components and hooks to always use date-only format for `IS` operand on
`DATE_TIME` fields.
- Cleans up enum definitions, seed data, generated schema files, and
test mocks for both flags.
2026-03-29 12:26:08 +02:00
Charles BochetandGitHub 4d74cc0a28 chore: remove IS_APPLICATION_ENABLED feature flag (#19081)
## Summary
- Remove the `IS_APPLICATION_ENABLED` feature flag — application
features are now always enabled
- Remove `@RequireFeatureFlag` decorators and `FeatureFlagGuard` from 7
application resolvers (registration, development, manifest, install,
upgrade, marketplace, oauth)
- Remove frontend feature flag checks: settings navigation visibility,
route protection wrapper, side panel widget type gating, and role
permission flag filtering
- Delete the integration test for disabled-flag behavior
- Clean up seed data, test mocks, and generated schema files
2026-03-29 11:43:35 +02:00
05c0713474 i18n - translations (#19080)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-03-29 10:51:48 +02:00
Charles BochetandGitHub 28de34cf20 chore: remove IS_DASHBOARD_V2_ENABLED feature flag (#19079)
## Summary
- Remove the `IS_DASHBOARD_V2_ENABLED` feature flag from the codebase
- Dashboard V2 features (gauge charts, line charts, pie charts) are now
always enabled
- Remove the validator gate that blocked gauge chart creation/update
without the flag
- Clean up all related code: seed data, dev-seeder service, widget
seeds, and test mocks
2026-03-29 10:45:54 +02:00
Charles BochetandGitHub e8cb086b64 chore: remove completed migration feature flags and upgrade commands <= 1.18 (#19074)
## Summary

- Remove 3 completed migration feature flags: `IS_ATTACHMENT_MIGRATED`,
`IS_NOTE_TARGET_MIGRATED`, `IS_TASK_TARGET_MIGRATED` — these were
already enabled by default for all new workspaces via
`DEFAULT_FEATURE_FLAGS`
- Delete all upgrade command directories for versions <= 1.18 (`1-16/`,
`1-17/`, `1-18/`) along with their module registrations, removing ~6,600
lines of dead migration code
- Simplify frontend utility functions
(`getActivityTargetObjectFieldIdName`, `getActivityTargetsFilter`,
`getActivityTargetFieldNameForObject`,
`generateActivityTargetMorphFieldKeys`,
`findActivitiesOperationSignatureFactory`) by removing the
`isMorphRelation` parameter and always using the morph relation path
- Remove feature flag checks from 7 frontend hooks/components that were
gating attachment and activity target behavior behind the removed flags
- Simplify `buildDefaultRelationFlatFieldMetadatasForCustomObject`
server util to always treat attachment, noteTarget, and taskTarget as
morph relations without checking feature flags
2026-03-29 09:15:26 +02:00
f651413297 chore: sync AI model catalog from models.dev (#19078)
Automated daily sync of `ai-providers.json` from
[models.dev](https://models.dev).

This PR updates pricing, context windows, and model availability based
on the latest data.
New models meeting inclusion criteria (tool calling, pricing data,
context limits) are added automatically.
Deprecated models are detected based on cost-efficiency within the same
model family.

**Please review before merging** — verify no critical models were
incorrectly deprecated.

Co-authored-by: FelixMalfait <6399865+FelixMalfait@users.noreply.github.com>
2026-03-29 08:20:40 +02:00
ccaea1ba36 i18n - translations (#19076)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-03-29 07:37:29 +02:00
Félix MalfaitandGitHub a51b5ed589 fix: resolve settings/usage chart crash and add ClickHouse usage event seeds (#19039)
## Summary

- **Fix settings/usage page crash**: The `GraphWidgetLineChart`
component used on `settings/usage` was crashing with "Instance id is not
provided and cannot be found in context" because it requires
`WidgetComponentInstanceContext` (for tooltip/crosshair component
states) which is only provided inside the widget system. Wraps the
standalone chart usages with the required context provider.
- **Avoid mounting `GraphWidgetLegend` when hidden**: The legend
component calls `useIsPageLayoutInEditMode()` which requires
`PageLayoutEditModeProviderContext` — another context only available
inside the widget system. Since the settings page passes
`showLegend={false}`, the fix conditionally unmounts the legend instead
of always mounting it with a `show` prop. Applied consistently across
all four chart types (line, bar, pie, gauge).
- **Add ClickHouse usage event seeds**: Generates ~400 realistic
`usageEvent` rows spanning the past 35 days with weighted user activity,
weekday/weekend patterns, and gradual ramp-up. Enables developers to see
the usage analytics page with data locally.

## Test plan

- [ ] Navigate to `settings/usage` — page should render without errors
- [ ] Verify the daily usage line chart displays correctly
- [ ] Navigate to a user detail page from the usage list
- [ ] Verify the user detail chart renders without errors
- [ ] Run `npx nx clickhouse:seed twenty-server` and confirm usage
events are seeded
- [ ] Verify chart legend still works correctly on dashboard widgets (no
regression)


Made with [Cursor](https://cursor.com)
2026-03-29 07:31:36 +02:00
6efd9ad26e i18n - translations (#19073)
Created by Github action

Co-authored-by: github-actions <github-actions@twenty.com>
2026-03-28 22:59:16 +01:00
Charles BochetandGitHub c407341912 feat: optimize hot database queries with multi-layer caching (#19068)
## Summary

Introduces multi-layer caching for the 5 most frequent database queries
identified in production (Sentry data), targeting the JWT authentication
hot path and cron job logic.

### Problem
Our database is under heavy load from uncached queries on the auth hot
path:
- `WorkspaceEntity` lookups: **638 queries/min**
- `ApiKeyEntity` lookups: **491 queries/min**
- `UserEntity` lookups: **147 queries/min**
- `UserWorkspaceEntity` lookups: **143 queries/min**
- `LogicFunctionEntity` lookups: **1800 queries/min** (cron job)

### Solution

**1. New `CoreEntityCacheService`** for non-workspace-scoped entities
(Workspace, User, UserWorkspace):
- Mirrors `WorkspaceCacheService` architecture (in-process Map + Redis
with hash validation)
- Provider pattern with `@CoreEntityCache` decorator
- Keyed by entity primary key (not workspaceId)
- 100ms local TTL, Redis-backed hash validation for cross-instance
consistency
- Three providers: `WorkspaceEntityCacheProviderService`,
`UserEntityCacheProviderService`,
`UserWorkspaceEntityCacheProviderService`

**2. New `apiKeyMap` WorkspaceCache** for workspace-scoped API key
lookups:
- `WorkspaceApiKeyMapCacheService` loads all API keys for a workspace
into a map by ID
- Leverages existing `WorkspaceCacheService` infrastructure
- Cache invalidation on API key create/update/revoke

**3. `CronTriggerCronJob` refactored** to use existing
`flatLogicFunctionMaps` workspace cache:
- Eliminates per-workspace `LogicFunctionEntity` repository queries
(~1800/min)
- Filters cached data in-memory instead

**4. `JwtAuthStrategy` refactored** to use caches for all entity
lookups:
- Workspace, User, UserWorkspace → `CoreEntityCacheService`
- ApiKey → `WorkspaceCacheService` (`apiKeyMap`)
- Impersonation queries kept as direct DB queries (rare path, requires
relations)

**5. Cache invalidation** wired into mutation paths:
- `WorkspaceService` → invalidates `workspaceEntity` on
save/update/delete
- `ApiKeyService` → invalidates `apiKeyMap` on create/update/revoke

### Architecture

```
Request → JwtAuthStrategy
  ├── Workspace lookup → CoreEntityCacheService (in-process → Redis → DB)
  ├── User lookup → CoreEntityCacheService (in-process → Redis → DB)
  ├── UserWorkspace lookup → CoreEntityCacheService (in-process → Redis → DB)
  └── ApiKey lookup → WorkspaceCacheService (in-process → Redis → DB)

CronTriggerCronJob
  └── LogicFunction lookup → WorkspaceCacheService (flatLogicFunctionMaps)
```

### Expected Impact
| Query | Before | After |
|-------|--------|-------|
| WorkspaceEntity | 638/min | ~0 (cached) |
| ApiKeyEntity | 491/min | ~0 (cached) |
| UserEntity | 147/min | ~0 (cached) |
| UserWorkspaceEntity | 143/min | ~0 (cached) |
| LogicFunctionEntity | 1800/min | ~0 (cached) |

### Not included (ongoing separately)
- DataSourceEntity query optimization (IS_DATASOURCE_MIGRATED migration)
- ObjectMetadataEntity query optimization (already partially cached)
2026-03-28 22:53:34 +01:00
Charles BochetandGitHub 81fc960712 Deprecate dataSource table with dual-write to workspace.databaseSchema (#19059)
## Summary
- Starts deprecation of the `core.dataSource` table by introducing a
dual-write system: `DataSourceService.createDataSourceMetadata` now
writes to both `core.dataSource` and `core.workspace.databaseSchema`
- Migrates read sites (`WorkspaceDataSourceService.checkSchemaExists`,
`WorkspaceSchemaFactory`, `MiddlewareService`,
`WorkspacesMigrationCommandRunner`) to read from
`workspace.databaseSchema` instead of querying the `dataSource` table
- Removes the unused `databaseUrl` field from `WorkspaceEntity` and
drops the column via migration
- Adds a 1.20 upgrade command to backfill `workspace.databaseSchema`
from `dataSource.schema` for existing workspaces
2026-03-28 11:29:19 +01:00
Charles BochetandGitHub cb44b22e15 Fix INDEX view showing labelPlural instead of resolved view name in nav (#19049)
## Summary
- Navigation sidebar was displaying "Notes" instead of "All Notes" for
INDEX views
- `getNavigationMenuItemLabel` had a special case for INDEX views that
returned `objectMetadataItem.labelPlural` instead of the
already-resolved `view.name`
- Since `viewsSelector` already resolves `{objectLabelPlural}` templates
via `resolveViewNamePlaceholders`, the INDEX special case was redundant
and incorrect — removed it from both `getNavigationMenuItemLabel` and
`getViewNavigationMenuItemLabel`
- Added unit tests covering all navigation menu item type branches

<img width="222" height="479" alt="image"
src="https://github.com/user-attachments/assets/de6f92b1-e0c2-445a-a145-cf2820434af7"
/>
2026-03-27 17:25:52 +00:00
9498a60f74 i18n - translations (#19048)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-03-27 17:39:22 +01:00
Charles BochetandGitHub 191a277ddf fix: invalidate rolesPermissions cache + add Docker Hub auth to CI (#19044)
## Summary

### Cache invalidation fix
- After migrating object/field permissions to syncable entities (#18609,
#18751, #18567), changes to `flatObjectPermissionMaps`,
`flatFieldPermissionMaps`, or `flatPermissionFlagMaps` no longer
triggered `rolesPermissions` cache invalidation
- This caused stale permission data to be served, leading to flaky
`permissions-on-relations` integration tests and potentially incorrect
permission enforcement in production after object permission upserts
- Adds the three permission-related flat map keys to the condition that
triggers `rolesPermissions` cache recomputation in
`WorkspaceMigrationRunnerService.getLegacyCacheInvalidationPromises`
- Clears memoizer after recomputation to prevent concurrent
`getOrRecompute` calls from caching stale data

### Docker Hub rate limit fix
- CI service containers (postgres, redis, clickhouse) and `docker
run`/`docker build` steps were pulling from Docker Hub
**unauthenticated**, hitting the 100-pull-per-6-hour rate limit on
shared GitHub-hosted runner IPs
- Adds `credentials` blocks to all service container definitions and
`docker/login-action` steps before `docker run`/`docker compose`
commands
- Uses `vars.DOCKERHUB_USERNAME` + `secrets.DOCKERHUB_PASSWORD`
(matching the existing twenty-infra convention)
- Affected workflows: ci-server, ci-merge-queue, ci-breaking-changes,
ci-zapier, ci-sdk, ci-create-app-e2e, ci-website,
ci-test-docker-compose, preview-env-keepalive, spawn-twenty-docker-image
action
2026-03-27 17:32:53 +01:00
7f1814805d Fix backfill record page layout command (#19043)
Co-authored-by: Charles Bochet <charlesBochet@users.noreply.github.com>
2026-03-27 16:56:30 +01:00
34b81adce8 i18n - translations (#19046)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-03-27 16:38:08 +01:00
Félix MalfaitandGitHub cd2e08b912 Enforce workspace count limit for multi-workspace setups (#19036)
## Summary
- Limits workspace creation to 5 workspaces per server when no valid
enterprise key is configured
- Enterprise key validity is checked first (synchronous, in-memory
cached) to avoid unnecessary DB queries on enterprise deployments
- Adds 4 unit tests covering: limit enforcement, enterprise key bypass,
below-limit creation, and performance (no enterprise check when
workspace count is zero)

## Test plan
- [x] All 11 unit tests pass (8 existing + 3 new behavioral + 1
performance assertion)
- [ ] Manual: verify workspace creation blocked at limit=5 without
enterprise key
- [ ] Manual: verify workspace creation allowed beyond limit with valid
enterprise key
- [ ] Manual: verify first workspace (bootstrap) creation is unaffected


Made with [Cursor](https://cursor.com)
2026-03-27 16:31:27 +01:00
Charles BochetandGitHub fb21f3ccf5 fix: resolve availabilityObjectMetadataUniversalIdentifier in backfill command (#19041)
## Summary

- Fixes workflow manual trigger command menu items losing their
`availabilityObjectMetadataId` during the 1-20 backfill upgrade command
- The migration runner's `transpileUniversalActionToFlatAction` resolves
`availabilityObjectMetadataId` **from**
`availabilityObjectMetadataUniversalIdentifier`, overwriting the
original value. The backfill was hardcoding the universal identifier to
`null`, causing all `RECORD_SELECTION` items to end up with `NULL`
`availabilityObjectMetadataId` after persistence.
- Now properly resolves `availabilityObjectMetadataUniversalIdentifier`
from `flatObjectMetadataMaps.universalIdentifierById` so the runner can
correctly derive the FK during INSERT.
2026-03-27 16:01:31 +01:00
Paul RastoinandGitHub 281bb6d783 Guard yarn database:migrate:prod (#19008)
## Motivations
A lot of self hosters hands up using the `yarn database:migrated:prod`
either manually or through AI assisted debug while they try to upgrade
an instance while their workspace is still blocked in a previous one
Leading to their whole database permanent corruption

## What happened
Replaced the direct call the the typeorm cli to a command calling it
programmatically, adding a layer of security in case a workspace seems
to be blocked in a previous version than the one just before the one
being installed ( e.g 1.0 when you try to upgrade from 1.1 to 1.2 )

For our cloud we still need a way to bypass this security explaining the
-f flag

## Remark
Centralized this logic and refactored creating new services
`WorkspaceVersionService` and `CoreEngineVersionService` that will
become useful for the upcoming upgrade refactor

Related to https://github.com/twentyhq/twenty-infra/pull/529
2026-03-27 14:39:18 +00:00
c96c034908 i18n - translations (#19040)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-03-27 14:53:33 +01:00
Abdul RahmanGitHubCopilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>Charles Bochet
5efe69f8d3 Migrate field permission to syncable entity (#18751)
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2026-03-27 14:47:27 +01:00
c2b058a6a7 fix: use workspace-generated id for core dual-write in message folder save (#19038)
Co-authored-by: Charles Bochet <charlesBochet@users.noreply.github.com>
2026-03-27 13:53:30 +01:00
Abdullah.andGitHub 22c9693ce5 First PR to bring in the new twenty website. (#19035)
This PR contains Menu, Hero, TrustedBy, Problem, ThreeCards and Footer
sections of the new website.

Most components in there match the Figma designs, except for two things.
- Zoom levels on 3D illustrations from Endless Tools.
- Menu needs to have the same color as Hero - it's not happening at the
moment since Menu is in the layout, not nested inside pages or Hero.

Images are placeholders (same as Figma).
2026-03-27 13:48:03 +01:00
50ea560e57 Seed company workflow for email upserts (#18909)
@thomtrp

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2026-03-27 13:47:07 +01:00
EtienneandGitHub 56056b885d refacto - remove hello-pangea/dnd from navigation-menu-item module (#19033)
Removed all @hello-pangea/dnd imports from the navigation-menu-item/
module by replacing the type bridge layer with a native
NavigationMenuItemDropResult type. The dnd-kit events were already
powering all DnD — hello-pangea was only used as a type contract and one
dead <Droppable> component.
3 files deleted (dead <Droppable> wrapper, DROP_RESULT_OPTIONS shim,
toDropResult bridge), 4 files edited (handler signatures simplified,
bridge removed from orchestrator, utility type narrowed), 1 type
created. Zero behavioral changes, typecheck and tests pass.
2026-03-27 11:23:25 +00:00
Paul RastoinandGitHub db9da3194f Refactor client auto heal (#19032) 2026-03-27 09:23:26 +00:00
BugIsGodandGitHub 68f5e70ade fix: sign file URLs in timeline and file loss on click outside (#19001)
Fixes: #18943
## Problem

  Two bugs related to the Files field:

1. **File loss on click outside**: When `MultiItemFieldInput` was not in
edit mode (input hidden), clicking outside would still call
`validateInputAndComputeUpdatedItems()` with an empty `inputValue` and
`itemToEditIndex = 0`, causing the first file to be silently deleted.
<img width="624" height="332" alt="image"
src="https://github.com/user-attachments/assets/657aff2c-e497-4685-b8b7-fa22aba772f8"
/>


2. **Unsigned file URLs in timeline activity**: FileId, FileName stored
in `timelineActivity.properties.diff` (before/after values) were not
being signed (timeActivity.properties is stored as json in database),
making them inaccessible from the
frontend.

<img width="1092" height="103" alt="image"
src="https://github.com/user-attachments/assets/23d83ea3-4eb9-41ef-a99c-c4515d1cfb35"
/>


 ## Reproduction


https://github.com/user-attachments/assets/e75b842b-5cbb-46e8-a923-ac9df62deb98

## Changes
- `MultiItemFieldInput.tsx`: Wrap the validate + onChange logic in `if
(isInputDisplayed)` so it only runs when the input is actually open.
- `timeline-activity-query-result-getter.handler.ts`: New handler that
iterates over `properties.diff` fields and signs any file arrays found
in `before`/`after` values (call same method:
`fileUrlService.signFileByIdUrl` as table field view
`FilesFieldQueryResultGetterHandler`.
- `common-result-getters.service.ts`: Register the new handler for
`timelineActivity`.


## After 


https://github.com/user-attachments/assets/368c7be1-3101-43a2-ac93-fe1b0d8a7a37
2026-03-27 08:28:30 +00:00
Félix MalfaitandGitHub 08077476f3 fix: remove remaining direct cookie writes that make tokenPair a session cookie on renewal (#19031)
## Summary

- Removes two remaining direct `cookieStorage.setItem('tokenPair', ...)`
calls that were overwriting the Jotai-managed cookie (180-day expiry)
with a session cookie (no expiry) during **token renewal**
- Followup to #18795 which fixed the same issue in `handleSetAuthTokens`
but missed the renewal code paths

## Root cause

Two token renewal paths still had direct cookie writes without
`expires`:

1. **`apollo.factory.ts`** — `attemptTokenRenewal()` fires on every
`UNAUTHENTICATED` GraphQL error after a successful token refresh
2. **`useAgentChat.ts`** — `retryFetchWithRenewedToken()` fires on 401
from the AI chat endpoint

Both called `cookieStorage.setItem('tokenPair', JSON.stringify(tokens))`
without an `expires` attribute, creating a session cookie that overwrote
the Jotai-managed one. This is why the bug was **intermittent after
#18795**: it only appeared after a token renewal, not on fresh login.

The `onTokenPairChange` / `setTokenPair` calls already write through
Jotai's `atomWithStorage` → `createJotaiCookieStorage`, which always
sets `expires: 180 days`.

## Test plan

- Log in to the app
- Wait for a token renewal to occur (or force one by letting the access
token expire)
- Inspect the `tokenPair` cookie in DevTools → Application → Cookies
- Verify the cookie retains an expiration date ~180 days from now (not
"Session")
- Close and reopen the browser — confirm you remain logged in


Made with [Cursor](https://cursor.com)
2026-03-27 08:21:26 +00:00
6f0ac88e20 fix: batch viewGroup mutations sequentially to prevent race conditions (#19027)
## Bug Description

When reordering stages in the Kanban board, the frontend fires all
viewGroup update mutations concurrently via Promise.all, causing race
conditions in the workspace migration runner's cache invalidation,
database contention, and a thundering herd effect that stalls the
server.

## Changes

Changed `usePerformViewGroupAPIPersist` to execute viewGroup update
mutations sequentially instead of concurrently. The `Promise.all`
pattern fired all N mutations simultaneously, each triggering a full
workspace migration runner pipeline (transaction + cache invalidation).
The sequential `for...of` loop ensures each mutation completes
(including its cache invalidation) before the next begins, eliminating
the race condition.

## Related Issue

Fixes #18865

## Testing

This fix addresses the root cause identified in the Sonarly analysis on
the issue. The concurrent mutation pattern was causing:
- PostgreSQL row-level lock contention on viewGroup rows
- Cache thundering herd from repeated invalidation/recomputation cycles
- Server stalls requiring container restarts

The sequential approach ensures proper ordering and prevents these race
conditions.

---------

Co-authored-by: Rayan <rayan@example.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2026-03-27 08:13:51 +00:00
Charles BochetandGitHub 17424320e3 fix: gate command-menu-items query behind feature flag (#19029)
## Summary
- Gate the `FindManyCommandMenuItems` GraphQL query behind the
`IS_COMMAND_MENU_ITEM_ENABLED` feature flag on the frontend, preventing
an uncaught error when the flag is not enabled for a workspace
- Remove `IS_CONNECTED_ACCOUNT_MIGRATED` from the default feature flags
list
2026-03-27 08:11:26 +01:00
6360fb3bce chore: sync AI model catalog from models.dev (#19028)
Automated daily sync of `ai-providers.json` from
[models.dev](https://models.dev).

This PR updates pricing, context windows, and model availability based
on the latest data.
New models meeting inclusion criteria (tool calling, pricing data,
context limits) are added automatically.
Deprecated models are detected based on cost-efficiency within the same
model family.

**Please review before merging** — verify no critical models were
incorrectly deprecated.

Co-authored-by: FelixMalfait <6399865+FelixMalfait@users.noreply.github.com>
2026-03-27 07:22:18 +01:00
Baptiste DevessierandGitHub da1b1f1cbc Combine and clean upgrade commands for record page layouts (#19004)
- Remove the label identifier field for all standard objects as it's a
first-class citizen that is displayed specifically in the app; it
doesn't make a lot of sense to display it in the Fields widgets
- Disable logic that made the label identifier required and in first
position
- Add all fields for all standard objects in record page layout view
fields
- Do not include position and ts vector fields in custom objects

> [!IMPORTANT]
> The command will create Field widgets for all relations. It is
consistent to the way the frontend dynamically generates them as of
today. We will have to decide which relations we pin as individual Field
widgets before the release. (This will likely land in this command or in
another one.)
2026-03-26 17:50:29 +01:00
nitinandGitHub 31718d163c [Dashboards] fix rich text widget AGAIN (#19017) 2026-03-26 17:50:10 +01:00
Abdul RahmanandGitHub f47608de07 Clear navbar edit selection when closing the side panel (#18940)
In navbar edit mode, selecting an item for edit stored
selectedNavigationMenuItemIdInEditModeState (and related
pending-insertion state). Closing the side panel did not reset those
atoms, so the nav item stayed visually selected. Reset both when the
panel closes so the highlight matches the closed panel; reopening in
edit mode then starts from the generic “new item” entry unless the user
picks an item again.
2026-03-26 17:49:50 +01:00
Thomas des FrancsandGitHub 695518a15e Fix not shared chip height + hard coded border radius (#19020)
## Summary
- align the forbidden field "Not shared" chip with small chip dimensions
in the object table
- use the shared small border radius token instead of a hardcoded value
- add `overflow: hidden` and `user-select: none` to match chip behavior
more closely

## Testing
- Not run (not requested)
2026-03-26 17:48:20 +01:00
922 changed files with 41485 additions and 22571 deletions
+15 -2
View File
@@ -36,6 +36,9 @@ jobs:
services:
postgres:
image: twentycrm/twenty-postgres-spilo
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
env:
PGUSER_SUPERUSER: postgres
PGPASSWORD_SUPERUSER: postgres
@@ -50,10 +53,16 @@ jobs:
--health-retries 5
redis:
image: redis
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
ports:
- 6379:6379
clickhouse:
image: clickhouse/clickhouse-server:25.8.8
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
env:
CLICKHOUSE_PASSWORD: clickhousePassword
CLICKHOUSE_URL: "http://default:clickhousePassword@localhost:8123/twenty"
@@ -143,7 +152,6 @@ jobs:
set_env_var "CLICKHOUSE_PASSWORD" "clickhousePassword"
npx nx run twenty-server:database:init:prod
npx nx run twenty-server:database:migrate:prod
- name: Seed current branch database with test data
run: |
@@ -296,7 +304,6 @@ jobs:
set_env_var "CLICKHOUSE_PASSWORD" "clickhousePassword"
npx nx run twenty-server:database:init:prod
npx nx run twenty-server:database:migrate:prod
- name: Seed main branch database with test data
run: |
@@ -395,6 +402,12 @@ jobs:
# Clean up temp directory
rm -rf /tmp/current-branch-files
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Install OpenAPI Diff Tool
run: |
# Using the Java-based OpenAPITools/openapi-diff via Docker
+6
View File
@@ -37,6 +37,9 @@ jobs:
services:
postgres:
image: twentycrm/twenty-postgres-spilo
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
env:
PGUSER_SUPERUSER: postgres
PGPASSWORD_SUPERUSER: postgres
@@ -51,6 +54,9 @@ jobs:
--health-retries 5
redis:
image: redis
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
ports:
- 6379:6379
env:
+6
View File
@@ -26,6 +26,9 @@ jobs:
services:
postgres:
image: twentycrm/twenty-postgres-spilo
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
env:
PGUSER_SUPERUSER: postgres
PGPASSWORD_SUPERUSER: postgres
@@ -40,6 +43,9 @@ jobs:
--health-retries 5
redis:
image: redis
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
ports:
- 6379:6379
steps:
+6
View File
@@ -57,6 +57,9 @@ jobs:
services:
postgres:
image: twentycrm/twenty-postgres-spilo
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
env:
PGUSER_SUPERUSER: postgres
PGPASSWORD_SUPERUSER: postgres
@@ -71,6 +74,9 @@ jobs:
--health-retries 5
redis:
image: redis
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
ports:
- 6379:6379
env:
+15 -1
View File
@@ -84,6 +84,9 @@ jobs:
services:
postgres:
image: twentycrm/twenty-postgres-spilo
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
env:
PGUSER_SUPERUSER: postgres
PGPASSWORD_SUPERUSER: postgres
@@ -98,6 +101,9 @@ jobs:
--health-retries 5
redis:
image: redis
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
ports:
- 6379:6379
steps:
@@ -122,7 +128,6 @@ jobs:
PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d postgres -c 'CREATE DATABASE "default";'
PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d postgres -c 'CREATE DATABASE "test";'
npx nx run twenty-server:database:init:prod
npx nx run twenty-server:database:migrate:prod
- name: Worker / Run
run: |
timeout 30s npx nx run twenty-server:worker || exit_code=$?
@@ -227,6 +232,9 @@ jobs:
services:
postgres:
image: twentycrm/twenty-postgres-spilo
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
env:
PGUSER_SUPERUSER: postgres
PGPASSWORD_SUPERUSER: postgres
@@ -241,10 +249,16 @@ jobs:
--health-retries 5
redis:
image: redis
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
ports:
- 6379:6379
clickhouse:
image: clickhouse/clickhouse-server:25.8.8
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
env:
CLICKHOUSE_PASSWORD: clickhousePassword
CLICKHOUSE_URL: "http://default:clickhousePassword@localhost:8123/twenty"
@@ -27,6 +27,11 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Run compose
run: |
echo "Patching docker-compose.yml..."
@@ -97,6 +102,11 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Create frontend placeholder
run: |
mkdir -p packages/twenty-front/build
+3
View File
@@ -27,6 +27,9 @@ jobs:
services:
postgres:
image: twentycrm/twenty-postgres-spilo
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
env:
PGUSER_SUPERUSER: postgres
PGPASSWORD_SUPERUSER: postgres
+6
View File
@@ -30,6 +30,9 @@ jobs:
services:
postgres:
image: twentycrm/twenty-postgres-spilo
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
env:
PGUSER_SUPERUSER: postgres
PGPASSWORD_SUPERUSER: postgres
@@ -44,6 +47,9 @@ jobs:
--health-retries 5
redis:
image: redis
credentials:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
ports:
- 6379:6379
steps:
@@ -17,6 +17,12 @@ jobs:
with:
ref: ${{ github.event.client_payload.pr_head_sha }}
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Run compose setup
run: |
echo "Patching docker-compose.yml..."
+1
View File
@@ -203,6 +203,7 @@
"packages/twenty-utils",
"packages/twenty-zapier",
"packages/twenty-website",
"packages/twenty-website-new",
"packages/twenty-docs",
"packages/twenty-e2e-testing",
"packages/twenty-shared",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "create-twenty-app",
"version": "0.8.0-canary.5",
"version": "0.8.0-canary.6",
"description": "Command-line interface to create Twenty application",
"main": "dist/cli.cjs",
"bin": "dist/cli.cjs",
@@ -211,14 +211,14 @@ export class CreateAppCommand {
if (!result.success) {
console.log(
chalk.yellow(
'Authentication skipped. Run `yarn twenty remote add --local` manually.',
'Authentication skipped. Run `yarn twenty remote add` manually.',
),
);
}
} catch {
console.log(
chalk.yellow(
'Authentication skipped. Run `yarn twenty remote add --local` manually.',
'Authentication skipped. Run `yarn twenty remote add` manually.',
),
);
}
@@ -236,7 +236,7 @@ export class CreateAppCommand {
if (!serverResult) {
console.log(
chalk.gray(
'- yarn twenty remote add --local # Authenticate with Twenty',
'- yarn twenty remote add # Authenticate with Twenty',
),
);
}
@@ -794,6 +794,7 @@ const createPackageJson = async ({
npm: 'please-use-yarn',
yarn: '>=4.0.2',
},
keywords: ['twenty-app'],
packageManager: 'yarn@4.9.2',
scripts,
devDependencies,
@@ -9,22 +9,11 @@
},
"packageManager": "yarn@4.9.2",
"scripts": {
"remote:add": "twenty remote add --local",
"remote:status": "twenty remote status",
"remote:switch": "twenty remote switch",
"remote:list": "twenty remote list",
"remote:remove": "twenty remote remove",
"dev": "twenty dev",
"add": "twenty add",
"logs": "twenty logs",
"exec": "twenty exec",
"uninstall": "twenty uninstall",
"help": "twenty help",
"lint": "oxlint -c .oxlintrc.json .",
"lint:fix": "oxlint --fix -c .oxlintrc.json ."
"twenty": "twenty"
},
"dependencies": {
"twenty-sdk": "latest"
"twenty-sdk": "latest",
"twenty-client-sdk": "latest"
},
"devDependencies": {
"typescript": "^5.9.3",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "twenty-client-sdk",
"version": "0.8.0-canary.5",
"version": "0.8.0-canary.6",
"sideEffects": false,
"license": "AGPL-3.0",
"scripts": {
@@ -38,9 +38,6 @@ type ApplicationRegistration {
id: UUID!
universalIdentifier: String!
name: String!
description: String
logoUrl: String
author: String
oAuthClientId: String!
oAuthRedirectUris: [String!]!
oAuthScopes: [String!]!
@@ -48,8 +45,6 @@ type ApplicationRegistration {
sourceType: ApplicationRegistrationSourceType!
sourcePackage: String
latestAvailableVersion: String
websiteUrl: String
termsUrl: String
isListed: Boolean!
isFeatured: Boolean!
createdAt: DateTime!
@@ -343,6 +338,7 @@ type Field {
defaultValue: JSON
options: JSON
settings: JSON
objectMetadataId: UUID!
isLabelSyncedWithName: Boolean
morphId: UUID
createdAt: DateTime!
@@ -540,6 +536,7 @@ input FieldFilter {
isActive: BooleanFieldComparison
isSystem: BooleanFieldComparison
isUIReadOnly: BooleanFieldComparison
objectMetadataId: UUIDFilterComparison
}
input IndexFilter {
@@ -778,8 +775,7 @@ type Workspace {
viewGroups: [ViewGroup!]
viewSorts: [ViewSort!]
metadataVersion: Float!
databaseUrl: String!
databaseSchema: String!
databaseSchema: String
subdomain: String!
customDomain: String
isGoogleAuthEnabled: Boolean!
@@ -1724,20 +1720,13 @@ enum FeatureFlagKey {
IS_UNIQUE_INDEXES_ENABLED
IS_JSON_FILTER_ENABLED
IS_AI_ENABLED
IS_APPLICATION_ENABLED
IS_MARKETPLACE_ENABLED
IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED
IS_PUBLIC_DOMAIN_ENABLED
IS_EMAILING_DOMAIN_ENABLED
IS_DASHBOARD_V2_ENABLED
IS_ATTACHMENT_MIGRATED
IS_NOTE_TARGET_MIGRATED
IS_TASK_TARGET_MIGRATED
IS_ROW_LEVEL_PERMISSION_PREDICATES_ENABLED
IS_JUNCTION_RELATIONS_ENABLED
IS_COMMAND_MENU_ITEM_ENABLED
IS_NAVIGATION_MENU_ITEM_ENABLED
IS_DATE_TIME_WHOLE_DAY_FILTER_ENABLED
IS_NAVIGATION_MENU_ITEM_EDITING_ENABLED
IS_DRAFT_EMAIL_ENABLED
IS_USAGE_ANALYTICS_ENABLED
@@ -1747,6 +1736,7 @@ enum FeatureFlagKey {
IS_CONNECTED_ACCOUNT_MIGRATED
IS_GRAPHQL_QUERY_TIMING_ENABLED
IS_RECORD_TABLE_WIDGET_ENABLED
IS_DATASOURCE_MIGRATED
}
type ClientConfig {
@@ -1779,6 +1769,12 @@ type ClientConfig {
isClickHouseConfigured: Boolean!
}
type UsageBreakdownItem {
key: String!
label: String
creditsUsed: Float!
}
type ConfigVariable {
name: String!
description: String!
@@ -2273,6 +2269,11 @@ type FieldConnection {
edges: [FieldEdge!]!
}
type LogicFunctionLogs {
"""Execution Logs"""
logs: String!
}
type DeleteTwoFactorAuthenticationMethod {
"""Boolean that confirms query was dispatched"""
success: Boolean!
@@ -2373,6 +2374,26 @@ type Impersonate {
workspace: WorkspaceUrlsAndId!
}
type UsageTimeSeries {
date: String!
creditsUsed: Float!
}
type UsageUserDaily {
userWorkspaceId: String!
dailyUsage: [UsageTimeSeries!]!
}
type UsageAnalytics {
usageByUser: [UsageBreakdownItem!]!
usageByOperationType: [UsageBreakdownItem!]!
usageByModel: [UsageBreakdownItem!]!
timeSeries: [UsageTimeSeries!]!
periodStart: DateTime!
periodEnd: DateTime!
userDailyUsage: UsageUserDaily
}
type DevelopmentApplication {
id: String!
universalIdentifier: String!
@@ -2395,91 +2416,30 @@ type File {
createdAt: DateTime!
}
type MarketplaceAppField {
name: String!
type: String!
label: String!
description: String
icon: String
objectUniversalIdentifier: String
universalIdentifier: String
}
type MarketplaceAppObject {
universalIdentifier: String!
nameSingular: String!
namePlural: String!
labelSingular: String!
labelPlural: String!
description: String
icon: String
fields: [MarketplaceAppField!]!
}
type MarketplaceAppLogicFunction {
name: String!
description: String
timeoutSeconds: Int
}
type MarketplaceAppFrontComponent {
name: String!
description: String
}
type MarketplaceAppRoleObjectPermission {
objectUniversalIdentifier: String!
canReadObjectRecords: Boolean
canUpdateObjectRecords: Boolean
canSoftDeleteObjectRecords: Boolean
canDestroyObjectRecords: Boolean
}
type MarketplaceAppRoleFieldPermission {
objectUniversalIdentifier: String!
fieldUniversalIdentifier: String!
canReadFieldValue: Boolean
canUpdateFieldValue: Boolean
}
type MarketplaceAppDefaultRole {
id: String!
label: String!
description: String
canReadAllObjectRecords: Boolean!
canUpdateAllObjectRecords: Boolean!
canSoftDeleteAllObjectRecords: Boolean!
canDestroyAllObjectRecords: Boolean!
canUpdateAllSettings: Boolean!
canAccessAllTools: Boolean!
objectPermissions: [MarketplaceAppRoleObjectPermission!]!
fieldPermissions: [MarketplaceAppRoleFieldPermission!]!
permissionFlags: [String!]!
}
type MarketplaceApp {
id: String!
name: String!
description: String!
icon: String!
version: String!
author: String!
category: String!
logo: String
screenshots: [String!]!
aboutDescription: String!
providers: [String!]!
websiteUrl: String
termsUrl: String
objects: [MarketplaceAppObject!]!
fields: [MarketplaceAppField!]!
logicFunctions: [MarketplaceAppLogicFunction!]!
frontComponents: [MarketplaceAppFrontComponent!]!
defaultRole: MarketplaceAppDefaultRole
sourcePackage: String
isFeatured: Boolean!
}
type MarketplaceAppDetail {
universalIdentifier: String!
id: String!
name: String!
sourceType: ApplicationRegistrationSourceType!
sourcePackage: String
latestAvailableVersion: String
isListed: Boolean!
isFeatured: Boolean!
manifest: JSON
}
type PublicDomain {
id: UUID!
domain: String!
@@ -2568,36 +2528,6 @@ type PostgresCredentials {
workspaceId: UUID!
}
type UsageBreakdownItem {
key: String!
label: String
creditsUsed: Float!
}
type UsageTimeSeries {
date: String!
creditsUsed: Float!
}
type UsageUserDaily {
userWorkspaceId: String!
dailyUsage: [UsageTimeSeries!]!
}
type UsageAnalytics {
usageByUser: [UsageBreakdownItem!]!
usageByOperationType: [UsageBreakdownItem!]!
timeSeries: [UsageTimeSeries!]!
periodStart: DateTime!
periodEnd: DateTime!
userDailyUsage: UsageUserDaily
}
type LogicFunctionLogs {
"""Execution Logs"""
logs: String!
}
type FrontComponent {
id: UUID!
name: String!
@@ -3090,6 +3020,7 @@ enum AllMetadataName {
navigationMenuItem
permissionFlag
objectPermission
fieldPermission
frontComponent
webhook
}
@@ -3252,6 +3183,7 @@ type Query {
findApplicationRegistrationStats(id: String!): ApplicationRegistrationStats!
findApplicationRegistrationVariables(applicationRegistrationId: String!): [ApplicationRegistrationVariable!]!
applicationRegistrationTarballUrl(id: String!): String
getApplicationShareLink(id: String!): String!
currentUser: User!
currentWorkspace: Workspace!
getPublicWorkspaceDataByDomain(origin: String): PublicWorkspaceData!
@@ -3271,14 +3203,15 @@ type Query {
getAiProviders: JSON!
getModelsDevProviders: [ModelsDevProviderSuggestion!]!
getModelsDevSuggestions(providerType: String!): [ModelsDevModelSuggestion!]!
getAdminAiUsageByWorkspace(periodStart: DateTime, periodEnd: DateTime): [UsageBreakdownItem!]!
getUsageAnalytics(input: UsageAnalyticsInput): UsageAnalytics!
getPostgresCredentials: PostgresCredentials
findManyPublicDomains: [PublicDomain!]!
getEmailingDomains: [EmailingDomain!]!
findManyMarketplaceApps: [MarketplaceApp!]!
findOneMarketplaceApp(universalIdentifier: String!): MarketplaceApp!
findMarketplaceAppDetail(universalIdentifier: String!): MarketplaceAppDetail!
findManyApplications: [Application!]!
findOneApplication(id: UUID, universalIdentifier: UUID): Application!
getUsageAnalytics(input: UsageAnalyticsInput): UsageAnalytics!
}
input GetApiKeyInput {
@@ -3391,6 +3324,14 @@ input UsageAnalyticsInput {
periodStart: DateTime
periodEnd: DateTime
userWorkspaceId: String
operationTypes: [UsageOperationType!]
}
enum UsageOperationType {
AI_CHAT_TOKEN
AI_WORKFLOW_TOKEN
WORKFLOW_EXECUTION
CODE_EXECUTION
}
type Mutation {
@@ -3501,6 +3442,7 @@ type Mutation {
createViewGroup(input: CreateViewGroupInput!): ViewGroup!
createManyViewGroups(inputs: [CreateViewGroupInput!]!): [ViewGroup!]!
updateViewGroup(input: UpdateViewGroupInput!): ViewGroup!
updateManyViewGroups(inputs: [UpdateViewGroupInput!]!): [ViewGroup!]!
deleteViewGroup(input: DeleteViewGroupInput!): ViewGroup!
destroyViewGroup(input: DestroyViewGroupInput!): ViewGroup!
updateMessageFolder(input: UpdateMessageFolderInput!): MessageFolder!
@@ -3589,6 +3531,7 @@ type Mutation {
verifyEmailingDomain(id: String!): EmailingDomain!
createOneAppToken(input: CreateOneAppTokenInput!): AppToken!
installMarketplaceApp(universalIdentifier: String!, version: String): Boolean!
syncMarketplaceCatalog: Boolean!
installApplication(appRegistrationId: String!, version: String): Boolean!
runWorkspaceMigration(workspaceMigration: WorkspaceMigrationInput!): Boolean!
uninstallApplication(universalIdentifier: String!): Boolean!
@@ -4272,8 +4215,8 @@ input CreateFieldInput {
defaultValue: JSON
options: JSON
settings: JSON
isLabelSyncedWithName: Boolean
objectMetadataId: UUID!
isLabelSyncedWithName: Boolean
isRemoteCreation: Boolean
relationCreationPayload: JSON
morphRelationsCreationPayload: [JSON!]
@@ -4301,6 +4244,7 @@ input UpdateFieldInput {
defaultValue: JSON
options: JSON
settings: JSON
objectMetadataId: UUID
isLabelSyncedWithName: Boolean
morphRelationsUpdatePayload: [JSON!]
}
@@ -4433,14 +4377,9 @@ input GetAuthorizationUrlForSSOInput {
input CreateApplicationRegistrationInput {
name: String!
description: String
logoUrl: String
author: String
universalIdentifier: String
oAuthRedirectUris: [String!]
oAuthScopes: [String!]
websiteUrl: String
termsUrl: String
}
input UpdateApplicationRegistrationInput {
@@ -4450,13 +4389,8 @@ input UpdateApplicationRegistrationInput {
input UpdateApplicationRegistrationPayload {
name: String
description: String
logoUrl: String
author: String
oAuthRedirectUris: [String!]
oAuthScopes: [String!]
websiteUrl: String
termsUrl: String
isListed: Boolean
}
@@ -42,9 +42,6 @@ export interface ApplicationRegistration {
id: Scalars['UUID']
universalIdentifier: Scalars['String']
name: Scalars['String']
description?: Scalars['String']
logoUrl?: Scalars['String']
author?: Scalars['String']
oAuthClientId: Scalars['String']
oAuthRedirectUris: Scalars['String'][]
oAuthScopes: Scalars['String'][]
@@ -52,8 +49,6 @@ export interface ApplicationRegistration {
sourceType: ApplicationRegistrationSourceType
sourcePackage?: Scalars['String']
latestAvailableVersion?: Scalars['String']
websiteUrl?: Scalars['String']
termsUrl?: Scalars['String']
isListed: Scalars['Boolean']
isFeatured: Scalars['Boolean']
createdAt: Scalars['DateTime']
@@ -296,6 +291,7 @@ export interface Field {
defaultValue?: Scalars['JSON']
options?: Scalars['JSON']
settings?: Scalars['JSON']
objectMetadataId: Scalars['UUID']
isLabelSyncedWithName?: Scalars['Boolean']
morphId?: Scalars['UUID']
createdAt: Scalars['DateTime']
@@ -564,8 +560,7 @@ export interface Workspace {
viewGroups?: ViewGroup[]
viewSorts?: ViewSort[]
metadataVersion: Scalars['Float']
databaseUrl: Scalars['String']
databaseSchema: Scalars['String']
databaseSchema?: Scalars['String']
subdomain: Scalars['String']
customDomain?: Scalars['String']
isGoogleAuthEnabled: Scalars['Boolean']
@@ -1427,7 +1422,7 @@ export interface PublicFeatureFlag {
__typename: 'PublicFeatureFlag'
}
export type FeatureFlagKey = 'IS_UNIQUE_INDEXES_ENABLED' | 'IS_JSON_FILTER_ENABLED' | 'IS_AI_ENABLED' | 'IS_APPLICATION_ENABLED' | 'IS_MARKETPLACE_ENABLED' | 'IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED' | 'IS_PUBLIC_DOMAIN_ENABLED' | 'IS_EMAILING_DOMAIN_ENABLED' | 'IS_DASHBOARD_V2_ENABLED' | 'IS_ATTACHMENT_MIGRATED' | 'IS_NOTE_TARGET_MIGRATED' | 'IS_TASK_TARGET_MIGRATED' | 'IS_ROW_LEVEL_PERMISSION_PREDICATES_ENABLED' | 'IS_JUNCTION_RELATIONS_ENABLED' | 'IS_COMMAND_MENU_ITEM_ENABLED' | 'IS_NAVIGATION_MENU_ITEM_ENABLED' | 'IS_DATE_TIME_WHOLE_DAY_FILTER_ENABLED' | 'IS_NAVIGATION_MENU_ITEM_EDITING_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'
export type FeatureFlagKey = 'IS_UNIQUE_INDEXES_ENABLED' | 'IS_JSON_FILTER_ENABLED' | 'IS_AI_ENABLED' | 'IS_MARKETPLACE_ENABLED' | 'IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED' | 'IS_PUBLIC_DOMAIN_ENABLED' | 'IS_EMAILING_DOMAIN_ENABLED' | 'IS_JUNCTION_RELATIONS_ENABLED' | 'IS_COMMAND_MENU_ITEM_ENABLED' | 'IS_NAVIGATION_MENU_ITEM_ENABLED' | 'IS_NAVIGATION_MENU_ITEM_EDITING_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 interface ClientConfig {
appVersion?: Scalars['String']
@@ -1460,6 +1455,13 @@ export interface ClientConfig {
__typename: 'ClientConfig'
}
export interface UsageBreakdownItem {
key: Scalars['String']
label?: Scalars['String']
creditsUsed: Scalars['Float']
__typename: 'UsageBreakdownItem'
}
export interface ConfigVariable {
name: Scalars['String']
description: Scalars['String']
@@ -1937,6 +1939,12 @@ export interface FieldConnection {
__typename: 'FieldConnection'
}
export interface LogicFunctionLogs {
/** Execution Logs */
logs: Scalars['String']
__typename: 'LogicFunctionLogs'
}
export interface DeleteTwoFactorAuthenticationMethod {
/** Boolean that confirms query was dispatched */
success: Scalars['Boolean']
@@ -2058,6 +2066,29 @@ export interface Impersonate {
__typename: 'Impersonate'
}
export interface UsageTimeSeries {
date: Scalars['String']
creditsUsed: Scalars['Float']
__typename: 'UsageTimeSeries'
}
export interface UsageUserDaily {
userWorkspaceId: Scalars['String']
dailyUsage: UsageTimeSeries[]
__typename: 'UsageUserDaily'
}
export interface UsageAnalytics {
usageByUser: UsageBreakdownItem[]
usageByOperationType: UsageBreakdownItem[]
usageByModel: UsageBreakdownItem[]
timeSeries: UsageTimeSeries[]
periodStart: Scalars['DateTime']
periodEnd: Scalars['DateTime']
userDailyUsage?: UsageUserDaily
__typename: 'UsageAnalytics'
}
export interface DevelopmentApplication {
id: Scalars['String']
universalIdentifier: Scalars['String']
@@ -2084,99 +2115,32 @@ export interface File {
__typename: 'File'
}
export interface MarketplaceAppField {
name: Scalars['String']
type: Scalars['String']
label: Scalars['String']
description?: Scalars['String']
icon?: Scalars['String']
objectUniversalIdentifier?: Scalars['String']
universalIdentifier?: Scalars['String']
__typename: 'MarketplaceAppField'
}
export interface MarketplaceAppObject {
universalIdentifier: Scalars['String']
nameSingular: Scalars['String']
namePlural: Scalars['String']
labelSingular: Scalars['String']
labelPlural: Scalars['String']
description?: Scalars['String']
icon?: Scalars['String']
fields: MarketplaceAppField[]
__typename: 'MarketplaceAppObject'
}
export interface MarketplaceAppLogicFunction {
name: Scalars['String']
description?: Scalars['String']
timeoutSeconds?: Scalars['Int']
__typename: 'MarketplaceAppLogicFunction'
}
export interface MarketplaceAppFrontComponent {
name: Scalars['String']
description?: Scalars['String']
__typename: 'MarketplaceAppFrontComponent'
}
export interface MarketplaceAppRoleObjectPermission {
objectUniversalIdentifier: Scalars['String']
canReadObjectRecords?: Scalars['Boolean']
canUpdateObjectRecords?: Scalars['Boolean']
canSoftDeleteObjectRecords?: Scalars['Boolean']
canDestroyObjectRecords?: Scalars['Boolean']
__typename: 'MarketplaceAppRoleObjectPermission'
}
export interface MarketplaceAppRoleFieldPermission {
objectUniversalIdentifier: Scalars['String']
fieldUniversalIdentifier: Scalars['String']
canReadFieldValue?: Scalars['Boolean']
canUpdateFieldValue?: Scalars['Boolean']
__typename: 'MarketplaceAppRoleFieldPermission'
}
export interface MarketplaceAppDefaultRole {
id: Scalars['String']
label: Scalars['String']
description?: Scalars['String']
canReadAllObjectRecords: Scalars['Boolean']
canUpdateAllObjectRecords: Scalars['Boolean']
canSoftDeleteAllObjectRecords: Scalars['Boolean']
canDestroyAllObjectRecords: Scalars['Boolean']
canUpdateAllSettings: Scalars['Boolean']
canAccessAllTools: Scalars['Boolean']
objectPermissions: MarketplaceAppRoleObjectPermission[]
fieldPermissions: MarketplaceAppRoleFieldPermission[]
permissionFlags: Scalars['String'][]
__typename: 'MarketplaceAppDefaultRole'
}
export interface MarketplaceApp {
id: Scalars['String']
name: Scalars['String']
description: Scalars['String']
icon: Scalars['String']
version: Scalars['String']
author: Scalars['String']
category: Scalars['String']
logo?: Scalars['String']
screenshots: Scalars['String'][]
aboutDescription: Scalars['String']
providers: Scalars['String'][]
websiteUrl?: Scalars['String']
termsUrl?: Scalars['String']
objects: MarketplaceAppObject[]
fields: MarketplaceAppField[]
logicFunctions: MarketplaceAppLogicFunction[]
frontComponents: MarketplaceAppFrontComponent[]
defaultRole?: MarketplaceAppDefaultRole
sourcePackage?: Scalars['String']
isFeatured: Scalars['Boolean']
__typename: 'MarketplaceApp'
}
export interface MarketplaceAppDetail {
universalIdentifier: Scalars['String']
id: Scalars['String']
name: Scalars['String']
sourceType: ApplicationRegistrationSourceType
sourcePackage?: Scalars['String']
latestAvailableVersion?: Scalars['String']
isListed: Scalars['Boolean']
isFeatured: Scalars['Boolean']
manifest?: Scalars['JSON']
__typename: 'MarketplaceAppDetail'
}
export interface PublicDomain {
id: Scalars['UUID']
domain: Scalars['String']
@@ -2269,41 +2233,6 @@ export interface PostgresCredentials {
__typename: 'PostgresCredentials'
}
export interface UsageBreakdownItem {
key: Scalars['String']
label?: Scalars['String']
creditsUsed: Scalars['Float']
__typename: 'UsageBreakdownItem'
}
export interface UsageTimeSeries {
date: Scalars['String']
creditsUsed: Scalars['Float']
__typename: 'UsageTimeSeries'
}
export interface UsageUserDaily {
userWorkspaceId: Scalars['String']
dailyUsage: UsageTimeSeries[]
__typename: 'UsageUserDaily'
}
export interface UsageAnalytics {
usageByUser: UsageBreakdownItem[]
usageByOperationType: UsageBreakdownItem[]
timeSeries: UsageTimeSeries[]
periodStart: Scalars['DateTime']
periodEnd: Scalars['DateTime']
userDailyUsage?: UsageUserDaily
__typename: 'UsageAnalytics'
}
export interface LogicFunctionLogs {
/** Execution Logs */
logs: Scalars['String']
__typename: 'LogicFunctionLogs'
}
export interface FrontComponent {
id: Scalars['UUID']
name: Scalars['String']
@@ -2676,7 +2605,7 @@ export interface CollectionHash {
__typename: 'CollectionHash'
}
export type AllMetadataName = 'fieldMetadata' | 'objectMetadata' | 'view' | 'viewField' | 'viewFieldGroup' | 'viewGroup' | 'viewSort' | 'rowLevelPermissionPredicate' | 'rowLevelPermissionPredicateGroup' | 'viewFilterGroup' | 'index' | 'logicFunction' | 'viewFilter' | 'role' | 'roleTarget' | 'agent' | 'skill' | 'pageLayout' | 'pageLayoutWidget' | 'pageLayoutTab' | 'commandMenuItem' | 'navigationMenuItem' | 'permissionFlag' | 'objectPermission' | 'frontComponent' | 'webhook'
export type AllMetadataName = 'fieldMetadata' | 'objectMetadata' | 'view' | 'viewField' | 'viewFieldGroup' | 'viewGroup' | 'viewSort' | 'rowLevelPermissionPredicate' | 'rowLevelPermissionPredicateGroup' | 'viewFilterGroup' | 'index' | 'logicFunction' | 'viewFilter' | 'role' | 'roleTarget' | 'agent' | 'skill' | 'pageLayout' | 'pageLayoutWidget' | 'pageLayoutTab' | 'commandMenuItem' | 'navigationMenuItem' | 'permissionFlag' | 'objectPermission' | 'fieldPermission' | 'frontComponent' | 'webhook'
export interface MinimalObjectMetadata {
id: Scalars['UUID']
@@ -2804,6 +2733,7 @@ export interface Query {
findApplicationRegistrationStats: ApplicationRegistrationStats
findApplicationRegistrationVariables: ApplicationRegistrationVariable[]
applicationRegistrationTarballUrl?: Scalars['String']
getApplicationShareLink: Scalars['String']
currentUser: User
currentWorkspace: Workspace
getPublicWorkspaceDataByDomain: PublicWorkspaceData
@@ -2823,14 +2753,15 @@ export interface Query {
getAiProviders: Scalars['JSON']
getModelsDevProviders: ModelsDevProviderSuggestion[]
getModelsDevSuggestions: ModelsDevModelSuggestion[]
getAdminAiUsageByWorkspace: UsageBreakdownItem[]
getUsageAnalytics: UsageAnalytics
getPostgresCredentials?: PostgresCredentials
findManyPublicDomains: PublicDomain[]
getEmailingDomains: EmailingDomain[]
findManyMarketplaceApps: MarketplaceApp[]
findOneMarketplaceApp: MarketplaceApp
findMarketplaceAppDetail: MarketplaceAppDetail
findManyApplications: Application[]
findOneApplication: Application
getUsageAnalytics: UsageAnalytics
__typename: 'Query'
}
@@ -2846,6 +2777,8 @@ export type SortNulls = 'NULLS_FIRST' | 'NULLS_LAST'
export type EventLogTable = 'WORKSPACE_EVENT' | 'PAGEVIEW' | 'OBJECT_EVENT' | 'USAGE_EVENT'
export type UsageOperationType = 'AI_CHAT_TOKEN' | 'AI_WORKFLOW_TOKEN' | 'WORKFLOW_EXECUTION' | 'CODE_EXECUTION'
export interface Mutation {
addQueryToEventStream: Scalars['Boolean']
removeQueryFromEventStream: Scalars['Boolean']
@@ -2954,6 +2887,7 @@ export interface Mutation {
createViewGroup: ViewGroup
createManyViewGroups: ViewGroup[]
updateViewGroup: ViewGroup
updateManyViewGroups: ViewGroup[]
deleteViewGroup: ViewGroup
destroyViewGroup: ViewGroup
updateMessageFolder: MessageFolder
@@ -3042,6 +2976,7 @@ export interface Mutation {
verifyEmailingDomain: EmailingDomain
createOneAppToken: AppToken
installMarketplaceApp: Scalars['Boolean']
syncMarketplaceCatalog: Scalars['Boolean']
installApplication: Scalars['Boolean']
runWorkspaceMigration: Scalars['Boolean']
uninstallApplication: Scalars['Boolean']
@@ -3109,9 +3044,6 @@ export interface ApplicationRegistrationGenqlSelection{
id?: boolean | number
universalIdentifier?: boolean | number
name?: boolean | number
description?: boolean | number
logoUrl?: boolean | number
author?: boolean | number
oAuthClientId?: boolean | number
oAuthRedirectUris?: boolean | number
oAuthScopes?: boolean | number
@@ -3119,8 +3051,6 @@ export interface ApplicationRegistrationGenqlSelection{
sourceType?: boolean | number
sourcePackage?: boolean | number
latestAvailableVersion?: boolean | number
websiteUrl?: boolean | number
termsUrl?: boolean | number
isListed?: boolean | number
isFeatured?: boolean | number
createdAt?: boolean | number
@@ -3360,6 +3290,7 @@ export interface FieldGenqlSelection{
defaultValue?: boolean | number
options?: boolean | number
settings?: boolean | number
objectMetadataId?: boolean | number
isLabelSyncedWithName?: boolean | number
morphId?: boolean | number
createdAt?: boolean | number
@@ -3476,7 +3407,7 @@ export interface ObjectGenqlSelection{
__scalar?: boolean | number
}
export interface FieldFilter {and?: (FieldFilter[] | null),or?: (FieldFilter[] | null),id?: (UUIDFilterComparison | null),isCustom?: (BooleanFieldComparison | null),isActive?: (BooleanFieldComparison | null),isSystem?: (BooleanFieldComparison | null),isUIReadOnly?: (BooleanFieldComparison | null)}
export interface FieldFilter {and?: (FieldFilter[] | null),or?: (FieldFilter[] | null),id?: (UUIDFilterComparison | null),isCustom?: (BooleanFieldComparison | null),isActive?: (BooleanFieldComparison | null),isSystem?: (BooleanFieldComparison | null),isUIReadOnly?: (BooleanFieldComparison | null),objectMetadataId?: (UUIDFilterComparison | null)}
export interface IndexFilter {and?: (IndexFilter[] | null),or?: (IndexFilter[] | null),id?: (UUIDFilterComparison | null),isCustom?: (BooleanFieldComparison | null)}
@@ -3653,7 +3584,6 @@ export interface WorkspaceGenqlSelection{
viewGroups?: ViewGroupGenqlSelection
viewSorts?: ViewSortGenqlSelection
metadataVersion?: boolean | number
databaseUrl?: boolean | number
databaseSchema?: boolean | number
subdomain?: boolean | number
customDomain?: boolean | number
@@ -4584,6 +4514,14 @@ export interface ClientConfigGenqlSelection{
__scalar?: boolean | number
}
export interface UsageBreakdownItemGenqlSelection{
key?: boolean | number
label?: boolean | number
creditsUsed?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface ConfigVariableGenqlSelection{
name?: boolean | number
description?: boolean | number
@@ -5096,6 +5034,13 @@ export interface FieldConnectionGenqlSelection{
__scalar?: boolean | number
}
export interface LogicFunctionLogsGenqlSelection{
/** Execution Logs */
logs?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface DeleteTwoFactorAuthenticationMethodGenqlSelection{
/** Boolean that confirms query was dispatched */
success?: boolean | number
@@ -5238,6 +5183,32 @@ export interface ImpersonateGenqlSelection{
__scalar?: boolean | number
}
export interface UsageTimeSeriesGenqlSelection{
date?: boolean | number
creditsUsed?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface UsageUserDailyGenqlSelection{
userWorkspaceId?: boolean | number
dailyUsage?: UsageTimeSeriesGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
export interface UsageAnalyticsGenqlSelection{
usageByUser?: UsageBreakdownItemGenqlSelection
usageByOperationType?: UsageBreakdownItemGenqlSelection
usageByModel?: UsageBreakdownItemGenqlSelection
timeSeries?: UsageTimeSeriesGenqlSelection
periodStart?: boolean | number
periodEnd?: boolean | number
userDailyUsage?: UsageUserDailyGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
export interface DevelopmentApplicationGenqlSelection{
id?: boolean | number
universalIdentifier?: boolean | number
@@ -5268,107 +5239,34 @@ export interface FileGenqlSelection{
__scalar?: boolean | number
}
export interface MarketplaceAppFieldGenqlSelection{
name?: boolean | number
type?: boolean | number
label?: boolean | number
description?: boolean | number
icon?: boolean | number
objectUniversalIdentifier?: boolean | number
universalIdentifier?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface MarketplaceAppObjectGenqlSelection{
universalIdentifier?: boolean | number
nameSingular?: boolean | number
namePlural?: boolean | number
labelSingular?: boolean | number
labelPlural?: boolean | number
description?: boolean | number
icon?: boolean | number
fields?: MarketplaceAppFieldGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
export interface MarketplaceAppLogicFunctionGenqlSelection{
name?: boolean | number
description?: boolean | number
timeoutSeconds?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface MarketplaceAppFrontComponentGenqlSelection{
name?: boolean | number
description?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface MarketplaceAppRoleObjectPermissionGenqlSelection{
objectUniversalIdentifier?: boolean | number
canReadObjectRecords?: boolean | number
canUpdateObjectRecords?: boolean | number
canSoftDeleteObjectRecords?: boolean | number
canDestroyObjectRecords?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface MarketplaceAppRoleFieldPermissionGenqlSelection{
objectUniversalIdentifier?: boolean | number
fieldUniversalIdentifier?: boolean | number
canReadFieldValue?: boolean | number
canUpdateFieldValue?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface MarketplaceAppDefaultRoleGenqlSelection{
id?: boolean | number
label?: boolean | number
description?: boolean | number
canReadAllObjectRecords?: boolean | number
canUpdateAllObjectRecords?: boolean | number
canSoftDeleteAllObjectRecords?: boolean | number
canDestroyAllObjectRecords?: boolean | number
canUpdateAllSettings?: boolean | number
canAccessAllTools?: boolean | number
objectPermissions?: MarketplaceAppRoleObjectPermissionGenqlSelection
fieldPermissions?: MarketplaceAppRoleFieldPermissionGenqlSelection
permissionFlags?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface MarketplaceAppGenqlSelection{
id?: boolean | number
name?: boolean | number
description?: boolean | number
icon?: boolean | number
version?: boolean | number
author?: boolean | number
category?: boolean | number
logo?: boolean | number
screenshots?: boolean | number
aboutDescription?: boolean | number
providers?: boolean | number
websiteUrl?: boolean | number
termsUrl?: boolean | number
objects?: MarketplaceAppObjectGenqlSelection
fields?: MarketplaceAppFieldGenqlSelection
logicFunctions?: MarketplaceAppLogicFunctionGenqlSelection
frontComponents?: MarketplaceAppFrontComponentGenqlSelection
defaultRole?: MarketplaceAppDefaultRoleGenqlSelection
sourcePackage?: boolean | number
isFeatured?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface MarketplaceAppDetailGenqlSelection{
universalIdentifier?: boolean | number
id?: boolean | number
name?: boolean | number
sourceType?: boolean | number
sourcePackage?: boolean | number
latestAvailableVersion?: boolean | number
isListed?: boolean | number
isFeatured?: boolean | number
manifest?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface PublicDomainGenqlSelection{
id?: boolean | number
domain?: boolean | number
@@ -5468,46 +5366,6 @@ export interface PostgresCredentialsGenqlSelection{
__scalar?: boolean | number
}
export interface UsageBreakdownItemGenqlSelection{
key?: boolean | number
label?: boolean | number
creditsUsed?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface UsageTimeSeriesGenqlSelection{
date?: boolean | number
creditsUsed?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface UsageUserDailyGenqlSelection{
userWorkspaceId?: boolean | number
dailyUsage?: UsageTimeSeriesGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
export interface UsageAnalyticsGenqlSelection{
usageByUser?: UsageBreakdownItemGenqlSelection
usageByOperationType?: UsageBreakdownItemGenqlSelection
timeSeries?: UsageTimeSeriesGenqlSelection
periodStart?: boolean | number
periodEnd?: boolean | number
userDailyUsage?: UsageUserDailyGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
export interface LogicFunctionLogsGenqlSelection{
/** Execution Logs */
logs?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface FrontComponentGenqlSelection{
id?: boolean | number
name?: boolean | number
@@ -6036,6 +5894,7 @@ export interface QueryGenqlSelection{
findApplicationRegistrationStats?: (ApplicationRegistrationStatsGenqlSelection & { __args: {id: Scalars['String']} })
findApplicationRegistrationVariables?: (ApplicationRegistrationVariableGenqlSelection & { __args: {applicationRegistrationId: Scalars['String']} })
applicationRegistrationTarballUrl?: { __args: {id: Scalars['String']} }
getApplicationShareLink?: { __args: {id: Scalars['String']} }
currentUser?: UserGenqlSelection
currentWorkspace?: WorkspaceGenqlSelection
getPublicWorkspaceDataByDomain?: (PublicWorkspaceDataGenqlSelection & { __args?: {origin?: (Scalars['String'] | null)} })
@@ -6055,14 +5914,15 @@ export interface QueryGenqlSelection{
getAiProviders?: boolean | number
getModelsDevProviders?: ModelsDevProviderSuggestionGenqlSelection
getModelsDevSuggestions?: (ModelsDevModelSuggestionGenqlSelection & { __args: {providerType: Scalars['String']} })
getAdminAiUsageByWorkspace?: (UsageBreakdownItemGenqlSelection & { __args?: {periodStart?: (Scalars['DateTime'] | null), periodEnd?: (Scalars['DateTime'] | null)} })
getUsageAnalytics?: (UsageAnalyticsGenqlSelection & { __args?: {input?: (UsageAnalyticsInput | null)} })
getPostgresCredentials?: PostgresCredentialsGenqlSelection
findManyPublicDomains?: PublicDomainGenqlSelection
getEmailingDomains?: EmailingDomainGenqlSelection
findManyMarketplaceApps?: MarketplaceAppGenqlSelection
findOneMarketplaceApp?: (MarketplaceAppGenqlSelection & { __args: {universalIdentifier: Scalars['String']} })
findMarketplaceAppDetail?: (MarketplaceAppDetailGenqlSelection & { __args: {universalIdentifier: Scalars['String']} })
findManyApplications?: ApplicationGenqlSelection
findOneApplication?: (ApplicationGenqlSelection & { __args?: {id?: (Scalars['UUID'] | null), universalIdentifier?: (Scalars['UUID'] | null)} })
getUsageAnalytics?: (UsageAnalyticsGenqlSelection & { __args?: {input?: (UsageAnalyticsInput | null)} })
__typename?: boolean | number
__scalar?: boolean | number
}
@@ -6097,7 +5957,7 @@ export interface LineChartDataInput {objectMetadataId: Scalars['UUID'],configura
export interface BarChartDataInput {objectMetadataId: Scalars['UUID'],configuration: Scalars['JSON']}
export interface UsageAnalyticsInput {periodStart?: (Scalars['DateTime'] | null),periodEnd?: (Scalars['DateTime'] | null),userWorkspaceId?: (Scalars['String'] | null)}
export interface UsageAnalyticsInput {periodStart?: (Scalars['DateTime'] | null),periodEnd?: (Scalars['DateTime'] | null),userWorkspaceId?: (Scalars['String'] | null),operationTypes?: (UsageOperationType[] | null)}
export interface MutationGenqlSelection{
addQueryToEventStream?: { __args: {input: AddQuerySubscriptionInput} }
@@ -6207,6 +6067,7 @@ export interface MutationGenqlSelection{
createViewGroup?: (ViewGroupGenqlSelection & { __args: {input: CreateViewGroupInput} })
createManyViewGroups?: (ViewGroupGenqlSelection & { __args: {inputs: CreateViewGroupInput[]} })
updateViewGroup?: (ViewGroupGenqlSelection & { __args: {input: UpdateViewGroupInput} })
updateManyViewGroups?: (ViewGroupGenqlSelection & { __args: {inputs: UpdateViewGroupInput[]} })
deleteViewGroup?: (ViewGroupGenqlSelection & { __args: {input: DeleteViewGroupInput} })
destroyViewGroup?: (ViewGroupGenqlSelection & { __args: {input: DestroyViewGroupInput} })
updateMessageFolder?: (MessageFolderGenqlSelection & { __args: {input: UpdateMessageFolderInput} })
@@ -6295,6 +6156,7 @@ export interface MutationGenqlSelection{
verifyEmailingDomain?: (EmailingDomainGenqlSelection & { __args: {id: Scalars['String']} })
createOneAppToken?: (AppTokenGenqlSelection & { __args: {input: CreateOneAppTokenInput} })
installMarketplaceApp?: { __args: {universalIdentifier: Scalars['String'], version?: (Scalars['String'] | null)} }
syncMarketplaceCatalog?: boolean | number
installApplication?: { __args: {appRegistrationId: Scalars['String'], version?: (Scalars['String'] | null)} }
runWorkspaceMigration?: { __args: {workspaceMigration: WorkspaceMigrationInput} }
uninstallApplication?: { __args: {universalIdentifier: Scalars['String']} }
@@ -6527,7 +6389,7 @@ export interface CreateOneFieldMetadataInput {
/** The record to create */
field: CreateFieldInput}
export interface CreateFieldInput {type: FieldMetadataType,name: Scalars['String'],label: Scalars['String'],description?: (Scalars['String'] | null),icon?: (Scalars['String'] | null),isCustom?: (Scalars['Boolean'] | null),isActive?: (Scalars['Boolean'] | null),isSystem?: (Scalars['Boolean'] | null),isUIReadOnly?: (Scalars['Boolean'] | null),isNullable?: (Scalars['Boolean'] | null),isUnique?: (Scalars['Boolean'] | null),defaultValue?: (Scalars['JSON'] | null),options?: (Scalars['JSON'] | null),settings?: (Scalars['JSON'] | null),isLabelSyncedWithName?: (Scalars['Boolean'] | null),objectMetadataId: Scalars['UUID'],isRemoteCreation?: (Scalars['Boolean'] | null),relationCreationPayload?: (Scalars['JSON'] | null),morphRelationsCreationPayload?: (Scalars['JSON'][] | null)}
export interface CreateFieldInput {type: FieldMetadataType,name: Scalars['String'],label: Scalars['String'],description?: (Scalars['String'] | null),icon?: (Scalars['String'] | null),isCustom?: (Scalars['Boolean'] | null),isActive?: (Scalars['Boolean'] | null),isSystem?: (Scalars['Boolean'] | null),isUIReadOnly?: (Scalars['Boolean'] | null),isNullable?: (Scalars['Boolean'] | null),isUnique?: (Scalars['Boolean'] | null),defaultValue?: (Scalars['JSON'] | null),options?: (Scalars['JSON'] | null),settings?: (Scalars['JSON'] | null),objectMetadataId: Scalars['UUID'],isLabelSyncedWithName?: (Scalars['Boolean'] | null),isRemoteCreation?: (Scalars['Boolean'] | null),relationCreationPayload?: (Scalars['JSON'] | null),morphRelationsCreationPayload?: (Scalars['JSON'][] | null)}
export interface UpdateOneFieldMetadataInput {
/** The id of the record to update */
@@ -6535,7 +6397,7 @@ id: Scalars['UUID'],
/** The record to update */
update: UpdateFieldInput}
export interface UpdateFieldInput {universalIdentifier?: (Scalars['String'] | null),name?: (Scalars['String'] | null),label?: (Scalars['String'] | null),description?: (Scalars['String'] | null),icon?: (Scalars['String'] | null),isActive?: (Scalars['Boolean'] | null),isSystem?: (Scalars['Boolean'] | null),isUIReadOnly?: (Scalars['Boolean'] | null),isNullable?: (Scalars['Boolean'] | null),isUnique?: (Scalars['Boolean'] | null),defaultValue?: (Scalars['JSON'] | null),options?: (Scalars['JSON'] | null),settings?: (Scalars['JSON'] | null),isLabelSyncedWithName?: (Scalars['Boolean'] | null),morphRelationsUpdatePayload?: (Scalars['JSON'][] | null)}
export interface UpdateFieldInput {universalIdentifier?: (Scalars['String'] | null),name?: (Scalars['String'] | null),label?: (Scalars['String'] | null),description?: (Scalars['String'] | null),icon?: (Scalars['String'] | null),isActive?: (Scalars['Boolean'] | null),isSystem?: (Scalars['Boolean'] | null),isUIReadOnly?: (Scalars['Boolean'] | null),isNullable?: (Scalars['Boolean'] | null),isUnique?: (Scalars['Boolean'] | null),defaultValue?: (Scalars['JSON'] | null),options?: (Scalars['JSON'] | null),settings?: (Scalars['JSON'] | null),objectMetadataId?: (Scalars['UUID'] | null),isLabelSyncedWithName?: (Scalars['Boolean'] | null),morphRelationsUpdatePayload?: (Scalars['JSON'][] | null)}
export interface DeleteOneFieldInput {
/** The id of the field to delete. */
@@ -6589,11 +6451,11 @@ export interface UpdateSkillInput {id: Scalars['UUID'],name?: (Scalars['String']
export interface GetAuthorizationUrlForSSOInput {identityProviderId: Scalars['UUID'],workspaceInviteHash?: (Scalars['String'] | null)}
export interface CreateApplicationRegistrationInput {name: Scalars['String'],description?: (Scalars['String'] | null),logoUrl?: (Scalars['String'] | null),author?: (Scalars['String'] | null),universalIdentifier?: (Scalars['String'] | null),oAuthRedirectUris?: (Scalars['String'][] | null),oAuthScopes?: (Scalars['String'][] | null),websiteUrl?: (Scalars['String'] | null),termsUrl?: (Scalars['String'] | null)}
export interface CreateApplicationRegistrationInput {name: Scalars['String'],universalIdentifier?: (Scalars['String'] | null),oAuthRedirectUris?: (Scalars['String'][] | null),oAuthScopes?: (Scalars['String'][] | null)}
export interface UpdateApplicationRegistrationInput {id: Scalars['String'],update: UpdateApplicationRegistrationPayload}
export interface UpdateApplicationRegistrationPayload {name?: (Scalars['String'] | null),description?: (Scalars['String'] | null),logoUrl?: (Scalars['String'] | null),author?: (Scalars['String'] | null),oAuthRedirectUris?: (Scalars['String'][] | null),oAuthScopes?: (Scalars['String'][] | null),websiteUrl?: (Scalars['String'] | null),termsUrl?: (Scalars['String'] | null),isListed?: (Scalars['Boolean'] | null)}
export interface UpdateApplicationRegistrationPayload {name?: (Scalars['String'] | null),oAuthRedirectUris?: (Scalars['String'][] | null),oAuthScopes?: (Scalars['String'][] | null),isListed?: (Scalars['Boolean'] | null)}
export interface CreateApplicationRegistrationVariableInput {applicationRegistrationId: Scalars['String'],key: Scalars['String'],value: Scalars['String'],description?: (Scalars['String'] | null),isSecret?: (Scalars['Boolean'] | null)}
@@ -7591,6 +7453,14 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const UsageBreakdownItem_possibleTypes: string[] = ['UsageBreakdownItem']
export const isUsageBreakdownItem = (obj?: { __typename?: any } | null): obj is UsageBreakdownItem => {
if (!obj?.__typename) throw new Error('__typename is missing in "isUsageBreakdownItem"')
return UsageBreakdownItem_possibleTypes.includes(obj.__typename)
}
const ConfigVariable_possibleTypes: string[] = ['ConfigVariable']
export const isConfigVariable = (obj?: { __typename?: any } | null): obj is ConfigVariable => {
if (!obj?.__typename) throw new Error('__typename is missing in "isConfigVariable"')
@@ -8047,6 +7917,14 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
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"')
return LogicFunctionLogs_possibleTypes.includes(obj.__typename)
}
const DeleteTwoFactorAuthenticationMethod_possibleTypes: string[] = ['DeleteTwoFactorAuthenticationMethod']
export const isDeleteTwoFactorAuthenticationMethod = (obj?: { __typename?: any } | null): obj is DeleteTwoFactorAuthenticationMethod => {
if (!obj?.__typename) throw new Error('__typename is missing in "isDeleteTwoFactorAuthenticationMethod"')
@@ -8215,6 +8093,30 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const UsageTimeSeries_possibleTypes: string[] = ['UsageTimeSeries']
export const isUsageTimeSeries = (obj?: { __typename?: any } | null): obj is UsageTimeSeries => {
if (!obj?.__typename) throw new Error('__typename is missing in "isUsageTimeSeries"')
return UsageTimeSeries_possibleTypes.includes(obj.__typename)
}
const UsageUserDaily_possibleTypes: string[] = ['UsageUserDaily']
export const isUsageUserDaily = (obj?: { __typename?: any } | null): obj is UsageUserDaily => {
if (!obj?.__typename) throw new Error('__typename is missing in "isUsageUserDaily"')
return UsageUserDaily_possibleTypes.includes(obj.__typename)
}
const UsageAnalytics_possibleTypes: string[] = ['UsageAnalytics']
export const isUsageAnalytics = (obj?: { __typename?: any } | null): obj is UsageAnalytics => {
if (!obj?.__typename) throw new Error('__typename is missing in "isUsageAnalytics"')
return UsageAnalytics_possibleTypes.includes(obj.__typename)
}
const DevelopmentApplication_possibleTypes: string[] = ['DevelopmentApplication']
export const isDevelopmentApplication = (obj?: { __typename?: any } | null): obj is DevelopmentApplication => {
if (!obj?.__typename) throw new Error('__typename is missing in "isDevelopmentApplication"')
@@ -8247,62 +8149,6 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const MarketplaceAppField_possibleTypes: string[] = ['MarketplaceAppField']
export const isMarketplaceAppField = (obj?: { __typename?: any } | null): obj is MarketplaceAppField => {
if (!obj?.__typename) throw new Error('__typename is missing in "isMarketplaceAppField"')
return MarketplaceAppField_possibleTypes.includes(obj.__typename)
}
const MarketplaceAppObject_possibleTypes: string[] = ['MarketplaceAppObject']
export const isMarketplaceAppObject = (obj?: { __typename?: any } | null): obj is MarketplaceAppObject => {
if (!obj?.__typename) throw new Error('__typename is missing in "isMarketplaceAppObject"')
return MarketplaceAppObject_possibleTypes.includes(obj.__typename)
}
const MarketplaceAppLogicFunction_possibleTypes: string[] = ['MarketplaceAppLogicFunction']
export const isMarketplaceAppLogicFunction = (obj?: { __typename?: any } | null): obj is MarketplaceAppLogicFunction => {
if (!obj?.__typename) throw new Error('__typename is missing in "isMarketplaceAppLogicFunction"')
return MarketplaceAppLogicFunction_possibleTypes.includes(obj.__typename)
}
const MarketplaceAppFrontComponent_possibleTypes: string[] = ['MarketplaceAppFrontComponent']
export const isMarketplaceAppFrontComponent = (obj?: { __typename?: any } | null): obj is MarketplaceAppFrontComponent => {
if (!obj?.__typename) throw new Error('__typename is missing in "isMarketplaceAppFrontComponent"')
return MarketplaceAppFrontComponent_possibleTypes.includes(obj.__typename)
}
const MarketplaceAppRoleObjectPermission_possibleTypes: string[] = ['MarketplaceAppRoleObjectPermission']
export const isMarketplaceAppRoleObjectPermission = (obj?: { __typename?: any } | null): obj is MarketplaceAppRoleObjectPermission => {
if (!obj?.__typename) throw new Error('__typename is missing in "isMarketplaceAppRoleObjectPermission"')
return MarketplaceAppRoleObjectPermission_possibleTypes.includes(obj.__typename)
}
const MarketplaceAppRoleFieldPermission_possibleTypes: string[] = ['MarketplaceAppRoleFieldPermission']
export const isMarketplaceAppRoleFieldPermission = (obj?: { __typename?: any } | null): obj is MarketplaceAppRoleFieldPermission => {
if (!obj?.__typename) throw new Error('__typename is missing in "isMarketplaceAppRoleFieldPermission"')
return MarketplaceAppRoleFieldPermission_possibleTypes.includes(obj.__typename)
}
const MarketplaceAppDefaultRole_possibleTypes: string[] = ['MarketplaceAppDefaultRole']
export const isMarketplaceAppDefaultRole = (obj?: { __typename?: any } | null): obj is MarketplaceAppDefaultRole => {
if (!obj?.__typename) throw new Error('__typename is missing in "isMarketplaceAppDefaultRole"')
return MarketplaceAppDefaultRole_possibleTypes.includes(obj.__typename)
}
const MarketplaceApp_possibleTypes: string[] = ['MarketplaceApp']
export const isMarketplaceApp = (obj?: { __typename?: any } | null): obj is MarketplaceApp => {
if (!obj?.__typename) throw new Error('__typename is missing in "isMarketplaceApp"')
@@ -8311,6 +8157,14 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const MarketplaceAppDetail_possibleTypes: string[] = ['MarketplaceAppDetail']
export const isMarketplaceAppDetail = (obj?: { __typename?: any } | null): obj is MarketplaceAppDetail => {
if (!obj?.__typename) throw new Error('__typename is missing in "isMarketplaceAppDetail"')
return MarketplaceAppDetail_possibleTypes.includes(obj.__typename)
}
const PublicDomain_possibleTypes: string[] = ['PublicDomain']
export const isPublicDomain = (obj?: { __typename?: any } | null): obj is PublicDomain => {
if (!obj?.__typename) throw new Error('__typename is missing in "isPublicDomain"')
@@ -8399,46 +8253,6 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const UsageBreakdownItem_possibleTypes: string[] = ['UsageBreakdownItem']
export const isUsageBreakdownItem = (obj?: { __typename?: any } | null): obj is UsageBreakdownItem => {
if (!obj?.__typename) throw new Error('__typename is missing in "isUsageBreakdownItem"')
return UsageBreakdownItem_possibleTypes.includes(obj.__typename)
}
const UsageTimeSeries_possibleTypes: string[] = ['UsageTimeSeries']
export const isUsageTimeSeries = (obj?: { __typename?: any } | null): obj is UsageTimeSeries => {
if (!obj?.__typename) throw new Error('__typename is missing in "isUsageTimeSeries"')
return UsageTimeSeries_possibleTypes.includes(obj.__typename)
}
const UsageUserDaily_possibleTypes: string[] = ['UsageUserDaily']
export const isUsageUserDaily = (obj?: { __typename?: any } | null): obj is UsageUserDaily => {
if (!obj?.__typename) throw new Error('__typename is missing in "isUsageUserDaily"')
return UsageUserDaily_possibleTypes.includes(obj.__typename)
}
const UsageAnalytics_possibleTypes: string[] = ['UsageAnalytics']
export const isUsageAnalytics = (obj?: { __typename?: any } | null): obj is UsageAnalytics => {
if (!obj?.__typename) throw new Error('__typename is missing in "isUsageAnalytics"')
return UsageAnalytics_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"')
return LogicFunctionLogs_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"')
@@ -9133,20 +8947,13 @@ export const enumFeatureFlagKey = {
IS_UNIQUE_INDEXES_ENABLED: 'IS_UNIQUE_INDEXES_ENABLED' as const,
IS_JSON_FILTER_ENABLED: 'IS_JSON_FILTER_ENABLED' as const,
IS_AI_ENABLED: 'IS_AI_ENABLED' as const,
IS_APPLICATION_ENABLED: 'IS_APPLICATION_ENABLED' as const,
IS_MARKETPLACE_ENABLED: 'IS_MARKETPLACE_ENABLED' as const,
IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED: 'IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED' as const,
IS_PUBLIC_DOMAIN_ENABLED: 'IS_PUBLIC_DOMAIN_ENABLED' as const,
IS_EMAILING_DOMAIN_ENABLED: 'IS_EMAILING_DOMAIN_ENABLED' as const,
IS_DASHBOARD_V2_ENABLED: 'IS_DASHBOARD_V2_ENABLED' as const,
IS_ATTACHMENT_MIGRATED: 'IS_ATTACHMENT_MIGRATED' as const,
IS_NOTE_TARGET_MIGRATED: 'IS_NOTE_TARGET_MIGRATED' as const,
IS_TASK_TARGET_MIGRATED: 'IS_TASK_TARGET_MIGRATED' as const,
IS_ROW_LEVEL_PERMISSION_PREDICATES_ENABLED: 'IS_ROW_LEVEL_PERMISSION_PREDICATES_ENABLED' as const,
IS_JUNCTION_RELATIONS_ENABLED: 'IS_JUNCTION_RELATIONS_ENABLED' as const,
IS_COMMAND_MENU_ITEM_ENABLED: 'IS_COMMAND_MENU_ITEM_ENABLED' as const,
IS_NAVIGATION_MENU_ITEM_ENABLED: 'IS_NAVIGATION_MENU_ITEM_ENABLED' as const,
IS_DATE_TIME_WHOLE_DAY_FILTER_ENABLED: 'IS_DATE_TIME_WHOLE_DAY_FILTER_ENABLED' as const,
IS_NAVIGATION_MENU_ITEM_EDITING_ENABLED: 'IS_NAVIGATION_MENU_ITEM_EDITING_ENABLED' as const,
IS_DRAFT_EMAIL_ENABLED: 'IS_DRAFT_EMAIL_ENABLED' as const,
IS_USAGE_ANALYTICS_ENABLED: 'IS_USAGE_ANALYTICS_ENABLED' as const,
@@ -9155,7 +8962,8 @@ export const enumFeatureFlagKey = {
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_RECORD_TABLE_WIDGET_ENABLED: 'IS_RECORD_TABLE_WIDGET_ENABLED' as const,
IS_DATASOURCE_MIGRATED: 'IS_DATASOURCE_MIGRATED' as const
}
export const enumConfigSource = {
@@ -9425,6 +9233,7 @@ export const enumAllMetadataName = {
navigationMenuItem: 'navigationMenuItem' as const,
permissionFlag: 'permissionFlag' as const,
objectPermission: 'objectPermission' as const,
fieldPermission: 'fieldPermission' as const,
frontComponent: 'frontComponent' as const,
webhook: 'webhook' as const
}
@@ -9451,6 +9260,13 @@ export const enumEventLogTable = {
USAGE_EVENT: 'USAGE_EVENT' as const
}
export const enumUsageOperationType = {
AI_CHAT_TOKEN: 'AI_CHAT_TOKEN' as const,
AI_WORKFLOW_TOKEN: 'AI_WORKFLOW_TOKEN' as const,
WORKFLOW_EXECUTION: 'WORKFLOW_EXECUTION' as const,
CODE_EXECUTION: 'CODE_EXECUTION' as const
}
export const enumAnalyticsType = {
PAGEVIEW: 'PAGEVIEW' as const,
TRACK: 'TRACK' as const
File diff suppressed because it is too large Load Diff
+14 -1
View File
@@ -1,6 +1,19 @@
{
"extends": "../../tsconfig.base.json",
"compileOnSave": false,
"compilerOptions": {
"rootDir": ".",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"importHelpers": true,
"target": "es2018",
"module": "esnext",
"lib": ["es2020", "dom"],
"skipLibCheck": true,
"skipDefaultLibCheck": true,
"resolveJsonModule": true,
"allowJs": false,
"esModuleInterop": false,
"allowSyntheticDefaultImports": true,
@@ -32,11 +32,11 @@ has_schema=$(PGPASSWORD=twenty psql -h localhost -U twenty -d default -tAc \
if [ "$has_schema" = "f" ]; then
echo "Database appears to be empty, running initial setup..."
NODE_OPTIONS="--max-old-space-size=1500" node ./dist/scripts/setup-db.js
NODE_OPTIONS="--max-old-space-size=1500" node ./dist/database/scripts/setup-db.js
fi
# Always run migrations (idempotent — skips already-applied ones)
yarn database:migrate:prod
yarn database:migrate:prod --force
yarn command:prod cache:flush
yarn command:prod upgrade
-6
View File
@@ -38,12 +38,6 @@ RUN npx nx run twenty-server:lingui:extract && \
RUN npx nx run twenty-server:build
# Bundle setup-db script into a standalone JS file so the final image
# doesn't need tsx or the TypeScript source tree at runtime.
RUN npx esbuild packages/twenty-server/scripts/setup-db.ts \
--bundle --platform=node --outfile=packages/twenty-server/dist/scripts/setup-db.js \
--external:typeorm --external:dotenv --external:pg
# Clean server build output (type declarations and compiled tests are not needed at runtime;
# source maps are kept because twenty-infra extracts them from the image for Sentry uploads)
RUN find /app/packages/twenty-server/dist -name '*.d.ts' -delete \
+1 -2
View File
@@ -13,8 +13,7 @@ setup_and_migrate_db() {
has_schema=$(psql -tAc "SELECT EXISTS (SELECT 1 FROM information_schema.schemata WHERE schema_name = 'core')" ${PG_DATABASE_URL})
if [ "$has_schema" = "f" ]; then
echo "Database appears to be empty, running migrations."
NODE_OPTIONS="--max-old-space-size=1500" node ./dist/scripts/setup-db.js
yarn database:migrate:prod
yarn database:init:prod
fi
yarn command:prod cache:flush
@@ -19,15 +19,17 @@ The SDK provides helper functions for defining your app entities. As described i
|----------|---------|
| `defineApplication` | Configure application metadata (required, one per app) |
| `defineObject` | Define custom objects with fields |
| `defineField` | Extend existing objects with additional fields or define standalone relation fields |
| `defineLogicFunction` | Define logic functions with handlers |
| `definePreInstallLogicFunction` | Define a pre-install logic function (one per app) |
| `definePostInstallLogicFunction` | Define a post-install logic function (one per app) |
| `defineFrontComponent` | Define front components for custom UI |
| `defineRole` | Configure role permissions and object access |
| `defineField` | Extend existing objects with additional fields |
| `defineView` | Define saved views for objects |
| `defineNavigationMenuItem` | Define sidebar navigation links |
| `defineSkill` | Define AI agent skills |
| `defineAgent` | Define AI agents |
| `definePageLayout` | Define custom page layouts |
These functions validate your configuration at build time and provide IDE autocompletion and type safety.
@@ -36,7 +38,7 @@ These functions validate your configuration at build time and provide IDE autoco
Custom objects describe both schema and behavior for records in your workspace. Use `defineObject()` to define objects with built-in validation:
```typescript
// src/app/postCard.object.ts
// src/objects/postCard.object.ts
import { defineObject, FieldType } from 'twenty-sdk';
enum PostCardStatus {
@@ -110,7 +112,7 @@ Key points:
- The `universalIdentifier` must be unique and stable across deployments.
- Each field requires a `name`, `type`, `label`, and its own stable `universalIdentifier`.
- The `fields` array is optional — you can define objects without custom fields.
- You can scaffold new objects using `yarn twenty entity:add`, which guides you through naming, fields, and relationships.
- You can scaffold new objects using `yarn twenty add`, which guides you through naming, fields, and relationships.
<Note>
**Base fields are created automatically.** When you define a custom object, Twenty automatically adds standard fields
@@ -120,6 +122,195 @@ Key points:
but this is not recommended.
</Note>
### Defining fields on existing objects
Use `defineField()` to add fields to objects you don't own — such as standard Twenty objects (Person, Company, etc.) or objects from other apps. Unlike inline fields in `defineObject()`, standalone fields require an `objectUniversalIdentifier` to specify which object they extend:
```typescript
// src/fields/company-loyalty-tier.field.ts
import { defineField, FieldType } from 'twenty-sdk';
export default defineField({
universalIdentifier: 'f2a1b3c4-d5e6-7890-abcd-ef1234567890',
objectUniversalIdentifier: '701aecb9-eb1c-4d84-9d94-b954b231b64b', // Company object
name: 'loyaltyTier',
type: FieldType.SELECT,
label: 'Loyalty Tier',
icon: 'IconStar',
options: [
{ value: 'BRONZE', label: 'Bronze', position: 0, color: 'orange' },
{ value: 'SILVER', label: 'Silver', position: 1, color: 'gray' },
{ value: 'GOLD', label: 'Gold', position: 2, color: 'yellow' },
],
});
```
Key points:
- `objectUniversalIdentifier` identifies the target object. For standard objects, use `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS` exported from `twenty-sdk`.
- When defining fields inline in `defineObject()`, you do **not** need `objectUniversalIdentifier` — it's inherited from the parent object.
- `defineField()` is the only way to add fields to objects you didn't create with `defineObject()`.
### Relations
Relations connect objects together. In Twenty, relations are always **bidirectional** — you define both sides, and each side references the other.
There are two relation types:
| Relation type | Description | Has foreign key? |
|---------------|-------------|-----------------|
| `MANY_TO_ONE` | Many records of this object point to one record of the target | Yes (`joinColumnName`) |
| `ONE_TO_MANY` | One record of this object has many records of the target | No (inverse side) |
#### How relations work
Every relation requires **two fields** that reference each other:
1. The **MANY_TO_ONE** side — lives on the object that holds the foreign key
2. The **ONE_TO_MANY** side — lives on the object that owns the collection
Both fields use `FieldType.RELATION` and cross-reference each other via `relationTargetFieldMetadataUniversalIdentifier`.
#### Example: Post Card has many Recipients
Suppose a `PostCard` can be sent to many `PostCardRecipient` records. Each recipient belongs to exactly one post card.
**Step 1: Define the ONE_TO_MANY side on PostCard** (the "one" side):
```typescript
// src/fields/post-card-recipients-on-post-card.field.ts
import { defineField, FieldType, RelationType } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_RECIPIENTS_FIELD_ID = 'a1111111-1111-1111-1111-111111111111';
// Import from the other side
import { POST_CARD_FIELD_ID } from './post-card-on-post-card-recipient.field';
export default defineField({
universalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCardRecipients',
label: 'Post Card Recipients',
icon: 'IconUsers',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_FIELD_ID,
universalSettings: {
relationType: RelationType.ONE_TO_MANY,
},
});
```
**Step 2: Define the MANY_TO_ONE side on PostCardRecipient** (the "many" side — holds the foreign key):
```typescript
// src/fields/post-card-on-post-card-recipient.field.ts
import { defineField, FieldType, RelationType, OnDeleteAction } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_FIELD_ID = 'b2222222-2222-2222-2222-222222222222';
// Import from the other side
import { POST_CARD_RECIPIENTS_FIELD_ID } from './post-card-recipients-on-post-card.field';
export default defineField({
universalIdentifier: POST_CARD_FIELD_ID,
objectUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
icon: 'IconMail',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
});
```
<Note>
**Circular imports:** Both relation fields reference each other's `universalIdentifier`. To avoid circular import issues, export your field IDs as named constants from each file, and import them in the other file. The build system resolves these at compile time.
</Note>
#### Relating to standard objects
To create a relation with a built-in Twenty object (Person, Company, etc.), use `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS`:
```typescript
// src/fields/person-on-self-hosting-user.field.ts
import {
defineField,
FieldType,
RelationType,
OnDeleteAction,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk';
import { SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER } from '../objects/self-hosting-user.object';
export const PERSON_FIELD_ID = 'c3333333-3333-3333-3333-333333333333';
export const SELF_HOSTING_USER_REVERSE_FIELD_ID = 'd4444444-4444-4444-4444-444444444444';
export default defineField({
universalIdentifier: PERSON_FIELD_ID,
objectUniversalIdentifier: SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'person',
label: 'Person',
description: 'Person matching with the self hosting user',
isNullable: true,
relationTargetObjectMetadataUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
relationTargetFieldMetadataUniversalIdentifier: SELF_HOSTING_USER_REVERSE_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.SET_NULL,
joinColumnName: 'personId',
},
});
```
#### Relation field properties
| Property | Required | Description |
|----------|----------|-------------|
| `type` | Yes | Must be `FieldType.RELATION` |
| `relationTargetObjectMetadataUniversalIdentifier` | Yes | The `universalIdentifier` of the target object |
| `relationTargetFieldMetadataUniversalIdentifier` | Yes | The `universalIdentifier` of the matching field on the target object |
| `universalSettings.relationType` | Yes | `RelationType.MANY_TO_ONE` or `RelationType.ONE_TO_MANY` |
| `universalSettings.onDelete` | MANY_TO_ONE only | What happens when the referenced record is deleted: `CASCADE`, `SET_NULL`, `RESTRICT`, or `NO_ACTION` |
| `universalSettings.joinColumnName` | MANY_TO_ONE only | Database column name for the foreign key (e.g., `postCardId`) |
#### Inline relation fields in defineObject
You can also define relation fields directly inside `defineObject()`. In that case, omit `objectUniversalIdentifier` — it's inherited from the parent object:
```typescript
export default defineObject({
universalIdentifier: '...',
nameSingular: 'postCardRecipient',
// ...
fields: [
{
universalIdentifier: POST_CARD_FIELD_ID,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
},
// ... other fields
],
});
```
### Application config (application-config.ts)
@@ -161,13 +352,29 @@ Notes:
- `defaultRoleUniversalIdentifier` must match the role file (see below).
- Pre-install and post-install functions are automatically detected during the manifest build. See [Pre-install functions](#pre-install-functions) and [Post-install functions](#post-install-functions).
#### Marketplace metadata
If you plan to [publish your app](/developers/extend/apps/publishing), these optional fields control how your app appears in the marketplace:
| Field | Description |
|-------|-------------|
| `author` | Author or company name |
| `category` | App category for marketplace filtering |
| `logoUrl` | Path to your app logo (relative to `./assets/`) |
| `screenshots` | Array of screenshot paths (relative to `./assets/`) |
| `aboutDescription` | Longer markdown description for the "About" tab |
| `websiteUrl` | Link to your website |
| `termsUrl` | Link to terms of service |
| `emailSupport` | Support email address |
| `issueReportUrl` | Link to issue tracker |
#### Roles and permissions
Applications can define roles that encapsulate permissions on your workspace's objects and actions. The field `defaultRoleUniversalIdentifier` in `application-config.ts` designates the default role used by your app's logic functions.
- The runtime API key injected as `TWENTY_API_KEY` is derived from this default function role.
- The typed client will be restricted to the permissions granted to that role.
- Follow leastprivilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
- Follow least-privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
##### Default function role (*.role.ts)
@@ -219,7 +426,7 @@ The `universalIdentifier` of this role is then referenced in `application-config
- **application-config.ts** points to that role so your functions inherit its permissions.
Notes:
- Start from the scaffolded role, then progressively restrict it following leastprivilege.
- Start from the scaffolded role, then progressively restrict it following least-privilege.
- Replace the `objectPermissions` and `fieldPermissions` with the objects/fields your functions need.
- `permissionFlags` control access to platform-level capabilities. Keep them minimal; add only what you need.
- See a working example in the Hello World app: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
@@ -229,7 +436,7 @@ Notes:
Each function file uses `defineLogicFunction()` to export a configuration with a handler and optional triggers.
```typescript
// src/app/createPostCard.logic-function.ts
// src/logic-functions/createPostCard.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import type { DatabaseEventPayload, ObjectRecordCreateEvent, CronPayload, RoutePayload } from 'twenty-sdk';
import { CoreApiClient, type Person } from 'twenty-sdk/generated';
@@ -318,7 +525,7 @@ export default definePreInstallLogicFunction({
You can also manually execute the pre-install function at any time using the CLI:
```bash filename="Terminal"
yarn twenty function:execute --preInstall
yarn twenty exec --preInstall
```
Key points:
@@ -327,7 +534,7 @@ Key points:
- Only one pre-install function is allowed per application. The manifest build will error if more than one is detected.
- The function's `universalIdentifier` is automatically set as `preInstallLogicFunctionUniversalIdentifier` on the application manifest during the build — you do not need to reference it in `defineApplication()`.
- The default timeout is set to 300 seconds (5 minutes) to allow for longer preparation tasks.
- Pre-install functions do not need triggers — they are invoked by the platform before installation or manually via `function:execute --preInstall`.
- Pre-install functions do not need triggers — they are invoked by the platform before installation or manually via `exec --preInstall`.
### Post-install functions
@@ -355,7 +562,7 @@ export default definePostInstallLogicFunction({
You can also manually execute the post-install function at any time using the CLI:
```bash filename="Terminal"
yarn twenty function:execute --postInstall
yarn twenty exec --postInstall
```
Key points:
@@ -364,7 +571,7 @@ Key points:
- Only one post-install function is allowed per application. The manifest build will error if more than one is detected.
- The function's `universalIdentifier` is automatically set as `postInstallLogicFunctionUniversalIdentifier` on the application manifest during the build — you do not need to reference it in `defineApplication()`.
- The default timeout is set to 300 seconds (5 minutes) to allow for longer setup tasks like data seeding.
- Post-install functions do not need triggers — they are invoked by the platform during installation or manually via `function:execute --postInstall`.
- Post-install functions do not need triggers — they are invoked by the platform during installation or manually via `exec --postInstall`.
### Route trigger payload
@@ -412,7 +619,7 @@ The `RoutePayload` type has the following structure:
|----------|------|-------------|
| `headers` | `Record<string, string \| undefined>` | HTTP headers (only those listed in `forwardedRequestHeaders`) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Query string parameters (multiple values joined with commas) |
| `pathParameters` | `Record<string, string \| undefined>` | Path parameters extracted from the route pattern (e.g., `/users/:id` `{ id: '123' }`) |
| `pathParameters` | `Record<string, string \| undefined>` | Path parameters extracted from the route pattern (e.g., `/users/:id` -> `{ id: '123' }`) |
| `body` | `object \| null` | Parsed request body (JSON) |
| `isBase64Encoded` | `boolean` | Whether the body is base64 encoded |
| `requestContext.http.method` | `string` | HTTP method (GET, POST, PUT, PATCH, DELETE) |
@@ -458,7 +665,7 @@ const handler = async (event: RoutePayload) => {
You can create new functions in two ways:
- **Scaffolded**: Run `yarn twenty entity:add` and choose the option to add a new logic function. This generates a starter file with a handler and config.
- **Scaffolded**: Run `yarn twenty add` and choose the option to add a new logic function. This generates a starter file with a handler and config.
- **Manual**: Create a new `*.logic-function.ts` file and use `defineLogicFunction()`, following the same pattern.
### Marking a logic function as a tool
@@ -470,7 +677,7 @@ To mark a logic function as a tool, set `isTool: true` and provide a `toolInputS
```typescript
// src/logic-functions/enrich-company.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import { CoreApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const handler = async (params: { companyName: string; domain?: string }) => {
const client = new CoreApiClient();
@@ -558,7 +765,7 @@ Key points:
You can create new front components in two ways:
- **Scaffolded**: Run `yarn twenty entity:add` and choose the option to add a new front component.
- **Scaffolded**: Run `yarn twenty add` and choose the option to add a new front component.
- **Manual**: Create a new `.tsx` file and use `defineFrontComponent()`, following the same pattern.
### Skills
@@ -592,46 +799,122 @@ Key points:
You can create new skills in two ways:
- **Scaffolded**: Run `yarn twenty entity:add` and choose the option to add a new skill.
- **Scaffolded**: Run `yarn twenty add` and choose the option to add a new skill.
- **Manual**: Create a new file and use `defineSkill()`, following the same pattern.
### Generated typed clients
### Typed API clients (`twenty-client-sdk`)
Two typed clients are auto-generated by `yarn twenty dev` and stored in `node_modules/twenty-sdk/generated` based on your workspace schema:
The `twenty-client-sdk` package provides two typed GraphQL clients for interacting with the Twenty API from your logic functions and front components:
- **`CoreApiClient`** — queries the `/graphql` endpoint for workspace data
- **`MetadataApiClient`** — queries the `/metadata` endpoint for workspace configuration and file uploads
| Client | Import | Endpoint | Generated? |
|--------|--------|----------|------------|
| `CoreApiClient` | `twenty-client-sdk/core` | `/graphql` — workspace data (records, objects) | Yes, at dev/build time |
| `MetadataApiClient` | `twenty-client-sdk/metadata` | `/metadata` — workspace config, file uploads | No, ships pre-built |
#### CoreApiClient
`CoreApiClient` is the main client for querying and mutating workspace data. It is **generated from your workspace schema** during `yarn twenty dev` or `yarn twenty build`, so it's fully typed to match your objects and fields.
```typescript
import { CoreApiClient, MetadataApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const client = new CoreApiClient();
const { me } = await client.query({ me: { id: true, displayName: true } });
const metadataClient = new MetadataApiClient();
const { currentWorkspace } = await metadataClient.query({ currentWorkspace: { id: true } });
// Query records
const { companies } = await client.query({
companies: {
edges: {
node: {
id: true,
name: true,
domainName: true,
},
},
},
});
// Create a record
const { createCompany } = await client.mutation({
createCompany: {
__args: {
data: {
name: 'Acme Corp',
},
},
id: true,
name: true,
},
});
```
Both clients are re-generated automatically by `yarn twenty dev` whenever your objects or fields change.
The client uses a selection-set syntax: pass `true` to include a field, use `__args` for arguments, and nest objects for relations. You get full autocompletion and type checking based on your workspace schema.
#### Runtime credentials in logic functions
<Note>
**CoreApiClient is generated at dev/build time.** If you try to 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, generates a typed client using `@genql/cli`, writes the generated sources to `node_modules/twenty-client-sdk/dist/core/generated/`, and replaces the stubs in `node_modules/twenty-client-sdk/dist/core.mjs` and `node_modules/twenty-client-sdk/dist/core.cjs`.
</Note>
When your function runs on Twenty, the platform injects credentials as environment variables before your code executes:
#### Using CoreSchema for type annotations
- `TWENTY_API_URL`: Base URL of the Twenty API your app targets.
- `TWENTY_API_KEY`: Shortlived key scoped to your application's default function role.
`CoreSchema` provides TypeScript types matching your workspace objects, useful for typing component state or function parameters:
Notes:
- You do not need to pass URL or API key to the generated client. It reads `TWENTY_API_URL` and `TWENTY_API_KEY` from process.env at runtime.
- The API key's permissions are determined by the role referenced in your `application-config.ts` via `defaultRoleUniversalIdentifier`. This is the default role used by logic functions of your application.
- Applications can define roles to follow leastprivilege. Grant only the permissions your functions need, then point `defaultRoleUniversalIdentifier` to that role's universal identifier.
```typescript
import { CoreApiClient, CoreSchema } from 'twenty-client-sdk/core';
import { useState } from 'react';
const [company, setCompany] = useState<
Pick<CoreSchema.Company, 'id' | 'name'> | undefined
>(undefined);
const client = new CoreApiClient();
const result = await client.query({
company: {
__args: { filter: { position: { eq: 1 } } },
id: true,
name: true,
},
});
setCompany(result.company);
```
#### MetadataApiClient
`MetadataApiClient` ships pre-built with the SDK (no generation required). It queries the `/metadata` endpoint for workspace configuration, applications, and file uploads:
```typescript
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
const metadataClient = new MetadataApiClient();
// Query workspace info
const { currentWorkspace } = await metadataClient.query({
currentWorkspace: { id: true, displayName: true },
});
// List installed applications
const { findManyApplications } = await metadataClient.query({
findManyApplications: {
id: true,
name: true,
version: true,
},
});
```
#### Runtime credentials
When your code runs on Twenty (logic functions or front components), the platform injects credentials as environment variables:
- `TWENTY_API_URL` — Base URL of the Twenty API
- `TWENTY_API_KEY` — Short-lived key scoped to your application's default function role
You do **not** need to pass these to the clients — they read from `process.env` automatically. The API key's permissions are determined by the role referenced in `defaultRoleUniversalIdentifier` in your `application-config.ts`.
#### Uploading files
The generated `MetadataApiClient` includes an `uploadFile` method for attaching files to file-type fields on your workspace objects. Because standard GraphQL clients do not support multipart file uploads natively, the client provides this dedicated method that implements the [GraphQL multipart request specification](https://github.com/jaydenseric/graphql-multipart-request-spec) under the hood.
`MetadataApiClient` includes an `uploadFile` method for attaching files to file-type fields. It implements the [GraphQL multipart request specification](https://github.com/jaydenseric/graphql-multipart-request-spec):
```typescript
import { MetadataApiClient } from 'twenty-sdk/generated';
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
import * as fs from 'fs';
const metadataClient = new MetadataApiClient();
@@ -641,25 +924,14 @@ const fileBuffer = fs.readFileSync('./invoice.pdf');
const uploadedFile = await metadataClient.uploadFile(
fileBuffer, // file contents as a Buffer
'invoice.pdf', // filename
'application/pdf', // MIME type (defaults to 'application/octet-stream')
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universal identifier
'application/pdf', // MIME type
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universalIdentifier
);
console.log(uploadedFile);
// { id: '...', path: '...', size: 12345, createdAt: '...', url: 'https://...' }
```
The method signature:
```typescript
uploadFile(
fileBuffer: Buffer,
filename: string,
contentType: string,
fieldMetadataUniversalIdentifier: string,
): Promise<{ id: string; path: string; size: number; createdAt: string; url: string }>
```
| Parameter | Type | Description |
|-----------|------|-------------|
| `fileBuffer` | `Buffer` | The raw file contents |
@@ -668,8 +940,7 @@ uploadFile(
| `fieldMetadataUniversalIdentifier` | `string` | The `universalIdentifier` of the file-type field on your object |
Key points:
- The `uploadFile` method is available on `MetadataApiClient` because the upload mutation is resolved by the `/metadata` endpoint.
- It uses the field's `universalIdentifier` (not its workspace-specific ID), so your upload code works across any workspace where your app is installed — consistent with how apps reference fields everywhere else.
- Uses the field's `universalIdentifier` (not its workspace-specific ID), so your upload code works across any workspace where your app is installed.
- The returned `url` is a signed URL you can use to access the uploaded file.
### Hello World example
@@ -48,7 +48,7 @@ From here you can:
```bash filename="Terminal"
# Add a new entity to your application (guided)
yarn twenty entity:add
yarn twenty add
# Watch your application's function logs
yarn twenty function:logs
@@ -122,7 +122,7 @@ With `--minimal`, only the core files are created (`application-config.ts`, `rol
At a high level:
- **package.json**: Declares the app name, version, engines (Node 24+, Yarn 4), and adds `twenty-sdk` plus a `twenty` script that delegates to the local `twenty` CLI. Run `yarn twenty help` to list all available commands.
- **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `generated/` (typed client), `dist/`, `build/`, coverage folders, log files, and `.env*` files.
- **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `.twenty/`, `dist/`, `build/`, coverage folders, log files, and `.env*` files.
- **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Lock and configure the Yarn 4 toolchain used by the project.
- **.nvmrc**: Pins the Node.js version expected by the project.
- **.oxlintrc.json** and **tsconfig.json**: Provide linting and TypeScript configuration for your app's TypeScript sources.
@@ -165,8 +165,8 @@ export default defineObject({
Later commands will add more files and folders:
- `yarn twenty dev` will auto-generate two typed API clients in `node_modules/twenty-sdk/generated`: `CoreApiClient` (for workspace data via `/graphql`) and `MetadataApiClient` (for workspace configuration and file uploads via `/metadata`).
- `yarn twenty entity:add` will add entity definition files under `src/` for your custom objects, functions, front components, roles, skills, and more.
- `yarn twenty dev` will auto-generate the typed `CoreApiClient` (for workspace data via `/graphql`) into `node_modules/twenty-client-sdk/`. The `MetadataApiClient` (for workspace configuration and file uploads via `/metadata`) ships pre-built and is available immediately. Import them from `twenty-client-sdk/core` and `twenty-client-sdk/metadata` respectively.
- `yarn twenty add` will add entity definition files under `src/` for your custom objects, functions, front components, roles, skills, and more.
## Authentication
@@ -12,7 +12,25 @@ Apps are currently in alpha testing. The feature is functional but still evolvin
Once your app is [built and tested locally](/developers/extend/apps/building), you have two paths for distributing it:
- **Publish to npm** — list your app in the Twenty marketplace for any workspace to discover and install.
- **Push a tarball** — deploy your app to a specific Twenty server for internal use without making it publicly available.
- **Deploy a tarball** — upload your app directly to a specific Twenty server for internal or private use.
Both paths start from the same **build** step.
## Building your app
The `build` command compiles your TypeScript sources, transpiles logic functions and front components, and generates a `manifest.json` that describes your app's contents:
```bash filename="Terminal"
yarn twenty build
```
The output is written to `.twenty/output/`. This directory contains everything needed for distribution: compiled code, assets, the manifest, and a copy of your `package.json`.
To also create a `.tgz` tarball (used by the deploy command internally, or for manual distribution):
```bash filename="Terminal"
yarn twenty build --tarball
```
## Publishing to npm
@@ -21,29 +39,72 @@ Publishing to npm makes your app discoverable in the Twenty marketplace. Any Twe
### Requirements
- An [npm](https://www.npmjs.com) account
- Your package name **must** use the `twenty-app-` prefix (e.g., `twenty-app-postcard-sender`)
- The `twenty-app` keyword **must** be listed in your `package.json` `keywords` array
### Adding the required keyword
The Twenty marketplace discovers apps by searching the npm registry for packages with the `twenty-app` keyword. Add it to your `package.json`:
```json filename="package.json"
{
"name": "twenty-app-postcard-sender",
"version": "1.0.0",
"keywords": ["twenty-app"],
...
}
```
<Note>
The marketplace searches for `keywords:twenty-app` on the npm registry. Without this keyword, your package won't appear in the marketplace even if it has the `twenty-app-` name prefix.
</Note>
### Steps
1. **Build your app** — the CLI compiles your TypeScript sources and generates the application manifest:
1. **Build your app:**
```bash filename="Terminal"
yarn twenty build
```
2. **Publish to npm** — push the built package to the npm registry:
2. **Publish to npm:**
```bash filename="Terminal"
npx twenty publish
yarn twenty publish
```
### Auto-discovery
This runs `npm publish` from the `.twenty/output/` directory.
Packages with the `twenty-app-` prefix are automatically discovered by the Twenty marketplace catalog. Once published, your app appears in the marketplace within a few minutes — no manual registration or approval required.
To publish under a specific dist-tag (e.g., `beta` or `next`):
```bash filename="Terminal"
yarn twenty publish --tag beta
```
### How marketplace discovery works
The Twenty server syncs its marketplace catalog from the npm registry **every hour**:
1. It searches for all npm packages with the `keywords:twenty-app` keyword
2. For each package, it fetches the `manifest.json` from the npm CDN
3. The app's metadata (name, description, author, logo, screenshots, category) is extracted from the manifest and displayed in the marketplace
After publishing, your app can take up to one hour to appear in the marketplace. To trigger the sync immediately instead of waiting for the next hourly run:
```bash filename="Terminal"
yarn twenty catalog-sync
```
To target a specific remote:
```bash filename="Terminal"
yarn twenty catalog-sync -r production
```
The metadata shown in the marketplace comes from your `defineApplication()` call in your app source code — fields like `displayName`, `description`, `author`, `category`, `logoUrl`, `screenshots`, `aboutDescription`, `websiteUrl`, and `termsUrl`.
### CI publishing
The scaffolded project includes a GitHub Actions workflow that publishes on every release. It runs `app:build`, then `npm publish --provenance` from the build output:
The scaffolded project includes a GitHub Actions workflow that publishes on every release:
```yaml filename=".github/workflows/publish.yml"
name: Publish
@@ -72,48 +133,117 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
```
For other CI systems (GitLab CI, CircleCI, etc.), the same three commands apply: `yarn install`, `npx twenty build`, then `npm publish` from `.twenty/output`.
For other CI systems (GitLab CI, CircleCI, etc.), the same three commands apply: `yarn install`, `yarn twenty build`, then `npm publish` from `.twenty/output`.
<Tip>
**npm provenance** is optional but recommended. Publishing with `--provenance` adds a trust badge to your npm listing, letting users verify the package was built from a specific commit in a public CI pipeline. See the [npm provenance docs](https://docs.npmjs.com/generating-provenance-statements) for setup instructions.
</Tip>
## Internal distribution
## Deploying to a server (tarball)
For apps you don't want publicly available — proprietary tools, enterprise-only integrations, or experimental builds — you can push a tarball directly to a Twenty server.
For apps you don't want publicly available — proprietary tools, enterprise-only integrations, or experimental builds — you can deploy a tarball directly to a Twenty server.
### Push a tarball
### Prerequisites
Build your app and deploy it to a specific server in one step:
Before deploying, you need a configured remote pointing to the target server. Remotes store the server URL and authentication credentials locally in `~/.twenty/config.json`.
Add a remote:
```bash filename="Terminal"
npx twenty publish --server <server-url>
yarn twenty remote add --url https://your-twenty-server.com --as production
```
Any workspace on that server can then install and upgrade the app from the **Applications** settings page.
For a local development server:
```bash filename="Terminal"
yarn twenty remote add --local --as local
```
You can also authenticate with an API key for non-interactive environments:
```bash filename="Terminal"
yarn twenty remote add --url https://your-twenty-server.com --token <api-key> --as production
```
Manage your remotes:
```bash filename="Terminal"
yarn twenty remote list # List all configured remotes
yarn twenty remote switch prod # Set the default remote
yarn twenty remote status # Show active remote and auth status
yarn twenty remote remove old # Remove a remote
```
### Deploying
Build and upload your app to the server in one step:
```bash filename="Terminal"
yarn twenty deploy
```
This builds the app with `--tarball`, then uploads the tarball to the default remote via a GraphQL multipart upload.
To deploy to a specific remote:
```bash filename="Terminal"
yarn twenty deploy -r production
```
### Sharing a deployed app
Tarball apps are not listed in the public marketplace, so other workspaces on the same server won't discover them by browsing. To share a deployed app:
1. Go to **Settings > Applications > Registrations** and open your app
2. In the **Distribution** tab, click **Copy share link**
3. Share this link with users on other workspaces — it takes them directly to the app's install page
The share link uses the server's base URL (without any workspace subdomain) so it works for any workspace on the server.
### Version management
To release an update:
1. Bump the `version` field in your `package.json`
2. Push a new tarball with `npx twenty publish --server <server-url>`
3. Workspaces on that server will see the upgrade available in their settings
2. Run `yarn twenty deploy` (or `yarn twenty deploy -r production`)
3. Workspaces that have the app installed will see the upgrade available in their settings
<Note>
Internal apps are scoped to the server they're pushed to. They won't appear in the public marketplace and can't be installed by workspaces on other servers.
</Note>
## Installing apps
## App categories
Once an app is published (npm) or deployed (tarball), workspaces install it through the UI:
```bash filename="Terminal"
yarn twenty install
```
Or from the **Settings > Applications** page in the Twenty UI, where both marketplace and tarball-deployed apps can be browsed and installed.
## App distribution categories
Twenty organizes apps into three categories based on how they're distributed:
| Category | How it works | Visible in marketplace? |
|----------|-------------|------------------------|
| **Development** | Local dev mode apps running via `yarn twenty dev`. Used for building and testing. | No |
| **Published** | Apps published to npm with the `twenty-app-` prefix. Listed in the marketplace for any workspace to install. | Yes |
| **Internal** | Apps deployed via tarball to a specific server. Available only to workspaces on that server. | No |
| **Published (npm)** | Apps published to npm with the `twenty-app` keyword. Listed in the marketplace for any workspace to install. | Yes |
| **Internal (tarball)** | Apps deployed via tarball to a specific server. Available only to workspaces on that server via a share link. | No |
<Tip>
Start in **Development** mode while building your app. When it's ready, choose **Published** (npm) for broad distribution or **Internal** (tarball) for private deployment.
</Tip>
## CLI reference
| Command | Description | Key flags |
|---------|-------------|-----------|
| `yarn twenty build` | Compile app and generate manifest | `--tarball` — also create a `.tgz` package |
| `yarn twenty publish` | Build and publish to npm | `--tag <tag>` — npm dist-tag (e.g., `beta`, `next`) |
| `yarn twenty deploy` | Build and upload tarball to a server | `-r, --remote <name>` — target remote |
| `yarn twenty catalog-sync` | Trigger marketplace catalog sync on the server | `-r, --remote <name>` — target remote |
| `yarn twenty install` | Install a deployed app on a workspace | `-r, --remote <name>` — target remote |
| `yarn twenty dev` | Watch and sync local changes | Uses default remote |
| `yarn twenty remote add` | Add a server connection | `--url`, `--token`, `--as`, `--local`, `--port` |
| `yarn twenty remote list` | List configured remotes | — |
| `yarn twenty remote switch` | Set default remote | — |
| `yarn twenty remote status` | Show connection status | — |
| `yarn twenty remote remove` | Remove a remote | — |
@@ -15,19 +15,21 @@ description: عرّف الكائنات، والدوال المنطقية، وم
يوفّر SDK دوالًا مساعدة لتعريف كيانات تطبيقك. كما هو موضح في [اكتشاف الكيانات](/l/ar/developers/extend/apps/getting-started#entity-detection)، يجب استخدام `export default define<Entity>({...})` كي يتم اكتشاف كياناتك:
| دالة | الغرض |
| -------------------------------- | ---------------------------------------------------- |
| `defineApplication` | تهيئة بيانات التعريف للتطبيق (مطلوب، واحد لكل تطبيق) |
| `defineObject` | تعريف كائنات مخصصة مع حقول |
| `defineLogicFunction` | تعريف وظائف منطقية مع معالجات |
| `definePreInstallLogicFunction` | تعريف دالة منطقية لما قبل التثبيت (واحدة لكل تطبيق) |
| `definePostInstallLogicFunction` | تعريف دالة منطقية لما بعد التثبيت (واحدة لكل تطبيق) |
| `defineFrontComponent` | عرِّف مكوّنات أمامية لواجهة مستخدم مخصّصة |
| `defineRole` | تهيئة صلاحيات الدور والوصول إلى الكائنات |
| `defineField` | وسّع الكائنات الموجودة بحقول إضافية |
| `defineView` | تعريف العروض المحفوظة للكائنات |
| `defineNavigationMenuItem` | تعريف روابط التنقل في الشريط الجانبي |
| `defineSkill` | عرّف مهارات وكيل الذكاء الاصطناعي |
| دالة | الغرض |
| -------------------------------- | -------------------------------------------------------------- |
| `defineApplication` | تهيئة بيانات التعريف للتطبيق (مطلوب، واحد لكل تطبيق) |
| `defineObject` | تعريف كائنات مخصصة مع حقول |
| `defineField` | وسّع الكائنات الموجودة بحقول إضافية أو عرّف حقول علاقات مستقلة |
| `defineLogicFunction` | تعريف وظائف منطقية مع معالجات |
| `definePreInstallLogicFunction` | تعريف دالة منطقية لما قبل التثبيت (واحدة لكل تطبيق) |
| `definePostInstallLogicFunction` | تعريف دالة منطقية لما بعد التثبيت (واحدة لكل تطبيق) |
| `defineFrontComponent` | عرِّف مكوّنات أمامية لواجهة مستخدم مخصّصة |
| `defineRole` | تهيئة صلاحيات الدور والوصول إلى الكائنات |
| `defineView` | تعريف العروض المحفوظة للكائنات |
| `defineNavigationMenuItem` | تعريف روابط التنقل في الشريط الجانبي |
| `defineSkill` | عرّف مهارات وكيل الذكاء الاصطناعي |
| `defineAgent` | عرّف وكلاء الذكاء الاصطناعي |
| `definePageLayout` | عرّف تخطيطات صفحات مخصّصة |
تتحقق هذه الدوال من تكوينك وقت البناء وتوفّر إكمالًا تلقائيًا في بيئة التطوير وأمان الأنواع.
@@ -36,7 +38,7 @@ description: عرّف الكائنات، والدوال المنطقية، وم
تصف الكائنات المخصصة كلًا من المخطط والسلوك للسجلات في مساحة عملك. استخدم `defineObject()` لتعريف كائنات مع تحقق مدمج:
```typescript
// src/app/postCard.object.ts
// src/objects/postCard.object.ts
import { defineObject, FieldType } from 'twenty-sdk';
enum PostCardStatus {
@@ -110,7 +112,7 @@ export default defineObject({
* `universalIdentifier` يجب أن يكون فريدًا وثابتًا عبر عمليات النشر.
* يتطلب كل حقل `name` و`type` و`label` ومعرّف `universalIdentifier` ثابتًا خاصًا به.
* المصفوفة `fields` اختيارية — يمكنك تعريف كائنات بدون حقول مخصصة.
* يمكنك إنشاء كائنات جديدة باستخدام `yarn twenty entity:add`، والذي يرشدك خلال التسمية والحقول والعلاقات.
* يمكنك إنشاء كائنات جديدة باستخدام `yarn twenty add`، والذي يرشدك خلال التسمية والحقول والعلاقات.
<Note>
**يتم إنشاء الحقول الأساسية تلقائيًا.** عند تعريف كائن مخصص، يضيف Twenty تلقائيًا حقولًا قياسية
@@ -120,6 +122,197 @@ export default defineObject({
لكن هذا غير مستحسن.
</Note>
### تعريف الحقول على الكائنات الموجودة
استخدم `defineField()` لإضافة حقول إلى كائنات لا تملكها — مثل كائنات Twenty القياسية (Person, Company, etc.) أو كائنات من تطبيقات أخرى. على خلاف الحقول المضمّنة في `defineObject()`، تتطلّب الحقول المستقلة `objectUniversalIdentifier` لتحديد الكائن الذي تقوم بتوسيعه:
```typescript
// src/fields/company-loyalty-tier.field.ts
import { defineField, FieldType } from 'twenty-sdk';
export default defineField({
universalIdentifier: 'f2a1b3c4-d5e6-7890-abcd-ef1234567890',
objectUniversalIdentifier: '701aecb9-eb1c-4d84-9d94-b954b231b64b', // Company object
name: 'loyaltyTier',
type: FieldType.SELECT,
label: 'Loyalty Tier',
icon: 'IconStar',
options: [
{ value: 'BRONZE', label: 'Bronze', position: 0, color: 'orange' },
{ value: 'SILVER', label: 'Silver', position: 1, color: 'gray' },
{ value: 'GOLD', label: 'Gold', position: 2, color: 'yellow' },
],
});
```
النقاط الرئيسية:
* `objectUniversalIdentifier` يحدّد الكائن الهدف. بالنسبة للكائنات القياسية، استخدم `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS` المُصدَّر من `twenty-sdk`.
* عند تعريف الحقول بشكل مضمّن في `defineObject()`، **لا** تحتاج إلى `objectUniversalIdentifier` — إذ يُورَّث من الكائن الأب.
* `defineField()` هي الطريقة الوحيدة لإضافة حقول إلى كائنات لم تُنشئها باستخدام `defineObject()`.
### العلاقات
تربط العلاقات الكائنات معًا. في Twenty، تكون العلاقات دائمًا **ثنائية الاتجاه** — حيث تعرّف الجانبين، ويشير كل جانب إلى الآخر.
هناك نوعان من العلاقات:
| نوع العلاقة | الوصف | هل لديه مفتاح خارجي؟ |
| ------------- | ------------------------------------------------------ | ---------------------- |
| `MANY_TO_ONE` | تشير العديد من سجلات هذا الكائن إلى سجل واحد من الهدف | نعم (`joinColumnName`) |
| `ONE_TO_MANY` | يحتوي سجل واحد من هذا الكائن على العديد من سجلات الهدف | لا (الجانب العكسي) |
#### كيف تعمل العلاقات
تتطلّب كل علاقة **حقلين** يشيران إلى بعضهما البعض:
1. جانب **MANY_TO_ONE** — يوجد على الكائن الذي يحمل المفتاح الخارجي
2. جانب **ONE_TO_MANY** — يوجد على الكائن الذي يملك المجموعة
يستخدم كلا الحقلين `FieldType.RELATION` ويُحيل كلٌ منهما إلى الآخر عبر `relationTargetFieldMetadataUniversalIdentifier`.
#### مثال: البطاقة البريدية لديها العديد من المستلمين
افترض أن `PostCard` يمكن إرسالها إلى العديد من سجلات `PostCardRecipient`. ينتمي كل مستلم إلى بطاقة بريدية واحدة بالضبط.
**الخطوة 1: عرّف جانب ONE_TO_MANY على PostCard** (جانب "الواحد"):
```typescript
// src/fields/post-card-recipients-on-post-card.field.ts
import { defineField, FieldType, RelationType } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_RECIPIENTS_FIELD_ID = 'a1111111-1111-1111-1111-111111111111';
// Import from the other side
import { POST_CARD_FIELD_ID } from './post-card-on-post-card-recipient.field';
export default defineField({
universalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCardRecipients',
label: 'Post Card Recipients',
icon: 'IconUsers',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_FIELD_ID,
universalSettings: {
relationType: RelationType.ONE_TO_MANY,
},
});
```
**الخطوة 2: عرّف جانب MANY_TO_ONE على PostCardRecipient** (جانب "العديد" — يحمل المفتاح الخارجي):
```typescript
// src/fields/post-card-on-post-card-recipient.field.ts
import { defineField, FieldType, RelationType, OnDeleteAction } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_FIELD_ID = 'b2222222-2222-2222-2222-222222222222';
// Import from the other side
import { POST_CARD_RECIPIENTS_FIELD_ID } from './post-card-recipients-on-post-card.field';
export default defineField({
universalIdentifier: POST_CARD_FIELD_ID,
objectUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
icon: 'IconMail',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
});
```
<Note>
**الاستيرادات الدائرية:** كلا حقلي العلاقة يُحيل كلٌ منهما إلى `universalIdentifier` الخاص بالآخر. لتجنّب مشكلات الاستيراد الدائري، صدّر معرّفات الحقول كثوابت مسمّاة من كل ملف، واستوردها في الملف الآخر. يقوم نظام البناء بحلّها في وقت الترجمة.
</Note>
#### الربط مع الكائنات القياسية
لإنشاء علاقة مع كائن Twenty مضمّن (Person, Company, etc.)، استخدم `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS`:
```typescript
// src/fields/person-on-self-hosting-user.field.ts
import {
defineField,
FieldType,
RelationType,
OnDeleteAction,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk';
import { SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER } from '../objects/self-hosting-user.object';
export const PERSON_FIELD_ID = 'c3333333-3333-3333-3333-333333333333';
export const SELF_HOSTING_USER_REVERSE_FIELD_ID = 'd4444444-4444-4444-4444-444444444444';
export default defineField({
universalIdentifier: PERSON_FIELD_ID,
objectUniversalIdentifier: SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'person',
label: 'Person',
description: 'Person matching with the self hosting user',
isNullable: true,
relationTargetObjectMetadataUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
relationTargetFieldMetadataUniversalIdentifier: SELF_HOSTING_USER_REVERSE_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.SET_NULL,
joinColumnName: 'personId',
},
});
```
#### خصائص حقل العلاقة
| الخاصية | مطلوب | الوصف |
| ------------------------------------------------- | --------------- | -------------------------------------------------------------------------------------- |
| `type` | نعم | يجب أن يكون `FieldType.RELATION` |
| `relationTargetObjectMetadataUniversalIdentifier` | نعم | قيمة `universalIdentifier` للكائن الهدف |
| `relationTargetFieldMetadataUniversalIdentifier` | نعم | قيمة `universalIdentifier` للحقل المطابق على الكائن الهدف |
| `universalSettings.relationType` | نعم | `RelationType.MANY_TO_ONE` أو `RelationType.ONE_TO_MANY` |
| `universalSettings.onDelete` | MANY_TO_ONE فقط | ماذا يحدث عند حذف السجل المشار إليه: `CASCADE`، `SET_NULL`، `RESTRICT`، أو `NO_ACTION` |
| `universalSettings.joinColumnName` | MANY_TO_ONE فقط | اسم عمود قاعدة البيانات للمفتاح الخارجي (مثل `postCardId`) |
#### حقول العلاقات المضمّنة في defineObject
يمكنك أيضًا تعريف حقول العلاقات مباشرةً داخل `defineObject()`. في هذه الحالة، احذف `objectUniversalIdentifier` — إذ يُورَّث من الكائن الأب:
```typescript
export default defineObject({
universalIdentifier: '...',
nameSingular: 'postCardRecipient',
// ...
fields: [
{
universalIdentifier: POST_CARD_FIELD_ID,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
},
// ... other fields
],
});
```
### تكوين التطبيق (application-config.ts)
كل تطبيق لديه ملف واحد `application-config.ts` يصف:
@@ -161,6 +354,22 @@ export default defineApplication({
* `defaultRoleUniversalIdentifier` يجب أن يطابق ملف الدور (انظر أدناه).
* يتم اكتشاف دوال ما قبل التثبيت وما بعد التثبيت تلقائيًا أثناء إنشاء ملف البيان. راجع [دوال ما قبل التثبيت](#pre-install-functions) و[دوال ما بعد التثبيت](#post-install-functions).
#### بيانات التعريف لسوق التطبيقات
إذا كنت تخطط لـ [نشر تطبيقك](/l/ar/developers/extend/apps/publishing)، فإن هذه الحقول الاختيارية تتحكّم في كيفية ظهور تطبيقك في السوق:
| الحقل | الوصف |
| ------------------ | ---------------------------------------------------- |
| `author` | اسم المؤلف أو الشركة |
| `category` | فئة التطبيق لتصفية سوق التطبيقات |
| `logoUrl` | المسار إلى شعار تطبيقك (نسبيًا إلى `./assets/`) |
| `screenshots` | مصفوفة لمسارات لقطات الشاشة (نسبيًا إلى `./assets/`) |
| `aboutDescription` | وصف ماركداون أطول لعلامة التبويب "حول" |
| `websiteUrl` | رابط إلى موقعك الإلكتروني |
| `termsUrl` | رابط إلى شروط الخدمة |
| `emailSupport` | عنوان البريد الإلكتروني للدعم |
| `issueReportUrl` | رابط إلى متتبّع المشاكل |
#### الأدوار والصلاحيات
يمكن للتطبيقات تعريف أدوار تُغلّف الصلاحيات على كائنات وإجراءات مساحة العمل لديك. يعين الحقل `defaultRoleUniversalIdentifier` في `application-config.ts` الدور الافتراضي الذي تستخدمه وظائف المنطق في تطبيقك.
@@ -230,7 +439,7 @@ export default defineRole({
كل ملف وظيفة يستخدم `defineLogicFunction()` لتصدير تكوين مع معالج ومشغّلات اختيارية.
```typescript
// src/app/createPostCard.logic-function.ts
// src/logic-functions/createPostCard.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import type { DatabaseEventPayload, ObjectRecordCreateEvent, CronPayload, RoutePayload } from 'twenty-sdk';
import { CoreApiClient, type Person } from 'twenty-sdk/generated';
@@ -324,7 +533,7 @@ export default definePreInstallLogicFunction({
يمكنك أيضًا تنفيذ دالة ما قبل التثبيت يدويًا في أي وقت باستخدام CLI:
```bash filename="Terminal"
yarn twenty function:execute --preInstall
yarn twenty exec --preInstall
```
النقاط الرئيسية:
@@ -334,7 +543,7 @@ yarn twenty function:execute --preInstall
* يُسمح بدالة ما قبل التثبيت واحدة فقط لكل تطبيق. سيُنتج إنشاء ملف البيان خطأً إذا تم اكتشاف أكثر من واحدة.
* يتم تعيين `universalIdentifier` للدالة تلقائيًا كـ `preInstallLogicFunctionUniversalIdentifier` في بيان التطبيق أثناء الإنشاء — لست بحاجة إلى الإشارة إليه في `defineApplication()`.
* تم ضبط المهلة الافتراضية على 300 ثانية (5 دقائق) للسماح بمهام التحضير الأطول.
* لا تحتاج دوال ما قبل التثبيت إلى مُشغِّلات — إذ يستدعيها النظام الأساسي قبل التثبيت أو يدويًا عبر `function:execute --preInstall`.
* لا تحتاج دوال ما قبل التثبيت إلى مشغّلات — إذ يستدعيها النظام الأساسي قبل التثبيت أو يدويًا عبر `exec --preInstall`.
### دوال ما بعد التثبيت
@@ -362,7 +571,7 @@ export default definePostInstallLogicFunction({
يمكنك أيضًا تنفيذ دالة ما بعد التثبيت يدويًا في أي وقت باستخدام CLI:
```bash filename="Terminal"
yarn twenty function:execute --postInstall
yarn twenty exec --postInstall
```
النقاط الرئيسية:
@@ -372,7 +581,7 @@ yarn twenty function:execute --postInstall
* يُسمح بدالة ما بعد التثبيت واحدة فقط لكل تطبيق. سيُنتج إنشاء ملف البيان خطأً إذا تم اكتشاف أكثر من واحدة.
* يتم تعيين `universalIdentifier` للدالة تلقائيًا كـ `postInstallLogicFunctionUniversalIdentifier` في بيان التطبيق أثناء الإنشاء — لست بحاجة إلى الإشارة إليه في `defineApplication()`.
* تم تعيين مهلة افتراضية إلى 300 ثانية (5 دقائق) للسماح بمهام الإعداد الأطول مثل تهيئة البيانات.
* لا تحتاج دوال ما بعد التثبيت إلى مُشغِّلات — حيث يستدعيها النظام الأساسي أثناء التثبيت أو يدويًا عبر `function:execute --postInstall`.
* لا تحتاج دوال ما بعد التثبيت إلى مشغّلات — حيث يستدعيها النظام الأساسي أثناء التثبيت أو يدويًا عبر `exec --postInstall`.
### حمولة مشغل المسار
@@ -416,15 +625,15 @@ const handler = async (event: RoutePayload) => {
يحتوي نوع `RoutePayload` على البنية التالية:
| الخاصية | النوع | الوصف |
| ---------------------------- | ------------------------------------- | --------------------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | رؤوس HTTP (فقط تلك المدرجة في `forwardedRequestHeaders`) |
| `queryStringParameters` | `Record<string, string \| undefined>` | معلمات سلسلة الاستعلام (تُضمّ القيم المتعددة باستخدام فواصل) |
| `pathParameters` | `Record<string, string \| undefined>` | معلمات المسار المستخرجة من نمط المسار (على سبيل المثال، `/users/:id` `{ id: '123' }`) |
| `المحتوى` | `object \| null` | جسم الطلب المُحلَّل (JSON) |
| `isBase64Encoded` | `قيمة منطقية` | ما إذا كان جسم الطلب مُرمَّزًا بترميز 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>` | معلمات سلسلة الاستعلام (تُضمّ القيم المتعددة باستخدام فواصل) |
| `pathParameters` | `Record<string, string \| undefined>` | معلمات المسار المستخرجة من نمط المسار (على سبيل المثال، `/users/:id` -> `{ id: '123' }`) |
| `المحتوى` | `object \| null` | جسم الطلب المُحلَّل (JSON) |
| `isBase64Encoded` | `قيمة منطقية` | ما إذا كان جسم الطلب مُرمَّزًا بترميز base64 |
| `requestContext.http.method` | `string` | طريقة HTTP (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `string` | المسار الخام للطلب |
### تمرير رؤوس HTTP
@@ -466,7 +675,7 @@ const handler = async (event: RoutePayload) => {
يمكنك إنشاء وظائف جديدة بطريقتين:
* **مُنشأ بالقالب**: شغّل `yarn twenty entity:add` واختر خيار إضافة دالة منطقية جديدة. يُولّد هذا ملفًا مبدئيًا مع معالج وتكوين.
* **مُنشأ بالقالب**: شغّل `yarn twenty add` واختر خيار إضافة وظيفة منطقية جديدة. يُولّد هذا ملفًا مبدئيًا مع معالج وتكوين.
* **يدوي**: أنشئ ملفًا جديدًا `*.logic-function.ts` واستخدم `defineLogicFunction()` مع اتباع النمط نفسه.
### تمييز دالة منطقية كأداة
@@ -478,7 +687,7 @@ const handler = async (event: RoutePayload) => {
```typescript
// src/logic-functions/enrich-company.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import { CoreApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const handler = async (params: { companyName: string; domain?: string }) => {
const client = new CoreApiClient();
@@ -567,7 +776,7 @@ export default defineFrontComponent({
يمكنك إنشاء مكوّنات أمامية جديدة بطريقتين:
* **مُنشأ بالقالب**: شغّل `yarn twenty entity:add` واختر خيار إضافة مكوّن أمامي جديد.
* **مُنشأ بالقالب**: شغّل `yarn twenty add` واختر خيار إضافة مكوّن أمامي جديد.
* **يدوي**: أنشئ ملفًا جديدًا `.tsx` واستخدم `defineFrontComponent()` مع اتباع النمط نفسه.
### المهارات
@@ -602,47 +811,122 @@ export default defineSkill({
يمكنك إنشاء مهارات جديدة بطريقتين:
* **مُنشأ بالقالب**: شغِّل `yarn twenty entity:add` واختر خيار إضافة مهارة جديدة.
* **مُنشأ بالقالب**: شغّل `yarn twenty add` واختر خيار إضافة مهارة جديدة.
* **يدوي**: أنشئ ملفًا جديدًا واستخدم `defineSkill()` مع اتباع النمط نفسه.
### عملاء مُولَّدون مضبوطو الأنواع
### عملاء واجهة برمجة التطبيقات ذات أنواع ثابتة (`twenty-client-sdk`)
يتم توليد عميلين مضبوطي الأنواع تلقائيًا بواسطة `yarn twenty dev` وتخزينهما في `node_modules/twenty-sdk/generated` استنادًا إلى مخطط مساحة العمل لديك:
توفر حزمة `twenty-client-sdk` عميلين لـ GraphQL ذوي أنواع ثابتة للتفاعل مع واجهة Twenty البرمجية من وظائفك المنطقية ومكوّنات الواجهة الأمامية:
* **`CoreApiClient`** — يُجري استعلامات إلى نقطة النهاية `/graphql` للحصول على بيانات مساحة العمل
* **`MetadataApiClient`** — يستعلم عن نقطة النهاية `/metadata` لتكوين مساحة العمل وتحميل الملفات.
| العميل | استيراد | نقطة النهاية | مُولَّد؟ |
| ------------------- | ---------------------------- | --------------------------------------------------- | -------------------------- |
| `CoreApiClient` | `twenty-client-sdk/core` | `/graphql` — بيانات مساحة العمل (السجلات، الكائنات) | نعم، في وقت التطوير/البناء |
| `MetadataApiClient` | `twenty-client-sdk/metadata` | `/metadata` — تكوين مساحة العمل، رفع الملفات | لا، يأتي مُجهزًا مسبقًا |
#### CoreApiClient
`CoreApiClient` هو العميل الرئيسي للاستعلام وتعديل بيانات مساحة العمل. يتم توليده من مخطط مساحة العمل الخاصة بك أثناء `yarn twenty dev` أو `yarn twenty build`، لذا فهو مكتوب الأنواع بالكامل ليتوافق مع كائناتك وحقولك.
```typescript
import { CoreApiClient, MetadataApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const client = new CoreApiClient();
const { me } = await client.query({ me: { id: true, displayName: true } });
const metadataClient = new MetadataApiClient();
const { currentWorkspace } = await metadataClient.query({ currentWorkspace: { id: true } });
// Query records
const { companies } = await client.query({
companies: {
edges: {
node: {
id: true,
name: true,
domainName: true,
},
},
},
});
// Create a record
const { createCompany } = await client.mutation({
createCompany: {
__args: {
data: {
name: 'Acme Corp',
},
},
id: true,
name: true,
},
});
```
يُعاد توليد كلا العميلين تلقائيًا بواسطة `yarn twenty dev` كلما تغيّرت كائناتك أو حقولك.
يستخدم العميل صياغة مجموعة اختيار: مرِّر `true` لتضمين حقل، واستخدم `__args` للوسيطات، وعشّش الكائنات للعلاقات. ستحصل على إكمال تلقائي كامل وفحص للأنواع يعتمد على مخطط مساحة العمل لديك.
#### بيانات الاعتماد وقت التشغيل في الدوال المنطقية
<Note>
**يتم توليد CoreApiClient في وقت التطوير/البناء.** إذا حاولت استخدامه دون تشغيل `yarn twenty dev` أو `yarn twenty build` أولًا، فسوف ينتج خطأ. تتم عملية التوليد تلقائيًا — حيث يقوم CLI بفحص مخطط GraphQL الخاص بمساحة العمل لديك، ويولّد عميلًا مكتوب الأنواع باستخدام `@genql/cli`، ويكتب المصادر المُولَّدة إلى `node_modules/twenty-client-sdk/dist/core/generated/`، ويستبدل الأجزاء الوهمية في `node_modules/twenty-client-sdk/dist/core.mjs` و`node_modules/twenty-client-sdk/dist/core.cjs`.
</Note>
عندما تعمل دالتك على Twenty، يقوم النظام الأساسي بحقن بيانات الاعتماد كمتغيرات بيئة قبل تنفيذ كودك:
#### استخدام CoreSchema للتعليقات التوضيحية للأنواع
* `TWENTY_API_URL`: عنوان URL الأساسي لواجهة Twenty البرمجية التي يستهدفها تطبيقك.
* `TWENTY_API_KEY`: مفتاح قصير العمر ذو نطاق يقتصر على الدور الافتراضي لوظيفة تطبيقك.
يوفّر `CoreSchema` أنواع TypeScript المطابقة لكائنات مساحة العمل لديك، وهو مفيد لتعيين أنواع حالة المكوّن أو معاملات الدوال:
الملاحظات:
```typescript
import { CoreApiClient, CoreSchema } from 'twenty-client-sdk/core';
import { useState } from 'react';
* لا تحتاج إلى تمرير عنوان URL أو مفتاح واجهة برمجة التطبيقات إلى العميل المُولَّد. يقوم بقراءة `TWENTY_API_URL` و`TWENTY_API_KEY` من process.env وقت التشغيل.
* تُحدَّد أذونات مفتاح واجهة برمجة التطبيقات بواسطة الدور المشار إليه في `application-config.ts` عبر `defaultRoleUniversalIdentifier`. هذا هو الدور الافتراضي الذي تستخدمه الدوال المنطقية في تطبيقك.
* يمكن للتطبيقات تعريف أدوار لاتباع مبدأ أقل الامتياز. امنح فقط الأذونات التي تحتاجها وظائفك، ثم وجّه `defaultRoleUniversalIdentifier` إلى المعرّف الشامل لذلك الدور.
const [company, setCompany] = useState<
Pick<CoreSchema.Company, 'id' | 'name'> | undefined
>(undefined);
const client = new CoreApiClient();
const result = await client.query({
company: {
__args: { filter: { position: { eq: 1 } } },
id: true,
name: true,
},
});
setCompany(result.company);
```
#### MetadataApiClient
يأتي `MetadataApiClient` مُجهّزًا مسبقًا مع SDK (لا حاجة للتوليد). يستعلم عن نقطة النهاية `/metadata` للحصول على تكوين مساحة العمل والتطبيقات ورفع الملفات:
```typescript
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
const metadataClient = new MetadataApiClient();
// Query workspace info
const { currentWorkspace } = await metadataClient.query({
currentWorkspace: { id: true, displayName: true },
});
// List installed applications
const { findManyApplications } = await metadataClient.query({
findManyApplications: {
id: true,
name: true,
version: true,
},
});
```
#### بيانات الاعتماد أثناء وقت التشغيل
عند تشغيل كودك على Twenty (وظائف منطقية أو مكوّنات أمامية)، يقوم النظام الأساسي بحقن بيانات الاعتماد كمتغيرات بيئية:
* `TWENTY_API_URL` — عنوان URL الأساسي لواجهة Twenty البرمجية
* `TWENTY_API_KEY` — مفتاح قصير العمر ذو نطاق يقتصر على الدور الافتراضي لوظيفة تطبيقك
لست **بحاجة** إلى تمرير هذه القيم إلى العملاء — فهي تُقرأ تلقائيًا من `process.env`. تُحدَّد أذونات مفتاح واجهة برمجة التطبيقات بواسطة الدور المشار إليه في `defaultRoleUniversalIdentifier` ضمن `application-config.ts`.
#### رفع الملفات
يتضمن `MetadataApiClient` المُولَّد طريقة `uploadFile` لإرفاق الملفات بالحقول من نوع ملف ضمن كائنات مساحة العمل الخاصة بك. نظرًا لأن عملاء GraphQL القياسيون لا يدعمون تحميل الملفات متعددة الأجزاء افتراضيًا، يوفر العميل هذه الطريقة المخصصة التي تطبق [مواصفة طلب GraphQL متعدد الأجزاء](https://github.com/jaydenseric/graphql-multipart-request-spec) في الخلفية.
يتضمن `MetadataApiClient` طريقة `uploadFile` لإرفاق الملفات بالحقول من نوع الملف. يطبّق [مواصفة طلب GraphQL متعددة الأجزاء](https://github.com/jaydenseric/graphql-multipart-request-spec):
```typescript
import { MetadataApiClient } from 'twenty-sdk/generated';
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
import * as fs from 'fs';
const metadataClient = new MetadataApiClient();
@@ -652,25 +936,14 @@ const fileBuffer = fs.readFileSync('./invoice.pdf');
const uploadedFile = await metadataClient.uploadFile(
fileBuffer, // file contents as a Buffer
'invoice.pdf', // filename
'application/pdf', // MIME type (defaults to 'application/octet-stream')
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universal identifier
'application/pdf', // MIME type
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universalIdentifier
);
console.log(uploadedFile);
// { id: '...', path: '...', size: 12345, createdAt: '...', url: 'https://...' }
```
توقيع الطريقة:
```typescript
uploadFile(
fileBuffer: Buffer,
filename: string,
contentType: string,
fieldMetadataUniversalIdentifier: string,
): Promise<{ id: string; path: string; size: number; createdAt: string; url: string }>
```
| المعلمة | النوع | الوصف |
| ---------------------------------- | -------- | ---------------------------------------------------------------------------------- |
| `fileBuffer` | `Buffer` | المحتوى الخام للملف |
@@ -680,8 +953,7 @@ uploadFile(
النقاط الرئيسية:
* تتوفر طريقة `uploadFile` على `MetadataApiClient` لأن عملية الـ mutation الخاصة بالرفع تُعالَج عبر نقطة النهاية `/metadata`.
* تستخدم `universalIdentifier` الخاص بالحقل (وليس المعرّف الخاص بمساحة العمل)، ليعمل كود الرفع لديك عبر أي مساحة عمل مُثبَّت فيها تطبيقك — بما يتماشى مع كيفية إشارة التطبيقات إلى الحقول في كل مكان آخر.
* يستخدم `universalIdentifier` الخاص بالحقل (وليس معرّفه الخاص بمساحة العمل)، بحيث يعمل كود الرفع لديك عبر أي مساحة عمل مُثبَّت فيها تطبيقك.
* العنوان `url` المُعاد هو عنوان URL موقّع يمكنك استخدامه للوصول إلى الملف المرفوع.
### مثال Hello World
@@ -49,7 +49,7 @@ npx create-twenty-app@latest my-app --minimal
```bash filename="Terminal"
# Add a new entity to your application (guided)
yarn twenty entity:add
yarn twenty add
# Watch your application's function logs
yarn twenty function:logs
@@ -123,7 +123,7 @@ my-twenty-app/
بشكل عام:
* **package.json**: يصرّح باسم التطبيق والإصدار والمحرّكات (Node 24+، Yarn 4)، ويضيف `twenty-sdk` بالإضافة إلى نص برمجي `twenty` يفوِّض إلى `twenty` CLI المحلي. شغِّل `yarn twenty help` لعرض جميع الأوامر المتاحة.
* **.gitignore**: يتجاهل العناصر الشائعة مثل `node_modules` و`.yarn` و`generated/` (عميل مضبوط الأنواع) و`dist/` و`build/` ومجلدات التغطية وملفات السجلات وملفات `.env*`.
* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `.twenty/`, `dist/`, `build/`, coverage folders, log files, and `.env*` files.
* **yarn.lock**، **.yarnrc.yml**، **.yarn/**: تقوم بقفل وتكوين حزمة أدوات Yarn 4 المستخدمة في المشروع.
* **.nvmrc**: يثبّت إصدار Node.js المتوقع للمشروع.
* **.oxlintrc.json** و **tsconfig.json**: يقدّمان إعدادات الفحص والتهيئة لـ TypeScript لمصادر TypeScript في تطبيقك.
@@ -167,8 +167,8 @@ export default defineObject({
ستضيف الأوامر اللاحقة مزيدًا من الملفات والمجلدات:
* سيقوم `yarn twenty dev` بتوليد عميلين API مضبوطي الأنواع تلقائيًا في `node_modules/twenty-sdk/generated`: `CoreApiClient` (لبيانات مساحة العمل عبر `/graphql`) و`MetadataApiClient` (لتكوين مساحة العمل وتحميل الملفات عبر `/metadata`).
* `yarn twenty entity:add` سيضيف ملفات تعريف الكيانات ضمن `src/` لكائناتك المخصّصة، والوظائف، ومكوّنات الواجهة الأمامية، والأدوار، والمهارات، وغير ذلك.
* `yarn twenty dev` will auto-generate the typed `CoreApiClient` (for workspace data via `/graphql`) into `node_modules/twenty-client-sdk/`. The `MetadataApiClient` (for workspace configuration and file uploads via `/metadata`) ships pre-built and is available immediately. Import them from `twenty-client-sdk/core` and `twenty-client-sdk/metadata` respectively.
* `yarn twenty add` will add entity definition files under `src/` for your custom objects, functions, front components, roles, skills, and more.
## المصادقة
@@ -12,7 +12,25 @@ description: وزّع تطبيق Twenty الخاص بك على سوق Twenty أ
بمجرد أن يكون تطبيقك [مبنيًا ومختبرًا محليًا](/l/ar/developers/extend/apps/building)، لديك مساران لتوزيعه:
* **النشر على npm** — أدرج تطبيقك في سوق Twenty ليتسنى لأي مساحة عمل اكتشافه وتثبيته.
* **إرسال tarball** — انشر تطبيقك إلى خادم Twenty معيّن للاستخدام الداخلي من دون جعله متاحًا للعامة.
* **نشر أرشيف tar** — ارفع تطبيقك مباشرةً إلى خادم Twenty محدد للاستخدام الداخلي أو الخاص.
كلا المسارين يبدآن من نفس خطوة **build**.
## بناء تطبيقك
يقوم الأمر `build` بتجميع مصادر TypeScript الخاصة بك، وتحويل دوال المنطق ومكوّنات الواجهة الأمامية، وإنشاء ملف `manifest.json` يصف محتويات تطبيقك:
```bash filename="Terminal"
yarn twenty build
```
يتم حفظ المخرجات في `.twenty/output/`. This directory contains everything needed for distribution: compiled code, assets, the manifest, and a copy of your `package.json`.
To also create a `.tgz` tarball (used by the deploy command internally, or for manual distribution):
```bash filename="Terminal"
yarn twenty build --tarball
```
## النشر على npm
@@ -21,29 +39,72 @@ description: وزّع تطبيق Twenty الخاص بك على سوق Twenty أ
### المتطلبات
* حساب على [npm](https://www.npmjs.com)
* يجب أن يستخدم اسم الحزمة البادئة `twenty-app-` (مثلًا، `twenty-app-postcard-sender`)
* The `twenty-app` keyword **must** be listed in your `package.json` `keywords` array
### Adding the required keyword
The Twenty marketplace discovers apps by searching the npm registry for packages with the `twenty-app` keyword. Add it to your `package.json`:
```json filename="package.json"
{
"name": "twenty-app-postcard-sender",
"version": "1.0.0",
"keywords": ["twenty-app"],
...
}
```
<Note>
The marketplace searches for `keywords:twenty-app` on the npm registry. Without this keyword, your package won't appear in the marketplace even if it has the `twenty-app-` name prefix.
</Note>
### الخطوات
1. **قم ببناء تطبيقك** — تقوم أداة CLI بتجميع مصادر TypeScript الخاصة بك وإنشاء ملف بيان التطبيق:
1. **Build your app:**
```bash filename="Terminal"
yarn twenty build
```
2. **النشر على npm** — ادفع الحزمة المبنية إلى سجل npm:
2. **Publish to npm:**
```bash filename="Terminal"
npx twenty publish
yarn twenty publish
```
### الاكتشاف التلقائي
This runs `npm publish` from the `.twenty/output/` directory.
تُكتشف الحِزم التي تحمل البادئة `twenty-app-` تلقائيًا بواسطة فهرس سوق Twenty. بعد نشره، سيظهر تطبيقك في السوق خلال بضع دقائق — من دون الحاجة إلى تسجيل يدوي أو موافقة يدوية.
To publish under a specific dist-tag (e.g., `beta` or `next`):
```bash filename="Terminal"
yarn twenty publish --tag beta
```
### How marketplace discovery works
The Twenty server syncs its marketplace catalog from the npm registry **every hour**:
1. It searches for all npm packages with the `keywords:twenty-app` keyword
2. For each package, it fetches the `manifest.json` from the npm CDN
3. The app's metadata (name, description, author, logo, screenshots, category) is extracted from the manifest and displayed in the marketplace
After publishing, your app can take up to one hour to appear in the marketplace. To trigger the sync immediately instead of waiting for the next hourly run:
```bash filename="Terminal"
yarn twenty catalog-sync
```
To target a specific remote:
```bash filename="Terminal"
yarn twenty catalog-sync -r production
```
The metadata shown in the marketplace comes from your `defineApplication()` call in your app source code — fields like `displayName`, `description`, `author`, `category`, `logoUrl`, `screenshots`, `aboutDescription`, `websiteUrl`, and `termsUrl`.
### النشر عبر CI
يتضمن المشروع المُولَّد سير عمل GitHub Actions يقوم بالنشر عند كل إصدار. يشغِّل `app:build`، ثم ينفِّذ `npm publish --provenance` من مخرجات البناء:
يتضمن المشروع المُولَّد سير عمل GitHub Actions يقوم بالنشر عند كل إصدار:
```yaml filename=".github/workflows/publish.yml"
name: Publish
@@ -72,48 +133,117 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
```
بالنسبة لأنظمة CI الأخرى (GitLab CI، CircleCI، إلخ)، تنطبق الأوامر الثلاثة نفسها: `yarn install`، ثم `npx twenty build`، ثم `npm publish` من `.twenty/output`.
For other CI systems (GitLab CI, CircleCI, etc.), the same three commands apply: `yarn install`, `yarn twenty build`, then `npm publish` from `.twenty/output`.
<Tip>
**npm provenance** اختياري ولكنه موصى به. يضيف النشر باستخدام `--provenance` شارة ثقة إلى إدراجك على npm، مما يتيح للمستخدمين التحقق من أن الحزمة تم بناؤها من التزام محدد ضمن خط أنابيب CI عام. راجع [وثائق npm provenance](https://docs.npmjs.com/generating-provenance-statements) للحصول على تعليمات الإعداد.
</Tip>
## التوزيع الداخلي
## Deploying to a server (tarball)
بالنسبة للتطبيقات التي لا تريد إتاحتها للعامة — مثل الأدوات المملوكة، أو عمليات التكامل الخاصة بالمؤسسات فقط، أو الإصدارات التجريبية — يمكنك إرسال tarball مباشرةً إلى خادم Twenty.
For apps you don't want publicly available — proprietary tools, enterprise-only integrations, or experimental builds — you can deploy a tarball directly to a Twenty server.
### إرسال tarball
### المتطلبات الأساسية
قم ببناء تطبيقك وانشره إلى خادم محدد في خطوة واحدة:
Before deploying, you need a configured remote pointing to the target server. Remotes store the server URL and authentication credentials locally in `~/.twenty/config.json`.
Add a remote:
```bash filename="Terminal"
npx twenty publish --server <server-url>
yarn twenty remote add --url https://your-twenty-server.com --as production
```
يمكن لأي مساحة عمل على ذلك الخادم بعدها تثبيت التطبيق وترقيته من صفحة الإعدادات **التطبيقات**.
For a local development server:
```bash filename="Terminal"
yarn twenty remote add --local --as local
```
You can also authenticate with an API key for non-interactive environments:
```bash filename="Terminal"
yarn twenty remote add --url https://your-twenty-server.com --token <api-key> --as production
```
Manage your remotes:
```bash filename="Terminal"
yarn twenty remote list # List all configured remotes
yarn twenty remote switch prod # Set the default remote
yarn twenty remote status # Show active remote and auth status
yarn twenty remote remove old # Remove a remote
```
### Deploying
Build and upload your app to the server in one step:
```bash filename="Terminal"
yarn twenty deploy
```
This builds the app with `--tarball`, then uploads the tarball to the default remote via a GraphQL multipart upload.
To deploy to a specific remote:
```bash filename="Terminal"
yarn twenty deploy -r production
```
### Sharing a deployed app
Tarball apps are not listed in the public marketplace, so other workspaces on the same server won't discover them by browsing. To share a deployed app:
1. Go to **Settings > Applications > Registrations** and open your app
2. In the **Distribution** tab, click **Copy share link**
3. Share this link with users on other workspaces — it takes them directly to the app's install page
The share link uses the server's base URL (without any workspace subdomain) so it works for any workspace on the server.
### إدارة الإصدارات
لطرح تحديث:
1. ارفع قيمة الحقل `version` في ملف `package.json`
2. أرسل tarball جديدًا باستخدام `npx twenty publish --server <server-url>`
3. سترى مساحات العمل على ذلك الخادم الترقية متاحة في إعداداتها
2. Run `yarn twenty deploy` (or `yarn twenty deploy -r production`)
3. Workspaces that have the app installed will see the upgrade available in their settings
<Note>
التطبيقات الداخلية مقتصرة على الخادم الذي تُرسل إليه. لن تظهر في السوق العام ولا يمكن لمساحات العمل على خوادم أخرى تثبيتها.
</Note>
## Installing apps
## فئات التطبيقات
Once an app is published (npm) or deployed (tarball), workspaces install it through the UI:
```bash filename="Terminal"
yarn twenty install
```
Or from the **Settings > Applications** page in the Twenty UI, where both marketplace and tarball-deployed apps can be browsed and installed.
## App distribution categories
تُنظِّم Twenty التطبيقات في ثلاث فئات استنادًا إلى طريقة توزيعها:
| الفئة | كيف يعمل | مرئي في سوق Twenty؟ |
| ----------- | ---------------------------------------------------------------------------------------------------- | ------------------- |
| **التطوير** | تطبيقات وضع التطوير المحلي التي تعمل عبر `yarn twenty dev`. تُستخدم للبناء والاختبار. | لا |
| **منشور** | تطبيقات منشورة على npm مع البادئة `twenty-app-`. مدرجة في سوق Twenty لتتمكن أي مساحة عمل من تثبيتها. | نعم |
| **داخلي** | تطبيقات منشورة عبر tarball إلى خادم محدد. متاحة فقط لمساحات العمل على ذلك الخادم. | لا |
| الفئة | كيف يعمل | مرئي في سوق Twenty؟ |
| ---------------------- | -------------------------------------------------------------------------------------------------------- | ------------------- |
| **التطوير** | تطبيقات وضع التطوير المحلي التي تعمل عبر `yarn twenty dev`. تُستخدم للبناء والاختبار. | لا |
| **Published (npm)** | Apps published to npm with the `twenty-app` keyword. مدرجة في سوق Twenty لتتمكن أي مساحة عمل من تثبيتها. | نعم |
| **Internal (tarball)** | تطبيقات منشورة عبر tarball إلى خادم محدد. Available only to workspaces on that server via a share link. | لا |
<Tip>
ابدأ في وضع **التطوير** أثناء بناء تطبيقك. عندما يصبح جاهزًا، اختر **منشور** (npm) للتوزيع الواسع أو **داخلي** (tarball) للنشر الخاص.
</Tip>
## CLI reference
| أمر | الوصف | Key flags |
| --------------------------- | ---------------------------------------------- | --------------------------------------------------- |
| `yarn twenty build` | Compile app and generate manifest | `--tarball` — also create a `.tgz` package |
| `yarn twenty publish` | Build and publish to npm | `--tag <tag>` — npm dist-tag (e.g., `beta`, `next`) |
| `yarn twenty deploy` | Build and upload tarball to a server | `-r, --remote <name>` — target remote |
| `yarn twenty catalog-sync` | Trigger marketplace catalog sync on the server | `-r, --remote <name>` — target remote |
| `yarn twenty install` | Install a deployed app on a workspace | `-r, --remote <name>` — target remote |
| `yarn twenty dev` | Watch and sync local changes | Uses default remote |
| `yarn twenty remote add` | Add a server connection | `--url`, `--token`, `--as`, `--local`, `--port` |
| `yarn twenty remote list` | List configured remotes | — |
| `yarn twenty remote switch` | Set default remote | — |
| `yarn twenty remote status` | Show connection status | — |
| `yarn twenty remote remove` | Remove a remote | — |
@@ -15,19 +15,21 @@ twenty-sdk poskytuje typované stavební bloky a pomocné funkce, které použí
SDK poskytuje pomocné funkce pro definování entit vaší aplikace. Jak je popsáno v [Detekce entit](/l/cs/developers/extend/apps/getting-started#entity-detection), musíte použít `export default define<Entity>({...})`, aby byly vaše entity detekovány:
| Funkce | Účel |
| -------------------------------- | ----------------------------------------------------------------- |
| `defineApplication` | Nakonfigurujte metadata aplikace (povinné, jedno na aplikaci) |
| `defineObject` | Definice vlastních objektů s poli |
| `defineLogicFunction` | Definice logických funkcí s obslužnými funkcemi |
| `definePreInstallLogicFunction` | Definujte předinstalační logickou funkci (jedna na aplikaci) |
| `definePostInstallLogicFunction` | Definujte postinstalační logickou funkci (jedna na aplikaci) |
| `defineFrontComponent` | Definujte frontendové komponenty pro vlastní uživatelské rozhraní |
| `defineRole` | Konfigurace oprávnění rolí a přístupu k objektům |
| `defineField` | Rozšiřte existující objekty o další pole |
| `defineView` | Definujte uložená zobrazení pro objekty |
| `defineNavigationMenuItem` | Definujte odkazy postranní navigace |
| `defineSkill` | Definujte dovednosti agenta AI |
| Funkce | Účel |
| -------------------------------- | ------------------------------------------------------------------------------- |
| `defineApplication` | Nakonfigurujte metadata aplikace (povinné, jedno na aplikaci) |
| `defineObject` | Definice vlastních objektů s poli |
| `defineField` | Rozšiřte existující objekty o další pole nebo definujte samostatná relační pole |
| `defineLogicFunction` | Definice logických funkcí s obslužnými funkcemi |
| `definePreInstallLogicFunction` | Definujte předinstalační logickou funkci (jedna na aplikaci) |
| `definePostInstallLogicFunction` | Definujte postinstalační logickou funkci (jedna na aplikaci) |
| `defineFrontComponent` | Definujte frontendové komponenty pro vlastní uživatelské rozhraní |
| `defineRole` | Konfigurace oprávnění rolí a přístupu k objektům |
| `defineView` | Definujte uložená zobrazení pro objekty |
| `defineNavigationMenuItem` | Definujte odkazy postranní navigace |
| `defineSkill` | Definujte dovednosti agenta AI |
| `defineAgent` | Definujte agenty AI |
| `definePageLayout` | Definujte vlastní rozvržení stránek |
Tyto funkce validují vaši konfiguraci v době sestavení a poskytují automatické doplňování v IDE a typovou bezpečnost.
@@ -36,7 +38,7 @@ Tyto funkce validují vaši konfiguraci v době sestavení a poskytují automati
Vlastní objekty popisují jak schéma, tak chování záznamů ve vašem pracovním prostoru. K definování objektů s vestavěnou validací použijte `defineObject()`:
```typescript
// src/app/postCard.object.ts
// src/objects/postCard.object.ts
import { defineObject, FieldType } from 'twenty-sdk';
enum PostCardStatus {
@@ -110,7 +112,7 @@ Hlavní body:
* Hodnota `universalIdentifier` musí být jedinečná a stabilní napříč nasazeními.
* Každé pole vyžaduje `name`, `type`, `label` a svůj vlastní stabilní `universalIdentifier`.
* Pole `fields` je volitelné — objekty můžete definovat i bez vlastních polí.
* Nové objekty můžete vygenerovat pomocí `yarn twenty entity:add`, který vás provede pojmenováním, poli a vztahy.
* Nové objekty můžete vygenerovat pomocí `yarn twenty add`, který vás provede pojmenováním, poli a vztahy.
<Note>
**Základní pole jsou vytvořena automaticky.** Když definujete vlastní objekt, Twenty automaticky přidá standardní pole
@@ -120,6 +122,197 @@ Výchozí pole můžete přepsat definováním pole se stejným názvem v poli `
ale to se nedoporučuje.
</Note>
### Definování polí u existujících objektů
Pomocí `defineField()` přidejte pole k objektům, které nevlastníte — například ke standardním objektům Twenty (Person, Company atd.). nebo k objektům z jiných aplikací. Na rozdíl od inline polí v `defineObject()` vyžadují samostatná pole `objectUniversalIdentifier` k určení, který objekt rozšiřují:
```typescript
// src/fields/company-loyalty-tier.field.ts
import { defineField, FieldType } from 'twenty-sdk';
export default defineField({
universalIdentifier: 'f2a1b3c4-d5e6-7890-abcd-ef1234567890',
objectUniversalIdentifier: '701aecb9-eb1c-4d84-9d94-b954b231b64b', // Company object
name: 'loyaltyTier',
type: FieldType.SELECT,
label: 'Loyalty Tier',
icon: 'IconStar',
options: [
{ value: 'BRONZE', label: 'Bronze', position: 0, color: 'orange' },
{ value: 'SILVER', label: 'Silver', position: 1, color: 'gray' },
{ value: 'GOLD', label: 'Gold', position: 2, color: 'yellow' },
],
});
```
Hlavní body:
* `objectUniversalIdentifier` identifikuje cílový objekt. Pro standardní objekty použijte `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS` exportovaný z `twenty-sdk`.
* Při definování polí inline v `defineObject()` `objectUniversalIdentifier` nepotřebujete — dědí se z nadřazeného objektu.
* `defineField()` je jediný způsob, jak přidat pole k objektům, které jste nevytvořili pomocí `defineObject()`.
### Vztahy
Relace propojují objekty. Ve Twenty jsou relace vždy obousměrné — definujete obě strany a každá strana odkazuje na tu druhou.
Existují dva typy relací:
| Typ vztahu | Popis | Má cizí klíč? |
| ------------- | --------------------------------------------------------------------- | ---------------------- |
| `MANY_TO_ONE` | Mnoho záznamů tohoto objektu ukazuje na jeden záznam cílového objektu | Ano (`joinColumnName`) |
| `ONE_TO_MANY` | Jeden záznam tohoto objektu má mnoho záznamů cílového objektu | Ne (inverzní strana) |
#### Jak fungují relace
Každá relace vyžaduje dvě pole, která na sebe vzájemně odkazují:
1. Strana MANY_TO_ONE — je na objektu, který drží cizí klíč
2. Strana ONE_TO_MANY — je na objektu, který vlastní kolekci
Obě pole používají `FieldType.RELATION` a vzájemně se odkazují prostřednictvím `relationTargetFieldMetadataUniversalIdentifier`.
#### Příklad: Pohlednice má mnoho příjemců
Předpokládejme, že `PostCard` lze odeslat mnoha záznamům `PostCardRecipient`. Každý příjemce náleží přesně jedné pohlednici.
**Krok 1: Definujte stranu ONE_TO_MANY na PostCard** (strana "one"):
```typescript
// src/fields/post-card-recipients-on-post-card.field.ts
import { defineField, FieldType, RelationType } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_RECIPIENTS_FIELD_ID = 'a1111111-1111-1111-1111-111111111111';
// Import from the other side
import { POST_CARD_FIELD_ID } from './post-card-on-post-card-recipient.field';
export default defineField({
universalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCardRecipients',
label: 'Post Card Recipients',
icon: 'IconUsers',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_FIELD_ID,
universalSettings: {
relationType: RelationType.ONE_TO_MANY,
},
});
```
**Krok 2: Definujte stranu MANY_TO_ONE na PostCardRecipient** (strana "many" — drží cizí klíč):
```typescript
// src/fields/post-card-on-post-card-recipient.field.ts
import { defineField, FieldType, RelationType, OnDeleteAction } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_FIELD_ID = 'b2222222-2222-2222-2222-222222222222';
// Import from the other side
import { POST_CARD_RECIPIENTS_FIELD_ID } from './post-card-recipients-on-post-card.field';
export default defineField({
universalIdentifier: POST_CARD_FIELD_ID,
objectUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
icon: 'IconMail',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
});
```
<Note>
**Cyklické importy:** Obě relační pole odkazují na `universalIdentifier` toho druhého. Abyste předešli problémům s cyklickými importy, exportujte ID polí jako pojmenované konstanty z každého souboru a v druhém souboru je importujte. Build systém je vyřeší v době kompilace.
</Note>
#### Vazby na standardní objekty
Chcete-li vytvořit relaci s vestavěným objektem Twenty (Person, Company atd.), použijte `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS`:
```typescript
// src/fields/person-on-self-hosting-user.field.ts
import {
defineField,
FieldType,
RelationType,
OnDeleteAction,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk';
import { SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER } from '../objects/self-hosting-user.object';
export const PERSON_FIELD_ID = 'c3333333-3333-3333-3333-333333333333';
export const SELF_HOSTING_USER_REVERSE_FIELD_ID = 'd4444444-4444-4444-4444-444444444444';
export default defineField({
universalIdentifier: PERSON_FIELD_ID,
objectUniversalIdentifier: SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'person',
label: 'Person',
description: 'Person matching with the self hosting user',
isNullable: true,
relationTargetObjectMetadataUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
relationTargetFieldMetadataUniversalIdentifier: SELF_HOSTING_USER_REVERSE_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.SET_NULL,
joinColumnName: 'personId',
},
});
```
#### Vlastnosti relačních polí
| Vlastnost | Povinné | Popis |
| ------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------- |
| `type` | Ano | Musí být `FieldType.RELATION` |
| `relationTargetObjectMetadataUniversalIdentifier` | Ano | `universalIdentifier` cílového objektu |
| `relationTargetFieldMetadataUniversalIdentifier` | Ano | `universalIdentifier` odpovídajícího pole na cílovém objektu |
| `universalSettings.relationType` | Ano | `RelationType.MANY_TO_ONE` nebo `RelationType.ONE_TO_MANY` |
| `universalSettings.onDelete` | Pouze MANY_TO_ONE | Co se stane, když je smazán odkazovaný záznam: `CASCADE`, `SET_NULL`, `RESTRICT` nebo `NO_ACTION` |
| `universalSettings.joinColumnName` | Pouze MANY_TO_ONE | Název databázového sloupce pro cizí klíč (např. `postCardId`) |
#### Vložená relační pole v defineObject
Relační pole můžete také definovat přímo uvnitř `defineObject()`. V takovém případě vynechejte `objectUniversalIdentifier` — dědí se z nadřazeného objektu:
```typescript
export default defineObject({
universalIdentifier: '...',
nameSingular: 'postCardRecipient',
// ...
fields: [
{
universalIdentifier: POST_CARD_FIELD_ID,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
},
// ... other fields
],
});
```
### Konfigurace aplikace (application-config.ts)
Každá aplikace má jeden soubor `application-config.ts`, který popisuje:
@@ -161,6 +354,22 @@ Poznámky:
* `defaultRoleUniversalIdentifier` se musí shodovat se souborem role (viz níže).
* Předinstalační a postinstalační funkce jsou při sestavování manifestu automaticky detekovány. Viz [Předinstalační funkce](#pre-install-functions) a [Postinstalační funkce](#post-install-functions).
#### Metadata Marketplace
Pokud plánujete [zveřejnit svou aplikaci](/l/cs/developers/extend/apps/publishing), tato volitelná pole určují, jak se vaše aplikace zobrazuje na Marketplace:
| Pole | Popis |
| ------------------ | -------------------------------------------------------- |
| `author` | Jméno autora nebo název společnosti |
| `category` | Kategorie aplikace pro filtrování na Marketplace |
| `logoUrl` | Cesta k logu vaší aplikace (relativně k `./assets/`) |
| `screenshots` | Pole cest ke snímkům obrazovky (relativně k `./assets/`) |
| `aboutDescription` | Delší popis v Markdownu pro kartu "O aplikaci" |
| `websiteUrl` | Odkaz na váš web |
| `termsUrl` | Odkaz na Podmínky služby |
| `emailSupport` | E-mailová adresa podpory |
| `issueReportUrl` | Odkaz na nástroj pro sledování problémů |
#### Role a oprávnění
Aplikace mohou definovat role, které zapouzdřují oprávnění k objektům a akcím ve vašem pracovním prostoru. Pole `defaultRoleUniversalIdentifier` v `application-config.ts` určuje výchozí roli používanou logickými funkcemi vaší aplikace.
@@ -220,7 +429,7 @@ Na `universalIdentifier` této role se poté odkazuje v `application-config.ts`
Poznámky:
* Začněte rolí vytvořenou scaffolderem a postupně ji omezujte podle principu nejmenších oprávnění.
* Začněte vygenerovanou rolí a postupně ji omezujte podle principu nejmenších oprávnění.
* Nahraďte `objectPermissions` a `fieldPermissions` objekty/poli, která vaše funkce potřebují.
* `permissionFlags` řídí přístup k schopnostem na úrovni platformy. Držte je na minimu; přidávejte pouze to, co potřebujete.
* Podívejte se na funkční příklad v aplikaci Hello World: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
@@ -230,7 +439,7 @@ Poznámky:
Každý soubor funkce používá `defineLogicFunction()` k exportu konfigurace s obslužnou funkcí (handlerem) a volitelnými spouštěči.
```typescript
// src/app/createPostCard.logic-function.ts
// src/logic-functions/createPostCard.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import type { DatabaseEventPayload, ObjectRecordCreateEvent, CronPayload, RoutePayload } from 'twenty-sdk';
import { CoreApiClient, type Person } from 'twenty-sdk/generated';
@@ -324,7 +533,7 @@ export default definePreInstallLogicFunction({
Předinstalační funkci můžete také kdykoli spustit ručně pomocí CLI:
```bash filename="Terminal"
yarn twenty function:execute --preInstall
yarn twenty exec --preInstall
```
Hlavní body:
@@ -334,7 +543,7 @@ Hlavní body:
* Na jednu aplikaci je povolena pouze jedna předinstalační funkce. Sestavení manifestu skončí chybou, pokud je zjištěna více než jedna.
* Identifikátor `universalIdentifier` funkce se během sestavení automaticky nastaví v manifestu aplikace jako `preInstallLogicFunctionUniversalIdentifier` — není potřeba jej uvádět v `defineApplication()`.
* Výchozí časový limit je nastaven na 300 sekund (5 minut), aby umožnil delší přípravné úlohy.
* Předinstalační funkce nepotřebují spouštěče — platforma je vyvolává před instalací nebo je lze spustit ručně pomocí `function:execute --preInstall`.
* Předinstalační funkce nepotřebují spouštěče — platforma je vyvolává před instalací nebo je lze spustit ručně pomocí `exec --preInstall`.
### Postinstalační funkce
@@ -362,7 +571,7 @@ export default definePostInstallLogicFunction({
Postinstalační funkci můžete také kdykoli spustit ručně pomocí CLI:
```bash filename="Terminal"
yarn twenty function:execute --postInstall
yarn twenty exec --postInstall
```
Hlavní body:
@@ -372,7 +581,7 @@ Hlavní body:
* Na jednu aplikaci je povolena pouze jedna postinstalační funkce. Sestavení manifestu skončí chybou, pokud je zjištěna více než jedna.
* Identifikátor `universalIdentifier` funkce se během sestavení automaticky nastaví v manifestu aplikace jako `postInstallLogicFunctionUniversalIdentifier` — není potřeba jej uvádět v `defineApplication()`.
* Výchozí časový limit je nastaven na 300 sekund (5 minut), aby umožnil delší úlohy nastavení, jako je naplnění daty.
* Postinstalační funkce nepotřebují spouštěče — jsou spouštěny platformou během instalace nebo ručně pomocí `function:execute --postInstall`.
* Postinstalační funkce nepotřebují spouštěče — jsou spouštěny platformou během instalace nebo ručně pomocí `exec --postInstall`.
### Payload spouštěče trasy
@@ -416,15 +625,15 @@ const handler = async (event: RoutePayload) => {
Typ `RoutePayload` má následující strukturu:
| Vlastnost | Typ | Popis |
| ---------------------------- | ------------------------------------- | --------------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | Záhlaví HTTP (pouze ta uvedená v `forwardedRequestHeaders`) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Parametry query stringu (více hodnot spojených čárkami) |
| `pathParameters` | `Record<string, string \| undefined>` | Parametry cesty extrahované ze vzoru trasy (např. `/users/:id` `{ id: '123' }`) |
| `body` | `object \| null` | Parsované tělo požadavku (JSON) |
| `isBase64Encoded` | `boolean` | Zda je tělo kódováno base64 |
| `requestContext.http.method` | `string` | Metoda HTTP (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `string` | Nezpracovaná cesta požadavku |
| Vlastnost | Typ | Popis |
| ---------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | Záhlaví HTTP (pouze ta uvedená v `forwardedRequestHeaders`) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Parametry query stringu (více hodnot spojených čárkami) |
| `pathParameters` | `Record<string, string \| undefined>` | Parametry cesty extrahované ze vzoru trasy (např. `/users/:id` -> `{ id: '123' }`) |
| `body` | `object \| null` | Parsované tělo požadavku (JSON) |
| `isBase64Encoded` | `boolean` | Zda je tělo kódováno base64 |
| `requestContext.http.method` | `string` | Metoda HTTP (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `string` | Nezpracovaná cesta požadavku |
### Přeposílání záhlaví HTTP
@@ -466,7 +675,7 @@ const handler = async (event: RoutePayload) => {
Nové funkce můžete vytvářet dvěma způsoby:
* **Vygenerované**: Spusťte `yarn twenty entity:add` a zvolte možnost přidat novou logickou funkci. Tím se vygeneruje startovací soubor s obslužnou funkcí a konfigurací.
* **Vygenerované**: Spusťte `yarn twenty add` a zvolte možnost přidat novou logickou funkci. Tím se vygeneruje startovací soubor s obslužnou funkcí a konfigurací.
* **Ruční**: Vytvořte nový soubor `*.logic-function.ts` a použijte `defineLogicFunction()` podle stejného vzoru.
### Označení logické funkce jako nástroje
@@ -478,7 +687,7 @@ Chcete-li označit logickou funkci jako nástroj, nastavte `isTool: true` a posk
```typescript
// src/logic-functions/enrich-company.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import { CoreApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const handler = async (params: { companyName: string; domain?: string }) => {
const client = new CoreApiClient();
@@ -567,7 +776,7 @@ Hlavní body:
Nové frontendové komponenty můžete vytvořit dvěma způsoby:
* **Vygenerované**: Spusťte `yarn twenty entity:add` a zvolte možnost přidat novou frontendovou komponentu.
* **Vygenerované**: Spusťte `yarn twenty add` a zvolte možnost přidat novou frontendovou komponentu.
* **Ruční**: Vytvořte nový soubor `.tsx` a použijte `defineFrontComponent()`, podle stejného vzoru.
### Dovednosti
@@ -602,47 +811,122 @@ Hlavní body:
Nové dovednosti můžete vytvářet dvěma způsoby:
* **Vygenerované**: Spusťte `yarn twenty entity:add` a zvolte možnost přidat novou dovednost.
* **Vygenerované**: Spusťte `yarn twenty add` a zvolte možnost přidat novou dovednost.
* **Ruční**: Vytvořte nový soubor a použijte `defineSkill()` podle stejného vzoru.
### Generované typované klienty
### Typovaní klienti API (`twenty-client-sdk`)
Dva typovaní klienti jsou automaticky generováni pomocí `yarn twenty dev` a ukládají se do `node_modules/twenty-sdk/generated` podle schématu vašeho pracovního prostoru:
Balíček `twenty-client-sdk` poskytuje dva typované klienty GraphQL pro práci s Twenty API z vašich logických funkcí a frontendových komponent:
* **`CoreApiClient`** — provádí dotazy na endpoint `/graphql` za účelem získání dat pracovního prostoru
* **`MetadataApiClient`** — odesílá dotazy na endpoint `/metadata` pro konfiguraci pracovního prostoru a nahrávání souborů
| Klient | Importovat | Koncový bod | Generováno? |
| ------------------- | ---------------------------- | ---------------------------------------------------------------- | ------------------------------ |
| `CoreApiClient` | `twenty-client-sdk/core` | `/graphql` — data pracovního prostoru (záznamy, objekty) | Ano, při vývoji/sestavení |
| `MetadataApiClient` | `twenty-client-sdk/metadata` | `/metadata` — konfigurace pracovního prostoru, nahrávání souborů | Ne, dodává se předem sestavený |
#### CoreApiClient
`CoreApiClient` je hlavní klient pro dotazování a mutace dat pracovního prostoru. Generuje se z vašeho schématu pracovního prostoru během `yarn twenty dev` nebo `yarn twenty build`, takže je plně typovaný tak, aby odpovídal vašim objektům a polím.
```typescript
import { CoreApiClient, MetadataApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const client = new CoreApiClient();
const { me } = await client.query({ me: { id: true, displayName: true } });
const metadataClient = new MetadataApiClient();
const { currentWorkspace } = await metadataClient.query({ currentWorkspace: { id: true } });
// Query records
const { companies } = await client.query({
companies: {
edges: {
node: {
id: true,
name: true,
domainName: true,
},
},
},
});
// Create a record
const { createCompany } = await client.mutation({
createCompany: {
__args: {
data: {
name: 'Acme Corp',
},
},
id: true,
name: true,
},
});
```
Oba klienti se automaticky znovu generují pomocí `yarn twenty dev` kdykoli se změní vaše objekty nebo pole.
Klient používá syntaxi výběrové sady (selection-set): předáním `true` zahrnete pole, pro argumenty použijte `__args` a pro relace vnořujte objekty. Získáte plné automatické doplňování a kontrolu typů založené na schématu vašeho pracovního prostoru.
#### Běhové přihlašovací údaje v logických funkcích
<Note>
**CoreApiClient je generován při vývoji/sestavení.** Pokud se jej pokusíte použít bez předchozího spuštění `yarn twenty dev` nebo `yarn twenty build`, vyvolá chybu. Generování probíhá automaticky — CLI prozkoumá GraphQL schéma vašeho pracovního prostoru, vygeneruje typovaného klienta pomocí `@genql/cli`, zapíše vygenerované zdrojové soubory do `node_modules/twenty-client-sdk/dist/core/generated/` a nahradí zástupné soubory v `node_modules/twenty-client-sdk/dist/core.mjs` a `node_modules/twenty-client-sdk/dist/core.cjs`.
</Note>
Když vaše funkce běží na Twenty, platforma před spuštěním kódu vloží přihlašovací údaje jako proměnné prostředí:
#### Použití CoreSchema pro anotace typů
* `TWENTY_API_URL`: Základní URL Twenty API, na které vaše aplikace cílí.
* `TWENTY_API_KEY`: Krátkodobý klíč s rozsahem omezeným na výchozí roli funkce vaší aplikace.
`CoreSchema` poskytuje typy TypeScriptu odpovídající objektům vašeho pracovního prostoru; je užitečný pro typování stavu komponent nebo parametrů funkcí:
Poznámky:
```typescript
import { CoreApiClient, CoreSchema } from 'twenty-client-sdk/core';
import { useState } from 'react';
* Není nutné předávat URL ani klíč API vygenerovanému klientovi. Za běhu čte `TWENTY_API_URL` a `TWENTY_API_KEY` z process.env.
* Oprávnění klíče API jsou určena rolí odkazovanou ve vašem `application-config.ts` prostřednictvím `defaultRoleUniversalIdentifier`. Toto je výchozí role používaná logickými funkcemi vaší aplikace.
* Aplikace mohou definovat role podle principu nejmenších oprávnění. Udělte pouze oprávnění, která vaše funkce potřebují, a poté nastavte `defaultRoleUniversalIdentifier` na univerzální identifikátor této role.
const [company, setCompany] = useState<
Pick<CoreSchema.Company, 'id' | 'name'> | undefined
>(undefined);
const client = new CoreApiClient();
const result = await client.query({
company: {
__args: { filter: { position: { eq: 1 } } },
id: true,
name: true,
},
});
setCompany(result.company);
```
#### MetadataApiClient
`MetadataApiClient` je součástí SDK již předem sestavený (není vyžadována žádná generace). Odesílá dotazy na endpoint `/metadata` pro konfiguraci pracovního prostoru, aplikace a nahrávání souborů:
```typescript
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
const metadataClient = new MetadataApiClient();
// Query workspace info
const { currentWorkspace } = await metadataClient.query({
currentWorkspace: { id: true, displayName: true },
});
// List installed applications
const { findManyApplications } = await metadataClient.query({
findManyApplications: {
id: true,
name: true,
version: true,
},
});
```
#### Běhové přihlašovací údaje
Když váš kód běží na Twenty (logické funkce nebo frontendové komponenty), platforma vloží přihlašovací údaje jako proměnné prostředí:
* `TWENTY_API_URL` — Základní URL Twenty API
* `TWENTY_API_KEY` — Krátkodobý klíč s rozsahem omezeným na výchozí roli funkce vaší aplikace
Není nutné je předávat klientům — čtou je automaticky z `process.env`. Oprávnění API klíče jsou určena rolí uvedenou v `defaultRoleUniversalIdentifier` ve vašem `application-config.ts`.
#### Nahrávání souborů
Vygenerovaný `MetadataApiClient` obsahuje metodu `uploadFile` pro připojování souborů k polím typu souboru u objektů ve vašem pracovním prostoru. Protože standardní klienti GraphQL nativně nepodporují nahrávání souborů pomocí multipart, klient poskytuje tuto speciální metodu, která interně implementuje [specifikaci multipart požadavků GraphQL](https://github.com/jaydenseric/graphql-multipart-request-spec).
`MetadataApiClient` obsahuje metodu `uploadFile` pro připojování souborů k polím typu souboru. Implementuje [specifikaci GraphQL multipart request](https://github.com/jaydenseric/graphql-multipart-request-spec):
```typescript
import { MetadataApiClient } from 'twenty-sdk/generated';
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
import * as fs from 'fs';
const metadataClient = new MetadataApiClient();
@@ -652,25 +936,14 @@ const fileBuffer = fs.readFileSync('./invoice.pdf');
const uploadedFile = await metadataClient.uploadFile(
fileBuffer, // file contents as a Buffer
'invoice.pdf', // filename
'application/pdf', // MIME type (defaults to 'application/octet-stream')
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universal identifier
'application/pdf', // MIME type
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universalIdentifier
);
console.log(uploadedFile);
// { id: '...', path: '...', size: 12345, createdAt: '...', url: 'https://...' }
```
Signatura metody:
```typescript
uploadFile(
fileBuffer: Buffer,
filename: string,
contentType: string,
fieldMetadataUniversalIdentifier: string,
): Promise<{ id: string; path: string; size: number; createdAt: string; url: string }>
```
| Parametr | Typ | Popis |
| ---------------------------------- | -------- | --------------------------------------------------------------------------- |
| `fileBuffer` | `Buffer` | Surový obsah souboru |
@@ -680,8 +953,7 @@ uploadFile(
Hlavní body:
* Metoda `uploadFile` je k dispozici v `MetadataApiClient`, protože mutaci nahrávání obsluhuje endpoint `/metadata`.
* Používá `universalIdentifier` pole (nikoli jeho ID specifické pro pracovní prostor), takže váš kód pro nahrávání funguje ve všech pracovních prostorech, kde je vaše aplikace nainstalována — v souladu s tím, jak aplikace odkazují na pole všude jinde.
* Používá `universalIdentifier` pole (nikoli jeho ID specifické pro pracovní prostor), takže váš kód pro nahrávání funguje v jakémkoli pracovním prostoru, kde je vaše aplikace nainstalována.
* Vrácená hodnota `url` je podepsaná adresa URL, kterou můžete použít k přístupu k nahranému souboru.
### Příklad Hello World
@@ -49,7 +49,7 @@ Odtud můžete:
```bash filename="Terminal"
# Add a new entity to your application (guided)
yarn twenty entity:add
yarn twenty add
# Watch your application's function logs
yarn twenty function:logs
@@ -123,7 +123,7 @@ S volbou `--minimal` se vytvoří pouze základní soubory (`application-config.
V kostce:
* **package.json**: Deklaruje název aplikace, verzi, engines (Node 24+, Yarn 4) a přidává `twenty-sdk` plus skript `twenty`, který deleguje na lokální `twenty` CLI. Spusťte `yarn twenty help` pro výpis všech dostupných příkazů.
* **.gitignore**: Ignoruje běžné artefakty jako `node_modules`, `.yarn`, `generated/` (typovaný klient), `dist/`, `build/`, složky s coverage, logy a soubory `.env*`.
* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `.twenty/`, `dist/`, `build/`, coverage folders, log files, and `.env*` files.
* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Zamykají a konfigurují nástrojový řetězec Yarn 4 používaný projektem.
* **.nvmrc**: Fixuje verzi Node.js požadovanou projektem.
* **.oxlintrc.json** a **tsconfig.json**: Poskytují lintování a konfiguraci TypeScriptu pro zdrojové soubory vaší aplikace v TypeScriptu.
@@ -167,8 +167,8 @@ export default defineObject({
Pozdější příkazy přidají další soubory a složky:
* `yarn twenty dev` automaticky vygeneruje dva typované API klienty v `node_modules/twenty-sdk/generated`: `CoreApiClient` (pro data pracovního prostoru přes `/graphql`) a `MetadataApiClient` (pro konfiguraci pracovního prostoru a nahrávání souborů přes `/metadata`).
* `yarn twenty entity:add` přidá soubory s definicemi entit do `src/` pro vaše vlastní objekty, funkce, frontové komponenty, role, dovednosti a další.
* `yarn twenty dev` will auto-generate the typed `CoreApiClient` (for workspace data via `/graphql`) into `node_modules/twenty-client-sdk/`. The `MetadataApiClient` (for workspace configuration and file uploads via `/metadata`) ships pre-built and is available immediately. Import them from `twenty-client-sdk/core` and `twenty-client-sdk/metadata` respectively.
* `yarn twenty add` will add entity definition files under `src/` for your custom objects, functions, front components, roles, skills, and more.
## Ověření
@@ -12,7 +12,25 @@ Aplikace jsou aktuálně v alfa testování. Tato funkce je funkční, ale stál
Jakmile je vaše aplikace [sestavena a otestována lokálně](/l/cs/developers/extend/apps/building), máte dvě cesty, jak ji distribuovat:
* **Publish to npm** — uveďte svou aplikaci v Marketplace Twenty, aby ji mohl kterýkoli pracovní prostor objevit a nainstalovat.
* **Odeslat tarball** — nasaďte svou aplikaci na konkrétní server Twenty pro interní použití, aniž by byla veřejně dostupná.
* **Nasaďte tarball** — nahrajte svou aplikaci přímo na konkrétní server Twenty pro interní nebo soukromé použití.
Obě cesty začínají stejným krokem **build**.
## Sestavení vaší aplikace
Příkaz `build` zkompiluje vaše zdrojové soubory TypeScriptu, transpiluje logické funkce a frontendové komponenty a vygeneruje soubor `manifest.json`, který popisuje obsah vaší aplikace:
```bash filename="Terminal"
yarn twenty build
```
Výstup se zapisuje do `.twenty/output/`. This directory contains everything needed for distribution: compiled code, assets, the manifest, and a copy of your `package.json`.
To also create a `.tgz` tarball (used by the deploy command internally, or for manual distribution):
```bash filename="Terminal"
yarn twenty build --tarball
```
## Publikování na npm
@@ -21,29 +39,72 @@ Publikování na npm zajistí, že bude vaše aplikace dohledatelná v Marketpla
### Požadavky
* Účet na [npm](https://www.npmjs.com)
* Název vašeho balíčku **musí** používat předponu `twenty-app-` (např. `twenty-app-postcard-sender`)
* The `twenty-app` keyword **must** be listed in your `package.json` `keywords` array
### Adding the required keyword
The Twenty marketplace discovers apps by searching the npm registry for packages with the `twenty-app` keyword. Add it to your `package.json`:
```json filename="package.json"
{
"name": "twenty-app-postcard-sender",
"version": "1.0.0",
"keywords": ["twenty-app"],
...
}
```
<Note>
The marketplace searches for `keywords:twenty-app` on the npm registry. Without this keyword, your package won't appear in the marketplace even if it has the `twenty-app-` name prefix.
</Note>
### Postup
1. **Sestavte svou aplikaci** — CLI zkompiluje vaše zdrojové soubory TypeScript a vygeneruje manifest aplikace:
1. **Build your app:**
```bash filename="Terminal"
yarn twenty build
```
2. **Publikujte na npm** — odešlete sestavený balíček do registru npm:
2. **Publish to npm:**
```bash filename="Terminal"
npx twenty publish
yarn twenty publish
```
### Automatické rozpoznání
This runs `npm publish` from the `.twenty/output/` directory.
Balíčky s předponou `twenty-app-` jsou automaticky rozpoznávány katalogem Marketplace Twenty. Po publikování se vaše aplikace během několika minut objeví v Marketplace — nevyžaduje žádnou ruční registraci ani schvalování.
To publish under a specific dist-tag (e.g., `beta` or `next`):
```bash filename="Terminal"
yarn twenty publish --tag beta
```
### How marketplace discovery works
The Twenty server syncs its marketplace catalog from the npm registry **every hour**:
1. It searches for all npm packages with the `keywords:twenty-app` keyword
2. For each package, it fetches the `manifest.json` from the npm CDN
3. The app's metadata (name, description, author, logo, screenshots, category) is extracted from the manifest and displayed in the marketplace
After publishing, your app can take up to one hour to appear in the marketplace. To trigger the sync immediately instead of waiting for the next hourly run:
```bash filename="Terminal"
yarn twenty catalog-sync
```
To target a specific remote:
```bash filename="Terminal"
yarn twenty catalog-sync -r production
```
The metadata shown in the marketplace comes from your `defineApplication()` call in your app source code — fields like `displayName`, `description`, `author`, `category`, `logoUrl`, `screenshots`, `aboutDescription`, `websiteUrl`, and `termsUrl`.
### Publikování pomocí CI
Vygenerovaný projekt obsahuje pracovní postup GitHub Actions, který publikuje při každém vydání. Spouští `app:build`, a poté `npm publish --provenance` z výstupu buildu:
Vygenerovaný projekt obsahuje pracovní postup GitHub Actions, který publikuje při každém vydání:
```yaml filename=".github/workflows/publish.yml"
name: Publish
@@ -72,48 +133,117 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
```
Pro jiné systémy CI (GitLab CI, CircleCI atd.) platí stejné tři příkazy: `yarn install`, `npx twenty build` a poté `npm publish` z `.twenty/output`.
For other CI systems (GitLab CI, CircleCI, etc.), the same three commands apply: `yarn install`, `yarn twenty build`, then `npm publish` from `.twenty/output`.
<Tip>
**npm provenance** je volitelné, ale doporučené. Publikování s `--provenance` přidá k vašemu záznamu na npm odznak důvěryhodnosti a umožní uživatelům ověřit, že balíček byl sestaven z konkrétního commitu ve veřejné CI pipeline. Pokyny k nastavení najdete v [dokumentaci k npm provenance](https://docs.npmjs.com/generating-provenance-statements).
</Tip>
## Interní distribuce
## Deploying to a server (tarball)
Pro aplikace, které nechcete zpřístupnit veřejně — proprietární nástroje, integrace pouze pro enterprise nebo experimentální buildymůžete odeslat tarball přímo na server Twenty.
For apps you don't want publicly available — proprietary tools, enterprise-only integrations, or experimental buildsyou can deploy a tarball directly to a Twenty server.
### Odeslat tarball
### Předpoklady
Sestavte svou aplikaci a nasaďte ji na konkrétní server v jednom kroku:
Before deploying, you need a configured remote pointing to the target server. Remotes store the server URL and authentication credentials locally in `~/.twenty/config.json`.
Add a remote:
```bash filename="Terminal"
npx twenty publish --server <server-url>
yarn twenty remote add --url https://your-twenty-server.com --as production
```
Jakýkoli pracovní prostor na tomto serveru pak může aplikaci instalovat a aktualizovat ze stránky nastavení **Applications**.
For a local development server:
```bash filename="Terminal"
yarn twenty remote add --local --as local
```
You can also authenticate with an API key for non-interactive environments:
```bash filename="Terminal"
yarn twenty remote add --url https://your-twenty-server.com --token <api-key> --as production
```
Manage your remotes:
```bash filename="Terminal"
yarn twenty remote list # List all configured remotes
yarn twenty remote switch prod # Set the default remote
yarn twenty remote status # Show active remote and auth status
yarn twenty remote remove old # Remove a remote
```
### Deploying
Build and upload your app to the server in one step:
```bash filename="Terminal"
yarn twenty deploy
```
This builds the app with `--tarball`, then uploads the tarball to the default remote via a GraphQL multipart upload.
To deploy to a specific remote:
```bash filename="Terminal"
yarn twenty deploy -r production
```
### Sharing a deployed app
Tarball apps are not listed in the public marketplace, so other workspaces on the same server won't discover them by browsing. To share a deployed app:
1. Go to **Settings > Applications > Registrations** and open your app
2. In the **Distribution** tab, click **Copy share link**
3. Share this link with users on other workspaces — it takes them directly to the app's install page
The share link uses the server's base URL (without any workspace subdomain) so it works for any workspace on the server.
### Správa verzí
Chcete-li vydat aktualizaci:
1. Zvyšte hodnotu pole `version` v souboru `package.json`
2. Odešlete nový tarball pomocí `npx twenty publish --server <server-url>`
3. Pracovní prostory na tomto serveru uvidí dostupnou aktualizaci ve svém nastavení
2. Run `yarn twenty deploy` (or `yarn twenty deploy -r production`)
3. Workspaces that have the app installed will see the upgrade available in their settings
<Note>
Interní aplikace jsou omezené na server, na který jsou odeslány. Nezobrazí se ve veřejném Marketplace a nelze je instalovat v pracovních prostorech na jiných serverech.
</Note>
## Installing apps
## Kategorie aplikací
Once an app is published (npm) or deployed (tarball), workspaces install it through the UI:
```bash filename="Terminal"
yarn twenty install
```
Or from the **Settings > Applications** page in the Twenty UI, where both marketplace and tarball-deployed apps can be browsed and installed.
## App distribution categories
Twenty organizuje aplikace do tří kategorií podle způsobu distribuce:
| Kategorie | Jak to funguje | Viditelné v Marketplace? |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
| **Vývoj** | Aplikace v místním vývojářském režimu spuštěné přes `yarn twenty dev`. Slouží k sestavování a testování. | Ne |
| **Publikováno** | Aplikace publikované na npm s předponou `twenty-app-`. Uvedeny v Marketplace, aby je mohl kterýkoli pracovní prostor nainstalovat. | Ano |
| **Interní** | Aplikace nasazené pomocí tarballu na konkrétní server. Dostupné pouze pro pracovní prostory na tomto serveru. | Ne |
| Kategorie | Jak to funguje | Viditelné v Marketplace? |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
| **Vývoj** | Aplikace v místním vývojářském režimu spuštěné přes `yarn twenty dev`. Slouží k sestavování a testování. | Ne |
| **Published (npm)** | Apps published to npm with the `twenty-app` keyword. Uvedeny v Marketplace, aby je mohl kterýkoli pracovní prostor nainstalovat. | Ano |
| **Internal (tarball)** | Aplikace nasazené pomocí tarballu na konkrétní server. Available only to workspaces on that server via a share link. | Ne |
<Tip>
Začněte v režimu **Development** při sestavování své aplikace. Až bude připravena, zvolte **Published** (npm) pro širokou distribuci nebo **Internal** (tarball) pro soukromé nasazení.
</Tip>
## CLI reference
| Příkaz | Popis | Key flags |
| --------------------------- | ---------------------------------------------- | --------------------------------------------------- |
| `yarn twenty build` | Compile app and generate manifest | `--tarball` — also create a `.tgz` package |
| `yarn twenty publish` | Build and publish to npm | `--tag <tag>` — npm dist-tag (e.g., `beta`, `next`) |
| `yarn twenty deploy` | Build and upload tarball to a server | `-r, --remote <name>` — target remote |
| `yarn twenty catalog-sync` | Trigger marketplace catalog sync on the server | `-r, --remote <name>` — target remote |
| `yarn twenty install` | Install a deployed app on a workspace | `-r, --remote <name>` — target remote |
| `yarn twenty dev` | Watch and sync local changes | Uses default remote |
| `yarn twenty remote add` | Add a server connection | `--url`, `--token`, `--as`, `--local`, `--port` |
| `yarn twenty remote list` | List configured remotes | — |
| `yarn twenty remote switch` | Set default remote | — |
| `yarn twenty remote status` | Show connection status | — |
| `yarn twenty remote remove` | Remove a remote | — |
@@ -15,19 +15,21 @@ Das twenty-sdk stellt typisierte Bausteine und Hilfsfunktionen bereit, die Sie i
Das SDK stellt Hilfsfunktionen bereit, um die Entitäten Ihrer App zu definieren. Wie in [Entitätserkennung](/l/de/developers/extend/apps/getting-started#entity-detection) beschrieben, müssen Sie `export default define<Entity>({...})` verwenden, damit Ihre Entitäten erkannt werden:
| Funktion | Zweck |
| -------------------------------- | --------------------------------------------------------------- |
| `defineApplication` | Anwendungsmetadaten konfigurieren (erforderlich, eine pro App) |
| `defineObject` | Benutzerdefinierte Objekte mit Feldern definieren |
| `defineLogicFunction` | Logikfunktionen mit Handlern definieren |
| `definePreInstallLogicFunction` | Eine Pre-Installations-Logikfunktion definieren (eine pro App) |
| `definePostInstallLogicFunction` | Eine Post-Installations-Logikfunktion definieren (eine pro App) |
| `defineFrontComponent` | Frontend-Komponenten für benutzerdefinierte UI definieren |
| `defineRole` | Rollenberechtigungen und Objektzugriff konfigurieren |
| `defineField` | Bestehende Objekte mit zusätzlichen Feldern erweitern |
| `defineView` | Gespeicherte Views für Objekte definieren |
| `defineNavigationMenuItem` | Seitenleisten-Navigationslinks definieren |
| `defineSkill` | Skills für KI-Agenten definieren |
| Funktion | Zweck |
| -------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `defineApplication` | Anwendungsmetadaten konfigurieren (erforderlich, eine pro App) |
| `defineObject` | Benutzerdefinierte Objekte mit Feldern definieren |
| `defineField` | Erweitern Sie bestehende Objekte um zusätzliche Felder oder definieren Sie eigenständige Relationsfelder |
| `defineLogicFunction` | Logikfunktionen mit Handlern definieren |
| `definePreInstallLogicFunction` | Eine Pre-Installations-Logikfunktion definieren (eine pro App) |
| `definePostInstallLogicFunction` | Eine Post-Installations-Logikfunktion definieren (eine pro App) |
| `defineFrontComponent` | Frontend-Komponenten für benutzerdefinierte UI definieren |
| `defineRole` | Rollenberechtigungen und Objektzugriff konfigurieren |
| `defineView` | Gespeicherte Views für Objekte definieren |
| `defineNavigationMenuItem` | Seitenleisten-Navigationslinks definieren |
| `defineSkill` | Skills für KI-Agenten definieren |
| `defineAgent` | KI-Agenten definieren |
| `definePageLayout` | Benutzerdefinierte Seitenlayouts definieren |
Diese Funktionen validieren Ihre Konfiguration zur Build-Zeit und bieten IDE-Autovervollständigung sowie Typsicherheit.
@@ -36,7 +38,7 @@ Diese Funktionen validieren Ihre Konfiguration zur Build-Zeit und bieten IDE-Aut
Benutzerdefinierte Objekte beschreiben sowohl Schema als auch Verhalten für Datensätze in Ihrem Workspace. Verwenden Sie `defineObject()`, um Objekte mit eingebauter Validierung zu definieren:
```typescript
// src/app/postCard.object.ts
// src/objects/postCard.object.ts
import { defineObject, FieldType } from 'twenty-sdk';
enum PostCardStatus {
@@ -110,7 +112,7 @@ Hauptpunkte:
* Der `universalIdentifier` muss eindeutig und über Deployments hinweg stabil sein.
* Jedes Feld benötigt `name`, `type`, `label` und einen eigenen stabilen `universalIdentifier`.
* Das Array `fields` ist optional — Sie können Objekte ohne benutzerdefinierte Felder definieren.
* Sie können mit `yarn twenty entity:add` neue Objekte erzeugen; der Assistent führt Sie durch Benennung, Felder und Beziehungen.
* Sie können mit `yarn twenty add` neue Objekte erzeugen; der Assistent führt Sie durch Benennung, Felder und Beziehungen.
<Note>
**Basisfelder werden automatisch erstellt.** Wenn Sie ein benutzerdefiniertes Objekt definieren, fügt Twenty automatisch Standardfelder hinzu
@@ -120,6 +122,197 @@ Sie können Standardfelder überschreiben, indem Sie in Ihrem `fields`-Array ein
dies wird jedoch nicht empfohlen.
</Note>
### Felder für bestehende Objekte definieren
Verwenden Sie `defineField()`, um Objekten, die Ihnen nicht gehören — etwa Standardobjekten von Twenty (Person, Company usw.) — Felder hinzuzufügen oder Objekten aus anderen Apps. Im Gegensatz zu Inline-Feldern in `defineObject()` benötigen eigenständige Felder einen `objectUniversalIdentifier`, um anzugeben, welches Objekt sie erweitern:
```typescript
// src/fields/company-loyalty-tier.field.ts
import { defineField, FieldType } from 'twenty-sdk';
export default defineField({
universalIdentifier: 'f2a1b3c4-d5e6-7890-abcd-ef1234567890',
objectUniversalIdentifier: '701aecb9-eb1c-4d84-9d94-b954b231b64b', // Company object
name: 'loyaltyTier',
type: FieldType.SELECT,
label: 'Loyalty Tier',
icon: 'IconStar',
options: [
{ value: 'BRONZE', label: 'Bronze', position: 0, color: 'orange' },
{ value: 'SILVER', label: 'Silver', position: 1, color: 'gray' },
{ value: 'GOLD', label: 'Gold', position: 2, color: 'yellow' },
],
});
```
Hauptpunkte:
* Der `objectUniversalIdentifier` identifiziert das Zielobjekt. Für Standardobjekte verwenden Sie `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS`, die aus `twenty-sdk` exportiert werden.
* Wenn Sie Felder inline in `defineObject()` definieren, benötigen Sie `objectUniversalIdentifier` **nicht** — er wird vom übergeordneten Objekt geerbt.
* `defineField()` ist die einzige Möglichkeit, Felder zu Objekten hinzuzufügen, die Sie nicht mit `defineObject()` erstellt haben.
### Beziehungen
Relationen verbinden Objekte miteinander. In Twenty sind Relationen stets **bidirektional** — Sie definieren beide Seiten, und jede Seite referenziert die andere.
Es gibt zwei Relationstypen:
| Beziehungstyp | Beschreibung | Fremdschlüssel vorhanden? |
| ------------- | ----------------------------------------------------------------------- | ------------------------- |
| `MANY_TO_ONE` | Viele Datensätze dieses Objekts verweisen auf einen Datensatz des Ziels | Ja (`joinColumnName`) |
| `ONE_TO_MANY` | Ein Datensatz dieses Objekts hat viele Datensätze des Ziels | Nein (inverse Seite) |
#### Wie Relationen funktionieren
Jede Relation erfordert **zwei Felder**, die sich gegenseitig referenzieren:
1. Die **MANY_TO_ONE**-Seite — befindet sich auf dem Objekt, das den Fremdschlüssel hält
2. Die **ONE_TO_MANY**-Seite — befindet sich auf dem Objekt, dem die Sammlung gehört
Beide Felder verwenden `FieldType.RELATION` und verweisen über `relationTargetFieldMetadataUniversalIdentifier` gegenseitig aufeinander.
#### Beispiel: Postkarte hat viele Empfänger
Angenommen, eine `PostCard` kann an viele `PostCardRecipient`-Datensätze gesendet werden. Jeder Empfänger gehört genau zu einer Postkarte.
**Schritt 1: Definieren Sie die ONE_TO_MANY-Seite auf PostCard** (die "eine" Seite):
```typescript
// src/fields/post-card-recipients-on-post-card.field.ts
import { defineField, FieldType, RelationType } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_RECIPIENTS_FIELD_ID = 'a1111111-1111-1111-1111-111111111111';
// Import from the other side
import { POST_CARD_FIELD_ID } from './post-card-on-post-card-recipient.field';
export default defineField({
universalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCardRecipients',
label: 'Post Card Recipients',
icon: 'IconUsers',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_FIELD_ID,
universalSettings: {
relationType: RelationType.ONE_TO_MANY,
},
});
```
**Schritt 2: Definieren Sie die MANY_TO_ONE-Seite auf PostCardRecipient** (die "viele" Seite — hält den Fremdschlüssel):
```typescript
// src/fields/post-card-on-post-card-recipient.field.ts
import { defineField, FieldType, RelationType, OnDeleteAction } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_FIELD_ID = 'b2222222-2222-2222-2222-222222222222';
// Import from the other side
import { POST_CARD_RECIPIENTS_FIELD_ID } from './post-card-recipients-on-post-card.field';
export default defineField({
universalIdentifier: POST_CARD_FIELD_ID,
objectUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
icon: 'IconMail',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
});
```
<Note>
**Zyklische Importe:** Beide Relationsfelder referenzieren gegenseitig den `universalIdentifier` des jeweils anderen. Um Probleme mit zyklischen Importen zu vermeiden, exportieren Sie Ihre Feld-IDs als benannte Konstanten aus jeder Datei und importieren Sie sie in der jeweils anderen Datei. Das Build-System löst dies zur Kompilierzeit auf.
</Note>
#### Relationen zu Standardobjekten
Um eine Relation mit einem integrierten Twenty-Objekt (Person, Company usw.) zu erstellen, verwenden Sie `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS`:
```typescript
// src/fields/person-on-self-hosting-user.field.ts
import {
defineField,
FieldType,
RelationType,
OnDeleteAction,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk';
import { SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER } from '../objects/self-hosting-user.object';
export const PERSON_FIELD_ID = 'c3333333-3333-3333-3333-333333333333';
export const SELF_HOSTING_USER_REVERSE_FIELD_ID = 'd4444444-4444-4444-4444-444444444444';
export default defineField({
universalIdentifier: PERSON_FIELD_ID,
objectUniversalIdentifier: SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'person',
label: 'Person',
description: 'Person matching with the self hosting user',
isNullable: true,
relationTargetObjectMetadataUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
relationTargetFieldMetadataUniversalIdentifier: SELF_HOSTING_USER_REVERSE_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.SET_NULL,
joinColumnName: 'personId',
},
});
```
#### Eigenschaften von Relationsfeldern
| Eigenschaft | Erforderlich | Beschreibung |
| ------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `type` | Ja | Muss `FieldType.RELATION` sein |
| `relationTargetObjectMetadataUniversalIdentifier` | Ja | Der `universalIdentifier` des Zielobjekts |
| `relationTargetFieldMetadataUniversalIdentifier` | Ja | Der `universalIdentifier` des entsprechenden Felds auf dem Zielobjekt |
| `universalSettings.relationType` | Ja | `RelationType.MANY_TO_ONE` oder `RelationType.ONE_TO_MANY` |
| `universalSettings.onDelete` | Nur für MANY_TO_ONE | Was passiert, wenn der referenzierte Datensatz gelöscht wird: `CASCADE`, `SET_NULL`, `RESTRICT` oder `NO_ACTION` |
| `universalSettings.joinColumnName` | Nur für MANY_TO_ONE | Datenbankspaltenname für den Fremdschlüssel (z. B. `postCardId`) |
#### Inline-Relationsfelder in defineObject
Sie können Relationsfelder auch direkt innerhalb von `defineObject()` definieren. In diesem Fall lassen Sie `objectUniversalIdentifier` weg — er wird vom übergeordneten Objekt geerbt:
```typescript
export default defineObject({
universalIdentifier: '...',
nameSingular: 'postCardRecipient',
// ...
fields: [
{
universalIdentifier: POST_CARD_FIELD_ID,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
},
// ... other fields
],
});
```
### Anwendungskonfiguration (application-config.ts)
Jede App hat eine einzelne Datei `application-config.ts`, die Folgendes beschreibt:
@@ -161,6 +354,22 @@ Notizen:
* `defaultRoleUniversalIdentifier` muss mit der Rollendatei übereinstimmen (siehe unten).
* Pre-Installations- und Post-Installationsfunktionen werden während des Manifest-Builds automatisch erkannt. Siehe [Pre-Installationsfunktionen](#pre-install-functions) und [Post-Installationsfunktionen](#post-install-functions).
#### Marktplatz-Metadaten
Wenn Sie planen, [Ihre App zu veröffentlichen](/l/de/developers/extend/apps/publishing), steuern diese optionalen Felder, wie Ihre App im Marktplatz erscheint:
| Feld | Beschreibung |
| ------------------ | ---------------------------------------------------- |
| `author` | Name des Autors oder des Unternehmens |
| `category` | App-Kategorie für die Filterung im Marktplatz |
| `logoUrl` | Pfad zu Ihrem App-Logo (relativ zu `./assets/`) |
| `screenshots` | Array von Screenshot-Pfaden (relativ zu `./assets/`) |
| `aboutDescription` | Längere Markdown-Beschreibung für den Tab "Info" |
| `websiteUrl` | Link zu Ihrer Website |
| `termsUrl` | Link zu den Nutzungsbedingungen |
| `emailSupport` | Support-E-Mail-Adresse |
| `issueReportUrl` | Link zum Issue-Tracker |
#### Rollen und Berechtigungen
Anwendungen können Rollen definieren, die Berechtigungen für die Objekte und Aktionen Ihres Workspaces kapseln. Das Feld `defaultRoleUniversalIdentifier` in `application-config.ts` legt die Standardrolle fest, die von den Logikfunktionen Ihrer App verwendet wird.
@@ -230,7 +439,7 @@ Notizen:
Jede Funktionsdatei verwendet `defineLogicFunction()`, um eine Konfiguration mit einem Handler und optionalen Triggern zu exportieren.
```typescript
// src/app/createPostCard.logic-function.ts
// src/logic-functions/createPostCard.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import type { DatabaseEventPayload, ObjectRecordCreateEvent, CronPayload, RoutePayload } from 'twenty-sdk';
import { CoreApiClient, type Person } from 'twenty-sdk/generated';
@@ -324,7 +533,7 @@ export default definePreInstallLogicFunction({
Sie können die Pre-Installationsfunktion auch jederzeit manuell über die CLI ausführen:
```bash filename="Terminal"
yarn twenty function:execute --preInstall
yarn twenty exec --preInstall
```
Hauptpunkte:
@@ -334,7 +543,7 @@ Hauptpunkte:
* Pro Anwendung ist nur eine Pre-Installationsfunktion zulässig. Der Manifest-Build schlägt fehl, wenn mehr als eine erkannt wird.
* Der `universalIdentifier` der Funktion wird während des Builds im Anwendungsmanifest automatisch als `preInstallLogicFunctionUniversalIdentifier` gesetzt — Sie müssen ihn nicht in `defineApplication()` referenzieren.
* Das standardmäßige Timeout ist auf 300 Sekunden (5 Minuten) festgelegt, um längere Vorbereitungsvorgänge zu ermöglichen.
* Pre-Installationsfunktionen benötigen keine Trigger — sie werden von der Plattform vor der Installation oder manuell über `function:execute --preInstall` aufgerufen.
* Pre-Installationsfunktionen benötigen keine Trigger — sie werden von der Plattform vor der Installation oder manuell über `exec --preInstall` aufgerufen.
### Post-Installationsfunktionen
@@ -362,7 +571,7 @@ export default definePostInstallLogicFunction({
Sie können die Post-Installationsfunktion auch jederzeit manuell über die CLI ausführen:
```bash filename="Terminal"
yarn twenty function:execute --postInstall
yarn twenty exec --postInstall
```
Hauptpunkte:
@@ -372,7 +581,7 @@ Hauptpunkte:
* Pro Anwendung ist nur eine Post-Installationsfunktion zulässig. Der Manifest-Build schlägt fehl, wenn mehr als eine erkannt wird.
* Der `universalIdentifier` der Funktion wird während des Builds im Anwendungsmanifest automatisch als `postInstallLogicFunctionUniversalIdentifier` gesetzt — Sie müssen ihn nicht in `defineApplication()` referenzieren.
* Das standardmäßige Timeout ist auf 300 Sekunden (5 Minuten) festgelegt, um längere Einrichtungsvorgänge wie Daten-Seeding zu ermöglichen.
* Post-Installationsfunktionen benötigen keine Trigger — sie werden von der Plattform während der Installation oder manuell über `function:execute --postInstall` aufgerufen.
* Post-Installationsfunktionen benötigen keine Trigger — sie werden von der Plattform während der Installation oder manuell über `exec --postInstall` aufgerufen.
### Routen-Trigger-Payload
@@ -416,15 +625,15 @@ const handler = async (event: RoutePayload) => {
Der Typ `RoutePayload` hat die folgende Struktur:
| Eigenschaft | Typ | Beschreibung |
| ---------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | HTTP-Header (nur die in `forwardedRequestHeaders` aufgelisteten) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Query-String-Parameter (mehrere Werte mit Kommas verbunden) |
| `pathParameters` | `Record<string, string \| undefined>` | Aus dem Routenmuster extrahierte Pfadparameter (z. B. `/users/:id` `{ id: '123' }`) |
| `body` | `object \| null` | Geparster Request-Body (JSON) |
| `isBase64Encoded` | `boolean` | Gibt an, ob der Body Base64-codiert ist |
| `requestContext.http.method` | `string` | HTTP-Methode (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `string` | Rohpfad der Anfrage |
| Eigenschaft | Typ | Beschreibung |
| ---------------------------- | ------------------------------------- | -------------------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | HTTP-Header (nur die in `forwardedRequestHeaders` aufgelisteten) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Query-String-Parameter (mehrere Werte mit Kommas verbunden) |
| `pathParameters` | `Record<string, string \| undefined>` | Aus dem Routenmuster extrahierte Pfadparameter (z. B. `/users/:id` -> `{ id: '123' }`) |
| `body` | `object \| null` | Geparster Request-Body (JSON) |
| `isBase64Encoded` | `boolean` | Gibt an, ob der Body Base64-codiert ist |
| `requestContext.http.method` | `string` | HTTP-Methode (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `string` | Rohpfad der Anfrage |
### Weiterleiten von HTTP-Headern
@@ -466,7 +675,7 @@ const handler = async (event: RoutePayload) => {
Sie können neue Funktionen auf zwei Arten erstellen:
* **Generiert**: Führen Sie `yarn twenty entity:add` aus und wählen Sie die Option zum Hinzufügen einer neuen Logikfunktion. Dadurch wird eine Starterdatei mit Handler und Konfiguration erzeugt.
* **Generiert**: Führen Sie `yarn twenty add` aus und wählen Sie die Option zum Hinzufügen einer neuen Logikfunktion. Dadurch wird eine Starterdatei mit Handler und Konfiguration erzeugt.
* **Manuell**: Erstellen Sie eine neue `*.logic-function.ts`-Datei und verwenden Sie `defineLogicFunction()` nach demselben Muster.
### Eine Logikfunktion als Tool markieren
@@ -478,7 +687,7 @@ Um eine Logikfunktion als Tool zu markieren, setzen Sie `isTool: true` und geben
```typescript
// src/logic-functions/enrich-company.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import { CoreApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const handler = async (params: { companyName: string; domain?: string }) => {
const client = new CoreApiClient();
@@ -567,7 +776,7 @@ Hauptpunkte:
Sie können neue Frontend-Komponenten auf zwei Arten erstellen:
* **Generiert**: Führen Sie `yarn twenty entity:add` aus und wählen Sie die Option zum Hinzufügen einer neuen Frontend-Komponente.
* **Generiert**: Führen Sie `yarn twenty add` aus und wählen Sie die Option zum Hinzufügen einer neuen Frontend-Komponente.
* **Manuell**: Erstellen Sie eine neue `.tsx`-Datei und verwenden Sie `defineFrontComponent()` nach demselben Muster.
### Fähigkeiten
@@ -602,47 +811,122 @@ Hauptpunkte:
Sie können neue Skills auf zwei Arten erstellen:
* **Generiert**: Führen Sie `yarn twenty entity:add` aus und wählen Sie die Option zum Hinzufügen eines neuen Skills.
* **Generiert**: Führen Sie `yarn twenty add` aus und wählen Sie die Option zum Hinzufügen eines neuen Skills.
* **Manuell**: Erstellen Sie eine neue Datei und verwenden Sie `defineSkill()` nach demselben Muster.
### Generierte typisierte Clients
### Typisierte API-Clients (`twenty-client-sdk`)
Zwei typisierte Clients werden von `yarn twenty dev` automatisch generiert und basierend auf Ihrem Arbeitsbereichs-Schema in `node_modules/twenty-sdk/generated` gespeichert:
Das Paket `twenty-client-sdk` stellt zwei typisierte GraphQL-Clients bereit, um aus Ihren Logikfunktionen und Frontend-Komponenten mit der Twenty-API zu interagieren:
* **`CoreApiClient`** — fragt den `/graphql`-Endpunkt nach Arbeitsbereichsdaten ab
* **`MetadataApiClient`** — ruft über den Endpunkt `/metadata` die Arbeitsbereichskonfiguration und Datei-Uploads ab.
| Client | Importieren | Endpunkt | Generiert? |
| ------------------- | ---------------------------- | --------------------------------------------------------- | ------------------------------------ |
| `CoreApiClient` | `twenty-client-sdk/core` | `/graphql` — Arbeitsbereichsdaten (Datensätze, Objekte) | Ja, zur Entwicklungs-/Build-Zeit |
| `MetadataApiClient` | `twenty-client-sdk/metadata` | `/metadata` — Arbeitsbereichskonfiguration, Datei-Uploads | Nein, wird vorgefertigt ausgeliefert |
#### CoreApiClient
Der `CoreApiClient` ist der Haupt-Client zum Abfragen und Ändern von Arbeitsbereichsdaten. Er wird während `yarn twenty dev` oder `yarn twenty build` **aus Ihrem Arbeitsbereichsschema generiert** und ist daher vollständig typisiert, passend zu Ihren Objekten und Feldern.
```typescript
import { CoreApiClient, MetadataApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const client = new CoreApiClient();
const { me } = await client.query({ me: { id: true, displayName: true } });
const metadataClient = new MetadataApiClient();
const { currentWorkspace } = await metadataClient.query({ currentWorkspace: { id: true } });
// Query records
const { companies } = await client.query({
companies: {
edges: {
node: {
id: true,
name: true,
domainName: true,
},
},
},
});
// Create a record
const { createCompany } = await client.mutation({
createCompany: {
__args: {
data: {
name: 'Acme Corp',
},
},
id: true,
name: true,
},
});
```
Beide Clients werden von `yarn twenty dev` automatisch neu generiert, sobald sich Ihre Objekte oder Felder ändern.
Der Client verwendet eine Selection-Set-Syntax: Übergeben Sie `true`, um ein Feld einzuschließen, verwenden Sie `__args` für Argumente, und verschachteln Sie Objekte für Relationen. Sie erhalten vollständige Autovervollständigung und Typprüfung basierend auf Ihrem Arbeitsbereichsschema.
#### Laufzeit-Anmeldedaten in Logikfunktionen
<Note>
**Der CoreApiClient wird zur Entwicklungs-/Build-Zeit generiert.** Wenn Sie versuchen, ihn zu verwenden, ohne zuvor `yarn twenty dev` oder `yarn twenty build` ausgeführt zu haben, wird ein Fehler ausgelöst. Die Generierung erfolgt automatisch — die CLI inspiziert das GraphQL-Schema Ihres Arbeitsbereichs, erzeugt mit `@genql/cli` einen typisierten Client, schreibt die generierten Quellen nach `node_modules/twenty-client-sdk/dist/core/generated/` und ersetzt die Platzhalter in `node_modules/twenty-client-sdk/dist/core.mjs` und `node_modules/twenty-client-sdk/dist/core.cjs`.
</Note>
Wenn Ihre Funktion auf Twenty läuft, injiziert die Plattform vor der Ausführung Ihres Codes Anmeldedaten als Umgebungsvariablen:
#### Verwendung von CoreSchema für Typannotationen
* `TWENTY_API_URL`: Basis-URL der Twenty-API, auf die Ihre App abzielt.
* `TWENTY_API_KEY`: Kurzlebiger Schlüssel, der auf die Standard-Funktionsrolle Ihrer Anwendung begrenzt ist.
`CoreSchema` stellt TypeScript-Typen bereit, die Ihren Arbeitsbereichsobjekten entsprechen; nützlich zum Typisieren von Komponentenzustand oder Funktionsparametern:
Notizen:
```typescript
import { CoreApiClient, CoreSchema } from 'twenty-client-sdk/core';
import { useState } from 'react';
* Sie müssen dem generierten Client weder URL noch API-Schlüssel übergeben. Er liest `TWENTY_API_URL` und `TWENTY_API_KEY` zur Laufzeit aus process.env.
* Die Berechtigungen des API-Schlüssels werden durch die Rolle bestimmt, auf die in Ihrer `application-config.ts` über `defaultRoleUniversalIdentifier` verwiesen wird. Dies ist die Standardrolle, die von den Logikfunktionen Ihrer Anwendung verwendet wird.
* Anwendungen können Rollen definieren, um das Least-Privilege-Prinzip einzuhalten. Gewähren Sie nur die Berechtigungen, die Ihre Funktionen benötigen, und verweisen Sie dann mit `defaultRoleUniversalIdentifier` auf den universellen Bezeichner dieser Rolle.
const [company, setCompany] = useState<
Pick<CoreSchema.Company, 'id' | 'name'> | undefined
>(undefined);
const client = new CoreApiClient();
const result = await client.query({
company: {
__args: { filter: { position: { eq: 1 } } },
id: true,
name: true,
},
});
setCompany(result.company);
```
#### MetadataApiClient
`MetadataApiClient` ist im SDK bereits vorgefertigt enthalten (keine Generierung erforderlich). Er fragt den Endpunkt `/metadata` nach Arbeitsbereichskonfiguration, Anwendungen und Datei-Uploads ab:
```typescript
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
const metadataClient = new MetadataApiClient();
// Query workspace info
const { currentWorkspace } = await metadataClient.query({
currentWorkspace: { id: true, displayName: true },
});
// List installed applications
const { findManyApplications } = await metadataClient.query({
findManyApplications: {
id: true,
name: true,
version: true,
},
});
```
#### Laufzeit-Anmeldedaten
Wenn Ihr Code auf Twenty ausgeführt wird (Logikfunktionen oder Frontend-Komponenten), injiziert die Plattform Anmeldedaten als Umgebungsvariablen:
* `TWENTY_API_URL` — Basis-URL der Twenty-API
* `TWENTY_API_KEY` — Kurzlebiger Schlüssel, der auf die Standard-Funktionsrolle Ihrer Anwendung begrenzt ist
Sie müssen diese **nicht** an die Clients übergeben — sie lesen automatisch aus `process.env`. Die Berechtigungen des API-Schlüssels werden durch die Rolle bestimmt, auf die in `defaultRoleUniversalIdentifier` in Ihrer `application-config.ts` verwiesen wird.
#### Dateien hochladen
Der generierte `MetadataApiClient` enthält eine Methode `uploadFile`, um Dateien an Felder des Typs Datei in Ihren Arbeitsbereichsobjekten anzuhängen. Da Standard-GraphQL-Clients Multipart-Datei-Uploads nicht nativ unterstützen, stellt der Client diese dedizierte Methode bereit, die unter der Haube die [GraphQL-Multipart-Anfragespezifikation](https://github.com/jaydenseric/graphql-multipart-request-spec) implementiert.
Der `MetadataApiClient` enthält eine Methode `uploadFile`, um Dateien an Felder des Typs Datei anzuhängen. Sie implementiert die [GraphQL-Multipart-Request-Spezifikation](https://github.com/jaydenseric/graphql-multipart-request-spec):
```typescript
import { MetadataApiClient } from 'twenty-sdk/generated';
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
import * as fs from 'fs';
const metadataClient = new MetadataApiClient();
@@ -652,25 +936,14 @@ const fileBuffer = fs.readFileSync('./invoice.pdf');
const uploadedFile = await metadataClient.uploadFile(
fileBuffer, // file contents as a Buffer
'invoice.pdf', // filename
'application/pdf', // MIME type (defaults to 'application/octet-stream')
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universal identifier
'application/pdf', // MIME type
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universalIdentifier
);
console.log(uploadedFile);
// { id: '...', path: '...', size: 12345, createdAt: '...', url: 'https://...' }
```
Die Methodensignatur:
```typescript
uploadFile(
fileBuffer: Buffer,
filename: string,
contentType: string,
fieldMetadataUniversalIdentifier: string,
): Promise<{ id: string; path: string; size: number; createdAt: string; url: string }>
```
| Parameter | Typ | Beschreibung |
| ---------------------------------- | -------- | ------------------------------------------------------------------------------- |
| `fileBuffer` | `Buffer` | Der Rohinhalt der Datei |
@@ -680,8 +953,7 @@ uploadFile(
Hauptpunkte:
* Die Methode `uploadFile` ist auf dem `MetadataApiClient` verfügbar, weil die Upload-Mutation vom Endpunkt `/metadata` aufgelöst wird.
* Sie verwendet den `universalIdentifier` des Feldes (nicht dessen arbeitsbereichsspezifische ID), sodass Ihr Upload-Code in jedem Arbeitsbereich funktioniert, in dem Ihre App installiert ist — im Einklang damit, wie Apps Felder überall sonst referenzieren.
* Sie verwendet den `universalIdentifier` des Feldes (nicht dessen arbeitsbereichsspezifische ID), sodass Ihr Upload-Code in jedem Arbeitsbereich funktioniert, in dem Ihre App installiert ist.
* Die zurückgegebene `url` ist eine signierte URL, mit der Sie auf die hochgeladene Datei zugreifen können.
### Hello-World-Beispiel
@@ -49,7 +49,7 @@ Von hier aus können Sie:
```bash filename="Terminal"
# Add a new entity to your application (guided)
yarn twenty entity:add
yarn twenty add
# Watch your application's function logs
yarn twenty function:logs
@@ -123,7 +123,7 @@ Mit `--minimal` werden nur die Kerndateien erstellt (`application-config.ts`, `r
Auf hoher Ebene:
* **package.json**: Deklariert den App-Namen, die Version und die Engines (Node 24+, Yarn 4) und fügt `twenty-sdk` sowie ein `twenty`-Skript hinzu, das an die lokale `twenty`-CLI delegiert. Führen Sie `yarn twenty help` aus, um alle verfügbaren Befehle aufzulisten.
* **.gitignore**: Ignoriert übliche Artefakte wie `node_modules`, `.yarn`, `generated/` (typisierter Client), `dist/`, `build/`, Coverage-Ordner, Logdateien und `.env*`-Dateien.
* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `.twenty/`, `dist/`, `build/`, coverage folders, log files, and `.env*` files.
* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Fixieren und konfigurieren die vom Projekt verwendete Yarn-4-Toolchain.
* **.nvmrc**: Legt die vom Projekt erwartete Node.js-Version fest.
* **.oxlintrc.json** und **tsconfig.json**: Stellen Linting und TypeScript-Konfiguration für die TypeScript-Quellen Ihrer App bereit.
@@ -167,8 +167,8 @@ export default defineObject({
Spätere Befehle fügen weitere Dateien und Ordner hinzu:
* `yarn twenty dev` generiert automatisch zwei typisierte API-Clients in `node_modules/twenty-sdk/generated`: `CoreApiClient` (für Arbeitsbereichsdaten über `/graphql`) und `MetadataApiClient` (für Arbeitsbereichskonfiguration und Datei-Uploads über `/metadata`).
* `yarn twenty entity:add` fügt unter `src/` Entitätsdefinitionsdateien für Ihre benutzerdefinierten Objekte, Funktionen, Frontend-Komponenten, Rollen, Skills und mehr hinzu.
* `yarn twenty dev` will auto-generate the typed `CoreApiClient` (for workspace data via `/graphql`) into `node_modules/twenty-client-sdk/`. The `MetadataApiClient` (for workspace configuration and file uploads via `/metadata`) ships pre-built and is available immediately. Import them from `twenty-client-sdk/core` and `twenty-client-sdk/metadata` respectively.
* `yarn twenty add` will add entity definition files under `src/` for your custom objects, functions, front components, roles, skills, and more.
## Authentifizierung
@@ -12,7 +12,25 @@ Apps befinden sich derzeit in der Alpha-Testphase. Die Funktion ist funktionsfä
Sobald Ihre App [lokal gebaut und getestet](/l/de/developers/extend/apps/building) wurde, haben Sie zwei Möglichkeiten, sie zu verteilen:
* **Auf npm veröffentlichen** — führen Sie Ihre App im Twenty-Marktplatz auf, damit jeder Arbeitsbereich sie entdecken und installieren kann.
* **Einen Tarball pushen** — stellen Sie Ihre App auf einem bestimmten Twenty-Server für die interne Nutzung bereit, ohne sie öffentlich verfügbar zu machen.
* **Einen Tarball bereitstellen** — Laden Sie Ihre App direkt auf einen bestimmten Twenty-Server für die interne oder private Nutzung hoch.
Beide Pfade beginnen mit demselben **Build**-Schritt.
## Erstellen Ihrer App
Der Befehl `build` kompiliert Ihre TypeScript-Quelltexte, transpiliert Logikfunktionen und Frontend-Komponenten und erzeugt eine `manifest.json`, die die Inhalte Ihrer App beschreibt:
```bash filename="Terminal"
yarn twenty build
```
Die Ausgabe wird in `.twenty/output/` geschrieben. This directory contains everything needed for distribution: compiled code, assets, the manifest, and a copy of your `package.json`.
To also create a `.tgz` tarball (used by the deploy command internally, or for manual distribution):
```bash filename="Terminal"
yarn twenty build --tarball
```
## Auf npm veröffentlichen
@@ -21,29 +39,72 @@ Die Veröffentlichung auf npm macht Ihre App im Twenty-Marktplatz auffindbar. Je
### Anforderungen
* Ein [npm](https://www.npmjs.com)-Konto
* Ihr Paketname **muss** das Präfix `twenty-app-` verwenden (z. B. `twenty-app-postcard-sender`)
* The `twenty-app` keyword **must** be listed in your `package.json` `keywords` array
### Adding the required keyword
The Twenty marketplace discovers apps by searching the npm registry for packages with the `twenty-app` keyword. Add it to your `package.json`:
```json filename="package.json"
{
"name": "twenty-app-postcard-sender",
"version": "1.0.0",
"keywords": ["twenty-app"],
...
}
```
<Note>
The marketplace searches for `keywords:twenty-app` on the npm registry. Without this keyword, your package won't appear in the marketplace even if it has the `twenty-app-` name prefix.
</Note>
### Schritte
1. **App erstellen** — die CLI kompiliert Ihre TypeScript-Quellen und erzeugt das Anwendungsmanifest:
1. **Build your app:**
```bash filename="Terminal"
yarn twenty build
```
2. **Auf npm veröffentlichen** — pushen Sie das gebaute Paket in die npm-Registry:
2. **Publish to npm:**
```bash filename="Terminal"
npx twenty publish
yarn twenty publish
```
### Automatische Erkennung
This runs `npm publish` from the `.twenty/output/` directory.
Pakete mit dem Präfix `twenty-app-` werden vom Twenty-Marktplatzkatalog automatisch erkannt. Nach der Veröffentlichung erscheint Ihre App innerhalb weniger Minuten im Marktplatz — keine manuelle Registrierung oder Genehmigung erforderlich.
To publish under a specific dist-tag (e.g., `beta` or `next`):
```bash filename="Terminal"
yarn twenty publish --tag beta
```
### How marketplace discovery works
The Twenty server syncs its marketplace catalog from the npm registry **every hour**:
1. It searches for all npm packages with the `keywords:twenty-app` keyword
2. For each package, it fetches the `manifest.json` from the npm CDN
3. The app's metadata (name, description, author, logo, screenshots, category) is extracted from the manifest and displayed in the marketplace
After publishing, your app can take up to one hour to appear in the marketplace. To trigger the sync immediately instead of waiting for the next hourly run:
```bash filename="Terminal"
yarn twenty catalog-sync
```
To target a specific remote:
```bash filename="Terminal"
yarn twenty catalog-sync -r production
```
The metadata shown in the marketplace comes from your `defineApplication()` call in your app source code — fields like `displayName`, `description`, `author`, `category`, `logoUrl`, `screenshots`, `aboutDescription`, `websiteUrl`, and `termsUrl`.
### CI-Veröffentlichung
Das vorgefertigte Projekt enthält einen GitHub-Actions-Workflow, der bei jedem Release eine Veröffentlichung durchführt. Er führt `app:build` aus und danach `npm publish --provenance` aus dem Build-Output:
Das vorgefertigte Projekt enthält einen GitHub-Actions-Workflow, der bei jedem Release eine Veröffentlichung durchführt:
```yaml filename=".github/workflows/publish.yml"
name: Publish
@@ -72,48 +133,117 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
```
Für andere CI-Systeme (GitLab CI, CircleCI usw.) gelten die gleichen drei Befehle: `yarn install`, `npx twenty build` und anschließend `npm publish` aus `.twenty/output`.
For other CI systems (GitLab CI, CircleCI, etc.), the same three commands apply: `yarn install`, `yarn twenty build`, then `npm publish` from `.twenty/output`.
<Tip>
**npm-Provenance** ist optional, wird jedoch empfohlen. Das Veröffentlichen mit `--provenance` fügt Ihrem npm-Eintrag ein Vertrauensabzeichen hinzu, sodass Nutzer überprüfen können, dass das Paket aus einem bestimmten Commit in einer öffentlichen CI-Pipeline gebaut wurde. Siehe die [npm-Provenance-Dokumentation](https://docs.npmjs.com/generating-provenance-statements) für Einrichtungshinweise.
</Tip>
## Interne Verteilung
## Deploying to a server (tarball)
Für Apps, die Sie nicht öffentlich verfügbar machen möchten — proprietäre Tools, nur für Unternehmen bestimmte Integrationen oder experimentelle Builds — können Sie einen Tarball direkt auf einen Twenty-Server pushen.
For apps you don't want publicly available — proprietary tools, enterprise-only integrations, or experimental builds — you can deploy a tarball directly to a Twenty server.
### Einen Tarball pushen
### Voraussetzungen
Erstellen Sie Ihre App und stellen Sie sie in einem Schritt auf einem bestimmten Server bereit:
Before deploying, you need a configured remote pointing to the target server. Remotes store the server URL and authentication credentials locally in `~/.twenty/config.json`.
Add a remote:
```bash filename="Terminal"
npx twenty publish --server <server-url>
yarn twenty remote add --url https://your-twenty-server.com --as production
```
Jeder Arbeitsbereich auf diesem Server kann die App anschließend über die Seite **Applications** in den Einstellungen installieren und aktualisieren.
For a local development server:
```bash filename="Terminal"
yarn twenty remote add --local --as local
```
You can also authenticate with an API key for non-interactive environments:
```bash filename="Terminal"
yarn twenty remote add --url https://your-twenty-server.com --token <api-key> --as production
```
Manage your remotes:
```bash filename="Terminal"
yarn twenty remote list # List all configured remotes
yarn twenty remote switch prod # Set the default remote
yarn twenty remote status # Show active remote and auth status
yarn twenty remote remove old # Remove a remote
```
### Deploying
Build and upload your app to the server in one step:
```bash filename="Terminal"
yarn twenty deploy
```
This builds the app with `--tarball`, then uploads the tarball to the default remote via a GraphQL multipart upload.
To deploy to a specific remote:
```bash filename="Terminal"
yarn twenty deploy -r production
```
### Sharing a deployed app
Tarball apps are not listed in the public marketplace, so other workspaces on the same server won't discover them by browsing. To share a deployed app:
1. Go to **Settings > Applications > Registrations** and open your app
2. In the **Distribution** tab, click **Copy share link**
3. Share this link with users on other workspaces — it takes them directly to the app's install page
The share link uses the server's base URL (without any workspace subdomain) so it works for any workspace on the server.
### Versionsverwaltung
So veröffentlichen Sie ein Update:
1. Erhöhen Sie das Feld `version` in Ihrer `package.json`
2. Pushen Sie einen neuen Tarball mit `npx twenty publish --server <server-url>`
3. Arbeitsbereiche auf diesem Server sehen in ihren Einstellungen, dass ein Upgrade verfügbar ist.
2. Run `yarn twenty deploy` (or `yarn twenty deploy -r production`)
3. Workspaces that have the app installed will see the upgrade available in their settings
<Note>
Interne Apps sind auf den Server beschränkt, auf den sie gepusht werden. Sie erscheinen nicht im öffentlichen Marktplatz und können von Arbeitsbereichen auf anderen Servern nicht installiert werden.
</Note>
## Installing apps
## App-Kategorien
Once an app is published (npm) or deployed (tarball), workspaces install it through the UI:
```bash filename="Terminal"
yarn twenty install
```
Or from the **Settings > Applications** page in the Twenty UI, where both marketplace and tarball-deployed apps can be browsed and installed.
## App distribution categories
Twenty organisiert Apps in drei Kategorien, basierend auf ihrer Vertriebsart:
| Kategorie | Wie es funktioniert | Im Marktplatz sichtbar? |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ----------------------- |
| **Entwicklung** | Lokale Apps im Entwicklungsmodus, die über `yarn twenty dev` ausgeführt werden. Zum Erstellen und Testen verwendet. | Nein |
| **Veröffentlicht** | Auf npm veröffentlichte Apps mit dem Präfix `twenty-app-`. Im Marktplatz gelistet, damit jeder Arbeitsbereich sie installieren kann. | Ja |
| **Intern** | Apps, die per Tarball auf einen bestimmten Server bereitgestellt werden. Nur für Arbeitsbereiche auf diesem Server verfügbar. | Nein |
| Kategorie | Wie es funktioniert | Im Marktplatz sichtbar? |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |
| **Entwicklung** | Lokale Apps im Entwicklungsmodus, die über `yarn twenty dev` ausgeführt werden. Zum Erstellen und Testen verwendet. | Nein |
| **Published (npm)** | Apps published to npm with the `twenty-app` keyword. Im Marktplatz gelistet, damit jeder Arbeitsbereich sie installieren kann. | Ja |
| **Internal (tarball)** | Apps, die per Tarball auf einen bestimmten Server bereitgestellt werden. Available only to workspaces on that server via a share link. | Nein |
<Tip>
Beginnen Sie im **Entwicklungsmodus**, während Sie Ihre App erstellen. Wenn sie bereit ist, wählen Sie **Veröffentlicht** (npm) für die breite Verteilung oder **Intern** (Tarball) für die private Bereitstellung.
</Tip>
## CLI reference
| Befehl | Beschreibung | Key flags |
| --------------------------- | ---------------------------------------------- | --------------------------------------------------- |
| `yarn twenty build` | Compile app and generate manifest | `--tarball` — also create a `.tgz` package |
| `yarn twenty publish` | Build and publish to npm | `--tag <tag>` — npm dist-tag (e.g., `beta`, `next`) |
| `yarn twenty deploy` | Build and upload tarball to a server | `-r, --remote <name>` — target remote |
| `yarn twenty catalog-sync` | Trigger marketplace catalog sync on the server | `-r, --remote <name>` — target remote |
| `yarn twenty install` | Install a deployed app on a workspace | `-r, --remote <name>` — target remote |
| `yarn twenty dev` | Watch and sync local changes | Uses default remote |
| `yarn twenty remote add` | Add a server connection | `--url`, `--token`, `--as`, `--local`, `--port` |
| `yarn twenty remote list` | List configured remotes | — |
| `yarn twenty remote switch` | Set default remote | — |
| `yarn twenty remote status` | Show connection status | — |
| `yarn twenty remote remove` | Remove a remote | — |
@@ -15,19 +15,21 @@ Il pacchetto twenty-sdk fornisce blocchi tipizzati e funzioni helper da usare ne
L'SDK fornisce funzioni helper per definire le entità della tua app. Come descritto in [Rilevamento delle entità](/l/it/developers/extend/apps/getting-started#entity-detection), devi usare `export default define<Entity>({...})` affinché le tue entità vengano rilevate:
| Funzione | Scopo |
| -------------------------------- | ----------------------------------------------------------------------- |
| `defineApplication` | Configura i metadati dell'applicazione (obbligatorio, uno per app) |
| `defineObject` | Definisci oggetti personalizzati con campi |
| `defineLogicFunction` | Definisci funzioni logiche con handler |
| `definePreInstallLogicFunction` | Definisci una funzione logica di pre-installazione (una per app) |
| `definePostInstallLogicFunction` | Definisci una funzione logica di post-installazione (una per app) |
| `defineFrontComponent` | Definisci componenti front-end per un'interfaccia utente personalizzata |
| `defineRole` | Configura i permessi dei ruoli e l'accesso agli oggetti |
| `defineField` | Estendi gli oggetti esistenti con campi aggiuntivi |
| `defineView` | Definisci viste salvate per gli oggetti |
| `defineNavigationMenuItem` | Definisci i link di navigazione della barra laterale |
| `defineSkill` | Definisci le competenze dell'agente IA |
| Funzione | Scopo |
| -------------------------------- | ----------------------------------------------------------------------------------- |
| `defineApplication` | Configura i metadati dell'applicazione (obbligatorio, uno per app) |
| `defineObject` | Definisci oggetti personalizzati con campi |
| `defineField` | Extend existing objects with additional fields or define standalone relation fields |
| `defineLogicFunction` | Definisci funzioni logiche con handler |
| `definePreInstallLogicFunction` | Definisci una funzione logica di pre-installazione (una per app) |
| `definePostInstallLogicFunction` | Definisci una funzione logica di post-installazione (una per app) |
| `defineFrontComponent` | Definisci componenti front-end per un'interfaccia utente personalizzata |
| `defineRole` | Configura i permessi dei ruoli e l'accesso agli oggetti |
| `defineView` | Definisci viste salvate per gli oggetti |
| `defineNavigationMenuItem` | Definisci i link di navigazione della barra laterale |
| `defineSkill` | Definisci le competenze dell'agente IA |
| `defineAgent` | Define AI agents |
| `definePageLayout` | Define custom page layouts |
Queste funzioni convalidano la configurazione in fase di build e offrono il completamento automatico nell'IDE e la sicurezza dei tipi.
@@ -36,7 +38,7 @@ Queste funzioni convalidano la configurazione in fase di build e offrono il comp
Gli oggetti personalizzati descrivono sia lo schema sia il comportamento per i record nel tuo spazio di lavoro. Usa `defineObject()` per definire oggetti con convalida integrata:
```typescript
// src/app/postCard.object.ts
// src/objects/postCard.object.ts
import { defineObject, FieldType } from 'twenty-sdk';
enum PostCardStatus {
@@ -110,7 +112,7 @@ Punti chiave:
* Il `universalIdentifier` deve essere univoco e stabile tra i deployment.
* Ogni campo richiede un `name`, `type`, `label` e il proprio `universalIdentifier` stabile.
* L'array `fields` è facoltativo: puoi definire oggetti senza campi personalizzati.
* Puoi generare nuovi oggetti con `yarn twenty entity:add`, che ti guida nella denominazione, nei campi e nelle relazioni.
* You can scaffold new objects using `yarn twenty add`, which guides you through naming, fields, and relationships.
<Note>
**I campi base vengono creati automaticamente.** Quando definisci un oggetto personalizzato, Twenty aggiunge automaticamente i campi standard
@@ -120,6 +122,197 @@ Puoi sovrascrivere i campi predefiniti definendo un campo con lo stesso nome nel
ma non è consigliato.
</Note>
### Definire campi sugli oggetti esistenti
Use `defineField()` to add fields to objects you don't own — such as standard Twenty objects (Person, Company, etc.) or objects from other apps. Unlike inline fields in `defineObject()`, standalone fields require an `objectUniversalIdentifier` to specify which object they extend:
```typescript
// src/fields/company-loyalty-tier.field.ts
import { defineField, FieldType } from 'twenty-sdk';
export default defineField({
universalIdentifier: 'f2a1b3c4-d5e6-7890-abcd-ef1234567890',
objectUniversalIdentifier: '701aecb9-eb1c-4d84-9d94-b954b231b64b', // Company object
name: 'loyaltyTier',
type: FieldType.SELECT,
label: 'Loyalty Tier',
icon: 'IconStar',
options: [
{ value: 'BRONZE', label: 'Bronze', position: 0, color: 'orange' },
{ value: 'SILVER', label: 'Silver', position: 1, color: 'gray' },
{ value: 'GOLD', label: 'Gold', position: 2, color: 'yellow' },
],
});
```
Punti chiave:
* `objectUniversalIdentifier` identifies the target object. For standard objects, use `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS` exported from `twenty-sdk`.
* When defining fields inline in `defineObject()`, you do **not** need `objectUniversalIdentifier` — it's inherited from the parent object.
* `defineField()` is the only way to add fields to objects you didn't create with `defineObject()`.
### Relazioni
Relations connect objects together. In Twenty, relations are always **bidirectional** — you define both sides, and each side references the other.
There are two relation types:
| Tipo di relazione | Descrizione | Has foreign key? |
| ----------------- | ------------------------------------------------------------- | ---------------------- |
| `MANY_TO_ONE` | Many records of this object point to one record of the target | Yes (`joinColumnName`) |
| `ONE_TO_MANY` | One record of this object has many records of the target | No (inverse side) |
#### How relations work
Every relation requires **two fields** that reference each other:
1. The **MANY_TO_ONE** side — lives on the object that holds the foreign key
2. The **ONE_TO_MANY** side — lives on the object that owns the collection
Both fields use `FieldType.RELATION` and cross-reference each other via `relationTargetFieldMetadataUniversalIdentifier`.
#### Example: Post Card has many Recipients
Suppose a `PostCard` can be sent to many `PostCardRecipient` records. Each recipient belongs to exactly one post card.
**Step 1: Define the ONE_TO_MANY side on PostCard** (the "one" side):
```typescript
// src/fields/post-card-recipients-on-post-card.field.ts
import { defineField, FieldType, RelationType } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_RECIPIENTS_FIELD_ID = 'a1111111-1111-1111-1111-111111111111';
// Import from the other side
import { POST_CARD_FIELD_ID } from './post-card-on-post-card-recipient.field';
export default defineField({
universalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCardRecipients',
label: 'Post Card Recipients',
icon: 'IconUsers',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_FIELD_ID,
universalSettings: {
relationType: RelationType.ONE_TO_MANY,
},
});
```
**Step 2: Define the MANY_TO_ONE side on PostCardRecipient** (the "many" side — holds the foreign key):
```typescript
// src/fields/post-card-on-post-card-recipient.field.ts
import { defineField, FieldType, RelationType, OnDeleteAction } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_FIELD_ID = 'b2222222-2222-2222-2222-222222222222';
// Import from the other side
import { POST_CARD_RECIPIENTS_FIELD_ID } from './post-card-recipients-on-post-card.field';
export default defineField({
universalIdentifier: POST_CARD_FIELD_ID,
objectUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
icon: 'IconMail',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
});
```
<Note>
**Circular imports:** Both relation fields reference each other's `universalIdentifier`. To avoid circular import issues, export your field IDs as named constants from each file, and import them in the other file. The build system resolves these at compile time.
</Note>
#### Relating to standard objects
To create a relation with a built-in Twenty object (Person, Company, etc.), use `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS`:
```typescript
// src/fields/person-on-self-hosting-user.field.ts
import {
defineField,
FieldType,
RelationType,
OnDeleteAction,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk';
import { SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER } from '../objects/self-hosting-user.object';
export const PERSON_FIELD_ID = 'c3333333-3333-3333-3333-333333333333';
export const SELF_HOSTING_USER_REVERSE_FIELD_ID = 'd4444444-4444-4444-4444-444444444444';
export default defineField({
universalIdentifier: PERSON_FIELD_ID,
objectUniversalIdentifier: SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'person',
label: 'Person',
description: 'Person matching with the self hosting user',
isNullable: true,
relationTargetObjectMetadataUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
relationTargetFieldMetadataUniversalIdentifier: SELF_HOSTING_USER_REVERSE_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.SET_NULL,
joinColumnName: 'personId',
},
});
```
#### Relation field properties
| Proprietà | Obbligatorio | Descrizione |
| ------------------------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------- |
| `tipo` | Sì | Must be `FieldType.RELATION` |
| `relationTargetObjectMetadataUniversalIdentifier` | Sì | The `universalIdentifier` of the target object |
| `relationTargetFieldMetadataUniversalIdentifier` | Sì | The `universalIdentifier` of the matching field on the target object |
| `universalSettings.relationType` | Sì | `RelationType.MANY_TO_ONE` or `RelationType.ONE_TO_MANY` |
| `universalSettings.onDelete` | MANY_TO_ONE only | What happens when the referenced record is deleted: `CASCADE`, `SET_NULL`, `RESTRICT`, or `NO_ACTION` |
| `universalSettings.joinColumnName` | MANY_TO_ONE only | Database column name for the foreign key (e.g., `postCardId`) |
#### Inline relation fields in defineObject
You can also define relation fields directly inside `defineObject()`. In that case, omit `objectUniversalIdentifier` — it's inherited from the parent object:
```typescript
export default defineObject({
universalIdentifier: '...',
nameSingular: 'postCardRecipient',
// ...
fields: [
{
universalIdentifier: POST_CARD_FIELD_ID,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
},
// ... other fields
],
});
```
### Configurazione dell'applicazione (application-config.ts)
Ogni app ha un singolo file `application-config.ts` che descrive:
@@ -161,13 +354,29 @@ Note:
* `defaultRoleUniversalIdentifier` deve corrispondere al file del ruolo (vedi sotto).
* Le funzioni di pre-installazione e post-installazione vengono rilevate automaticamente durante la build del manifesto. Vedi [Funzioni di pre-installazione](#pre-install-functions) e [Funzioni di post-installazione](#post-install-functions).
#### Marketplace metadata
If you plan to [publish your app](/l/it/developers/extend/apps/publishing), these optional fields control how your app appears in the marketplace:
| Campo | Descrizione |
| ------------------ | --------------------------------------------------- |
| `autore` | Author or company name |
| `categoria` | App category for marketplace filtering |
| `logoUrl` | Path to your app logo (relative to `./assets/`) |
| `screenshots` | Array of screenshot paths (relative to `./assets/`) |
| `aboutDescription` | Longer markdown description for the "About" tab |
| `websiteUrl` | Link to your website |
| `termsUrl` | Link to terms of service |
| `emailSupport` | Support email address |
| `issueReportUrl` | Link to issue tracker |
#### Ruoli e permessi
Le applicazioni possono definire ruoli che incapsulano i permessi sugli oggetti e sulle azioni del tuo spazio di lavoro. Il campo `defaultRoleUniversalIdentifier` in `application-config.ts` indica il ruolo predefinito utilizzato dalle funzioni logiche della tua app.
* La chiave API di runtime iniettata come `TWENTY_API_KEY` è derivata da questo ruolo funzione predefinito.
* Il client tipizzato sarà limitato ai permessi concessi a quel ruolo.
* Segui il principio del privilegio minimo: crea un ruolo dedicato con solo i permessi necessari alle tue funzioni, quindi fai riferimento al suo identificatore universale.
* Follow least-privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
##### Ruolo funzione predefinito (*.role.ts)
@@ -220,7 +429,7 @@ L'`universalIdentifier` di questo ruolo viene quindi referenziato in `applicatio
Note:
* Parti dal ruolo generato dallo scaffolder, quindi restringilo progressivamente seguendo il principio del privilegio minimo.
* Start from the scaffolded role, then progressively restrict it following least-privilege.
* Sostituisci `objectPermissions` e `fieldPermissions` con gli oggetti/campi di cui le tue funzioni hanno bisogno.
* `permissionFlags` controllano l'accesso alle funzionalità a livello di piattaforma. Mantienili al minimo; aggiungi solo ciò che ti serve.
* Vedi un esempio funzionante nell'app Hello World: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
@@ -230,7 +439,7 @@ Note:
Ogni file di funzione usa `defineLogicFunction()` per esportare una configurazione con un handler e trigger opzionali.
```typescript
// src/app/createPostCard.logic-function.ts
// src/logic-functions/createPostCard.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import type { DatabaseEventPayload, ObjectRecordCreateEvent, CronPayload, RoutePayload } from 'twenty-sdk';
import { CoreApiClient, type Person } from 'twenty-sdk/generated';
@@ -324,7 +533,7 @@ export default definePreInstallLogicFunction({
Puoi anche eseguire manualmente la funzione di pre-installazione in qualsiasi momento utilizzando la CLI:
```bash filename="Terminal"
yarn twenty function:execute --preInstall
yarn twenty exec --preInstall
```
Punti chiave:
@@ -334,7 +543,7 @@ Punti chiave:
* È consentita una sola funzione di pre-installazione per applicazione. La build del manifesto genererà un errore se ne viene rilevata più di una.
* L'`universalIdentifier` della funzione viene impostato automaticamente come `preInstallLogicFunctionUniversalIdentifier` nel manifesto dell'applicazione durante la build — non è necessario farvi riferimento in `defineApplication()`.
* Il timeout predefinito è impostato a 300 secondi (5 minuti) per consentire attività di preparazione più lunghe.
* Le funzioni di pre-installazione non necessitano di trigger — vengono invocate dalla piattaforma prima dell'installazione o manualmente tramite `function:execute --preInstall`.
* Pre-install functions do not need triggersthey are invoked by the platform before installation or manually via `exec --preInstall`.
### Funzioni post-installazione
@@ -362,7 +571,7 @@ export default definePostInstallLogicFunction({
Puoi anche eseguire manualmente la funzione di post-installazione in qualsiasi momento utilizzando la CLI:
```bash filename="Terminal"
yarn twenty function:execute --postInstall
yarn twenty exec --postInstall
```
Punti chiave:
@@ -372,7 +581,7 @@ Punti chiave:
* È consentita una sola funzione di post-installazione per applicazione. La build del manifesto genererà un errore se ne viene rilevata più di una.
* L'`universalIdentifier` della funzione viene impostato automaticamente come `postInstallLogicFunctionUniversalIdentifier` nel manifesto dell'applicazione durante la build — non è necessario farvi riferimento in `defineApplication()`.
* Il timeout predefinito è impostato a 300 secondi (5 minuti) per consentire attività di configurazione più lunghe, come il popolamento dei dati.
* Le funzioni di post-installazione non necessitano di trigger — vengono invocate dalla piattaforma durante l'installazione o manualmente tramite `function:execute --postInstall`.
* Post-install functions do not need triggersthey are invoked by the platform during installation or manually via `exec --postInstall`.
### Payload del trigger di route
@@ -416,15 +625,15 @@ const handler = async (event: RoutePayload) => {
Il tipo `RoutePayload` ha la seguente struttura:
| Proprietà | Tipo | Descrizione |
| ---------------------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | Intestazioni HTTP (solo quelle elencate in `forwardedRequestHeaders`) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Parametri della query string (valori multipli uniti da virgole) |
| `pathParameters` | `Record<string, string \| undefined>` | Parametri di percorso estratti dal pattern della route (ad es., `/users/:id` `{ id: '123' }`) |
| `body` | `object \| null` | Corpo della richiesta analizzato (JSON) |
| `isBase64Encoded` | `boolean` | Indica se il corpo è codificato in base64 |
| `requestContext.http.method` | `string` | Metodo HTTP (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `string` | Percorso della richiesta non elaborato |
| Proprietà | Tipo | Descrizione |
| ---------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | Intestazioni HTTP (solo quelle elencate in `forwardedRequestHeaders`) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Parametri della query string (valori multipli uniti da virgole) |
| `pathParameters` | `Record<string, string \| undefined>` | Path parameters extracted from the route pattern (e.g., `/users/:id` -> `{ id: '123' }`) |
| `body` | `object \| null` | Corpo della richiesta analizzato (JSON) |
| `isBase64Encoded` | `boolean` | Indica se il corpo è codificato in base64 |
| `requestContext.http.method` | `string` | Metodo HTTP (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `string` | Percorso della richiesta non elaborato |
### Inoltro delle intestazioni HTTP
@@ -466,7 +675,7 @@ const handler = async (event: RoutePayload) => {
Puoi creare nuove funzioni in due modi:
* **Generata dallo scaffolder**: Esegui `yarn twenty entity:add` e scegli l'opzione per aggiungere una nuova funzione logica. Questo genera un file iniziale con un handler e una configurazione.
* **Scaffolded**: Run `yarn twenty add` and choose the option to add a new logic function. Questo genera un file iniziale con un handler e una configurazione.
* **Manuale**: Crea un nuovo file `*.logic-function.ts` e usa `defineLogicFunction()`, seguendo lo stesso schema.
### Contrassegnare una funzione logica come strumento
@@ -478,7 +687,7 @@ Per contrassegnare una funzione logica come strumento, imposta `isTool: true` e
```typescript
// src/logic-functions/enrich-company.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import { CoreApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const handler = async (params: { companyName: string; domain?: string }) => {
const client = new CoreApiClient();
@@ -567,7 +776,7 @@ Punti chiave:
Puoi creare nuovi componenti front-end in due modi:
* **Generata dallo scaffolder**: Esegui `yarn twenty entity:add` e scegli l'opzione per aggiungere un nuovo componente front-end.
* **Scaffolded**: Run `yarn twenty add` and choose the option to add a new front component.
* **Manuale**: Crea un nuovo file `.tsx` e usa `defineFrontComponent()`, seguendo lo stesso schema.
### Abilità
@@ -602,47 +811,122 @@ Punti chiave:
Puoi creare nuove skill in due modi:
* **Generata dallo scaffolder**: Esegui `yarn twenty entity:add` e scegli l'opzione per aggiungere una nuova skill.
* **Scaffolded**: Run `yarn twenty add` and choose the option to add a new skill.
* **Manuale**: Crea un nuovo file e usa `defineSkill()`, seguendo lo stesso schema.
### Client tipizzati generati
### Typed API clients (`twenty-client-sdk`)
Due client tipizzati sono generati automaticamente da `yarn twenty dev` e salvati in `node_modules/twenty-sdk/generated` in base allo schema del tuo spazio di lavoro:
The `twenty-client-sdk` package provides two typed GraphQL clients for interacting with the Twenty API from your logic functions and front components:
* **`CoreApiClient`** — interroga l'endpoint `/graphql` per i dati dello spazio di lavoro
* **`MetadataApiClient`** — interroga l'endpoint `/metadata` per la configurazione dello spazio di lavoro e il caricamento dei file
| Client | Importa | Endpoint | Generated? |
| ------------------- | ---------------------------- | ---------------------------------------------- | ---------------------- |
| `CoreApiClient` | `twenty-client-sdk/core` | `/graphql` — workspace data (records, objects) | Yes, at dev/build time |
| `MetadataApiClient` | `twenty-client-sdk/metadata` | `/metadata` — workspace config, file uploads | No, ships pre-built |
#### CoreApiClient
`CoreApiClient` is the main client for querying and mutating workspace data. It is **generated from your workspace schema** during `yarn twenty dev` or `yarn twenty build`, so it's fully typed to match your objects and fields.
```typescript
import { CoreApiClient, MetadataApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const client = new CoreApiClient();
const { me } = await client.query({ me: { id: true, displayName: true } });
const metadataClient = new MetadataApiClient();
const { currentWorkspace } = await metadataClient.query({ currentWorkspace: { id: true } });
// Query records
const { companies } = await client.query({
companies: {
edges: {
node: {
id: true,
name: true,
domainName: true,
},
},
},
});
// Create a record
const { createCompany } = await client.mutation({
createCompany: {
__args: {
data: {
name: 'Acme Corp',
},
},
id: true,
name: true,
},
});
```
Entrambi i client vengono rigenerati automaticamente da `yarn twenty dev` ogni volta che i tuoi oggetti o campi cambiano.
The client uses a selection-set syntax: pass `true` to include a field, use `__args` for arguments, and nest objects for relations. You get full autocompletion and type checking based on your workspace schema.
#### Credenziali di runtime nelle funzioni logiche
<Note>
**CoreApiClient is generated at dev/build time.** If you try to 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, generates a typed client using `@genql/cli`, writes the generated sources to `node_modules/twenty-client-sdk/dist/core/generated/`, and replaces the stubs in `node_modules/twenty-client-sdk/dist/core.mjs` and `node_modules/twenty-client-sdk/dist/core.cjs`.
</Note>
Quando la tua funzione viene eseguita su Twenty, la piattaforma inietta le credenziali come variabili d'ambiente prima dell'esecuzione del tuo codice:
#### Using CoreSchema for type annotations
* `TWENTY_API_URL`: URL di base dell'API Twenty a cui punta la tua app.
* `TWENTY_API_KEY`: Chiave a breve durata con ambito al ruolo funzione predefinito della tua applicazione.
`CoreSchema` provides TypeScript types matching your workspace objects, useful for typing component state or function parameters:
Note:
```typescript
import { CoreApiClient, CoreSchema } from 'twenty-client-sdk/core';
import { useState } from 'react';
* Non è necessario passare URL o chiave API al client generato. Legge `TWENTY_API_URL` e `TWENTY_API_KEY` da process.env in fase di esecuzione.
* I permessi della chiave API sono determinati dal ruolo referenziato nel tuo `application-config.ts` tramite `defaultRoleUniversalIdentifier`. Questo è il ruolo predefinito utilizzato dalle funzioni logiche della tua applicazione.
* Le applicazioni possono definire ruoli per seguire il principio del privilegio minimo. Concedi solo i permessi necessari alle tue funzioni, quindi punta `defaultRoleUniversalIdentifier` all'identificatore universale di quel ruolo.
const [company, setCompany] = useState<
Pick<CoreSchema.Company, 'id' | 'name'> | undefined
>(undefined);
const client = new CoreApiClient();
const result = await client.query({
company: {
__args: { filter: { position: { eq: 1 } } },
id: true,
name: true,
},
});
setCompany(result.company);
```
#### MetadataApiClient
`MetadataApiClient` ships pre-built with the SDK (no generation required). It queries the `/metadata` endpoint for workspace configuration, applications, and file uploads:
```typescript
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
const metadataClient = new MetadataApiClient();
// Query workspace info
const { currentWorkspace } = await metadataClient.query({
currentWorkspace: { id: true, displayName: true },
});
// List installed applications
const { findManyApplications } = await metadataClient.query({
findManyApplications: {
id: true,
name: true,
version: true,
},
});
```
#### Runtime credentials
When your code runs on Twenty (logic functions or front components), the platform injects credentials as environment variables:
* `TWENTY_API_URL` — Base URL of the Twenty API
* `TWENTY_API_KEY` — Short-lived key scoped to your application's default function role
You do **not** need to pass these to the clients — they read from `process.env` automatically. The API key's permissions are determined by the role referenced in `defaultRoleUniversalIdentifier` in your `application-config.ts`.
#### Caricamento dei file
Il `MetadataApiClient` generato include un metodo `uploadFile` per allegare file ai campi di tipo file sugli oggetti del tuo spazio di lavoro. Poiché i client GraphQL standard non supportano nativamente il caricamento di file multipart, il client fornisce questo metodo dedicato che implementa la [specifica della richiesta GraphQL multipart](https://github.com/jaydenseric/graphql-multipart-request-spec) dietro le quinte.
`MetadataApiClient` includes an `uploadFile` method for attaching files to file-type fields. It implements the [GraphQL multipart request specification](https://github.com/jaydenseric/graphql-multipart-request-spec):
```typescript
import { MetadataApiClient } from 'twenty-sdk/generated';
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
import * as fs from 'fs';
const metadataClient = new MetadataApiClient();
@@ -652,25 +936,14 @@ const fileBuffer = fs.readFileSync('./invoice.pdf');
const uploadedFile = await metadataClient.uploadFile(
fileBuffer, // file contents as a Buffer
'invoice.pdf', // filename
'application/pdf', // MIME type (defaults to 'application/octet-stream')
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universal identifier
'application/pdf', // MIME type
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universalIdentifier
);
console.log(uploadedFile);
// { id: '...', path: '...', size: 12345, createdAt: '...', url: 'https://...' }
```
La firma del metodo:
```typescript
uploadFile(
fileBuffer: Buffer,
filename: string,
contentType: string,
fieldMetadataUniversalIdentifier: string,
): Promise<{ id: string; path: string; size: number; createdAt: string; url: string }>
```
| Parametro | Tipo | Descrizione |
| ---------------------------------- | -------- | ------------------------------------------------------------------------ |
| `fileBuffer` | `Buffer` | Il contenuto grezzo del file |
@@ -680,8 +953,7 @@ uploadFile(
Punti chiave:
* Il metodo `uploadFile` è disponibile su `MetadataApiClient` perché la mutazione di upload viene risolta dall'endpoint `/metadata`.
* Usa l'`universalIdentifier` del campo (non il suo ID specifico dello spazio di lavoro), quindi il tuo codice di upload funziona in qualsiasi spazio di lavoro in cui la tua app è installata — coerentemente con il modo in cui le app fanno riferimento ai campi altrove.
* Uses the field's `universalIdentifier` (not its workspace-specific ID), so your upload code works across any workspace where your app is installed.
* L'`url` restituito è un URL firmato che puoi usare per accedere al file caricato.
### Esempio Hello World
@@ -49,7 +49,7 @@ Da qui puoi:
```bash filename="Terminal"
# Add a new entity to your application (guided)
yarn twenty entity:add
yarn twenty add
# Watch your application's function logs
yarn twenty function:logs
@@ -123,7 +123,7 @@ Con `--minimal`, vengono creati solo i file principali (`application-config.ts`,
A livello generale:
* **package.json**: Dichiara il nome dell'app, la versione, i motori (Node 24+, Yarn 4) e aggiunge `twenty-sdk` più uno script `twenty` che delega alla CLI locale `twenty`. Esegui `yarn twenty help` per elencare tutti i comandi disponibili.
* **.gitignore**: Ignora i file generati comuni come `node_modules`, `.yarn`, `generated/` (client tipizzato), `dist/`, `build/`, cartelle di coverage, file di log e file `.env*`.
* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `.twenty/`, `dist/`, `build/`, coverage folders, log files, and `.env*` files.
* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Bloccano e configurano la toolchain Yarn 4 utilizzata dal progetto.
* **.nvmrc**: Fissa la versione di Node.js prevista dal progetto.
* **.oxlintrc.json** e **tsconfig.json**: Forniscono linting e configurazione TypeScript per i sorgenti TypeScript della tua app.
@@ -167,8 +167,8 @@ export default defineObject({
Comandi successivi aggiungeranno altri file e cartelle:
* `yarn twenty dev` genererà automaticamente due client API tipizzati in `node_modules/twenty-sdk/generated`: `CoreApiClient` (per i dati dell'area di lavoro tramite `/graphql`) e `MetadataApiClient` (per la configurazione dell'area di lavoro e il caricamento di file tramite `/metadata`).
* `yarn twenty entity:add` aggiungerà file di definizione delle entità sotto `src/` per i tuoi oggetti, funzioni, componenti front-end, ruoli, competenze e altro ancora.
* `yarn twenty dev` will auto-generate the typed `CoreApiClient` (for workspace data via `/graphql`) into `node_modules/twenty-client-sdk/`. The `MetadataApiClient` (for workspace configuration and file uploads via `/metadata`) ships pre-built and is available immediately. Import them from `twenty-client-sdk/core` and `twenty-client-sdk/metadata` respectively.
* `yarn twenty add` will add entity definition files under `src/` for your custom objects, functions, front components, roles, skills, and more.
## Autenticazione
@@ -12,7 +12,25 @@ Le app sono attualmente in fase alfa. La funzionalità è funzionante ma ancora
Una volta che la tua app è stata [compilata e testata localmente](/l/it/developers/extend/apps/building), hai due modalità per distribuirla:
* **Pubblica su npm** — elenca la tua app nel marketplace di Twenty affinché qualsiasi spazio di lavoro possa scoprirla e installarla.
* **Esegui il push di un tarball** — distribuisci la tua app su un server Twenty specifico per uso interno senza renderla pubblicamente disponibile.
* **Distribuisci un tarball** — carica la tua app direttamente su un server Twenty specifico per uso interno o privato.
Entrambi i percorsi partono dalla stessa fase di **build**.
## Compilazione della tua app
Il comando `build` compila i tuoi sorgenti TypeScript, transpila le funzioni di logica e i componenti front-end e genera un `manifest.json` che descrive i contenuti della tua app:
```bash filename="Terminal"
yarn twenty build
```
L'output viene scritto in `.twenty/output/`. This directory contains everything needed for distribution: compiled code, assets, the manifest, and a copy of your `package.json`.
To also create a `.tgz` tarball (used by the deploy command internally, or for manual distribution):
```bash filename="Terminal"
yarn twenty build --tarball
```
## Pubblicazione su npm
@@ -21,29 +39,72 @@ La pubblicazione su npm rende la tua app scopribile nel marketplace di Twenty. Q
### Requisiti
* Un account [npm](https://www.npmjs.com)
* Il nome del tuo pacchetto **deve** usare il prefisso `twenty-app-` (es. `twenty-app-postcard-sender`)
* The `twenty-app` keyword **must** be listed in your `package.json` `keywords` array
### Adding the required keyword
The Twenty marketplace discovers apps by searching the npm registry for packages with the `twenty-app` keyword. Add it to your `package.json`:
```json filename="package.json"
{
"name": "twenty-app-postcard-sender",
"version": "1.0.0",
"keywords": ["twenty-app"],
...
}
```
<Note>
The marketplace searches for `keywords:twenty-app` on the npm registry. Without this keyword, your package won't appear in the marketplace even if it has the `twenty-app-` name prefix.
</Note>
### Passaggi
1. **Compila la tua app** — la CLI compila i tuoi sorgenti TypeScript e genera il manifest dell'applicazione:
1. **Build your app:**
```bash filename="Terminal"
yarn twenty build
```
2. **Pubblica su npm** — esegui il push del pacchetto compilato al registro npm:
2. **Publish to npm:**
```bash filename="Terminal"
npx twenty publish
yarn twenty publish
```
### Rilevamento automatico
This runs `npm publish` from the `.twenty/output/` directory.
I pacchetti con il prefisso `twenty-app-` vengono rilevati automaticamente dal catalogo del marketplace di Twenty. Una volta pubblicata, la tua app compare nel marketplace entro pochi minuti — non è richiesta alcuna registrazione o approvazione manuale.
To publish under a specific dist-tag (e.g., `beta` or `next`):
```bash filename="Terminal"
yarn twenty publish --tag beta
```
### How marketplace discovery works
The Twenty server syncs its marketplace catalog from the npm registry **every hour**:
1. It searches for all npm packages with the `keywords:twenty-app` keyword
2. For each package, it fetches the `manifest.json` from the npm CDN
3. The app's metadata (name, description, author, logo, screenshots, category) is extracted from the manifest and displayed in the marketplace
After publishing, your app can take up to one hour to appear in the marketplace. To trigger the sync immediately instead of waiting for the next hourly run:
```bash filename="Terminal"
yarn twenty catalog-sync
```
To target a specific remote:
```bash filename="Terminal"
yarn twenty catalog-sync -r production
```
The metadata shown in the marketplace comes from your `defineApplication()` call in your app source code — fields like `displayName`, `description`, `author`, `category`, `logoUrl`, `screenshots`, `aboutDescription`, `websiteUrl`, and `termsUrl`.
### Pubblicazione con CI
Il progetto generato include un workflow di GitHub Actions che pubblica a ogni release. Esegue `app:build`, quindi `npm publish --provenance` dall'output di build:
Il progetto generato include un workflow di GitHub Actions che pubblica a ogni release:
```yaml filename=".github/workflows/publish.yml"
name: Publish
@@ -72,48 +133,117 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
```
Per altri sistemi CI (GitLab CI, CircleCI, ecc.), si applicano gli stessi tre comandi: `yarn install`, `npx twenty build`, quindi `npm publish` da `.twenty/output`.
For other CI systems (GitLab CI, CircleCI, etc.), the same three commands apply: `yarn install`, `yarn twenty build`, then `npm publish` from `.twenty/output`.
<Tip>
**npm provenance** è opzionale ma consigliata. La pubblicazione con `--provenance` aggiunge un badge di attendibilità alla tua scheda npm, consentendo agli utenti di verificare che il pacchetto sia stato creato a partire da uno specifico commit in una pipeline CI pubblica. Consulta la [documentazione su npm provenance](https://docs.npmjs.com/generating-provenance-statements) per le istruzioni di configurazione.
</Tip>
## Distribuzione interna
## Deploying to a server (tarball)
Per le app che non vuoi rendere pubbliche — strumenti proprietari, integrazioni solo per l'azienda o build sperimentali — puoi eseguire il push di un tarball direttamente su un server Twenty.
For apps you don't want publicly available — proprietary tools, enterprise-only integrations, or experimental builds — you can deploy a tarball directly to a Twenty server.
### Push di un tarball
### Prerequisiti
Compila la tua app e distribuiscila su un server specifico in un solo passaggio:
Before deploying, you need a configured remote pointing to the target server. Remotes store the server URL and authentication credentials locally in `~/.twenty/config.json`.
Add a remote:
```bash filename="Terminal"
npx twenty publish --server <server-url>
yarn twenty remote add --url https://your-twenty-server.com --as production
```
Qualsiasi spazio di lavoro su quel server può quindi installare e aggiornare l'app dalla pagina delle impostazioni **Applicazioni**.
For a local development server:
```bash filename="Terminal"
yarn twenty remote add --local --as local
```
You can also authenticate with an API key for non-interactive environments:
```bash filename="Terminal"
yarn twenty remote add --url https://your-twenty-server.com --token <api-key> --as production
```
Manage your remotes:
```bash filename="Terminal"
yarn twenty remote list # List all configured remotes
yarn twenty remote switch prod # Set the default remote
yarn twenty remote status # Show active remote and auth status
yarn twenty remote remove old # Remove a remote
```
### Deploying
Build and upload your app to the server in one step:
```bash filename="Terminal"
yarn twenty deploy
```
This builds the app with `--tarball`, then uploads the tarball to the default remote via a GraphQL multipart upload.
To deploy to a specific remote:
```bash filename="Terminal"
yarn twenty deploy -r production
```
### Sharing a deployed app
Tarball apps are not listed in the public marketplace, so other workspaces on the same server won't discover them by browsing. To share a deployed app:
1. Go to **Settings > Applications > Registrations** and open your app
2. In the **Distribution** tab, click **Copy share link**
3. Share this link with users on other workspaces — it takes them directly to the app's install page
The share link uses the server's base URL (without any workspace subdomain) so it works for any workspace on the server.
### Gestione delle versioni
Per rilasciare un aggiornamento:
1. Incrementa il campo `version` nel tuo `package.json`
2. Esegui il push di un nuovo tarball con `npx twenty publish --server <server-url>`
3. Gli spazi di lavoro su quel server vedranno l'aggiornamento disponibile nelle proprie impostazioni
2. Run `yarn twenty deploy` (or `yarn twenty deploy -r production`)
3. Workspaces that have the app installed will see the upgrade available in their settings
<Note>
Le app interne sono limitate al server su cui vengono caricate. Non compariranno nel marketplace pubblico e non potranno essere installate dagli spazi di lavoro su altri server.
</Note>
## Installing apps
## Categorie di app
Once an app is published (npm) or deployed (tarball), workspaces install it through the UI:
```bash filename="Terminal"
yarn twenty install
```
Or from the **Settings > Applications** page in the Twenty UI, where both marketplace and tarball-deployed apps can be browsed and installed.
## App distribution categories
Twenty organizza le app in tre categorie in base a come vengono distribuite:
| Categoria | Come funziona | Visibile nel marketplace? |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- |
| **Sviluppo** | App in modalità di sviluppo locale eseguite tramite `yarn twenty dev`. Usate per la compilazione e i test. | No |
| **Pubblicata** | App pubblicate su npm con il prefisso `twenty-app-`. Elencate nel marketplace per l'installazione da parte di qualsiasi spazio di lavoro. | Sì |
| **Interna** | App distribuite tramite tarball su un server specifico. Disponibili solo per gli spazi di lavoro su quel server. | No |
| Categoria | Come funziona | Visibile nel marketplace? |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- |
| **Sviluppo** | App in modalità di sviluppo locale eseguite tramite `yarn twenty dev`. Usate per la compilazione e i test. | No |
| **Published (npm)** | Apps published to npm with the `twenty-app` keyword. Elencate nel marketplace per l'installazione da parte di qualsiasi spazio di lavoro. | Sì |
| **Internal (tarball)** | App distribuite tramite tarball su un server specifico. Available only to workspaces on that server via a share link. | No |
<Tip>
Inizia in modalità **Sviluppo** mentre crei la tua app. Quando è pronta, scegli **Pubblicata** (npm) per un'ampia distribuzione oppure **Interna** (tarball) per una distribuzione privata.
</Tip>
## CLI reference
| Comando | Descrizione | Key flags |
| --------------------------- | ---------------------------------------------- | --------------------------------------------------- |
| `yarn twenty build` | Compile app and generate manifest | `--tarball` — also create a `.tgz` package |
| `yarn twenty publish` | Build and publish to npm | `--tag <tag>` — npm dist-tag (e.g., `beta`, `next`) |
| `yarn twenty deploy` | Build and upload tarball to a server | `-r, --remote <name>` — target remote |
| `yarn twenty catalog-sync` | Trigger marketplace catalog sync on the server | `-r, --remote <name>` — target remote |
| `yarn twenty install` | Install a deployed app on a workspace | `-r, --remote <name>` — target remote |
| `yarn twenty dev` | Watch and sync local changes | Uses default remote |
| `yarn twenty remote add` | Add a server connection | `--url`, `--token`, `--as`, `--local`, `--port` |
| `yarn twenty remote list` | List configured remotes | — |
| `yarn twenty remote switch` | Set default remote | — |
| `yarn twenty remote status` | Show connection status | — |
| `yarn twenty remote remove` | Remove a remote | — |
@@ -15,19 +15,21 @@ Biblioteca twenty-sdk oferă blocuri de bază tipizate și funcții ajutătoare
SDK-ul oferă funcții ajutătoare pentru definirea entităților aplicației. După cum este descris în [Detectarea entităților](/l/ro/developers/extend/apps/getting-started#entity-detection), trebuie să folosiți `export default define<Entity>({...})` pentru ca entitățile să fie detectate:
| Funcție | Scop |
| -------------------------------- | ---------------------------------------------------------------------- |
| `defineApplication` | Configurați metadatele aplicației (obligatoriu, una per aplicație) |
| `defineObject` | Definiți obiecte personalizate cu câmpuri |
| `defineLogicFunction` | Definiți funcții de logică cu handleri |
| `definePreInstallLogicFunction` | Definește o funcție logică de pre-instalare (una per aplicație) |
| `definePostInstallLogicFunction` | Definește o funcție logică post-instalare (una per aplicație) |
| `defineFrontComponent` | Definiți componente Front pentru interfața de utilizator personalizată |
| `defineRole` | Configurați permisiunile rolurilor și accesul la obiecte |
| `defineField` | Extindeți obiectele existente cu câmpuri suplimentare |
| `defineView` | Definește vizualizări salvate pentru obiecte |
| `defineNavigationMenuItem` | Definește linkuri de navigare în bara laterală |
| `defineSkill` | Definiți abilități pentru agentul AI |
| Funcție | Scop |
| -------------------------------- | ----------------------------------------------------------------------------------- |
| `defineApplication` | Configurați metadatele aplicației (obligatoriu, una per aplicație) |
| `defineObject` | Definiți obiecte personalizate cu câmpuri |
| `defineField` | Extend existing objects with additional fields or define standalone relation fields |
| `defineLogicFunction` | Definiți funcții de logică cu handleri |
| `definePreInstallLogicFunction` | Definește o funcție logică de pre-instalare (una per aplicație) |
| `definePostInstallLogicFunction` | Definește o funcție logică post-instalare (una per aplicație) |
| `defineFrontComponent` | Definiți componente Front pentru interfața de utilizator personalizată |
| `defineRole` | Configurați permisiunile rolurilor și accesul la obiecte |
| `defineView` | Definește vizualizări salvate pentru obiecte |
| `defineNavigationMenuItem` | Definește linkuri de navigare în bara laterală |
| `defineSkill` | Definiți abilități pentru agentul AI |
| `defineAgent` | Define AI agents |
| `definePageLayout` | Define custom page layouts |
Aceste funcții validează configurația în timpul build-ului și oferă completare automată în IDE și siguranța tipurilor.
@@ -36,7 +38,7 @@ Aceste funcții validează configurația în timpul build-ului și oferă comple
Obiectele personalizate descriu atât schema, cât și comportamentul înregistrărilor din spațiul dvs. de lucru. Utilizați `defineObject()` pentru a defini obiecte cu validare încorporată:
```typescript
// src/app/postCard.object.ts
// src/objects/postCard.object.ts
import { defineObject, FieldType } from 'twenty-sdk';
enum PostCardStatus {
@@ -110,7 +112,7 @@ Puncte cheie:
* `universalIdentifier` trebuie să fie unic și stabil între implementări.
* Fiecare câmp necesită un `name`, un `type`, un `label` și propriul `universalIdentifier` stabil.
* Matricea `fields` este opțională — puteți defini obiecte fără câmpuri personalizate.
* Puteți genera obiecte noi folosind `yarn twenty entity:add`, care vă ghidează prin denumire, câmpuri și relații.
* You can scaffold new objects using `yarn twenty add`, which guides you through naming, fields, and relationships.
<Note>
**Câmpurile de bază sunt create automat.** Când definiți un obiect personalizat, Twenty adaugă automat câmpuri standard
@@ -120,6 +122,197 @@ Puteți suprascrie câmpurile implicite definind un câmp cu același nume în t
dar acest lucru nu este recomandat.
</Note>
### Definirea câmpurilor pe obiecte existente
Use `defineField()` to add fields to objects you don't own — such as standard Twenty objects (Person, Company, etc.) or objects from other apps. Unlike inline fields in `defineObject()`, standalone fields require an `objectUniversalIdentifier` to specify which object they extend:
```typescript
// src/fields/company-loyalty-tier.field.ts
import { defineField, FieldType } from 'twenty-sdk';
export default defineField({
universalIdentifier: 'f2a1b3c4-d5e6-7890-abcd-ef1234567890',
objectUniversalIdentifier: '701aecb9-eb1c-4d84-9d94-b954b231b64b', // Company object
name: 'loyaltyTier',
type: FieldType.SELECT,
label: 'Loyalty Tier',
icon: 'IconStar',
options: [
{ value: 'BRONZE', label: 'Bronze', position: 0, color: 'orange' },
{ value: 'SILVER', label: 'Silver', position: 1, color: 'gray' },
{ value: 'GOLD', label: 'Gold', position: 2, color: 'yellow' },
],
});
```
Puncte cheie:
* `objectUniversalIdentifier` identifies the target object. For standard objects, use `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS` exported from `twenty-sdk`.
* When defining fields inline in `defineObject()`, you do **not** need `objectUniversalIdentifier` — it's inherited from the parent object.
* `defineField()` is the only way to add fields to objects you didn't create with `defineObject()`.
### Relații
Relations connect objects together. In Twenty, relations are always **bidirectional** — you define both sides, and each side references the other.
There are two relation types:
| Tip relație | Descriere | Has foreign key? |
| ------------- | ------------------------------------------------------------- | ---------------------- |
| `MANY_TO_ONE` | Many records of this object point to one record of the target | Yes (`joinColumnName`) |
| `ONE_TO_MANY` | One record of this object has many records of the target | No (inverse side) |
#### How relations work
Every relation requires **two fields** that reference each other:
1. The **MANY_TO_ONE** side — lives on the object that holds the foreign key
2. The **ONE_TO_MANY** side — lives on the object that owns the collection
Both fields use `FieldType.RELATION` and cross-reference each other via `relationTargetFieldMetadataUniversalIdentifier`.
#### Example: Post Card has many Recipients
Suppose a `PostCard` can be sent to many `PostCardRecipient` records. Each recipient belongs to exactly one post card.
**Step 1: Define the ONE_TO_MANY side on PostCard** (the "one" side):
```typescript
// src/fields/post-card-recipients-on-post-card.field.ts
import { defineField, FieldType, RelationType } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_RECIPIENTS_FIELD_ID = 'a1111111-1111-1111-1111-111111111111';
// Import from the other side
import { POST_CARD_FIELD_ID } from './post-card-on-post-card-recipient.field';
export default defineField({
universalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCardRecipients',
label: 'Post Card Recipients',
icon: 'IconUsers',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_FIELD_ID,
universalSettings: {
relationType: RelationType.ONE_TO_MANY,
},
});
```
**Step 2: Define the MANY_TO_ONE side on PostCardRecipient** (the "many" side — holds the foreign key):
```typescript
// src/fields/post-card-on-post-card-recipient.field.ts
import { defineField, FieldType, RelationType, OnDeleteAction } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_FIELD_ID = 'b2222222-2222-2222-2222-222222222222';
// Import from the other side
import { POST_CARD_RECIPIENTS_FIELD_ID } from './post-card-recipients-on-post-card.field';
export default defineField({
universalIdentifier: POST_CARD_FIELD_ID,
objectUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
icon: 'IconMail',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
});
```
<Note>
**Circular imports:** Both relation fields reference each other's `universalIdentifier`. To avoid circular import issues, export your field IDs as named constants from each file, and import them in the other file. The build system resolves these at compile time.
</Note>
#### Relating to standard objects
To create a relation with a built-in Twenty object (Person, Company, etc.), use `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS`:
```typescript
// src/fields/person-on-self-hosting-user.field.ts
import {
defineField,
FieldType,
RelationType,
OnDeleteAction,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk';
import { SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER } from '../objects/self-hosting-user.object';
export const PERSON_FIELD_ID = 'c3333333-3333-3333-3333-333333333333';
export const SELF_HOSTING_USER_REVERSE_FIELD_ID = 'd4444444-4444-4444-4444-444444444444';
export default defineField({
universalIdentifier: PERSON_FIELD_ID,
objectUniversalIdentifier: SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'person',
label: 'Person',
description: 'Person matching with the self hosting user',
isNullable: true,
relationTargetObjectMetadataUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
relationTargetFieldMetadataUniversalIdentifier: SELF_HOSTING_USER_REVERSE_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.SET_NULL,
joinColumnName: 'personId',
},
});
```
#### Relation field properties
| Proprietate | Obligatoriu | Descriere |
| ------------------------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------- |
| `tip` | Da | Must be `FieldType.RELATION` |
| `relationTargetObjectMetadataUniversalIdentifier` | Da | The `universalIdentifier` of the target object |
| `relationTargetFieldMetadataUniversalIdentifier` | Da | The `universalIdentifier` of the matching field on the target object |
| `universalSettings.relationType` | Da | `RelationType.MANY_TO_ONE` or `RelationType.ONE_TO_MANY` |
| `universalSettings.onDelete` | MANY_TO_ONE only | What happens when the referenced record is deleted: `CASCADE`, `SET_NULL`, `RESTRICT`, or `NO_ACTION` |
| `universalSettings.joinColumnName` | MANY_TO_ONE only | Database column name for the foreign key (e.g., `postCardId`) |
#### Inline relation fields in defineObject
You can also define relation fields directly inside `defineObject()`. In that case, omit `objectUniversalIdentifier` — it's inherited from the parent object:
```typescript
export default defineObject({
universalIdentifier: '...',
nameSingular: 'postCardRecipient',
// ...
fields: [
{
universalIdentifier: POST_CARD_FIELD_ID,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
},
// ... other fields
],
});
```
### Configurația aplicației (application-config.ts)
Fiecare aplicație are un singur fișier `application-config.ts` care descrie:
@@ -161,13 +354,29 @@ Notițe:
* `defaultRoleUniversalIdentifier` trebuie să corespundă fișierului de rol (vedeți mai jos).
* Funcțiile de pre-instalare și post-instalare sunt detectate automat în timpul construirii manifestului. Vezi [Funcții de pre-instalare](#pre-install-functions) și [Funcții post-instalare](#post-install-functions).
#### Marketplace metadata
If you plan to [publish your app](/l/ro/developers/extend/apps/publishing), these optional fields control how your app appears in the marketplace:
| Câmp | Descriere |
| ------------------ | --------------------------------------------------- |
| `autor` | Author or company name |
| `categorie` | App category for marketplace filtering |
| `logoUrl` | Path to your app logo (relative to `./assets/`) |
| `screenshots` | Array of screenshot paths (relative to `./assets/`) |
| `aboutDescription` | Longer markdown description for the "About" tab |
| `websiteUrl` | Link to your website |
| `termsUrl` | Link to terms of service |
| `emailSupport` | Support email address |
| `issueReportUrl` | Link to issue tracker |
#### Roluri și permisiuni
Aplicațiile pot defini roluri care încapsulează permisiuni asupra obiectelor și acțiunilor din spațiul dvs. de lucru. Câmpul `defaultRoleUniversalIdentifier` din `application-config.ts` desemnează rolul implicit utilizat de funcțiile de logică ale aplicației.
* Cheia API de runtime injectată ca `TWENTY_API_KEY` este derivată din acest rol implicit pentru funcții.
* Clientul tipizat va fi restricționat la permisiunile acordate acelui rol.
* Respectați principiul celui mai mic privilegiu: creați un rol dedicat doar cu permisiunile de care au nevoie funcțiile, apoi referiți identificatorul său universal.
* Follow least-privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
##### Rol implicit pentru funcții (*.role.ts)
@@ -220,7 +429,7 @@ export default defineRole({
Notițe:
* Porniți de la rolul generat, apoi restrângeți-l progresiv urmând principiul celui mai mic privilegiu.
* Start from the scaffolded role, then progressively restrict it following least-privilege.
* Înlocuiți `objectPermissions` și `fieldPermissions` cu obiectele/câmpurile de care au nevoie funcțiile.
* `permissionFlags` controlează accesul la capabilități la nivelul platformei. Mențineți-le la minimum; adăugați doar ceea ce aveți nevoie.
* Vedeți un exemplu funcțional în aplicația Hello World: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
@@ -230,7 +439,7 @@ Notițe:
Fiecare fișier de funcție folosește `defineLogicFunction()` pentru a exporta o configurație cu un handler și declanșatoare opționale.
```typescript
// src/app/createPostCard.logic-function.ts
// src/logic-functions/createPostCard.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import type { DatabaseEventPayload, ObjectRecordCreateEvent, CronPayload, RoutePayload } from 'twenty-sdk';
import { CoreApiClient, type Person } from 'twenty-sdk/generated';
@@ -324,7 +533,7 @@ export default definePreInstallLogicFunction({
Poți, de asemenea, să execuți manual funcția de pre-instalare oricând folosind CLI:
```bash filename="Terminal"
yarn twenty function:execute --preInstall
yarn twenty exec --preInstall
```
Puncte cheie:
@@ -334,7 +543,7 @@ Puncte cheie:
* Este permisă o singură funcție de pre-instalare per aplicație. Construirea manifestului va genera o eroare dacă este detectată mai mult de una.
* Proprietatea `universalIdentifier` a funcției este setată automat ca `preInstallLogicFunctionUniversalIdentifier` în manifestul aplicației în timpul build-ului — nu este nevoie să o referi în `defineApplication()`.
* Timpul de expirare implicit este setat la 300 de secunde (5 minute) pentru a permite sarcini de pregătire mai lungi.
* Funcțiile de pre-instalare nu au nevoie de declanșatoare — sunt invocate de platformă înainte de instalare sau manual prin `function:execute --preInstall`.
* Pre-install functions do not need triggers — they are invoked by the platform before installation or manually via `exec --preInstall`.
### Funcții post-instalare
@@ -362,7 +571,7 @@ export default definePostInstallLogicFunction({
Poți, de asemenea, să execuți manual funcția post-instalare oricând folosind CLI:
```bash filename="Terminal"
yarn twenty function:execute --postInstall
yarn twenty exec --postInstall
```
Puncte cheie:
@@ -372,7 +581,7 @@ Puncte cheie:
* Este permisă o singură funcție de post-instalare per aplicație. Construirea manifestului va genera o eroare dacă este detectată mai mult de una.
* Proprietatea `universalIdentifier` a funcției este setată automat ca `postInstallLogicFunctionUniversalIdentifier` în manifestul aplicației în timpul build-ului — nu este nevoie să o referi în `defineApplication()`.
* Timpul de expirare implicit este setat la 300 de secunde (5 minute) pentru a permite sarcini de configurare mai lungi, cum ar fi popularea datelor.
* Funcțiile post-instalare nu au nevoie de declanșatoare — sunt invocate de platformă în timpul instalării sau manual prin `function:execute --postInstall`.
* Post-install functions do not need triggers — they are invoked by the platform during installation or manually via `exec --postInstall`.
### Payload-ul declanșatorului de rută
@@ -416,15 +625,15 @@ const handler = async (event: RoutePayload) => {
Tipul `RoutePayload` are următoarea structură:
| Proprietate | Tip | Descriere |
| ---------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------ |
| `headers` | `Record<string, string \| undefined>` | Anteturi HTTP (doar cele listate în `forwardedRequestHeaders`) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Parametri query string (valorile multiple unite cu virgule) |
| `pathParameters` | `Record<string, string \| undefined>` | Parametri de cale extrași din modelul rutei (de ex., `/users/:id` `{ id: '123' }`) |
| `body` | `object \| null` | Corpul cererii analizat (JSON) |
| `isBase64Encoded` | `boolean` | Indică dacă corpul este codificat în base64 |
| `requestContext.http.method` | `string` | Metoda HTTP (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `string` | Calea brută a cererii |
| Proprietate | Tip | Descriere |
| ---------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | Anteturi HTTP (doar cele listate în `forwardedRequestHeaders`) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Parametri query string (valorile multiple unite cu virgule) |
| `pathParameters` | `Record<string, string \| undefined>` | Path parameters extracted from the route pattern (e.g., `/users/:id` -> `{ id: '123' }`) |
| `body` | `object \| null` | Corpul cererii analizat (JSON) |
| `isBase64Encoded` | `boolean` | Indică dacă corpul este codificat în base64 |
| `requestContext.http.method` | `string` | Metoda HTTP (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `string` | Calea brută a cererii |
### Transmiterea anteturilor HTTP
@@ -466,7 +675,7 @@ const handler = async (event: RoutePayload) => {
Puteți crea funcții noi în două moduri:
* **Generat**: Rulați `yarn twenty entity:add` și alegeți opțiunea de a adăuga o funcție logică nouă. Aceasta generează un fișier inițial cu un handler și o configurație.
* **Scaffolded**: Run `yarn twenty add` and choose the option to add a new logic function. Aceasta generează un fișier inițial cu un handler și o configurație.
* **Manual**: Creați un fișier nou `*.logic-function.ts` și folosiți `defineLogicFunction()`, urmând același model.
### Marcarea unei funcții logice drept instrument
@@ -478,7 +687,7 @@ Pentru a marca o funcție logică drept instrument, setați `isTool: true` și f
```typescript
// src/logic-functions/enrich-company.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import { CoreApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const handler = async (params: { companyName: string; domain?: string }) => {
const client = new CoreApiClient();
@@ -567,7 +776,7 @@ Puncte cheie:
Puteți crea componente Front noi în două moduri:
* **Generat**: Rulați `yarn twenty entity:add` și alegeți opțiunea de a adăuga o componentă frontend nouă.
* **Scaffolded**: Run `yarn twenty add` and choose the option to add a new front component.
* **Manual**: Creați un fișier nou `.tsx` și folosiți `defineFrontComponent()`, urmând același model.
### Abilități
@@ -602,47 +811,122 @@ Puncte cheie:
Puteți crea abilități noi în două moduri:
* **Generat**: Rulați `yarn twenty entity:add` și alegeți opțiunea de a adăuga o abilitate nouă.
* **Scaffolded**: Run `yarn twenty add` and choose the option to add a new skill.
* **Manual**: Creați un fișier nou și folosiți `defineSkill()`, urmând același model.
### Clienți tipizați generați
### Typed API clients (`twenty-client-sdk`)
Doi clienți tipizați sunt generați automat de `yarn twenty dev` și stocați în `node_modules/twenty-sdk/generated`, pe baza schemei spațiului tău de lucru:
The `twenty-client-sdk` package provides two typed GraphQL clients for interacting with the Twenty API from your logic functions and front components:
* **`CoreApiClient`** — interoghează endpointul `/graphql` pentru datele spațiului de lucru
* **`MetadataApiClient`** — interoghează endpointul `/metadata` pentru configurarea spațiului de lucru și încărcarea fișierelor
| Client | Importați | Endpoint | Generated? |
| ------------------- | ---------------------------- | ---------------------------------------------- | ---------------------- |
| `CoreApiClient` | `twenty-client-sdk/core` | `/graphql` — workspace data (records, objects) | Yes, at dev/build time |
| `MetadataApiClient` | `twenty-client-sdk/metadata` | `/metadata` — workspace config, file uploads | No, ships pre-built |
#### CoreApiClient
`CoreApiClient` is the main client for querying and mutating workspace data. It is **generated from your workspace schema** during `yarn twenty dev` or `yarn twenty build`, so it's fully typed to match your objects and fields.
```typescript
import { CoreApiClient, MetadataApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const client = new CoreApiClient();
const { me } = await client.query({ me: { id: true, displayName: true } });
const metadataClient = new MetadataApiClient();
const { currentWorkspace } = await metadataClient.query({ currentWorkspace: { id: true } });
// Query records
const { companies } = await client.query({
companies: {
edges: {
node: {
id: true,
name: true,
domainName: true,
},
},
},
});
// Create a record
const { createCompany } = await client.mutation({
createCompany: {
__args: {
data: {
name: 'Acme Corp',
},
},
id: true,
name: true,
},
});
```
Ambii clienți sunt regenerați automat de `yarn twenty dev` ori de câte ori obiectele sau câmpurile tale se schimbă.
The client uses a selection-set syntax: pass `true` to include a field, use `__args` for arguments, and nest objects for relations. You get full autocompletion and type checking based on your workspace schema.
#### Acreditări la runtime în funcțiile de logică
<Note>
**CoreApiClient is generated at dev/build time.** If you try to 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, generates a typed client using `@genql/cli`, writes the generated sources to `node_modules/twenty-client-sdk/dist/core/generated/`, and replaces the stubs in `node_modules/twenty-client-sdk/dist/core.mjs` and `node_modules/twenty-client-sdk/dist/core.cjs`.
</Note>
Când funcția rulează pe Twenty, platforma injectează acreditări ca variabile de mediu înainte de execuția codului:
#### Using CoreSchema for type annotations
* `TWENTY_API_URL`: URL-ul de bază al API-ului Twenty către care țintește aplicația.
* `TWENTY_API_KEY`: Cheie cu durată scurtă, limitată la rolul implicit de funcție al aplicației.
`CoreSchema` provides TypeScript types matching your workspace objects, useful for typing component state or function parameters:
Notițe:
```typescript
import { CoreApiClient, CoreSchema } from 'twenty-client-sdk/core';
import { useState } from 'react';
* Nu trebuie să transmiteți URL-ul sau cheia API către clientul generat. Acesta citește `TWENTY_API_URL` și `TWENTY_API_KEY` din process.env la runtime.
* Permisiunile cheii API sunt determinate de rolul referențiat în `application-config.ts` prin `defaultRoleUniversalIdentifier`. Acesta este rolul implicit folosit de funcțiile de logică ale aplicației.
* Aplicațiile pot defini roluri pentru a urma principiul celui mai mic privilegiu. Acordați doar permisiunile de care au nevoie funcțiile, apoi setați `defaultRoleUniversalIdentifier` la identificatorul universal al acelui rol.
const [company, setCompany] = useState<
Pick<CoreSchema.Company, 'id' | 'name'> | undefined
>(undefined);
const client = new CoreApiClient();
const result = await client.query({
company: {
__args: { filter: { position: { eq: 1 } } },
id: true,
name: true,
},
});
setCompany(result.company);
```
#### MetadataApiClient
`MetadataApiClient` ships pre-built with the SDK (no generation required). It queries the `/metadata` endpoint for workspace configuration, applications, and file uploads:
```typescript
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
const metadataClient = new MetadataApiClient();
// Query workspace info
const { currentWorkspace } = await metadataClient.query({
currentWorkspace: { id: true, displayName: true },
});
// List installed applications
const { findManyApplications } = await metadataClient.query({
findManyApplications: {
id: true,
name: true,
version: true,
},
});
```
#### Runtime credentials
When your code runs on Twenty (logic functions or front components), the platform injects credentials as environment variables:
* `TWENTY_API_URL` — Base URL of the Twenty API
* `TWENTY_API_KEY` — Short-lived key scoped to your application's default function role
You do **not** need to pass these to the clients — they read from `process.env` automatically. The API key's permissions are determined by the role referenced in `defaultRoleUniversalIdentifier` in your `application-config.ts`.
#### Încărcarea fișierelor
Clientul `MetadataApiClient` generat include o metodă `uploadFile` pentru atașarea fișierelor la câmpuri de tip fișier ale obiectelor din spațiul tău de lucru. Deoarece clienții GraphQL standard nu acceptă în mod nativ încărcarea fișierelor multipart, clientul oferă această metodă dedicată care implementează, sub capotă, [specificația cererilor GraphQL multipart](https://github.com/jaydenseric/graphql-multipart-request-spec).
`MetadataApiClient` includes an `uploadFile` method for attaching files to file-type fields. It implements the [GraphQL multipart request specification](https://github.com/jaydenseric/graphql-multipart-request-spec):
```typescript
import { MetadataApiClient } from 'twenty-sdk/generated';
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
import * as fs from 'fs';
const metadataClient = new MetadataApiClient();
@@ -652,25 +936,14 @@ const fileBuffer = fs.readFileSync('./invoice.pdf');
const uploadedFile = await metadataClient.uploadFile(
fileBuffer, // file contents as a Buffer
'invoice.pdf', // filename
'application/pdf', // MIME type (defaults to 'application/octet-stream')
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universal identifier
'application/pdf', // MIME type
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universalIdentifier
);
console.log(uploadedFile);
// { id: '...', path: '...', size: 12345, createdAt: '...', url: 'https://...' }
```
Semnătura metodei:
```typescript
uploadFile(
fileBuffer: Buffer,
filename: string,
contentType: string,
fieldMetadataUniversalIdentifier: string,
): Promise<{ id: string; path: string; size: number; createdAt: string; url: string }>
```
| Parametru | Tip | Descriere |
| ---------------------------------- | -------- | ------------------------------------------------------------------------------------------- |
| `fileBuffer` | `Buffer` | Conținutul brut al fișierului |
@@ -680,8 +953,7 @@ uploadFile(
Puncte cheie:
* Metoda `uploadFile` este disponibilă pe `MetadataApiClient` deoarece mutația de încărcare este rezolvată de endpointul `/metadata`.
* Folosește `universalIdentifier` al câmpului (nu ID-ul specific spațiului de lucru), astfel încât codul tău de încărcare funcționează în orice spațiu de lucru în care aplicația ta este instalată — în concordanță cu modul în care aplicațiile fac referire la câmpuri în rest.
* Uses the field's `universalIdentifier` (not its workspace-specific ID), so your upload code works across any workspace where your app is installed.
* `url` returnat este un URL semnat pe care îl poți folosi pentru a accesa fișierul încărcat.
### Exemplu Hello World
@@ -49,7 +49,7 @@ De aici puteți:
```bash filename="Terminal"
# Add a new entity to your application (guided)
yarn twenty entity:add
yarn twenty add
# Watch your application's function logs
yarn twenty function:logs
@@ -123,7 +123,7 @@ Cu `--minimal`, sunt create doar fișierele de bază (`application-config.ts`, `
Pe scurt:
* **package.json**: Declară numele aplicației, versiunea, motoarele (Node 24+, Yarn 4) și adaugă `twenty-sdk` plus un script `twenty` care deleagă către CLI-ul local `twenty`. Rulați `yarn twenty help` pentru a lista toate comenzile disponibile.
* **.gitignore**: Ignoră artefacte comune precum `node_modules`, `.yarn`, `generated/` (client tipizat), `dist/`, `build/`, foldere de coverage, fișiere jurnal și fișiere `.env*`.
* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `.twenty/`, `dist/`, `build/`, coverage folders, log files, and `.env*` files.
* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Blochează și configurează lanțul de instrumente Yarn 4 folosit de proiect.
* **.nvmrc**: Fixează versiunea Node.js așteptată de proiect.
* **.oxlintrc.json** și **tsconfig.json**: Oferă linting și configurație TypeScript pentru fișierele TypeScript ale aplicației.
@@ -167,8 +167,8 @@ export default defineObject({
Comenzile ulterioare vor adăuga mai multe fișiere și foldere:
* `yarn twenty dev` va genera automat doi clienți API tipizați în `node_modules/twenty-sdk/generated`: `CoreApiClient` (pentru datele spațiului de lucru prin `/graphql`) și `MetadataApiClient` (pentru configurarea spațiului de lucru și încărcarea fișierelor prin `/metadata`).
* `yarn twenty entity:add` va adăuga fișiere de definire a entităților în `src/` pentru obiectele, funcțiile, componentele front-end, rolurile, abilitățile și altele.
* `yarn twenty dev` will auto-generate the typed `CoreApiClient` (for workspace data via `/graphql`) into `node_modules/twenty-client-sdk/`. The `MetadataApiClient` (for workspace configuration and file uploads via `/metadata`) ships pre-built and is available immediately. Import them from `twenty-client-sdk/core` and `twenty-client-sdk/metadata` respectively.
* `yarn twenty add` will add entity definition files under `src/` for your custom objects, functions, front components, roles, skills, and more.
## Autentificare
@@ -12,7 +12,25 @@ Aplicațiile sunt în prezent în testare alfa. Caracteristica funcționează, d
După ce aplicația ta este [construită și testată local](/l/ro/developers/extend/apps/building), ai două căi pentru distribuire:
* **Publică pe npm** — listează aplicația ta în marketplace-ul Twenty pentru ca orice spațiu de lucru să o poată descoperi și instala.
* **Trimite un tarball** — implementează aplicația ta pe un server Twenty specific pentru utilizare internă, fără a o face disponibilă public.
* **Implementați o arhivă tar** — încărcați aplicația direct pe un server Twenty anume pentru uz intern sau privat.
Ambele căi pornesc din aceeași etapă de **build**.
## Construirea aplicației
Comanda `build` compilează sursele TypeScript, transpilează funcțiile de logică și componentele de front-end și generează un `manifest.json` care descrie conținutul aplicației:
```bash filename="Terminal"
yarn twenty build
```
Rezultatul este scris în `.twenty/output/`. This directory contains everything needed for distribution: compiled code, assets, the manifest, and a copy of your `package.json`.
To also create a `.tgz` tarball (used by the deploy command internally, or for manual distribution):
```bash filename="Terminal"
yarn twenty build --tarball
```
## Publicarea pe npm
@@ -21,29 +39,72 @@ Publicarea pe npm face ca aplicația ta să poată fi descoperită în marketpla
### Cerințe
* Un cont [npm](https://www.npmjs.com)
* Numele pachetului tău **trebuie** să folosească prefixul `twenty-app-` (de ex., `twenty-app-postcard-sender`)
* The `twenty-app` keyword **must** be listed in your `package.json` `keywords` array
### Adding the required keyword
The Twenty marketplace discovers apps by searching the npm registry for packages with the `twenty-app` keyword. Add it to your `package.json`:
```json filename="package.json"
{
"name": "twenty-app-postcard-sender",
"version": "1.0.0",
"keywords": ["twenty-app"],
...
}
```
<Note>
The marketplace searches for `keywords:twenty-app` on the npm registry. Without this keyword, your package won't appear in the marketplace even if it has the `twenty-app-` name prefix.
</Note>
### Pași
1. **Construiește-ți aplicația** — CLI compilează sursele TypeScript și generează manifestul aplicației:
1. **Build your app:**
```bash filename="Terminal"
yarn twenty build
```
2. **Publică pe npm** — publică pachetul construit în registrul npm:
2. **Publish to npm:**
```bash filename="Terminal"
npx twenty publish
yarn twenty publish
```
### Descoperire automată
This runs `npm publish` from the `.twenty/output/` directory.
Pachetele cu prefixul `twenty-app-` sunt descoperite automat de catalogul marketplace-ului Twenty. După publicare, aplicația ta apare în marketplace în câteva minute — fără înregistrare manuală sau aprobare necesară.
To publish under a specific dist-tag (e.g., `beta` or `next`):
```bash filename="Terminal"
yarn twenty publish --tag beta
```
### How marketplace discovery works
The Twenty server syncs its marketplace catalog from the npm registry **every hour**:
1. It searches for all npm packages with the `keywords:twenty-app` keyword
2. For each package, it fetches the `manifest.json` from the npm CDN
3. The app's metadata (name, description, author, logo, screenshots, category) is extracted from the manifest and displayed in the marketplace
After publishing, your app can take up to one hour to appear in the marketplace. To trigger the sync immediately instead of waiting for the next hourly run:
```bash filename="Terminal"
yarn twenty catalog-sync
```
To target a specific remote:
```bash filename="Terminal"
yarn twenty catalog-sync -r production
```
The metadata shown in the marketplace comes from your `defineApplication()` call in your app source code — fields like `displayName`, `description`, `author`, `category`, `logoUrl`, `screenshots`, `aboutDescription`, `websiteUrl`, and `termsUrl`.
### Publicare CI
Proiectul generat include un workflow GitHub Actions care publică la fiecare lansare. Acesta rulează `app:build`, apoi `npm publish --provenance` din rezultatul build-ului:
Proiectul generat include un workflow GitHub Actions care publică la fiecare lansare:
```yaml filename=".github/workflows/publish.yml"
name: Publish
@@ -72,48 +133,117 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
```
Pentru alte sisteme CI (GitLab CI, CircleCI etc.), se aplică aceleași trei comenzi: `yarn install`, `npx twenty build`, apoi `npm publish` din `.twenty/output`.
For other CI systems (GitLab CI, CircleCI, etc.), the same three commands apply: `yarn install`, `yarn twenty build`, then `npm publish` from `.twenty/output`.
<Tip>
**npm provenance** este opțională, dar recomandată. Publicarea cu `--provenance` adaugă un badge de încredere la listarea ta în npm, permițând utilizatorilor să verifice că pachetul a fost construit dintr-un commit specific într-un pipeline CI public. Vezi [documentația npm provenance](https://docs.npmjs.com/generating-provenance-statements) pentru instrucțiuni de configurare.
</Tip>
## Distribuire internă
## Deploying to a server (tarball)
Pentru aplicațiile pe care nu le dorești disponibile public — instrumente proprietare, integrări doar pentru enterprise sau build-uri experimentale — poți trimite un tarball direct pe un server Twenty.
For apps you don't want publicly available — proprietary tools, enterprise-only integrations, or experimental builds — you can deploy a tarball directly to a Twenty server.
### Trimite un tarball
### Cerințe
Construiește-ți aplicația și implementeaz-o pe un server specific, într-un singur pas:
Before deploying, you need a configured remote pointing to the target server. Remotes store the server URL and authentication credentials locally in `~/.twenty/config.json`.
Add a remote:
```bash filename="Terminal"
npx twenty publish --server <server-url>
yarn twenty remote add --url https://your-twenty-server.com --as production
```
Orice spațiu de lucru de pe acel server poate apoi instala și actualiza aplicația din pagina de setări **Applications**.
For a local development server:
```bash filename="Terminal"
yarn twenty remote add --local --as local
```
You can also authenticate with an API key for non-interactive environments:
```bash filename="Terminal"
yarn twenty remote add --url https://your-twenty-server.com --token <api-key> --as production
```
Manage your remotes:
```bash filename="Terminal"
yarn twenty remote list # List all configured remotes
yarn twenty remote switch prod # Set the default remote
yarn twenty remote status # Show active remote and auth status
yarn twenty remote remove old # Remove a remote
```
### Deploying
Build and upload your app to the server in one step:
```bash filename="Terminal"
yarn twenty deploy
```
This builds the app with `--tarball`, then uploads the tarball to the default remote via a GraphQL multipart upload.
To deploy to a specific remote:
```bash filename="Terminal"
yarn twenty deploy -r production
```
### Sharing a deployed app
Tarball apps are not listed in the public marketplace, so other workspaces on the same server won't discover them by browsing. To share a deployed app:
1. Go to **Settings > Applications > Registrations** and open your app
2. In the **Distribution** tab, click **Copy share link**
3. Share this link with users on other workspaces — it takes them directly to the app's install page
The share link uses the server's base URL (without any workspace subdomain) so it works for any workspace on the server.
### Gestionarea versiunilor
Pentru a lansa o actualizare:
1. Actualizează câmpul `version` din `package.json`
2. Trimite un tarball nou cu `npx twenty publish --server <server-url>`
3. Spațiile de lucru de pe acel server vor vedea actualizarea disponibilă în setările lor
2. Run `yarn twenty deploy` (or `yarn twenty deploy -r production`)
3. Workspaces that have the app installed will see the upgrade available in their settings
<Note>
Aplicațiile interne sunt limitate la serverul pe care sunt trimise. Acestea nu vor apărea în marketplace-ul public și nu pot fi instalate de spațiile de lucru de pe alte servere.
</Note>
## Installing apps
## Categorii de aplicații
Once an app is published (npm) or deployed (tarball), workspaces install it through the UI:
```bash filename="Terminal"
yarn twenty install
```
Or from the **Settings > Applications** page in the Twenty UI, where both marketplace and tarball-deployed apps can be browsed and installed.
## App distribution categories
Twenty organizează aplicațiile în trei categorii, în funcție de modul în care sunt distribuite:
| Categorie | Cum funcționează | Vizibilă în marketplace? |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
| **Dezvoltare** | Aplicații în modul de dezvoltare local, rulate prin `yarn twenty dev`. Folosite pentru construire și testare. | Nu |
| **Publicat** | Aplicații publicate pe npm cu prefixul `twenty-app-`. Listate în marketplace pentru ca orice spațiu de lucru să le poată instala. | Da |
| **Intern** | Aplicații implementate prin tarball pe un server specific. Disponibile doar pentru spațiile de lucru de pe acel server. | Nu |
| Categorie | Cum funcționează | Vizibilă în marketplace? |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
| **Dezvoltare** | Aplicații în modul de dezvoltare local, rulate prin `yarn twenty dev`. Folosite pentru construire și testare. | Nu |
| **Published (npm)** | Apps published to npm with the `twenty-app` keyword. Listate în marketplace pentru ca orice spațiu de lucru să le poată instala. | Da |
| **Internal (tarball)** | Aplicații implementate prin tarball pe un server specific. Available only to workspaces on that server via a share link. | Nu |
<Tip>
Pornește în modul **Dezvoltare** în timp ce îți construiești aplicația. Când este gata, alege **Publicat** (npm) pentru distribuire largă sau **Intern** (tarball) pentru implementare privată.
</Tip>
## CLI reference
| Comandă | Descriere | Key flags |
| --------------------------- | ---------------------------------------------- | --------------------------------------------------- |
| `yarn twenty build` | Compile app and generate manifest | `--tarball` — also create a `.tgz` package |
| `yarn twenty publish` | Build and publish to npm | `--tag <tag>` — npm dist-tag (e.g., `beta`, `next`) |
| `yarn twenty deploy` | Build and upload tarball to a server | `-r, --remote <name>` — target remote |
| `yarn twenty catalog-sync` | Trigger marketplace catalog sync on the server | `-r, --remote <name>` — target remote |
| `yarn twenty install` | Install a deployed app on a workspace | `-r, --remote <name>` — target remote |
| `yarn twenty dev` | Watch and sync local changes | Uses default remote |
| `yarn twenty remote add` | Add a server connection | `--url`, `--token`, `--as`, `--local`, `--port` |
| `yarn twenty remote list` | List configured remotes | — |
| `yarn twenty remote switch` | Set default remote | — |
| `yarn twenty remote status` | Show connection status | — |
| `yarn twenty remote remove` | Remove a remote | — |
@@ -15,19 +15,21 @@ description: Определяйте объекты, функции логики,
SDK предоставляет вспомогательные функции для определения сущностей вашего приложения. Как описано в [Обнаружение сущностей](/l/ru/developers/extend/apps/getting-started#entity-detection), вы должны использовать `export default define<Entity>({...})`, чтобы ваши сущности были обнаружены:
| Функция | Назначение |
| -------------------------------- | ------------------------------------------------------------------------ |
| `defineApplication` | Настройка метаданных приложения (обязательно, по одному на приложение) |
| `defineObject` | Определяет пользовательские объекты с полями |
| `defineLogicFunction` | Определение логических функций с обработчиками |
| `definePreInstallLogicFunction` | Определяет предустановочную логическую функцию (по одной на приложение) |
| `definePostInstallLogicFunction` | Определяет послеустановочную логическую функцию (по одной на приложение) |
| `defineFrontComponent` | Определение фронт-компонентов для настраиваемого интерфейса |
| `defineRole` | Настраивает права роли и доступ к объектам |
| `defineField` | Расширение существующих объектов дополнительными полями |
| `defineView` | Определяйте сохранённые представления для объектов |
| `defineNavigationMenuItem` | Определяйте ссылки боковой панели навигации |
| `defineSkill` | Определение навыков агента ИИ |
| Функция | Назначение |
| -------------------------------- | ----------------------------------------------------------------------------------- |
| `defineApplication` | Настройка метаданных приложения (обязательно, по одному на приложение) |
| `defineObject` | Определяет пользовательские объекты с полями |
| `defineField` | Extend existing objects with additional fields or define standalone relation fields |
| `defineLogicFunction` | Определение логических функций с обработчиками |
| `definePreInstallLogicFunction` | Определяет предустановочную логическую функцию (по одной на приложение) |
| `definePostInstallLogicFunction` | Определяет послеустановочную логическую функцию (по одной на приложение) |
| `defineFrontComponent` | Определение фронт-компонентов для настраиваемого интерфейса |
| `defineRole` | Настраивает права роли и доступ к объектам |
| `defineView` | Определяйте сохранённые представления для объектов |
| `defineNavigationMenuItem` | Определяйте ссылки боковой панели навигации |
| `defineSkill` | Определение навыков агента ИИ |
| `defineAgent` | Define AI agents |
| `definePageLayout` | Define custom page layouts |
Эти функции проверяют вашу конфигурацию на этапе сборки и обеспечивают автодополнение в IDE и безопасность типов.
@@ -36,7 +38,7 @@ SDK предоставляет вспомогательные функции д
Пользовательские объекты описывают как схему, так и поведение записей в вашем рабочем пространстве. Используйте `defineObject()` для определения объектов со встроенной валидацией:
```typescript
// src/app/postCard.object.ts
// src/objects/postCard.object.ts
import { defineObject, FieldType } from 'twenty-sdk';
enum PostCardStatus {
@@ -110,7 +112,7 @@ export default defineObject({
* `universalIdentifier` должен быть уникальным и стабильным между развёртываниями.
* Каждому полю требуются `name`, `type`, `label` и собственный стабильный `universalIdentifier`.
* Массив `fields` необязателен — вы можете определять объекты без пользовательских полей.
* Вы можете сгенерировать новые объекты с помощью `yarn twenty entity:add`, который проведёт вас через настройку имени, полей и связей.
* You can scaffold new objects using `yarn twenty add`, which guides you through naming, fields, and relationships.
<Note>
**Базовые поля создаются автоматически.** Когда вы определяете пользовательский объект, Twenty автоматически добавляет стандартные поля,
@@ -120,6 +122,197 @@ export default defineObject({
но это не рекомендуется.
</Note>
### Определение полей для существующих объектов
Use `defineField()` to add fields to objects you don't own — such as standard Twenty objects (Person, Company, etc.) or objects from other apps. Unlike inline fields in `defineObject()`, standalone fields require an `objectUniversalIdentifier` to specify which object they extend:
```typescript
// src/fields/company-loyalty-tier.field.ts
import { defineField, FieldType } from 'twenty-sdk';
export default defineField({
universalIdentifier: 'f2a1b3c4-d5e6-7890-abcd-ef1234567890',
objectUniversalIdentifier: '701aecb9-eb1c-4d84-9d94-b954b231b64b', // Company object
name: 'loyaltyTier',
type: FieldType.SELECT,
label: 'Loyalty Tier',
icon: 'IconStar',
options: [
{ value: 'BRONZE', label: 'Bronze', position: 0, color: 'orange' },
{ value: 'SILVER', label: 'Silver', position: 1, color: 'gray' },
{ value: 'GOLD', label: 'Gold', position: 2, color: 'yellow' },
],
});
```
Основные моменты:
* `objectUniversalIdentifier` identifies the target object. For standard objects, use `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS` exported from `twenty-sdk`.
* When defining fields inline in `defineObject()`, you do **not** need `objectUniversalIdentifier` — it's inherited from the parent object.
* `defineField()` is the only way to add fields to objects you didn't create with `defineObject()`.
### Связи
Relations connect objects together. In Twenty, relations are always **bidirectional** — you define both sides, and each side references the other.
There are two relation types:
| Тип отношения | Описание | Has foreign key? |
| ------------- | ------------------------------------------------------------- | ---------------------- |
| `MANY_TO_ONE` | Many records of this object point to one record of the target | Yes (`joinColumnName`) |
| `ONE_TO_MANY` | One record of this object has many records of the target | No (inverse side) |
#### How relations work
Every relation requires **two fields** that reference each other:
1. The **MANY_TO_ONE** side — lives on the object that holds the foreign key
2. The **ONE_TO_MANY** side — lives on the object that owns the collection
Both fields use `FieldType.RELATION` and cross-reference each other via `relationTargetFieldMetadataUniversalIdentifier`.
#### Example: Post Card has many Recipients
Suppose a `PostCard` can be sent to many `PostCardRecipient` records. Each recipient belongs to exactly one post card.
**Step 1: Define the ONE_TO_MANY side on PostCard** (the "one" side):
```typescript
// src/fields/post-card-recipients-on-post-card.field.ts
import { defineField, FieldType, RelationType } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_RECIPIENTS_FIELD_ID = 'a1111111-1111-1111-1111-111111111111';
// Import from the other side
import { POST_CARD_FIELD_ID } from './post-card-on-post-card-recipient.field';
export default defineField({
universalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCardRecipients',
label: 'Post Card Recipients',
icon: 'IconUsers',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_FIELD_ID,
universalSettings: {
relationType: RelationType.ONE_TO_MANY,
},
});
```
**Step 2: Define the MANY_TO_ONE side on PostCardRecipient** (the "many" side — holds the foreign key):
```typescript
// src/fields/post-card-on-post-card-recipient.field.ts
import { defineField, FieldType, RelationType, OnDeleteAction } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_FIELD_ID = 'b2222222-2222-2222-2222-222222222222';
// Import from the other side
import { POST_CARD_RECIPIENTS_FIELD_ID } from './post-card-recipients-on-post-card.field';
export default defineField({
universalIdentifier: POST_CARD_FIELD_ID,
objectUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
icon: 'IconMail',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
});
```
<Note>
**Circular imports:** Both relation fields reference each other's `universalIdentifier`. To avoid circular import issues, export your field IDs as named constants from each file, and import them in the other file. The build system resolves these at compile time.
</Note>
#### Relating to standard objects
To create a relation with a built-in Twenty object (Person, Company, etc.), use `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS`:
```typescript
// src/fields/person-on-self-hosting-user.field.ts
import {
defineField,
FieldType,
RelationType,
OnDeleteAction,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk';
import { SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER } from '../objects/self-hosting-user.object';
export const PERSON_FIELD_ID = 'c3333333-3333-3333-3333-333333333333';
export const SELF_HOSTING_USER_REVERSE_FIELD_ID = 'd4444444-4444-4444-4444-444444444444';
export default defineField({
universalIdentifier: PERSON_FIELD_ID,
objectUniversalIdentifier: SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'person',
label: 'Person',
description: 'Person matching with the self hosting user',
isNullable: true,
relationTargetObjectMetadataUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
relationTargetFieldMetadataUniversalIdentifier: SELF_HOSTING_USER_REVERSE_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.SET_NULL,
joinColumnName: 'personId',
},
});
```
#### Relation field properties
| Свойство | Обязательно | Описание |
| ------------------------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------- |
| `type` | Да | Must be `FieldType.RELATION` |
| `relationTargetObjectMetadataUniversalIdentifier` | Да | The `universalIdentifier` of the target object |
| `relationTargetFieldMetadataUniversalIdentifier` | Да | The `universalIdentifier` of the matching field on the target object |
| `universalSettings.relationType` | Да | `RelationType.MANY_TO_ONE` or `RelationType.ONE_TO_MANY` |
| `universalSettings.onDelete` | MANY_TO_ONE only | What happens when the referenced record is deleted: `CASCADE`, `SET_NULL`, `RESTRICT`, or `NO_ACTION` |
| `universalSettings.joinColumnName` | MANY_TO_ONE only | Database column name for the foreign key (e.g., `postCardId`) |
#### Inline relation fields in defineObject
You can also define relation fields directly inside `defineObject()`. In that case, omit `objectUniversalIdentifier` — it's inherited from the parent object:
```typescript
export default defineObject({
universalIdentifier: '...',
nameSingular: 'postCardRecipient',
// ...
fields: [
{
universalIdentifier: POST_CARD_FIELD_ID,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
},
// ... other fields
],
});
```
### Конфигурация приложения (application-config.ts)
У каждого приложения есть единственный файл `application-config.ts`, который описывает:
@@ -161,13 +354,29 @@ export default defineApplication({
* `defaultRoleUniversalIdentifier` должен соответствовать файлу роли (см. ниже).
* Предустановочные и послеустановочные функции автоматически обнаруживаются во время сборки манифеста. См. [Предустановочные функции](#pre-install-functions) и [Послеустановочные функции](#post-install-functions).
#### Marketplace metadata
If you plan to [publish your app](/l/ru/developers/extend/apps/publishing), these optional fields control how your app appears in the marketplace:
| Поле | Описание |
| ------------------ | --------------------------------------------------- |
| `author` | Author or company name |
| `category` | App category for marketplace filtering |
| `logoUrl` | Path to your app logo (relative to `./assets/`) |
| `screenshots` | Array of screenshot paths (relative to `./assets/`) |
| `aboutDescription` | Longer markdown description for the "About" tab |
| `websiteUrl` | Link to your website |
| `termsUrl` | Link to terms of service |
| `emailSupport` | Support email address |
| `issueReportUrl` | Link to issue tracker |
#### Роли и разрешения
Приложения могут определять роли, инкапсулирующие права на объекты и действия в вашем рабочем пространстве. Поле `defaultRoleUniversalIdentifier` в `application-config.ts` обозначает роль по умолчанию, используемую логическими функциями вашего приложения.
* Ключ API во время выполнения, подставляемый как `TWENTY_API_KEY`, получается из этой роли функции по умолчанию.
* Типизированный клиент будет ограничен правами, предоставленными этой ролью.
* Следуйте принципу наименьших привилегий: создайте отдельную роль только с теми правами, которые нужны вашим функциям, и укажите её универсальный идентификатор.
* Follow least-privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
##### Роль функции по умолчанию (*.role.ts)
@@ -220,7 +429,7 @@ export default defineRole({
Заметки:
* Начните со сгенерированной роли, затем постепенно ограничивайте её, следуя принципу наименьших привилегий.
* Start from the scaffolded role, then progressively restrict it following least-privilege.
* Замените `objectPermissions` и `fieldPermissions` на объекты/поля, которые нужны вашим функциям.
* `permissionFlags` управляют доступом к возможностям на уровне платформы. Держите их минимальными; добавляйте только то, что нужно.
* См. рабочий пример в приложении Hello World: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
@@ -230,7 +439,7 @@ export default defineRole({
Каждый файл функции использует `defineLogicFunction()` для экспорта конфигурации с обработчиком и необязательными триггерами.
```typescript
// src/app/createPostCard.logic-function.ts
// src/logic-functions/createPostCard.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import type { DatabaseEventPayload, ObjectRecordCreateEvent, CronPayload, RoutePayload } from 'twenty-sdk';
import { CoreApiClient, type Person } from 'twenty-sdk/generated';
@@ -324,7 +533,7 @@ export default definePreInstallLogicFunction({
Вы также можете вручную выполнить предустановочную функцию в любое время с помощью CLI:
```bash filename="Terminal"
yarn twenty function:execute --preInstall
yarn twenty exec --preInstall
```
Основные моменты:
@@ -334,7 +543,7 @@ yarn twenty function:execute --preInstall
* Для каждого приложения допускается только одна предустановочная функция. Сборка манифеста завершится ошибкой, если будет обнаружено более одной такой функции.
* Параметр `universalIdentifier` функции автоматически устанавливается как `preInstallLogicFunctionUniversalIdentifier` в манифесте приложения во время сборки — вам не нужно ссылаться на него в `defineApplication()`.
* Тайм-аут по умолчанию установлен на 300 секунд (5 минут), чтобы обеспечить выполнение более длительных задач подготовки.
* Предустановочным функциям не нужны триггеры — платформа вызывает их перед установкой или вручную через `function:execute --preInstall`.
* Pre-install functions do not need triggers — they are invoked by the platform before installation or manually via `exec --preInstall`.
### Послеустановочные функции
@@ -362,7 +571,7 @@ export default definePostInstallLogicFunction({
Вы также можете вручную выполнить постустановочную функцию в любое время с помощью CLI:
```bash filename="Terminal"
yarn twenty function:execute --postInstall
yarn twenty exec --postInstall
```
Основные моменты:
@@ -372,7 +581,7 @@ yarn twenty function:execute --postInstall
* Для каждого приложения допускается только одна послеустановочная функция. Сборка манифеста завершится ошибкой, если будет обнаружено более одной такой функции.
* Параметр `universalIdentifier` функции автоматически устанавливается как `postInstallLogicFunctionUniversalIdentifier` в манифесте приложения во время сборки — вам не нужно ссылаться на него в `defineApplication()`.
* Тайм-аут по умолчанию установлен на 300 секунд (5 минут), чтобы позволить выполнять более длительные задачи настройки, такие как инициализация данных.
* Постустановочным функциям не нужны триггеры — платформа вызывает их во время установки или вручную через `function:execute --postInstall`.
* Post-install functions do not need triggers — they are invoked by the platform during installation or manually via `exec --postInstall`.
### Полезная нагрузка триггера маршрута
@@ -416,15 +625,15 @@ const handler = async (event: RoutePayload) => {
Тип `RoutePayload` имеет следующую структуру:
| Свойство | Тип | Описание |
| ---------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------ |
| `headers` | `Record<string, string \| undefined>` | HTTP-заголовки (только перечисленные в `forwardedRequestHeaders`) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Параметры строки запроса (несколько значений объединяются запятыми) |
| `pathParameters` | `Record<string, string \| undefined>` | Параметры пути, извлечённые из шаблона маршрута (например, `/users/:id` `{ id: '123' }`) |
| `body` | `object \| null` | Разобранное тело запроса (JSON) |
| `isBase64Encoded` | `логический тип` | Является ли тело закодированным в base64 |
| `requestContext.http.method` | `строка` | Метод HTTP (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `строка` | Необработанный путь запроса |
| Свойство | Тип | Описание |
| ---------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | HTTP-заголовки (только перечисленные в `forwardedRequestHeaders`) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Параметры строки запроса (несколько значений объединяются запятыми) |
| `pathParameters` | `Record<string, string \| undefined>` | Path parameters extracted from the route pattern (e.g., `/users/:id` -> `{ id: '123' }`) |
| `body` | `object \| null` | Разобранное тело запроса (JSON) |
| `isBase64Encoded` | `логический тип` | Является ли тело закодированным в base64 |
| `requestContext.http.method` | `строка` | Метод HTTP (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `строка` | Необработанный путь запроса |
### Проброс HTTP-заголовков
@@ -466,7 +675,7 @@ const handler = async (event: RoutePayload) => {
Вы можете создать новые функции двумя способами:
* **Сгенерировано**: Запустите `yarn twenty entity:add` и выберите опцию добавления новой функции логики. Это создаёт стартовый файл с обработчиком и конфигурацией.
* **Scaffolded**: Run `yarn twenty add` and choose the option to add a new logic function. Это создаёт стартовый файл с обработчиком и конфигурацией.
* **Вручную**: Создайте новый файл `*.logic-function.ts` и используйте `defineLogicFunction()`, следуя тому же шаблону.
### Пометка логической функции как инструмента
@@ -478,7 +687,7 @@ const handler = async (event: RoutePayload) => {
```typescript
// src/logic-functions/enrich-company.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import { CoreApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const handler = async (params: { companyName: string; domain?: string }) => {
const client = new CoreApiClient();
@@ -567,7 +776,7 @@ export default defineFrontComponent({
Вы можете создать новые фронт-компоненты двумя способами:
* **Сгенерировано**: Запустите `yarn twenty entity:add` и выберите опцию добавления нового фронтенд-компонента.
* **Scaffolded**: Run `yarn twenty add` and choose the option to add a new front component.
* **Вручную**: Создайте новый файл `.tsx` и используйте `defineFrontComponent()`, следуя тому же шаблону.
### Навыки
@@ -602,47 +811,122 @@ export default defineSkill({
Вы можете создать новые навыки двумя способами:
* **Сгенерировано**: Запустите `yarn twenty entity:add` и выберите опцию добавления нового навыка.
* **Scaffolded**: Run `yarn twenty add` and choose the option to add a new skill.
* **Вручную**: Создайте новый файл и используйте `defineSkill()`, следуя тому же шаблону.
### Сгенерированные типизированные клиенты
### Typed API clients (`twenty-client-sdk`)
Два типизированных клиента автоматически генерируются с помощью `yarn twenty dev` и сохраняются в `node_modules/twenty-sdk/generated` на основе схемы вашего рабочего пространства:
The `twenty-client-sdk` package provides two typed GraphQL clients for interacting with the Twenty API from your logic functions and front components:
* **`CoreApiClient`** — выполняет запросы к конечной точке `/graphql` для получения данных рабочего пространства
* **`MetadataApiClient`** — выполняет запросы к эндпоинту `/metadata` для получения конфигурации рабочего пространства и загрузки файлов.
| Клиент | Импорт | Endpoint | Generated? |
| ------------------- | ---------------------------- | ---------------------------------------------- | ---------------------- |
| `CoreApiClient` | `twenty-client-sdk/core` | `/graphql` — workspace data (records, objects) | Yes, at dev/build time |
| `MetadataApiClient` | `twenty-client-sdk/metadata` | `/metadata` — workspace config, file uploads | No, ships pre-built |
#### CoreApiClient
`CoreApiClient` is the main client for querying and mutating workspace data. It is **generated from your workspace schema** during `yarn twenty dev` or `yarn twenty build`, so it's fully typed to match your objects and fields.
```typescript
import { CoreApiClient, MetadataApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const client = new CoreApiClient();
const { me } = await client.query({ me: { id: true, displayName: true } });
const metadataClient = new MetadataApiClient();
const { currentWorkspace } = await metadataClient.query({ currentWorkspace: { id: true } });
// Query records
const { companies } = await client.query({
companies: {
edges: {
node: {
id: true,
name: true,
domainName: true,
},
},
},
});
// Create a record
const { createCompany } = await client.mutation({
createCompany: {
__args: {
data: {
name: 'Acme Corp',
},
},
id: true,
name: true,
},
});
```
Оба клиента автоматически перегенерируются с помощью `yarn twenty dev` при изменении ваших объектов или полей.
The client uses a selection-set syntax: pass `true` to include a field, use `__args` for arguments, and nest objects for relations. You get full autocompletion and type checking based on your workspace schema.
#### Учётные данные времени выполнения в логических функциях
<Note>
**CoreApiClient is generated at dev/build time.** If you try to 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, generates a typed client using `@genql/cli`, writes the generated sources to `node_modules/twenty-client-sdk/dist/core/generated/`, and replaces the stubs in `node_modules/twenty-client-sdk/dist/core.mjs` and `node_modules/twenty-client-sdk/dist/core.cjs`.
</Note>
Когда ваша функция запускается на Twenty, платформа подставляет учётные данные как переменные окружения перед выполнением вашего кода:
#### Using CoreSchema for type annotations
* `TWENTY_API_URL`: Базовый URL API Twenty, на который нацелено ваше приложение.
* `TWENTY_API_KEY`: Краткоживущий ключ, ограниченный ролью функции по умолчанию вашего приложения.
`CoreSchema` provides TypeScript types matching your workspace objects, useful for typing component state or function parameters:
Заметки:
```typescript
import { CoreApiClient, CoreSchema } from 'twenty-client-sdk/core';
import { useState } from 'react';
* Вам не нужно передавать URL или ключ API сгенерированному клиенту. Он читает `TWENTY_API_URL` и `TWENTY_API_KEY` из process.env во время выполнения.
* Права ключа API определяются ролью, на которую ссылается ваш `application-config.ts` через `defaultRoleUniversalIdentifier`. Это роль по умолчанию, используемая логическими функциями вашего приложения.
* Приложения могут определять роли, чтобы следовать принципу наименьших привилегий. Предоставляйте только те права, которые нужны вашим функциям, затем укажите в `defaultRoleUniversalIdentifier` универсальный идентификатор этой роли.
const [company, setCompany] = useState<
Pick<CoreSchema.Company, 'id' | 'name'> | undefined
>(undefined);
const client = new CoreApiClient();
const result = await client.query({
company: {
__args: { filter: { position: { eq: 1 } } },
id: true,
name: true,
},
});
setCompany(result.company);
```
#### MetadataApiClient
`MetadataApiClient` ships pre-built with the SDK (no generation required). It queries the `/metadata` endpoint for workspace configuration, applications, and file uploads:
```typescript
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
const metadataClient = new MetadataApiClient();
// Query workspace info
const { currentWorkspace } = await metadataClient.query({
currentWorkspace: { id: true, displayName: true },
});
// List installed applications
const { findManyApplications } = await metadataClient.query({
findManyApplications: {
id: true,
name: true,
version: true,
},
});
```
#### Runtime credentials
When your code runs on Twenty (logic functions or front components), the platform injects credentials as environment variables:
* `TWENTY_API_URL` — Base URL of the Twenty API
* `TWENTY_API_KEY` — Short-lived key scoped to your application's default function role
You do **not** need to pass these to the clients — they read from `process.env` automatically. The API key's permissions are determined by the role referenced in `defaultRoleUniversalIdentifier` in your `application-config.ts`.
#### Загрузка файлов
Сгенерированный `MetadataApiClient` включает метод `uploadFile` для прикрепления файлов к полям типа «файл» в объектах вашего рабочего пространства. Поскольку стандартные клиенты GraphQL изначально не поддерживают многочастовую загрузку файлов, клиент предоставляет специальный метод, который под капотом реализует [спецификацию многочастных запросов GraphQL](https://github.com/jaydenseric/graphql-multipart-request-spec).
`MetadataApiClient` includes an `uploadFile` method for attaching files to file-type fields. It implements the [GraphQL multipart request specification](https://github.com/jaydenseric/graphql-multipart-request-spec):
```typescript
import { MetadataApiClient } from 'twenty-sdk/generated';
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
import * as fs from 'fs';
const metadataClient = new MetadataApiClient();
@@ -652,25 +936,14 @@ const fileBuffer = fs.readFileSync('./invoice.pdf');
const uploadedFile = await metadataClient.uploadFile(
fileBuffer, // file contents as a Buffer
'invoice.pdf', // filename
'application/pdf', // MIME type (defaults to 'application/octet-stream')
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universal identifier
'application/pdf', // MIME type
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universalIdentifier
);
console.log(uploadedFile);
// { id: '...', path: '...', size: 12345, createdAt: '...', url: 'https://...' }
```
Сигнатура метода:
```typescript
uploadFile(
fileBuffer: Buffer,
filename: string,
contentType: string,
fieldMetadataUniversalIdentifier: string,
): Promise<{ id: string; path: string; size: number; createdAt: string; url: string }>
```
| Параметр | Тип | Описание |
| ---------------------------------- | -------- | ------------------------------------------------------------------------ |
| `fileBuffer` | `Buffer` | Необработанное содержимое файла |
@@ -680,8 +953,7 @@ uploadFile(
Основные моменты:
* Метод `uploadFile` доступен в `MetadataApiClient`, потому что мутация загрузки обрабатывается эндпоинтом `/metadata`.
* Он использует `universalIdentifier` поля (а не его идентификатор, специфичный для рабочего пространства), поэтому ваш код загрузки будет работать в любом рабочем пространстве, где установлено ваше приложение — в соответствии с тем, как приложения ссылаются на поля повсюду.
* Uses the field's `universalIdentifier` (not its workspace-specific ID), so your upload code works across any workspace where your app is installed.
* Возвращаемый `url` — это подписанный URL, который можно использовать для доступа к загруженному файлу.
### Пример Hello World
@@ -49,7 +49,7 @@ npx create-twenty-app@latest my-app --minimal
```bash filename="Terminal"
# Add a new entity to your application (guided)
yarn twenty entity:add
yarn twenty add
# Watch your application's function logs
yarn twenty function:logs
@@ -123,7 +123,7 @@ my-twenty-app/
В общих чертах:
* **package.json**: Объявляет имя приложения, версию, движки (Node 24+, Yarn 4) и добавляет `twenty-sdk`, а также скрипт `twenty`, который делегирует выполнение локальному CLI `twenty`. Выполните `yarn twenty help`, чтобы вывести список всех доступных команд.
* **.gitignore**: Игнорирует распространённые артефакты, такие как `node_modules`, `.yarn`, `generated/` (типизированный клиент), `dist/`, `build/`, каталоги coverage, файлы журналов и файлы `.env*`.
* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `.twenty/`, `dist/`, `build/`, coverage folders, log files, and `.env*` files.
* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Фиксируют и настраивают используемый в проекте инструментарий Yarn 4.
* **.nvmrc**: Фиксирует версию Node.js, ожидаемую проектом.
* **.oxlintrc.json** и **tsconfig.json**: Обеспечивают линтинг и конфигурацию TypeScript для исходников вашего приложения на TypeScript.
@@ -167,8 +167,8 @@ export default defineObject({
Позднее команды добавят больше файлов и папок:
* `yarn twenty dev` автоматически сгенерирует два типизированных клиента API в `node_modules/twenty-sdk/generated`: `CoreApiClient` (для данных рабочего пространства через `/graphql`) и `MetadataApiClient` (для конфигурации рабочего пространства и загрузки файлов через `/metadata`).
* `yarn twenty entity:add` добавит файлы определений сущностей в `src/` для ваших пользовательских объектов, функций, фронтенд-компонентов, ролей, навыков и многого другого.
* `yarn twenty dev` will auto-generate the typed `CoreApiClient` (for workspace data via `/graphql`) into `node_modules/twenty-client-sdk/`. The `MetadataApiClient` (for workspace configuration and file uploads via `/metadata`) ships pre-built and is available immediately. Import them from `twenty-client-sdk/core` and `twenty-client-sdk/metadata` respectively.
* `yarn twenty add` will add entity definition files under `src/` for your custom objects, functions, front components, roles, skills, and more.
## Аутентификация
@@ -12,7 +12,25 @@ description: Распространяйте своё приложение Twenty
После того как ваше приложение [собрано и протестировано локально](/l/ru/developers/extend/apps/building), у вас есть два пути для его распространения:
* **Опубликовать в npm** — разместите ваше приложение в маркетплейсе Twenty, чтобы любое рабочее пространство могло его найти и установить.
* **Отправить tarball** — разверните приложение на конкретном сервере Twenty для внутреннего использования, не делая его общедоступным.
* **Разверните tar-архив** — загрузите своё приложение напрямую на конкретный сервер Twenty для внутреннего или частного использования.
Оба пути начинаются с одного и того же шага **build**.
## Сборка вашего приложения
Команда `build` компилирует ваши исходники TypeScript, транспилирует функции логики и фронтенд-компоненты и генерирует `manifest.json`, который описывает содержимое вашего приложения:
```bash filename="Terminal"
yarn twenty build
```
Выходные данные записываются в `.twenty/output/`. This directory contains everything needed for distribution: compiled code, assets, the manifest, and a copy of your `package.json`.
To also create a `.tgz` tarball (used by the deploy command internally, or for manual distribution):
```bash filename="Terminal"
yarn twenty build --tarball
```
## Публикация в npm
@@ -21,29 +39,72 @@ description: Распространяйте своё приложение Twenty
### Требования
* Учётная запись [npm](https://www.npmjs.com)
* Название вашего пакета **должно** использовать префикс `twenty-app-` (например, `twenty-app-postcard-sender`)
* The `twenty-app` keyword **must** be listed in your `package.json` `keywords` array
### Adding the required keyword
The Twenty marketplace discovers apps by searching the npm registry for packages with the `twenty-app` keyword. Add it to your `package.json`:
```json filename="package.json"
{
"name": "twenty-app-postcard-sender",
"version": "1.0.0",
"keywords": ["twenty-app"],
...
}
```
<Note>
The marketplace searches for `keywords:twenty-app` on the npm registry. Without this keyword, your package won't appear in the marketplace even if it has the `twenty-app-` name prefix.
</Note>
### Шаги
1. **Соберите приложение** — CLI компилирует исходные файлы TypeScript и генерирует манифест приложения:
1. **Build your app:**
```bash filename="Terminal"
yarn twenty build
```
2. **Опубликуйте в npm** — отправьте собранный пакет в реестр npm:
2. **Publish to npm:**
```bash filename="Terminal"
npx twenty publish
yarn twenty publish
```
### Автоматическое обнаружение
This runs `npm publish` from the `.twenty/output/` directory.
Пакеты с префиксом `twenty-app-` автоматически обнаруживаются каталогом маркетплейса Twenty. После публикации ваше приложение появится в маркетплейсе в течение нескольких минут — ручная регистрация или одобрение не требуются.
To publish under a specific dist-tag (e.g., `beta` or `next`):
```bash filename="Terminal"
yarn twenty publish --tag beta
```
### How marketplace discovery works
The Twenty server syncs its marketplace catalog from the npm registry **every hour**:
1. It searches for all npm packages with the `keywords:twenty-app` keyword
2. For each package, it fetches the `manifest.json` from the npm CDN
3. The app's metadata (name, description, author, logo, screenshots, category) is extracted from the manifest and displayed in the marketplace
After publishing, your app can take up to one hour to appear in the marketplace. To trigger the sync immediately instead of waiting for the next hourly run:
```bash filename="Terminal"
yarn twenty catalog-sync
```
To target a specific remote:
```bash filename="Terminal"
yarn twenty catalog-sync -r production
```
The metadata shown in the marketplace comes from your `defineApplication()` call in your app source code — fields like `displayName`, `description`, `author`, `category`, `logoUrl`, `screenshots`, `aboutDescription`, `websiteUrl`, and `termsUrl`.
### Публикация через CI
Сгенерированный шаблоном проект включает workflow GitHub Actions, который выполняет публикацию при каждом релизе. Он запускает `app:build`, затем `npm publish --provenance` из результатов сборки:
Сгенерированный шаблоном проект включает рабочий процесс GitHub Actions, который выполняет публикацию при каждом релизе:
```yaml filename=".github/workflows/publish.yml"
name: Publish
@@ -72,48 +133,117 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
```
Для других CI-систем (GitLab CI, CircleCI и др.) применимы те же три команды: `yarn install`, `npx twenty build`, затем `npm publish` из `.twenty/output`.
For other CI systems (GitLab CI, CircleCI, etc.), the same three commands apply: `yarn install`, `yarn twenty build`, then `npm publish` from `.twenty/output`.
<Tip>
**npm provenance** — опционально, но рекомендуется. Публикация с флагом `--provenance` добавляет к вашему пакету в npm значок доверия, позволяя пользователям проверить, что пакет был собран из конкретного коммита в общедоступном конвейере CI. См. инструкции по настройке в [документации по npm provenance](https://docs.npmjs.com/generating-provenance-statements).
</Tip>
## Внутреннее распространение
## Deploying to a server (tarball)
Для приложений, которые вы не хотите делать общедоступными — собственные инструменты, интеграции только для предприятия или экспериментальные сборки — вы можете отправить tarball напрямую на сервер Twenty.
For apps you don't want publicly available — proprietary tools, enterprise-only integrations, or experimental builds — you can deploy a tarball directly to a Twenty server.
### Отправка tarball
### Требования
Соберите приложение и разверните его на конкретном сервере одним шагом:
Before deploying, you need a configured remote pointing to the target server. Remotes store the server URL and authentication credentials locally in `~/.twenty/config.json`.
Add a remote:
```bash filename="Terminal"
npx twenty publish --server <server-url>
yarn twenty remote add --url https://your-twenty-server.com --as production
```
Любое рабочее пространство на этом сервере сможет установить и обновить приложение на странице настроек **Applications**.
For a local development server:
```bash filename="Terminal"
yarn twenty remote add --local --as local
```
You can also authenticate with an API key for non-interactive environments:
```bash filename="Terminal"
yarn twenty remote add --url https://your-twenty-server.com --token <api-key> --as production
```
Manage your remotes:
```bash filename="Terminal"
yarn twenty remote list # List all configured remotes
yarn twenty remote switch prod # Set the default remote
yarn twenty remote status # Show active remote and auth status
yarn twenty remote remove old # Remove a remote
```
### Deploying
Build and upload your app to the server in one step:
```bash filename="Terminal"
yarn twenty deploy
```
This builds the app with `--tarball`, then uploads the tarball to the default remote via a GraphQL multipart upload.
To deploy to a specific remote:
```bash filename="Terminal"
yarn twenty deploy -r production
```
### Sharing a deployed app
Tarball apps are not listed in the public marketplace, so other workspaces on the same server won't discover them by browsing. To share a deployed app:
1. Go to **Settings > Applications > Registrations** and open your app
2. In the **Distribution** tab, click **Copy share link**
3. Share this link with users on other workspaces — it takes them directly to the app's install page
The share link uses the server's base URL (without any workspace subdomain) so it works for any workspace on the server.
### Управление версиями
Чтобы выпустить обновление:
1. Обновите значение поля `version` в файле `package.json`
2. Отправьте новый tarball командой `npx twenty publish --server <server-url>`
3. Рабочие пространства на этом сервере увидят доступное обновление в своих настройках
2. Run `yarn twenty deploy` (or `yarn twenty deploy -r production`)
3. Workspaces that have the app installed will see the upgrade available in their settings
<Note>
Внутренние приложения ограничены сервером, на который они отправлены. Они не появятся в публичном маркетплейсе и не могут быть установлены рабочими пространствами на других серверах.
</Note>
## Installing apps
## Категории приложений
Once an app is published (npm) or deployed (tarball), workspaces install it through the UI:
```bash filename="Terminal"
yarn twenty install
```
Or from the **Settings > Applications** page in the Twenty UI, where both marketplace and tarball-deployed apps can be browsed and installed.
## App distribution categories
Twenty группирует приложения в три категории в зависимости от способа их распространения:
| Категория | Как это работает | Отображается в маркетплейсе? |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- |
| **Разработка** | Локальные приложения в режиме разработки, запущенные через `yarn twenty dev`. Используются для сборки и тестирования. | Нет |
| **Опубликовано** | Приложения, опубликованные в npm с префиксом `twenty-app-`. Отображаются в маркетплейсе, доступные для установки любому рабочему пространству. | Да |
| **Внутренний** | Приложения, развернутые через tarball на конкретном сервере. Доступны только рабочим пространствам на этом сервере. | Нет |
| Категория | Как это работает | Отображается в маркетплейсе? |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- |
| **Разработка** | Локальные приложения в режиме разработки, запущенные через `yarn twenty dev`. Используются для сборки и тестирования. | Нет |
| **Published (npm)** | Apps published to npm with the `twenty-app` keyword. Отображаются в маркетплейсе, доступные для установки любому рабочему пространству. | Да |
| **Internal (tarball)** | Приложения, развернутые через tarball на конкретном сервере. Available only to workspaces on that server via a share link. | Нет |
<Tip>
Начните в режиме **Разработка** во время создания приложения. Когда будет готово, выберите **Опубликовано** (npm) для широкого распространения или **Внутренний** (tarball) для приватного развертывания.
</Tip>
## CLI reference
| Команда | Описание | Key flags |
| --------------------------- | ---------------------------------------------- | --------------------------------------------------- |
| `yarn twenty build` | Compile app and generate manifest | `--tarball` — also create a `.tgz` package |
| `yarn twenty publish` | Build and publish to npm | `--tag <tag>` — npm dist-tag (e.g., `beta`, `next`) |
| `yarn twenty deploy` | Build and upload tarball to a server | `-r, --remote <name>` — target remote |
| `yarn twenty catalog-sync` | Trigger marketplace catalog sync on the server | `-r, --remote <name>` — target remote |
| `yarn twenty install` | Install a deployed app on a workspace | `-r, --remote <name>` — target remote |
| `yarn twenty dev` | Watch and sync local changes | Uses default remote |
| `yarn twenty remote add` | Add a server connection | `--url`, `--token`, `--as`, `--local`, `--port` |
| `yarn twenty remote list` | List configured remotes | — |
| `yarn twenty remote switch` | Set default remote | — |
| `yarn twenty remote status` | Show connection status | — |
| `yarn twenty remote remove` | Remove a remote | — |
@@ -15,19 +15,21 @@ twenty-sdk, uygulamanız içinde kullandığınız türlendirilmiş yapı taşla
SDK, uygulama varlıklarınızı tanımlamak için yardımcı fonksiyonlar sağlar. [Varlık algılama](/l/tr/developers/extend/apps/getting-started#entity-detection) bölümünde açıklandığı gibi, varlıklarınızın algılanması için `export default define<Entity>({...})` kullanmalısınız:
| Fonksiyon | Amaç |
| -------------------------------- | ------------------------------------------------------------------------- |
| `defineApplication` | Uygulama meta verilerini yapılandırın (zorunlu, uygulama başına bir adet) |
| `defineObject` | Alanlara sahip özel nesneler tanımlayın |
| `defineLogicFunction` | İşleyicilerle mantık fonksiyonları tanımlayın |
| `definePreInstallLogicFunction` | Bir kurulum öncesi mantık işlevi tanımlayın (uygulama başına bir adet) |
| `definePostInstallLogicFunction` | Bir kurulum sonrası mantık işlevi tanımlayın (uygulama başına bir adet) |
| `defineFrontComponent` | Özel kullanıcı arayüzü için ön uç bileşenlerini tanımlayın |
| `defineRole` | Rol izinlerini ve nesne erişimini yapılandırın |
| `defineField` | Mevcut nesneleri ek alanlarla genişletin |
| `defineView` | Nesneler için kaydedilmiş görünümler tanımlayın |
| `defineNavigationMenuItem` | Kenar çubuğu gezinme bağlantılarını tanımlayın |
| `defineSkill` | Yapay zekâ ajanı yeteneklerini tanımlayın |
| Fonksiyon | Amaç |
| -------------------------------- | ----------------------------------------------------------------------------------- |
| `defineApplication` | Uygulama meta verilerini yapılandırın (zorunlu, uygulama başına bir adet) |
| `defineObject` | Alanlara sahip özel nesneler tanımlayın |
| `defineField` | Extend existing objects with additional fields or define standalone relation fields |
| `defineLogicFunction` | İşleyicilerle mantık fonksiyonları tanımlayın |
| `definePreInstallLogicFunction` | Bir kurulum öncesi mantık işlevi tanımlayın (uygulama başına bir adet) |
| `definePostInstallLogicFunction` | Bir kurulum sonrası mantık işlevi tanımlayın (uygulama başına bir adet) |
| `defineFrontComponent` | Özel kullanıcı arayüzü için ön uç bileşenlerini tanımlayın |
| `defineRole` | Rol izinlerini ve nesne erişimini yapılandırın |
| `defineView` | Nesneler için kaydedilmiş görünümler tanımlayın |
| `defineNavigationMenuItem` | Kenar çubuğu gezinme bağlantılarını tanımlayın |
| `defineSkill` | Yapay zekâ ajanı yeteneklerini tanımlayın |
| `defineAgent` | Define AI agents |
| `definePageLayout` | Define custom page layouts |
Bu fonksiyonlar, derleme zamanında yapılandırmanızı doğrular ve IDE otomatik tamamlama ile tür güvenliği sağlar.
@@ -36,7 +38,7 @@ Bu fonksiyonlar, derleme zamanında yapılandırmanızı doğrular ve IDE otomat
Özel nesneler, çalışma alanınızdaki kayıtlar için hem şemayı hem de davranışı tanımlar. Yerleşik doğrulamayla nesneler tanımlamak için `defineObject()` kullanın:
```typescript
// src/app/postCard.object.ts
// src/objects/postCard.object.ts
import { defineObject, FieldType } from 'twenty-sdk';
enum PostCardStatus {
@@ -110,7 +112,7 @@ export default defineObject({
* `universalIdentifier` dağıtımlar arasında benzersiz ve kararlı olmalıdır.
* Her alan bir `name`, `type`, `label` ve kendi kararlı `universalIdentifier` değerini gerektirir.
* `fields` dizisi isteğe bağlıdır — özel alanlar olmadan da nesneler tanımlayabilirsiniz.
* `yarn twenty entity:add` kullanarak, adlandırma, alanlar ve ilişkiler konusunda sizi yönlendirerek yeni nesneler oluşturabilirsiniz.
* You can scaffold new objects using `yarn twenty add`, which guides you through naming, fields, and relationships.
<Note>
**Temel alanlar otomatik olarak oluşturulur.** Özel bir nesne tanımladığınızda Twenty, standart alanları otomatik olarak ekler
@@ -120,6 +122,197 @@ Bunları `fields` dizinizde tanımlamanız gerekmez — yalnızca özel alanlar
ancak bu önerilmez.
</Note>
### Mevcut nesneler üzerinde alanları tanımlama
Use `defineField()` to add fields to objects you don't own — such as standard Twenty objects (Person, Company, etc.) or objects from other apps. Unlike inline fields in `defineObject()`, standalone fields require an `objectUniversalIdentifier` to specify which object they extend:
```typescript
// src/fields/company-loyalty-tier.field.ts
import { defineField, FieldType } from 'twenty-sdk';
export default defineField({
universalIdentifier: 'f2a1b3c4-d5e6-7890-abcd-ef1234567890',
objectUniversalIdentifier: '701aecb9-eb1c-4d84-9d94-b954b231b64b', // Company object
name: 'loyaltyTier',
type: FieldType.SELECT,
label: 'Loyalty Tier',
icon: 'IconStar',
options: [
{ value: 'BRONZE', label: 'Bronze', position: 0, color: 'orange' },
{ value: 'SILVER', label: 'Silver', position: 1, color: 'gray' },
{ value: 'GOLD', label: 'Gold', position: 2, color: 'yellow' },
],
});
```
Önemli noktalar:
* `objectUniversalIdentifier` identifies the target object. For standard objects, use `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS` exported from `twenty-sdk`.
* When defining fields inline in `defineObject()`, you do **not** need `objectUniversalIdentifier` — it's inherited from the parent object.
* `defineField()` is the only way to add fields to objects you didn't create with `defineObject()`.
### İlişkiler
Relations connect objects together. In Twenty, relations are always **bidirectional** — you define both sides, and each side references the other.
There are two relation types:
| İlişki türü | Açıklama | Has foreign key? |
| ------------- | ------------------------------------------------------------- | ---------------------- |
| `MANY_TO_ONE` | Many records of this object point to one record of the target | Yes (`joinColumnName`) |
| `ONE_TO_MANY` | One record of this object has many records of the target | No (inverse side) |
#### How relations work
Every relation requires **two fields** that reference each other:
1. The **MANY_TO_ONE** side — lives on the object that holds the foreign key
2. The **ONE_TO_MANY** side — lives on the object that owns the collection
Both fields use `FieldType.RELATION` and cross-reference each other via `relationTargetFieldMetadataUniversalIdentifier`.
#### Example: Post Card has many Recipients
Suppose a `PostCard` can be sent to many `PostCardRecipient` records. Each recipient belongs to exactly one post card.
**Step 1: Define the ONE_TO_MANY side on PostCard** (the "one" side):
```typescript
// src/fields/post-card-recipients-on-post-card.field.ts
import { defineField, FieldType, RelationType } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_RECIPIENTS_FIELD_ID = 'a1111111-1111-1111-1111-111111111111';
// Import from the other side
import { POST_CARD_FIELD_ID } from './post-card-on-post-card-recipient.field';
export default defineField({
universalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCardRecipients',
label: 'Post Card Recipients',
icon: 'IconUsers',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_FIELD_ID,
universalSettings: {
relationType: RelationType.ONE_TO_MANY,
},
});
```
**Step 2: Define the MANY_TO_ONE side on PostCardRecipient** (the "many" side — holds the foreign key):
```typescript
// src/fields/post-card-on-post-card-recipient.field.ts
import { defineField, FieldType, RelationType, OnDeleteAction } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_FIELD_ID = 'b2222222-2222-2222-2222-222222222222';
// Import from the other side
import { POST_CARD_RECIPIENTS_FIELD_ID } from './post-card-recipients-on-post-card.field';
export default defineField({
universalIdentifier: POST_CARD_FIELD_ID,
objectUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
icon: 'IconMail',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
});
```
<Note>
**Circular imports:** Both relation fields reference each other's `universalIdentifier`. To avoid circular import issues, export your field IDs as named constants from each file, and import them in the other file. The build system resolves these at compile time.
</Note>
#### Relating to standard objects
To create a relation with a built-in Twenty object (Person, Company, etc.), use `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS`:
```typescript
// src/fields/person-on-self-hosting-user.field.ts
import {
defineField,
FieldType,
RelationType,
OnDeleteAction,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk';
import { SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER } from '../objects/self-hosting-user.object';
export const PERSON_FIELD_ID = 'c3333333-3333-3333-3333-333333333333';
export const SELF_HOSTING_USER_REVERSE_FIELD_ID = 'd4444444-4444-4444-4444-444444444444';
export default defineField({
universalIdentifier: PERSON_FIELD_ID,
objectUniversalIdentifier: SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'person',
label: 'Person',
description: 'Person matching with the self hosting user',
isNullable: true,
relationTargetObjectMetadataUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
relationTargetFieldMetadataUniversalIdentifier: SELF_HOSTING_USER_REVERSE_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.SET_NULL,
joinColumnName: 'personId',
},
});
```
#### Relation field properties
| Özellik | Zorunlu | Açıklama |
| ------------------------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------- |
| `type` | Evet | Must be `FieldType.RELATION` |
| `relationTargetObjectMetadataUniversalIdentifier` | Evet | The `universalIdentifier` of the target object |
| `relationTargetFieldMetadataUniversalIdentifier` | Evet | The `universalIdentifier` of the matching field on the target object |
| `universalSettings.relationType` | Evet | `RelationType.MANY_TO_ONE` or `RelationType.ONE_TO_MANY` |
| `universalSettings.onDelete` | MANY_TO_ONE only | What happens when the referenced record is deleted: `CASCADE`, `SET_NULL`, `RESTRICT`, or `NO_ACTION` |
| `universalSettings.joinColumnName` | MANY_TO_ONE only | Database column name for the foreign key (e.g., `postCardId`) |
#### Inline relation fields in defineObject
You can also define relation fields directly inside `defineObject()`. In that case, omit `objectUniversalIdentifier` — it's inherited from the parent object:
```typescript
export default defineObject({
universalIdentifier: '...',
nameSingular: 'postCardRecipient',
// ...
fields: [
{
universalIdentifier: POST_CARD_FIELD_ID,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
},
// ... other fields
],
});
```
### Uygulama yapılandırması (application-config.ts)
Her uygulamanın aşağıdakileri açıklayan tek bir `application-config.ts` dosyası vardır:
@@ -161,13 +354,29 @@ Notlar:
* `defaultRoleUniversalIdentifier`, rol dosyasıyla eşleşmelidir (aşağıya bakın).
* Kurulum öncesi ve kurulum sonrası işlevler, manifest oluşturma sırasında otomatik olarak algılanır. Bkz. [Kurulum öncesi işlevler](#pre-install-functions) ve [Kurulum sonrası işlevler](#post-install-functions).
#### Marketplace metadata
If you plan to [publish your app](/l/tr/developers/extend/apps/publishing), these optional fields control how your app appears in the marketplace:
| Alan | Açıklama |
| ------------------ | --------------------------------------------------- |
| `author` | Author or company name |
| `category` | App category for marketplace filtering |
| `logoUrl` | Path to your app logo (relative to `./assets/`) |
| `screenshots` | Array of screenshot paths (relative to `./assets/`) |
| `aboutDescription` | Longer markdown description for the "About" tab |
| `websiteUrl` | Link to your website |
| `termsUrl` | Link to terms of service |
| `emailSupport` | Support email address |
| `issueReportUrl` | Link to issue tracker |
#### Roller ve izinler
Uygulamalar, çalışma alanınızdaki nesneler ve eylemler üzerindeki izinleri kapsülleyen roller tanımlayabilir. `application-config.ts` içindeki `defaultRoleUniversalIdentifier` alanı, uygulamanızın mantık fonksiyonlarının kullandığı varsayılan rolü belirtir.
* `TWENTY_API_KEY` olarak enjekte edilen çalışma zamanı API anahtarı bu varsayılan fonksiyon rolünden 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 ve ardından evrensel tanımlayıcısına referans verin.
* Follow least-privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
##### Varsayılan fonksiyon rolü (*.role.ts)
@@ -220,7 +429,7 @@ Bu rolün `universalIdentifier` değeri daha sonra `application-config.ts` için
Notlar:
* Oluşturulan rol ile başlayın ve en az ayrıcalık ilkesini izleyerek aşamalı olarak kısıtlayın.
* Start from the scaffolded role, then progressively restrict it following least-privilege.
* `objectPermissions` ve `fieldPermissions` değerlerini, fonksiyonlarınızın ihtiyaç duyduğu nesneler/alanlarla değiştirin.
* `permissionFlags`, platform düzeyindeki yeteneklere erişimi kontrol eder. Minimumda tutun; yalnızca ihtiyacınız olanları ekleyin.
* Çalışan bir örneği Hello World uygulamasında görün: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
@@ -230,7 +439,7 @@ Notlar:
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.
```typescript
// src/app/createPostCard.logic-function.ts
// src/logic-functions/createPostCard.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import type { DatabaseEventPayload, ObjectRecordCreateEvent, CronPayload, RoutePayload } from 'twenty-sdk';
import { CoreApiClient, type Person } from 'twenty-sdk/generated';
@@ -324,7 +533,7 @@ export default definePreInstallLogicFunction({
Ayrıca kurulum öncesi işlevi istediğiniz zaman CLI kullanarak manuel olarak çalıştırabilirsiniz:
```bash filename="Terminal"
yarn twenty function:execute --preInstall
yarn twenty exec --preInstall
```
Önemli noktalar:
@@ -334,7 +543,7 @@ yarn twenty function:execute --preInstall
* Uygulama başına yalnızca bir kurulum öncesi işlevine izin verilir. Birden fazla tespit edilirse manifest oluşturma hataya düşer.
* İşlevin `universalIdentifier` değeri, oluşturma sırasında uygulama manifestinde otomatik olarak `preInstallLogicFunctionUniversalIdentifier` olarak ayarlanır — `defineApplication()` içinde buna atıfta bulunmanıza gerek yoktur.
* Varsayılan zaman aşımı, daha uzun hazırlık görevlerine izin vermek için 300 saniye (5 dakika) olarak ayarlanmıştır.
* Kurulum öncesi işlevlerin tetikleyicilere ihtiyacı yoktur — kurulumdan önce platform tarafından veya `function:execute --preInstall` aracılığıyla manuel olarak çağrılırlar.
* Pre-install functions do not need triggers — they are invoked by the platform before installation or manually via `exec --preInstall`.
### Kurulum sonrası işlevler
@@ -362,7 +571,7 @@ export default definePostInstallLogicFunction({
Ayrıca kurulum sonrası işlevi istediğiniz zaman CLI kullanarak manuel olarak çalıştırabilirsiniz:
```bash filename="Terminal"
yarn twenty function:execute --postInstall
yarn twenty exec --postInstall
```
Önemli noktalar:
@@ -372,7 +581,7 @@ yarn twenty function:execute --postInstall
* Uygulama başına yalnızca bir kurulum sonrası işlevine izin verilir. Birden fazla tespit edilirse manifest oluşturma hataya düşer.
* İşlevin `universalIdentifier` değeri, oluşturma sırasında uygulama manifestinde otomatik olarak `postInstallLogicFunctionUniversalIdentifier` olarak ayarlanır — `defineApplication()` içinde buna atıfta bulunmanıza gerek yoktur.
* Varsayılan zaman aşımı, veri tohumlama gibi daha uzun kurulum görevlerine izin vermek için 300 saniye (5 dakika) olarak ayarlanmıştır.
* Kurulum sonrası işlevlerin tetikleyicilere ihtiyacı yoktur — kurulum sırasında platform tarafından veya `function:execute --postInstall` aracılığıyla manuel olarak çağrılırlar.
* Post-install functions do not need triggers — they are invoked by the platform during installation or manually via `exec --postInstall`.
### Rota tetikleyicisi yükü
@@ -416,15 +625,15 @@ const handler = async (event: RoutePayload) => {
`RoutePayload` türünün yapısı şu şekildedir:
| Özellik | Tür | Açıklama |
| ---------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | HTTP başlıkları (`forwardedRequestHeaders` içinde listelenenlerle sınırlı) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Sorgu dizesi parametreleri (birden çok değer virgülle birleştirilir) |
| `pathParameters` | `Record<string, string \| undefined>` | Rota deseninden çıkarılan yol parametreleri (örn., `/users/:id` `{ id: '123' }`) |
| `body` | `object \| null` | Ayrıştırılmış istek gövdesi (JSON) |
| `isBase64Encoded` | `boolean` | Gövdenin base64 ile kodlanıp kodlanmadığı |
| `requestContext.http.method` | `string` | HTTP yöntemi (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `string` | Ham istek yolu |
| Özellik | Tür | Açıklama |
| ---------------------------- | ------------------------------------- | ---------------------------------------------------------------------------------------- |
| `headers` | `Record<string, string \| undefined>` | HTTP başlıkları (`forwardedRequestHeaders` içinde listelenenlerle sınırlı) |
| `queryStringParameters` | `Record<string, string \| undefined>` | Sorgu dizesi parametreleri (birden çok değer virgülle birleştirilir) |
| `pathParameters` | `Record<string, string \| undefined>` | Path parameters extracted from the route pattern (e.g., `/users/:id` -> `{ id: '123' }`) |
| `body` | `object \| null` | Ayrıştırılmış istek gövdesi (JSON) |
| `isBase64Encoded` | `boolean` | Gövdenin base64 ile kodlanıp kodlanmadığı |
| `requestContext.http.method` | `string` | HTTP yöntemi (GET, POST, PUT, PATCH, DELETE) |
| `requestContext.http.path` | `string` | Ham istek yolu |
### HTTP başlıklarını iletme
@@ -466,7 +675,7 @@ const handler = async (event: RoutePayload) => {
Yeni fonksiyonları iki şekilde oluşturabilirsiniz:
* **Şablondan**: `yarn twenty entity:add` çalıştırın ve yeni bir mantık fonksiyonu ekleme seçeneğini seçin. Bu, bir işleyici ve yapılandırma içeren bir başlangıç dosyası oluşturur.
* **Scaffolded**: Run `yarn twenty add` and choose the option to add a new logic function. Bu, bir işleyici ve yapılandırma içeren bir başlangıç dosyası oluşturur.
* **Manuel**: Yeni bir `*.logic-function.ts` dosyası oluşturun ve aynı deseni izleyerek `defineLogicFunction()` kullanın.
### Bir mantık işlevini araç olarak işaretleme
@@ -478,7 +687,7 @@ Bir mantık işlevini bir araç olarak işaretlemek için `isTool: true` olarak
```typescript
// src/logic-functions/enrich-company.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import { CoreApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const handler = async (params: { companyName: string; domain?: string }) => {
const client = new CoreApiClient();
@@ -567,7 +776,7 @@ export default defineFrontComponent({
Yeni ön uç bileşenlerini iki şekilde oluşturabilirsiniz:
* **Şablondan**: `yarn twenty entity:add` çalıştırın ve yeni bir ön uç bileşeni ekleme seçeneğini seçin.
* **Scaffolded**: Run `yarn twenty add` and choose the option to add a new front component.
* **Manuel**: Aynı deseni izleyerek yeni bir `.tsx` dosyası oluşturun ve `defineFrontComponent()` kullanın.
### Beceriler
@@ -602,47 +811,122 @@ export default defineSkill({
Yeni yetenekleri iki şekilde oluşturabilirsiniz:
* **Şablondan**: `yarn twenty entity:add` komutunu çalıştırın ve yeni bir yetenek ekleme seçeneğini seçin.
* **Scaffolded**: Run `yarn twenty add` and choose the option to add a new skill.
* **Manuel**: Yeni bir dosya oluşturun ve aynı deseni izleyerek `defineSkill()` kullanın.
### Oluşturulan tiplendirilmiş istemciler
### Typed API clients (`twenty-client-sdk`)
Çalışma alanı şemanıza göre `yarn twenty dev` tarafından iki tiplendirilmiş istemci otomatik olarak oluşturulur ve `node_modules/twenty-sdk/generated` içine kaydedilir:
The `twenty-client-sdk` package provides two typed GraphQL clients for interacting with the Twenty API from your logic functions and front components:
* **`CoreApiClient`** — çalışma alanı verileri için `/graphql` uç noktasını sorgular
* **`MetadataApiClient`** — çalışma alanı yapılandırması ve dosya yüklemeleri için `/metadata` uç noktasını sorgular.
| İstemci | İçe Aktar | Endpoint | Generated? |
| ------------------- | ---------------------------- | ---------------------------------------------- | ---------------------- |
| `CoreApiClient` | `twenty-client-sdk/core` | `/graphql` — workspace data (records, objects) | Yes, at dev/build time |
| `MetadataApiClient` | `twenty-client-sdk/metadata` | `/metadata` — workspace config, file uploads | No, ships pre-built |
#### CoreApiClient
`CoreApiClient` is the main client for querying and mutating workspace data. It is **generated from your workspace schema** during `yarn twenty dev` or `yarn twenty build`, so it's fully typed to match your objects and fields.
```typescript
import { CoreApiClient, MetadataApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const client = new CoreApiClient();
const { me } = await client.query({ me: { id: true, displayName: true } });
const metadataClient = new MetadataApiClient();
const { currentWorkspace } = await metadataClient.query({ currentWorkspace: { id: true } });
// Query records
const { companies } = await client.query({
companies: {
edges: {
node: {
id: true,
name: true,
domainName: true,
},
},
},
});
// Create a record
const { createCompany } = await client.mutation({
createCompany: {
__args: {
data: {
name: 'Acme Corp',
},
},
id: true,
name: true,
},
});
```
Her iki istemci de, nesneleriniz veya alanlarınız değiştiğinde, `yarn twenty dev` tarafından otomatik olarak yeniden oluşturulur.
The client uses a selection-set syntax: pass `true` to include a field, use `__args` for arguments, and nest objects for relations. You get full autocompletion and type checking based on your workspace schema.
#### Mantık fonksiyonlarında çalışma zamanı kimlik bilgileri
<Note>
**CoreApiClient is generated at dev/build time.** If you try to 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, generates a typed client using `@genql/cli`, writes the generated sources to `node_modules/twenty-client-sdk/dist/core/generated/`, and replaces the stubs in `node_modules/twenty-client-sdk/dist/core.mjs` and `node_modules/twenty-client-sdk/dist/core.cjs`.
</Note>
Fonksiyonunuz Twenty üzerinde çalıştığında, platform kodunuz yürütülmeden önce kimlik bilgilerini ortam değişkenleri olarak enjekte eder:
#### Using CoreSchema for type annotations
* `TWENTY_API_URL`: Uygulamanızın hedeflediği Twenty API'nin temel URLsi.
* `TWENTY_API_KEY`: Uygulamanızın varsayılan fonksiyon rolü kapsamına sahip kısa ömürlü anahtar.
`CoreSchema` provides TypeScript types matching your workspace objects, useful for typing component state or function parameters:
Notlar:
```typescript
import { CoreApiClient, CoreSchema } from 'twenty-client-sdk/core';
import { useState } from 'react';
* Oluşturulan istemciye URL veya API anahtarı geçirmeniz gerekmez. Çalışma zamanında `TWENTY_API_URL` ve `TWENTY_API_KEY` değerlerini process.env üzerinden okur.
* API anahtarının izinleri, `application-config.ts` içinde `defaultRoleUniversalIdentifier` aracılığıyla referans verilen role göre belirlenir. Bu, uygulamanızın mantık fonksiyonları tarafından kullanılan varsayılan roldür.
* Uygulamalar, en az ayrıcalık ilkesini izlemek için roller tanımlayabilir. Yalnızca fonksiyonlarınızın ihtiyaç duyduğu izinleri verin ve ardından `defaultRoleUniversalIdentifier` değerini o rolün evrensel tanımlayıcısına yönlendirin.
const [company, setCompany] = useState<
Pick<CoreSchema.Company, 'id' | 'name'> | undefined
>(undefined);
const client = new CoreApiClient();
const result = await client.query({
company: {
__args: { filter: { position: { eq: 1 } } },
id: true,
name: true,
},
});
setCompany(result.company);
```
#### MetadataApiClient
`MetadataApiClient` ships pre-built with the SDK (no generation required). It queries the `/metadata` endpoint for workspace configuration, applications, and file uploads:
```typescript
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
const metadataClient = new MetadataApiClient();
// Query workspace info
const { currentWorkspace } = await metadataClient.query({
currentWorkspace: { id: true, displayName: true },
});
// List installed applications
const { findManyApplications } = await metadataClient.query({
findManyApplications: {
id: true,
name: true,
version: true,
},
});
```
#### Runtime credentials
When your code runs on Twenty (logic functions or front components), the platform injects credentials as environment variables:
* `TWENTY_API_URL` — Base URL of the Twenty API
* `TWENTY_API_KEY` — Short-lived key scoped to your application's default function role
You do **not** need to pass these to the clients — they read from `process.env` automatically. The API key's permissions are determined by the role referenced in `defaultRoleUniversalIdentifier` in your `application-config.ts`.
#### Dosya yükleme
Oluşturulan `MetadataApiClient`, çalışma alanı nesnelerinizdeki dosya türündeki alanlara dosya eklemek için bir `uploadFile` yöntemi içerir. Standart GraphQL istemcileri çok parçalı dosya yüklemelerini yerel olarak desteklemediğinden, istemci arka planda [GraphQL çok parçalı istek belirtimi](https://github.com/jaydenseric/graphql-multipart-request-spec) uygulayan bu özel yöntemi sağlar.
`MetadataApiClient` includes an `uploadFile` method for attaching files to file-type fields. It implements the [GraphQL multipart request specification](https://github.com/jaydenseric/graphql-multipart-request-spec):
```typescript
import { MetadataApiClient } from 'twenty-sdk/generated';
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
import * as fs from 'fs';
const metadataClient = new MetadataApiClient();
@@ -652,25 +936,14 @@ const fileBuffer = fs.readFileSync('./invoice.pdf');
const uploadedFile = await metadataClient.uploadFile(
fileBuffer, // file contents as a Buffer
'invoice.pdf', // filename
'application/pdf', // MIME type (defaults to 'application/octet-stream')
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universal identifier
'application/pdf', // MIME type
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universalIdentifier
);
console.log(uploadedFile);
// { id: '...', path: '...', size: 12345, createdAt: '...', url: 'https://...' }
```
Yöntem imzası:
```typescript
uploadFile(
fileBuffer: Buffer,
filename: string,
contentType: string,
fieldMetadataUniversalIdentifier: string,
): Promise<{ id: string; path: string; size: number; createdAt: string; url: string }>
```
| Parametre | Tür | Açıklama |
| ---------------------------------- | -------- | ------------------------------------------------------------------------------------------ |
| `fileBuffer` | `Buffer` | Dosyanın ham içeriği |
@@ -680,8 +953,7 @@ uploadFile(
Önemli noktalar:
* `uploadFile` yöntemi, yükleme mutasyonu `/metadata` uç noktası tarafından çözümlendiği için `MetadataApiClient` üzerinde mevcuttur.
* Alan için `universalIdentifier` kullanılı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 — uygulamaların başka her yerde alanlara nasıl atıfta bulunduğuyla tutarlıdır.
* Uses the field's `universalIdentifier` (not its workspace-specific ID), so your upload code works across any workspace where your app is installed.
* Döndürülen `url`, yüklenen dosyaya erişmek için kullanabileceğiniz imzalı bir URL'dir.
### Hello World örneği
@@ -49,7 +49,7 @@ Buradan şunları yapabilirsiniz:
```bash filename="Terminal"
# Add a new entity to your application (guided)
yarn twenty entity:add
yarn twenty add
# Watch your application's function logs
yarn twenty function:logs
@@ -123,7 +123,7 @@ my-twenty-app/
Genel hatlarıyla:
* **package.json**: Uygulama adını, sürümünü, motorları (Node 24+, Yarn 4) bildirir ve `twenty-sdk` ile yerel `twenty` CLI'sine yetki devreden bir `twenty` betiği ekler. Tüm mevcut komutları listelemek için `yarn twenty help` komutunu çalıştırın.
* **.gitignore**: `node_modules`, `.yarn`, `generated/` (türlendirilmiş istemci), `dist/`, `build/`, kapsam klasörleri, günlük dosyaları ve `.env*` dosyaları gibi yaygın artifaktları yok sayar.
* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `.twenty/`, `dist/`, `build/`, coverage folders, log files, and `.env*` files.
* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Proje tarafından kullanılan Yarn 4 araç zincirini kilitler ve yapılandırır.
* **.nvmrc**: Projenin beklediği Node.js sürümünü sabitler.
* **.oxlintrc.json** ve **tsconfig.json**: Uygulamanızın TypeScript kaynakları için linting ve TypeScript yapılandırması sağlar.
@@ -167,8 +167,8 @@ export default defineObject({
İlerideki komutlar daha fazla dosya ve klasör ekleyecektir:
* `yarn twenty dev`, `node_modules/twenty-sdk/generated` içinde iki tiplendirilmiş API istemcisini otomatik olarak oluşturur: `CoreApiClient` (`/graphql` üzerinden çalışma alanı verileri için) ve `MetadataApiClient` (çalışma alanı yapılandırması ve `/metadata` üzerinden dosya yüklemeleri için).
* `yarn twenty entity:add`, özel nesneleriniz, fonksiyonlarınız, ön bileşenleriniz, rolleriniz, yetenekleriniz ve daha fazlası için `src/` altında varlık tanım dosyaları ekler.
* `yarn twenty dev` will auto-generate the typed `CoreApiClient` (for workspace data via `/graphql`) into `node_modules/twenty-client-sdk/`. The `MetadataApiClient` (for workspace configuration and file uploads via `/metadata`) ships pre-built and is available immediately. Import them from `twenty-client-sdk/core` and `twenty-client-sdk/metadata` respectively.
* `yarn twenty add` will add entity definition files under `src/` for your custom objects, functions, front components, roles, skills, and more.
## Kimlik Doğrulama
@@ -12,7 +12,25 @@ Uygulamalar şu anda alfa testinde. Özellik işlevsel ancak hâlâ gelişmekte.
Uygulamanız [yerelde derlenip test edildikten sonra](/l/tr/developers/extend/apps/building), dağıtım için iki yolunuz vardır:
* **npmye yayımlama** — uygulamanızı Twenty pazaryerinde listeleyin; böylece herhangi bir çalışma alanı keşfedip yükleyebilir.
* **Bir tarball gönderin** — uygulamanızı herkese açık yapmadan, dahili kullanım için belirli bir Twenty sunucusuna dağıtın.
* **Bir tar arşivi dağıtın** — uygulamanızı dahili veya özel kullanım için doğrudan belirli bir Twenty sunucusuna yükleyin.
Her iki yol da aynı **build** adımından başlar.
## Uygulamanızı derleme
`build` komutu TypeScript kaynaklarınızı derler, mantık işlevlerini ve ön uç bileşenlerini transpile eder ve uygulamanızın içeriğini açıklayan bir `manifest.json` üretir:
```bash filename="Terminal"
yarn twenty build
```
Çıktı `.twenty/output/` dizinine yazılır. This directory contains everything needed for distribution: compiled code, assets, the manifest, and a copy of your `package.json`.
To also create a `.tgz` tarball (used by the deploy command internally, or for manual distribution):
```bash filename="Terminal"
yarn twenty build --tarball
```
## npmye yayımlama
@@ -21,29 +39,72 @@ npmye yayımlamak, uygulamanızın Twenty pazaryerinde keşfedilebilir olmas
### Gereksinimler
* Bir [npm](https://www.npmjs.com) hesabı
* Paket adınız **mutlaka** `twenty-app-` önekini kullanmalıdır (ör. `twenty-app-postcard-sender`)
* The `twenty-app` keyword **must** be listed in your `package.json` `keywords` array
### Adding the required keyword
The Twenty marketplace discovers apps by searching the npm registry for packages with the `twenty-app` keyword. Add it to your `package.json`:
```json filename="package.json"
{
"name": "twenty-app-postcard-sender",
"version": "1.0.0",
"keywords": ["twenty-app"],
...
}
```
<Note>
The marketplace searches for `keywords:twenty-app` on the npm registry. Without this keyword, your package won't appear in the marketplace even if it has the `twenty-app-` name prefix.
</Note>
### Adımlar
1. **Uygulamanızı derleyin** — CLI, TypeScript kaynaklarınızı derler ve uygulama manifestini oluşturur:
1. **Build your app:**
```bash filename="Terminal"
yarn twenty build
```
2. **npmye yayımlayın** — derlenmiş paketi npm registryye gönderin:
2. **Publish to npm:**
```bash filename="Terminal"
npx twenty publish
yarn twenty publish
```
### Otomatik keşif
This runs `npm publish` from the `.twenty/output/` directory.
`twenty-app-` önekine sahip paketler, Twenty pazaryeri kataloğu tarafından otomatik olarak keşfedilir. Yayımlandıktan sonra, uygulamanız birkaç dakika içinde pazaryerinde görünür — manuel kayıt veya onay gerekmez.
To publish under a specific dist-tag (e.g., `beta` or `next`):
```bash filename="Terminal"
yarn twenty publish --tag beta
```
### How marketplace discovery works
The Twenty server syncs its marketplace catalog from the npm registry **every hour**:
1. It searches for all npm packages with the `keywords:twenty-app` keyword
2. For each package, it fetches the `manifest.json` from the npm CDN
3. The app's metadata (name, description, author, logo, screenshots, category) is extracted from the manifest and displayed in the marketplace
After publishing, your app can take up to one hour to appear in the marketplace. To trigger the sync immediately instead of waiting for the next hourly run:
```bash filename="Terminal"
yarn twenty catalog-sync
```
To target a specific remote:
```bash filename="Terminal"
yarn twenty catalog-sync -r production
```
The metadata shown in the marketplace comes from your `defineApplication()` call in your app source code — fields like `displayName`, `description`, `author`, `category`, `logoUrl`, `screenshots`, `aboutDescription`, `websiteUrl`, and `termsUrl`.
### CI üzerinden yayımlama
İskelet proje, her sürümde yayımlama yapan bir GitHub Actions iş akışını içerir. Önce `app:build` çalıştırır, ardından derleme çıktısından `npm publish --provenance` çalıştırır:
İskelet proje, her sürümde yayımlayan bir GitHub Actions iş akışını içerir:
```yaml filename=".github/workflows/publish.yml"
name: Publish
@@ -72,48 +133,117 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
```
Diğer CI sistemleri (GitLab CI, CircleCI, vb.) için de aynı üç komut geçerlidir: `yarn install`, `npx twenty build` ve ardından `.twenty/output` dizininden `npm publish`.
For other CI systems (GitLab CI, CircleCI, etc.), the same three commands apply: `yarn install`, `yarn twenty build`, then `npm publish` from `.twenty/output`.
<Tip>
**npm provenance** isteğe bağlıdır ancak önerilir. `--provenance` ile yayımlamak, npm listenize bir güven rozeti ekler ve kullanıcıların paketin herkese açık bir CI ardışık düzenindeki belirli bir committen oluşturulduğunu doğrulamasını sağlar. Kurulum talimatları için [npm provenance belgelerine](https://docs.npmjs.com/generating-provenance-statements) bakın.
</Tip>
## Dahili dağıtım
## Deploying to a server (tarball)
Genel kullanıma açık olmasını istemediğiniz uygulamalar — sahipli araçlar, yalnızca kurumsal entegrasyonlar veya deneysel yapılar — için bir tarball’ı doğrudan bir Twenty sunucusuna gönderebilirsiniz.
For apps you don't want publicly available — proprietary tools, enterprise-only integrations, or experimental builds — you can deploy a tarball directly to a Twenty server.
### Bir tarball gönderin
### Ön Gereksinimler
Uygulamanızı derleyin ve tek adımda belirli bir sunucuya dağıtın:
Before deploying, you need a configured remote pointing to the target server. Remotes store the server URL and authentication credentials locally in `~/.twenty/config.json`.
Add a remote:
```bash filename="Terminal"
npx twenty publish --server <server-url>
yarn twenty remote add --url https://your-twenty-server.com --as production
```
Daha sonra, bu sunucudaki herhangi bir çalışma alanı uygulamayı **Applications** ayarları sayfasından yükleyip güncelleyebilir.
For a local development server:
```bash filename="Terminal"
yarn twenty remote add --local --as local
```
You can also authenticate with an API key for non-interactive environments:
```bash filename="Terminal"
yarn twenty remote add --url https://your-twenty-server.com --token <api-key> --as production
```
Manage your remotes:
```bash filename="Terminal"
yarn twenty remote list # List all configured remotes
yarn twenty remote switch prod # Set the default remote
yarn twenty remote status # Show active remote and auth status
yarn twenty remote remove old # Remove a remote
```
### Deploying
Build and upload your app to the server in one step:
```bash filename="Terminal"
yarn twenty deploy
```
This builds the app with `--tarball`, then uploads the tarball to the default remote via a GraphQL multipart upload.
To deploy to a specific remote:
```bash filename="Terminal"
yarn twenty deploy -r production
```
### Sharing a deployed app
Tarball apps are not listed in the public marketplace, so other workspaces on the same server won't discover them by browsing. To share a deployed app:
1. Go to **Settings > Applications > Registrations** and open your app
2. In the **Distribution** tab, click **Copy share link**
3. Share this link with users on other workspaces — it takes them directly to the app's install page
The share link uses the server's base URL (without any workspace subdomain) so it works for any workspace on the server.
### Sürüm yönetimi
Bir güncelleme yayımlamak için:
1. `package.json` içindeki `version` alanını artırın
2. `npx twenty publish --server <server-url>` ile yeni bir tarball gönderin
3. O sunucudaki çalışma alanları, ayarlarında kullanılabilir güncellemeyi görecektir.
2. Run `yarn twenty deploy` (or `yarn twenty deploy -r production`)
3. Workspaces that have the app installed will see the upgrade available in their settings
<Note>
Dahili uygulamalar, gönderildikleri sunucu ile sınırlıdır. Genel pazaryerinde görünmezler ve diğer sunuculardaki çalışma alanları tarafından yüklenemezler.
</Note>
## Installing apps
## Uygulama kategorileri
Once an app is published (npm) or deployed (tarball), workspaces install it through the UI:
```bash filename="Terminal"
yarn twenty install
```
Or from the **Settings > Applications** page in the Twenty UI, where both marketplace and tarball-deployed apps can be browsed and installed.
## App distribution categories
Twenty, uygulamaları nasıl dağıtıldıklarına göre üç kategoriye ayırır:
| Kategori | Nasıl Çalışır | Pazaryerinde görünür mü? |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
| **Geliştirme** | `yarn twenty dev` ile çalışan yerel geliştirme modu uygulamaları. Derleme ve test için kullanılır. | Hayır |
| **Yayımlanmış** | `twenty-app-` önekiyle npmye yayımlanan uygulamalar. Herhangi bir çalışma alanının yükleyebilmesi için pazaryerinde listelenir. | Evet |
| **Dahili** | Bir tarball aracılığıyla belirli bir sunucuya dağıtılan uygulamalar. Yalnızca o sunucudaki çalışma alanlarının kullanımına açıktır. | Hayır |
| Kategori | Nasıl Çalışır | Pazaryerinde görünür mü? |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
| **Geliştirme** | `yarn twenty dev` ile çalışan yerel geliştirme modu uygulamaları. Derleme ve test için kullanılır. | Hayır |
| **Published (npm)** | Apps published to npm with the `twenty-app` keyword. Herhangi bir çalışma alanının yükleyebilmesi için pazaryerinde listelenir. | Evet |
| **Internal (tarball)** | Bir tarball aracılığıyla belirli bir sunucuya dağıtılan uygulamalar. Available only to workspaces on that server via a share link. | Hayır |
<Tip>
Uygulamanızı geliştirirken **Geliştirme** modunda başlayın. Hazır olduğunda, geniş dağıtım için **Yayımlanmış** (npm) ya da özel dağıtım için **Dahili** (tarball) seçeneğini tercih edin.
</Tip>
## CLI reference
| Komut | Açıklama | Key flags |
| --------------------------- | ---------------------------------------------- | --------------------------------------------------- |
| `yarn twenty build` | Compile app and generate manifest | `--tarball` — also create a `.tgz` package |
| `yarn twenty publish` | Build and publish to npm | `--tag <tag>` — npm dist-tag (e.g., `beta`, `next`) |
| `yarn twenty deploy` | Build and upload tarball to a server | `-r, --remote <name>` — target remote |
| `yarn twenty catalog-sync` | Trigger marketplace catalog sync on the server | `-r, --remote <name>` — target remote |
| `yarn twenty install` | Install a deployed app on a workspace | `-r, --remote <name>` — target remote |
| `yarn twenty dev` | Watch and sync local changes | Uses default remote |
| `yarn twenty remote add` | Add a server connection | `--url`, `--token`, `--as`, `--local`, `--port` |
| `yarn twenty remote list` | List configured remotes | — |
| `yarn twenty remote switch` | Set default remote | — |
| `yarn twenty remote status` | Show connection status | — |
| `yarn twenty remote remove` | Remove a remote | — |
@@ -15,19 +15,21 @@ twenty-sdk 提供你在应用中使用的类型化构件和辅助函数。 以
该 SDK 提供辅助函数用于定义你的应用实体。 如 [实体检测](/l/zh/developers/extend/apps/getting-started#entity-detection) 中所述,你必须使用 `export default define<Entity>({...})` 才能让你的实体被检测到:
| 函数 | 目的 |
| -------------------------------- | ------------------- |
| `defineApplication` | 配置应用元数据(必需,每个应用一个) |
| `defineObject` | 定义带字段的自定义对象 |
| `defineLogicFunction` | 定义带处理程序的逻辑函数 |
| `definePreInstallLogicFunction` | 定义一个安装前逻辑函数(每个应用一个) |
| `definePostInstallLogicFunction` | 定义一个安装逻辑函数(每个应用一个) |
| `defineFrontComponent` | 为自定义 UI 定义前端组件 |
| `defineRole` | 配置角色权限和对象访问 |
| `defineField` | 为现有对象扩展额外字段 |
| `defineView` | 为对象定义已保存的视图 |
| `defineNavigationMenuItem` | 定义侧边栏导航链接 |
| `defineSkill` | 定义 AI 智能体技能 |
| 函数 | 目的 |
| -------------------------------- | ------------------------ |
| `defineApplication` | 配置应用元数据(必需,每个应用一个) |
| `defineObject` | 定义带字段的自定义对象 |
| `defineField` | 使用附加字段扩展现有对象,或定义独立的关系字段。 |
| `defineLogicFunction` | 定义带处理程序的逻辑函数 |
| `definePreInstallLogicFunction` | 定义一个安装逻辑函数(每个应用一个) |
| `definePostInstallLogicFunction` | 定义一个安装后逻辑函数(每个应用一个) |
| `defineFrontComponent` | 为自定义 UI 定义前端组件 |
| `defineRole` | 配置角色权限和对象访问 |
| `defineView` | 为对象定义已保存的视图 |
| `defineNavigationMenuItem` | 定义侧边栏导航链接 |
| `defineSkill` | 定义 AI 智能体技能 |
| `defineAgent` | 定义 AI 智能体 |
| `definePageLayout` | 定义自定义页面布局 |
这些函数会在构建时校验你的配置,并提供 IDE 自动补全和类型安全。
@@ -36,7 +38,7 @@ twenty-sdk 提供你在应用中使用的类型化构件和辅助函数。 以
自定义对象同时描述工作空间中记录的架构与行为。 使用 `defineObject()` 以内置校验定义对象:
```typescript
// src/app/postCard.object.ts
// src/objects/postCard.object.ts
import { defineObject, FieldType } from 'twenty-sdk';
enum PostCardStatus {
@@ -110,7 +112,7 @@ export default defineObject({
* `universalIdentifier` 必须在各次部署间保持唯一且稳定。
* 每个字段都需要 `name`、`type`、`label` 以及其自身稳定的 `universalIdentifier`。
* `fields` 数组是可选的——你可以定义没有自定义字段的对象。
* 你可以使用 `yarn twenty entity:add` 脚手架创建新对象,它会引导你完成命名、字段和关系。
* 你可以使用 `yarn twenty add` 脚手架创建新对象,它会引导你完成命名、字段和关系。
<Note>
**基础字段会自动创建。** 当你定义自定义对象时,Twenty 会自动添加标准字段
@@ -120,6 +122,197 @@ export default defineObject({
但不建议这样做。
</Note>
### 在现有对象上定义字段
使用 `defineField()` 向你不拥有的对象添加字段——例如标准的 Twenty 对象(Person、Company 等)。 或来自其他应用的对象。 与在 `defineObject()` 中的内联字段不同,独立字段需要一个 `objectUniversalIdentifier` 来指定它们要扩展的对象:
```typescript
// src/fields/company-loyalty-tier.field.ts
import { defineField, FieldType } from 'twenty-sdk';
export default defineField({
universalIdentifier: 'f2a1b3c4-d5e6-7890-abcd-ef1234567890',
objectUniversalIdentifier: '701aecb9-eb1c-4d84-9d94-b954b231b64b', // Company object
name: 'loyaltyTier',
type: FieldType.SELECT,
label: 'Loyalty Tier',
icon: 'IconStar',
options: [
{ value: 'BRONZE', label: 'Bronze', position: 0, color: 'orange' },
{ value: 'SILVER', label: 'Silver', position: 1, color: 'gray' },
{ value: 'GOLD', label: 'Gold', position: 2, color: 'yellow' },
],
});
```
关键点:
* `objectUniversalIdentifier` 用于标识目标对象。 对于标准对象,请使用从 `twenty-sdk` 导出的 `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS`。
* 在 `defineObject()` 中以内联方式定义字段时,你不需要 `objectUniversalIdentifier`——它会从父对象继承。
* `defineField()` 是为非通过 `defineObject()` 创建的对象添加字段的唯一方式。
### 关系
关系用于将对象彼此连接。 在 Twenty 中,关系始终是双向的——你需要定义两侧,每一侧都引用另一侧。
关系有两种类型:
| 关系类型 | 描述 | 是否有外键? |
| ------------- | ------------------- | ------------------- |
| `MANY_TO_ONE` | 该对象的多条记录指向目标对象的一条记录 | 是(`joinColumnName` |
| `ONE_TO_MANY` | 该对象的一条记录拥有目标对象的多条记录 | 否(反向侧) |
#### 关系如何工作
每个关系都需要两个相互引用的字段:
1. **MANY_TO_ONE** 侧——位于持有外键的对象上
2. **ONE_TO_MANY** 侧——位于拥有集合的对象上
两个字段都使用 `FieldType.RELATION`,并通过 `relationTargetFieldMetadataUniversalIdentifier` 相互交叉引用。
#### 示例:Post Card 拥有多个收件人
假设一个 `PostCard` 可以发送到多个 `PostCardRecipient` 记录。 每个收件人只隶属于一张 Post Card。
**步骤 1:在 PostCard 上定义 ONE_TO_MANY 侧**(“一”侧):
```typescript
// src/fields/post-card-recipients-on-post-card.field.ts
import { defineField, FieldType, RelationType } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_RECIPIENTS_FIELD_ID = 'a1111111-1111-1111-1111-111111111111';
// Import from the other side
import { POST_CARD_FIELD_ID } from './post-card-on-post-card-recipient.field';
export default defineField({
universalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
objectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCardRecipients',
label: 'Post Card Recipients',
icon: 'IconUsers',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_FIELD_ID,
universalSettings: {
relationType: RelationType.ONE_TO_MANY,
},
});
```
**步骤 2:在 PostCardRecipient 上定义 MANY_TO_ONE 侧**(“多”侧——持有外键):
```typescript
// src/fields/post-card-on-post-card-recipient.field.ts
import { defineField, FieldType, RelationType, OnDeleteAction } from 'twenty-sdk';
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
// Export so the other side can reference it
export const POST_CARD_FIELD_ID = 'b2222222-2222-2222-2222-222222222222';
// Import from the other side
import { POST_CARD_RECIPIENTS_FIELD_ID } from './post-card-recipients-on-post-card.field';
export default defineField({
universalIdentifier: POST_CARD_FIELD_ID,
objectUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
icon: 'IconMail',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
});
```
<Note>
\*\*循环导入:\*\*两个关系字段相互引用彼此的 `universalIdentifier`。 为避免循环导入问题,请在各自文件中将字段 ID 作为具名常量导出,并在另一个文件中导入它们。 构建系统会在编译时解析这些引用。
</Note>
#### 与标准对象建立关系
要与内置的 Twenty 对象(Person、Company 等)建立关系,请使用 `STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS`
```typescript
// src/fields/person-on-self-hosting-user.field.ts
import {
defineField,
FieldType,
RelationType,
OnDeleteAction,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk';
import { SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER } from '../objects/self-hosting-user.object';
export const PERSON_FIELD_ID = 'c3333333-3333-3333-3333-333333333333';
export const SELF_HOSTING_USER_REVERSE_FIELD_ID = 'd4444444-4444-4444-4444-444444444444';
export default defineField({
universalIdentifier: PERSON_FIELD_ID,
objectUniversalIdentifier: SELF_HOSTING_USER_UNIVERSAL_IDENTIFIER,
type: FieldType.RELATION,
name: 'person',
label: 'Person',
description: 'Person matching with the self hosting user',
isNullable: true,
relationTargetObjectMetadataUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
relationTargetFieldMetadataUniversalIdentifier: SELF_HOSTING_USER_REVERSE_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.SET_NULL,
joinColumnName: 'personId',
},
});
```
#### 关系字段属性
| 属性 | 必填 | 描述 |
| ------------------------------------------------- | ---------------- | -------------------------------------------------------------- |
| `类型` | 是 | 必须为 `FieldType.RELATION` |
| `relationTargetObjectMetadataUniversalIdentifier` | 是 | 目标对象的 `universalIdentifier` |
| `relationTargetFieldMetadataUniversalIdentifier` | 是 | 目标对象上匹配字段的 `universalIdentifier` |
| `universalSettings.relationType` | 是 | `RelationType.MANY_TO_ONE` 或 `RelationType.ONE_TO_MANY` |
| `universalSettings.onDelete` | 仅适用于 MANY_TO_ONE | 当被引用的记录被删除时的处理方式:`CASCADE`、`SET_NULL`、`RESTRICT` 或 `NO_ACTION` |
| `universalSettings.joinColumnName` | 仅适用于 MANY_TO_ONE | 外键的数据库列名(例如,`postCardId` |
#### 在 defineObject 中内联关系字段
你也可以直接在 `defineObject()` 内定义关系字段。 在这种情况下,省略 `objectUniversalIdentifier`——它会从父对象继承:
```typescript
export default defineObject({
universalIdentifier: '...',
nameSingular: 'postCardRecipient',
// ...
fields: [
{
universalIdentifier: POST_CARD_FIELD_ID,
type: FieldType.RELATION,
name: 'postCard',
label: 'Post Card',
relationTargetObjectMetadataUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
relationTargetFieldMetadataUniversalIdentifier: POST_CARD_RECIPIENTS_FIELD_ID,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
onDelete: OnDeleteAction.CASCADE,
joinColumnName: 'postCardId',
},
},
// ... other fields
],
});
```
### 应用配置(application-config.ts
每个应用都有一个 `application-config.ts` 文件,用于描述:
@@ -161,13 +354,29 @@ export default defineApplication({
* `defaultRoleUniversalIdentifier` 必须与角色文件一致(见下文)。
* 清单构建期间会自动检测安装前和安装后函数。 参见 [安装前函数](#pre-install-functions) 和 [安装后函数](#post-install-functions)。
#### 应用市场元数据
如果你计划[发布你的应用](/l/zh/developers/extend/apps/publishing),这些可选字段将控制你的应用在应用市场中的展示:
| 字段 | 描述 |
| ------------------ | -------------------------- |
| `作者` | 作者或公司名称 |
| `类别` | 用于应用市场筛选的应用类别 |
| `logoUrl` | 你的应用徽标的路径(相对于 `./assets/` |
| `screenshots` | 屏幕截图路径数组(相对于 `./assets/` |
| `aboutDescription` | 用于“关于”选项卡的更长 Markdown 描述 |
| `websiteUrl` | 你的网站链接 |
| `termsUrl` | 服务条款链接 |
| `emailSupport` | 支持电子邮件地址 |
| `issueReportUrl` | 问题跟踪器链接 |
#### 角色和权限
应用可以定义角色,以封装对工作空间对象与操作的权限。 `application-config.ts` 中的 `defaultRoleUniversalIdentifier` 字段指定你的应用逻辑函数所使用的默认角色。
* 作为 `TWENTY_API_KEY` 注入的运行时 API 密钥源自该默认函数角色。
* 类型化客户端将受限于该角色授予的权限。
* 遵循最小权限原则:仅授予函数所需权限来创建一个专用角色,然后引用其通用标识符。
* 遵循最小权限原则:创建一个仅包含你的函数所需权限专用角色,然后引用其通用标识符。
##### 默认函数角色(*.role.ts
@@ -230,7 +439,7 @@ export default defineRole({
每个函数文件都使用 `defineLogicFunction()` 导出包含处理程序和可选触发器的配置。
```typescript
// src/app/createPostCard.logic-function.ts
// src/logic-functions/createPostCard.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import type { DatabaseEventPayload, ObjectRecordCreateEvent, CronPayload, RoutePayload } from 'twenty-sdk';
import { CoreApiClient, type Person } from 'twenty-sdk/generated';
@@ -324,7 +533,7 @@ export default definePreInstallLogicFunction({
你也可以随时使用 CLI 手动执行安装前函数:
```bash filename="Terminal"
yarn twenty function:execute --preInstall
yarn twenty exec --preInstall
```
关键点:
@@ -334,7 +543,7 @@ yarn twenty function:execute --preInstall
* 每个应用仅允许一个安装前函数。 如果检测到多个,清单构建将报错。
* 在构建期间,函数的 `universalIdentifier` 会自动设置为应用清单上的 `preInstallLogicFunctionUniversalIdentifier` —— 你无需在 `defineApplication()` 中引用它。
* 默认超时时间设置为 300 秒(5 分钟),以便支持更长的准备任务。
* 安装前函数不需要触发器——它们会在安装前由平台调用,或通过 `function:execute --preInstall` 手动调用。
* 安装前函数不需要触发器——它们会在安装前由平台调用,或通过 `exec --preInstall` 手动调用。
### 安装后函数
@@ -362,7 +571,7 @@ export default definePostInstallLogicFunction({
你也可以随时使用 CLI 手动执行安装后函数:
```bash filename="Terminal"
yarn twenty function:execute --postInstall
yarn twenty exec --postInstall
```
关键点:
@@ -372,7 +581,7 @@ yarn twenty function:execute --postInstall
* 每个应用仅允许一个安装后函数。 如果检测到多个,清单构建将报错。
* 在构建期间,函数的 `universalIdentifier` 会自动设置为应用清单上的 `postInstallLogicFunctionUniversalIdentifier` —— 你无需在 `defineApplication()` 中引用它。
* 默认超时时间设置为 300 秒(5 分钟),以便支持更长的设置任务,如数据填充。
* 安装后函数不需要触发器——它们会在安装过程中由平台调用,或通过 `function:execute --postInstall` 手动调用。
* 安装后函数不需要触发器——它们会在安装过程中由平台调用,或通过 `exec --postInstall` 手动调用。
### 路由触发器负载
@@ -416,15 +625,15 @@ const handler = async (event: RoutePayload) => {
`RoutePayload` 类型具有以下结构:
| 属性 | 类型 | 描述 |
| ---------------------------- | ------------------------------------- | ------------------------------------------------ |
| `headers` | `Record<string, string \| undefined>` | HTTP 请求头(仅限 `forwardedRequestHeaders` 中列出的那些) |
| `queryStringParameters` | `Record<string, string \| undefined>` | 查询字符串参数(多个值以逗号连接) |
| `pathParameters` | `Record<string, string \| undefined>` | 从路由模式中提取的路径参数(例如,`/users/:id` `{ id: '123' }` |
| `body` | `object \| null` | 已解析的请求体(JSON) |
| `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>` | 查询字符串参数(多个值以逗号连接) |
| `pathParameters` | `Record<string, string \| undefined>` | 从路由模式中提取的路径参数(例如,`/users/:id` -> `{ id: '123' }` |
| `body` | `object \| null` | 已解析的请求体(JSON) |
| `isBase64Encoded` | `boolean` | 请求体是否为 base64 编码 |
| `requestContext.http.method` | `string` | HTTP 方法(GET、POST、PUT、PATCH、DELETE |
| `requestContext.http.path` | `string` | 原始请求路径 |
### 转发 HTTP 请求头
@@ -466,7 +675,7 @@ const handler = async (event: RoutePayload) => {
你可以通过两种方式创建新函数:
* **脚手架生成**:运行 `yarn twenty entity:add` 并选择添加新逻辑函数的选项。 这将生成一个包含处理程序和配置的入门文件。
* **脚手架生成**:运行 `yarn twenty add` 并选择添加新逻辑函数的选项。 这将生成一个包含处理程序和配置的入门文件。
* **手动**:创建一个新的 `*.logic-function.ts` 文件,并使用 `defineLogicFunction()`,遵循相同的模式。
### 将逻辑函数标记为工具
@@ -478,7 +687,7 @@ const handler = async (event: RoutePayload) => {
```typescript
// src/logic-functions/enrich-company.logic-function.ts
import { defineLogicFunction } from 'twenty-sdk';
import { CoreApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const handler = async (params: { companyName: string; domain?: string }) => {
const client = new CoreApiClient();
@@ -567,7 +776,7 @@ export default defineFrontComponent({
你可以通过两种方式创建新的前端组件:
* **脚手架生成**:运行 `yarn twenty entity:add` 并选择添加新前端组件的选项。
* **脚手架生成**:运行 `yarn twenty add` 并选择添加新前端组件的选项。
* **手动**:创建一个新的 `.tsx` 文件,并使用 `defineFrontComponent()`,遵循相同的模式。
### 技能
@@ -602,47 +811,122 @@ export default defineSkill({
你可以通过两种方式创建新技能:
* **脚手架生成**:运行 `yarn twenty entity:add` 并选择添加新技能的选项。
* **脚手架生成**:运行 `yarn twenty add` 并选择添加新技能的选项。
* **手动**:创建一个新文件,并使用 `defineSkill()`,遵循相同的模式。
### 生成的类型化客户端
### 类型化 API 客户端(`twenty-client-sdk`
两个类型化客户端会由 `yarn twenty dev` 基于你的工作区架构自动生成,并存放在 `node_modules/twenty-sdk/generated`
`twenty-client-sdk` 包提供了两个类型化的 GraphQL 客户端,供你的逻辑函数和前端组件与 Twenty API 交互
* **`CoreApiClient`** — 查询 `/graphql` 端点以获取工作区数据
* **`MetadataApiClient`** — 查询 `/metadata` 端点以获取工作区配置并处理文件上传
| 客户端 | 导入 | 端点 | 是否生成? |
| ------------------- | ---------------------------- | ------------------------ | --------- |
| `CoreApiClient` | `twenty-client-sdk/core` | `/graphql`——工作区数据(记录、对象) | 是,在开发/构建时 |
| `MetadataApiClient` | `twenty-client-sdk/metadata` | `/metadata`——工作区配置、文件上传 | 否,已预构建提供 |
#### CoreApiClient
`CoreApiClient` 是用于查询和变更工作区数据的主要客户端。 它会在执行 `yarn twenty dev` 或 `yarn twenty build` 时根据你的工作区架构生成,因此能完全类型化以匹配你的对象和字段。
```typescript
import { CoreApiClient, MetadataApiClient } from 'twenty-sdk/generated';
import { CoreApiClient } from 'twenty-client-sdk/core';
const client = new CoreApiClient();
const { me } = await client.query({ me: { id: true, displayName: true } });
const metadataClient = new MetadataApiClient();
const { currentWorkspace } = await metadataClient.query({ currentWorkspace: { id: true } });
// Query records
const { companies } = await client.query({
companies: {
edges: {
node: {
id: true,
name: true,
domainName: true,
},
},
},
});
// Create a record
const { createCompany } = await client.mutation({
createCompany: {
__args: {
data: {
name: 'Acme Corp',
},
},
id: true,
name: true,
},
});
```
每当你的对象或字段发生变化时,`yarn twenty dev` 都会自动重新生成这两个客户端
该客户端使用选择集语法:传入 `true` 以包含某字段,使用 `__args` 传递参数,并通过嵌套对象表示关系。 你将基于工作区架构获得完整的自动补全和类型检查
#### 逻辑函数中的运行时凭据
<Note>
**CoreApiClient 在开发/构建时生成。** 如果在未先运行 `yarn twenty dev` 或 `yarn twenty build` 的情况下尝试使用它,将会抛出错误。 生成过程是自动完成的——CLI 会自省你的工作区 GraphQL 架构,使用 `@genql/cli` 生成类型化客户端,将生成的源码写入 `node_modules/twenty-client-sdk/dist/core/generated/`,并替换 `node_modules/twenty-client-sdk/dist/core.mjs` 和 `node_modules/twenty-client-sdk/dist/core.cjs` 中的存根。
</Note>
当你的函数在 Twenty 上运行时,平台会在代码执行前将凭据作为环境变量注入:
#### 使用 CoreSchema 进行类型标注
* `TWENTY_API_URL`:你的应用所针对的 Twenty API 的基础 URL。
* `TWENTY_API_KEY`:作用域限定于你的应用默认函数角色的短期密钥。
`CoreSchema` 提供与工作区对象相匹配的 TypeScript 类型,可用于为组件状态或函数参数进行类型标注:
备注:
```typescript
import { CoreApiClient, CoreSchema } from 'twenty-client-sdk/core';
import { useState } from 'react';
* 你无需向生成的客户端传递 URL 或 API 密钥。 它会在运行时从 process.env 读取 `TWENTY_API_URL` 和 `TWENTY_API_KEY`。
* API 密钥的权限由 `application-config.ts` 中通过 `defaultRoleUniversalIdentifier` 引用的角色决定。 这是你的应用逻辑函数使用的默认角色。
* 应用可以定义角色以遵循最小权限原则。 仅授予函数所需的权限,然后将 `defaultRoleUniversalIdentifier` 指向该角色的通用标识符。
const [company, setCompany] = useState<
Pick<CoreSchema.Company, 'id' | 'name'> | undefined
>(undefined);
const client = new CoreApiClient();
const result = await client.query({
company: {
__args: { filter: { position: { eq: 1 } } },
id: true,
name: true,
},
});
setCompany(result.company);
```
#### MetadataApiClient
`MetadataApiClient` 随 SDK 一并提供,已预构建(无需生成)。 它会查询 `/metadata` 端点以获取工作区配置、应用以及文件上传:
```typescript
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
const metadataClient = new MetadataApiClient();
// Query workspace info
const { currentWorkspace } = await metadataClient.query({
currentWorkspace: { id: true, displayName: true },
});
// List installed applications
const { findManyApplications } = await metadataClient.query({
findManyApplications: {
id: true,
name: true,
version: true,
},
});
```
#### 运行时凭据
当你的代码在 Twenty 上运行(逻辑函数或前端组件)时,平台会以环境变量的形式注入凭据:
* `TWENTY_API_URL`——Twenty API 的基础 URL
* `TWENTY_API_KEY`——作用域限定于你的应用默认函数角色的短期密钥
你无需将这些值传递给客户端——它们会自动从 `process.env` 读取。 API 密钥的权限由你的 `application-config.ts` 中 `defaultRoleUniversalIdentifier` 引用的角色决定。
#### 上传文件
生成的 `MetadataApiClient` 包含一个 `uploadFile` 方法,用于将文件附加到你的工作区对象的文件类型字段。 由于标准 GraphQL 客户端不原生支持多部分文件上传,该客户端提供了一个专用方法,在底层实现了 [GraphQL 多部分请求规范](https://github.com/jaydenseric/graphql-multipart-request-spec)
`MetadataApiClient` 包含一个 `uploadFile` 方法,用于将文件附加到文件类型字段。 它实现了[GraphQL 多部分请求规范](https://github.com/jaydenseric/graphql-multipart-request-spec)
```typescript
import { MetadataApiClient } from 'twenty-sdk/generated';
import { MetadataApiClient } from 'twenty-client-sdk/metadata';
import * as fs from 'fs';
const metadataClient = new MetadataApiClient();
@@ -652,25 +936,14 @@ const fileBuffer = fs.readFileSync('./invoice.pdf');
const uploadedFile = await metadataClient.uploadFile(
fileBuffer, // file contents as a Buffer
'invoice.pdf', // filename
'application/pdf', // MIME type (defaults to 'application/octet-stream')
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universal identifier
'application/pdf', // MIME type
'58a0a314-d7ea-4865-9850-7fb84e72f30b', // field universalIdentifier
);
console.log(uploadedFile);
// { id: '...', path: '...', size: 12345, createdAt: '...', url: 'https://...' }
```
方法签名:
```typescript
uploadFile(
fileBuffer: Buffer,
filename: string,
contentType: string,
fieldMetadataUniversalIdentifier: string,
): Promise<{ id: string; path: string; size: number; createdAt: string; url: string }>
```
| 参数 | 类型 | 描述 |
| ---------------------------------- | -------- | ------------------------------------------------ |
| `fileBuffer` | `Buffer` | 原始文件内容 |
@@ -680,8 +953,7 @@ uploadFile(
关键点:
* `uploadFile` 方法可在 `MetadataApiClient` 上使用,因为上传 mutation 由 `/metadata` 端点解析
* 它使用该字段的 `universalIdentifier`(而不是其工作区特定的 ID),因此你的上传代码可以在安装了你的应用的任何工作区中使用——这与应用在其他地方引用字段的方式保持一致。
* 使用字段的 `universalIdentifier`(而不是其工作区特定的 ID),因此你的上传代码可在安装了你的应用的任何工作区中运行
* 返回的 `url` 是一个签名 URL,你可以用它来访问已上传的文件。
### Hello World 示例
@@ -49,7 +49,7 @@ npx create-twenty-app@latest my-app --minimal
```bash filename="Terminal"
# Add a new entity to your application (guided)
yarn twenty entity:add
yarn twenty add
# Watch your application's function logs
yarn twenty function:logs
@@ -123,7 +123,7 @@ my-twenty-app/
总体来说:
* **package.json**:声明应用名称、版本、引擎(Node 24+、Yarn 4),并添加 `twenty-sdk` 以及一个 `twenty` 脚本,该脚本会委托给本地的 `twenty` CLI。 运行 `yarn twenty help` 以列出所有可用命令。
* **.gitignore**:忽略常见产物,如 `node_modules``.yarn`、`generated/`(类型化客户端)、`dist/``build/`、覆盖率文件夹、日志文件以及 `.env*` 文件。
* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `.twenty/`, `dist/`, `build/`, coverage folders, log files, and `.env*` files.
* **yarn.lock**、**.yarnrc.yml**、**.yarn/**:锁定并配置项目使用的 Yarn 4 工具链。
* **.nvmrc**:固定项目期望的 Node.js 版本。
* **.oxlintrc.json** 和 **tsconfig.json**:为应用的 TypeScript 源码提供 Lint 与 TypeScript 配置。
@@ -167,8 +167,8 @@ export default defineObject({
后续命令将添加更多文件和文件夹:
* `yarn twenty dev` 会在 `node_modules/twenty-sdk/generated` 中自动生成两个类型化 API 客户端:`CoreApiClient`(通过 `/graphql` 获取工作区数据)和 `MetadataApiClient`(通过 `/metadata` 处理工作区配置和文件上传)。
* `yarn twenty entity:add` 会在 `src/` 下为你的自定义对象、函数、前端组件、角色、技能等添加实体定义文件。
* `yarn twenty dev` will auto-generate the typed `CoreApiClient` (for workspace data via `/graphql`) into `node_modules/twenty-client-sdk/`. The `MetadataApiClient` (for workspace configuration and file uploads via `/metadata`) ships pre-built and is available immediately. Import them from `twenty-client-sdk/core` and `twenty-client-sdk/metadata` respectively.
* `yarn twenty add` will add entity definition files under `src/` for your custom objects, functions, front components, roles, skills, and more.
## 身份验证
@@ -12,7 +12,25 @@ description: 将你的 Twenty 应用分发到应用市场,或进行内部部
一旦你的应用已[在本地构建并完成测试](/l/zh/developers/extend/apps/building),你可以通过两种方式进行分发:
* **发布到 npm** — 将你的应用在 Twenty 应用市场上架,供任何工作区发现并安装。
* **推送 tar 包** — 将你的应用部署到特定的 Twenty 服务器供内部使用,而无需公开发布
* **部署 tar 包** — 直接将你的应用上传到特定的 Twenty 服务器,以供内部或私有使用。
两种路径都从同一个**构建**步骤开始。
## 构建你的应用
`build` 命令会编译你的 TypeScript 源码,转译逻辑函数和前端组件,并生成一个描述你应用内容的 `manifest.json`
```bash filename="Terminal"
yarn twenty build
```
输出将写入 `.twenty/output/`。 This directory contains everything needed for distribution: compiled code, assets, the manifest, and a copy of your `package.json`.
To also create a `.tgz` tarball (used by the deploy command internally, or for manual distribution):
```bash filename="Terminal"
yarn twenty build --tarball
```
## 发布到 npm
@@ -21,29 +39,72 @@ description: 将你的 Twenty 应用分发到应用市场,或进行内部部
### 要求
* 一个 [npm](https://www.npmjs.com) 账户
* 你的包名**必须**使用 `twenty-app-` 前缀(例如,`twenty-app-postcard-sender`
* The `twenty-app` keyword **must** be listed in your `package.json` `keywords` array
### Adding the required keyword
The Twenty marketplace discovers apps by searching the npm registry for packages with the `twenty-app` keyword. Add it to your `package.json`:
```json filename="package.json"
{
"name": "twenty-app-postcard-sender",
"version": "1.0.0",
"keywords": ["twenty-app"],
...
}
```
<Note>
The marketplace searches for `keywords:twenty-app` on the npm registry. Without this keyword, your package won't appear in the marketplace even if it has the `twenty-app-` name prefix.
</Note>
### 步骤
1. **构建你的应用** — CLI 会编译你的 TypeScript 源码并生成应用清单:
1. **Build your app:**
```bash filename="Terminal"
yarn twenty build
```
2. **发布到 npm** — 将构建好的包推送到 npm 注册表:
2. **Publish to npm:**
```bash filename="Terminal"
npx twenty publish
yarn twenty publish
```
### 自动发现
This runs `npm publish` from the `.twenty/output/` directory.
Twenty 应用市场目录会自动发现带有 `twenty-app-` 前缀的包。 发布后,你的应用会在几分钟内出现在应用市场中 — 无需手动注册或审批。
To publish under a specific dist-tag (e.g., `beta` or `next`):
```bash filename="Terminal"
yarn twenty publish --tag beta
```
### How marketplace discovery works
The Twenty server syncs its marketplace catalog from the npm registry **every hour**:
1. It searches for all npm packages with the `keywords:twenty-app` keyword
2. For each package, it fetches the `manifest.json` from the npm CDN
3. The app's metadata (name, description, author, logo, screenshots, category) is extracted from the manifest and displayed in the marketplace
After publishing, your app can take up to one hour to appear in the marketplace. To trigger the sync immediately instead of waiting for the next hourly run:
```bash filename="Terminal"
yarn twenty catalog-sync
```
To target a specific remote:
```bash filename="Terminal"
yarn twenty catalog-sync -r production
```
The metadata shown in the marketplace comes from your `defineApplication()` call in your app source code — fields like `displayName`, `description`, `author`, `category`, `logoUrl`, `screenshots`, `aboutDescription`, `websiteUrl`, and `termsUrl`.
### CI 发布
脚手架项目包含一个 GitHub Actions 工作流,会在每次发版时自动发布。 它会先运行 `app:build`,然后在构建输出目录中执行 `npm publish --provenance`
The scaffolded project includes a GitHub Actions workflow that publishes on every release:
```yaml filename=".github/workflows/publish.yml"
name: Publish
@@ -72,48 +133,117 @@ jobs:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
```
对于其他 CI 系统(GitLab CICircleCI 等),同样适用以下三条命令:`yarn install`、`npx twenty build`,然后在 `.twenty/output` 目录下执行 `npm publish`。
For other CI systems (GitLab CI, CircleCI, etc.), the same three commands apply: `yarn install`, `yarn twenty build`, then `npm publish` from `.twenty/output`.
<Tip>
**npm provenance** 可选,但建议启用。 使用 `--provenance` 发布会在你的 npm 列表中添加可信徽章,使用户可以验证该包是由公共 CI 流水线中的特定提交构建的。 有关设置说明,请参见 [npm provenance 文档](https://docs.npmjs.com/generating-provenance-statements)。
</Tip>
## 内部分发
## Deploying to a server (tarball)
对于你不希望公开的应用 — 例如专有工具、仅供企业使用的集成或实验性构建 — 你可以将 tar 包直接推送到某台 Twenty 服务器。
For apps you don't want publicly available — proprietary tools, enterprise-only integrations, or experimental builds — you can deploy a tarball directly to a Twenty server.
### 推送 tar 包
### 先决条件
在一步中构建你的应用并将其部署到特定服务器:
Before deploying, you need a configured remote pointing to the target server. Remotes store the server URL and authentication credentials locally in `~/.twenty/config.json`.
Add a remote:
```bash filename="Terminal"
npx twenty publish --server <server-url>
yarn twenty remote add --url https://your-twenty-server.com --as production
```
该服务器上的任何工作区随后都可以在**应用程序**设置页面安装和升级该应用。
For a local development server:
```bash filename="Terminal"
yarn twenty remote add --local --as local
```
You can also authenticate with an API key for non-interactive environments:
```bash filename="Terminal"
yarn twenty remote add --url https://your-twenty-server.com --token <api-key> --as production
```
Manage your remotes:
```bash filename="Terminal"
yarn twenty remote list # List all configured remotes
yarn twenty remote switch prod # Set the default remote
yarn twenty remote status # Show active remote and auth status
yarn twenty remote remove old # Remove a remote
```
### Deploying
Build and upload your app to the server in one step:
```bash filename="Terminal"
yarn twenty deploy
```
This builds the app with `--tarball`, then uploads the tarball to the default remote via a GraphQL multipart upload.
To deploy to a specific remote:
```bash filename="Terminal"
yarn twenty deploy -r production
```
### Sharing a deployed app
Tarball apps are not listed in the public marketplace, so other workspaces on the same server won't discover them by browsing. To share a deployed app:
1. Go to **Settings > Applications > Registrations** and open your app
2. In the **Distribution** tab, click **Copy share link**
3. Share this link with users on other workspaces — it takes them directly to the app's install page
The share link uses the server's base URL (without any workspace subdomain) so it works for any workspace on the server.
### 版本管理
要发布更新:
1. 更新 `package.json` 中的 `version` 字段
2. 使用 `npx twenty publish --server <server-url>` 推送新的 tar 包
3. 该服务器上的工作区会在其设置中看到可用的升级
2. Run `yarn twenty deploy` (or `yarn twenty deploy -r production`)
3. Workspaces that have the app installed will see the upgrade available in their settings
<Note>
内部应用的作用范围仅限于它们被推送到的服务器。 它们不会出现在公共应用市场中,其他服务器上的工作区也无法安装。
</Note>
## Installing apps
## 应用类别
Once an app is published (npm) or deployed (tarball), workspaces install it through the UI:
```bash filename="Terminal"
yarn twenty install
```
Or from the **Settings > Applications** page in the Twenty UI, where both marketplace and tarball-deployed apps can be browsed and installed.
## App distribution categories
Twenty 会根据分发方式将应用归为三类:
| 类别 | 工作原理 | 在应用市场中可见? |
| ------- | ------------------------------------------------- | --------- |
| **开发** | 通过 `yarn twenty dev` 运行的本地开发模式应用。 用于构建和测试。 | 否 |
| **已发布** | 使用 `twenty-app-` 前缀发布到 npm 的应用。 在应用市场上架,供任何工作区安装。 | 是 |
| **内部** | 通过 tar 包部署到特定服务器的应用。 仅对该服务器上的工作区可用。 | 否 |
| 类别 | 工作原理 | 在应用市场中可见? |
| ---------------------- | ---------------------------------------------------------------------------------- | --------- |
| **开发** | 通过 `yarn twenty dev` 运行的本地开发模式应用。 用于构建和测试。 | 否 |
| **Published (npm)** | Apps published to npm with the `twenty-app` keyword. 在应用市场上架,供任何工作区安装。 | 是 |
| **Internal (tarball)** | 通过 tar 包部署到特定服务器的应用。 Available only to workspaces on that server via a share link. | 否 |
<Tip>
在构建你的应用时,从**开发**模式开始。 准备就绪后,选择用于广泛分发的**已发布**(npm),或用于私有部署的**内部**(tar 包)。
</Tip>
## CLI reference
| 命令 | 描述 | Key flags |
| --------------------------- | ---------------------------------------------- | --------------------------------------------------- |
| `yarn twenty build` | Compile app and generate manifest | `--tarball` — also create a `.tgz` package |
| `yarn twenty publish` | Build and publish to npm | `--tag <tag>` — npm dist-tag (e.g., `beta`, `next`) |
| `yarn twenty deploy` | Build and upload tarball to a server | `-r, --remote <name>` — target remote |
| `yarn twenty catalog-sync` | Trigger marketplace catalog sync on the server | `-r, --remote <name>` — target remote |
| `yarn twenty install` | Install a deployed app on a workspace | `-r, --remote <name>` — target remote |
| `yarn twenty dev` | Watch and sync local changes | Uses default remote |
| `yarn twenty remote add` | Add a server connection | `--url`, `--token`, `--as`, `--local`, `--port` |
| `yarn twenty remote list` | List configured remotes | — |
| `yarn twenty remote switch` | Set default remote | — |
| `yarn twenty remote status` | Show connection status | — |
| `yarn twenty remote remove` | Remove a remote | — |
File diff suppressed because one or more lines are too long
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {Jy het nie toestemming om toegang tot die {fieldsList} veld te hê nie} other {Jy het nie toestemming om toegang tot die {fieldsList} velde te hê nie}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} krediete"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} krediete gebruik"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Aksies gebruikers kan uitvoer op hierdie voorwerp"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Na of gelyk aan"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "agent"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "Agent-tekens"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Agente"
msgid "Agents powering this app"
msgstr "Agente wat hierdie toepassing aandryf"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "KI"
msgid "AI Chat"
msgstr "AI-klets"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "Voorbereiding van KI-versoek"
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
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "tussen die {startOrdinal} en {endOrdinal} van die maand"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Boole"
msgid "Both"
msgstr "Albei"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Maak die veld skoon of \"X\" om terug te keer na omgewing/standaardwaarde."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Klik op 'n gebruiker om hul daaglikse uiteensetting te sien."
@@ -2986,6 +3072,8 @@ msgstr "ClickHouse is nodig vir ouditlogboeke. Kontak jou administrateur."
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse is nie gekonfigureer nie"
@@ -3100,6 +3188,11 @@ msgstr "kolomdata is nie versoenbaar met Multi-Select nie. Vereiste formaat is '
msgid "Columns not matched:"
msgstr "Kolomme nie ooreenstem nie:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Opdragkieslys"
msgid "command menu item"
msgstr "opdragkieslysitem"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Plak die kode hieronder"
msgid "Copy Setup Key"
msgstr "Kopieer Setup Sleutel"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Kredietgebruik"
msgid "Credit usage breakdown for your workspace."
msgstr "Uiteensetting van kredietgebruik vir jou werkruimte."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "krediete"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Krediete"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Geldeenheidskode"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Huidig"
@@ -4124,6 +4221,12 @@ msgstr "Siaan"
msgid "Czech"
msgstr "Tsjeggies"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Beskryf wat jy wil hê die KI moet doen..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Beskryf wat jy wil hê die KI moet doen..."
msgid "Description"
msgstr "Beskrywing"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Beskrywing van die aansoek"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "E-pos moet 'n geldige e-pos wees"
msgid "Email or domain is already in blocklist"
msgstr "E-pos of domein is reeds in bloklys"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Voer jou API-sleutel in"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Onderneming"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Slegs uitgelig"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "veld"
@@ -6686,6 +6795,11 @@ msgstr "Veldnaam"
msgid "Field on destination"
msgstr "Veld op bestemming"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "van {startDay} tot {endDay}"
msgid "front component"
msgstr "front-end-komponent"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "front-end-komponente"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Volle toegang"
msgid "Function name"
msgstr "Funksienaam"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "funksies"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Funksies"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Aangemeld as {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "logiese funksie"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Logiese funksies"
@@ -9208,10 +9318,10 @@ msgstr "Maand van die jaar"
msgid "monthly"
msgstr "maandeliks"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Maandelikse intekening"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "Naam kan nie leeg wees nie"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Naam in beide enkelvoudige (bv. 'Faktuur') en meervoudige (bv. 'Fakture') vorme."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Naam van die aansoek"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Navigeer na vorige weergawe"
msgid "Navigate to previous workflow"
msgstr "Navigeer na vorige werkstroom"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "navigasiekieslysitem"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "Geen agente beskikbaar nie"
msgid "No agents match your search"
msgstr "Geen agente voldoen aan jou soektog nie"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Geen geloofsbriewe"
msgid "No credit consumption recorded for this user."
msgstr "Geen kredietverbruik vir hierdie gebruiker aangeteken nie."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Nog geen kredietverbruik aangeteken nie."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "Geen Gedeleteerde {objectLabelSingular} gevind"
msgid "No deleted records matching the filter criteria were found."
msgstr "Geen gedeleteerde rekords wat aan die filterkriteria voldoen nie, is gevind."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "Geen snellers vir hierdie funksie gekonfigureer nie."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "Geen gebruiksdata nie"
@@ -10154,6 +10283,11 @@ msgstr "Geen veranderlikes beskikbaar nie"
msgid "No variables found"
msgstr "Geen veranderlikes gevind nie"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth of API-sleutel"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "objek"
@@ -10797,6 +10932,17 @@ msgstr "bladsyuitleg-oortjie"
msgid "page layout widget"
msgstr "bladsyuitleg-widget"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Mense aan wie ek e-posse gestuur en van ontvang het."
msgid "People Ive sent emails to."
msgstr "Mense aan wie ek e-posse gestuur het."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "Verskaffer \"{0}\" verwyder"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Verskaffers"
@@ -11881,6 +12031,11 @@ msgstr "Reageer"
msgid "Reply to all"
msgstr "Beantwoord almal"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Rykteks"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "rol"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "Rol suksesvol opdateer"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "Rol suksesvol opdateer"
msgid "Roles"
msgstr "Rolle"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Soek vouers..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Soek vir 'n gebruiker..."
@@ -12548,6 +12716,8 @@ msgstr "Soek op die web na {query}"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "sitplek / maand"
@@ -13068,11 +13238,6 @@ msgstr "Instellings Volle Toegang"
msgid "Settings permissions"
msgstr "Instellings toestemming"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Instellings-oortjie"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Sewende"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Deel"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Deel hierdie skakel om gebruikers uit te nooi om by jou werkruimte aan te sluit"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "vaardigheid"
@@ -13253,12 +13430,24 @@ msgstr "Vaardigheidsnaam"
msgid "Skill not found"
msgstr "Vaardigheid nie gevind nie"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Vaardighede"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14226,7 +14415,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Hierdie toepassing is op die markplek gelys omdat dit op npm gepubliseer is."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Hierdie toepassing is nie op die markplek gelys nie. Dit is via 'n direkte skakel gedeel."
@@ -14555,6 +14744,12 @@ msgstr "Totale werke"
msgid "Total time"
msgstr "Totale tyd"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14877,6 +15072,7 @@ msgstr "Universele ID"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15070,6 +15266,7 @@ msgid "Upgrade Plan"
msgstr "Gradeer plan op"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Opgradeer na {latestAvailableVersion}"
@@ -15079,12 +15276,13 @@ msgstr "Opgradeer na {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "Opgradeer vir toegang"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Gradeer op na Enterprise om toegang tot ouditlogboeke te kry"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Opgradeer..."
@@ -15157,7 +15355,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Gebruik"
@@ -15171,6 +15371,11 @@ msgstr "Gebruik oor alle werkruimtes op hierdie bediener"
msgid "Usage Analytics"
msgstr "Gebruiksanalise"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15389,13 +15594,7 @@ msgstr "Verifieer kode vanaf die app"
msgid "Verify the code from the app"
msgstr "Verifieer die kode vanaf die app"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Weergawe"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Weergawe van die aansoek"
@@ -15434,6 +15633,11 @@ msgstr "Aansig"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15518,6 +15722,7 @@ msgstr "Bekyk logboeke"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Bekyk markplekbladsy"
@@ -15564,10 +15769,17 @@ msgid "View workspace activity logs"
msgstr "Bekyk werkruimte-aktiwiteitslogboeke"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Aansigte"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15821,11 +16033,21 @@ msgstr "Waar"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Of hierdie model 'chain-of-thought'-redenasie ondersteun"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Widget tipe"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15914,6 +16136,7 @@ msgstr "Werksvloeie"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15928,6 +16151,7 @@ msgstr "Werksvloeie"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16054,10 +16278,10 @@ msgstr "Jaar"
msgid "yearly"
msgstr "jaarliks"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Jaarlikse intekening"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, zero {ليس لديك إذن للوصول إلى حقل {fieldsList}} one {ليس لديك إذن للوصول إلى حقل {fieldsList}} two {ليس لديك إذن للوصول إلى الحقول {fieldsList}} few {ليس لديك إذن للوصول إلى الحقول {fieldsList}} many {ليس لديك إذن للوصول إلى الحقول {fieldsList}} other {ليس لديك إذن للوصول إلى الحقول {fieldsList}}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} أرصدة"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} أرصدة مستخدمة"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "الإجراءات التي يمكن للمستخدمين تنفيذها
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "بعد أو يساوي"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "وكيل"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "رموز الوكيل"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "الوكلاء"
msgid "Agents powering this app"
msgstr "الوكلاء الذين يدعمون هذا التطبيق"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "الذكاء الاصطناعي"
msgid "AI Chat"
msgstr "دردشة الذكاء الاصطناعي"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "تحضير طلب الذكاء الاصطناعي"
msgid "AI Response Schema"
msgstr "نموذج استجابة الذكاء الاصطناعي"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "بين {startOrdinal} و {endOrdinal} من الشهر"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "قيمة منطقية"
msgid "Both"
msgstr "كلاهما"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "إفراغ الحقل أو \"X\" للعودة إلى قيمة البيئة/القيمة الافتراضية."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "انقر مستخدمًا لعرض تفاصيله اليومية."
@@ -2986,6 +3072,8 @@ msgstr "ClickHouse مطلوب لسجلات التدقيق. تواصل مع مس
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "لم يتم تهيئة ClickHouse"
@@ -3100,6 +3188,11 @@ msgstr "بيانات العمود غير متوافقة مع التحديد ال
msgid "Columns not matched:"
msgstr "الأعمدة غير المتطابقة:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "قائمة الأوامر"
msgid "command menu item"
msgstr "عنصر قائمة الأوامر"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "انسخ والصق الرمز أدناه"
msgid "Copy Setup Key"
msgstr "نسخ مفتاح الإعداد"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "استخدام الاعتمادات"
msgid "Credit usage breakdown for your workspace."
msgstr "تفصيل استخدام الرصيد في مساحة عملك."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "الأرصدة"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "الأرصدة"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "رمز العملة"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "الحالي"
@@ -4124,6 +4221,12 @@ msgstr "سماوي"
msgid "Czech"
msgstr "التشيكية"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "صف ما تريد أن يقوم به الذكاء الاصطناعي...
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "صف ما تريد أن يقوم به الذكاء الاصطناعي...
msgid "Description"
msgstr "الوصف"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "وصف التطبيق"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "يجب أن يكون البريد الإلكتروني صالحًا"
msgid "Email or domain is already in blocklist"
msgstr "البريد الإلكتروني أو النطاق مدرج بالفعل في القائمة السوداء"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "أدخل مفتاح API الخاص بك"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "مؤسسة"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "المميزة فقط"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "الحقل"
@@ -6686,6 +6795,11 @@ msgstr "اسم الحقل"
msgid "Field on destination"
msgstr "حقل في الوجهة"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "من {startDay} إلى {endDay}"
msgid "front component"
msgstr "المكوّن الأمامي"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "المكوّنات الأمامية"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "وصول كامل"
msgid "Function name"
msgstr "اسم الوظيفة"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "الوظائف"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "الوظائف"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "تسجيل الدخول كــ {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "وظيفة منطقية"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "الوظائف المنطقية"
@@ -9208,10 +9318,10 @@ msgstr "شهر من السنة"
msgid "monthly"
msgstr "شهري"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "اشتراك شهري"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "لا يمكن أن يكون الاسم فارغًا"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "الاسم بصيغتي المفرد (مثلاً 'فاتورة') والجمع (مثلاً 'فواتير')."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "اسم التطبيق"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "الانتقال إلى النسخة السابقة"
msgid "Navigate to previous workflow"
msgstr "الانتقال إلى عملية العمل السابقة"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "عنصر قائمة التنقل}]} }]]=## Error: JSON parsing failed due to invalid syntax. Please correct any formatting issues and try again.------------------------------------------------------------------------{"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "لا يوجد وكلاء متاحون"
msgid "No agents match your search"
msgstr "لا يوجد وكلاء يطابقون بحثك"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "لا توجد بيانات اعتماد"
msgid "No credit consumption recorded for this user."
msgstr "لم يُسجَّل استهلاك رصيد لهذا المستخدم."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "لم يُسجَّل استهلاك رصيد بعد."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "لم يتم العثور على {objectLabelSingular} محذوف"
msgid "No deleted records matching the filter criteria were found."
msgstr "لم يتم العثور على سجلات محذوفة تطابق معايير الفلترة."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "لا توجد مشغّلات مُكوّنة لهذه الوظيفة."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "لا توجد بيانات استخدام"
@@ -10154,6 +10283,11 @@ msgstr "لا توجد متغيرات متاحة"
msgid "No variables found"
msgstr "لم يتم العثور على متغيرات"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr ""
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "كائن"
@@ -10797,6 +10932,17 @@ msgstr "علامة تبويب تخطيط الصفحة"
msgid "page layout widget"
msgstr "أداة تخطيط الصفحة"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "الأشخاص الذين أرسلت إليهم رسائل واستلم
msgid "People Ive sent emails to."
msgstr "الأشخاص الذين أرسلت إليهم رسائل."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "تمت إزالة المزود \"{0}\""
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "مزودو الخدمة"
@@ -11881,6 +12031,11 @@ msgstr "الرد"
msgid "Reply to all"
msgstr "الرد على الكل"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "نص منسق"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "دور"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "تم تحديث الدور بنجاح"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "تم تحديث الدور بنجاح"
msgid "Roles"
msgstr "\\\\"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "بحث في المجلدات..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "ابحث عن مستخدم..."
@@ -12548,6 +12716,8 @@ msgstr "جارٍ البحث على الويب عن {query}"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "مقعد / شهر"
@@ -13068,11 +13238,6 @@ msgstr "الوصول الكامل للإعدادات"
msgid "Settings permissions"
msgstr "أذونات الإعدادات"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "علامة تبويب الإعدادات"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "سابع"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "شارك"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "شارك هذا الرابط لدعوة المستخدمين للانضمام إلى مساحة العمل الخاصة بك"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "مهارة"
@@ -13253,12 +13430,24 @@ msgstr "اسم المهارة"
msgid "Skill not found"
msgstr "لم يتم العثور على المهارة"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "المهارات"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14226,7 +14415,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "هذا التطبيق مُدرج في السوق لأنه منشور على npm."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "هذا التطبيق غير مدرج في سوق التطبيقات. تمت مشاركته عبر رابط مباشر."
@@ -14555,6 +14744,12 @@ msgstr "إجمالي الوظائف"
msgid "Total time"
msgstr "إجمالي الوقت"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14877,6 +15072,7 @@ msgstr "المعرّف الشامل"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15070,6 +15266,7 @@ msgid "Upgrade Plan"
msgstr "ترقية الخطة"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "الترقية إلى {latestAvailableVersion}"
@@ -15079,12 +15276,13 @@ msgstr "الترقية إلى {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "الترقية للوصول"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "قم بالترقية إلى Enterprise للوصول إلى سجلات التدقيق"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "جاري الترقية..."
@@ -15157,7 +15355,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "استخدام"
@@ -15171,6 +15371,11 @@ msgstr "الاستخدام عبر جميع مساحات العمل على هذا
msgid "Usage Analytics"
msgstr "تحليلات الاستخدام"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15389,13 +15594,7 @@ msgstr "تحقق من الرمز من التطبيق"
msgid "Verify the code from the app"
msgstr "تحقق من الرمز من التطبيق"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "الإصدار"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "نسخة التطبيق"
@@ -15434,6 +15633,11 @@ msgstr "عرض"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15518,6 +15722,7 @@ msgstr "عرض السجلات"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "عرض صفحة سوق التطبيقات"
@@ -15564,10 +15769,17 @@ msgid "View workspace activity logs"
msgstr "عرض سجلات نشاط مساحة العمل"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "العروض"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15819,11 +16031,21 @@ msgstr "حيث"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "ما إذا كان هذا النموذج يدعم الاستدلال بسلسلة التفكير"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "نوع الأداة"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15912,6 +16134,7 @@ msgstr "سير العمل"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15926,6 +16149,7 @@ msgstr "سير العمل"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16052,10 +16276,10 @@ msgstr "عام"
msgid "yearly"
msgstr "سنوي"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "اشتراك سنوي"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {No teniu permís per accedir al camp {fieldsList}} other {No teniu permís per accedir als camps {fieldsList}}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} crèdits"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} crèdits utilitzats"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Accions que poden realitzar els usuaris en aquest objecte"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Posterior o igual"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "agent"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "Tokens de l'agent"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Agents"
msgid "Agents powering this app"
msgstr "Agents que impulsen aquesta aplicació"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "IA"
msgid "AI Chat"
msgstr "Xat amb IA"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "Preparació de la sol·licitud d'IA"
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
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "entre el {startOrdinal} i el {endOrdinal} del mes"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Boolean"
msgid "Both"
msgstr "Tots dos"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Esborra el camp o \"X\" per tornar al valor predeterminat/entorn."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Fes clic en un usuari per veure el seu desglossament diari."
@@ -2986,6 +3072,8 @@ msgstr "Es requereix ClickHouse per als registres d'auditoria. Contacta amb l'ad
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse no està configurat"
@@ -3100,6 +3188,11 @@ msgstr "les dades de la columna no són compatibles amb Multi-Select. El format
msgid "Columns not matched:"
msgstr "Columnes no coincidides:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Menú de comandes"
msgid "command menu item"
msgstr "element del menú de comandaments"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Enganxa el codi a continuació"
msgid "Copy Setup Key"
msgstr "Copia la clau de configuració"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Ús del crèdit"
msgid "Credit usage breakdown for your workspace."
msgstr "Desglossament de l'ús de crèdits del teu espai de treball."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "crèdits"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Crèdits"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Codi de moneda"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Actual"
@@ -4124,6 +4221,12 @@ msgstr "Cian"
msgid "Czech"
msgstr "Txec"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Descriviu què voleu que faci la IA..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Descriviu què voleu que faci la IA..."
msgid "Description"
msgstr "Descripció"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Descripció de l'aplicació"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "El correu electrònic ha de ser vàlid"
msgid "Email or domain is already in blocklist"
msgstr "El correu electrònic o domini ja està en la llista de bloqueig"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Introdueix la teva clau API"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Empresa"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Només destacades"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "camp"
@@ -6686,6 +6795,11 @@ msgstr "Nom del camp"
msgid "Field on destination"
msgstr "Camp a la destinació"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "de {startDay} a {endDay}"
msgid "front component"
msgstr "component frontal"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "components frontals"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Accés complet"
msgid "Function name"
msgstr "Nom de la funció"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "funcions"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Funcions"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Iniciat com {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "funció lògica"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Funcions lògiques"
@@ -9208,10 +9318,10 @@ msgstr "Mes de l'any"
msgid "monthly"
msgstr "mensual"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Subscripció mensual"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "El nom no pot estar buit"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Nom tant en singular (p. ex., 'Factura') com en plural (p. ex., 'Factures')."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Nom de l'aplicació"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Navega a la versió anterior"
msgid "Navigate to previous workflow"
msgstr "Navega al workflow anterior"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "element del menú de navegació"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "No hi ha agents disponibles"
msgid "No agents match your search"
msgstr "Cap agent concorda amb la teva cerca"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Sense credencials"
msgid "No credit consumption recorded for this user."
msgstr "No s'ha registrat cap consum de crèdits per a aquest usuari."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Encara no s'ha registrat cap consum de crèdits."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "No s'ha trobat cap {objectLabelSingular} eliminat"
msgid "No deleted records matching the filter criteria were found."
msgstr "No s'han trobat registres eliminats que compleixin els criteris del filtre."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "No hi ha cap activador configurat per a aquesta funció."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "No hi ha dades d'ús"
@@ -10154,6 +10283,11 @@ msgstr "No hi ha variables disponibles"
msgid "No variables found"
msgstr "No s'han trobat variables"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth o clau de l'API"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "objecte"
@@ -10797,6 +10932,17 @@ msgstr "pestanya de disseny de pàgina"
msgid "page layout widget"
msgstr "giny de disseny de pàgina"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Persones a qui he enviat correus electrònics i de qui n'he rebut."
msgid "People Ive sent emails to."
msgstr "Persones a qui he enviat correus electrònics."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "S'ha eliminat el proveïdor \"{0}\""
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Proveïdors"
@@ -11881,6 +12031,11 @@ msgstr "Respon"
msgid "Reply to all"
msgstr "Respon a tots"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Text enriquit"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "rol"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "El rol s'ha actualitzat correctament"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "El rol s'ha actualitzat correctament"
msgid "Roles"
msgstr "Rols"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Cerca carpetes..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Cerca un usuari..."
@@ -12548,6 +12716,8 @@ msgstr "Cercant {query} al web"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr ""
@@ -13068,11 +13238,6 @@ msgstr "Configuració amb Accés complet"
msgid "Settings permissions"
msgstr "Permisos de configuració"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Pestanya de configuració"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Setè"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Compartir"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Compartiu aquest enllaç per convidar usuaris a unir-se al vostre espai de treball"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "habilitat"
@@ -13253,12 +13430,24 @@ msgstr "Nom de l'habilitat"
msgid "Skill not found"
msgstr "Habilitat no trobada"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Habilitats"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14226,7 +14415,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Aquesta aplicació figura al marketplace perquè està publicada a npm."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Aquesta aplicació no està publicada al Marketplace. S'ha compartit mitjançant un enllaç directe."
@@ -14555,6 +14744,12 @@ msgstr "Feines totals"
msgid "Total time"
msgstr "Temps total"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14877,6 +15072,7 @@ msgstr "ID universal"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15070,6 +15266,7 @@ msgid "Upgrade Plan"
msgstr "Actualitza el pla"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Actualitza a {latestAvailableVersion}"
@@ -15079,12 +15276,13 @@ msgstr "Actualitza a {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "Actualitza per accedir"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Actualitza a Enterprise per accedir als registres d'auditoria"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Actualitzant..."
@@ -15157,7 +15355,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Ús"
@@ -15171,6 +15371,11 @@ msgstr "Ús a tots els espais de treball d'aquest servidor"
msgid "Usage Analytics"
msgstr "Anàlisi d'ús"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15389,13 +15594,7 @@ msgstr "Verifica el codi de l'aplicació"
msgid "Verify the code from the app"
msgstr "Verifica el codi de l'aplicació"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Versió"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Versió de l'aplicació"
@@ -15434,6 +15633,11 @@ msgstr "Vista"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15518,6 +15722,7 @@ msgstr "Veure registres"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Veure la pàgina del Marketplace"
@@ -15564,10 +15769,17 @@ msgid "View workspace activity logs"
msgstr "Veure els registres d'activitat de l'espai de treball"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Vistes"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15821,11 +16033,21 @@ msgstr "On"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Si aquest model admet el raonament en cadena"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Tipus de widget"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15914,6 +16136,7 @@ msgstr "Fluxos de treball"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15928,6 +16151,7 @@ msgstr "Fluxos de treball"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16054,10 +16278,10 @@ msgstr "Any"
msgid "yearly"
msgstr "anual"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Subscripció anual"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {Nemáte povolení pro přístup k poli {fieldsList}} few {Nemáte povolení pro přístup k polím {fieldsList}} many {Nemáte povolení pro přístup k polím {fieldsList}} other {Nemáte povolení pro přístup k polím {fieldsList}}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} kreditů"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "Použito {0} kreditů"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Akce, které uživatelé mohou provádět na tomto objektu"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Po nebo rovno"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "agent"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "Tokeny agenta"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Agenti"
msgid "Agents powering this app"
msgstr "Agenti, které tato aplikace využívá"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "AI"
msgid "AI Chat"
msgstr "AI chat"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "Příprava požadavku AI"
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
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "mezi {startOrdinal} a {endOrdinal} měsíce"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Booleovská hodnota"
msgid "Both"
msgstr "Oba"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Vyčistěte pole nebo \"X\" pro návrat k výchozí hodnotě prostředí."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Kliknutím na uživatele zobrazíte jeho denní přehled."
@@ -2986,6 +3072,8 @@ msgstr "Pro auditní protokoly je vyžadován ClickHouse. Kontaktujte svého adm
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse není nakonfigurován"
@@ -3100,6 +3188,11 @@ msgstr "data ve sloupci není kompatibilní s Multi-Select. Požadovaný formát
msgid "Columns not matched:"
msgstr "Sloupce nejsou shodné:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Nabídka příkazů"
msgid "command menu item"
msgstr "položka menu příkazů"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Zkopírujte a vložte kód níže"
msgid "Copy Setup Key"
msgstr "Zkopírovat nastavovací klíč"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Využití kreditu"
msgid "Credit usage breakdown for your workspace."
msgstr "Rozpis využití kreditů ve vašem pracovním prostoru."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "kredity"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Kredity"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Kód měny"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Aktuální"
@@ -4124,6 +4221,12 @@ msgstr "Azurová"
msgid "Czech"
msgstr "Čeština"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Popište, co chcete, aby AI dělalo..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Popište, co chcete, aby AI dělalo..."
msgid "Description"
msgstr "Popis"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Popis aplikace"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "E-mail musí být platný"
msgid "Email or domain is already in blocklist"
msgstr "E-mail nebo doména již je v seznamu blokovaných"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Zadejte svůj klíč API"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Podnik"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Pouze doporučené"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "pole"
@@ -6686,6 +6795,11 @@ msgstr "Název pole"
msgid "Field on destination"
msgstr "Pole v cíli"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "od {startDay} do {endDay}"
msgid "front component"
msgstr "frontendová komponenta"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "frontendové komponenty"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Plný přístup"
msgid "Function name"
msgstr "Název funkce"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "funkce"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Funkce"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Přihlášen jako {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "logická funkce"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Logické funkce"
@@ -9208,10 +9318,10 @@ msgstr "Měsíc v roce"
msgid "monthly"
msgstr "měsíční"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Měsíční předplatné"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "Název nesmí být prázdný"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Název v jednotném (<b>např.</b>, 'Faktura') i množném (<b>např.</b>, 'Faktury') čísle."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Název aplikace"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Přejít na předchozí verzi"
msgid "Navigate to previous workflow"
msgstr "Přejít na předchozí workflow"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "položka navigační nabídky"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "Žádní agenti nejsou k dispozici"
msgid "No agents match your search"
msgstr "Žádní agenti neodpovídají vašemu vyhledávání"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Žádné přihlašovací údaje"
msgid "No credit consumption recorded for this user."
msgstr "U tohoto uživatele nebyla zaznamenána žádná spotřeba kreditů."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Zatím nebyla zaznamenána žádná spotřeba kreditů."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "Nenalezen žádný smazaný {objectLabelSingular}"
msgid "No deleted records matching the filter criteria were found."
msgstr "Nebyly nalezeny žádné smazané záznamy odpovídající kritériím filtru."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "Žádné spouštěče nejsou nakonfigurované pro tuto funkci."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "Žádná data o využití"
@@ -10154,6 +10283,11 @@ msgstr "Žádné proměnné nejsou k dispozici"
msgid "No variables found"
msgstr "Žádné proměnné nenalezeny"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth nebo klíč API"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "objekt"
@@ -10797,6 +10932,17 @@ msgstr "karta Rozložení stránky"
msgid "page layout widget"
msgstr "widget Rozložení stránky"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Lidé, kterým jsem poslal e-maily a od kterých jsem dostal e-maily."
msgid "People Ive sent emails to."
msgstr "Lidé, kterým jsem poslal e-maily."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "Poskytovatel \"{0}\" byl odebrán"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Poskytovatelé"
@@ -11881,6 +12031,11 @@ msgstr "Odpovědět"
msgid "Reply to all"
msgstr "Odpovědět všem"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Formátovaný text"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "role"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "Role byla úspěšně aktualizována"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "Role byla úspěšně aktualizována"
msgid "Roles"
msgstr "Role"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Hledat složky..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Hledat uživatele..."
@@ -12548,6 +12716,8 @@ msgstr "Vyhledávání na webu {query}"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "sedadlo / měsíc"
@@ -13068,11 +13238,6 @@ msgstr "Úplný přístup k nastavením"
msgid "Settings permissions"
msgstr "Nastavení oprávnění"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Karta Nastavení"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Sedmý"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Sdílet"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Sdílením tohoto odkazu pozvete uživatele do vašeho pracovního prostoru"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "dovednost"
@@ -13253,12 +13430,24 @@ msgstr "Název dovednosti"
msgid "Skill not found"
msgstr "Dovednost nebyla nalezena"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Dovednosti"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14226,7 +14415,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Tato aplikace je uvedena na marketplace, protože je publikována na npm."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Tato aplikace není uvedena na Marketplace. Byla sdílena prostřednictvím přímého odkazu."
@@ -14555,6 +14744,12 @@ msgstr "Celkový počet úloh"
msgid "Total time"
msgstr "Celkový čas"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14877,6 +15072,7 @@ msgstr "Univerzální ID"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15070,6 +15266,7 @@ msgid "Upgrade Plan"
msgstr "Upgradovat plán"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Aktualizovat na {latestAvailableVersion}"
@@ -15079,12 +15276,13 @@ msgstr "Aktualizovat na {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "Přejděte na vyšší verzi pro přístup"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Pro přístup k auditním protokolům upgradujte na Enterprise"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Aktualizuje se..."
@@ -15157,7 +15355,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Použití"
@@ -15171,6 +15371,11 @@ msgstr "Využití napříč všemi pracovními prostory na tomto serveru"
msgid "Usage Analytics"
msgstr "Analytika využití"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15389,13 +15594,7 @@ msgstr "Ověřte kód z aplikace"
msgid "Verify the code from the app"
msgstr "Ověřte kód z aplikace"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Verze"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Verze aplikace"
@@ -15434,6 +15633,11 @@ msgstr "Pohled"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15518,6 +15722,7 @@ msgstr "Zobrazit protokoly"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Zobrazit stránku na Marketplace"
@@ -15564,10 +15769,17 @@ msgid "View workspace activity logs"
msgstr "Zobrazit protokoly aktivit pracovního prostoru"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Zobrazení"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15821,11 +16033,21 @@ msgstr "Kde"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Zda tento model podporuje řetězení myšlenek"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Typ widgetu"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15914,6 +16136,7 @@ msgstr "Pracovní postupy"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15928,6 +16151,7 @@ msgstr "Pracovní postupy"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16054,10 +16278,10 @@ msgstr "Rok"
msgid "yearly"
msgstr "roční"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Roční předplatné"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {Du har ikke tilladelse til at få adgang til {fieldsList} feltet} other {Du har ikke tilladelse til at få adgang til {fieldsList} felterne}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} kreditter"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} forbrugte kreditter"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Handlinger brugere kan udføre på denne genstand"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Efter eller lig med"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "agent"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "Agenttokens"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Agent"
msgid "Agents powering this app"
msgstr "Agenter, der driver denne app"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "AI"
msgid "AI Chat"
msgstr "AI-chat"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "Forberedelse af AI-anmodning"
msgid "AI Response Schema"
msgstr "AI Svarskema"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "mellem den {startOrdinal} og {endOrdinal} i måneden"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Boolean"
msgid "Both"
msgstr "Begge"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Ryd feltet eller \"X\" for at gendanne til miljø-/standardværdi."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Klik på en bruger for at se deres daglige opdeling."
@@ -2986,6 +3072,8 @@ msgstr "ClickHouse er påkrævet for revisionslogge. Kontakt din administrator."
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse er ikke konfigureret"
@@ -3100,6 +3188,11 @@ msgstr "kolonnedata er ikke kompatible med Multi-Select. Krævet format er '[\"o
msgid "Columns not matched:"
msgstr "Kolonner ikke matchet:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Kommandomenu"
msgid "command menu item"
msgstr "kommando-menu menupunkt"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Indsæt koden nedenfor"
msgid "Copy Setup Key"
msgstr "Kopier opsætningsnøgle"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Brug af kreditter"
msgid "Credit usage breakdown for your workspace."
msgstr "Opdeling af kreditforbrug for dit arbejdsområde."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "kreditter"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Kreditter"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Valutakode"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Nuværende"
@@ -4124,6 +4221,12 @@ msgstr "Cyan"
msgid "Czech"
msgstr "Tjekkisk"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Beskriv, hvad du vil have AI'en til at gøre..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Beskriv, hvad du vil have AI'en til at gøre..."
msgid "Description"
msgstr "Beskrivelse"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Beskrivelse af applikationen"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "E-mail skal være gyldig"
msgid "Email or domain is already in blocklist"
msgstr "E-mail eller domæne er allerede på blokeringslisten"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Indtast din API-nøgle"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Virksomhed"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Kun fremhævede"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "felt"
@@ -6686,6 +6795,11 @@ msgstr "Feltnavn"
msgid "Field on destination"
msgstr "Felt på destination"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "fra {startDay} til {endDay}"
msgid "front component"
msgstr "frontkomponent"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr ""
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Fuld adgang"
msgid "Function name"
msgstr "Funktionsnavn"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "funktioner"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Funktioner"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Logget ind som {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "logikfunktion"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Logikfunktioner"
@@ -9208,10 +9318,10 @@ msgstr "Måned i året"
msgid "monthly"
msgstr "månedligt"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Månedligt abonnement"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "Navnet kan ikke være tomt"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Navngivelse i både ental (f.eks. 'Faktura') og flertal (f.eks. 'Fakturaer') former."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Navn på applikationen"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Naviger til forrige version"
msgid "Navigate to previous workflow"
msgstr "Naviger til forrige workflow"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "menupunkt i navigationsmenuen"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "Ingen agenter tilgængelige"
msgid "No agents match your search"
msgstr "Ingen agenter matcher din søgning"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Ingen legitimationsoplysninger"
msgid "No credit consumption recorded for this user."
msgstr "Intet kreditforbrug registreret for denne bruger."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Intet kreditforbrug registreret endnu."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "Ingen slettede {objectLabelSingular} fundet"
msgid "No deleted records matching the filter criteria were found."
msgstr "Ingen slettede poster, der matcher filterkriterierne, blev fundet."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "Ingen udløsere konfigureret for denne funktion."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "Ingen brugsdata"
@@ -10154,6 +10283,11 @@ msgstr "Ingen variabler tilgængelige"
msgid "No variables found"
msgstr "Ingen variabler fundet"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth eller API-nøgle"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "objekt"
@@ -10797,6 +10932,17 @@ msgstr "Sidelayout-fanen"
msgid "page layout widget"
msgstr ""
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Folk jeg har sendt e-mails til og modtaget e-mails fra."
msgid "People Ive sent emails to."
msgstr "Folk jeg har sendt e-mails til."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "Udbyder \"{0}\" fjernet"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr ""
@@ -11881,6 +12031,11 @@ msgstr "Svar"
msgid "Reply to all"
msgstr "Svar til alle"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Formateret tekst"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "rolle"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "Rolle opdateret med succes"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "Rolle opdateret med succes"
msgid "Roles"
msgstr "Roller"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Søg mapper..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Søg efter en bruger..."
@@ -12548,6 +12716,8 @@ msgstr "Søger på nettet efter {query}"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "sæde / måned"
@@ -13068,11 +13238,6 @@ msgstr "Indstillinger Fulde Rettigheder"
msgid "Settings permissions"
msgstr "Indstillinger for tilladelser"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr ""
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Syvende"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Del"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Del dette link for at invitere brugere til at deltage i dit arbejdsområde"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "færdighed"
@@ -13253,12 +13430,24 @@ msgstr "Færdighedens navn"
msgid "Skill not found"
msgstr "Færdighed ikke fundet"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Færdigheder"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14228,7 +14417,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Denne app vises på markedspladsen, fordi den er udgivet på npm."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Denne applikation er ikke listet på markedspladsen. Den blev delt via et direkte link."
@@ -14557,6 +14746,12 @@ msgstr "Samlede jobs"
msgid "Total time"
msgstr "Samlet tid"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14879,6 +15074,7 @@ msgstr "Universelt ID"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15072,6 +15268,7 @@ msgid "Upgrade Plan"
msgstr "Opgrader planen"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Opgrader til {latestAvailableVersion}"
@@ -15081,12 +15278,13 @@ msgstr "Opgrader til {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "Opgrader for at få adgang"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Opgrader til Enterprise for at få adgang til revisionslogge"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Opgraderer..."
@@ -15159,7 +15357,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Brug"
@@ -15173,6 +15373,11 @@ msgstr "Brug på tværs af alle arbejdsområder på denne server"
msgid "Usage Analytics"
msgstr "Brugsanalyse"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15391,13 +15596,7 @@ msgstr "Bekræft koden fra appen"
msgid "Verify the code from the app"
msgstr "Bekræft koden fra appen"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Version"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Version af applikationen"
@@ -15436,6 +15635,11 @@ msgstr "Visning"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15520,6 +15724,7 @@ msgstr "Vis logge"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Se side på markedspladsen"
@@ -15566,10 +15771,17 @@ msgid "View workspace activity logs"
msgstr "Se arbejdsområdets aktivitetslogge"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Visninger"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15823,11 +16035,21 @@ msgstr "Hvor"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Om denne model understøtter chain-of-thought-ræsonnering"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Widget type"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15916,6 +16138,7 @@ msgstr "Arbejdsgange"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15930,6 +16153,7 @@ msgstr "Arbejdsgange"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16056,10 +16280,10 @@ msgstr "År"
msgid "yearly"
msgstr "årligt"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Årligt abonnement"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {Sie haben keine Berechtigung, auf das Feld {fieldsList} zuzugreifen} other {Sie haben keine Berechtigung, auf die Felder {fieldsList} zuzugreifen}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} Credits"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} verwendete Credits"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Aktionen, die Benutzer auf diesem Objekt durchführen können"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Nach oder gleich"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "Agent"
@@ -1303,7 +1302,14 @@ msgstr "Agent-Rollen"
msgid "Agent tokens"
msgstr "Agent-Token"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Agenten"
msgid "Agents powering this app"
msgstr "Agenten, die diese Anwendung unterstützen"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr "Diagramm zusammenfassen"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "KI"
msgid "AI Chat"
msgstr "KI-Chat"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "Vorbereitung der KI-Anfrage"
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
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "zwischen dem {startOrdinal} und {endOrdinal} des Monats"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Boolesch"
msgid "Both"
msgstr "Beide"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Löschen Sie das Feld oder \"X\", um zum Standardwert der Umgebung zurückzukehren."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Klicken Sie auf einen Benutzer, um dessen tägliche Aufschlüsselung zu sehen."
@@ -2986,6 +3072,8 @@ msgstr "Für Audit-Protokolle ist ClickHouse erforderlich. Wenden Sie sich an Ih
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse nicht konfiguriert"
@@ -3100,6 +3188,11 @@ msgstr "Spaltendaten sind nicht kompatibel mit Mehrfachauswahl. Erforderliches F
msgid "Columns not matched:"
msgstr "Nicht zugeordnete Spalten:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Befehlsmenü"
msgid "command menu item"
msgstr "Befehlsmenü-Eintrag"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Fügen Sie den Code unten ein"
msgid "Copy Setup Key"
msgstr "Setup-Schlüssel kopieren"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Guthabenverbrauch"
msgid "Credit usage breakdown for your workspace."
msgstr "Aufschlüsselung des Guthabenverbrauchs für Ihren Arbeitsbereich."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "Guthaben"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Guthaben"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Währungscode"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Aktuell"
@@ -4124,6 +4221,12 @@ msgstr "Cyan"
msgid "Czech"
msgstr "Tschechisch"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Beschreiben Sie, was die KI tun soll..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Beschreiben Sie, was die KI tun soll..."
msgid "Description"
msgstr "Beschreibung"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Beschreibung der Anwendung"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "E-Mail muss gültig sein"
msgid "Email or domain is already in blocklist"
msgstr "E-Mail oder Domain ist bereits in der Blockliste"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Geben Sie Ihren API-Schlüssel ein"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Unternehmen"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Nur hervorgehobene"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "feld"
@@ -6686,6 +6795,11 @@ msgstr "Feldname"
msgid "Field on destination"
msgstr "Feld am Ziel"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "von {startDay} bis {endDay}"
msgid "front component"
msgstr "Frontend-Komponente"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "Frontend-Komponenten"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Vollzugriff"
msgid "Function name"
msgstr "Funktionsname"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "Funktionen"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Funktionen"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Eingeloggt als {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "Logikfunktion"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Logikfunktionen"
@@ -9208,10 +9318,10 @@ msgstr "Monat des Jahres"
msgid "monthly"
msgstr "monatlich"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Monatliches Abonnement"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "Der Name darf nicht leer sein"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Name in Einzahl (z.B. 'Rechnung') und Mehrzahl (z.B. 'Rechnungen')."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Name der Anwendung"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Zur vorherigen Version navigieren"
msgid "Navigate to previous workflow"
msgstr "Zum vorherigen Workflow navigieren"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "Navigationsmenüeintrag"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "Keine Agenten verfügbar"
msgid "No agents match your search"
msgstr "Keine Agenten passen zu Ihrer Suche"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Keine Anmeldedaten"
msgid "No credit consumption recorded for this user."
msgstr "Für diesen Benutzer wurde kein Guthabenverbrauch erfasst."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Bisher wurde kein Guthabenverbrauch erfasst."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "Kein gelöschter {objectLabelSingular} gefunden"
msgid "No deleted records matching the filter criteria were found."
msgstr "Keine gelöschten Datensätze, die den Filterkriterien entsprechen, wurden gefunden."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "Keine Trigger für diese Funktion konfiguriert."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "Keine Verbrauchsdaten"
@@ -10154,6 +10283,11 @@ msgstr "Keine Variablen verfügbar"
msgid "No variables found"
msgstr "Keine Variablen gefunden"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth oder API-Schlüssel"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "objekt"
@@ -10797,6 +10932,17 @@ msgstr "Seitenlayout-Registerkarte"
msgid "page layout widget"
msgstr "Seitenlayout-Widget"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Personen, an die ich E-Mails gesendet habe und von denen ich E-Mails erh
msgid "People Ive sent emails to."
msgstr "Personen, an die ich E-Mails gesendet habe."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "Anbieter \"{0}\" entfernt"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Provider"
@@ -11881,6 +12031,11 @@ msgstr "Antworten"
msgid "Reply to all"
msgstr "Allen antworten"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Rich-Text"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "rolle"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "Rolle erfolgreich aktualisiert"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "Rolle erfolgreich aktualisiert"
msgid "Roles"
msgstr "Rollen"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Ordner durchsuchen..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Benutzer suchen..."
@@ -12548,6 +12716,8 @@ msgstr "Im Web wird nach {query} gesucht"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "Sitzplatz / Monat"
@@ -13068,11 +13238,6 @@ msgstr "Einstellungen Vollzugriff"
msgid "Settings permissions"
msgstr "Einstellungen Berechtigungen"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Tab Einstellungen"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Siebte"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Teilen"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Teilen Sie diesen Link, um Benutzer in Ihren Arbeitsbereich einzuladen"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "Skill"
@@ -13253,12 +13430,24 @@ msgstr "Skill-Name"
msgid "Skill not found"
msgstr "Skill nicht gefunden"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Skills"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14226,7 +14415,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Diese App ist im Marketplace gelistet, weil sie auf npm veröffentlicht wurde."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Diese Anwendung ist nicht auf dem Marktplatz gelistet. Sie wurde über einen Direktlink freigegeben."
@@ -14555,6 +14744,12 @@ msgstr "Jobs gesamt"
msgid "Total time"
msgstr "Gesamtzeit"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14877,6 +15072,7 @@ msgstr "Universelle ID"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15070,6 +15266,7 @@ msgid "Upgrade Plan"
msgstr "Tarif upgraden"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Auf {latestAvailableVersion} aktualisieren"
@@ -15079,12 +15276,13 @@ msgstr "Auf {latestAvailableVersion} aktualisieren"
msgid "Upgrade to access"
msgstr "Upgrade, um Zugriff zu erhalten"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Führen Sie ein Upgrade auf Enterprise durch, um auf Audit-Protokolle zuzugreifen"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Wird aktualisiert..."
@@ -15157,7 +15355,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Nutzung"
@@ -15171,6 +15371,11 @@ msgstr "Nutzung über alle Arbeitsbereiche auf diesem Server hinweg"
msgid "Usage Analytics"
msgstr "Verbrauchsanalysen"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15389,13 +15594,7 @@ msgstr "Bestätigen Sie den Code von der App"
msgid "Verify the code from the app"
msgstr "Bestätigen Sie den Code von der App"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Version"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Anwendungsversion"
@@ -15434,6 +15633,11 @@ msgstr "Ansicht"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15518,6 +15722,7 @@ msgstr "Protokolle anzeigen"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Marktplatz-Seite anzeigen"
@@ -15564,10 +15769,17 @@ msgid "View workspace activity logs"
msgstr "Aktivitätsprotokolle des Arbeitsbereichs anzeigen"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Ansichten"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15821,11 +16033,21 @@ msgstr "Wo"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Ob dieses Modell Chain-of-Thought-Reasoning unterstützt"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Widget-Typ"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15914,6 +16136,7 @@ msgstr "Workflows"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15928,6 +16151,7 @@ msgstr "Workflows"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16054,10 +16278,10 @@ msgstr "Jahr"
msgid "yearly"
msgstr "jährlich"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Jährliches Abonnement"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {Δεν έχετε άδεια πρόσβασης στο πεδίο {fieldsList}} other {Δεν έχετε άδεια πρόσβασης στα πεδία {fieldsList}}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} πιστώσεις"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} πιστώσεις χρησιμοποιήθηκαν"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Ενέργειες χρηστών που μπορούν να εκτελ
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Μετά ή ίσο με"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "πράκτορας"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "Διακριτικά πράκτορα"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Πράκτορες"
msgid "Agents powering this app"
msgstr "Πράκτορες που υποστηρίζουν αυτή την εφαρμογή"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "AI"
msgid "AI Chat"
msgstr "Συνομιλία AI"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "Προετοιμασία αιτήματος AI"
msgid "AI Response Schema"
msgstr "Σχήμα Απόκρισης AI"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "μεταξύ του {startOrdinal} και {endOrdinal} του μήνα"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Boolean"
msgid "Both"
msgstr "Και τα δύο"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Καθαρίστε το πεδίο ή \"X\" για να επιστρέψετε στην προεπιλεγμένη τιμή του περιβάλλοντος."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Κάντε κλικ σε έναν χρήστη για να δείτε την ημερήσια ανάλυσή του."
@@ -2986,6 +3072,8 @@ msgstr "Το ClickHouse είναι απαραίτητο για τα αρχεία
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "Το ClickHouse δεν έχει ρυθμιστεί"
@@ -3100,6 +3188,11 @@ msgstr "τα δεδομένα της στήλης δεν είναι συμβατ
msgid "Columns not matched:"
msgstr "Μη αντιστοιχισμένες στήλες:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Μενού Εντολών"
msgid "command menu item"
msgstr "στοιχείο μενού εντολών"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Αντιγράψτε και επικολλήστε τον παρακάτ
msgid "Copy Setup Key"
msgstr "Αντιγραφή κλειδιού εγκατάστασης"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Χρήση Πιστώσεων"
msgid "Credit usage breakdown for your workspace."
msgstr "Ανάλυση χρήσης πιστώσεων για τον χώρο εργασίας σας."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "πιστώσεις"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Πιστώσεις"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Κωδικός νομίσματος"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Τρέχον"
@@ -4124,6 +4221,12 @@ msgstr "Κυανό"
msgid "Czech"
msgstr "Τσέχικα"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Περιγράψτε τι θέλετε να κάνει το AI..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Περιγράψτε τι θέλετε να κάνει το AI..."
msgid "Description"
msgstr "Περιγραφή"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Περιγραφή της εφαρμογής"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "Το email πρέπει να είναι έγκυρο"
msgid "Email or domain is already in blocklist"
msgstr "Το email ή ο τομέας βρίσκεται ήδη στη λίστα απόκλεισης"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Εισάγετε το κλειδί API σας"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Επιχειρήσεις"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Μόνο προβεβλημένες"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "πεδίο"
@@ -6686,6 +6795,11 @@ msgstr "Όνομα Πεδίου"
msgid "Field on destination"
msgstr "Πεδίο στον προορισμό"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "από {startDay} έως {endDay}"
msgid "front component"
msgstr "στοιχείο διεπαφής χρήστη"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "στοιχεία διεπαφής χρήστη"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Πλήρης πρόσβαση"
msgid "Function name"
msgstr "Όνομα συνάρτησης"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "λειτουργίες"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Λειτουργίες"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Συνδεδεμένος ως {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "Συνάρτηση λογικής"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Συναρτήσεις λογικής"
@@ -9208,10 +9318,10 @@ msgstr "Μήνας του έτους"
msgid "monthly"
msgstr "μηνιαία"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Μηνιαία συνδρομή"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "Το όνομα δεν μπορεί να είναι κενό"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Όνομα και σε ενικό (π.χ., 'Τιμολόγιο') και σε πληθυντικό (π.χ., 'Τιμολόγια') αριθμό."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Όνομα της εφαρμογής"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Μετάβαση στην προηγούμενη έκδοση"
msgid "Navigate to previous workflow"
msgstr "Μετάβαση στον προηγούμενο workflow"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "στοιχείο μενού πλοήγησης"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "Δεν υπάρχουν διαθέσιμοι πράκτορες"
msgid "No agents match your search"
msgstr "Κανένας πράκτορας δεν ταιριάζει με την αναζήτησή σας"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Χωρίς διαπιστευτήρια"
msgid "No credit consumption recorded for this user."
msgstr "Δεν έχει καταγραφεί κατανάλωση πιστώσεων για αυτόν τον χρήστη."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Δεν έχει καταγραφεί ακόμη κατανάλωση πιστώσεων."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "Δεν βρέθηκε κανένα διαγραμμένο {objectLabelSi
msgid "No deleted records matching the filter criteria were found."
msgstr "Δεν βρέθηκαν διαγραμμένα αρχεία που να αντιστοιχούν στα κριτήρια φιλτραρίσματος."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "Δεν έχουν ρυθμιστεί εναύσματα για αυτή
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "Δεν υπάρχουν δεδομένα χρήσης"
@@ -10154,6 +10283,11 @@ msgstr "Δεν υπάρχουν διαθέσιμες μεταβλητές"
msgid "No variables found"
msgstr "Δεν βρέθηκαν μεταβλητές"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth ή κλειδί API"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "αντικείμενο"
@@ -10797,6 +10932,17 @@ msgstr "καρτέλα διάταξης σελίδας"
msgid "page layout widget"
msgstr "γραφικό στοιχείο διάταξης σελίδας"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Άτομα στα οποία έχω στείλει emails και από
msgid "People Ive sent emails to."
msgstr "Άτομα στα οποία έχω στείλει emails."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "Αφαιρέθηκε ο πάροχος \"{0}\""
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Πάροχοι"
@@ -11881,6 +12031,11 @@ msgstr "Απάντηση"
msgid "Reply to all"
msgstr "Απάντηση σε όλους"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Εμπλουτισμένο κείμενο"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "ρόλος"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "Ο ρόλος ενημερώθηκε με επιτυχία"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "Ο ρόλος ενημερώθηκε με επιτυχία"
msgid "Roles"
msgstr "Ρόλοι"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Αναζήτηση φακέλων..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Αναζήτηση χρήστη..."
@@ -12548,6 +12716,8 @@ msgstr "Γίνεται αναζήτηση στον ιστό για {query}"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "θέση / μήνας"
@@ -13068,11 +13238,6 @@ msgstr "Ρυθμίσεις πλήρης πρόσβαση"
msgid "Settings permissions"
msgstr "Δικαιώματα ρυθμίσεων"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Καρτέλα ρυθμίσεων"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Έβδομος"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Κοινοποίηση"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Μοιραστείτε αυτόν τον σύνδεσμο για να προσκαλέσετε χρήστες να συμμετάσχουν στον χώρο εργασίας σας"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13223,6 +13399,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "δεξιότητα"
@@ -13255,12 +13432,24 @@ msgstr "Όνομα δεξιότητας"
msgid "Skill not found"
msgstr "Δεν βρέθηκε δεξιότητα"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Δεξιότητες"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14230,7 +14419,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Αυτή η εφαρμογή εμφανίζεται στο marketplace επειδή έχει δημοσιευθεί στο npm."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Αυτή η εφαρμογή δεν είναι καταχωρημένη στο marketplace. Κοινοποιήθηκε μέσω απευθείας συνδέσμου."
@@ -14559,6 +14748,12 @@ msgstr "Σύνολο εργασιών"
msgid "Total time"
msgstr "Συνολικός χρόνος"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14881,6 +15076,7 @@ msgstr "Καθολικό αναγνωριστικό"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15074,6 +15270,7 @@ msgid "Upgrade Plan"
msgstr "Αναβάθμιση προγράμματος"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Αναβάθμιση σε {latestAvailableVersion}"
@@ -15083,12 +15280,13 @@ msgstr "Αναβάθμιση σε {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "Αναβαθμίστε για πρόσβαση"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Αναβαθμίστε σε Enterprise για πρόσβαση στα αρχεία καταγραφής ελέγχου"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Γίνεται αναβάθμιση..."
@@ -15161,7 +15359,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Χρήση"
@@ -15175,6 +15375,11 @@ msgstr "Χρήση σε όλους τους χώρους εργασίας σε
msgid "Usage Analytics"
msgstr "Αναλύσεις χρήσης"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15393,13 +15598,7 @@ msgstr "Επαληθεύστε τον κωδικό από την εφαρμογ
msgid "Verify the code from the app"
msgstr "Επαληθεύστε τον κωδικό από την εφαρμογή"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Έκδοση"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Έκδοση της εφαρμογής"
@@ -15438,6 +15637,11 @@ msgstr "Προβολή"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15522,6 +15726,7 @@ msgstr "Προβολή αρχείων καταγραφής"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Προβολή σελίδας marketplace"
@@ -15568,10 +15773,17 @@ msgid "View workspace activity logs"
msgstr "Προβολή αρχείων καταγραφής δραστηριότητας χώρου εργασίας"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Προβολές"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15825,11 +16037,21 @@ msgstr "Όπου"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Αν αυτό το μοντέλο υποστηρίζει συλλογιστική αλυσίδας σκέψης"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Τύπος στοιχείου"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15918,6 +16140,7 @@ msgstr "Ροές Εργασίας"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15932,6 +16155,7 @@ msgstr "Ροές Εργασίας"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16058,10 +16282,10 @@ msgstr "Έτος"
msgid "yearly"
msgstr "ετήσια"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Ετήσια συνδρομή"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -149,19 +149,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {You do not have permission to access the {fieldsList} field} other {You do not have permission to access the {fieldsList} fields}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} credits"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} credits used"
msgid "{0} used"
msgstr "{0} used"
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -765,6 +762,7 @@ msgstr "Actions users can perform on this object"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1260,6 +1258,7 @@ msgid "After or equal"
msgstr "After or equal"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "agent"
@@ -1298,7 +1297,14 @@ msgstr "Agent roles"
msgid "Agent tokens"
msgstr "Agent tokens"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr "agents"
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1309,6 +1315,11 @@ msgstr "Agents"
msgid "Agents powering this app"
msgstr "Agents powering this app"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr "Agents provided by this app"
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1323,6 +1334,7 @@ msgstr "Aggregate Chart"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1341,6 +1353,16 @@ msgstr "AI"
msgid "AI Chat"
msgstr "AI Chat"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr "AI consumption across all workspaces."
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr "AI consumption over time."
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1363,6 +1385,61 @@ msgstr "AI request prep"
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
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr "AI Usage"
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr "AI usage analytics across workspaces is available with an Enterprise key."
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr "AI usage analytics is available with an Enterprise key."
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr "AI usage analytics requires ClickHouse. Contact your administrator."
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr "AI Usage by Model"
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr "AI Usage by Type"
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr "AI Usage by User"
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr "AI Usage by Workspace"
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr "AI User Usage"
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr "AI Workflow"
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2393,6 +2470,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "between the {startOrdinal} and {endOrdinal} of the month"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2455,6 +2534,12 @@ msgstr "Boolean"
msgid "Both"
msgstr "Both"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr "Breakdown across AI models."
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2940,6 +3025,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Clear the field or \"X\" to revert to environment/default value."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Click a user to see their daily breakdown."
@@ -2981,6 +3067,8 @@ msgstr "ClickHouse is required for audit logs. Contact your administrator."
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse Not Configured"
@@ -3095,6 +3183,11 @@ msgstr "column data is not compatible with Multi-Select. Format required is '[\"
msgid "Columns not matched:"
msgstr "Columns not matched:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr "command"
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3115,6 +3208,11 @@ msgstr "Command Menu"
msgid "command menu item"
msgstr "command menu item"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr "commands"
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3547,6 +3645,11 @@ msgstr "Copy paste the code below"
msgid "Copy Setup Key"
msgstr "Copy Setup Key"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr "Copy share link"
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3919,16 +4022,9 @@ msgstr "Credit Usage"
msgid "Credit usage breakdown for your workspace."
msgstr "Credit usage breakdown for your workspace."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "credits"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Credits"
@@ -3994,6 +4090,7 @@ msgid "Currency Code"
msgstr "Currency Code"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Current"
@@ -4119,6 +4216,12 @@ msgstr "Cyan"
msgid "Czech"
msgstr "Czech"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr "Daily AI Usage"
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4764,8 +4867,6 @@ msgstr "Describe what you want the AI to do..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4777,11 +4878,6 @@ msgstr "Describe what you want the AI to do..."
msgid "Description"
msgstr "Description"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Description of the application"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5368,6 +5464,11 @@ msgstr "Email must be a valid email"
msgid "Email or domain is already in blocklist"
msgstr "Email or domain is already in blocklist"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr "Email support"
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5772,11 +5873,18 @@ msgstr "Enter your API key"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Enterprise"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr "Enterprise feature"
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6649,6 +6757,7 @@ msgid "Featured only"
msgstr "Featured only"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "field"
@@ -6681,6 +6790,11 @@ msgstr "Field Name"
msgid "Field on destination"
msgstr "Field on destination"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr "field permission"
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6978,11 +7092,6 @@ msgstr "from {startDay} to {endDay}"
msgid "front component"
msgstr "front component"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "front components"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7005,13 +7114,7 @@ msgstr "Full access"
msgid "Function name"
msgstr "Function name"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "functions"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Functions"
@@ -8742,12 +8845,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Logged in as {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "logic function"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr "logic functions"
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Logic functions"
@@ -9203,10 +9313,10 @@ msgstr "Month of the year"
msgid "monthly"
msgstr "monthly"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Monthly subscription"
msgid "Monthly"
msgstr "Monthly"
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9329,7 +9439,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9341,7 +9450,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9389,11 +9498,6 @@ msgstr "Name can not be empty"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Name of the application"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9450,11 +9554,26 @@ msgstr "Navigate to previous version"
msgid "Navigate to previous workflow"
msgstr "Navigate to previous workflow"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr "Navigation items"
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr "Navigation items added by this app"
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "navigation menu item"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr "Navigation menu items"
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9706,6 +9825,16 @@ msgstr "No agents available"
msgid "No agents match your search"
msgstr "No agents match your search"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr "No AI consumption recorded for this user."
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr "No AI usage data recorded yet."
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9784,11 +9913,6 @@ msgstr "No credentials"
msgid "No credit consumption recorded for this user."
msgstr "No credit consumption recorded for this user."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "No credit consumption recorded yet."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9846,6 +9970,11 @@ msgstr "No Deleted {objectLabelSingular} found"
msgid "No deleted records matching the filter criteria were found."
msgstr "No deleted records matching the filter criteria were found."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr "No description available for this application"
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10130,7 +10259,7 @@ msgstr "No triggers configured for this function."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "No usage data"
@@ -10149,6 +10278,11 @@ msgstr "No variables available"
msgid "No variables found"
msgstr "No variables found"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr "No variables to set for this application"
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10321,6 +10455,7 @@ msgid "OAuth or API Key"
msgstr "OAuth or API Key"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "object"
@@ -10792,6 +10927,17 @@ msgstr "page layout tab"
msgid "page layout widget"
msgstr "page layout widget"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr "Page layouts"
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr "Page layouts defined by this app"
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10899,6 +11045,11 @@ msgstr "People Ive sent emails to and received emails from."
msgid "People Ive sent emails to."
msgstr "People Ive sent emails to."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr "Per-day AI consumption."
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11364,7 +11515,6 @@ msgid "Provider \"{0}\" removed"
msgstr "Provider \"{0}\" removed"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Providers"
@@ -11876,6 +12026,11 @@ msgstr "Reply"
msgid "Reply to all"
msgstr "Reply to all"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr "Report and issue"
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12072,6 +12227,7 @@ msgid "Rich Text"
msgstr "Rich Text"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "role"
@@ -12114,8 +12270,15 @@ msgstr "role target"
msgid "Role updated successfully"
msgstr "Role updated successfully"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr "roles"
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12125,6 +12288,11 @@ msgstr "Role updated successfully"
msgid "Roles"
msgstr "Roles"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr "Roles defined by this app"
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12470,7 +12638,7 @@ msgid "Search folders..."
msgstr "Search folders..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Search for a user..."
@@ -12543,6 +12711,8 @@ msgstr "Searching the web for {query}"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "seat / month"
@@ -13063,11 +13233,6 @@ msgstr "Settings All Access"
msgid "Settings permissions"
msgstr "Settings permissions"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Settings tab"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13100,15 +13265,26 @@ msgid "Seventh"
msgstr "Seventh"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Share"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr "Share link copied to clipboard"
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Share this link to invite users to join your workspace"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr "Share this link with other workspaces on this server to let them install this application."
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13216,6 +13392,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "skill"
@@ -13248,12 +13425,24 @@ msgstr "Skill name"
msgid "Skill not found"
msgstr "Skill not found"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr "skills"
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Skills"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr "Skills provided by this app"
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14223,7 +14412,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "This app is listed on the marketplace because it is published to npm."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "This application is not listed on the marketplace. It was shared via a direct link."
@@ -14552,6 +14741,12 @@ msgstr "Total Jobs"
msgid "Total time"
msgstr "Total time"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr "Track AI consumption across your workspace."
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14874,6 +15069,7 @@ msgstr "Universal ID"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15067,6 +15263,7 @@ msgid "Upgrade Plan"
msgstr "Upgrade Plan"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Upgrade to {latestAvailableVersion}"
@@ -15076,12 +15273,13 @@ msgstr "Upgrade to {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "Upgrade to access"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Upgrade to Enterprise to access audit logs"
msgid "Upgrade to Enterprise to access audit logs."
msgstr "Upgrade to Enterprise to access audit logs."
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Upgrading..."
@@ -15154,7 +15352,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Usage"
@@ -15168,6 +15368,11 @@ msgstr "Usage across all workspaces on this server"
msgid "Usage Analytics"
msgstr "Usage Analytics"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr "Usage analytics requires ClickHouse. Contact your administrator."
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15386,13 +15591,7 @@ msgstr "Verify code from the app"
msgid "Verify the code from the app"
msgstr "Verify the code from the app"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Version"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Version of the application"
@@ -15431,6 +15630,11 @@ msgstr "View"
msgid "View Agent"
msgstr "View Agent"
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr "View AI usage breakdown"
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15515,6 +15719,7 @@ msgstr "View Logs"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "View marketplace page"
@@ -15561,10 +15766,17 @@ msgid "View workspace activity logs"
msgstr "View workspace activity logs"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Views"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr "Views created by this app"
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15818,11 +16030,21 @@ msgstr "Where"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Whether this model supports chain-of-thought reasoning"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr "widget"
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Widget type"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr "widgets"
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15911,6 +16133,7 @@ msgstr "Workflows"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15925,6 +16148,7 @@ msgstr "Workflows"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16051,10 +16275,10 @@ msgstr "Year"
msgid "yearly"
msgstr "yearly"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Yearly subscription"
msgid "Yearly"
msgstr "Yearly"
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {No tienes permiso para acceder al campo {fieldsList}} other {No tienes permiso para acceder a los campos {fieldsList}}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} créditos"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} créditos utilizados"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Acciones que los usuarios pueden realizar en este objeto"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Posterior o igual a"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "agente"
@@ -1303,7 +1302,14 @@ msgstr "Roles de Agente"
msgid "Agent tokens"
msgstr "Tokens del agente"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Agentes"
msgid "Agents powering this app"
msgstr "Agentes que impulsan esta aplicación"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "IA"
msgid "AI Chat"
msgstr "Chat de IA"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "Preparación de la solicitud de IA"
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
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "entre el {startOrdinal} y {endOrdinal} del mes"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Booleano"
msgid "Both"
msgstr "Ambos"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Despeja el campo o \"X\" para volver al valor predeterminado/del entorno."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Haz clic en un usuario para ver su desglose diario."
@@ -2986,6 +3072,8 @@ msgstr "Se requiere ClickHouse para los registros de auditoría. Póngase en con
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse no está configurado"
@@ -3100,6 +3188,11 @@ msgstr "los datos de la columna no son compatibles con Selección Múltiple. El
msgid "Columns not matched:"
msgstr "Columnas no coinciden:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Menú de Comandos"
msgid "command menu item"
msgstr "elemento del menú de comandos"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Pega el código a continuación"
msgid "Copy Setup Key"
msgstr "Copiar clave de configuración"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Uso de Crédito"
msgid "Credit usage breakdown for your workspace."
msgstr "Desglose del uso de créditos de tu espacio de trabajo."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "créditos"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Créditos"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Código de moneda"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Actual"
@@ -4124,6 +4221,12 @@ msgstr "Cian"
msgid "Czech"
msgstr "Checo"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Describa lo que quiere que la IA haga..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Describa lo que quiere que la IA haga..."
msgid "Description"
msgstr "Descripción"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Descripción de la aplicación"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "El correo electrónico debe ser válido"
msgid "Email or domain is already in blocklist"
msgstr "El correo electrónico o el dominio ya están en la lista de bloqueo"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Introduce tu clave de API"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Empresa"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Solo destacadas"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "campo"
@@ -6686,6 +6795,11 @@ msgstr "Nombre del campo"
msgid "Field on destination"
msgstr "Campo en destino"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "de {startDay} a {endDay}"
msgid "front component"
msgstr "componente de frontend"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "componentes de frontend"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Acceso total"
msgid "Function name"
msgstr "Nombre de la función"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "funciones"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Funciones"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Conectado como {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "función de lógica"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Funciones de lógica"
@@ -9208,10 +9318,10 @@ msgstr "Mes del año"
msgid "monthly"
msgstr "mensual"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Suscripción mensual"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "El nombre no puede estar vacío"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Nombre tanto en forma singular (ej., 'Factura') como en plural (ej., 'Facturas')."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Nombre de la aplicación"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Navegar a la versión anterior"
msgid "Navigate to previous workflow"
msgstr "Navegar al flujo de trabajo anterior"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "elemento del menú de navegación"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "No hay agentes disponibles"
msgid "No agents match your search"
msgstr "No hay agentes que coincidan con tu búsqueda"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Sin credenciales"
msgid "No credit consumption recorded for this user."
msgstr "No se ha registrado consumo de créditos para este usuario."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Aún no se ha registrado consumo de créditos."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "No se encontró {objectLabelSingular} Eliminado"
msgid "No deleted records matching the filter criteria were found."
msgstr "No se encontraron registros eliminados que coincidan con los criterios del filtro."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "No hay desencadenadores configurados para esta función."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "Sin datos de uso"
@@ -10154,6 +10283,11 @@ msgstr "No hay variables disponibles"
msgid "No variables found"
msgstr "No se encontraron variables"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth o clave de API"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "objeto"
@@ -10797,6 +10932,17 @@ msgstr "pestaña Diseño de página"
msgid "page layout widget"
msgstr "widget de Diseño de página"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Personas a las que he enviado correos electrónicos y de quienes he reci
msgid "People Ive sent emails to."
msgstr "Personas a las que he enviado correos electrónicos."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "Proveedor \"{0}\" eliminado"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Proveedores"
@@ -11881,6 +12031,11 @@ msgstr "Responder"
msgid "Reply to all"
msgstr "Responder a todos"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Texto enriquecido"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "rol"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "Rol actualizado con éxito"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "Rol actualizado con éxito"
msgid "Roles"
msgstr "Roles"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Buscar carpetas..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Buscar un usuario..."
@@ -12548,6 +12716,8 @@ msgstr "Buscando {query} en la web"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "asiento / mes"
@@ -13068,11 +13238,6 @@ msgstr "Acceso total a las configuraciones"
msgid "Settings permissions"
msgstr "Permisos de configuración"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Pestaña de configuración"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Séptimo"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Compartir"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Comparte este enlace para invitar a los usuarios a unirse a tu espacio de trabajo"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "habilidad"
@@ -13253,12 +13430,24 @@ msgstr "Nombre de la habilidad"
msgid "Skill not found"
msgstr "No se encontró la habilidad"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Habilidades"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14228,7 +14417,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Esta aplicación aparece en el marketplace porque está publicada en npm."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Esta aplicación no está incluida en el Marketplace. Se compartió mediante un enlace directo."
@@ -14557,6 +14746,12 @@ msgstr "Trabajos totales"
msgid "Total time"
msgstr "Tiempo total"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14879,6 +15074,7 @@ msgstr "ID universal"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15072,6 +15268,7 @@ msgid "Upgrade Plan"
msgstr "Actualizar plan"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Actualizar a {latestAvailableVersion}"
@@ -15081,12 +15278,13 @@ msgstr "Actualizar a {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "Actualiza para acceder"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Actualice a Enterprise para acceder a los registros de auditoría"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Actualizando..."
@@ -15159,7 +15357,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Uso"
@@ -15173,6 +15373,11 @@ msgstr "Uso en todos los espacios de trabajo de este servidor"
msgid "Usage Analytics"
msgstr "Analíticas de uso"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15391,13 +15596,7 @@ msgstr "Verificar el código desde la aplicación"
msgid "Verify the code from the app"
msgstr "Verificar el código desde la aplicación"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Versión"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Versión de la aplicación"
@@ -15436,6 +15635,11 @@ msgstr "Vista"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15520,6 +15724,7 @@ msgstr "Ver registros"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Ver página del Marketplace"
@@ -15566,10 +15771,17 @@ msgid "View workspace activity logs"
msgstr "Ver registros de actividad del espacio de trabajo"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Vistas"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15823,11 +16035,21 @@ msgstr "Donde"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Si este modelo admite razonamiento con cadena de pensamiento"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Tipo de Widget"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15916,6 +16138,7 @@ msgstr "Workflows"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15930,6 +16153,7 @@ msgstr "Workflows"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16056,10 +16280,10 @@ msgstr "Año"
msgid "yearly"
msgstr "anual"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Suscripción anual"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {Sinulla ei ole oikeuksia käyttää kenttää {fieldsList}} other {Sinulla ei ole oikeuksia käyttää kenttiä {fieldsList}}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} krediittiä"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "Käytetty {0} krediittiä"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Toiminnot, joita käyttäjät voivat suorittaa tällä kohteella"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Myöhemmin tai sama"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "agentti"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "Agentin tokenit"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Agentit"
msgid "Agents powering this app"
msgstr "Tämän sovelluksen taustalla toimivat agentit"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "AI"
msgid "AI Chat"
msgstr "AI-keskustelu"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "AI-pyynnön valmistelu"
msgid "AI Response Schema"
msgstr "AI-vastauskaavio"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "kuukauden {startOrdinal} ja {endOrdinal} päivän välillä"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Totuusarvo"
msgid "Both"
msgstr "Molemmat"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Tyhjennä kenttä tai \"X\" palataksesi ympäristön/oletusarvoon."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Klikkaa käyttäjää, niin näet päivittäisen erittelyn."
@@ -2986,6 +3072,8 @@ msgstr "Tarkastuslokit edellyttävät ClickHousea. Ota yhteyttä järjestelmänv
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse ei ole määritetty"
@@ -3100,6 +3188,11 @@ msgstr "sarakedata ei ole yhteensopiva monivalinnan kanssa. Vaadittu muoto on '[
msgid "Columns not matched:"
msgstr "Sarakkeita ei ole yhdistetty:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Komentovalikko"
msgid "command menu item"
msgstr "komentovalikon valikkokohta"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Kopioi ja liitä alla oleva koodi"
msgid "Copy Setup Key"
msgstr "Kopioi asetusavain"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Krediittien käyttäminen"
msgid "Credit usage breakdown for your workspace."
msgstr "Työtilasi krediittikulutuksen erittely."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "krediitit"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Krediitit"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Valuuttakoodi"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Nykyinen"
@@ -4124,6 +4221,12 @@ msgstr "Syaani"
msgid "Czech"
msgstr "Tšekki"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Kuvaile mitä haluat, että tekoäly tekee..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Kuvaile mitä haluat, että tekoäly tekee..."
msgid "Description"
msgstr "Kuvaus"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Sovelluksen kuvaus"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "Sähköpostin on oltava kelvollinen sähköpostiosoite"
msgid "Email or domain is already in blocklist"
msgstr "Sähköposti tai verkkotunnus on jo estolistalla"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Anna API-avaimesi"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Yritys"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Vain suositellut"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "kenttä"
@@ -6686,6 +6795,11 @@ msgstr "Kentän nimi"
msgid "Field on destination"
msgstr "Kenttä kohteessa"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "{startDay}-päivästä {endDay}-päivään"
msgid "front component"
msgstr "käyttöliittymäkomponentti"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "käyttöliittymäkomponentit"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Täysi pääsy"
msgid "Function name"
msgstr "Funktion nimi"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "funktiot"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Funktiot"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Kirjautuneena käyttäjänä {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "logiikkafunktio"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Logiikkafunktiot"
@@ -9208,10 +9318,10 @@ msgstr "Vuoden kuukausi"
msgid "monthly"
msgstr "kuukausittain"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Kuukausitilaus"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "Nimi ei saa olla tyhjä"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Nimi sekä yksikössä (esim. 'Lasku') että monikossa (esim. 'Laskut')."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Sovelluksen nimi"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Siirry edelliseen versioon"
msgid "Navigate to previous workflow"
msgstr "Siirry edelliseen työnkulkuun"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "navigointivalikon kohta"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "Ei käytettävissä olevia agentteja"
msgid "No agents match your search"
msgstr "Yksikään agentti ei vastaa hakua"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Ei tunnistetietoja"
msgid "No credit consumption recorded for this user."
msgstr "Tälle käyttäjälle ei ole kirjattu krediittikulutusta."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Krediittikulutusta ei ole vielä kirjattu."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "Ei poistettua {objectLabelSingular} löytynyt"
msgid "No deleted records matching the filter criteria were found."
msgstr "Poistettuja tietueita, jotka vastaavat suodatuskriteereitä, ei löytynyt."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "Tälle funktiolle ei ole määritetty laukaisimia."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "Ei käyttötietoja"
@@ -10154,6 +10283,11 @@ msgstr "Ei muuttujia saatavilla"
msgid "No variables found"
msgstr "Muuttujia ei löydy"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth tai API-avain"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "objekti"
@@ -10797,6 +10932,17 @@ msgstr "sivun asettelun välilehti"
msgid "page layout widget"
msgstr "sivun asettelun widget"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Henkilöt, joille olen lähettänyt sähköposteja ja joilta olen saanut
msgid "People Ive sent emails to."
msgstr "Henkilöt, joille olen lähettänyt sähköposteja."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "Tarjoaja \"{0}\" poistettu"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Tarjoajat"
@@ -11881,6 +12031,11 @@ msgstr "Vastaa"
msgid "Reply to all"
msgstr "Vastaa kaikille"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Muotoiltu teksti"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "rooli"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "Rooli päivitetty onnistuneesti"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "Rooli päivitetty onnistuneesti"
msgid "Roles"
msgstr "Roolit"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Etsi kansioita..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Etsi käyttäjää..."
@@ -12548,6 +12716,8 @@ msgstr "Haetaan verkosta hakusanalla {query}"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "paikka / kuukausi"
@@ -13068,11 +13238,6 @@ msgstr "Täysi pääsy asetuksiin"
msgid "Settings permissions"
msgstr "Asetusten käyttöoikeudet"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Asetukset-välilehti"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Seitsemäs"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Jaa"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Jaa tätä linkkiä kutsuaksesi käyttäjiä liittymään työtilaasi"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "taito"
@@ -13253,12 +13430,24 @@ msgstr "Taidon nimi"
msgid "Skill not found"
msgstr "Taitoa ei löytynyt"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Taidot"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14226,7 +14415,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Tämä sovellus on listattuna markkinapaikassa, koska se on julkaistu npm:ssä."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Tätä sovellusta ei ole listattu markkinapaikassa. Se jaettiin suoran linkin kautta."
@@ -14555,6 +14744,12 @@ msgstr "Töitä yhteensä"
msgid "Total time"
msgstr "Aika yhteensä"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14877,6 +15072,7 @@ msgstr "Universaali tunniste"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15070,6 +15266,7 @@ msgid "Upgrade Plan"
msgstr "Päivitä tilaus"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Päivitä versioon {latestAvailableVersion}"
@@ -15079,12 +15276,13 @@ msgstr "Päivitä versioon {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "Päivitä saadaksesi käyttöoikeuden"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Päivitä Enterprise-tilaukseen saadaksesi tarkastuslokit käyttöön"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Päivitetään..."
@@ -15157,7 +15355,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Käyttö"
@@ -15171,6 +15371,11 @@ msgstr "Käyttö kaikissa tämän palvelimen työtiloissa"
msgid "Usage Analytics"
msgstr "Käyttöanalytiikka"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15389,13 +15594,7 @@ msgstr "Vahvista koodi sovelluksesta"
msgid "Verify the code from the app"
msgstr "Vahvista koodi sovelluksesta"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Versio"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Sovelluksen versio"
@@ -15434,6 +15633,11 @@ msgstr "Näkymä"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15518,6 +15722,7 @@ msgstr "Näytä lokit"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Avaa markkinapaikan sivu"
@@ -15564,10 +15769,17 @@ msgid "View workspace activity logs"
msgstr "Näytä työtilan toimintalokit"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Näkymät"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15821,11 +16033,21 @@ msgstr "Missä"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Tukeeko tämä malli ajatusketju-päättelyä"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Widgetin tyyppi"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15914,6 +16136,7 @@ msgstr "Työnkulut"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15928,6 +16151,7 @@ msgstr "Työnkulut"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16054,10 +16278,10 @@ msgstr "Vuosi"
msgid "yearly"
msgstr "vuosittain"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Vuositilaus"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {Vous n'avez pas la permission d'accéder au champ {fieldsList}} other {Vous n'avez pas la permission d'accéder aux champs {fieldsList}}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} crédits"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} crédits utilisés"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Actions que les utilisateurs peuvent effectuer sur cet objet"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Après ou égal"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "agent"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "Jetons de l'agent"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Agents"
msgid "Agents powering this app"
msgstr "Agents qui propulsent cette application"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "IA"
msgid "AI Chat"
msgstr "Chat IA"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "Préparation de la requête IA"
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
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "entre le {startOrdinal} et le {endOrdinal} du mois"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Booléen"
msgid "Both"
msgstr "Les deux"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Effacez le champ ou \"X\" pour revenir à la valeur par défaut de l'environnement."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Cliquez sur un utilisateur pour voir sa répartition quotidienne."
@@ -2986,6 +3072,8 @@ msgstr "ClickHouse est requis pour les journaux d'audit. Contactez votre adminis
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse non configuré"
@@ -3100,6 +3188,11 @@ msgstr "les données de colonne ne sont pas compatibles avec la sélection multi
msgid "Columns not matched:"
msgstr "Colonnes non appariées :"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Menu de commandes"
msgid "command menu item"
msgstr "élément du menu de commande"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Collez le code ci-dessous"
msgid "Copy Setup Key"
msgstr "Copier la clé de configuration"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Utilisation des crédits"
msgid "Credit usage breakdown for your workspace."
msgstr "Répartition de l'utilisation des crédits dans votre espace de travail."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "crédits"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Crédits"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Code de la devise"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Actuel"
@@ -4124,6 +4221,12 @@ msgstr "Cyan"
msgid "Czech"
msgstr "Tchèque"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Décrivez ce que vous voulez que l'IA fasse..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Décrivez ce que vous voulez que l'IA fasse..."
msgid "Description"
msgstr "Description"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Description de l'application"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "L'adresse e-mail doit être valide"
msgid "Email or domain is already in blocklist"
msgstr "Le courriel ou le domaine est déjà dans la liste de blocage"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Saisissez votre clé API"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Entreprise"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Uniquement mises en avant"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "champ"
@@ -6686,6 +6795,11 @@ msgstr "Nom du champ"
msgid "Field on destination"
msgstr "Champ sur la destination"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "du {startDay} au {endDay}"
msgid "front component"
msgstr "composant frontal"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "composants frontaux"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Accès complet"
msgid "Function name"
msgstr "Nom de la fonction"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "fonctions"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Fonctions"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Connecté en tant que {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "fonction logique"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Fonctions logiques"
@@ -9208,10 +9318,10 @@ msgstr "Mois de l'année"
msgid "monthly"
msgstr "mensuel"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Abonnement mensuel"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "Le nom ne peut pas être vide"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Nom à la fois au singulier (par exemple, 'Facture') et au pluriel (par exemple, 'Factures')."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Nom de l'application"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Aller à la version précédente"
msgid "Navigate to previous workflow"
msgstr "Aller au workflow précédent"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "élément de menu de navigation"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "Aucun agent disponible"
msgid "No agents match your search"
msgstr "Aucun agent ne correspond à votre recherche"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Aucun identifiant"
msgid "No credit consumption recorded for this user."
msgstr "Aucune consommation de crédits enregistrée pour cet utilisateur."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Aucune consommation de crédits enregistrée pour le moment."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "Aucun {objectLabelSingular} supprimé trouvé"
msgid "No deleted records matching the filter criteria were found."
msgstr "Aucun enregistrement supprimé correspondant aux critères de filtre n'a été trouvé."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "Aucun déclencheur configuré pour cette fonction."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "Aucune donnée d'utilisation"
@@ -10154,6 +10283,11 @@ msgstr "Aucune variable disponible"
msgid "No variables found"
msgstr "Aucune variable trouvée"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth ou clé API"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "objet"
@@ -10797,6 +10932,17 @@ msgstr "onglet Mise en page"
msgid "page layout widget"
msgstr "widget de mise en page"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Personnes à qui j'ai envoyé des emails et de qui j'ai reçu des emails
msgid "People Ive sent emails to."
msgstr "Personnes à qui j'ai envoyé des emails."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "Fournisseur \"{0}\" supprimé"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Fournisseurs"
@@ -11881,6 +12031,11 @@ msgstr "Répondre"
msgid "Reply to all"
msgstr "Répondre à tous"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Texte enrichi"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "rôle"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "Rôle mis à jour avec succès"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "Rôle mis à jour avec succès"
msgid "Roles"
msgstr "Rôles"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Rechercher des dossiers..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Rechercher un utilisateur..."
@@ -12548,6 +12716,8 @@ msgstr "Recherche sur le web pour {query}"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "siège / mois"
@@ -13068,11 +13238,6 @@ msgstr "Accès complet aux paramètres"
msgid "Settings permissions"
msgstr "Autorisations des paramètres"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Onglet Paramètres"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Septième"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Partager"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Partagez ce lien pour inviter des utilisateurs à rejoindre votre espace de travail"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "compétence"
@@ -13253,12 +13430,24 @@ msgstr "Nom de la compétence"
msgid "Skill not found"
msgstr "Compétence introuvable"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Compétences"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14228,7 +14417,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Cette application est répertoriée sur la place de marché car elle est publiée sur npm."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Cette application n'est pas répertoriée sur la marketplace. Elle a été partagée via un lien direct."
@@ -14557,6 +14746,12 @@ msgstr "Nombre total de tâches"
msgid "Total time"
msgstr "Temps total"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14879,6 +15074,7 @@ msgstr ""
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15072,6 +15268,7 @@ msgid "Upgrade Plan"
msgstr "Mettre à niveau l'abonnement"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Mettre à niveau vers {latestAvailableVersion}"
@@ -15081,12 +15278,13 @@ msgstr "Mettre à niveau vers {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "Passez à un forfait supérieur pour y accéder"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Passez à Enterprise pour accéder aux journaux d'audit"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Mise à niveau en cours..."
@@ -15159,7 +15357,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Utilisation"
@@ -15173,6 +15373,11 @@ msgstr ""
msgid "Usage Analytics"
msgstr "Analyses d'utilisation"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15391,13 +15596,7 @@ msgstr "Vérifiez le code depuis l'application"
msgid "Verify the code from the app"
msgstr "Vérifiez le code depuis l'application"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Version"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Version de l'application"
@@ -15436,6 +15635,11 @@ msgstr "Vue"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15520,6 +15724,7 @@ msgstr "Afficher les journaux"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Voir la page de la marketplace"
@@ -15566,10 +15771,17 @@ msgid "View workspace activity logs"
msgstr "Afficher les journaux d'activité de l'espace de travail"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Vues"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15823,11 +16035,21 @@ msgstr "Où"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Indique si ce modèle prend en charge la chaîne de raisonnement"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Type de widget"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15916,6 +16138,7 @@ msgstr "Workflows"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15930,6 +16153,7 @@ msgstr "Workflows"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16056,10 +16280,10 @@ msgstr "Année"
msgid "yearly"
msgstr "annuel"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Abonnement annuel"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
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
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {אין לך גישה לשדה {fieldsList}} two {אין לך גישה לשדות {fieldsList}} many {אין לך גישה לשדות {fieldsList}} other {אין לך גישה לשדות {fieldsList}}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} קרדיטים"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} קרדיטים בשימוש"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "פעולות משתמשים יכולים לבצע על אובייקט ז
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "לאחר או שווה"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "סוכן"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "אסימוני סוכן"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "סוכנים"
msgid "Agents powering this app"
msgstr "סוכנים המפעילים את היישום הזה"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "בינה מלאכותית (AI)"
msgid "AI Chat"
msgstr "צ'אט בינה מלאכותית"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "הכנת בקשת AI"
msgid "AI Response Schema"
msgstr "סכמת תגובת AI"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "בין ה-{startOrdinal} ובין ה-{endOrdinal} של החודש"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "בוליאני"
msgid "Both"
msgstr "שניהם"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "נקה את השדה או \"X\" כדי לחזור לערך סביבה/ברירת מחדל."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "לחצו על משתמש כדי לראות את הפירוט היומי."
@@ -2986,6 +3072,8 @@ msgstr "נדרש ClickHouse עבור יומני ביקורת. פנו למנהל
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse לא מוגדר"
@@ -3100,6 +3188,11 @@ msgstr "נתוני העמודה אינם תואמים לרב-בחירה. פור
msgid "Columns not matched:"
msgstr "עמודות שלא תואמו:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "תפריט הפקודות"
msgid "command menu item"
msgstr "פריט תפריט פקודות"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "הדבק את הקוד למטה"
msgid "Copy Setup Key"
msgstr "העתק מפתח הגדרה"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "שימוש באשראי"
msgid "Credit usage breakdown for your workspace."
msgstr "פירוט שימוש בקרדיטים עבור סביבת העבודה שלך."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "קרדיטים"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "קרדיטים"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "קוד מטבע"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "נוכחי"
@@ -4124,6 +4221,12 @@ msgstr "ציאן"
msgid "Czech"
msgstr "צ'כית"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "תאר מה אתה רוצה שהבינה המלאכותית תעשה..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "תאר מה אתה רוצה שהבינה המלאכותית תעשה..."
msgid "Description"
msgstr "תיאור"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "תיאור היישום"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "יש להזין כתובת דוא\"ל תקינה"
msgid "Email or domain is already in blocklist"
msgstr "דוא\"ל או תחום כבר נמצאים ברשימת החסימה"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "הזן את מפתח ה-API שלך"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "אנטרפרייז"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "מומלצים בלבד"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "שדה"
@@ -6686,6 +6795,11 @@ msgstr "שם שדה"
msgid "Field on destination"
msgstr "שדה ביעד"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "מ-{startDay} ל-{endDay}"
msgid "front component"
msgstr "רכיב פרונטאנד"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "רכיבי פרונטאנד"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "גישה מלאה"
msgid "Function name"
msgstr "שם הפונקציה"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "פונקציות"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "פונקציות"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "התחברת כ{impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "פונקציה לוגית"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "פונקציות לוגיות"
@@ -9208,10 +9318,10 @@ msgstr "חודש בשנה"
msgid "monthly"
msgstr "חודשי"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "מנוי חודשי"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "שם לא יכול להיות ריק"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "שם בצורות יחיד (לדוגמא, 'חשבונית') ורבים (לדוגמא, 'חשבוניות')."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "שם היישום"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "נווט לגרסה הקודמת"
msgid "Navigate to previous workflow"
msgstr "נווט לזרימת עבודה הקודמת"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "פריט בתפריט הניווט"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "אין סוכנים זמינים"
msgid "No agents match your search"
msgstr "לא נמצאו סוכנים תואמים לחיפוש שלך"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "אין אישורים"
msgid "No credit consumption recorded for this user."
msgstr "לא נרשמה צריכת קרדיטים עבור משתמש זה."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "עדיין לא נרשמה צריכת קרדיטים."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "לא נמצא {objectLabelSingular} שנמחק"
msgid "No deleted records matching the filter criteria were found."
msgstr "לא נמצאו רישומים שנמחקו שתואמים לקריטריוני הסינון."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "אין טריגרים מוגדרים עבור פונקציה זו."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "אין נתוני שימוש"
@@ -10154,6 +10283,11 @@ msgstr "אין משתנים זמינים"
msgid "No variables found"
msgstr "לא נמצאו משתנים"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth או מפתח API"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "אובייקט"
@@ -10797,6 +10932,17 @@ msgstr "לשונית פריסת עמוד"
msgid "page layout widget"
msgstr "יישומון פריסת עמוד"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "אנשים שאני שותף דוא\"ל אליהם וקיבלתי ממנ
msgid "People Ive sent emails to."
msgstr "אנשים ששלחתי אליהם דוא\"ל."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "הספק \"{0}\" הוסר"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "ספקים"
@@ -11881,6 +12031,11 @@ msgstr "תגובה"
msgid "Reply to all"
msgstr "השב לכולם"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "טקסט עשיר"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "תפקיד"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "התפקיד עודכן בהצלחה"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "התפקיד עודכן בהצלחה"
msgid "Roles"
msgstr "\\"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "חפש תיקיות..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "חפש משתמש..."
@@ -12548,6 +12716,8 @@ msgstr "מחפש ברשת את {query}"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "מושב / חודש"
@@ -13068,11 +13238,6 @@ msgstr "כל אפשרויות ההגדרות פתוחות"
msgid "Settings permissions"
msgstr "הרשאות הגדרות"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "לשונית ההגדרות"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "שביעי"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "שתף"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "\\"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "מיומנות"
@@ -13253,12 +13430,24 @@ msgstr "שם המיומנות"
msgid "Skill not found"
msgstr "מיומנות לא נמצאה"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "מיומנויות"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14226,7 +14415,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "אפליקציה זו מופיעה במרקטפלייס משום שהיא פורסמה ב-npm."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "אפליקציה זו אינה מופיעה במרקטפלייס. היא שותפה באמצעות קישור ישיר."
@@ -14555,6 +14744,12 @@ msgstr "סך כל העבודות"
msgid "Total time"
msgstr "זמן כולל"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14877,6 +15072,7 @@ msgstr "מזהה אוניברסלי"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15070,6 +15266,7 @@ msgid "Upgrade Plan"
msgstr "שדרג את התוכנית"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "שדרג לגרסה {latestAvailableVersion}"
@@ -15079,12 +15276,13 @@ msgstr "שדרג לגרסה {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "שדרגו כדי לגשת"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "שדרג ל-Enterprise כדי לגשת ליומני ביקורת"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "משדרג..."
@@ -15157,7 +15355,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "שימוש"
@@ -15171,6 +15371,11 @@ msgstr "שימוש בכל מרחבי העבודה בשרת זה"
msgid "Usage Analytics"
msgstr "ניתוח נתוני שימוש"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15389,13 +15594,7 @@ msgstr "אמת קוד מהאפליקציה"
msgid "Verify the code from the app"
msgstr "אמת את הקוד מהאפליקציה"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "גרסה"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "גרסת היישום"
@@ -15434,6 +15633,11 @@ msgstr "תצוגה"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15518,6 +15722,7 @@ msgstr "צפה ביומנים"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "צפייה בדף המרקטפלייס"
@@ -15564,10 +15769,17 @@ msgid "View workspace activity logs"
msgstr "צפה ביומני פעילות סביבת העבודה"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "תצוגות"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15821,11 +16033,21 @@ msgstr "כאשר"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "האם מודל זה תומך בהסקה בשרשרת מחשבה"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "סוג ווידג'ט"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15914,6 +16136,7 @@ msgstr "זרימות עבודה"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15928,6 +16151,7 @@ msgstr "זרימות עבודה"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16054,10 +16278,10 @@ msgstr "שנה"
msgid "yearly"
msgstr "שנתי"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "מנוי שנתי"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {Nincs jogosultsága a(z) {fieldsList} mező eléréséhez} other {Nincs jogosultsága a(z) {fieldsList} mezők eléréséhez}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} kredit"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} kredit felhasználva"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Műveletek, amelyeket a felhasználók ezen az objektumon végrehajthatn
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Később vagy egyenlő"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "ügynök"
@@ -1303,7 +1302,14 @@ msgstr "Ügynök tokenek"
msgid "Agent tokens"
msgstr "Ügynök tokenek"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Ügynökök"
msgid "Agents powering this app"
msgstr "Az alkalmazást működtető ügynökök"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "MI"
msgid "AI Chat"
msgstr "AI csevegés"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "MI-kérés előkészítése"
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
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "a hónap {startOrdinal}. és {endOrdinal}. napja között"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Boolean"
msgid "Both"
msgstr "Mindkettő"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Tisztítsa meg a mezőt vagy kattintson az \"X\" gombra, hogy visszatérjen a környezet/alapértelmezett értékhez."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Kattintson egy felhasználóra a napi bontás megtekintéséhez."
@@ -2986,6 +3072,8 @@ msgstr "Az auditnaplókhoz ClickHouse szükséges. Lépjen kapcsolatba a rendsze
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "A ClickHouse nincs beállítva"
@@ -3100,6 +3188,11 @@ msgstr "az oszlopadatok nem kompatibilisek a többválasztásos kiválasztással
msgid "Columns not matched:"
msgstr "Nem egyező oszlopok:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Parancsmenü"
msgid "command menu item"
msgstr "parancsmenü menüpont"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Másolja be az alábbi kódot"
msgid "Copy Setup Key"
msgstr "Beállítási kulcs másolása"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Kredit Felhasználás"
msgid "Credit usage breakdown for your workspace."
msgstr "A munkaterület kreditfelhasználásának bontása."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "kreditek"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Kredit"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Pénznemkód"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Jelenlegi"
@@ -4124,6 +4221,12 @@ msgstr "Cián"
msgid "Czech"
msgstr "Cseh"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Írja le, mit szeretne, hogy az AI végrehajtson..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Írja le, mit szeretne, hogy az AI végrehajtson..."
msgid "Description"
msgstr "Leírás"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Az alkalmazás leírása"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "Az e-mail-címnek érvényesnek kell lennie"
msgid "Email or domain is already in blocklist"
msgstr "Az email vagy domain már szerepel a tiltólistában"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Adja meg az API-kulcsát"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Vállalati"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Csak kiemeltek"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "mező"
@@ -6686,6 +6795,11 @@ msgstr "Mező neve"
msgid "Field on destination"
msgstr "Mező a célállomáson"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "{startDay}-től {endDay}-ig"
msgid "front component"
msgstr "front komponens"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "front komponensek"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Teljes hozzáférés"
msgid "Function name"
msgstr "Függvény neve"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "funkciók"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Funkciók"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Bejelentkezett mint {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "logikai függvény"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Logikai függvények"
@@ -9208,10 +9318,10 @@ msgstr "Az év hónapja"
msgid "monthly"
msgstr "havi"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Havi előfizetés"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "A név nem lehet üres"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Név egyes (pl. 'Számla') és többes (pl. 'Számlák') alakban."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Az alkalmazás neve"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Navigálás az előző verzióra"
msgid "Navigate to previous workflow"
msgstr "Navigálás az előző munkafolyamatra"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "navigációs menüelem"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "Nem állnak rendelkezésre ügynökök"
msgid "No agents match your search"
msgstr "Nincs olyan ügynök, amely megfelel a keresésének"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Nincsenek hitelesítő adatok"
msgid "No credit consumption recorded for this user."
msgstr "Ennél a felhasználónál nincs rögzítve kreditfogyasztás."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Még nincs rögzítve kreditfogyasztás."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "Nincs törölt {objectLabelSingular} található"
msgid "No deleted records matching the filter criteria were found."
msgstr "A megadott szűrési feltételeknek megfelelő törölt rekordok nem találhatók."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "Nincsenek triggerek beállítva ehhez a függvényhez."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "Nincsenek használati adatok"
@@ -10154,6 +10283,11 @@ msgstr "Nem állnak rendelkezésre változók"
msgid "No variables found"
msgstr "Nem található változó"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth vagy API-kulcs"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "objektum"
@@ -10797,6 +10932,17 @@ msgstr "Oldalelrendezés lap"
msgid "page layout widget"
msgstr "Oldalelrendezés widget"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Azok a személyek, akiknek küldtem emailt, és akiktől emailt kaptam."
msgid "People Ive sent emails to."
msgstr "Azok a személyek, akiknek küldtem emailt."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "A \"{0}\" szolgáltató eltávolítva"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Szolgáltatók"
@@ -11881,6 +12031,11 @@ msgstr "Válasz"
msgid "Reply to all"
msgstr "Mindenkinek válaszol"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Formázott szöveg"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "szerepkör"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "Szerep sikeresen frissítve"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "Szerep sikeresen frissítve"
msgid "Roles"
msgstr "Szerepkörök"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Mappák keresése..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Felhasználó keresése..."
@@ -12548,6 +12716,8 @@ msgstr "Keresés a weben a következőre: {query}"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "hely / hónap"
@@ -13068,11 +13238,6 @@ msgstr "Beállítások teljes hozzáférés"
msgid "Settings permissions"
msgstr "Beállítási jogosultságok"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Beállítások fül"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Hetedik"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Megosztás"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Ossza meg ezt a hivatkozást, hogy meghívja a felhasználókat a munkaterületére"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "készség"
@@ -13253,12 +13430,24 @@ msgstr "Készség neve"
msgid "Skill not found"
msgstr "A készség nem található"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Készségek"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14226,7 +14415,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Ez az alkalmazás szerepel a piactéren, mert közzé van téve az npm-en."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Ez az alkalmazás nincs listázva a piactéren. Közvetlen linken keresztül lett megosztva."
@@ -14555,6 +14744,12 @@ msgstr "Feladatok összesen"
msgid "Total time"
msgstr "Összes idő"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14877,6 +15072,7 @@ msgstr "Univerzális azonosító"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15070,6 +15266,7 @@ msgid "Upgrade Plan"
msgstr "Csomag frissítése"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Frissítés a(z) {latestAvailableVersion} verzióra"
@@ -15079,12 +15276,13 @@ msgstr "Frissítés a(z) {latestAvailableVersion} verzióra"
msgid "Upgrade to access"
msgstr "Frissíts a hozzáféréshez"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Frissítsen Enterprise előfizetésre az auditnaplók eléréséhez"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Frissítés..."
@@ -15157,7 +15355,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Használat"
@@ -15171,6 +15371,11 @@ msgstr "Használat ezen a szerveren lévő összes munkaterületen"
msgid "Usage Analytics"
msgstr "Használati elemzés"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15389,13 +15594,7 @@ msgstr "Ellenőrizze a kódot az alkalmazásból"
msgid "Verify the code from the app"
msgstr "Ellenőrizze a kódot az alkalmazásból"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Verzió"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Az alkalmazás verziója"
@@ -15434,6 +15633,11 @@ msgstr "Nézet"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15518,6 +15722,7 @@ msgstr "Naplók megtekintése"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Piactéri oldal megtekintése"
@@ -15564,10 +15769,17 @@ msgid "View workspace activity logs"
msgstr "Munkaterület aktivitási naplóinak megtekintése"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Nézetek"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15821,11 +16033,21 @@ msgstr "Ahol"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Támogatja-e ez a modell a gondolatmenet-alapú következtetést"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Widget típus"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15914,6 +16136,7 @@ msgstr "Munkafolyamatok"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15928,6 +16151,7 @@ msgstr "Munkafolyamatok"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16054,10 +16278,10 @@ msgstr "Év"
msgid "yearly"
msgstr "éves"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Éves előfizetés"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {Non hai il permesso di accedere al campo {fieldsList}} other {Non hai il permesso di accedere ai campi {fieldsList}}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} crediti"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} crediti utilizzati"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Azioni che gli utenti possono eseguire su questo oggetto"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Successivo o uguale a"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "agente"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "Token dell'agente"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Agenti"
msgid "Agents powering this app"
msgstr "Agenti che alimentano questa applicazione"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "AI"
msgid "AI Chat"
msgstr "Chat con IA"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "Preparazione della richiesta IA"
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
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "tra il {startOrdinal} e {endOrdinal} del mese"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Booleano"
msgid "Both"
msgstr "Entrambi"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Cancella il campo o \"X\" per ripristinare il valore di ambiente/predefinito."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Fai clic su un utente per vedere la sua suddivisione giornaliera."
@@ -2986,6 +3072,8 @@ msgstr "Per i log di audit è necessario ClickHouse. Contatta il tuo amministrat
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse non configurato"
@@ -3100,6 +3188,11 @@ msgstr "i dati della colonna non sono compatibili con Multi-Select. Il formato r
msgid "Columns not matched:"
msgstr "Colonne non corrispondenti:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Menu Comandi"
msgid "command menu item"
msgstr "voce del menu comandi"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Incolla il codice qui sotto"
msgid "Copy Setup Key"
msgstr "Copia Chiave di Configurazione"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Utilizzo dei Crediti"
msgid "Credit usage breakdown for your workspace."
msgstr "Dettaglio dell'utilizzo dei crediti per il tuo spazio di lavoro."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "crediti"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Crediti"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Codice valuta"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Attuale"
@@ -4124,6 +4221,12 @@ msgstr "Ciano"
msgid "Czech"
msgstr "Ceco"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Descrivi cosa vuoi che l'AI faccia..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Descrivi cosa vuoi che l'AI faccia..."
msgid "Description"
msgstr "Descrizione"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Descrizione dell'applicazione"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "L'indirizzo email deve essere valido"
msgid "Email or domain is already in blocklist"
msgstr "L'e-mail o il dominio è già presente nella lista di blocco"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Inserisci la tua chiave API"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Enterprise"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Solo in evidenza"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "campo"
@@ -6686,6 +6795,11 @@ msgstr "Nome del campo"
msgid "Field on destination"
msgstr "Campo sulla destinazione"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "dal {startDay} al {endDay}"
msgid "front component"
msgstr "componente front-end"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "componenti front-end"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Accesso completo"
msgid "Function name"
msgstr "Nome della funzione"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "funzioni"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Funzioni"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Accesso effettuato come {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "funzione logica"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Funzioni logiche"
@@ -9208,10 +9318,10 @@ msgstr "Mese dell'anno"
msgid "monthly"
msgstr "mensile"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Abbonamento mensile"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "Il nome non può essere vuoto"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Nome sia al singolare (ad es., 'Fattura') che al plurale (ad es., 'Fatture')."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Nome dell'applicazione"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Vai alla versione precedente"
msgid "Navigate to previous workflow"
msgstr "Vai al workflow precedente"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "voce del menu di navigazione"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "Nessun agente disponibile"
msgid "No agents match your search"
msgstr "Nessun agente corrisponde alla tua ricerca"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Nessuna credenziale"
msgid "No credit consumption recorded for this user."
msgstr "Nessun consumo di crediti registrato per questo utente."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Nessun consumo di crediti registrato finora."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "Nessun elemento eliminato trovato {objectLabelSingular}"
msgid "No deleted records matching the filter criteria were found."
msgstr "Non sono stati trovati record eliminati che corrispondono ai criteri del filtro."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "Nessun trigger configurato per questa funzione."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "Nessun dato di utilizzo"
@@ -10154,6 +10283,11 @@ msgstr "Nessuna variabile disponibile"
msgid "No variables found"
msgstr "Nessuna variabile trovata"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth o chiave API"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "oggetto"
@@ -10797,6 +10932,17 @@ msgstr "scheda layout di pagina"
msgid "page layout widget"
msgstr "widget layout di pagina"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Persone a cui hai inviato email e da cui hai ricevuto email."
msgid "People Ive sent emails to."
msgstr "Persone a cui hai inviato email."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "Provider \"{0}\" rimosso"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Provider"
@@ -11881,6 +12031,11 @@ msgstr "Rispondi"
msgid "Reply to all"
msgstr "Rispondi a tutti"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Testo formattato"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "ruolo"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "Ruolo aggiornato con successo"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "Ruolo aggiornato con successo"
msgid "Roles"
msgstr "Ruoli"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Cerca cartelle..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Cerca un utente..."
@@ -12548,6 +12716,8 @@ msgstr "Ricerca sul web di {query} in corso"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "posto / mese"
@@ -13068,11 +13238,6 @@ msgstr "Accesso completo alle impostazioni"
msgid "Settings permissions"
msgstr "Autorizzazioni delle impostazioni"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Scheda Impostazioni"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Settimo"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Condividi"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Condividi questo link per invitare gli utenti a unirsi al tuo workspace"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "abilità"
@@ -13253,12 +13430,24 @@ msgstr "Nome dell'abilità"
msgid "Skill not found"
msgstr "Abilità non trovata"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Abilità"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14228,7 +14417,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Questa app è elencata nel marketplace perché è pubblicata su npm."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Questa applicazione non è elencata nel marketplace. È stata condivisa tramite un link diretto."
@@ -14557,6 +14746,12 @@ msgstr "Lavori totali"
msgid "Total time"
msgstr "Tempo totale"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14879,6 +15074,7 @@ msgstr "ID universale"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15072,6 +15268,7 @@ msgid "Upgrade Plan"
msgstr "Aggiorna piano"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Aggiorna a {latestAvailableVersion}"
@@ -15081,12 +15278,13 @@ msgstr "Aggiorna a {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "Esegui l'upgrade per accedere"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Esegui l'upgrade alla versione Enterprise per accedere ai log di audit"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Aggiornamento in corso..."
@@ -15159,7 +15357,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Utilizzo"
@@ -15173,6 +15373,11 @@ msgstr "Utilizzo in tutti gli spazi di lavoro su questo server"
msgid "Usage Analytics"
msgstr "Analisi dell'utilizzo"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15391,13 +15596,7 @@ msgstr "Verifica il codice dall'app"
msgid "Verify the code from the app"
msgstr "Verifica il codice dall'app"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Versione"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Versione dell'applicazione"
@@ -15436,6 +15635,11 @@ msgstr "Vista"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15520,6 +15724,7 @@ msgstr "Visualizza log"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Visualizza la pagina del marketplace"
@@ -15566,10 +15771,17 @@ msgid "View workspace activity logs"
msgstr "Visualizza i log delle attività dello spazio di lavoro"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Viste"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15823,11 +16035,21 @@ msgstr "Dove"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Se questo modello supporta il ragionamento chain-of-thought"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Tipo di Widget"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15916,6 +16138,7 @@ msgstr "Workflows"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15930,6 +16153,7 @@ msgstr "Workflows"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16056,10 +16280,10 @@ msgstr "Anno"
msgid "yearly"
msgstr "annuale"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Abbonamento annuale"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, other {フィールド {fieldsList} にアクセスする権限がありません}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} クレジット"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} クレジット使用済み"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "このオブジェクトにユーザーが行えるアクション"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "以降(同日を含む)"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "エージェント"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "エージェントのトークン"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "エージェントたち"
msgid "Agents powering this app"
msgstr "このアプリを支えるエージェント"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "AI"
msgid "AI Chat"
msgstr "AI チャット"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "AI リクエストの準備"
msgid "AI Response Schema"
msgstr "AIレスポンススキーマ"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "月の {startOrdinal} から {endOrdinal} の間"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "ブール型"
msgid "Both"
msgstr "両方"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "フィールドをクリアするか、環境/デフォルトの値に戻すには、「X」を使用します。"
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "ユーザーをクリックして日別の内訳を表示します。"
@@ -2986,6 +3072,8 @@ msgstr "監査ログには ClickHouse が必要です。管理者に連絡して
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse が未設定"
@@ -3100,6 +3188,11 @@ msgstr "列データはマルチセレクトと互換性がありません。必
msgid "Columns not matched:"
msgstr "一致しない列:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "コマンドメニュー"
msgid "command menu item"
msgstr "コマンドメニュー項目"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "以下のコードを貼り付けてください"
msgid "Copy Setup Key"
msgstr "セットアップキーをコピー"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "クレジット使用量"
msgid "Credit usage breakdown for your workspace."
msgstr "ワークスペースのクレジット利用内訳。"
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "クレジット"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "クレジット"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "通貨コード"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "現在"
@@ -4124,6 +4221,12 @@ msgstr "シアン"
msgid "Czech"
msgstr "チェコ語"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "AIにさせたいことを説明してください..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "AIにさせたいことを説明してください..."
msgid "Description"
msgstr "説明"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "アプリケーションの説明"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "有効なメールアドレスを入力してください"
msgid "Email or domain is already in blocklist"
msgstr "メールまたはドメインはすでにブロックリストに登録されています"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "API キーを入力"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "エンタープライズ"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "注目のみ"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "フィールド"
@@ -6686,6 +6795,11 @@ msgstr "フィールド名"
msgid "Field on destination"
msgstr "宛先のフィールド"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "{startDay} から {endDay} へ"
msgid "front component"
msgstr "フロントエンドコンポーネント"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "フロントエンドコンポーネント"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "フルアクセス"
msgid "Function name"
msgstr "関数名"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "機能"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "機能"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "{impersonatedUser}としてログイン中"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "ロジック関数"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "ロジック関数"
@@ -9208,10 +9318,10 @@ msgstr "月"
msgid "monthly"
msgstr "月払い"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "月額サブスクリプション"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "名前は空にできません"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "単数形<b></b>例えば、「Invoice」<b></b>および複数形<b></b>例えば、「Invoices」<b></b>の名前。"
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "アプリケーションの名前"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "前のバージョンに移動"
msgid "Navigate to previous workflow"
msgstr "前のワークフローに移動"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "ナビゲーションメニュー項目"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "利用可能なエージェントはありません"
msgid "No agents match your search"
msgstr "検索に一致するエージェントがありません"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "認証情報なし"
msgid "No credit consumption recorded for this user."
msgstr "このユーザーのクレジット消費は記録されていません。"
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "クレジット消費はまだ記録されていません。"
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "削除された{objectLabelSingular}が見つかりません"
msgid "No deleted records matching the filter criteria were found."
msgstr "フィルター基準に合致する削除されたレコードは見つかりませんでした。"
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "この関数にはトリガーが設定されていません。"
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "利用データなし"
@@ -10154,6 +10283,11 @@ msgstr "利用可能な変数はありません"
msgid "No variables found"
msgstr "変数が見つかりません"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth または API キー"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "オブジェクト"
@@ -10797,6 +10932,17 @@ msgstr "ページレイアウトタブ"
msgid "page layout widget"
msgstr "ページレイアウトウィジェット"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "送信したメールおよび受信したメールの相手。"
msgid "People Ive sent emails to."
msgstr "送信したメールの相手。"
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "プロバイダー \"{0}\" を削除しました"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "プロバイダー"
@@ -11881,6 +12031,11 @@ msgstr "返信"
msgid "Reply to all"
msgstr "全員に返信"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "リッチテキスト"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "役割"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "ロールが正常に更新されました"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "ロールが正常に更新されました"
msgid "Roles"
msgstr "役割"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "フォルダーを検索..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "ユーザーを検索..."
@@ -12548,6 +12716,8 @@ msgstr "ウェブで {query} を検索中"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "座席 / 月"
@@ -13068,11 +13238,6 @@ msgstr "設定の全アクセス"
msgid "Settings permissions"
msgstr "設定の権限"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "設定タブ"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "第七"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "共有"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "このリンクを共有して、ユーザーをワークスペースに招待"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "スキル"
@@ -13253,12 +13430,24 @@ msgstr "スキル名"
msgid "Skill not found"
msgstr "スキルが見つかりません"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "スキル"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14226,7 +14415,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "このアプリは npm に公開されているため、マーケットプレイスに掲載されています。"
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "このアプリケーションはマーケットプレイスに掲載されていません。直接リンクで共有されています。"
@@ -14555,6 +14744,12 @@ msgstr "ジョブ総数"
msgid "Total time"
msgstr "合計時間"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14877,6 +15072,7 @@ msgstr "ユニバーサルID"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15070,6 +15266,7 @@ msgid "Upgrade Plan"
msgstr "プランをアップグレード"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "{latestAvailableVersion} にアップグレード"
@@ -15079,12 +15276,13 @@ msgstr "{latestAvailableVersion} にアップグレード"
msgid "Upgrade to access"
msgstr "アクセスするにはアップグレードしてください"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Enterprise へアップグレードして監査ログにアクセスしてください"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "アップグレード中..."
@@ -15157,7 +15355,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "使用状況"
@@ -15171,6 +15371,11 @@ msgstr "このサーバー上のすべてのワークスペースでの利用状
msgid "Usage Analytics"
msgstr "利用分析"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15389,13 +15594,7 @@ msgstr "アプリからのコードを確認"
msgid "Verify the code from the app"
msgstr "アプリからのコードを確認"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "バージョン"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "アプリケーションのバージョン"
@@ -15434,6 +15633,11 @@ msgstr "ビュー"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15518,6 +15722,7 @@ msgstr "ログを表示"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "マーケットプレイスのページを表示"
@@ -15564,10 +15769,17 @@ msgid "View workspace activity logs"
msgstr "ワークスペースのアクティビティログを表示"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "ビュー"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15821,11 +16033,21 @@ msgstr "条件"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "このモデルが Chain-of-Thought(思考の連鎖)による推論をサポートするかどうか"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "ウィジェットタイプ"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15914,6 +16136,7 @@ msgstr "ワークフロー"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15928,6 +16151,7 @@ msgstr "ワークフロー"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16054,10 +16278,10 @@ msgstr "年"
msgid "yearly"
msgstr "年払い"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "年額サブスクリプション"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, other {귀하는 {fieldsList} 필드를 액세스할 권한이 없습니다}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} 크레딧"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} 크레딧 사용됨"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "사용자가 이 객체에서 수행할 수 있는 작업"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "이후 또는 같음"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "에이전트"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "에이전트 토큰"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "에이전트들"
msgid "Agents powering this app"
msgstr "이 앱을 구동하는 에이전트"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "AI"
msgid "AI Chat"
msgstr "AI 채팅"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "AI 요청 준비"
msgid "AI Response Schema"
msgstr "AI 응답 스키마"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "매달의 {startOrdinal}일에서 {endOrdinal}일까지"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "부울"
msgid "Both"
msgstr "두 가지 모두"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "필드를 지우거나 환경/기본값으로 되돌리기 위해 \"X\"를 누르세요."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "사용자를 클릭하여 일별 세부 내역을 확인하세요."
@@ -2986,6 +3072,8 @@ msgstr "감사 로그에는 ClickHouse가 필요합니다. 관리자에게 문
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse가 구성되지 않음"
@@ -3100,6 +3188,11 @@ msgstr "컬럼 데이터는 다중 선택과 호환되지 않습니다. 요구
msgid "Columns not matched:"
msgstr "일치하지 않는 열:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "명령 메뉴"
msgid "command menu item"
msgstr "명령 메뉴 항목"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "아래 코드를 붙여넣기"
msgid "Copy Setup Key"
msgstr "설정 키 복사"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "크레딧 사용량"
msgid "Credit usage breakdown for your workspace."
msgstr "워크스페이스의 크레딧 사용량 세부 내역."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "크레딧"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "크레딧"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "통화 코드"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "현재"
@@ -4124,6 +4221,12 @@ msgstr "청록색"
msgid "Czech"
msgstr "체코어"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "AI에 원하는 작업을 설명하세요..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "AI에 원하는 작업을 설명하세요..."
msgid "Description"
msgstr "설명"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "응용 프로그램 설명"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "유효한 이메일이어야 합니다"
msgid "Email or domain is already in blocklist"
msgstr "이메일 또는 도메인이 이미 차단 목록에 있습니다"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "API 키를 입력하세요"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "엔터프라이즈"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "추천만"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "필드"
@@ -6686,6 +6795,11 @@ msgstr "필드 이름"
msgid "Field on destination"
msgstr "대상 필드"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "{startDay}에서 {endDay}까지"
msgid "front component"
msgstr "프런트 컴포넌트"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "프런트 컴포넌트"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "전체 접근"
msgid "Function name"
msgstr "함수 이름"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "기능"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "기능"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "{impersonatedUser}으로 로그인함"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "로직 함수"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "로직 함수"
@@ -9208,10 +9318,10 @@ msgstr "연도의 달"
msgid "monthly"
msgstr "월간"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "월간 구독"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "이름은 비워 둘 수 없습니다"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "단수형 (예: 'Invoice')과 복수형 (예: 'Invoices')으로 이름을 지정하세요."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "응용 프로그램 이름"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "이전 버전으로 이동"
msgid "Navigate to previous workflow"
msgstr "이전 워크플로로 이동"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "내비게이션 메뉴 항목"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "사용 가능한 에이전트 없음"
msgid "No agents match your search"
msgstr "검색 조건에 맞는 에이전트 없음"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "자격 증명 없음"
msgid "No credit consumption recorded for this user."
msgstr "이 사용자에 대해 크레딧 사용이 기록되지 않았습니다."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "아직 크레딧 사용이 기록되지 않았습니다."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "삭제된 {objectLabelSingular}이(가) 없습니다."
msgid "No deleted records matching the filter criteria were found."
msgstr "필터 기준에 맞는 삭제된 레코드가 없습니다."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "이 함수에 대해 구성된 트리거가 없습니다."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "사용량 데이터 없음"
@@ -10154,6 +10283,11 @@ msgstr "사용 가능한 변수가 없습니다"
msgid "No variables found"
msgstr "변수를 찾을 수 없습니다."
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth 또는 API 키"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "개체"
@@ -10797,6 +10932,17 @@ msgstr "페이지 레이아웃 탭"
msgid "page layout widget"
msgstr "페이지 레이아웃 위젯"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "내가 이메일을 보낸 사람과 받은 사람."
msgid "People Ive sent emails to."
msgstr "내가 이메일을 보낸 사람."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "공급자 \"{0}\"이(가) 제거되었습니다"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "공급자"
@@ -11881,6 +12031,11 @@ msgstr "답장"
msgid "Reply to all"
msgstr "모두에게 답장"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "서식 있는 텍스트"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "역할"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "역할이 성공적으로 업데이트되었습니다."
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "역할이 성공적으로 업데이트되었습니다."
msgid "Roles"
msgstr "역할"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "폴더 검색..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "사용자 검색..."
@@ -12548,6 +12716,8 @@ msgstr "웹에서 {query} 검색 중"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "좌석 / 월"
@@ -13068,11 +13238,6 @@ msgstr "모든 설정 액세스"
msgid "Settings permissions"
msgstr "설정 권한"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "설정 탭"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "일곱 번째"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "공유"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "이 링크를 공유하여 사용자를 워크스페이스에 초대하세요"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "스킬"
@@ -13253,12 +13430,24 @@ msgstr "스킬 이름"
msgid "Skill not found"
msgstr "스킬을 찾을 수 없음"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "스킬"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14226,7 +14415,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "이 앱은 npm에 게시되어 있어 마켓플레이스에 표시됩니다"
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "이 앱은 마켓플레이스에 등재되어 있지 않습니다. 직접 링크로 공유되었습니다."
@@ -14555,6 +14744,12 @@ msgstr "총 작업"
msgid "Total time"
msgstr "총 시간"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14877,6 +15072,7 @@ msgstr "범용 ID"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15070,6 +15266,7 @@ msgid "Upgrade Plan"
msgstr "요금제 업그레이드"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "{latestAvailableVersion}로 업그레이드"
@@ -15079,12 +15276,13 @@ msgstr "{latestAvailableVersion}로 업그레이드"
msgid "Upgrade to access"
msgstr "접근하려면 업그레이드하세요."
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "감사 로그를 사용하려면 Enterprise로 업그레이드하세요."
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "업그레이드 중..."
@@ -15157,7 +15355,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "사용량"
@@ -15171,6 +15371,11 @@ msgstr "이 서버의 모든 워크스페이스에서의 사용 현황"
msgid "Usage Analytics"
msgstr "사용량 분석"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15389,13 +15594,7 @@ msgstr "앱에서 인증 코드 확인"
msgid "Verify the code from the app"
msgstr "앱에서 코드를 확인하세요"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "버전"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "응용 프로그램 버전"
@@ -15434,6 +15633,11 @@ msgstr "보기"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15518,6 +15722,7 @@ msgstr "로그 보기"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "마켓플레이스 페이지 보기"
@@ -15564,10 +15769,17 @@ msgid "View workspace activity logs"
msgstr "워크스페이스 활동 로그 보기"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "보기"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15821,11 +16033,21 @@ msgstr "조건"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "이 모델이 Chain-of-Thought 추론을 지원하는지 여부"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "위젯 유형"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15914,6 +16136,7 @@ msgstr "Workflows"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15928,6 +16151,7 @@ msgstr "Workflows"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16054,10 +16278,10 @@ msgstr "연"
msgid "yearly"
msgstr "연간"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "연간 구독"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {U heeft geen toestemming om toegang te krijgen tot het {fieldsList} veld} other {U heeft geen toestemming om toegang te krijgen tot de {fieldsList} velden}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} credits"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} gebruikte credits"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Acties die gebruikers op dit object kunnen uitvoeren"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Na of gelijk aan"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "agent"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "Agent-tokens"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Agenten"
msgid "Agents powering this app"
msgstr "Agenten die deze app mogelijk maken"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "AI"
msgid "AI Chat"
msgstr "AI-chat"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "Voorbereiding AI-verzoek"
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
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "tussen de {startOrdinal} en {endOrdinal} van de maand"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Booleaan"
msgid "Both"
msgstr "Beide"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Wis het veld of \"X\" om terug te keren naar de omgeving/standaardwaarde."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Klik op een gebruiker om het dagelijkse overzicht te bekijken."
@@ -2986,6 +3072,8 @@ msgstr "ClickHouse is vereist voor auditlogs. Neem contact op met uw beheerder."
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse niet geconfigureerd"
@@ -3100,6 +3188,11 @@ msgstr "kolomgegevens zijn niet compatibel met Multi-Select. Vereist formaat is
msgid "Columns not matched:"
msgstr "Kolommen niet overeenkomend:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Opdrachtmenu"
msgid "command menu item"
msgstr "opdrachtmenu-item"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Plak de onderstaande code"
msgid "Copy Setup Key"
msgstr "Setup sleutel kopiëren"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Kredietgebruik"
msgid "Credit usage breakdown for your workspace."
msgstr "Uitsplitsing van het kredietverbruik voor je werkruimte."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "credits"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Credits"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Valutacode"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Huidig"
@@ -4124,6 +4221,12 @@ msgstr "Cyaan"
msgid "Czech"
msgstr "Tsjechisch"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Beschrijf wat je wilt dat de AI doet..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Beschrijf wat je wilt dat de AI doet..."
msgid "Description"
msgstr "Beschrijving"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Omschrijving van de applicatie"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "E-mailadres moet geldig zijn"
msgid "Email or domain is already in blocklist"
msgstr "E-mail of domein staat al in de blokkeerlijst"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Voer je API-sleutel in"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Onderneming"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Alleen uitgelicht"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "veld"
@@ -6686,6 +6795,11 @@ msgstr "Veldnaam"
msgid "Field on destination"
msgstr "Veld bij bestemming"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "van {startDay} tot {endDay}"
msgid "front component"
msgstr "frontendcomponent"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "frontendcomponenten"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Volledige toegang"
msgid "Function name"
msgstr "Functienaam"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "functies"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Functies"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Ingelogd als {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "logische functie"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Logische functies"
@@ -9208,10 +9318,10 @@ msgstr "Maand van het jaar"
msgid "monthly"
msgstr "maandelijks"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Maandelijks abonnement"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "Naam mag niet leeg zijn"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Naam in zowel enkelvoudige (bijv. 'Factuur') als meervoudige (bijv. 'Facturen') vormen."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Naam van de applicatie"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Navigeer naar de vorige versie"
msgid "Navigate to previous workflow"
msgstr "Navigeer naar de vorige workflow"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "navigatiemenu-item"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "Geen agenten beschikbaar"
msgid "No agents match your search"
msgstr "Geen agenten voldoen aan je zoekopdracht"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Geen referenties"
msgid "No credit consumption recorded for this user."
msgstr "Geen kredietverbruik geregistreerd voor deze gebruiker."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Nog geen kredietverbruik geregistreerd."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "Geen verwijderde {objectLabelSingular} gevonden"
msgid "No deleted records matching the filter criteria were found."
msgstr "Geen verwijderde records die aan de filtercriteria voldoen, werden gevonden."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "Geen triggers geconfigureerd voor deze functie."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "Geen gebruiksgegevens"
@@ -10154,6 +10283,11 @@ msgstr "Geen variabelen beschikbaar"
msgid "No variables found"
msgstr "Geen variabelen gevonden"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth of API-sleutel"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "object"
@@ -10797,6 +10932,17 @@ msgstr "tabblad pagina-indeling"
msgid "page layout widget"
msgstr "widget pagina-indeling"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Mensen aan wie ik e-mails heb verzonden en van wie ik e-mails heb ontvan
msgid "People Ive sent emails to."
msgstr "Mensen aan wie ik e-mails heb verzonden."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "Aanbieder \"{0}\" verwijderd"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Aanbieders"
@@ -11881,6 +12031,11 @@ msgstr "Antwoord"
msgid "Reply to all"
msgstr "Allen antwoorden"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Tekst met opmaak"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "rol"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "Rol succesvol bijgewerkt"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "Rol succesvol bijgewerkt"
msgid "Roles"
msgstr "Rollen"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Zoek mappen..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Zoek naar een gebruiker..."
@@ -12548,6 +12716,8 @@ msgstr "Zoeken op het web naar {query}"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "stoel / maand"
@@ -13068,11 +13238,6 @@ msgstr "Instellingen Alle Toegang"
msgid "Settings permissions"
msgstr "Instellingen toestemmingen"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Tabblad Instellingen"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Zevende"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Delen"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Deel deze link om gebruikers uit te nodigen voor uw werkruimte"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "vaardigheid"
@@ -13253,12 +13430,24 @@ msgstr "Vaardigheidsnaam"
msgid "Skill not found"
msgstr "Vaardigheid niet gevonden"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Vaardigheden"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14228,7 +14417,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Deze app staat op de Marketplace omdat deze is gepubliceerd op npm."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Deze applicatie is niet vermeld op de Marketplace. Ze is gedeeld via een directe link."
@@ -14557,6 +14746,12 @@ msgstr "Totaal aantal taken"
msgid "Total time"
msgstr "Totale tijd"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14879,6 +15074,7 @@ msgstr "Universele ID"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15072,6 +15268,7 @@ msgid "Upgrade Plan"
msgstr "Abonnement upgraden"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Upgraden naar {latestAvailableVersion}"
@@ -15081,12 +15278,13 @@ msgstr "Upgraden naar {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "Upgrade om toegang te krijgen"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Upgrade naar Enterprise om toegang te krijgen tot auditlogs"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Upgraden..."
@@ -15159,7 +15357,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Gebruik"
@@ -15173,6 +15373,11 @@ msgstr "Gebruik in alle werkruimten op deze server"
msgid "Usage Analytics"
msgstr "Gebruiksanalyse"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15391,13 +15596,7 @@ msgstr "Verifieer code vanuit de app"
msgid "Verify the code from the app"
msgstr "Verifieer de code vanuit de app"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Versie"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Versie van de applicatie"
@@ -15436,6 +15635,11 @@ msgstr "Weergave"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15520,6 +15724,7 @@ msgstr "Logs bekijken"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Marketplace-pagina bekijken"
@@ -15566,10 +15771,17 @@ msgid "View workspace activity logs"
msgstr "Activiteitslogs van de werkruimte bekijken"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Weergaven"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15823,11 +16035,21 @@ msgstr "Waar"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Of dit model chain-of-thought ondersteunt"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Widget type"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15916,6 +16138,7 @@ msgstr "Workstrooms"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15930,6 +16153,7 @@ msgstr "Workstrooms"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16056,10 +16280,10 @@ msgstr "Jaar"
msgid "yearly"
msgstr "jaarlijks"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Jaarlijks abonnement"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {Du har ikke tillatelse til å få tilgang til feltet {fieldsList}} other {Du har ikke tillatelse til å få tilgang til feltene {fieldsList}}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} kreditter"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} brukte kreditter"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Handlinger brukere kan utføre på dette objektet"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Etter eller lik"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "agent"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "Agent-tokens"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Agenter"
msgid "Agents powering this app"
msgstr "Agenter som driver denne appen"
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "AI"
msgid "AI Chat"
msgstr "AI-chat"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "Forberedelse av AI-forespørsel"
msgid "AI Response Schema"
msgstr "AI-svarskjema"
#. js-lingui-id: tzhisR
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "mellom den {startOrdinal} og {endOrdinal} i måneden"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Boolean"
msgid "Both"
msgstr "Begge"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Tøm feltet eller \"X\" for å gå tilbake til miljøet/standardverdien."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Klikk på en bruker for å se brukerens daglige oversikt."
@@ -2986,6 +3072,8 @@ msgstr "ClickHouse er nødvendig for revisjonslogger. Kontakt administratoren di
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse er ikke konfigurert"
@@ -3100,6 +3188,11 @@ msgstr "kolonnedata er ikke kompatible med flervalg. Formatet som kreves er '[\\
msgid "Columns not matched:"
msgstr "Kolonner ikke matchet:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Kommandomeny"
msgid "command menu item"
msgstr "menyelement i kommandomenyen"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Lim inn koden nedenfor"
msgid "Copy Setup Key"
msgstr "Kopier oppsettsnøkkel"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Kredittbruk"
msgid "Credit usage breakdown for your workspace."
msgstr "Fordeling av kredittforbruk for arbeidsområdet ditt."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "kreditter"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Kreditter"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Valutakode"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Nåværende"
@@ -4124,6 +4221,12 @@ msgstr "Cyan"
msgid "Czech"
msgstr "Tsjekkisk"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Beskriv hva du vil at AI skal gjøre..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Beskriv hva du vil at AI skal gjøre..."
msgid "Description"
msgstr "Beskrivelse"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Beskrivelse av applikasjonen"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "E-post må være en gyldig e-postadresse."
msgid "Email or domain is already in blocklist"
msgstr "E-post eller domene er allerede i svartelisten"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Skriv inn API-nøkkelen din"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Enterprise"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Kun utvalgte"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "felt"
@@ -6686,6 +6795,11 @@ msgstr "Feltnavn"
msgid "Field on destination"
msgstr "Felt på destinasjon"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "fra {startDay} til {endDay}"
msgid "front component"
msgstr "frontkomponent"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "frontkomponenter"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Full tilgang"
msgid "Function name"
msgstr "Funksjonsnavn"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "funksjoner"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Funksjoner"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Pålogget som {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "logikkfunksjon"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Logikkfunksjoner"
@@ -9208,10 +9318,10 @@ msgstr "Måned i året"
msgid "monthly"
msgstr "månedlig"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Månedlig abonnement"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "Navn kan ikke være tomt"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Navn i både entall (f.eks. 'Faktura') og flertall (f.eks. 'Fakturaer') former."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Navn på applikasjonen"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Naviger til forrige versjon"
msgid "Navigate to previous workflow"
msgstr "Naviger til forrige workflow"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "navigasjonsmenyelement"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "Ingen agenter tilgjengelige"
msgid "No agents match your search"
msgstr "Ingen agenter samsvarer med ditt søk"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Ingen legitimasjon"
msgid "No credit consumption recorded for this user."
msgstr "Det er ikke registrert noe kredittforbruk for denne brukeren."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Det er ikke registrert noe kredittforbruk ennå."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "Ingen slettet {objectLabelSingular} funnet"
msgid "No deleted records matching the filter criteria were found."
msgstr "Ingen slettede oppføringer som samsvarer med filterkriteriene ble funnet."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "Ingen utløsere er konfigurert for denne funksjonen."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "Ingen bruksdata"
@@ -10154,6 +10283,11 @@ msgstr "Ingen variabler tilgjengelige"
msgid "No variables found"
msgstr "Ingen variabler funnet"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth eller API-nøkkel"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "objekt"
@@ -10797,6 +10932,17 @@ msgstr "fanen Sideoppsett"
msgid "page layout widget"
msgstr "Sideoppsett-widget"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Personer jeg har sendt e-poster til og mottatt e-poster fra."
msgid "People Ive sent emails to."
msgstr "Personer jeg har sendt e-poster til."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "Tilbyder \"{0}\" fjernet"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Tilbydere"
@@ -11881,6 +12031,11 @@ msgstr "Svar"
msgid "Reply to all"
msgstr "Svar alle"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Rik tekst"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "rolle"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "Rolle oppdatert vellykket"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "Rolle oppdatert vellykket"
msgid "Roles"
msgstr "Roller"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Søk mapper..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Søk etter en bruker..."
@@ -12548,6 +12716,8 @@ msgstr "Søker på nettet etter {query}"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "sete / måned"
@@ -13068,11 +13238,6 @@ msgstr "Innstillinger Alt tilgang"
msgid "Settings permissions"
msgstr "Innstillingsrettigheter"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Fanen Innstillinger"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Syvende"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Del"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Del denne lenken for å invitere brukere til å bli med i arbeidsområdet ditt"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "ferdighet"
@@ -13253,12 +13430,24 @@ msgstr "Ferdighetsnavn"
msgid "Skill not found"
msgstr "Ferdighet ble ikke funnet"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Ferdigheter"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14226,7 +14415,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Denne appen er oppført på markedsplassen fordi den er publisert på npm."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Denne applikasjonen er ikke oppført på markedsplassen. Den ble delt via en direkte lenke."
@@ -14555,6 +14744,12 @@ msgstr "Totalt antall jobber"
msgid "Total time"
msgstr "Total tid"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14877,6 +15072,7 @@ msgstr "Universell ID"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15070,6 +15266,7 @@ msgid "Upgrade Plan"
msgstr ""
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Oppgrader til {latestAvailableVersion}"
@@ -15079,12 +15276,13 @@ msgstr "Oppgrader til {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "Oppgrader for å få tilgang"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Oppgrader til Enterprise for å få tilgang til revisjonslogger"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Oppgraderer..."
@@ -15157,7 +15355,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Bruk"
@@ -15171,6 +15371,11 @@ msgstr "Bruk på tvers av alle arbeidsområder på denne serveren"
msgid "Usage Analytics"
msgstr "Bruksanalyse"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15389,13 +15594,7 @@ msgstr "Verifiser koden fra appen"
msgid "Verify the code from the app"
msgstr "Verifiser koden fra appen"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Versjon"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Versjon av applikasjonen"
@@ -15434,6 +15633,11 @@ msgstr "Vis"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15518,6 +15722,7 @@ msgstr "Vis logger"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Vis side på markedsplassen"
@@ -15564,10 +15769,17 @@ msgid "View workspace activity logs"
msgstr "Vis aktivitetslogger for arbeidsområdet"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Visninger"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15821,11 +16033,21 @@ msgstr "Hvor"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Om denne modellen støtter chain-of-thought-resonnering"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Widget-type"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15914,6 +16136,7 @@ msgstr "Arbeidsflyter"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15928,6 +16151,7 @@ msgstr "Arbeidsflyter"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16054,10 +16278,10 @@ msgstr "År"
msgid "yearly"
msgstr "årlig"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Årlig abonnement"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
+293 -69
View File
@@ -154,19 +154,16 @@ msgid "{0, plural, one {You do not have permission to access the {fieldsList} fi
msgstr "{0, plural, one {Nie masz uprawnienia do dostępu do pola {fieldsList}} few {Nie masz uprawnienia do dostępu do pól {fieldsList}} many {Nie masz uprawnień do dostępu do pól {fieldsList}} other {Nie masz uprawnień do dostępu do pól {fieldsList}}}"
#. js-lingui-id: dNIJYp
#. placeholder {0}: formatNumber(totalCredits)
#. placeholder {0}: formatNumber(datum.value)
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/UsagePieChart.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "{0} credits"
msgstr "{0} kredytów"
#. js-lingui-id: m8fdzW
#. placeholder {0}: formatNumber(totalCredits)
#. js-lingui-id: r4l/MK
#. placeholder {0}: formatUsageValue(totalCredits)
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "{0} credits used"
msgstr "{0} wykorzystanych kredytów"
msgid "{0} used"
msgstr ""
#. js-lingui-id: qdQhzv
#: src/modules/views/advanced-filter-chip/components/AdvancedFilterChip.tsx
@@ -770,6 +767,7 @@ msgstr "Działania, które użytkownicy mogą wykonywać na tym obiekcie"
#: src/modules/settings/security/components/SSO/SettingsSecuritySSORowDropdownMenu.tsx
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/command-menu-item/record/constants/WorkflowCommandMenuItemsConfig.tsx
msgid "Activate"
@@ -1265,6 +1263,7 @@ msgid "After or equal"
msgstr "Po lub równe"
#. js-lingui-id: fcYF58
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "agent"
msgstr "agent"
@@ -1303,7 +1302,14 @@ msgstr ""
msgid "Agent tokens"
msgstr "Tokeny agenta"
#. js-lingui-id: ftfADk
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "agents"
msgstr ""
#. js-lingui-id: 8Uv5e6
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "Agents"
@@ -1314,6 +1320,11 @@ msgstr "Agenci"
msgid "Agents powering this app"
msgstr ""
#. js-lingui-id: zaHvxQ
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Agents provided by this app"
msgstr ""
#. js-lingui-id: sPQ5qN
#: src/modules/side-panel/pages/page-layout/constants/GraphTypeInformation.ts
#: src/modules/page-layout/utils/getWidgetTitle.ts
@@ -1328,6 +1339,7 @@ msgstr ""
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/SettingsAI.tsx
@@ -1346,6 +1358,16 @@ msgstr "AI"
msgid "AI Chat"
msgstr "Czat AI"
#. js-lingui-id: E/lGXl
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI consumption across all workspaces."
msgstr ""
#. js-lingui-id: kkfXGh
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI consumption over time."
msgstr ""
#. js-lingui-id: kNfr85
#: src/pages/settings/ai/forms/components/SettingsAIAgentForm.tsx
#: src/pages/settings/ai/components/SettingsAgentSettingsTab.tsx
@@ -1368,6 +1390,61 @@ msgstr "Przygotowanie żądania AI"
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
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage"
msgstr ""
#. js-lingui-id: Ad11E9
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI usage analytics across workspaces is available with an Enterprise key."
msgstr ""
#. js-lingui-id: zkptxb
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics is available with an Enterprise key."
msgstr ""
#. js-lingui-id: U2F/HK
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: SknniY
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Model"
msgstr ""
#. js-lingui-id: ehjYr9
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by Type"
msgstr ""
#. js-lingui-id: X2afmM
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "AI Usage by User"
msgstr ""
#. js-lingui-id: jyqPfh
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "AI Usage by Workspace"
msgstr ""
#. js-lingui-id: KLyZ6L
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "AI User Usage"
msgstr ""
#. js-lingui-id: TLbVxH
#: src/modules/settings/usage/utils/getOperationTypeLabel.ts
msgid "AI Workflow"
msgstr ""
#. js-lingui-id: BAiyFV
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "AKIA..."
@@ -2398,6 +2475,8 @@ msgid "between the {startOrdinal} and {endOrdinal} of the month"
msgstr "pomiędzy {startOrdinal} a {endOrdinal} miesiąca"
#. js-lingui-id: R+w/Va
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/pages/settings/SettingsBilling.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
@@ -2460,6 +2539,12 @@ msgstr "Boolean"
msgid "Both"
msgstr "Oba"
#. js-lingui-id: 1hGdwj
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Breakdown across AI models."
msgstr ""
#. js-lingui-id: qDsMss
#: src/modules/workflow/workflow-steps/workflow-actions/ai-agent-action/components/WorkflowOutputSchemaBuilder.tsx
msgid "Brief explanation of this output field"
@@ -2945,6 +3030,7 @@ msgid "Clear the field or \"X\" to revert to environment/default value."
msgstr "Wyczyść pole lub \"X\", aby przywrócić wartość środowiska lub domyślną."
#. js-lingui-id: Gt8ndY
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Click a user to see their daily breakdown."
msgstr "Kliknij użytkownika, aby zobaczyć dzienne zestawienie."
@@ -2986,6 +3072,8 @@ msgstr "Do dzienników inspekcji wymagany jest ClickHouse. Skontaktuj się z adm
#. js-lingui-id: CTdw8/
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "ClickHouse Not Configured"
msgstr "ClickHouse nie jest skonfigurowany"
@@ -3100,6 +3188,11 @@ msgstr "dane kolumny nie są zgodne z Multi-Select. Wymagany format to '[\"opcja
msgid "Columns not matched:"
msgstr "Kolumny nie dopasowane:"
#. js-lingui-id: pOJNDA
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "command"
msgstr ""
#. js-lingui-id: cj9UFG
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Command copied to clipboard"
@@ -3120,6 +3213,11 @@ msgstr "Menu poleceń"
msgid "command menu item"
msgstr "pozycja menu poleceń"
#. js-lingui-id: 9HKBNN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "commands"
msgstr ""
#. js-lingui-id: 4XlFx/
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Commands copied to clipboard"
@@ -3552,6 +3650,11 @@ msgstr "Wklej kod poniżej"
msgid "Copy Setup Key"
msgstr "Skopiuj klucz instalacyjny"
#. js-lingui-id: RGCCrg
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Copy share link"
msgstr ""
#. js-lingui-id: Ej5euX
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
msgid "Copy this key as it will not be visible again"
@@ -3924,16 +4027,9 @@ msgstr "Wykorzystanie kredytów"
msgid "Credit usage breakdown for your workspace."
msgstr "Podział zużycia kredytów w Twojej przestrzeni roboczej."
#. js-lingui-id: UQ4Hjl
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
#: src/modules/ai/components/internal/AIChatContextUsageButton.tsx
msgid "credits"
msgstr "kredyty"
#. js-lingui-id: lDIOek
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Credits"
msgstr "Kredyty"
@@ -3999,6 +4095,7 @@ msgid "Currency Code"
msgstr "Kod waluty"
#. js-lingui-id: Hp1l6f
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/billing/components/internal/SubscriptionInfoRowContainer.tsx
msgid "Current"
msgstr "Obecny"
@@ -4124,6 +4221,12 @@ msgstr "Cyjan"
msgid "Czech"
msgstr "czeski"
#. js-lingui-id: ShUrwO
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Daily AI Usage"
msgstr ""
#. js-lingui-id: KXQkvT
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -4769,8 +4872,6 @@ msgstr "Opisz, co chcesz, aby AI zrobiło..."
#. js-lingui-id: Nu4oKW
#: src/pages/settings/data-model/SettingsObjectFieldEdit.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.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
@@ -4782,11 +4883,6 @@ msgstr "Opisz, co chcesz, aby AI zrobiło..."
msgid "Description"
msgstr "Opis"
#. js-lingui-id: CuAMy4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Description of the application"
msgstr "Opis aplikacji"
#. js-lingui-id: +ow7t4
#: src/modules/settings/roles/role-permissions/object-level-permissions/utils/objectPermissionKeyToHumanReadableText.ts
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
@@ -5373,6 +5469,11 @@ msgstr "Adres e-mail musi być prawidłowy"
msgid "Email or domain is already in blocklist"
msgstr "Email lub domena jest już na liście blokowanych"
#. js-lingui-id: jvneza
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Email support"
msgstr ""
#. js-lingui-id: +VjrH/
#: src/modules/side-panel/hooks/useOpenEmailThreadInSidePanel.ts
msgid "Email Thread"
@@ -5777,11 +5878,18 @@ msgstr "Wprowadź swój klucz API"
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminContent.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Enterprise"
msgstr "Przedsiębiorstwo"
#. js-lingui-id: rmZVdg
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
msgid "Enterprise feature"
msgstr ""
#. js-lingui-id: Kjjkt3
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Enterprise Feature"
@@ -6654,6 +6762,7 @@ msgid "Featured only"
msgstr "Tylko wyróżnione"
#. js-lingui-id: 2lOBKV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field"
msgstr "pole"
@@ -6686,6 +6795,11 @@ msgstr "Nazwa pola"
msgid "Field on destination"
msgstr "Pole na miejscu docelowym"
#. js-lingui-id: P8JCfj
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "field permission"
msgstr ""
#. js-lingui-id: RnX5oc
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "fields"
@@ -6983,11 +7097,6 @@ msgstr "od {startDay} do {endDay}"
msgid "front component"
msgstr "komponent frontowy"
#. js-lingui-id: +M+QLN
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "front components"
msgstr "komponenty frontowe"
#. js-lingui-id: IvIKDS
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
@@ -7010,13 +7119,7 @@ msgstr "Pełny dostęp"
msgid "Function name"
msgstr "Nazwa funkcji"
#. js-lingui-id: SHkEmV
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "functions"
msgstr "funkcje"
#. js-lingui-id: xANKBj
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailContentTab.tsx
msgid "Functions"
msgstr "Funkcje"
@@ -8747,12 +8850,19 @@ msgid "Logged in as {impersonatedUser}"
msgstr "Zalogowano jako {impersonatedUser}"
#. js-lingui-id: sTlKkx
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "logic function"
msgstr "funkcja logiki"
#. js-lingui-id: qqnB9E
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "logic functions"
msgstr ""
#. js-lingui-id: QTVVDd
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Logic functions"
msgstr "Funkcje logiki"
@@ -9208,10 +9318,10 @@ msgstr "Miesiąc roku"
msgid "monthly"
msgstr "miesięcznie"
#. js-lingui-id: Sew/cK
#. js-lingui-id: +8Nek/
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Monthly subscription"
msgstr "Subskrypcja miesięczna"
msgid "Monthly"
msgstr ""
#. js-lingui-id: 6jefe3
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts
@@ -9334,7 +9444,6 @@ msgstr "mySkill"
#: src/pages/settings/data-model/SettingsObjectFieldTable.tsx
#: src/pages/settings/data-model/constants/SettingsObjectTableMetadata.ts
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationGeneralTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/pages/settings/applications/components/SettingsApplicationsTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationNameDescriptionTable.tsx
#: src/pages/settings/applications/components/SettingsApplicationDataTableRow.tsx
@@ -9346,7 +9455,7 @@ msgstr "mySkill"
#: src/pages/settings/admin-panel/SettingsAdminAiProviderDetail.tsx
#: src/pages/onboarding/CreateProfile.tsx
#: src/modules/settings/workspace/components/NameField.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/security/components/SSO/SettingsSSOIdentitiesProvidersForm.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/components/SettingsRolePermissionsSettingsTableHeader.tsx
@@ -9394,11 +9503,6 @@ msgstr "Nazwa nie może być pusta"
msgid "Name in both singular (e.g., 'Invoice') and plural (e.g., 'Invoices') forms."
msgstr "Podaj nazwę w formie pojedynczej (np. 'Faktura') i mnogiej (np. 'Faktury')."
#. js-lingui-id: 9H6m8L
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Name of the application"
msgstr "Nazwa aplikacji"
#. js-lingui-id: z+6jaZ
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeysNew.tsx
#: src/pages/settings/developers/api-keys/SettingsDevelopersApiKeyDetail.tsx
@@ -9455,11 +9559,26 @@ msgstr "Przejdź do poprzedniej wersji"
msgid "Navigate to previous workflow"
msgstr "Przejdź do poprzedniego workflow"
#. js-lingui-id: Vn3jYy
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items"
msgstr ""
#. js-lingui-id: 9o7X1c
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation items added by this app"
msgstr ""
#. js-lingui-id: FpO6v4
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "navigation menu item"
msgstr "pozycja menu nawigacji"
#. js-lingui-id: jRptK+
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Navigation menu items"
msgstr ""
#. js-lingui-id: s2HXiD
#: src/modules/navigation/components/MainNavigationDrawerTabsRow.tsx
msgid "Navigation tabs"
@@ -9711,6 +9830,16 @@ msgstr "Brak dostępnych agentów"
msgid "No agents match your search"
msgstr "Żadni agenci nie pasują do twojego wyszukiwania"
#. js-lingui-id: nPalt1
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No AI consumption recorded for this user."
msgstr ""
#. js-lingui-id: 42kV9p
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "No AI usage data recorded yet."
msgstr ""
#. js-lingui-id: 9mx36q
#: src/modules/settings/roles/role-assignment/components/SettingsRoleAssignmentTable.tsx
msgid "No API keys assigned"
@@ -9789,11 +9918,6 @@ msgstr "Brak danych uwierzytelniających"
msgid "No credit consumption recorded for this user."
msgstr "Dla tego użytkownika nie zarejestrowano zużycia kredytów."
#. js-lingui-id: H7TRcV
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "No credit consumption recorded yet."
msgstr "Nie zarejestrowano jeszcze zużycia kredytów."
#. js-lingui-id: kxH3HO
#: src/modules/object-record/record-field/ui/form-types/components/FormCurrencyFieldInput.tsx
msgid "No currency"
@@ -9851,6 +9975,11 @@ msgstr "Nie znaleziono usuniętego {objectLabelSingular}"
msgid "No deleted records matching the filter criteria were found."
msgstr "Nie znaleziono usuniętych rekordów spełniających kryteria filtru."
#. js-lingui-id: RRRePs
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "No description available for this application"
msgstr ""
#. js-lingui-id: mINrlz
#: src/modules/activities/emails/components/EmailsCard.tsx
msgid "No email exchange has occurred with this record yet."
@@ -10135,7 +10264,7 @@ msgstr "Brak skonfigurowanych wyzwalaczy dla tej funkcji."
#. js-lingui-id: WwlPOG
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "No usage data"
msgstr "Brak danych o użyciu"
@@ -10154,6 +10283,11 @@ msgstr "Brak dostępnych zmiennych"
msgid "No variables found"
msgstr "Nie znaleziono zmiennych"
#. js-lingui-id: OCektF
#: src/pages/settings/applications/tabs/SettingsApplicationDetailEnvironmentVariablesTable.tsx
msgid "No variables to set for this application"
msgstr ""
#. js-lingui-id: 0uWxPM
#: src/modules/object-record/record-table/empty-state/utils/getEmptyStateTitle.ts
msgid "No workflow runs yet"
@@ -10326,6 +10460,7 @@ msgid "OAuth or API Key"
msgstr "OAuth lub klucz API"
#. js-lingui-id: pNEViR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "object"
msgstr "obiekt"
@@ -10797,6 +10932,17 @@ msgstr "karta układu strony"
msgid "page layout widget"
msgstr "widżet układu strony"
#. js-lingui-id: ckYXHz
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts"
msgstr ""
#. js-lingui-id: gUojnO
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Page layouts defined by this app"
msgstr ""
#. js-lingui-id: IVBjIH
#: src/pages/settings/security/event-logs/components/EventLogFilters.tsx
msgid "Page Name"
@@ -10904,6 +11050,11 @@ msgstr "Osoby, do których wysłałem e-maile i od których otrzymałem e-maile.
msgid "People Ive sent emails to."
msgstr "Osoby, do których wysłałem e-maile."
#. js-lingui-id: qMTN0w
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
msgid "Per-day AI consumption."
msgstr ""
#. js-lingui-id: i9iYjM
#: src/pages/settings/SettingsUsageUserDetail.tsx
msgid "Per-day credit consumption."
@@ -11369,7 +11520,6 @@ msgid "Provider \"{0}\" removed"
msgstr "Dostawca \"{0}\" został usunięty"
#. js-lingui-id: jerYcl
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Providers"
msgstr "Dostawcy"
@@ -11881,6 +12031,11 @@ msgstr "Odpowiedz"
msgid "Reply to all"
msgstr "Odpowiedz wszystkim"
#. js-lingui-id: tbmZmI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Report and issue"
msgstr ""
#. js-lingui-id: /laZGZ
#: src/modules/workflow/workflow-steps/workflow-actions/http-request-action/components/HttpRequestExecutionResult.tsx
msgid "Request Failed"
@@ -12077,6 +12232,7 @@ msgid "Rich Text"
msgstr "Tekst sformatowany"
#. js-lingui-id: E1BXUR
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "role"
msgstr "rola"
@@ -12119,8 +12275,15 @@ msgstr ""
msgid "Role updated successfully"
msgstr "Rola została zaktualizowana pomyślnie"
#. js-lingui-id: i9AFmv
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "roles"
msgstr ""
#. js-lingui-id: 5dJK4M
#: src/pages/settings/roles/SettingsRoleAddObjectLevel.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/settings/roles/role-permissions/permission-flags/hooks/useSettingsRolePermissionFlagConfig.ts
#: src/modules/settings/roles/role-permissions/object-level-permissions/object-form/components/SettingsRolePermissionsObjectLevelObjectForm.tsx
#: src/modules/settings/roles/role/components/SettingsRole.tsx
@@ -12130,6 +12293,11 @@ msgstr "Rola została zaktualizowana pomyślnie"
msgid "Roles"
msgstr "Role"
#. js-lingui-id: ys6cUp
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Roles defined by this app"
msgstr ""
#. js-lingui-id: Qz0FZ3
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Rollover Credits"
@@ -12475,7 +12643,7 @@ msgid "Search folders..."
msgstr "Szukaj folderów..."
#. js-lingui-id: uHAV+O
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
msgid "Search for a user..."
msgstr "Wyszukaj użytkownika..."
@@ -12548,6 +12716,8 @@ msgstr "Wyszukiwanie w internecie {query}"
#. js-lingui-id: 8sgZS9
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
#: src/modules/settings/billing/components/SubscriptionPrice.tsx
msgid "seat / month"
msgstr "miejsca / miesiąc"
@@ -13068,11 +13238,6 @@ msgstr "Dostęp do wszystkich ustawień"
msgid "Settings permissions"
msgstr "Ustawienia uprawnień"
#. js-lingui-id: rl/5Qa
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "Settings tab"
msgstr "Karta Ustawienia"
#. js-lingui-id: dIJGKR
#: src/modules/ai/components/suggested-prompts/default-suggested-prompts.ts
msgid "Setup a tailor-made workspace"
@@ -13105,15 +13270,26 @@ msgid "Seventh"
msgstr "Siódmy"
#. js-lingui-id: Z8lGw6
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/modules/activities/emails/components/EmailThreadBottomBar.tsx
msgid "Share"
msgstr "Udostępnij"
#. js-lingui-id: BkgQSO
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share link copied to clipboard"
msgstr ""
#. js-lingui-id: Vy9kmk
#: src/pages/settings/members/SettingsWorkspaceMembers.tsx
msgid "Share this link to invite users to join your workspace"
msgstr "Udostępnij ten link, aby zaprosić użytkowników do dołączenia do Twojej przestrzeni roboczej"
#. js-lingui-id: 69MEsn
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "Share this link with other workspaces on this server to let them install this application."
msgstr ""
#. js-lingui-id: RRXpo1
#: src/modules/settings/data-model/fields/forms/number/constants/NumberDataModelSelectOptions.ts
msgid "Short"
@@ -13221,6 +13397,7 @@ msgid "sk-..."
msgstr "sk-..."
#. js-lingui-id: vJRTzI
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/modules/metadata-error-handler/hooks/useMetadataErrorHandler.ts
msgid "skill"
msgstr "umiejętność"
@@ -13253,12 +13430,24 @@ msgstr "Nazwa umiejętności"
msgid "Skill not found"
msgstr "Nie znaleziono umiejętności"
#. js-lingui-id: gPdJ1+
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "skills"
msgstr ""
#. js-lingui-id: PCSkw2
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/pages/settings/ai/components/SettingsAgentSkills.tsx
msgid "Skills"
msgstr "Umiejętności"
#. js-lingui-id: B3q6I4
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Skills provided by this app"
msgstr ""
#. js-lingui-id: 6Uau97
#: src/pages/onboarding/InviteTeam.tsx
#: src/pages/onboarding/BookCall.tsx
@@ -14226,7 +14415,7 @@ msgid "This app is listed on the marketplace because it is published to npm."
msgstr "Ta aplikacja jest dostępna w Marketplace, ponieważ została opublikowana w npm."
#. js-lingui-id: SYslQU
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationDetailTitle.tsx
msgid "This application is not listed on the marketplace. It was shared via a direct link."
msgstr "Ta aplikacja nie jest widoczna w Marketplace. Udostępniono ją za pomocą bezpośredniego linku."
@@ -14555,6 +14744,12 @@ msgstr "Łączna liczba zadań"
msgid "Total time"
msgstr "Całkowity czas"
#. js-lingui-id: BxecEJ
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
#: src/pages/settings/ai/components/SettingsAIUsageTab.tsx
msgid "Track AI consumption across your workspace."
msgstr ""
#. js-lingui-id: YT/cKI
#: src/modules/settings/billing/components/SettingsBillingCreditsSection.tsx
msgid "Track your {intervalLabel} workflow credit consumption."
@@ -14877,6 +15072,7 @@ msgstr "Uniwersalny identyfikator"
#. js-lingui-id: Ef7StM
#: src/pages/settings/emailing-domains/utils/getEmailingDomainStatusText.ts
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminVersionContainer.tsx
msgid "Unknown"
@@ -15070,6 +15266,7 @@ msgid "Upgrade Plan"
msgstr "Zaktualizuj plan"
#. js-lingui-id: pKCx2F
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrade to {latestAvailableVersion}"
msgstr "Zaktualizuj do {latestAvailableVersion}"
@@ -15079,12 +15276,13 @@ msgstr "Zaktualizuj do {latestAvailableVersion}"
msgid "Upgrade to access"
msgstr "Uaktualnij, aby uzyskać dostęp"
#. js-lingui-id: jmVW3I
#. js-lingui-id: Wurpq2
#: src/pages/settings/security/SettingsSecurity.tsx
msgid "Upgrade to Enterprise to access audit logs"
msgstr "Przejdź na Enterprise, aby uzyskać dostęp do dzienników inspekcji"
msgid "Upgrade to Enterprise to access audit logs."
msgstr ""
#. js-lingui-id: +Gi3x1
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
#: src/pages/settings/applications/components/SettingsApplicationVersionContainer.tsx
msgid "Upgrading..."
msgstr "Aktualizowanie..."
@@ -15157,7 +15355,9 @@ msgstr "us-east-1"
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/pages/settings/SettingsUsage.tsx
#: src/modules/settings/hooks/useSettingsNavigationItems.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/settings/usage/components/UsageByUserTableSection.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
msgid "Usage"
msgstr "Użycie"
@@ -15171,6 +15371,11 @@ msgstr "Użycie we wszystkich przestrzeniach roboczych na tym serwerze"
msgid "Usage Analytics"
msgstr "Analiza użycia"
#. js-lingui-id: 7Kq6TI
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "Usage analytics requires ClickHouse. Contact your administrator."
msgstr ""
#. js-lingui-id: 7vRxpC
#: src/pages/settings/SettingsUsageUserDetail.tsx
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
@@ -15389,13 +15594,7 @@ msgstr "Zweryfikuj kod z aplikacji"
msgid "Verify the code from the app"
msgstr "Zweryfikuj kod z aplikacji"
#. js-lingui-id: eE0JZ4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
msgid "Version"
msgstr "Wersja"
#. js-lingui-id: IHIWR4
#: src/pages/settings/applications/tabs/SettingsApplicationDetailAboutTab.tsx
#: src/modules/settings/admin-panel/components/SettingsAdminGeneral.tsx
msgid "Version of the application"
msgstr "Wersja aplikacji"
@@ -15434,6 +15633,11 @@ msgstr "Widok"
msgid "View Agent"
msgstr ""
#. js-lingui-id: noHthC
#: src/modules/settings/usage/components/SettingsUsageAnalyticsSection.tsx
msgid "View AI usage breakdown"
msgstr ""
#. js-lingui-id: nK72s8
#: src/pages/settings/ai/components/SettingsAgentLogsTab.tsx
msgid "View all evaluations"
@@ -15518,6 +15722,7 @@ msgstr "Wyświetl dzienniki"
#. js-lingui-id: 7PrSCy
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
#: src/pages/settings/applications/tabs/SettingsApplicationRegistrationDistributionTab.tsx
msgid "View marketplace page"
msgstr "Wyświetl stronę w Marketplace"
@@ -15564,10 +15769,17 @@ msgid "View workspace activity logs"
msgstr "Wyświetl dzienniki aktywności przestrzeni roboczej"
#. js-lingui-id: 1I6UoR
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
#: src/modules/navigation-menu-item/edit/side-panel/components/SidePanelNewSidebarItemViewPickerSubView.tsx
msgid "Views"
msgstr "Widoki"
#. js-lingui-id: xF9sRg
#: src/pages/settings/applications/tabs/SettingsAvailableApplicationDetailContentTab.tsx
msgid "Views created by this app"
msgstr ""
#. js-lingui-id: eedtPL
#: src/modules/settings/data-model/fields/forms/select/components/SettingsDataModelFieldSelectFormOptionRow.tsx
msgid "Violet"
@@ -15821,11 +16033,21 @@ msgstr "Gdzie"
msgid "Whether this model supports chain-of-thought reasoning"
msgstr "Czy ten model obsługuje rozumowanie chain-of-thought"
#. js-lingui-id: dmoPOu
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widget"
msgstr ""
#. js-lingui-id: fANaAS
#: src/modules/side-panel/pages/page-layout/components/SidePanelPageLayoutWidgetTypeSelect.tsx
msgid "Widget type"
msgstr "Typ widgetu"
#. js-lingui-id: YR3K7M
#: src/pages/settings/applications/SettingsAvailableApplicationDetails.tsx
msgid "widgets"
msgstr ""
#. js-lingui-id: j6ncOZ
#: src/modules/workflow/workflow-steps/workflow-actions/iterator-action/components/WorkflowEditActionIterator.tsx
msgid "Will continue to the next iteration even if the current one fails"
@@ -15914,6 +16136,7 @@ msgstr "Przepływy pracy"
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentTurnDetail.tsx
#: src/pages/settings/ai/SettingsAgentForm.tsx
#: src/pages/settings/ai/SettingsAIUsageUserDetail.tsx
#: src/pages/settings/ai/SettingsAIPrompts.tsx
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/views/view-picker/components/ViewPickerListContent.tsx
@@ -15928,6 +16151,7 @@ msgstr "Przepływy pracy"
#: src/modules/settings/domains/components/SettingsCustomDomain.tsx
#: src/modules/settings/domains/components/SettingPublicDomain.tsx
#: src/modules/settings/developers/components/SettingsDevelopersWebhookForm.tsx
#: src/modules/settings/admin-panel/ai/components/SettingsAdminAI.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownVisibilityContent.tsx
#: src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx
#: src/modules/navigation-menu-item/display/sections/workspace/components/WorkspaceSection.tsx
@@ -16054,10 +16278,10 @@ msgstr "Rok"
msgid "yearly"
msgstr "rocznie"
#. js-lingui-id: Y1GwUe
#. js-lingui-id: zkWmBh
#: src/modules/settings/enterprise/components/EnterprisePlanModal.tsx
msgid "Yearly subscription"
msgstr "Subskrypcja roczna"
msgid "Yearly"
msgstr ""
#. js-lingui-id: +BGee5
#: src/modules/side-panel/pages/page-layout/utils/getDateGranularityPluralLabel.ts

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