From 98d0dba6d46f056b292e06c59b9f63d90b72c9eb Mon Sep 17 00:00:00 2001 From: Hyu Date: Fri, 31 Jul 2026 17:07:04 +0800 Subject: [PATCH] fix(web): restore locale key parity (#2370) Co-authored-by: dadachann <185672915+dadachann@users.noreply.github.com> --- web/src/i18n/locales/es-ES.ts | 100 ++++++++++++++++++++++++++++++++ web/src/i18n/locales/ja-JP.ts | 5 ++ web/src/i18n/locales/ru-RU.ts | 100 ++++++++++++++++++++++++++++++++ web/src/i18n/locales/th-TH.ts | 100 ++++++++++++++++++++++++++++++++ web/src/i18n/locales/vi-VN.ts | 100 ++++++++++++++++++++++++++++++++ web/src/i18n/locales/zh-Hant.ts | 100 ++++++++++++++++++++++++++++++++ 6 files changed, 505 insertions(+) diff --git a/web/src/i18n/locales/es-ES.ts b/web/src/i18n/locales/es-ES.ts index 0c1879dcd..ebe3be98a 100644 --- a/web/src/i18n/locales/es-ES.ts +++ b/web/src/i18n/locales/es-ES.ts @@ -175,6 +175,8 @@ const esES = { more: 'Más ({{count}})', less: 'Menos', noItems: 'Sin elementos', + + apiKeyStoredSecurely: 'Secret shown only when created', }, notFound: { title: 'Página no encontrada', @@ -324,6 +326,11 @@ const esES = { fallbackList: 'Modelos de respaldo', addFallback: 'Añadir modelo de respaldo', }, + + ownerMustBindSpace: + 'The Workspace owner must connect Space for LangBot Models.', + usesOwnerSpaceBilling: + "Uses the Workspace owner's Space billing and credits.", }, bots: { title: 'Bots', @@ -1315,6 +1322,13 @@ const esES = { 'Establece una contraseña para iniciar sesión con correo y contraseña', spaceEmailMismatch: 'El correo de inicio de sesión de Space no coincide con el correo de la cuenta local', + + space_account_not_registeredTitle: 'Account not registered', + space_account_not_registered: + 'No local account is registered for this Space email. Ask the Workspace owner for an invitation.', + space_account_binding_requiredTitle: 'Space connection required', + space_account_binding_required: + 'This local account must connect Space from Account settings before using Space login.', }, monitoring: { title: 'Panel de control', @@ -1573,6 +1587,8 @@ const esES = { api: 'API', storage: 'Almacenamiento', account: 'Cuenta', + + workspace: 'Workspace', }, }, storageAnalysis: { @@ -1894,6 +1910,90 @@ const esES = { unsupportedFileType: 'Tipo de archivo no admitido. Solo se admiten archivos .zip y .lbpkg', }, + + workspace: { + title: 'Workspace', + description: 'Manage members, roles, and invitation links', + selectTitle: 'Choose a Workspace', + selectDescription: 'Select where you want to continue in LangBot.', + selectionLoadFailed: + 'Your Workspaces could not be loaded. Please try again.', + switchWorkspace: 'Switch Workspace', + settings: 'Workspace Settings', + currentPlan: 'Current plan', + planUnavailable: 'Unavailable', + upgradePlan: 'Change or upgrade plan', + ossSingletonDescription: + 'This self-hosted instance has one Workspace and can include multiple users.', + cloudManagedDescription: + 'This Workspace is hosted by LangBot Cloud. Manage members here; billing opens in Cloud.', + loadFailed: 'Failed to load Workspace information', + members: 'Members', + you: 'You', + inviteMember: 'Invite a member', + inviteDescription: + 'Create a one-time link to add another user to this Workspace.', + emailPlaceholder: 'member@example.com', + createInvitation: 'Create invitation', + invitationCreated: 'Invitation created', + delivery: { + sent: 'Invitation sent', + link_only: 'Invitation link created', + failed: 'Invitation link created, but email could not be sent', + }, + invitationCreateFailed: 'Failed to create invitation', + oneTimeLinkWarning: 'Copy this link now. It is shown only once.', + copyInvitation: 'Copy invitation link', + invitationCopied: 'Invitation link copied', + pendingInvitations: 'Pending invitations', + expiresAt: 'Expires {{date}}', + revokeInvitation: 'Revoke invitation', + invitationRevoked: 'Invitation revoked', + invitationRevokeFailed: 'Failed to revoke invitation', + acceptInvitation: 'Accept invitation', + invitedToWorkspace: 'You were invited to {{workspace}}', + checkingInvitation: 'Checking this invitation...', + invitationMissing: 'This invitation link is missing required information.', + invitationExpired: 'This invitation has expired.', + invitationAlreadyRevoked: 'This invitation was revoked.', + invitationAlreadyUsed: 'This invitation was already used.', + invitationInvalid: 'This invitation is invalid or no longer available.', + invitationAccepted: 'Invitation accepted', + invitationAcceptFailed: 'Failed to accept invitation', + invitationEmailMismatch: + 'This invitation belongs to a different email address.', + existingAccountLoginRequired: + 'An account already exists for this email. Sign in to continue.', + acceptAsCurrentAccount: 'Accept with current account', + authenticatedInvitationNotice: + 'Sign out first, then sign in with the invited account. Your invitation will be preserved.', + logoutAndReturn: 'Sign out and return to this invitation', + switchAccount: 'Switch account', + registerAndAccept: 'Create account and accept', + alreadyHaveAccount: 'I already have an account', + confirmPassword: 'Confirm password', + passwordMinimum: 'Password must contain at least 8 characters.', + passwordMismatch: 'The passwords do not match.', + backToLogin: 'Back to sign in', + memberUpdated: 'Member role updated', + memberUpdateFailed: 'Failed to update member role', + removeMember: 'Remove member', + removeMemberConfirm: 'Remove this member from the Workspace?', + memberRemoved: 'Member removed', + memberRemoveFailed: 'Failed to remove member', + transferOwnership: 'Transfer ownership', + types: { + personal: 'Personal', + team: 'Team', + }, + roles: { + owner: 'Owner', + admin: 'Admin', + developer: 'Developer', + operator: 'Operator', + viewer: 'Viewer', + }, + }, }; export default esES; diff --git a/web/src/i18n/locales/ja-JP.ts b/web/src/i18n/locales/ja-JP.ts index 8591f8506..734cf7859 100644 --- a/web/src/i18n/locales/ja-JP.ts +++ b/web/src/i18n/locales/ja-JP.ts @@ -1378,6 +1378,11 @@ const jaJP = { operator: 'オペレーター', viewer: '閲覧者', }, + + settings: 'Workspace Settings', + currentPlan: 'Current plan', + planUnavailable: 'Unavailable', + upgradePlan: 'Change or upgrade plan', }, monitoring: { title: 'ダッシュボード', diff --git a/web/src/i18n/locales/ru-RU.ts b/web/src/i18n/locales/ru-RU.ts index c081fefbf..5719b83cc 100644 --- a/web/src/i18n/locales/ru-RU.ts +++ b/web/src/i18n/locales/ru-RU.ts @@ -172,6 +172,8 @@ const ruRU = { less: 'Свернуть', noItems: 'Нет элементов', termsOfService: 'Условия обслуживания', + + apiKeyStoredSecurely: 'Secret shown only when created', }, notFound: { title: 'Страница не найдена', @@ -323,6 +325,11 @@ const ruRU = { fallbackList: 'Резервные модели', addFallback: 'Добавить резервную модель', }, + + ownerMustBindSpace: + 'The Workspace owner must connect Space for LangBot Models.', + usesOwnerSpaceBilling: + "Uses the Workspace owner's Space billing and credits.", }, bots: { title: 'Боты', @@ -1292,6 +1299,13 @@ const ruRU = { setPasswordHint: 'Установите пароль для входа с email и паролем', spaceEmailMismatch: 'Email входа через Space не совпадает с email локальной учётной записи', + + space_account_not_registeredTitle: 'Account not registered', + space_account_not_registered: + 'No local account is registered for this Space email. Ask the Workspace owner for an invitation.', + space_account_binding_requiredTitle: 'Space connection required', + space_account_binding_required: + 'This local account must connect Space from Account settings before using Space login.', }, monitoring: { title: 'Мониторинг', @@ -1549,6 +1563,8 @@ const ruRU = { api: 'API', storage: 'Хранилище', account: 'Аккаунт', + + workspace: 'Workspace', }, }, storageAnalysis: { @@ -1862,6 +1878,90 @@ const ruRU = { unsupportedFileType: 'Неподдерживаемый тип файла. Поддерживаются только файлы .zip и .lbpkg', }, + + workspace: { + title: 'Workspace', + description: 'Manage members, roles, and invitation links', + selectTitle: 'Choose a Workspace', + selectDescription: 'Select where you want to continue in LangBot.', + selectionLoadFailed: + 'Your Workspaces could not be loaded. Please try again.', + switchWorkspace: 'Switch Workspace', + settings: 'Workspace Settings', + currentPlan: 'Current plan', + planUnavailable: 'Unavailable', + upgradePlan: 'Change or upgrade plan', + ossSingletonDescription: + 'This self-hosted instance has one Workspace and can include multiple users.', + cloudManagedDescription: + 'This Workspace is hosted by LangBot Cloud. Manage members here; billing opens in Cloud.', + loadFailed: 'Failed to load Workspace information', + members: 'Members', + you: 'You', + inviteMember: 'Invite a member', + inviteDescription: + 'Create a one-time link to add another user to this Workspace.', + emailPlaceholder: 'member@example.com', + createInvitation: 'Create invitation', + invitationCreated: 'Invitation created', + delivery: { + sent: 'Invitation sent', + link_only: 'Invitation link created', + failed: 'Invitation link created, but email could not be sent', + }, + invitationCreateFailed: 'Failed to create invitation', + oneTimeLinkWarning: 'Copy this link now. It is shown only once.', + copyInvitation: 'Copy invitation link', + invitationCopied: 'Invitation link copied', + pendingInvitations: 'Pending invitations', + expiresAt: 'Expires {{date}}', + revokeInvitation: 'Revoke invitation', + invitationRevoked: 'Invitation revoked', + invitationRevokeFailed: 'Failed to revoke invitation', + acceptInvitation: 'Accept invitation', + invitedToWorkspace: 'You were invited to {{workspace}}', + checkingInvitation: 'Checking this invitation...', + invitationMissing: 'This invitation link is missing required information.', + invitationExpired: 'This invitation has expired.', + invitationAlreadyRevoked: 'This invitation was revoked.', + invitationAlreadyUsed: 'This invitation was already used.', + invitationInvalid: 'This invitation is invalid or no longer available.', + invitationAccepted: 'Invitation accepted', + invitationAcceptFailed: 'Failed to accept invitation', + invitationEmailMismatch: + 'This invitation belongs to a different email address.', + existingAccountLoginRequired: + 'An account already exists for this email. Sign in to continue.', + acceptAsCurrentAccount: 'Accept with current account', + authenticatedInvitationNotice: + 'Sign out first, then sign in with the invited account. Your invitation will be preserved.', + logoutAndReturn: 'Sign out and return to this invitation', + switchAccount: 'Switch account', + registerAndAccept: 'Create account and accept', + alreadyHaveAccount: 'I already have an account', + confirmPassword: 'Confirm password', + passwordMinimum: 'Password must contain at least 8 characters.', + passwordMismatch: 'The passwords do not match.', + backToLogin: 'Back to sign in', + memberUpdated: 'Member role updated', + memberUpdateFailed: 'Failed to update member role', + removeMember: 'Remove member', + removeMemberConfirm: 'Remove this member from the Workspace?', + memberRemoved: 'Member removed', + memberRemoveFailed: 'Failed to remove member', + transferOwnership: 'Transfer ownership', + types: { + personal: 'Personal', + team: 'Team', + }, + roles: { + owner: 'Owner', + admin: 'Admin', + developer: 'Developer', + operator: 'Operator', + viewer: 'Viewer', + }, + }, }; export default ruRU; diff --git a/web/src/i18n/locales/th-TH.ts b/web/src/i18n/locales/th-TH.ts index 3af8ad285..6c26b9877 100644 --- a/web/src/i18n/locales/th-TH.ts +++ b/web/src/i18n/locales/th-TH.ts @@ -169,6 +169,8 @@ const thTH = { more: 'เพิ่มเติม ({{count}})', less: 'น้อยลง', noItems: 'ไม่มีรายการ', + + apiKeyStoredSecurely: 'Secret shown only when created', }, notFound: { title: 'ไม่พบหน้า', @@ -310,6 +312,11 @@ const thTH = { fallbackList: 'โมเดลสำรอง', addFallback: 'เพิ่มโมเดลสำรอง', }, + + ownerMustBindSpace: + 'The Workspace owner must connect Space for LangBot Models.', + usesOwnerSpaceBilling: + "Uses the Workspace owner's Space billing and credits.", }, bots: { title: 'บอท', @@ -1260,6 +1267,13 @@ const thTH = { bindSpaceInvalidState: 'คำขอผูกไม่ถูกต้อง กรุณาลองใหม่จากการตั้งค่าบัญชี', setPasswordHint: 'ตั้งรหัสผ่านเพื่อเข้าสู่ระบบด้วยอีเมลและรหัสผ่าน', spaceEmailMismatch: 'อีเมลเข้าสู่ระบบ Space ไม่ตรงกับอีเมลบัญชีท้องถิ่น', + + space_account_not_registeredTitle: 'Account not registered', + space_account_not_registered: + 'No local account is registered for this Space email. Ask the Workspace owner for an invitation.', + space_account_binding_requiredTitle: 'Space connection required', + space_account_binding_required: + 'This local account must connect Space from Account settings before using Space login.', }, monitoring: { title: 'แดชบอร์ด', @@ -1516,6 +1530,8 @@ const thTH = { api: 'API', storage: 'พื้นที่จัดเก็บ', account: 'บัญชี', + + workspace: 'Workspace', }, }, storageAnalysis: { @@ -1819,6 +1835,90 @@ const thTH = { createSkillHint: 'นำเข้าจากไดเรกทอรีในเครื่องหรือสร้างด้วยตนเอง', unsupportedFileType: 'ประเภทไฟล์ไม่รองรับ รองรับเฉพาะไฟล์ .zip และ .lbpkg', }, + + workspace: { + title: 'Workspace', + description: 'Manage members, roles, and invitation links', + selectTitle: 'Choose a Workspace', + selectDescription: 'Select where you want to continue in LangBot.', + selectionLoadFailed: + 'Your Workspaces could not be loaded. Please try again.', + switchWorkspace: 'Switch Workspace', + settings: 'Workspace Settings', + currentPlan: 'Current plan', + planUnavailable: 'Unavailable', + upgradePlan: 'Change or upgrade plan', + ossSingletonDescription: + 'This self-hosted instance has one Workspace and can include multiple users.', + cloudManagedDescription: + 'This Workspace is hosted by LangBot Cloud. Manage members here; billing opens in Cloud.', + loadFailed: 'Failed to load Workspace information', + members: 'Members', + you: 'You', + inviteMember: 'Invite a member', + inviteDescription: + 'Create a one-time link to add another user to this Workspace.', + emailPlaceholder: 'member@example.com', + createInvitation: 'Create invitation', + invitationCreated: 'Invitation created', + delivery: { + sent: 'Invitation sent', + link_only: 'Invitation link created', + failed: 'Invitation link created, but email could not be sent', + }, + invitationCreateFailed: 'Failed to create invitation', + oneTimeLinkWarning: 'Copy this link now. It is shown only once.', + copyInvitation: 'Copy invitation link', + invitationCopied: 'Invitation link copied', + pendingInvitations: 'Pending invitations', + expiresAt: 'Expires {{date}}', + revokeInvitation: 'Revoke invitation', + invitationRevoked: 'Invitation revoked', + invitationRevokeFailed: 'Failed to revoke invitation', + acceptInvitation: 'Accept invitation', + invitedToWorkspace: 'You were invited to {{workspace}}', + checkingInvitation: 'Checking this invitation...', + invitationMissing: 'This invitation link is missing required information.', + invitationExpired: 'This invitation has expired.', + invitationAlreadyRevoked: 'This invitation was revoked.', + invitationAlreadyUsed: 'This invitation was already used.', + invitationInvalid: 'This invitation is invalid or no longer available.', + invitationAccepted: 'Invitation accepted', + invitationAcceptFailed: 'Failed to accept invitation', + invitationEmailMismatch: + 'This invitation belongs to a different email address.', + existingAccountLoginRequired: + 'An account already exists for this email. Sign in to continue.', + acceptAsCurrentAccount: 'Accept with current account', + authenticatedInvitationNotice: + 'Sign out first, then sign in with the invited account. Your invitation will be preserved.', + logoutAndReturn: 'Sign out and return to this invitation', + switchAccount: 'Switch account', + registerAndAccept: 'Create account and accept', + alreadyHaveAccount: 'I already have an account', + confirmPassword: 'Confirm password', + passwordMinimum: 'Password must contain at least 8 characters.', + passwordMismatch: 'The passwords do not match.', + backToLogin: 'Back to sign in', + memberUpdated: 'Member role updated', + memberUpdateFailed: 'Failed to update member role', + removeMember: 'Remove member', + removeMemberConfirm: 'Remove this member from the Workspace?', + memberRemoved: 'Member removed', + memberRemoveFailed: 'Failed to remove member', + transferOwnership: 'Transfer ownership', + types: { + personal: 'Personal', + team: 'Team', + }, + roles: { + owner: 'Owner', + admin: 'Admin', + developer: 'Developer', + operator: 'Operator', + viewer: 'Viewer', + }, + }, }; export default thTH; diff --git a/web/src/i18n/locales/vi-VN.ts b/web/src/i18n/locales/vi-VN.ts index 0ed95e383..0b058ba7f 100644 --- a/web/src/i18n/locales/vi-VN.ts +++ b/web/src/i18n/locales/vi-VN.ts @@ -172,6 +172,8 @@ const viVN = { more: 'Thêm ({{count}})', less: 'Thu gọn', noItems: 'Không có mục nào', + + apiKeyStoredSecurely: 'Secret shown only when created', }, notFound: { title: 'Không tìm thấy trang', @@ -319,6 +321,11 @@ const viVN = { fallbackList: 'Mô hình dự phòng', addFallback: 'Thêm mô hình dự phòng', }, + + ownerMustBindSpace: + 'The Workspace owner must connect Space for LangBot Models.', + usesOwnerSpaceBilling: + "Uses the Workspace owner's Space billing and credits.", }, bots: { title: 'Bot', @@ -1286,6 +1293,13 @@ const viVN = { setPasswordHint: 'Đặt mật khẩu để đăng nhập bằng email và mật khẩu', spaceEmailMismatch: 'Email đăng nhập Space không khớp với email tài khoản cục bộ', + + space_account_not_registeredTitle: 'Account not registered', + space_account_not_registered: + 'No local account is registered for this Space email. Ask the Workspace owner for an invitation.', + space_account_binding_requiredTitle: 'Space connection required', + space_account_binding_required: + 'This local account must connect Space from Account settings before using Space login.', }, monitoring: { title: 'Bảng điều khiển', @@ -1542,6 +1556,8 @@ const viVN = { api: 'API', storage: 'Lưu trữ', account: 'Tài khoản', + + workspace: 'Workspace', }, }, storageAnalysis: { @@ -1853,6 +1869,90 @@ const viVN = { unsupportedFileType: 'Loại tệp không được hỗ trợ. Chỉ hỗ trợ tệp .zip và .lbpkg', }, + + workspace: { + title: 'Workspace', + description: 'Manage members, roles, and invitation links', + selectTitle: 'Choose a Workspace', + selectDescription: 'Select where you want to continue in LangBot.', + selectionLoadFailed: + 'Your Workspaces could not be loaded. Please try again.', + switchWorkspace: 'Switch Workspace', + settings: 'Workspace Settings', + currentPlan: 'Current plan', + planUnavailable: 'Unavailable', + upgradePlan: 'Change or upgrade plan', + ossSingletonDescription: + 'This self-hosted instance has one Workspace and can include multiple users.', + cloudManagedDescription: + 'This Workspace is hosted by LangBot Cloud. Manage members here; billing opens in Cloud.', + loadFailed: 'Failed to load Workspace information', + members: 'Members', + you: 'You', + inviteMember: 'Invite a member', + inviteDescription: + 'Create a one-time link to add another user to this Workspace.', + emailPlaceholder: 'member@example.com', + createInvitation: 'Create invitation', + invitationCreated: 'Invitation created', + delivery: { + sent: 'Invitation sent', + link_only: 'Invitation link created', + failed: 'Invitation link created, but email could not be sent', + }, + invitationCreateFailed: 'Failed to create invitation', + oneTimeLinkWarning: 'Copy this link now. It is shown only once.', + copyInvitation: 'Copy invitation link', + invitationCopied: 'Invitation link copied', + pendingInvitations: 'Pending invitations', + expiresAt: 'Expires {{date}}', + revokeInvitation: 'Revoke invitation', + invitationRevoked: 'Invitation revoked', + invitationRevokeFailed: 'Failed to revoke invitation', + acceptInvitation: 'Accept invitation', + invitedToWorkspace: 'You were invited to {{workspace}}', + checkingInvitation: 'Checking this invitation...', + invitationMissing: 'This invitation link is missing required information.', + invitationExpired: 'This invitation has expired.', + invitationAlreadyRevoked: 'This invitation was revoked.', + invitationAlreadyUsed: 'This invitation was already used.', + invitationInvalid: 'This invitation is invalid or no longer available.', + invitationAccepted: 'Invitation accepted', + invitationAcceptFailed: 'Failed to accept invitation', + invitationEmailMismatch: + 'This invitation belongs to a different email address.', + existingAccountLoginRequired: + 'An account already exists for this email. Sign in to continue.', + acceptAsCurrentAccount: 'Accept with current account', + authenticatedInvitationNotice: + 'Sign out first, then sign in with the invited account. Your invitation will be preserved.', + logoutAndReturn: 'Sign out and return to this invitation', + switchAccount: 'Switch account', + registerAndAccept: 'Create account and accept', + alreadyHaveAccount: 'I already have an account', + confirmPassword: 'Confirm password', + passwordMinimum: 'Password must contain at least 8 characters.', + passwordMismatch: 'The passwords do not match.', + backToLogin: 'Back to sign in', + memberUpdated: 'Member role updated', + memberUpdateFailed: 'Failed to update member role', + removeMember: 'Remove member', + removeMemberConfirm: 'Remove this member from the Workspace?', + memberRemoved: 'Member removed', + memberRemoveFailed: 'Failed to remove member', + transferOwnership: 'Transfer ownership', + types: { + personal: 'Personal', + team: 'Team', + }, + roles: { + owner: 'Owner', + admin: 'Admin', + developer: 'Developer', + operator: 'Operator', + viewer: 'Viewer', + }, + }, }; export default viVN; diff --git a/web/src/i18n/locales/zh-Hant.ts b/web/src/i18n/locales/zh-Hant.ts index b98817e74..1f7023678 100644 --- a/web/src/i18n/locales/zh-Hant.ts +++ b/web/src/i18n/locales/zh-Hant.ts @@ -160,6 +160,8 @@ const zhHant = { more: '更多 ({{count}})', less: '收起', noItems: '暫無內容', + + apiKeyStoredSecurely: 'Secret shown only when created', }, notFound: { title: '頁面不存在', @@ -300,6 +302,11 @@ const zhHant = { fallbackList: '備用模型', addFallback: '新增備用模型', }, + + ownerMustBindSpace: + 'The Workspace owner must connect Space for LangBot Models.', + usesOwnerSpaceBilling: + "Uses the Workspace owner's Space billing and credits.", }, bots: { title: '機器人', @@ -1216,6 +1223,13 @@ const zhHant = { bindSpaceInvalidState: '無效的綁定請求,請從帳戶設定重新發起', setPasswordHint: '設定密碼後可使用電子郵件密碼登入', spaceEmailMismatch: 'Space登入帳號電子郵件與本實例帳號電子郵件不匹配', + + space_account_not_registeredTitle: 'Account not registered', + space_account_not_registered: + 'No local account is registered for this Space email. Ask the Workspace owner for an invitation.', + space_account_binding_requiredTitle: 'Space connection required', + space_account_binding_required: + 'This local account must connect Space from Account settings before using Space login.', }, monitoring: { title: '儀表盤', @@ -1471,6 +1485,8 @@ const zhHant = { api: 'API', storage: '儲存', account: '帳戶', + + workspace: 'Workspace', }, }, storageAnalysis: { @@ -1762,6 +1778,90 @@ const zhHant = { saveFileSuccess: '檔案儲存成功', saveFileError: '檔案儲存失敗:', }, + + workspace: { + title: 'Workspace', + description: 'Manage members, roles, and invitation links', + selectTitle: 'Choose a Workspace', + selectDescription: 'Select where you want to continue in LangBot.', + selectionLoadFailed: + 'Your Workspaces could not be loaded. Please try again.', + switchWorkspace: 'Switch Workspace', + settings: 'Workspace Settings', + currentPlan: 'Current plan', + planUnavailable: 'Unavailable', + upgradePlan: 'Change or upgrade plan', + ossSingletonDescription: + 'This self-hosted instance has one Workspace and can include multiple users.', + cloudManagedDescription: + 'This Workspace is hosted by LangBot Cloud. Manage members here; billing opens in Cloud.', + loadFailed: 'Failed to load Workspace information', + members: 'Members', + you: 'You', + inviteMember: 'Invite a member', + inviteDescription: + 'Create a one-time link to add another user to this Workspace.', + emailPlaceholder: 'member@example.com', + createInvitation: 'Create invitation', + invitationCreated: 'Invitation created', + delivery: { + sent: 'Invitation sent', + link_only: 'Invitation link created', + failed: 'Invitation link created, but email could not be sent', + }, + invitationCreateFailed: 'Failed to create invitation', + oneTimeLinkWarning: 'Copy this link now. It is shown only once.', + copyInvitation: 'Copy invitation link', + invitationCopied: 'Invitation link copied', + pendingInvitations: 'Pending invitations', + expiresAt: 'Expires {{date}}', + revokeInvitation: 'Revoke invitation', + invitationRevoked: 'Invitation revoked', + invitationRevokeFailed: 'Failed to revoke invitation', + acceptInvitation: 'Accept invitation', + invitedToWorkspace: 'You were invited to {{workspace}}', + checkingInvitation: 'Checking this invitation...', + invitationMissing: 'This invitation link is missing required information.', + invitationExpired: 'This invitation has expired.', + invitationAlreadyRevoked: 'This invitation was revoked.', + invitationAlreadyUsed: 'This invitation was already used.', + invitationInvalid: 'This invitation is invalid or no longer available.', + invitationAccepted: 'Invitation accepted', + invitationAcceptFailed: 'Failed to accept invitation', + invitationEmailMismatch: + 'This invitation belongs to a different email address.', + existingAccountLoginRequired: + 'An account already exists for this email. Sign in to continue.', + acceptAsCurrentAccount: 'Accept with current account', + authenticatedInvitationNotice: + 'Sign out first, then sign in with the invited account. Your invitation will be preserved.', + logoutAndReturn: 'Sign out and return to this invitation', + switchAccount: 'Switch account', + registerAndAccept: 'Create account and accept', + alreadyHaveAccount: 'I already have an account', + confirmPassword: 'Confirm password', + passwordMinimum: 'Password must contain at least 8 characters.', + passwordMismatch: 'The passwords do not match.', + backToLogin: 'Back to sign in', + memberUpdated: 'Member role updated', + memberUpdateFailed: 'Failed to update member role', + removeMember: 'Remove member', + removeMemberConfirm: 'Remove this member from the Workspace?', + memberRemoved: 'Member removed', + memberRemoveFailed: 'Failed to remove member', + transferOwnership: 'Transfer ownership', + types: { + personal: 'Personal', + team: 'Team', + }, + roles: { + owner: 'Owner', + admin: 'Admin', + developer: 'Developer', + operator: 'Operator', + viewer: 'Viewer', + }, + }, }; export default zhHant;