From a4c66e3659f0d5eef14fcca697d4058a2526b9cc Mon Sep 17 00:00:00 2001 From: twwu Date: Fri, 13 Dec 2024 14:45:31 +0800 Subject: [PATCH 1/2] feat: improve translation handling in segment components --- .../detail/completed/child-segment-detail.tsx | 25 ++++++++++++++---- .../detail/completed/child-segment-list.tsx | 26 ++++++++++++++++--- .../detail/completed/display-toggle.tsx | 5 +++- .../documents/detail/completed/index.tsx | 12 ++++++--- .../detail/completed/new-child-segment.tsx | 14 ++++++---- .../detail/completed/segment-card.tsx | 19 +++++++++++--- .../detail/completed/segment-detail.tsx | 23 +++++++++++++--- .../datasets/documents/detail/new-segment.tsx | 10 +++++-- .../hit-testing/components/result-item.tsx | 2 +- .../datasets/hit-testing/hit-detail.tsx | 2 +- web/i18n/en-US/dataset-documents.ts | 22 ++++++++++++++-- web/i18n/zh-Hans/dataset-documents.ts | 24 ++++++++++++++--- 12 files changed, 150 insertions(+), 34 deletions(-) diff --git a/web/app/components/datasets/documents/detail/completed/child-segment-detail.tsx b/web/app/components/datasets/documents/detail/completed/child-segment-detail.tsx index a305c48feb..ad4ba64264 100644 --- a/web/app/components/datasets/documents/detail/completed/child-segment-detail.tsx +++ b/web/app/components/datasets/documents/detail/completed/child-segment-detail.tsx @@ -1,4 +1,4 @@ -import React, { type FC, useState } from 'react' +import React, { type FC, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import { RiCloseLine, @@ -56,18 +56,33 @@ const ChildSegmentDetail: FC = ({ onUpdate(chunkId, childChunkInfo?.id || '', content) } + const wordCountText = useMemo(() => { + const count = content.length + return `${formatNumber(count)} ${t('datasetDocuments.segment.characters', { count })}` + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [content.length]) + + const EditTimeText = useMemo(() => { + const timeText = formatTime({ + date: (childChunkInfo?.updated_at ?? 0) * 1000, + dateFormat: 'MM/DD/YYYY h:mm:ss', + }) + return `${t('datasetDocuments.segment.editedAt')} ${timeText}` + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [childChunkInfo?.updated_at]) + return (
-
{'Edit Child Chunk'}
+
{t('datasetDocuments.segment.editChildChunk')}
- + - {formatNumber(content.length)} {t('datasetDocuments.segment.characters')} + {wordCountText} - {`Edited at ${formatTime({ date: (childChunkInfo?.created_at ?? 0) * 1000, dateFormat: 'MM/DD/YYYY h:mm:ss' })}`} + {EditTimeText}
diff --git a/web/app/components/datasets/documents/detail/completed/child-segment-list.tsx b/web/app/components/datasets/documents/detail/completed/child-segment-list.tsx index c1f44648fb..ab22aa3123 100644 --- a/web/app/components/datasets/documents/detail/completed/child-segment-list.tsx +++ b/web/app/components/datasets/documents/detail/completed/child-segment-list.tsx @@ -1,11 +1,13 @@ import { type FC, useMemo, useState } from 'react' import { RiArrowDownSLine, RiArrowRightSLine } from '@remixicon/react' +import { useTranslation } from 'react-i18next' import { EditSlice } from '../../../formatted-text/flavours/edit-slice' import { useDocumentContext } from '../index' import type { ChildChunkDetail } from '@/models/datasets' import Input from '@/app/components/base/input' import classNames from '@/utils/classnames' import Divider from '@/app/components/base/divider' +import { formatNumber } from '@/utils/format' type IChildSegmentCardProps = { childChunks: ChildChunkDetail[] @@ -30,6 +32,7 @@ const ChildSegmentList: FC = ({ total, inputValue, }) => { + const { t } = useTranslation() const parentMode = useDocumentContext(s => s.parentMode) const [collapsed, setCollapsed] = useState(true) @@ -50,6 +53,21 @@ const ChildSegmentList: FC = ({ return enabled ? '' : 'opacity-50 group-hover/card:opacity-100' }, [enabled]) + const totalText = useMemo(() => { + const text = isFullDocMode + ? !total + ? '--' + : formatNumber(total) + : formatNumber(childChunks.length) + const count = isFullDocMode + ? text === '--' + ? 0 + : total + : childChunks.length + return `${isFullDocMode ? count : childChunks.length} ${t('datasetDocuments.segment.childChunks', { count })}` + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [isFullDocMode, total, childChunks.length]) + return (
{isFullDocMode ? : null} @@ -67,16 +85,16 @@ const ChildSegmentList: FC = ({ : () : null } - {`${total} CHILD CHUNKS`} + {totalText} ·
{isFullDocMode @@ -98,7 +116,7 @@ const ChildSegmentList: FC = ({ const edited = childChunk.updated_at !== childChunk.created_at return onDelete?.(childChunk.segment_id, childChunk.id)} className='line-clamp-3' diff --git a/web/app/components/datasets/documents/detail/completed/display-toggle.tsx b/web/app/components/datasets/documents/detail/completed/display-toggle.tsx index 890545df41..5630a2ba74 100644 --- a/web/app/components/datasets/documents/detail/completed/display-toggle.tsx +++ b/web/app/components/datasets/documents/detail/completed/display-toggle.tsx @@ -1,4 +1,5 @@ import React, { type FC } from 'react' +import { useTranslation } from 'react-i18next' import { RiLineHeight } from '@remixicon/react' import Tooltip from '@/app/components/base/tooltip' import { Collapse } from '@/app/components/base/icons/src/public/knowledge' @@ -12,9 +13,11 @@ const DisplayToggle: FC = ({ isCollapsed, toggleCollapsed, }) => { + const { t } = useTranslation() + return (