locale

国际化

数据格式等常见, 支持中文zh-CN与英文en-US

zh-CN

import { useDark } from '@rspress/core/runtime'

import { useRef, useEffect } from 'react'
import VChart from '@visactor/vchart'
import { registerAll, VSeed, Builder, isPivotChart, isVChart, isVTable } from '@visactor/vseed'
import { ListTable, PivotChart, register } from '@visactor/vtable'

registerAll()
register.chartModule('vchart', VChart)

const Demo = () => {
  const vseed: VSeed = {
    chartType: 'columnParallel',
    locale: 'zh-CN',
    measures: [
      {
        id: 'profit',
        alias: '利润',
        parentId: 'group1',
        autoFormat: true,
      },
      {
        id: 'sales',
        alias: '销售额',
        parentId: 'group1',
        autoFormat: true,
      },
      {
        id: 'discount',
        alias: '折扣',
        parentId: 'group2',
        autoFormat: true,
      },
      {
        id: 'rateOfReturn',
        alias: '回报率',
        autoFormat: true,
      },
    ],
    dimensions: [{ id: 'date', alias: '日期' }],
    dataset: [
      { date: '2019', profit: 10000, sales: 200000, discount: 0.5, rateOfReturn: 0.001 },
      { date: '2020', profit: 20000, sales: 400000, discount: 0.2, rateOfReturn: 0.002 },
      { date: '2021', profit: 30000, sales: 600000, discount: 0.4, rateOfReturn: 0.003 },
      { date: '2022', profit: 40000, sales: 800000, discount: 0.2, rateOfReturn: 0.004 },
      { date: '2023', profit: 50000, sales: 1000000, discount: 0.05, rateOfReturn: 0.005 },
    ],
  }

  return <SimpleVSeedRender vseed={vseed} />
}

const SimpleVSeedRender = (props: { vseed: VSeed }) => {
  const { vseed } = props
  const ref = useRef<HTMLDivElement>(null)
  const dark = useDark()
  useEffect(() => {
    if (!ref.current) {
      return
    }
    const theme = dark ? 'dark' : 'light'
    const spec = Builder.from({ ...vseed, theme }).build()

    if (isPivotChart(vseed)) {
      const tableInstance = new PivotChart(ref.current, spec)
      return () => tableInstance.release()
    } else if (isVChart(vseed)) {
      const vchart = new VChart(spec, { dom: ref.current })
      vchart.renderSync()
      return () => vchart.release()
    } else if (isVTable(vseed)) {
      const tableInstance = new ListTable(ref.current, spec)
      return () => tableInstance.release()
    }
  }, [vseed, dark])

  return <div ref={ref} style={{ height: 300, width: '100%' }}></div>
}

export default Demo

en-US

import { useDark } from '@rspress/core/runtime'

import { useRef, useEffect } from 'react'
import VChart from '@visactor/vchart'
import { registerAll, VSeed, Builder, isPivotChart, isVChart, isVTable } from '@visactor/vseed'
import { ListTable, PivotChart, register } from '@visactor/vtable'

registerAll()
register.chartModule('vchart', VChart)

const Demo = () => {
  const vseed: VSeed = {
    chartType: 'columnParallel',
    locale: 'en-US',
    measures: [
      {
        id: 'profit',
        alias: '利润',
        parentId: 'group1',
        autoFormat: true,
      },
      {
        id: 'sales',
        alias: '销售额',
        parentId: 'group1',
        autoFormat: true,
      },
      {
        id: 'discount',
        alias: '折扣',
        parentId: 'group2',
        autoFormat: true,
      },
      {
        id: 'rateOfReturn',
        alias: '回报率',
        autoFormat: true,
      },
    ],
    dimensions: [{ id: 'date', alias: '日期' }],
    dataset: [
      { date: '2019', profit: 10000, sales: 200000, discount: 0.5, rateOfReturn: 0.001 },
      { date: '2020', profit: 20000, sales: 400000, discount: 0.2, rateOfReturn: 0.002 },
      { date: '2021', profit: 30000, sales: 600000, discount: 0.4, rateOfReturn: 0.003 },
      { date: '2022', profit: 40000, sales: 800000, discount: 0.2, rateOfReturn: 0.004 },
      { date: '2023', profit: 50000, sales: 1000000, discount: 0.05, rateOfReturn: 0.005 },
    ],
  }

  return <SimpleVSeedRender vseed={vseed} />
}

const SimpleVSeedRender = (props: { vseed: VSeed }) => {
  const { vseed } = props
  const ref = useRef<HTMLDivElement>(null)
  const dark = useDark()
  useEffect(() => {
    if (!ref.current) {
      return
    }
    const theme = dark ? 'dark' : 'light'
    const spec = Builder.from({ ...vseed, theme }).build()

    if (isPivotChart(vseed)) {
      const tableInstance = new PivotChart(ref.current, spec)
      return () => tableInstance.release()
    } else if (isVChart(vseed)) {
      const vchart = new VChart(spec, { dom: ref.current })
      vchart.renderSync()
      return () => vchart.release()
    } else if (isVTable(vseed)) {
      const tableInstance = new ListTable(ref.current, spec)
      return () => tableInstance.release()
    }
  }, [vseed, dark])

  return <div ref={ref} style={{ height: 300, width: '100%' }}></div>
}

export default Demo