Spaces:
Paused
Paused
| export function formatSize(bytes: number): string { | |
| if (bytes === 0) return '0 B'; | |
| const k = 1024; | |
| const sizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB']; | |
| const i = Math.floor(Math.log(bytes) / Math.log(k)); | |
| return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; | |
| } | |
| export function formatDuration(durationInMs: number): string { | |
| const seconds = Math.floor(durationInMs / 1000); | |
| const minutes = Math.floor(seconds / 60); | |
| const hours = Math.floor(minutes / 60); | |
| const formattedSeconds = seconds % 60; | |
| const formattedMinutes = minutes % 60; | |
| if (hours > 0) { | |
| return `${hours}h:${formattedMinutes}m:${formattedSeconds}s`; | |
| } else if (formattedSeconds > 0) { | |
| return `${formattedMinutes}m:${formattedSeconds}s`; | |
| } else { | |
| return `${formattedMinutes}m`; | |
| } | |
| } | |
| export function languageToEmoji(language: string): string | undefined { | |
| return languageEmojiMap[language.toLowerCase()]; | |
| } | |
| export function emojiToLanguage(emoji: string): string | undefined { | |
| return Object.entries(languageEmojiMap).find( | |
| ([_, value]) => value === emoji | |
| )?.[0]; | |
| } | |
| export function codeToLanguage(code: string): string | undefined { | |
| return codeLanguageMap[code]; | |
| } | |
| /** | |
| * A mapping of language names to their corresponding emoji flags. | |
| * | |
| * This mapping was adapted from the g0ldy/comet project. | |
| * https://github.com/g0ldyy/comet/blob/de5413425ac30a9d88bc7176862a7ff02027eb7f/comet/utils/general.py#L19C1-L19C18 | |
| */ | |
| const languageEmojiMap: Record<string, string> = { | |
| multi: '๐', | |
| english: '๐ฌ๐ง', | |
| japanese: '๐ฏ๐ต', | |
| chinese: '๐จ๐ณ', | |
| russian: '๐ท๐บ', | |
| arabic: '๐ธ๐ฆ', | |
| portuguese: '๐ต๐น', | |
| spanish: '๐ช๐ธ', | |
| french: '๐ซ๐ท', | |
| german: '๐ฉ๐ช', | |
| italian: '๐ฎ๐น', | |
| korean: '๐ฐ๐ท', | |
| hindi: '๐ฎ๐ณ', | |
| bengali: '๐ง๐ฉ', | |
| punjabi: '๐ต๐ฐ', | |
| marathi: '๐ฎ๐ณ', | |
| gujarati: '๐ฎ๐ณ', | |
| tamil: '๐ฎ๐ณ', | |
| telugu: '๐ฎ๐ณ', | |
| kannada: '๐ฎ๐ณ', | |
| malayalam: '๐ฎ๐ณ', | |
| thai: '๐น๐ญ', | |
| vietnamese: '๐ป๐ณ', | |
| indonesian: '๐ฎ๐ฉ', | |
| turkish: '๐น๐ท', | |
| hebrew: '๐ฎ๐ฑ', | |
| persian: '๐ฎ๐ท', | |
| ukrainian: '๐บ๐ฆ', | |
| greek: '๐ฌ๐ท', | |
| lithuanian: '๐ฑ๐น', | |
| latvian: '๐ฑ๐ป', | |
| estonian: '๐ช๐ช', | |
| polish: '๐ต๐ฑ', | |
| czech: '๐จ๐ฟ', | |
| slovak: '๐ธ๐ฐ', | |
| hungarian: '๐ญ๐บ', | |
| romanian: '๐ท๐ด', | |
| bulgarian: '๐ง๐ฌ', | |
| serbian: '๐ท๐ธ', | |
| croatian: '๐ญ๐ท', | |
| slovenian: '๐ธ๐ฎ', | |
| dutch: '๐ณ๐ฑ', | |
| danish: '๐ฉ๐ฐ', | |
| finnish: '๐ซ๐ฎ', | |
| swedish: '๐ธ๐ช', | |
| norwegian: '๐ณ๐ด', | |
| malay: '๐ฒ๐พ', | |
| latino: '๐๐ป', | |
| Latino: '๐ฒ๐ฝ', | |
| }; | |
| const codeLanguageMap: Record<string, string> = { | |
| EN: 'english', | |
| JA: 'japanese', | |
| ZH: 'chinese', | |
| RU: 'russian', | |
| AR: 'arabic', | |
| PT: 'portuguese', | |
| ES: 'spanish', | |
| FR: 'french', | |
| DE: 'german', | |
| IT: 'italian', | |
| KO: 'korean', | |
| HI: 'hindi', | |
| BN: 'bengali', | |
| PA: 'punjabi', | |
| MR: 'marathi', | |
| GU: 'gujarati', | |
| TA: 'tamil', | |
| TE: 'telugu', | |
| KN: 'kannada', | |
| ML: 'malayalam', | |
| TH: 'thai', | |
| VI: 'vietnamese', | |
| ID: 'indonesian', | |
| TR: 'turkish', | |
| HE: 'hebrew', | |
| FA: 'persian', | |
| UK: 'ukrainian', | |
| EL: 'greek', | |
| LT: 'lithuanian', | |
| LV: 'latvian', | |
| ET: 'estonian', | |
| PL: 'polish', | |
| CS: 'czech', | |
| SK: 'slovak', | |
| HU: 'hungarian', | |
| RO: 'romanian', | |
| BG: 'bulgarian', | |
| SR: 'serbian', | |
| HR: 'croatian', | |
| SL: 'slovenian', | |
| NL: 'dutch', | |
| DA: 'danish', | |
| FI: 'finnish', | |
| SV: 'swedish', | |
| NO: 'norwegian', | |
| MS: 'malay', | |
| LA: 'latino', | |
| MX: 'Latino', | |
| }; | |