Procházet zdrojové kódy

chore: time from now i18n support (#26328)

tags/1.9.1
非法操作 před 1 měsícem
rodič
revize
36406cd62f
Žádný účet není propojen s e-mailovou adresou tvůrce revize

+ 3
- 9
web/app/components/datasets/list/dataset-card/index.tsx Zobrazit soubor

import { useHover } from 'ahooks' import { useHover } from 'ahooks'
import { RiFileTextFill, RiMoreFill, RiRobot2Fill } from '@remixicon/react' import { RiFileTextFill, RiMoreFill, RiRobot2Fill } from '@remixicon/react'
import Tooltip from '@/app/components/base/tooltip' 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 { checkIsUsedInApp, deleteDataset } from '@/service/datasets'
import RenameDatasetModal from '../../rename-modal' import RenameDatasetModal from '../../rename-modal'
import Confirm from '@/app/components/base/confirm' import Confirm from '@/app/components/base/confirm'
import CornerLabel from '@/app/components/base/corner-label' import CornerLabel from '@/app/components/base/corner-label'
import { DOC_FORM_ICON_WITH_BG, DOC_FORM_TEXT } from '@/models/datasets' import { DOC_FORM_ICON_WITH_BG, DOC_FORM_TEXT } from '@/models/datasets'
import { useExportPipelineDSL } from '@/service/use-pipeline' import { useExportPipelineDSL } from '@/service/use-pipeline'
dayjs.extend(relativeTime)
import { useFormatTimeFromNow } from '@/hooks/use-format-time-from-now'


const EXTERNAL_PROVIDER = 'external' const EXTERNAL_PROVIDER = 'external'


return t('dataset.partialEnabled', { count: dataset.document_count, num: availableDocCount }) return t('dataset.partialEnabled', { count: dataset.document_count, num: availableDocCount })
}, [t, dataset.document_count, dataset.total_available_documents]) }, [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(() => { const openRenameModal = useCallback(() => {
setShowRenameModal(true) setShowRenameModal(true)
</Tooltip> </Tooltip>
)} )}
<span className='system-xs-regular text-divider-deep'>/</span> <span className='system-xs-regular text-divider-deep'>/</span>
<span className='system-xs-regular'>{`${t('dataset.updated')} ${formatTimeFromNow(dataset.updated_at)}`}</span>
<span className='system-xs-regular'>{`${t('dataset.updated')} ${formatTimeFromNow(dataset.updated_at * 1000)}`}</span>
</div> </div>
<div className='absolute right-2 top-2 z-[5] hidden group-hover:block'> <div className='absolute right-2 top-2 z-[5] hidden group-hover:block'>
<CustomPopover <CustomPopover

+ 1
- 1
web/app/components/rag-pipeline/components/rag-pipeline-header/publisher/popup.tsx Zobrazit soubor

import Button from '@/app/components/base/button' import Button from '@/app/components/base/button'
import { import {
useChecklistBeforePublish, useChecklistBeforePublish,
useFormatTimeFromNow,
} from '@/app/components/workflow/hooks' } from '@/app/components/workflow/hooks'
import Divider from '@/app/components/base/divider' import Divider from '@/app/components/base/divider'
import { getKeyboardKeyCodeBySystem, getKeyboardKeyNameBySystem } from '@/app/components/workflow/utils' import { getKeyboardKeyCodeBySystem, getKeyboardKeyNameBySystem } from '@/app/components/workflow/utils'
import { useModalContextSelector } from '@/context/modal-context' import { useModalContextSelector } from '@/context/modal-context'
import Link from 'next/link' import Link from 'next/link'
import { useDatasetApiAccessUrl } from '@/hooks/use-api-access-url' import { useDatasetApiAccessUrl } from '@/hooks/use-api-access-url'
import { useFormatTimeFromNow } from '@/hooks/use-format-time-from-now'


const PUBLISH_SHORTCUT = ['ctrl', '⇧', 'P'] const PUBLISH_SHORTCUT = ['ctrl', '⇧', 'P']



+ 0
- 1
web/app/components/workflow/hooks/index.ts Zobrazit soubor

export * from './use-inspect-vars-crud' export * from './use-inspect-vars-crud'
export * from './use-set-workflow-vars-with-value' export * from './use-set-workflow-vars-with-value'
export * from './use-workflow-search' export * from './use-workflow-search'
export * from './use-format-time-from-now'

+ 0
- 12
web/app/components/workflow/hooks/use-format-time-from-now.ts Zobrazit soubor

import dayjs from 'dayjs'
import { useCallback } from 'react'
import { useI18N } from '@/context/i18n'

export const useFormatTimeFromNow = () => {
const { locale } = useI18N()
const formatTimeFromNow = useCallback((time: number) => {
return dayjs(time).locale(locale === 'zh-Hans' ? 'zh-cn' : locale).fromNow()
}, [locale])

return { formatTimeFromNow }
}

+ 46
- 1
web/hooks/use-format-time-from-now.ts Zobrazit soubor

import relativeTime from 'dayjs/plugin/relativeTime' import relativeTime from 'dayjs/plugin/relativeTime'
import { useCallback } from 'react' import { useCallback } from 'react'
import { useI18N } from '@/context/i18n' 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-cn'
import 'dayjs/locale/zh-tw'


dayjs.extend(relativeTime) dayjs.extend(relativeTime)


const localeMap: Record<Locale, string> = {
'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 = () => { export const useFormatTimeFromNow = () => {
const { locale } = useI18N() const { locale } = useI18N()
const formatTimeFromNow = useCallback((time: number) => { 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]) }, [locale])


return { formatTimeFromNow } return { formatTimeFromNow }

Načítá se…
Zrušit
Uložit