Files
huly-platform/plugins/setting-assets/lang/cs.json
T
Don KendallandGitHub 5a3d673e84 feat(account): revocable API tokens managed from account settings (#10624)
* feat: API token management in workspace settings

Add UI and backend support for creating, listing, and revoking
API tokens scoped to workspaces. Includes owner-level workspace
token visibility, OpenAPI documentation, Mongo/Postgres persistence,
and i18n translations.

Signed-off-by: Don Kendall <kendall@donkendall.com>

* feat: enforce API token revocation at transactor level

Embed apiTokenId in JWT extra field and add a per-token revocation
cache (60s TTL) in the transactor REST handler. Revoked tokens are
now rejected within ~60 seconds instead of remaining valid until
JWT expiry.

Adds checkApiTokenRevoked account service method for the transactor
to query individual token revocation status.

Signed-off-by: Don Kendall <kendall@donkendall.com>

* feat: implement Phase 1 API token scopes (read/write/delete)

Add coarse-grained scope enforcement for API tokens. Tokens can now
be created with scopes ['read:*'], ['read:*','write:*'], or
['read:*','write:*','delete:*']. Existing tokens without scopes
retain full access (backward compatible).

- DB: v26 migration adds scopes TEXT[] column to api_tokens
- Types: add scopes field to ApiToken and ApiTokenInfo
- Operations: createApiToken accepts/validates/persists scopes,
  embeds in JWT via extra.scopes
- Enforcement: withSession checks scopes against method; tx handler
  additionally requires delete:* for TxRemoveDoc
- Client: createApiToken signature accepts optional scopes param
- UI: scope preset dropdown in create popup (default: Read Only),
  permissions column in token list with i18n labels
- Also fixes 3 pre-existing TS2322/TS2345 errors in operations.ts

Signed-off-by: Don Kendall <kendall@donkendall.com>

* test: add unit tests for API token scope enforcement

- scopes.test.ts: 8 tests for hasScope() and getRequiredScope() logic
- apiTokenScopes.test.ts: 7 tests for createApiToken scope validation
  (valid scopes, multiple scopes, no scopes backward compat, invalid
  format rejection, empty array rejection, domain-scope rejection)
  and listApiTokens scopes inclusion
- Export hasScope/getRequiredScope from rpc.ts for testability

Signed-off-by: Don Kendall <kendall@donkendall.com>

* fix: address review feedback — role restriction, locale parity, formatting

- Restrict API token creation/revocation to AccountRole.User or higher
  (guests cannot use API tokens), per reviewer suggestion
- Add 5 missing translation keys (ApiTokenPermissions, ApiTokenScopePreset,
  ApiTokenScopeReadOnly, ApiTokenScopeReadWrite, ApiTokenScopeFullAccess)
  to all non-en locale files to fix locale parity CI test
- Fix prettier formatting in apiTokenScopes.test.ts
- Rename local `extra` to `tokenExtra` in createApiToken to avoid
  shadowing the decoded token's `extra` field

Signed-off-by: Don Kendall <kendall@donkendall.com>

* fix: address aonnikov architectural review feedback

- rpc.ts: use system service token for checkApiTokenRevoked so the
  revocation check is not coupled to the user's potentially-revoked
  bearer token; systemAccountUuid + service:'server' ensures account
  service always accepts the call
- ApiDocsSection.svelte: derive transactor base URL from
  login.metadata.LoginEndpoint (set on auth) instead of
  window.location.origin, which is not necessarily the transactor host
- ApiTokenCreatePopup.svelte: replace manual translate() calls and
  themeStore language watch with DropdownLabelsIntl + DropdownIntlItem[],
  which handle i18n automatically; error state is now IntlString
- General.svelte: remove legacy GenerateApiToken button, handler, and
  ApiTokenPopup import in favour of the new ApiTokens settings panel

Signed-off-by: Don Kendall <kendall@donkendall.com>

* fix: formatting in ApiTokenPopup, apiTokenScopes test, and operations

Signed-off-by: Don Kendall <kendall@donkendall.com>

* fix: apply rushx fmt to pass CI formatting check

Signed-off-by: Don Kendall <dkendall@ledoweb.com>

* fix: restore (s as any) cast in server_http.ts removed by ESLint autofix

Signed-off-by: Don Kendall <dkendall@ledoweb.com>

* refactor(token): centralize API token revocation/expiry in verifyToken

Address @aonnikov's review: the bespoke checkApiTokenRevoked RPC and the
ad-hoc revocation cache in the transactor are replaced by a reusable
verifyToken in server-token that checks signature, expiry, and (for
revokable API tokens) revocation via a pluggable checker.

- server-token: add verifyToken + isTokenExpired + setApiTokenRevocationChecker
  (the 'method to verify' metadata the plugin needs, without depending on the
  account client). Revocation cache (60s TTL) now lives here, reusable by any
  service (transactor, blob access, etc.).
- account: the account is now authoritative — wrap() rejects revoked/expired
  API tokens, so any account method (selectWorkspace/getWorkspaceInfo/...)
  naturally 401s. Removed the redundant checkApiTokenRevoked method.
- account-client: drop checkApiTokenRevoked.
- transactor: withSession uses verifyToken; the registered checker reuses the
  existing getLoginInfoByToken instead of a dedicated boolean RPC. Scopes are
  parsed once and threaded through (no re-decode in the tx handler).
- tests: verifyToken/isTokenExpired unit coverage.

Signed-off-by: Don Kendall <dkendall@ledoweb.com>

* fix(setting): derive REST API base from account-provided transactor endpoint

Address @aonnikov: the REST API host must come from the transactor endpoint
returned by the account service (the login endpoint, a ws(s):// URL), not be
constructed from window.location. Convert ws->http and append /api/v1, matching
the existing ServerManagerGeneral pattern.

Signed-off-by: Don Kendall <dkendall@ledoweb.com>

* i18n(setting): translate API token strings across all locales

Address @ArtyomSavchenko: the new API token UI strings were left in English
in non-en locales. Provide translations for ru/de/es/fr/it/pt/pt-br/zh/ja/cs/tr.
The en/ru locale-parity test passes (the prior failure was an en/ru key
mismatch, resolved by the develop merge).

Signed-off-by: Don Kendall <dkendall@ledoweb.com>

* style: wrap long lines to satisfy prettier (account utils import, ApiDocsSection)

Signed-off-by: Don Kendall <dkendall@ledoweb.com>

* fix(api-token): drop unenforceable scopes, harden the token lifecycle

The scopes were only ever consulted in the transactor's REST handler, so
they promised a boundary the platform did not keep:

- the WebSocket transport decodes the token and never looks at scopes, so
  a read-only token could open a socket and issue any transaction;
- even on the REST path, delete:* only matched a top-level TxRemoveDoc and
  was bypassed by nesting the removal in a TxApplyIf;
- nothing stopped a scoped token from calling createApiToken and minting
  an unscoped one.

Narrowing a token's rights has to happen in the pipeline, where it covers
every transport, and that is a larger design than this feature. Until then
a token carries its account's rights and says so, rather than displaying a
restriction that does not hold. Scopes are removed end to end.

What is kept is made to work:

- API tokens can no longer create, list or revoke API tokens. Otherwise a
  leaked token renews itself and revokes the tokens meant to stop it.
- Revocation fails closed. The account is the only authority on it, so an
  unreachable account now rejects the token instead of admitting a revoked
  one to whoever can keep the account busy. Verdicts stay trusted for the
  cache TTL so brief outages do not cut off healthy tokens.
- The revocation cache is bounded and re-checks negative verdicts.
- Revoking your own token no longer requires a role in its workspace, so
  leaving a workspace cannot strand a credential you can never revoke.
- The per-account limit counts only usable tokens; revoked and expired
  ones are kept for the audit trail and used to lock out anyone rotating.
- Rejected REST tokens are logged with a reason, since expired, revoked
  and unverifiable are one opaque 401 from outside.

The unused listWorkspaceApiTokens/revokeWorkspaceApiToken pair is removed;
it had no caller and no test.

Tests cover the role restriction, the API-token guard, ownership on
revoke, the limit accounting and fail-closed revocation. Removing any of
those checks fails them.

Claude-Session: https://claude.ai/code/session_01ANdoXbdn5k2hZy734EwKe7
Signed-off-by: Don Kendall <dkendall@ledoweb.com>

* fix(setting): correct the API token settings page

- Moves the page from workspace settings to account settings. Tokens
  belong to the account: the page already lists them across every
  workspace, and creating one only needs the User role the account
  service checks, not Owner as the category required.
- Surfaces failures. A failed revoke was logged to the console and the
  row re-rendered unchanged; loading workspaces could reject unhandled
  and leave an empty dropdown with no explanation.
- Outside a secure context there is no clipboard API, so the OK button
  did nothing and the dialog had no way out but Cancel. It now closes,
  leaving the token selectable.
- Replaces hardcoded English labels, adds aria-expanded on the docs
  disclosure and labels on the copy targets.
- Fills in the Korean and Polish translations, which were the only two
  locales missing these keys, and drops the API access strings orphaned
  when this PR replaced the old Generate API token button.

Claude-Session: https://claude.ai/code/session_01ANdoXbdn5k2hZy734EwKe7
Signed-off-by: Don Kendall <dkendall@ledoweb.com>

* chore: drop docs/openapi.yaml from the API token PR

Unrelated to this feature and wrong for this repo: it documents a
/_tokens minting service and a tools/mint-token CLI that do not exist
here, uses reverse-proxy prefixes from a self-hosted deployment rather
than the transactor's /api/v1 routes, and states that revocation is a
future enhancement, which is what this PR implements. Nothing references
it. REST API docs belong in their own change, generated against the
routes that exist.

Claude-Session: https://claude.ai/code/session_01ANdoXbdn5k2hZy734EwKe7
Signed-off-by: Don Kendall <dkendall@ledoweb.com>

---------

Signed-off-by: Don Kendall <kendall@donkendall.com>
Signed-off-by: Don Kendall <dkendall@ledoweb.com>
2026-08-04 13:10:48 +07:00

287 lines
16 KiB
JSON

{
"string": {
"Setting": "Nastavení",
"Spaces": "Prostory",
"Integrations": "Integrace",
"Support": "Podpora",
"Privacy": "Soukromí",
"Terms": "Podmínky",
"AccountSettings": "Nastavení účtu",
"Categories": "Kategorie",
"Delete": "Smazat",
"ChangePassword": "Změnit heslo",
"Disconnect": "Odpojit",
"DisconnectAll": "Odpojit všechny",
"Saving": "Ukládání...",
"Saved": "Uloženo",
"Add": "Přidat",
"AddNew": "Přidat {type}",
"Value": "Hodnota",
"Signout": "Odhlásit se",
"Settings": "Nastavení",
"SelectWorkspace": "Vyberte pracovní prostor",
"InviteWorkspace": "Pozvat do pracovního prostoru",
"DeleteStatus": "Smazat stav",
"DeleteStatusConfirm": "Chcete tento stav smazat?",
"Reconnect": "Znovu připojit",
"IntegrationDisabled": " byla deaktivována",
"IntegrationDisabledSetting": "Integrace byla deaktivována",
"IntegrationDisabledDescr": "Integrace deaktivována",
"IntegrationWith": "Integrace s ",
"ClassSetting": "Nastavení třídy",
"ClassSettingHint": "Sada nebo kategorie věcí se společnou vlastností, typem nebo kvalitou.",
"ClassProperties": "Vlastnosti třídy",
"Classes": "Třídy",
"Attributes": "Atributy",
"DeleteAttribute": "Smazat atribut",
"DeleteAttributeConfirm": "Chcete tento atribut smazat?",
"DeleteAttributeExistConfirm": "Chcete tento atribut smazat? Data budou ztracena",
"DeleteMixin": "Smazat mixin",
"DeleteMixinConfirm": "Chcete tento mixin smazat?",
"DeleteMixinExistConfirm": "Chcete tento mixin smazat? Data nebudou dostupná",
"Attribute": "Atribut",
"Custom": "Vlastní",
"Type": "Typ",
"WithTime": "S časem",
"DateMode": "Režim data",
"CreatingAttribute": "Vytváření atributu",
"EditAttribute": "Upravit atribut",
"CreateEnum": "Vytvořit enum",
"EditEnum": "Upravit enum",
"Enums": "Enumy",
"EnumsSettingHint": "Sada nebo kategorie věcí se společnou vlastností, typem nebo kvalitou.",
"EnumTitle": "Název enumu",
"EnumsCount": "{count, plural, =1 {# možnost} other {# možností}}",
"ProjectTypesCount": "{count, plural, =0 {Žádné typy projektů} =1 {# typ projektu} other {# typů projektů}}",
"Options": "Možnosti",
"EnterOptionTitle": "Zadejte název možnosti",
"NewEnumDialogClose": "Chcete toto dialogové okno zavřít?",
"NewEnumDialogCloseNote": "Všechny změny budou ztraceny",
"NewValue": "Nová hodnota",
"Leave": "Opustit pracovní prostor",
"LeaveDescr": "Opravdu chcete opustit tento pracovní prostor? Tuto akci nelze vrátit zpět.",
"Members": "Členové",
"WorkspaceSettings": "Nastavení pracovního prostoru",
"Select": "Vybrat",
"AddOwner": "Přidat vlastníka",
"ReadonlyGuest": "Pouze čtení",
"Guest": "Host",
"User": "Uživatel",
"Maintainer": "Správce",
"Owner": "Vlastník",
"OwnerFirstName": "Jméno vlastníka",
"OwnerLastName": "Příjmení vlastníka",
"Role": "Role",
"FailedToSave": "Nepodařilo se aktualizovat heslo",
"ImportEnum": "Importovat hodnoty enumu",
"ImportEnumCopy": "Zkopírovat hodnoty enumu ze schránky",
"CreateMixin": "Vytvořit mixin",
"OldNames": "Staré hodnoty",
"NewClassName": "Zadejte nový název třídy nebo vyberte z předchozích hodnot...",
"ShowAttribute": "Zobrazit atribut",
"HideAttribute": "Skrýt atribut",
"Visibility": "Viditelnost",
"Hidden": "Skryté",
"Configure": "Konfigurovat",
"InviteSettings": "Nastavení pozvánek",
"RoleCapabilitySettings": "Oprávnění rolí",
"DefaultInviteRoleForJoin": "Výchozí role při připojení přes odkaz s pozvánkou:",
"InviteLinkGeneratorRoles": "Vyberte uživatelské role, které mohou vytvářet odkazy s pozvánkou:",
"DefaultValue": "Výchozí hodnota",
"SelectAValue": "Vyberte hodnotu",
"DateOnly": "Pouze datum",
"OnlyTime": "Pouze čas",
"DateAndTime": "Datum a čas",
"Configuration": "Konfigurace",
"ConfigurationEnabled": "Povoleno",
"ConfigurationDisabled": "Zakázáno",
"ConfigDisable": "Zakázat",
"ConfigEnable": "Povolit",
"ConfigBeta": "Beta verze",
"Properties": "Vlastnosti",
"TaskTypes": "Typy úkolů",
"Automations": "Automatizace",
"Collections": "Kolekce",
"ClassColon": "Třída:",
"SpaceTypes": "Typy prostor",
"NewSpaceType": "Nový typ prostoru",
"SpaceTypeTitle": "Název typu prostoru",
"General": "Obecné",
"Description": "Popis",
"CountSpaces": "{count, plural, =0 {Žádné prostory} =1 {# prostor} other {# prostorů}}",
"Roles": "Role",
"RoleName": "Název role",
"Permissions": "Oprávnění",
"Assignees": "Přiřazení",
"DeleteRole": "Smazat roli",
"DeleteRoleConfirmation": "Opravdu chcete tuto roli smazat? Všichni uživatelé s touto rolí ztratí svá oprávnění.",
"DeleteWorkspace": "Smazat pracovní prostor",
"DeleteWorkspaceConfirm": "Opravdu chcete tento pracovní prostor smazat? Vy i všichni ostatní členové ztratíte přístup k tomuto pracovnímu prostoru. Všechny informace z pracovního prostoru budou ztraceny. Tuto akci nelze vrátit zpět. Chcete pokračovat?",
"DeleteSpaceType": "Smazat typ prostoru",
"DeleteSpaceTypeConfirm": "Opravdu chcete tento typ prostoru smazat?",
"WorkspaceName": "Název pracovního prostoru",
"Workspace": "Pracovní prostor",
"OwnerOrMaintainerRequired": "Musíte být vlastníkem nebo správcem pracovního prostoru",
"LastOwnerLeaveTitle": "Nelze opustit pracovní prostor",
"LastOwnerLeaveMessage": "Jste jediným vlastníkem tohoto pracovního prostoru. Abyste jej mohli opustit, nejprve předejte oprávnění vlastníka jinému členovi. Pokud tento pracovní prostor už nikdo nepotřebuje, zvažte jeho smazání.",
"Backup": "Záloha",
"BackupLast": "Poslední záloha",
"BackupTotalSnapshots": "Celkový počet snímků",
"BackupTotalFiles": "Soubory",
"BackupSize": "Velikost zálohy",
"BackupLinkInfo": "URL adresář zálohy, který lze stáhnout rekurzivně pomocí nástrojů jako wget nebo curl.",
"BackupBearerTokenInfo": "Přístup k záloze vyžaduje bearer token.",
"BackupSnapshots": "Snímky záloh",
"BackupFileDownload": "Stáhnout soubor",
"BackupFiles": "Soubory záloh",
"BackupNoBackup": "V současné době nejsou k dispozici žádné zálohy.",
"BackupDownloadAll": "Stáhnout úplnou zálohu",
"BackupPreparingDownload": "Příprava zálohy…",
"BackupDownloadAllInfo": "Stáhněte všechny soubory zálohy jako jeden archiv .zip, který si můžete uložit do počítače.",
"BackupCopyScript": "Kopírovat skript pro stažení",
"BackupCopyToken": "Kopírovat token",
"BackupScriptInfo": "Shellový skript, který stáhne všechny soubory zálohy pomocí curl. Uložte jej a spusťte v terminálu; vyžádá si váš token zálohy, takže ve skriptu nejsou uložena žádná tajemství.",
"BackupRestoreGuide": "Průvodce zálohováním a obnovou",
"BackupRestoreGuideInfo": "Podrobný návod, jak stáhnout tuto zálohu a obnovit ji v jiné instanci Huly.",
"NonBackupedBlobs": "Non Backed up blobs",
"Calendar": "Kalendář",
"StartOfTheWeek": "Začátek týdne",
"SystemSetupString": "Nastavení systému ({day})",
"DefaultString": "Výchozí ({day})",
"AddAttribute": "Přidat atribut",
"Proceed": "Pokračovat",
"NewEmail": "Nový email",
"SendConfirmation": "Odeslat potvrzovací kód",
"CodeSent": "Kód byl odeslán. Zadejte jej prosím do pole níže.",
"SendAgain": "Odeslat znovu",
"SendAgainIn": "Odeslat znovu lze za",
"WorkspaceNamePattern": "Název musí být 40 znaků nebo méně, není prázdný a nesmí obsahovat speciální znaky (<, >, /)",
"Mailboxes": "Poštovní schránky",
"CreateMailbox": "Vytvořit poštovní schránku",
"CreateMailboxPlaceholder": "my-cool-name",
"MailboxNoDomains": "E-mailové domény nejsou nakonfigurovány",
"MailboxLimitReached": "Dosažen limit poštovních schránek",
"MailboxErrorInvalidName": "Název poštovní schránky je neplatný",
"MailboxErrorDomainNotFound": "Doména nenalezena",
"MailboxErrorNameRulesViolated": "Název schránky musí mít délku {minLen} až {maxLen} znaků",
"MailboxErrorMailboxExists": "Tento název poštovní schránky je již obsazen",
"MailboxErrorMailboxCountLimit": "Dosažen limit počtu poštovních schránek pro váš účet",
"DeleteMailbox": "Smazat poštovní schránku",
"MailboxDeleteConfirmation": "Opravdu chcete smazat tuto poštovní schránku?",
"DisablePermissions": "Zakázat řízení přístupu na základě rolí",
"EnablePermissions": "Povolit řízení přístupu na základě rolí",
"DisablePermissionsConfirmation": "Opravdu chcete zakázat řízení přístupu na základě rolí? Všechny role a oprávnění budou deaktivovány.",
"EnablePermissionsConfirmation": "Opravdu chcete povolit řízení přístupu na základě rolí? Všechny role a oprávnění budou aktivovány.",
"BetaWarning": "Moduly označené jako beta jsou k dispozici pro experimentální účely a nemusí být plně funkční. V tuto chvíli nedoporučujeme spoléhat se na funkce beta pro kritickou práci.",
"IntegrationFailed": "Nepodařilo se vytvořit integraci",
"IntegrationError": "Zkuste to prosím znovu nebo kontaktujte podporu, pokud problém přetrvává",
"EmailIsUsed": "E-mailová adresa je již použita jiným účtem",
"Customize": "Přizpůsobit",
"GuestAccess": "Anonymní hosté",
"GuestAccessDescription": "Umožňuje anonymním uživatelům prohlížet pracovní prostor v režimu pouze pro čtení",
"GuestSignUpDescription": "Umožňuje anonymním uživatelům připojit se k vašemu pracovnímu prostoru jako hosté s omezenými editačními právy",
"GuestChannelsDescription": "Kanály, kde hosté mohou psát zprávy po připojení",
"GuestChannelsArrayLabel": "Vybrat kanály",
"GuestSelectSpaces": "Vybrat prostory",
"GuestAutoJoinAvailableSpaces": "Automatické připojení k prostorům",
"GuestAutoJoinAvailableSpacesHint": "Každá karta aplikace má vlastní řádek „Automatické připojení k prostorům“: vyberte, kam se hosté při aktivaci přidají. Změny se projeví okamžitě.",
"GuestAnonymousVisibleSpaces": "Prostory viditelné anonymně",
"GuestAnonymousVisibleSpacesHint": "Každá karta aplikace má vlastní řádek: vyberte prostory, do kterých se přidá anonymní účet pouze pro čtení mezi členy, aby je návštěvníci bez účtu mohli otevřít. Změny se projeví okamžitě.",
"ManageIdentities": "Spravovat identity",
"Release": "Uvolnění",
"ReleaseSocialId": "Uvolnit sociální ID",
"ReleaseSocialIdConfirm": "Opravdu chcete uvolnit toto sociální ID: {socialId}? Tím ho odeberete ze svého účtu a nebudete ho již moci používat k přihlášení. Také budou odstraněny všechny související integrace.",
"ReleasePrimarySocialId": "Uvolnit primární sociální ID",
"ReleasePrimarySocialIdConfirm": "Uvolnění vašeho současného primárního sociálního ID bude vyžadovat obnovení stránky. Opravdu chcete pokračovat?",
"MyIntegrations": "Moje integrace",
"AllIntegrations": "Všechny",
"ConnectedIntegrations": "Připojené",
"AvailableIntegrations": "Dostupné",
"Connect": "Připojit",
"Integrate": "Integrace",
"FailedToLoadIntegrations": "Nepodařilo se načíst integrace",
"FailedToDisconnect": "Nepodařilo se odpojit integraci",
"ServiceIsUnavailable": "Služba není k dispozici",
"Integrated": "Integrované",
"Connected": "Připojené",
"Disconnected": "Odpojené",
"Available": "Dostupné",
"NotConnectedIntegration": "Účet {account} není integrován s pracovním prostorem",
"IntegrationIsUnstable": "Integrační služba má problémy. Některé funkce nemusí fungovat správně.",
"MinValue": "Minimální hodnota",
"Restricted": "Omezeno",
"RestrictedAttributeWarning": "Opravdu chcete omezit změnu tohoto atributu? Tato akce vytvoří oprávnění pro tento atribut a nelze ji vrátit zpět.",
"MaxValue": "Maximální hodnota",
"IntegerOnly": "Pouze celá čísla",
"AccessControl": "Řízení přístupu",
"DangerZone": "Nebezpečná zóna",
"IdentifierExists": "Identifikátor již existuje",
"PasswordAgingRule": "Pravidlo stárnutí hesla",
"PasswordAgingRuleDescription": "Počet dní, po kterých budou uživatelé muset změnit své heslo.",
"OfficeSettings": "Nastavení kanceláře",
"OfficeDefaultSettings": "Výchozí nastavení pro jednací místnosti",
"DefaultStartWithTranscription": "Povolit přepis v nových kancelářích",
"DefaultStartWithRecording": "Povolit záznam v nových kancelářích",
"GuestPermissionsSettings": "Hosté",
"GuestPermissionsApplicationPermissions": "Oprávnění aplikací",
"GuestPermissionsApplicationPermissionsHint": "Vyberte, které aplikace mohou hosté používat, a níže upravte oprávnění pro jednotlivé aplikace.",
"GuestPermissionsTabGuest": "Host",
"GuestPermissionsTabAnonymousGuest": "Anonymní host",
"GuestPermissionsAnonymousApplicationHint": "Přístup k aplikacím pro anonymní (pouze pro čtení) hosty. Které aplikace uvidí, může záviset i na konfiguraci nasazení.",
"ImportDocumentPermission": "Importovat dokumenty",
"ImportDocumentDescription": "Umožňuje uživatelům importovat dokumenty do pracovního prostoru",
"SelectUsers": "Vybrat uživatele",
"ShowInTitle": "Zobrazit v názvu",
"SpaceMembersOnly": "Pouze členové prostoru",
"Reset": "Resetovat",
"Security": "Zabezpečení",
"TwoFactorAuth": "Dvoufaktorové ověřování",
"TwoFactorAuthDescription": "Dvoufaktorové ověřování přidává další vrstvu zabezpečení k vašemu účtu",
"EnableTwoFactorAuth": "Povolit dvoufaktorové ověřování",
"DisableTwoFactorAuth": "Zakázat dvoufaktorové ověřování",
"TwoFactorAuthEnabled": "Dvoufaktorové ověřování je povoleno",
"TwoFactorAuthDisabled": "Dvoufaktorové ověřování je zakázáno",
"ShowQRCode": "Zobrazit QR kód",
"EnterVerificationCode": "Zadejte ověřovací kód",
"OverrideAttribute": "Přepsat atribut",
"Required": "Požadované",
"ApiBaseUrl": "Základní URL",
"ApiEndpointAccount": "Získat informace o účtu",
"ApiEndpointFindAll": "Dotaz na dokumenty podle třídy",
"ApiEndpointFindAllPost": "Dotaz s filtry (tělo JSON)",
"ApiEndpointLoadModel": "Načíst datový model",
"ApiEndpointPing": "Kontrola stavu",
"ApiEndpointTx": "Vytvoření nebo aktualizace dokumentů",
"ApiTokenCopyWarning": "Zkopírujte si tento token nyní. Později jej už neuvidíte.",
"ApiTokenCreated": "Token vytvořen",
"ApiTokenExpiry": "Platnost",
"ApiTokenName": "Název tokenu",
"ApiTokenNoTokens": "Zatím žádné API tokeny",
"ApiTokenRevoke": "Odvolat token",
"ApiTokenRevokeConfirm": "Opravdu chcete tento token odvolat? Už jej nebude možné použít pro přístup k API.",
"ApiTokenWorkspace": "Pracovní prostor",
"ApiTokens": "API tokeny",
"ApiUsageDescription": "Použijte svůj API token s vestavěným REST API k dotazování a úpravě dat pracovního prostoru. Token předejte jako Bearer token v hlavičce Authorization.",
"ApiUsageTitle": "Použití REST API",
"ApiWorkspaceId": "ID vašeho pracovního prostoru (UUID) je součástí tokenu. Předejte jej jako :workspaceId v URL.",
"CreateApiToken": "Vytvořit token",
"Created": "Vytvořeno",
"Expires": "Vyprší",
"Login": "Login",
"Primary": "Primary",
"TokenStatus": "Stav",
"ApiTokenStatusActive": "Aktivní",
"ApiTokenStatusExpiring": "Vyprší",
"ApiTokenStatusRevoked": "Odvolán",
"ApiTokenStatusExpired": "Vypršel",
"ApiTokenExpiry7Days": "7 dní",
"ApiTokenExpiry30Days": "30 dní",
"ApiTokenExpiry90Days": "90 dní",
"ApiTokenExpiry180Days": "180 dní",
"ApiTokenExpiry365Days": "365 dní",
"ApiTokenLoadError": "Nepodařilo se načíst API tokeny",
"ApiTokenCreateError": "Nepodařilo se vytvořit token. Zkuste to prosím znovu.",
"ApiTokenRevokeError": "Odvolání tokenu se nezdařilo. Zkuste to prosím znovu."
}
}