UNPKG

@brightspace-ui/intl

Version:

Internationalization APIs for number, date, time and file size formatting and parsing in D2L Brightspace.

100 lines (85 loc) 2.1 kB
import { getLanguage, validateFormatValue } from './common.js'; import { formatNumber } from './number.js'; export function getFileSizeDescriptor() { const language = getLanguage(); const val = { 'gigabyte': 'GB', 'megabyte': 'MB', 'kilobyte': 'KB', 'bytes': 'bytes', 'byte': 'byte' }; switch (language) { case 'zh-tw': val.bytes = val.byte = '位元組'; return val; } const subtags = language.split('-'); const baseLanguage = subtags[0]; switch (baseLanguage) { case 'ar': val.gigabyte = 'غيغا بايت'; val.megabyte = 'ميغا بايت'; val.kilobyte = 'كيلو بايت'; val.bytes = val.byte = 'بايت'; break; case 'cy': val.bytes = val.byte = 'beit'; break; case 'fr': val.gigabyte = 'Go'; val.megabyte = 'Mo'; val.kilobyte = 'Ko'; val.bytes = 'octets'; val.byte = 'octet'; break; case 'hi': val.bytes = 'बाइट्स'; val.byte = 'बाइट'; break; case 'ja': val.bytes = val.byte = 'バイト'; break; case 'ko': val.bytes = val.byte = '바이트'; break; case 'sv': val.bytes = 'byte'; break; case 'tr': val.bytes = val.byte = 'bayt'; break; case 'zh': val.bytes = val.byte = '字节'; break; } return val; } export function formatFileSize(value) { const descriptor = getFileSizeDescriptor(); value = validateFormatValue(value); const fileSizeUnits = [ { unit: descriptor.gigabyte, num: Math.pow(1024, 3) }, { unit: descriptor.megabyte, num: Math.pow(1024, 2) }, { unit: descriptor.kilobyte, num: 1024 }, { unit: descriptor.bytes, num: 1 } ]; let formatUnit, size; if (value === 0) { formatUnit = descriptor.bytes; size = 0; } else if (Math.abs(value) === 1) { formatUnit = descriptor.byte; size = value; } else { for (let i = 0; i < fileSizeUnits.length; i++) { const unitSize = fileSizeUnits[i]; if (Math.abs(value) >= unitSize.num) { formatUnit = unitSize.unit; size = formatNumber(value / unitSize.num, { maximumFractionDigits: 2 }); break; } } } return `${size} ${formatUnit}`; }