diff --git a/web/app/components/datasets/list/dataset-card/index.tsx b/web/app/components/datasets/list/dataset-card/index.tsx
index f95e7b2199..db8ee0226d 100644
--- a/web/app/components/datasets/list/dataset-card/index.tsx
+++ b/web/app/components/datasets/list/dataset-card/index.tsx
@@ -11,9 +11,6 @@ import cn from '@/utils/classnames'
import { useHover } from 'ahooks'
import { RiFileTextFill, RiMoreFill, RiRobot2Fill } from '@remixicon/react'
import Tooltip from '@/app/components/base/tooltip'
-import { useGetLanguage } from '@/context/i18n'
-import dayjs from 'dayjs'
-import relativeTime from 'dayjs/plugin/relativeTime'
import { checkIsUsedInApp, deleteDataset } from '@/service/datasets'
import RenameDatasetModal from '../../rename-modal'
import Confirm from '@/app/components/base/confirm'
@@ -24,7 +21,7 @@ import AppIcon from '@/app/components/base/app-icon'
import CornerLabel from '@/app/components/base/corner-label'
import { DOC_FORM_ICON_WITH_BG, DOC_FORM_TEXT } from '@/models/datasets'
import { useExportPipelineDSL } from '@/service/use-pipeline'
-dayjs.extend(relativeTime)
+import { useFormatTimeFromNow } from '@/hooks/use-format-time-from-now'
const EXTERNAL_PROVIDER = 'external'
@@ -87,10 +84,7 @@ const DatasetCard = ({
return t('dataset.partialEnabled', { count: dataset.document_count, num: availableDocCount })
}, [t, dataset.document_count, dataset.total_available_documents])
- const language = useGetLanguage()
- const formatTimeFromNow = useCallback((time: number) => {
- return dayjs(time * 1_000).locale(language === 'zh_Hans' ? 'zh-cn' : language.replace('_', '-')).fromNow()
- }, [language])
+ const { formatTimeFromNow } = useFormatTimeFromNow()
const openRenameModal = useCallback(() => {
setShowRenameModal(true)
@@ -269,7 +263,7 @@ const DatasetCard = ({
)}
/
- {`${t('dataset.updated')} ${formatTimeFromNow(dataset.updated_at)}`}
+ {`${t('dataset.updated')} ${formatTimeFromNow(dataset.updated_at * 1000)}`}
{
- const { locale } = useI18N()
- const formatTimeFromNow = useCallback((time: number) => {
- return dayjs(time).locale(locale === 'zh-Hans' ? 'zh-cn' : locale).fromNow()
- }, [locale])
-
- return { formatTimeFromNow }
-}
diff --git a/web/hooks/use-format-time-from-now.ts b/web/hooks/use-format-time-from-now.ts
index 82704252ac..db3be93df2 100644
--- a/web/hooks/use-format-time-from-now.ts
+++ b/web/hooks/use-format-time-from-now.ts
@@ -2,14 +2,59 @@ import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
import { useCallback } from 'react'
import { useI18N } from '@/context/i18n'
+import type { Locale } from '@/i18n-config'
+import 'dayjs/locale/de'
+import 'dayjs/locale/es'
+import 'dayjs/locale/fa'
+import 'dayjs/locale/fr'
+import 'dayjs/locale/hi'
+import 'dayjs/locale/id'
+import 'dayjs/locale/it'
+import 'dayjs/locale/ja'
+import 'dayjs/locale/ko'
+import 'dayjs/locale/pl'
+import 'dayjs/locale/pt-br'
+import 'dayjs/locale/ro'
+import 'dayjs/locale/ru'
+import 'dayjs/locale/sl'
+import 'dayjs/locale/th'
+import 'dayjs/locale/tr'
+import 'dayjs/locale/uk'
+import 'dayjs/locale/vi'
import 'dayjs/locale/zh-cn'
+import 'dayjs/locale/zh-tw'
dayjs.extend(relativeTime)
+const localeMap: Record = {
+ 'en-US': 'en',
+ 'zh-Hans': 'zh-cn',
+ 'zh-Hant': 'zh-tw',
+ 'pt-BR': 'pt-br',
+ 'es-ES': 'es',
+ 'fr-FR': 'fr',
+ 'de-DE': 'de',
+ 'ja-JP': 'ja',
+ 'ko-KR': 'ko',
+ 'ru-RU': 'ru',
+ 'it-IT': 'it',
+ 'th-TH': 'th',
+ 'id-ID': 'id',
+ 'uk-UA': 'uk',
+ 'vi-VN': 'vi',
+ 'ro-RO': 'ro',
+ 'pl-PL': 'pl',
+ 'hi-IN': 'hi',
+ 'tr-TR': 'tr',
+ 'fa-IR': 'fa',
+ 'sl-SI': 'sl',
+}
+
export const useFormatTimeFromNow = () => {
const { locale } = useI18N()
const formatTimeFromNow = useCallback((time: number) => {
- return dayjs(time).locale(locale === 'zh-Hans' ? 'zh-cn' : locale).fromNow()
+ const dayjsLocale = localeMap[locale] ?? 'en'
+ return dayjs(time).locale(dayjsLocale).fromNow()
}, [locale])
return { formatTimeFromNow }