brunner56's picture
implement app
0bfe2e3
export function formatBytes(bytes: number, k: 1024 | 1000): string {
if (bytes === 0) return '0 B';
const sizes =
k === 1024
? ['B', 'KiB', 'MiB', 'GiB', 'TiB']
: ['B', 'KB', 'MB', 'GB', 'TB'];
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',
};