mirror of
https://github.com/langgenius/dify.git
synced 2026-05-06 02:18:08 +08:00
refactor(i18n): use JSON with flattened key and namespace (#30114)
Co-authored-by: yyh <yuanyouhuilyz@gmail.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
@ -80,14 +80,14 @@ const DatasetCard = ({
|
||||
const documentCountTooltip = useMemo(() => {
|
||||
const availableDocCount = dataset.total_available_documents ?? 0
|
||||
if (availableDocCount === dataset.document_count)
|
||||
return t('dataset.docAllEnabled', { count: availableDocCount })
|
||||
return t('docAllEnabled', { ns: 'dataset', count: availableDocCount })
|
||||
if (availableDocCount < dataset.document_count)
|
||||
return t('dataset.partialEnabled', { count: dataset.document_count, num: availableDocCount })
|
||||
return t('partialEnabled', { ns: 'dataset', count: dataset.document_count, num: availableDocCount })
|
||||
}, [t, dataset.document_count, dataset.total_available_documents])
|
||||
|
||||
const { formatTimeFromNow } = useFormatTimeFromNow()
|
||||
const editTimeText = useMemo(() => {
|
||||
return `${t('datasetDocuments.segment.editedAt')} ${formatTimeFromNow(dataset.updated_at * 1000)}`
|
||||
return `${t('segment.editedAt', { ns: 'datasetDocuments' })} ${formatTimeFromNow(dataset.updated_at * 1000)}`
|
||||
}, [t, dataset.updated_at, formatTimeFromNow])
|
||||
|
||||
const openRenameModal = useCallback(() => {
|
||||
@ -119,7 +119,7 @@ const DatasetCard = ({
|
||||
URL.revokeObjectURL(url)
|
||||
}
|
||||
catch {
|
||||
Toast.notify({ type: 'error', message: t('app.exportFailed') })
|
||||
Toast.notify({ type: 'error', message: t('exportFailed', { ns: 'app' }) })
|
||||
}
|
||||
finally {
|
||||
setExporting(false)
|
||||
@ -129,7 +129,7 @@ const DatasetCard = ({
|
||||
const detectIsUsedByApp = useCallback(async () => {
|
||||
try {
|
||||
const { is_using: isUsedByApp } = await checkIsUsedInApp(dataset.id)
|
||||
setConfirmMessage(isUsedByApp ? t('dataset.datasetUsedByApp')! : t('dataset.deleteDatasetConfirmContent')!)
|
||||
setConfirmMessage(isUsedByApp ? t('datasetUsedByApp', { ns: 'dataset' })! : t('deleteDatasetConfirmContent', { ns: 'dataset' })!)
|
||||
setShowConfirmDelete(true)
|
||||
}
|
||||
catch (e: any) {
|
||||
@ -141,7 +141,7 @@ const DatasetCard = ({
|
||||
const onConfirmDelete = useCallback(async () => {
|
||||
try {
|
||||
await deleteDataset(dataset.id)
|
||||
Toast.notify({ type: 'success', message: t('dataset.datasetDeleted') })
|
||||
Toast.notify({ type: 'success', message: t('datasetDeleted', { ns: 'dataset' }) })
|
||||
if (onSuccess)
|
||||
onSuccess()
|
||||
}
|
||||
@ -171,14 +171,14 @@ const DatasetCard = ({
|
||||
>
|
||||
{!dataset.embedding_available && (
|
||||
<CornerLabel
|
||||
label={t('dataset.cornerLabel.unavailable')}
|
||||
label={t('cornerLabel.unavailable', { ns: 'dataset' })}
|
||||
className="absolute right-0 top-0 z-10"
|
||||
labelClassName="rounded-tr-xl"
|
||||
/>
|
||||
)}
|
||||
{dataset.embedding_available && dataset.runtime_mode === 'rag_pipeline' && (
|
||||
<CornerLabel
|
||||
label={t('dataset.cornerLabel.pipeline')}
|
||||
label={t('cornerLabel.pipeline', { ns: 'dataset' })}
|
||||
className="absolute right-0 top-0 z-10"
|
||||
labelClassName="rounded-tr-xl"
|
||||
/>
|
||||
@ -211,15 +211,15 @@ const DatasetCard = ({
|
||||
<div className="truncate" title={editTimeText}>{editTimeText}</div>
|
||||
</div>
|
||||
<div className="system-2xs-medium-uppercase flex items-center gap-x-3 text-text-tertiary">
|
||||
{isExternalProvider && <span>{t('dataset.externalKnowledgeBase')}</span>}
|
||||
{isExternalProvider && <span>{t('externalKnowledgeBase', { ns: 'dataset' })}</span>}
|
||||
{!isExternalProvider && isShowDocModeInfo && (
|
||||
<>
|
||||
{dataset.doc_form && (
|
||||
<span
|
||||
className="min-w-0 max-w-full truncate"
|
||||
title={t(`dataset.chunkingMode.${DOC_FORM_TEXT[dataset.doc_form]}` as any) as string}
|
||||
title={t(`chunkingMode.${DOC_FORM_TEXT[dataset.doc_form]}`, { ns: 'dataset' })}
|
||||
>
|
||||
{t(`dataset.chunkingMode.${DOC_FORM_TEXT[dataset.doc_form]}` as any) as string}
|
||||
{t(`chunkingMode.${DOC_FORM_TEXT[dataset.doc_form]}`, { ns: 'dataset' })}
|
||||
</span>
|
||||
)}
|
||||
{dataset.indexing_technique && (
|
||||
@ -233,9 +233,9 @@ const DatasetCard = ({
|
||||
{dataset.is_multimodal && (
|
||||
<span
|
||||
className="min-w-0 max-w-full truncate"
|
||||
title={t('dataset.multimodal')}
|
||||
title={t('multimodal', { ns: 'dataset' })}
|
||||
>
|
||||
{t('dataset.multimodal')}
|
||||
{t('multimodal', { ns: 'dataset' })}
|
||||
</span>
|
||||
)}
|
||||
</>
|
||||
@ -294,7 +294,7 @@ const DatasetCard = ({
|
||||
</div>
|
||||
</Tooltip>
|
||||
{!isExternalProvider && (
|
||||
<Tooltip popupContent={`${dataset.app_count} ${t('dataset.appCount')}`}>
|
||||
<Tooltip popupContent={`${dataset.app_count} ${t('appCount', { ns: 'dataset' })}`}>
|
||||
<div className="flex items-center gap-x-1">
|
||||
<RiRobot2Fill className="size-3 text-text-quaternary" />
|
||||
<span className="system-xs-medium">{dataset.app_count}</span>
|
||||
@ -302,7 +302,7 @@ const DatasetCard = ({
|
||||
</Tooltip>
|
||||
)}
|
||||
<span className="system-xs-regular text-divider-deep">/</span>
|
||||
<span className="system-xs-regular">{`${t('dataset.updated')} ${formatTimeFromNow(dataset.updated_at * 1000)}`}</span>
|
||||
<span className="system-xs-regular">{`${t('updated', { ns: 'dataset' })} ${formatTimeFromNow(dataset.updated_at * 1000)}`}</span>
|
||||
</div>
|
||||
<div className="absolute right-2 top-2 z-[15] hidden group-hover:block">
|
||||
<CustomPopover
|
||||
@ -342,7 +342,7 @@ const DatasetCard = ({
|
||||
)}
|
||||
{showConfirmDelete && (
|
||||
<Confirm
|
||||
title={t('dataset.deleteDatasetConfirmTitle')}
|
||||
title={t('deleteDatasetConfirmTitle', { ns: 'dataset' })}
|
||||
content={confirmMessage}
|
||||
isShow={showConfirmDelete}
|
||||
onConfirm={onConfirmDelete}
|
||||
|
||||
@ -26,13 +26,13 @@ const Operations = ({
|
||||
<div className="flex flex-col p-1">
|
||||
<OperationItem
|
||||
Icon={RiEditLine}
|
||||
name={t('common.operation.edit')}
|
||||
name={t('operation.edit', { ns: 'common' })}
|
||||
handleClick={openRenameModal}
|
||||
/>
|
||||
{showExportPipeline && (
|
||||
<OperationItem
|
||||
Icon={RiFileDownloadLine}
|
||||
name={t('datasetPipeline.operations.exportPipeline')}
|
||||
name={t('operations.exportPipeline', { ns: 'datasetPipeline' })}
|
||||
handleClick={handleExportPipeline}
|
||||
/>
|
||||
)}
|
||||
@ -43,7 +43,7 @@ const Operations = ({
|
||||
<div className="flex flex-col p-1">
|
||||
<OperationItem
|
||||
Icon={RiDeleteBinLine}
|
||||
name={t('common.operation.delete')}
|
||||
name={t('operation.delete', { ns: 'common' })}
|
||||
handleClick={detectIsUsedByApp}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@ -8,15 +8,15 @@ const DatasetFooter = () => {
|
||||
|
||||
return (
|
||||
<footer className="shrink-0 px-12 py-6">
|
||||
<h3 className="text-gradient text-xl font-semibold leading-tight">{t('dataset.didYouKnow')}</h3>
|
||||
<h3 className="text-gradient text-xl font-semibold leading-tight">{t('didYouKnow', { ns: 'dataset' })}</h3>
|
||||
<p className="mt-1 text-sm font-normal leading-tight text-text-secondary">
|
||||
{t('dataset.intro1')}
|
||||
<span className="inline-flex items-center gap-1 text-text-accent">{t('dataset.intro2')}</span>
|
||||
{t('dataset.intro3')}
|
||||
{t('intro1', { ns: 'dataset' })}
|
||||
<span className="inline-flex items-center gap-1 text-text-accent">{t('intro2', { ns: 'dataset' })}</span>
|
||||
{t('intro3', { ns: 'dataset' })}
|
||||
<br />
|
||||
{t('dataset.intro4')}
|
||||
<span className="inline-flex items-center gap-1 text-text-accent">{t('dataset.intro5')}</span>
|
||||
{t('dataset.intro6')}
|
||||
{t('intro4', { ns: 'dataset' })}
|
||||
<span className="inline-flex items-center gap-1 text-text-accent">{t('intro5', { ns: 'dataset' })}</span>
|
||||
{t('intro6', { ns: 'dataset' })}
|
||||
</p>
|
||||
</footer>
|
||||
)
|
||||
|
||||
@ -37,7 +37,7 @@ const Datasets = ({
|
||||
const observerRef = useRef<IntersectionObserver>(null)
|
||||
|
||||
useEffect(() => {
|
||||
document.title = `${t('dataset.knowledge')} - Dify`
|
||||
document.title = `${t('knowledge', { ns: 'dataset' })} - Dify`
|
||||
}, [t])
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
@ -32,7 +32,7 @@ const List = () => {
|
||||
const showTagManagementModal = useTagStore(s => s.showTagManagementModal)
|
||||
const { showExternalApiPanel, setShowExternalApiPanel } = useExternalApiPanel()
|
||||
const [includeAll, { toggle: toggleIncludeAll }] = useBoolean(false)
|
||||
useDocumentTitle(t('dataset.knowledge'))
|
||||
useDocumentTitle(t('knowledge', { ns: 'dataset' }))
|
||||
|
||||
const [keywords, setKeywords] = useState('')
|
||||
const [searchKeywords, setSearchKeywords] = useState('')
|
||||
@ -66,10 +66,10 @@ const List = () => {
|
||||
<CheckboxWithLabel
|
||||
isChecked={includeAll}
|
||||
onChange={toggleIncludeAll}
|
||||
label={t('dataset.allKnowledge')}
|
||||
label={t('allKnowledge', { ns: 'dataset' })}
|
||||
labelClassName="system-md-regular text-text-secondary"
|
||||
className="mr-2"
|
||||
tooltip={t('dataset.allKnowledgeDescription') as string}
|
||||
tooltip={t('allKnowledgeDescription', { ns: 'dataset' }) as string}
|
||||
/>
|
||||
)}
|
||||
<TagFilter type="knowledge" value={tagFilterValue} onChange={handleTagsChange} />
|
||||
@ -87,7 +87,7 @@ const List = () => {
|
||||
onClick={() => setShowExternalApiPanel(true)}
|
||||
>
|
||||
<ApiConnectionMod className="h-4 w-4 text-components-button-secondary-text" />
|
||||
<div className="system-sm-medium flex items-center justify-center gap-1 px-0.5 text-components-button-secondary-text">{t('dataset.externalAPIPanelTitle')}</div>
|
||||
<div className="system-sm-medium flex items-center justify-center gap-1 px-0.5 text-components-button-secondary-text">{t('externalAPIPanelTitle', { ns: 'dataset' })}</div>
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -17,19 +17,19 @@ const CreateAppCard = () => {
|
||||
<Option
|
||||
href="/datasets/create"
|
||||
Icon={RiAddLine}
|
||||
text={t('dataset.createDataset')}
|
||||
text={t('createDataset', { ns: 'dataset' })}
|
||||
/>
|
||||
<Option
|
||||
href="/datasets/create-from-pipeline"
|
||||
Icon={RiFunctionAddLine}
|
||||
text={t('dataset.createFromPipeline')}
|
||||
text={t('createFromPipeline', { ns: 'dataset' })}
|
||||
/>
|
||||
</div>
|
||||
<div className="border-t-[0.5px] border-divider-subtle p-2">
|
||||
<Option
|
||||
href="/datasets/connect"
|
||||
Icon={ApiConnectionMod}
|
||||
text={t('dataset.connectDataset')}
|
||||
text={t('connectDataset', { ns: 'dataset' })}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user