mirror of
https://github.com/hcengineering/platform.git
synced 2026-08-20 03:15:41 +02:00
* 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>
287 lines
19 KiB
JSON
287 lines
19 KiB
JSON
{
|
|
"string": {
|
|
"Setting": "設定",
|
|
"Spaces": "スペース",
|
|
"Integrations": "連携",
|
|
"Support": "サポート",
|
|
"Privacy": "プライバシー",
|
|
"Terms": "利用規約",
|
|
"AccountSettings": "アカウント設定",
|
|
"Categories": "カテゴリ",
|
|
"Delete": "削除",
|
|
"ChangePassword": "パスワードを変更",
|
|
"Disconnect": "切断",
|
|
"DisconnectAll": "すべて切断",
|
|
"Saving": "保存中...",
|
|
"Saved": "保存済み",
|
|
"Add": "追加",
|
|
"AddNew": "追加 {type}",
|
|
"Proceed": "続行",
|
|
"NewEmail": "新しいメール",
|
|
"SendConfirmation": "確認コードを送信",
|
|
"CodeSent": "コードが送信されました。下のフィールドに入力してください。",
|
|
"SendAgain": "再送信",
|
|
"SendAgainIn": "後に再送信できる",
|
|
"Value": "値",
|
|
"Signout": "サインアウト",
|
|
"Settings": "設定",
|
|
"SelectWorkspace": "ワークスペースを選択",
|
|
"InviteWorkspace": "ワークスペースに招待",
|
|
"DeleteStatus": "ステータスを削除",
|
|
"DeleteStatusConfirm": "このステータスを削除しますか?",
|
|
"Reconnect": "再接続",
|
|
"IntegrationDisabled": " は無効になっています",
|
|
"IntegrationDisabledSetting": "連携は無効になっています",
|
|
"IntegrationDisabledDescr": "連携が無効",
|
|
"IntegrationWith": "連携",
|
|
"ClassSetting": "クラス設定",
|
|
"ClassSettingHint": "種類、タイプ、または品質によって、他のものと共通のプロパティまたは属性を持つもののセットまたはカテゴリ。",
|
|
"ClassProperties": "クラスプロパティ",
|
|
"Classes": "クラス",
|
|
"Attributes": "属性",
|
|
"DeleteAttribute": "属性を削除",
|
|
"DeleteAttributeConfirm": "この属性を削除しますか?",
|
|
"DeleteAttributeExistConfirm": "この属性を削除しますか?データは失われます",
|
|
"DeleteMixin": "Mixinを削除",
|
|
"DeleteMixinConfirm": "このMixinを削除しますか?",
|
|
"DeleteMixinExistConfirm": "このMixinを削除しますか?データは利用できなくなります",
|
|
"Attribute": "属性",
|
|
"Custom": "カスタム",
|
|
"Type": "タイプ",
|
|
"WithTime": "時刻を含む",
|
|
"DateMode": "日付モード",
|
|
"CreatingAttribute": "属性を作成中",
|
|
"EditAttribute": "属性を編集",
|
|
"CreateEnum": "列挙型を作成",
|
|
"EditEnum": "列挙型を編集",
|
|
"Enums": "列挙型",
|
|
"EnumsSettingHint": "種類、タイプ、または品質によって、他のものと共通のプロパティまたは属性を持つもののセットまたはカテゴリ。",
|
|
"EnumTitle": "列挙型のタイトル",
|
|
"EnumsCount": "{count, plural, =1 {# オプション} other {# オプション}}",
|
|
"ProjectTypesCount": "{count, plural, =0 {プロジェクトタイプなし} =1 {# プロジェクトタイプ} other {# プロジェクトタイプ}}",
|
|
"Options": "オプション",
|
|
"EnterOptionTitle": "オプションのタイトルを入力",
|
|
"NewEnumDialogClose": "このダイアログを閉じますか?",
|
|
"NewEnumDialogCloseNote": "すべての変更は失われます",
|
|
"NewValue": "新しい値",
|
|
"Leave": "ワークスペースを退出",
|
|
"LeaveDescr": "本当にワークスペースを退出しますか?この操作は元に戻せません。",
|
|
"Members": "メンバー",
|
|
"WorkspaceSettings": "ワークスペース設定",
|
|
"Select": "選択",
|
|
"AddOwner": "所有者を追加",
|
|
"ReadonlyGuest": "読み取り専用",
|
|
"Guest": "ゲスト",
|
|
"User": "ユーザー",
|
|
"Maintainer": "メンテナー",
|
|
"Owner": "所有者",
|
|
"OwnerFirstName": "所有者の名",
|
|
"OwnerLastName": "所有者の姓",
|
|
"Role": "役割",
|
|
"FailedToSave": "パスワードの更新に失敗しました",
|
|
"ImportEnum": "列挙型の値をインポート",
|
|
"ImportEnumCopy": "クリップボードから列挙型の値をコピー",
|
|
"CreateMixin": "Mixinを作成",
|
|
"OldNames": "古い値",
|
|
"NewClassName": "新しいクラス名を入力するか、以前の値から選択...",
|
|
"ShowAttribute": "属性を表示",
|
|
"HideAttribute": "属性を非表示",
|
|
"Visibility": "表示設定",
|
|
"Hidden": "非表示",
|
|
"Configure": "構成",
|
|
"InviteSettings": "招待設定",
|
|
"RoleCapabilitySettings": "ロール権限",
|
|
"DefaultInviteRoleForJoin": "招待リンクから参加した後に割り当てる既定のロール:",
|
|
"InviteLinkGeneratorRoles": "招待リンクを生成できるユーザーロールを選択:",
|
|
"DefaultValue": "既定値",
|
|
"SelectAValue": "値を選択",
|
|
"DateOnly": "日付のみ",
|
|
"OnlyTime": "時刻のみ",
|
|
"DateAndTime": "日付と時刻",
|
|
"Configuration": "構成",
|
|
"ConfigurationEnabled": "有効",
|
|
"ConfigurationDisabled": "無効",
|
|
"ConfigDisable": "無効にする",
|
|
"ConfigEnable": "有効にする",
|
|
"ConfigBeta": "ベータ版",
|
|
"Properties": "プロパティ",
|
|
"TaskTypes": "タスクタイプ",
|
|
"Automations": "自動化",
|
|
"Collections": "コレクション",
|
|
"ClassColon": "クラス:",
|
|
"SpaceTypes": "スペースタイプ",
|
|
"NewSpaceType": "新しいスペースタイプ",
|
|
"SpaceTypeTitle": "スペースタイプのタイトル",
|
|
"General": "一般",
|
|
"Description": "説明",
|
|
"CountSpaces": "{count, plural, =0 {スペースなし} =1 {# スペース} other {# スペース}}",
|
|
"Roles": "役割",
|
|
"RoleName": "役割名",
|
|
"Permissions": "権限",
|
|
"Assignees": "担当者",
|
|
"DeleteRole": "役割を削除",
|
|
"DeleteRoleConfirmation": "本当にこの役割を削除しますか?この役割を持つすべてのユーザーは権限を失います。",
|
|
"DeleteWorkspace": "ワークスペースを削除",
|
|
"DeleteWorkspaceConfirm": "本当にこのワークスペースを削除しますか?あなたと他のすべてのメンバーはこのワークスペースへのアクセスを失います。ワークスペースからのすべての情報が失われます。この操作は元に戻せません。続行しますか?",
|
|
"DeleteSpaceType": "スペースタイプを削除",
|
|
"DeleteSpaceTypeConfirm": "本当にこのスペースタイプを削除しますか?",
|
|
"WorkspaceName": "ワークスペース名",
|
|
"Workspace": "ワークスペース",
|
|
"OwnerOrMaintainerRequired": "ワークスペースの所有者またはメンテナーである必要があります",
|
|
"LastOwnerLeaveTitle": "ワークスペースから退出できません",
|
|
"LastOwnerLeaveMessage": "あなたはこのワークスペースの唯一の所有者です。退出するには、先に別のメンバーに所有者権限を付与してください。このワークスペースが誰にも必要ない場合は、削除することも検討してください。",
|
|
"Backup": "バックアップ",
|
|
"BackupLast": "最後のバックアップ",
|
|
"BackupTotalSnapshots": "合計スナップショット",
|
|
"BackupTotalFiles": "ファイル",
|
|
"BackupSize": "バックアップサイズ",
|
|
"BackupLinkInfo": "wgetやcurlなどのツールを使用して再帰的にダウンロードできるバックアップディレクトリのURL。",
|
|
"BackupBearerTokenInfo": "バックアップにアクセスするには、ベアラートークンが必要です。",
|
|
"BackupSnapshots": "バックアップスナップショット",
|
|
"BackupFileDownload": "ファイルをダウンロード",
|
|
"BackupFiles": "バックアップファイル",
|
|
"BackupNoBackup": "現在、利用可能なバックアップはありません。",
|
|
"BackupDownloadAll": "完全バックアップをダウンロード",
|
|
"BackupPreparingDownload": "バックアップを準備中…",
|
|
"BackupDownloadAllInfo": "すべてのバックアップファイルを 1 つの .zip アーカイブとしてダウンロードし、コンピューターに保存できます。",
|
|
"BackupCopyScript": "ダウンロードスクリプトをコピー",
|
|
"BackupCopyToken": "トークンをコピー",
|
|
"BackupScriptInfo": "curl ですべてのバックアップファイルをダウンロードするシェルスクリプトです。保存してターミナルで実行してください。バックアップトークンの入力を求められるため、スクリプトに機密情報は保存されません。",
|
|
"BackupRestoreGuide": "バックアップと復元ガイド",
|
|
"BackupRestoreGuideInfo": "このバックアップをダウンロードし、別の Huly インスタンスに復元するための手順です。",
|
|
"NonBackupedBlobs": "バックアップされていないブロブ",
|
|
"Calendar": "カレンダー",
|
|
"StartOfTheWeek": "週の開始",
|
|
"SystemSetupString": "システム設定 ({day})",
|
|
"DefaultString": "既定 ({day})",
|
|
"AddAttribute": "属性を追加",
|
|
"WorkspaceNamePattern": "名前は40文字以内で、空にすることはできず、特殊文字(<, >, /)を含めることはできません",
|
|
"Mailboxes": "メールボックス",
|
|
"CreateMailbox": "メールボックスを作成",
|
|
"CreateMailboxPlaceholder": "かっこいい名前",
|
|
"MailboxNoDomains": "メールドメインが構成されていません",
|
|
"MailboxLimitReached": "メールボックスの制限に達しました",
|
|
"MailboxErrorInvalidName": "メールボックス名が無効です",
|
|
"MailboxErrorDomainNotFound": "ドメインが見つかりません",
|
|
"MailboxErrorNameRulesViolated": "メールボックス名は{minLen}〜{maxLen}文字にする必要があります",
|
|
"MailboxErrorMailboxExists": "このメールボックス名はすでに使用されています",
|
|
"MailboxErrorMailboxCountLimit": "アカウントのメールボックス数の上限に達しました",
|
|
"DeleteMailbox": "メールボックスを削除",
|
|
"MailboxDeleteConfirmation": "本当にこのメールボックスを削除しますか?",
|
|
"DisablePermissions": "ロールベースのアクセス制御を無効にする",
|
|
"EnablePermissions": "ロールベースのアクセス制御を有効にする",
|
|
"DisablePermissionsConfirmation": "本当にロールベースのアクセス制御を無効にしますか?すべての役割と権限が無効になります。",
|
|
"EnablePermissionsConfirmation": "本当にロールベースのアクセス制御を有効にしますか?すべての役割と権限が有効になります。",
|
|
"BetaWarning": "ベータ版としてラベル付けされたモジュールは、実験的な目的で利用可能であり、完全に機能しない場合があります。現時点では、重要な作業にベータ版機能を依存することはお勧めしません。",
|
|
"IntegrationFailed": "統合に失敗しました",
|
|
"IntegrationError": "問題が解決しない場合は、もう一度お試しいただくか、サポートにお問い合わせください",
|
|
"EmailIsUsed": "メールアドレスは他のアカウントで使用されています",
|
|
"Customize": "カスタマイズ",
|
|
"GuestAccess": "匿名ゲスト",
|
|
"GuestAccessDescription": "匿名ユーザーがワークスペースを読み取り専用モードで閲覧できます",
|
|
"GuestSignUpDescription": "匿名ユーザーがゲストとしてワークスペースに参加し、制限された編集権限を得られるようにします",
|
|
"GuestChannelsDescription": "参加後、ゲストがメッセージを書き込めるチャンネル",
|
|
"GuestChannelsArrayLabel": "チャンネルを選択",
|
|
"GuestSelectSpaces": "スペースを選択",
|
|
"GuestAutoJoinAvailableSpaces": "自動参加するスペース",
|
|
"GuestAutoJoinAvailableSpacesHint": "各アプリのカードに「自動参加するスペース」の行があります。ゲストが有効化したときに追加される場所を選びます。変更はすぐに反映されます。",
|
|
"GuestAnonymousVisibleSpaces": "匿名ユーザーに見えるスペース",
|
|
"GuestAnonymousVisibleSpacesHint": "各アプリのカードに専用の行があります。読み取り専用の匿名アカウントをメンバーとして追加するスペースを選ぶと、アカウントを持たない訪問者がそのスペースを開けます。変更はすぐに反映されます。",
|
|
"ManageIdentities": "IDを管理",
|
|
"Release": "リリース",
|
|
"ReleaseSocialId": "ソーシャルIDをリリース",
|
|
"ReleaseSocialIdConfirm": "本当にこのソーシャルID: {socialId} をリリースしますか?これによりアカウントから削除され、ログインに使用できなくなります。また、関連するすべての統合も削除されます。",
|
|
"ReleasePrimarySocialId": "プライマリソーシャルIDをリリース",
|
|
"ReleasePrimarySocialIdConfirm": "現在のプライマリソーシャルIDをリリースするには、ページの再読み込みが必要です。続行してもよろしいですか?",
|
|
"Login": "ログイン",
|
|
"Primary": "プライマリ",
|
|
"MyIntegrations": "マイインテグレーション",
|
|
"AllIntegrations": "すべてのインテグレーション",
|
|
"ConnectedIntegrations": "接続されたインテグレーション",
|
|
"AvailableIntegrations": "利用可能なインテグレーション",
|
|
"Connect": "接続",
|
|
"Integrate": "統合",
|
|
"FailedToLoadIntegrations": "インテグレーションの読み込みに失敗しました",
|
|
"FailedToDisconnect": "インテグレーションの切断に失敗しました",
|
|
"ServiceIsUnavailable": "サービスは利用できません",
|
|
"Integrated": "統合済み",
|
|
"Connected": "接続済み",
|
|
"Disconnected": "切断済み",
|
|
"Available": "利用可能",
|
|
"NotConnectedIntegration": "アカウント {account} はワークスペースに統合されていません",
|
|
"IntegrationIsUnstable": "統合サービスに問題が発生しています。一部の機能が正しく動作しない可能性があります。",
|
|
"MinValue": "最小値",
|
|
"Restricted": "制限済み",
|
|
"RestrictedAttributeWarning": "この属性の変更を制限してもよろしいですか?この操作はこの属性の権限を作成し、元に戻すことはできません。",
|
|
"MaxValue": "最大値",
|
|
"IntegerOnly": "整数のみ",
|
|
"AccessControl": "アクセス制御",
|
|
"DangerZone": "危険ゾーン",
|
|
"IdentifierExists": "識別子は既に存在します",
|
|
"PasswordAgingRule": "パスワードエイジングルール",
|
|
"PasswordAgingRuleDescription": "ユーザーがパスワードを変更する必要がある日数",
|
|
"OfficeSettings": "オフィス設定",
|
|
"OfficeDefaultSettings": "会議室のデフォルト設定",
|
|
"DefaultStartWithTranscription": "新しいオフィスルームで文字起こしを有効にする",
|
|
"DefaultStartWithRecording": "新しいオフィスルームで録画を有効にする",
|
|
"GuestPermissionsSettings": "ゲスト",
|
|
"GuestPermissionsApplicationPermissions": "アプリケーションの権限",
|
|
"GuestPermissionsApplicationPermissionsHint": "ゲストが利用できるアプリケーションを選び、その下で各アプリケーションの権限を調整します。",
|
|
"GuestPermissionsTabGuest": "ゲスト",
|
|
"GuestPermissionsTabAnonymousGuest": "匿名ゲスト",
|
|
"GuestPermissionsAnonymousApplicationHint": "匿名(読み取り専用)ゲストのアプリケーションアクセス。表示されるアプリケーションはデプロイ設定にも依存する場合があります。",
|
|
"ImportDocumentPermission": "ドキュメントをインポート",
|
|
"ImportDocumentDescription": "ユーザーにワークスペースにドキュメントをインポートする機能を付与します",
|
|
"SelectUsers": "ユーザーを選択",
|
|
"ShowInTitle": "タイトルに表示",
|
|
"SpaceMembersOnly": "スペースメンバーのみ",
|
|
"Reset": "リセット",
|
|
"Security": "セキュリティ",
|
|
"TwoFactorAuth": "二要素認証",
|
|
"TwoFactorAuthDescription": "二要素認証はアカウントにセキュリティの追加レイヤーを追加します",
|
|
"EnableTwoFactorAuth": "二要素認証を有効にする",
|
|
"DisableTwoFactorAuth": "二要素認証を無効にする",
|
|
"TwoFactorAuthEnabled": "二要素認証は有効です",
|
|
"TwoFactorAuthDisabled": "二要素認証は無効です",
|
|
"ShowQRCode": "QRコードを表示",
|
|
"EnterVerificationCode": "確認コードを入力",
|
|
"OverrideAttribute": "属性を上書き",
|
|
"Required": "必須",
|
|
"ApiBaseUrl": "ベース URL",
|
|
"ApiEndpointAccount": "アカウント情報を取得",
|
|
"ApiEndpointFindAll": "クラスでドキュメントを照会",
|
|
"ApiEndpointFindAllPost": "フィルター付きで照会(JSON ボディ)",
|
|
"ApiEndpointLoadModel": "データモデルを読み込む",
|
|
"ApiEndpointPing": "ヘルスチェック",
|
|
"ApiEndpointTx": "ドキュメントの作成または更新",
|
|
"ApiTokenCopyWarning": "今すぐこのトークンをコピーしてください。再度表示することはできません。",
|
|
"ApiTokenCreated": "トークンを作成しました",
|
|
"ApiTokenExpiry": "有効期限",
|
|
"ApiTokenName": "トークン名",
|
|
"ApiTokenNoTokens": "API トークンはまだありません",
|
|
"ApiTokenRevoke": "トークンを取り消す",
|
|
"ApiTokenRevokeConfirm": "このトークンを取り消してもよろしいですか?取り消すと API アクセスに使用できなくなります。",
|
|
"ApiTokenWorkspace": "ワークスペース",
|
|
"ApiTokens": "API トークン",
|
|
"ApiUsageDescription": "組み込みの REST API で API トークンを使用して、ワークスペースのデータを照会・変更できます。トークンは Authorization ヘッダーに Bearer トークンとして渡してください。",
|
|
"ApiUsageTitle": "REST API の使用",
|
|
"ApiWorkspaceId": "ワークスペース ID(UUID)はトークンに含まれています。URL では :workspaceId として渡してください。",
|
|
"CreateApiToken": "トークンを作成",
|
|
"Created": "作成日",
|
|
"Expires": "有効期限",
|
|
"TokenStatus": "ステータス",
|
|
"ApiTokenStatusActive": "有効",
|
|
"ApiTokenStatusExpiring": "期限切れ間近",
|
|
"ApiTokenStatusRevoked": "取り消し済み",
|
|
"ApiTokenStatusExpired": "期限切れ",
|
|
"ApiTokenExpiry7Days": "7 日",
|
|
"ApiTokenExpiry30Days": "30 日",
|
|
"ApiTokenExpiry90Days": "90 日",
|
|
"ApiTokenExpiry180Days": "180 日",
|
|
"ApiTokenExpiry365Days": "365 日",
|
|
"ApiTokenLoadError": "API トークンの読み込みに失敗しました",
|
|
"ApiTokenCreateError": "トークンの作成に失敗しました。もう一度お試しください。",
|
|
"ApiTokenRevokeError": "トークンの取り消しに失敗しました。もう一度お試しください。"
|
|
}
|
|
}
|