diff --git a/web/src/lib/settings/audio-sub-language.ts b/web/src/lib/settings/audio-sub-language.ts index 6015193d..3e9d23e4 100644 --- a/web/src/lib/settings/audio-sub-language.ts +++ b/web/src/lib/settings/audio-sub-language.ts @@ -2,22 +2,26 @@ import { t } from "$lib/i18n/translations"; import { get } from "svelte/store"; const languages = [ + // most popular languages are first, according to + // https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers + "en", "es", "pt", "fr", "ru", + "zh", "vi", "hi", "bn", "ja", + "af", "am", "ar", "as", "az", - "be", "bg", "bn", "bs", "ca", - "cs", "da", "de", "el", "en", - "es", "et", "eu", "fa", "fi", - "fil", "fr", "gl", "gu", "hi", + "be", "bg", "bs", "ca", "cs", + "da", "de", "el", "et", "eu", + "fa", "fi", "fil", "gl", "gu", "hr", "hu", "hy", "id", "is", - "it", "iw", "ja", "ka", "kk", - "km", "kn", "ko", "ky", "lo", - "lt", "lv", "mk", "ml", "mn", - "mr", "ms", "my", "no", "ne", - "nl", "or", "pa", "pl", "pt", - "ro", "ru", "si", "sk", "sl", - "sq", "sr", "sv", "sw", "ta", - "te", "th", "tr", "uk", "ur", - "uz", "vi", "zh", "zh-Hans", "zh-Hant", - "zh-CN", "zh-HK", "zh-TW", "zu" + "it", "iw", "ka", "kk", "ko", + "km", "kn", "ky", "lo", "lt", + "lv", "mk", "ml", "mn", "mr", + "ms", "my", "no", "ne", "nl", + "or", "pa", "pl", "ro", "si", + "sk", "sl", "sq", "sr", "sv", + "sw", "ta", "te", "th", "tr", + "uk", "ur", "uz", "zh-Hans", + "zh-Hant", "zh-CN", "zh-HK", + "zh-TW", "zu" ]; export const youtubeDubLanguages = ["original", ...languages] as const; @@ -26,20 +30,42 @@ export const subtitleLanguages = ["none", ...languages] as const; export type YoutubeDubLang = typeof youtubeDubLanguages[number]; export type SubtitleLang = typeof subtitleLanguages[number]; -export const namedYoutubeLanguages = () => { - return youtubeDubLanguages.reduce((obj, lang) => { - const intlName = new Intl.DisplayNames([lang], { type: 'language' }).of(lang); +const namedLanguages = ( + languages: typeof youtubeDubLanguages | typeof subtitleLanguages +) => { + return languages.reduce((obj, lang) => { + let name: string; - let name = `${intlName} (${lang})`; - if (lang === "original") { - name = get(t)("settings.youtube.dub.original"); + switch (lang) { + case "original": + name = get(t)("settings.youtube.dub.original"); + break; + case "none": + name = get(t)("settings.subtitles.none"); + break; + default: { + let intlName = "unknown"; + try { + intlName = new Intl.DisplayNames([lang], { type: 'language' }).of(lang) || "unknown"; + } catch { /* */ }; + name = `${intlName} (${lang})`; + break; + } } return { ...obj, [lang]: name, }; - }, {}) as Record; + }, {}) as Record; +} + +export const namedYoutubeDubLanguages = () => { + return namedLanguages(youtubeDubLanguages); +} + +export const namedSubtitleLanguages = () => { + return namedLanguages(subtitleLanguages); } export const getBrowserLanguage = (): YoutubeDubLang => { diff --git a/web/src/routes/settings/audio/+page.svelte b/web/src/routes/settings/audio/+page.svelte index 31d87ba2..06b513d7 100644 --- a/web/src/routes/settings/audio/+page.svelte +++ b/web/src/routes/settings/audio/+page.svelte @@ -1,7 +1,7 @@