mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-21 02:37:05 +02:00
111 lines
5.1 KiB
TypeScript
111 lines
5.1 KiB
TypeScript
import { Locale } from 'discord.js';
|
|
|
|
interface LanguageData {
|
|
englishName: string;
|
|
nativeName: string;
|
|
}
|
|
|
|
export class Language {
|
|
public static Default = Locale.EnglishUS;
|
|
public static Enabled: Locale[] = [Locale.EnglishUS, Locale.EnglishGB];
|
|
|
|
// See https://discord.com/developers/docs/reference#locales
|
|
public static Data: {
|
|
[key in Locale]: LanguageData;
|
|
} = {
|
|
bg: { englishName: 'Bulgarian', nativeName: 'български' },
|
|
cs: { englishName: 'Czech', nativeName: 'Čeština' },
|
|
da: { englishName: 'Danish', nativeName: 'Dansk' },
|
|
de: { englishName: 'German', nativeName: 'Deutsch' },
|
|
el: { englishName: 'Greek', nativeName: 'Ελληνικά' },
|
|
'en-GB': { englishName: 'English, UK', nativeName: 'English, UK' },
|
|
'en-US': { englishName: 'English, US', nativeName: 'English, US' },
|
|
'es-ES': { englishName: 'Spanish', nativeName: 'Español' },
|
|
fi: { englishName: 'Finnish', nativeName: 'Suomi' },
|
|
fr: { englishName: 'French', nativeName: 'Français' },
|
|
hi: { englishName: 'Hindi', nativeName: 'हिन्दी' },
|
|
hr: { englishName: 'Croatian', nativeName: 'Hrvatski' },
|
|
hu: { englishName: 'Hungarian', nativeName: 'Magyar' },
|
|
id: { englishName: 'Indonesian', nativeName: 'Bahasa Indonesia' },
|
|
it: { englishName: 'Italian', nativeName: 'Italiano' },
|
|
ja: { englishName: 'Japanese', nativeName: '日本語' },
|
|
ko: { englishName: 'Korean', nativeName: '한국어' },
|
|
lt: { englishName: 'Lithuanian', nativeName: 'Lietuviškai' },
|
|
nl: { englishName: 'Dutch', nativeName: 'Nederlands' },
|
|
no: { englishName: 'Norwegian', nativeName: 'Norsk' },
|
|
pl: { englishName: 'Polish', nativeName: 'Polski' },
|
|
'pt-BR': { englishName: 'Portuguese, Brazilian', nativeName: 'Português do Brasil' },
|
|
ro: { englishName: 'Romanian, Romania', nativeName: 'Română' },
|
|
ru: { englishName: 'Russian', nativeName: 'Pусский' },
|
|
'sv-SE': { englishName: 'Swedish', nativeName: 'Svenska' },
|
|
th: { englishName: 'Thai', nativeName: 'ไทย' },
|
|
tr: { englishName: 'Turkish', nativeName: 'Türkçe' },
|
|
uk: { englishName: 'Ukrainian', nativeName: 'Українська' },
|
|
vi: { englishName: 'Vietnamese', nativeName: 'Tiếng Việt' },
|
|
'zh-CN': { englishName: 'Chinese, China', nativeName: '中文' },
|
|
'zh-TW': { englishName: 'Chinese, Taiwan', nativeName: '繁體中文' },
|
|
};
|
|
|
|
public static find(input: string, enabled: boolean): Locale {
|
|
return this.findMultiple(input, enabled, 1)[0];
|
|
}
|
|
|
|
public static findMultiple(
|
|
input: string,
|
|
enabled: boolean,
|
|
limit: number = Number.MAX_VALUE
|
|
): Locale[] {
|
|
let langCodes = enabled ? this.Enabled : Object.values(Locale).sort();
|
|
let search = input.toLowerCase();
|
|
let found = new Set<Locale>();
|
|
// Exact match
|
|
if (found.size < limit)
|
|
langCodes
|
|
.filter(langCode => langCode.toLowerCase() === search)
|
|
.forEach(langCode => found.add(langCode));
|
|
if (found.size < limit)
|
|
langCodes
|
|
.filter(langCode => this.Data[langCode].nativeName.toLowerCase() === search)
|
|
.forEach(langCode => found.add(langCode));
|
|
if (found.size < limit)
|
|
langCodes
|
|
.filter(langCode => this.Data[langCode].nativeName.toLowerCase() === search)
|
|
.forEach(langCode => found.add(langCode));
|
|
if (found.size < limit)
|
|
langCodes
|
|
.filter(langCode => this.Data[langCode].englishName.toLowerCase() === search)
|
|
.forEach(langCode => found.add(langCode));
|
|
// Starts with search term
|
|
if (found.size < limit)
|
|
langCodes
|
|
.filter(langCode => langCode.toLowerCase().startsWith(search))
|
|
.forEach(langCode => found.add(langCode));
|
|
if (found.size < limit)
|
|
langCodes
|
|
.filter(langCode => this.Data[langCode].nativeName.toLowerCase().startsWith(search))
|
|
.forEach(langCode => found.add(langCode));
|
|
if (found.size < limit)
|
|
langCodes
|
|
.filter(langCode =>
|
|
this.Data[langCode].englishName.toLowerCase().startsWith(search)
|
|
)
|
|
.forEach(langCode => found.add(langCode));
|
|
// Includes search term
|
|
if (found.size < limit)
|
|
langCodes
|
|
.filter(langCode => langCode.toLowerCase().startsWith(search))
|
|
.forEach(langCode => found.add(langCode));
|
|
if (found.size < limit)
|
|
langCodes
|
|
.filter(langCode => this.Data[langCode].nativeName.toLowerCase().startsWith(search))
|
|
.forEach(langCode => found.add(langCode));
|
|
if (found.size < limit)
|
|
langCodes
|
|
.filter(langCode =>
|
|
this.Data[langCode].englishName.toLowerCase().startsWith(search)
|
|
)
|
|
.forEach(langCode => found.add(langCode));
|
|
return [...found];
|
|
}
|
|
}
|