diff --git a/packages/client/public/locales/zh-CN/CreateEditRoomDialog.json b/packages/client/public/locales/zh-CN/CreateEditRoomDialog.json index e05513a460..a03f14f15e 100644 --- a/packages/client/public/locales/zh-CN/CreateEditRoomDialog.json +++ b/packages/client/public/locales/zh-CN/CreateEditRoomDialog.json @@ -17,7 +17,7 @@ "MakeRoomPrivateTitle": "将房间设为私密", "PeopleSelectorInfo": "只有房间管理员或协作空间管理员才能成为房间的所有者", "PublicRoomBarDescription": "所有人都可以通过链接进入此房间。外部用户拥有“仅查看”权限,可查看所有文件", - "PublicRoomDescription": "邀请用户通过外部链接查看文档,无需注册。您也可以将此房间嵌入任意网络界面。", + "PublicRoomDescription": "通过外部链接,邀请其他用户查看文档而无需注册。您也可以将此类房间嵌入任意的网络界面。", "PublicRoomSystemFoldersDescription": "不同完成阶段的表单副本存储在“系统”文件夹中。正在填写的表单存储在“处理中”文件夹中,填写完成的表单存储在“完成”文件夹中。", "PublicRoomSystemFoldersTitle": "系统文件夹", "ReviewRoomDescription": "请求审阅或评论文档", diff --git a/packages/client/public/locales/zh-CN/JavascriptSdk.json b/packages/client/public/locales/zh-CN/JavascriptSdk.json index 9ccdf73151..068df20423 100644 --- a/packages/client/public/locales/zh-CN/JavascriptSdk.json +++ b/packages/client/public/locales/zh-CN/JavascriptSdk.json @@ -33,8 +33,8 @@ "DefaultColumnsOption": "默认(数量取决于屏幕宽度)", "Descending": "降序", "DisplayColumns": "显示文件行中的列", - "DocspaceDescription": "嵌入整个协作空间,以支持用户与所有房间、文件和设置交互。", - "EditorDescription": "嵌入编辑器,以支持用户通过对应的间编辑文件。", + "DocspaceDescription": "嵌入整个协作空间,让用户能够与所有房间、文件和设置进行交互。", + "EditorDescription": "嵌入编辑器,让用户能够从对应的房间编辑文件。", "ElementCalledAfterClicking": "点击后元素会被调用", "ElementItself": "元素本身", "EmbedCodeSuccessfullyCopied": "获取要插入的代码", @@ -48,7 +48,7 @@ "FileId": "文件 ID", "FilePreview": "文件预览", "FileSelector": "文件选择器", - "FileSelectorDescription": "嵌入文件选择器,以支持用户访问可用文件列表中的任意文件。", + "FileSelectorDescription": "嵌入文件选择器,让用户能够访问允许列表中的文件。", "FilesSearchDescription": "在打开的文件夹/房间内搜索文件。", "FileTypeDisplay": "文件类型显示", "FrameId": "帧 ID", @@ -76,13 +76,13 @@ "MenuDescription": "如果用户不需要进入其他板块,您可以关闭左侧菜单。", "MobileOnly": "仅移动设备", "Page": "显示页面(页数)", - "PublicRoomDescription": "嵌入公共房间,支持用户无需注册即可查看其中储存的所有文档。", + "PublicRoomDescription": "嵌入公共房间,让用户无需注册即可查看公共房间中的所有文档。", "RightPanelCollapsed": "右侧面板已收起", "RoomOrFolder": "房间或文件夹", "RoomOrFolderDescription": "可选择要显示的板块、房间或文件夹", "RoomPreview": "房间预览", "RoomSelector": "房间选择器", - "RoomSelectorDescription": "嵌入房间选择器,支持用户访问可用房间列表中的任意房间。", + "RoomSelectorDescription": "嵌入房间选择器,让用户能够访问允许列表中的房间。", "RoomTypeDisplay": "房间类型显示", "Rotate": "旋转", "Scale": "缩放", @@ -104,5 +104,5 @@ "SubtitleDescription": "包含当前目录的附加注释或描述的副标题。", "TabPlugins": "选项卡插件", "Viewer": "查看器", - "ViewerDescription": "嵌入查看器,以支持用户打开文件,通过对应的房间查看。" + "ViewerDescription": "嵌入查看器,让用户能够从对应的房间打开文件并进行查看。" } diff --git a/packages/client/public/locales/zh-CN/Settings.json b/packages/client/public/locales/zh-CN/Settings.json index 5535b65d04..58b81838d7 100644 --- a/packages/client/public/locales/zh-CN/Settings.json +++ b/packages/client/public/locales/zh-CN/Settings.json @@ -84,13 +84,13 @@ "DataBackup": "数据备份", "DataImport": "数据导入", "DataImportComplete": "数据导入完成", - "DataImportDescription": "将第三方服务数据导入 ONLYOFFICE 协作空间。数据导入支持传输数据,例如所有用户、其个人和共享文档。", + "DataImportDescription": "将第三方数据导入 ONLYOFFICE 协作空间。该功能可以转移数据,例如所有用户、他们的个人文件或与其共享的文件。", "DataImportProcessing": "数据导入处理", "Deactivate": "停用", "DeactivateOrDeletePortal": "停用或删除协作空间。", "DefaultSettings": "默认设置", - "DefineQuotaPerRoom": "定义每个房间的配额", - "DefineQuotaPerUser": "定义每位用户的配额", + "DefineQuotaPerRoom": "设置每个房间的额度", + "DefineQuotaPerUser": "设置每个用户的额度", "DeleteDocSpace": "删除协作空间", "DeleteDocSpaceInfo": "删除空间前,请确保已关闭自动计费。您可在 <1>Stripe 客户门户中查看自动计费状态。", "DeleteTheme": "删除主题", @@ -202,8 +202,8 @@ "ProjectsDescription": "每个项目会被导入为一个房间,包含项目中所有的文档和用户。项目经理会成为房间的所有者", "QuotaPerRoom": "每个房间的配额", "QuotaPerUser": "每位用户的配额", - "Quotas": "配额", - "QuotasDescription": "您可以在此处设置用户和房间的存储空间配额。<1>帮助中心。", + "Quotas": "分配额度", + "QuotasDescription": "您可以设置用户和房间的储存空间额度。 <1>帮助中心。", "Recalculate": "重新计算", "RecoveryFileNotSelected": "恢复错误。未选择恢复文件", "RestoreBackup": "数据恢复", @@ -232,8 +232,8 @@ "SessionLifetime": "会话寿命", "SessionLifetimeMobileDescription": "通过会话生存期,可设置协作空间用户需要再输入凭据才能访问空间的时间(单位为分钟)。", "SessionLifetimeSettingDescription": "调整会话生命周期,可定义自动注销的时间段。保存后,会对所有用户执行注销。", - "SetDefaultRoomQuota": "为协作空间中的房间设置默认存储空间配额。房间管理员后续可对每个房间单独调整。", - "SetDefaultUserQuota": "为协作空间中的用户设置存储空间配额。用户配额会影响每位用户“我的文档”文件夹的存储空间上限。", + "SetDefaultRoomQuota": "设置此协作空间中,房间的默认储存空间额度。房间管理员后续可对每个房间进行单独调整。", + "SetDefaultUserQuota": "设置此协作空间的用户的储存空间额度。此操作会影响每位用户“我的文档”板块的储存空间限制。", "SettingPasswordDescription": "配置密码强度设置,强制使用更安全的强密码。", "SettingPasswordStrengthMobileDescription": "通过“密码强度设置”,确定密码阻止猜测和暴力攻击的有效性。", "SettingPasswordTittle": "密码强度设置", diff --git a/packages/client/public/locales/zh-CN/Translations.json b/packages/client/public/locales/zh-CN/Translations.json index ec96c9d617..d075b33a4c 100644 --- a/packages/client/public/locales/zh-CN/Translations.json +++ b/packages/client/public/locales/zh-CN/Translations.json @@ -24,7 +24,7 @@ "LinkCopySuccess": "链接已复制到剪贴板中", "LinkHasExpiredAndHasBeenDisabled": "此链接过期,已被禁用", "LinkValidTime": "该链接仅在{{days_count}}天内有效。", - "NewForm": "PDF表格", + "NewForm": "PDF 表单", "Other": "其他", "OwnerChange": "变更所有者", "Presentations": "演示文稿", @@ -42,7 +42,7 @@ "RoleUserDescription": "用户仅可访问管理员已邀请其加入的房间。其不能创建房间、文件夹或文件。", "RoleViewer": "可查看", "RoleViewerDescription": "文件查看", - "SearchByHeadOfGroup": "按群组负责人进行搜索", + "SearchByHeadOfGroup": "按组长进行搜索", "SearchByOwner": "按所有者搜索", "Spreadsheets": "电子表格", "SubNewForm": "空白", diff --git a/packages/client/src/components/FilesSelector/index.tsx b/packages/client/src/components/FilesSelector/index.tsx index f5e5ad7c1e..a0be1fbd0f 100644 --- a/packages/client/src/components/FilesSelector/index.tsx +++ b/packages/client/src/components/FilesSelector/index.tsx @@ -339,7 +339,7 @@ const FilesSelectorWrapper = ({ isThirdParty={isThirdParty} rootThirdPartyId={rootThirdPartyId} roomsFolderId={roomsFolderId} - currentFolderId={currentFolderId || 0} + currentFolderId={currentFolderId} parentId={parentId} rootFolderType={rootFolderType || FolderType.Rooms} currentDeviceType={currentDeviceType} @@ -485,7 +485,7 @@ export default inject( (rootFolderType === FolderType.Archive || rootFolderType === FolderType.TRASH ? undefined - : selectedId !== selectionsWithoutEditing[0]?.id + : selectedId === selectionsWithoutEditing[0]?.id ? parentId : selectedId); diff --git a/packages/client/src/pages/Home/InfoPanel/Body/views/Accounts/index.js b/packages/client/src/pages/Home/InfoPanel/Body/views/Accounts/index.js index 102fe9ce78..576590ec0f 100644 --- a/packages/client/src/pages/Home/InfoPanel/Body/views/Accounts/index.js +++ b/packages/client/src/pages/Home/InfoPanel/Body/views/Accounts/index.js @@ -53,6 +53,7 @@ const Accounts = (props) => { setPeopleBufferSelection, showStorageInfo, + standalone, } = props; const navigate = useNavigate(); @@ -233,18 +234,22 @@ const Accounts = (props) => { {typeData} - - {t("UserStatus")} - - - {statusText} - + {!standalone && ( + <> + + {t("UserStatus")} + + + {statusText} + + + )} {showStorageInfo && ( <> { const { isOwner, isAdmin, id: selfId } = userStore.user; const { changeType: changeUserType, usersStore } = peopleStore; @@ -323,6 +329,8 @@ export default inject( } = peopleStore.selectionStore; const { showStorageInfo } = currentQuotaStore; + const { standalone } = settingsStore; + return { isOwner, isAdmin, @@ -335,6 +343,7 @@ export default inject( setPeopleSelection, setPeopleBufferSelection, showStorageInfo, + standalone, }; }, )( diff --git a/packages/doceditor/src/components/Editor.tsx b/packages/doceditor/src/components/Editor.tsx index 78dd73e7bb..838fc7319c 100644 --- a/packages/doceditor/src/components/Editor.tsx +++ b/packages/doceditor/src/components/Editor.tsx @@ -147,7 +147,7 @@ const Editor = ({ )?.["Editor"] as { [key: string]: string; } - )?.["FileLocation"]; + )?.["FileLocation"]; // t("FileLocation"); if (editorGoBack === "false" || user?.isVisitor || !user) { } else if (editorGoBack === "event") { @@ -305,3 +305,4 @@ const Editor = ({ }; export default Editor; + diff --git a/packages/doceditor/src/components/deep-link/DeepLink.styled.ts b/packages/doceditor/src/components/deep-link/DeepLink.styled.ts index f5b0e94989..62b068ce44 100644 --- a/packages/doceditor/src/components/deep-link/DeepLink.styled.ts +++ b/packages/doceditor/src/components/deep-link/DeepLink.styled.ts @@ -126,6 +126,7 @@ export const StyledBody = styled.div` max-width: 960px; width: 100vw; + margin-bottom: 16px; @media ${mobile} { margin: 0 auto; diff --git a/packages/login-next/src/components/Login/index.tsx b/packages/login-next/src/components/Login/index.tsx index 78c101ae50..5b8e79956c 100644 --- a/packages/login-next/src/components/Login/index.tsx +++ b/packages/login-next/src/components/Login/index.tsx @@ -155,7 +155,7 @@ const Login = ({ : window.open( url, "login", - "width=800,height=500,status=no,toolbar=no,menubar=no,resizable=yes,scrollbars=no", + "width=800,height=500,status=no,toolbar=no,menubar=no,resizable=yes,scrollbars=no,popup=yes", ); const code: string = await getOAuthToken(tokenGetterWin); diff --git a/packages/shared/selectors/Files/FilesSelector.types.ts b/packages/shared/selectors/Files/FilesSelector.types.ts index 2aeb171850..f9e0604fc3 100644 --- a/packages/shared/selectors/Files/FilesSelector.types.ts +++ b/packages/shared/selectors/Files/FilesSelector.types.ts @@ -107,6 +107,7 @@ export type UseFilesHelpersProps = { value: number | string | undefined | TBreadCrumb[], ) => void; isRoomsOnly: boolean; + isUserOnly?: boolean; rootThirdPartyId?: string; getRoomList?: ( startIndex: number, @@ -149,6 +150,7 @@ export type FilesSelectorProps = ( value: number | string | undefined | TBreadCrumb[], ) => void; isUserOnly?: boolean; + openRoot?: boolean; isRoomsOnly: boolean; isThirdParty: boolean; rootThirdPartyId?: string; diff --git a/packages/shared/selectors/Files/hooks/useFilesHelper.ts b/packages/shared/selectors/Files/hooks/useFilesHelper.ts index 3ca858577d..8f1de18584 100644 --- a/packages/shared/selectors/Files/hooks/useFilesHelper.ts +++ b/packages/shared/selectors/Files/hooks/useFilesHelper.ts @@ -65,6 +65,7 @@ const useFilesHelper = ({ getRootData, onSetBaseFolderPath, isRoomsOnly, + isUserOnly, rootThirdPartyId, getRoomList, getIcon, @@ -145,7 +146,7 @@ const useFilesHelper = ({ } } - const id = selectedItemId || ""; + const id = isUserOnly ? "@my" : selectedItemId || ""; filter.folder = id.toString(); @@ -153,7 +154,7 @@ const useFilesHelper = ({ folderId: string | number, isErrorPath = false, ) => { - if (initRef.current && getRootData) { + if (initRef.current && getRootData && folderId !== "@my") { const folder = await getFolderInfo(folderId, true); const isArchive = folder.rootFolderType === FolderType.Archive; @@ -251,7 +252,7 @@ const useFilesHelper = ({ // if (item.roomType) breadCrumbs[idx].isRoom = true; // }); - if (!isThirdParty && !isRoomsOnly) + if (!isThirdParty && !isRoomsOnly && !isUserOnly) breadCrumbs.unshift({ ...DEFAULT_BREAD_CRUMB }); onSetBaseFolderPath?.(isErrorPath ? [] : breadCrumbs); @@ -312,6 +313,7 @@ const useFilesHelper = ({ setIsNextPageLoading, searchValue, filterParam, + isUserOnly, selectedItemId, getRootData, setSelectedItemSecurity, diff --git a/packages/shared/selectors/Files/index.tsx b/packages/shared/selectors/Files/index.tsx index efc892c04f..8c393f0858 100644 --- a/packages/shared/selectors/Files/index.tsx +++ b/packages/shared/selectors/Files/index.tsx @@ -76,6 +76,7 @@ const FilesSelector = ({ onSetBaseFolderPath, isUserOnly, isRoomsOnly, + openRoot, isThirdParty, rootThirdPartyId, roomsFolderId, @@ -186,6 +187,7 @@ const FilesSelector = ({ setIsRoot, searchValue, isRoomsOnly, + onSetBaseFolderPath, isInit, setIsInit, @@ -211,6 +213,7 @@ const FilesSelector = ({ getRootData, onSetBaseFolderPath, isRoomsOnly, + isUserOnly, rootThirdPartyId, getRoomList, getIcon, @@ -289,7 +292,7 @@ const FilesSelector = ({ return; } - if (!currentFolderId) { + if (!currentFolderId && !isUserOnly && !openRoot) { setSelectedItemType("rooms"); return; } @@ -311,9 +314,11 @@ const FilesSelector = ({ currentFolderId, isRoomsOnly, isThirdParty, + isUserOnly, parentId, roomsFolderId, rootFolderType, + openRoot, setIsFirstLoad, ]); @@ -439,10 +444,24 @@ const FilesSelector = ({ ); React.useEffect(() => { - if (selectedItemType === "rooms") getRoomList(0); + if (selectedItemType === "rooms") { + getRoomList(0); + return; + } + if (openRoot && !selectedItemId) { + getRootData(); + return; + } if (selectedItemType === "files" && typeof selectedItemId !== "undefined") getFileList(0); - }, [getFileList, getRoomList, selectedItemType, selectedItemId]); + }, [ + getFileList, + getRoomList, + selectedItemType, + selectedItemId, + getRootData, + openRoot, + ]); const headerProps: TSelectorHeader = withHeader ? { withHeader, headerProps: { headerLabel } } diff --git a/public/locales/zh-CN/Common.json b/public/locales/zh-CN/Common.json index 1b6b404884..bdc3e8a67f 100644 --- a/public/locales/zh-CN/Common.json +++ b/public/locales/zh-CN/Common.json @@ -126,7 +126,7 @@ "Duplicate": "创建副本", "EditButton": "编辑", "Editing": "编辑", - "Editor": "编辑器", + "Editor": "可编辑", "Email": "电子邮件", "EmptyDescription": "之前邀请至协作空间或单独房间的用户列表将在此处展示。您可随时邀请这些用户进行协作。", "EmptyEmail": "没有解析邮件", @@ -179,7 +179,7 @@ "Groups": "群组", "GroupsNotFoundDescription": "没有与您的搜索条件匹配的群组。请调整搜索参数,或清除搜索字段查看完整的群组列表。", "HasFullAccess": "有完整的房间访问权限", - "HeadOfGroup": "群组负责人", + "HeadOfGroup": "组长", "HelpCenter": "帮助中心", "HideArticleMenu": "隐藏菜单", "Homepage": "主页",