mirror of
https://github.com/imputnet/cobalt.git
synced 2025-06-28 09:28:29 +00:00
web/audio-sub-language: refactor, prioritize popular languages
now the page with a picker won't freeze if intl can't recognize a language code & subtitle settings item will be localized. dub & sub now use their own arrays of languages (first one needs "original" as default and second one needs "none" as default).
This commit is contained in:
parent
c9fdfca239
commit
1e5cc353e4
@ -2,22 +2,26 @@ import { t } from "$lib/i18n/translations";
|
|||||||
import { get } from "svelte/store";
|
import { get } from "svelte/store";
|
||||||
|
|
||||||
const languages = [
|
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",
|
"af", "am", "ar", "as", "az",
|
||||||
"be", "bg", "bn", "bs", "ca",
|
"be", "bg", "bs", "ca", "cs",
|
||||||
"cs", "da", "de", "el", "en",
|
"da", "de", "el", "et", "eu",
|
||||||
"es", "et", "eu", "fa", "fi",
|
"fa", "fi", "fil", "gl", "gu",
|
||||||
"fil", "fr", "gl", "gu", "hi",
|
|
||||||
"hr", "hu", "hy", "id", "is",
|
"hr", "hu", "hy", "id", "is",
|
||||||
"it", "iw", "ja", "ka", "kk",
|
"it", "iw", "ka", "kk", "ko",
|
||||||
"km", "kn", "ko", "ky", "lo",
|
"km", "kn", "ky", "lo", "lt",
|
||||||
"lt", "lv", "mk", "ml", "mn",
|
"lv", "mk", "ml", "mn", "mr",
|
||||||
"mr", "ms", "my", "no", "ne",
|
"ms", "my", "no", "ne", "nl",
|
||||||
"nl", "or", "pa", "pl", "pt",
|
"or", "pa", "pl", "ro", "si",
|
||||||
"ro", "ru", "si", "sk", "sl",
|
"sk", "sl", "sq", "sr", "sv",
|
||||||
"sq", "sr", "sv", "sw", "ta",
|
"sw", "ta", "te", "th", "tr",
|
||||||
"te", "th", "tr", "uk", "ur",
|
"uk", "ur", "uz", "zh-Hans",
|
||||||
"uz", "vi", "zh", "zh-Hans", "zh-Hant",
|
"zh-Hant", "zh-CN", "zh-HK",
|
||||||
"zh-CN", "zh-HK", "zh-TW", "zu"
|
"zh-TW", "zu"
|
||||||
];
|
];
|
||||||
|
|
||||||
export const youtubeDubLanguages = ["original", ...languages] as const;
|
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 YoutubeDubLang = typeof youtubeDubLanguages[number];
|
||||||
export type SubtitleLang = typeof subtitleLanguages[number];
|
export type SubtitleLang = typeof subtitleLanguages[number];
|
||||||
|
|
||||||
export const namedYoutubeLanguages = () => {
|
const namedLanguages = (
|
||||||
return youtubeDubLanguages.reduce((obj, lang) => {
|
languages: typeof youtubeDubLanguages | typeof subtitleLanguages
|
||||||
const intlName = new Intl.DisplayNames([lang], { type: 'language' }).of(lang);
|
) => {
|
||||||
|
return languages.reduce((obj, lang) => {
|
||||||
|
let name: string;
|
||||||
|
|
||||||
let name = `${intlName} (${lang})`;
|
switch (lang) {
|
||||||
if (lang === "original") {
|
case "original":
|
||||||
name = get(t)("settings.youtube.dub.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 {
|
return {
|
||||||
...obj,
|
...obj,
|
||||||
[lang]: name,
|
[lang]: name,
|
||||||
};
|
};
|
||||||
}, {}) as Record<YoutubeDubLang, string>;
|
}, {}) as Record<typeof languages[number], string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const namedYoutubeDubLanguages = () => {
|
||||||
|
return namedLanguages(youtubeDubLanguages);
|
||||||
|
}
|
||||||
|
|
||||||
|
export const namedSubtitleLanguages = () => {
|
||||||
|
return namedLanguages(subtitleLanguages);
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getBrowserLanguage = (): YoutubeDubLang => {
|
export const getBrowserLanguage = (): YoutubeDubLang => {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import settings from "$lib/state/settings";
|
import settings from "$lib/state/settings";
|
||||||
import { t } from "$lib/i18n/translations";
|
import { t } from "$lib/i18n/translations";
|
||||||
import { namedYoutubeLanguages } from "$lib/settings/audio-sub-language";
|
import { namedYoutubeDubLanguages } from "$lib/settings/audio-sub-language";
|
||||||
|
|
||||||
import { audioFormatOptions, audioBitrateOptions } from "$lib/types/settings";
|
import { audioFormatOptions, audioBitrateOptions } from "$lib/types/settings";
|
||||||
|
|
||||||
@ -11,7 +11,7 @@
|
|||||||
import SettingsToggle from "$components/buttons/SettingsToggle.svelte";
|
import SettingsToggle from "$components/buttons/SettingsToggle.svelte";
|
||||||
import SettingsDropdown from "$components/settings/SettingsDropdown.svelte";
|
import SettingsDropdown from "$components/settings/SettingsDropdown.svelte";
|
||||||
|
|
||||||
const displayLangs = namedYoutubeLanguages();
|
const displayLangs = namedYoutubeDubLanguages();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<SettingsCategory sectionId="format" title={$t("settings.audio.format")}>
|
<SettingsCategory sectionId="format" title={$t("settings.audio.format")}>
|
||||||
|
Loading…
Reference in New Issue
Block a user