mirror of
https://github.com/modrinth/code.git
synced 2026-08-27 01:54:47 +00:00
40 lines
978 B
TypeScript
40 lines
978 B
TypeScript
import { defineMessage, useVIntl } from '#ui/composables/i18n.ts'
|
|
|
|
const messages = [
|
|
defineMessage({
|
|
id: 'format.bytes.0',
|
|
defaultMessage: '{count, plural, one {# byte} other {# bytes}}',
|
|
}),
|
|
defineMessage({
|
|
id: 'format.bytes.1',
|
|
defaultMessage: '{count, number} KiB',
|
|
}),
|
|
defineMessage({
|
|
id: 'format.bytes.2',
|
|
defaultMessage: '{count, number} MiB',
|
|
}),
|
|
defineMessage({
|
|
id: 'format.bytes.3',
|
|
defaultMessage: '{count, number} GiB',
|
|
}),
|
|
defineMessage({
|
|
id: 'format.bytes.4',
|
|
defaultMessage: '{count, number} TiB',
|
|
}),
|
|
]
|
|
|
|
export function useFormatBytes() {
|
|
const { formatMessage } = useVIntl()
|
|
|
|
function format(bytes: number, decimals = 2): string {
|
|
if (bytes === 0) return formatMessage(messages[0], { count: 0 })
|
|
|
|
const exponent = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), messages.length - 1)
|
|
return formatMessage(messages[exponent], {
|
|
count: (bytes / Math.pow(1024, exponent)).toFixed(decimals),
|
|
})
|
|
}
|
|
|
|
return format
|
|
}
|