mirror of https://github.com/morpheus65535/bazarr
193 lines
3.9 KiB
TypeScript
193 lines
3.9 KiB
TypeScript
import { useSubtitleAction } from "@/apis/hooks";
|
|
import { useModals, withModal } from "@/modules/modals";
|
|
import { task } from "@/modules/task";
|
|
import { useSelectorOptions } from "@/utilities";
|
|
import { useEnabledLanguages } from "@/utilities/languages";
|
|
import { Alert, Button, Divider, Stack } from "@mantine/core";
|
|
import { useForm } from "@mantine/hooks";
|
|
import { isObject } from "lodash";
|
|
import { FunctionComponent, useMemo } from "react";
|
|
import { Selector } from "../inputs";
|
|
|
|
const TaskName = "Translating Subtitles";
|
|
|
|
const translations = {
|
|
af: "afrikaans",
|
|
sq: "albanian",
|
|
am: "amharic",
|
|
ar: "arabic",
|
|
hy: "armenian",
|
|
az: "azerbaijani",
|
|
eu: "basque",
|
|
be: "belarusian",
|
|
bn: "bengali",
|
|
bs: "bosnian",
|
|
bg: "bulgarian",
|
|
ca: "catalan",
|
|
ceb: "cebuano",
|
|
ny: "chichewa",
|
|
zh: "chinese (simplified)",
|
|
zt: "chinese (traditional)",
|
|
co: "corsican",
|
|
hr: "croatian",
|
|
cs: "czech",
|
|
da: "danish",
|
|
nl: "dutch",
|
|
en: "english",
|
|
eo: "esperanto",
|
|
et: "estonian",
|
|
tl: "filipino",
|
|
fi: "finnish",
|
|
fr: "french",
|
|
fy: "frisian",
|
|
gl: "galician",
|
|
ka: "georgian",
|
|
de: "german",
|
|
el: "greek",
|
|
gu: "gujarati",
|
|
ht: "haitian creole",
|
|
ha: "hausa",
|
|
haw: "hawaiian",
|
|
iw: "hebrew",
|
|
hi: "hindi",
|
|
hmn: "hmong",
|
|
hu: "hungarian",
|
|
is: "icelandic",
|
|
ig: "igbo",
|
|
id: "indonesian",
|
|
ga: "irish",
|
|
it: "italian",
|
|
ja: "japanese",
|
|
jw: "javanese",
|
|
kn: "kannada",
|
|
kk: "kazakh",
|
|
km: "khmer",
|
|
ko: "korean",
|
|
ku: "kurdish (kurmanji)",
|
|
ky: "kyrgyz",
|
|
lo: "lao",
|
|
la: "latin",
|
|
lv: "latvian",
|
|
lt: "lithuanian",
|
|
lb: "luxembourgish",
|
|
mk: "macedonian",
|
|
mg: "malagasy",
|
|
ms: "malay",
|
|
ml: "malayalam",
|
|
mt: "maltese",
|
|
mi: "maori",
|
|
mr: "marathi",
|
|
mn: "mongolian",
|
|
my: "myanmar (burmese)",
|
|
ne: "nepali",
|
|
no: "norwegian",
|
|
ps: "pashto",
|
|
fa: "persian",
|
|
pl: "polish",
|
|
pt: "portuguese",
|
|
pa: "punjabi",
|
|
ro: "romanian",
|
|
ru: "russian",
|
|
sm: "samoan",
|
|
gd: "scots gaelic",
|
|
sr: "serbian",
|
|
st: "sesotho",
|
|
sn: "shona",
|
|
sd: "sindhi",
|
|
si: "sinhala",
|
|
sk: "slovak",
|
|
sl: "slovenian",
|
|
so: "somali",
|
|
es: "spanish",
|
|
su: "sundanese",
|
|
sw: "swahili",
|
|
sv: "swedish",
|
|
tg: "tajik",
|
|
ta: "tamil",
|
|
te: "telugu",
|
|
th: "thai",
|
|
tr: "turkish",
|
|
uk: "ukrainian",
|
|
ur: "urdu",
|
|
uz: "uzbek",
|
|
vi: "vietnamese",
|
|
cy: "welsh",
|
|
xh: "xhosa",
|
|
yi: "yiddish",
|
|
yo: "yoruba",
|
|
zu: "zulu",
|
|
fil: "Filipino",
|
|
he: "Hebrew",
|
|
};
|
|
|
|
interface Props {
|
|
selections: FormType.ModifySubtitle[];
|
|
onSubmit?: VoidFunction;
|
|
}
|
|
|
|
const TranslationForm: FunctionComponent<Props> = ({
|
|
selections,
|
|
onSubmit,
|
|
}) => {
|
|
const { mutateAsync } = useSubtitleAction();
|
|
const modals = useModals();
|
|
|
|
const { data: languages } = useEnabledLanguages();
|
|
|
|
const form = useForm({
|
|
initialValues: {
|
|
language: null as Language.Info | null,
|
|
},
|
|
validationRules: {
|
|
language: isObject,
|
|
},
|
|
});
|
|
|
|
const available = useMemo(
|
|
() => languages.filter((v) => v.code2 in translations),
|
|
[languages]
|
|
);
|
|
|
|
const options = useSelectorOptions(
|
|
available,
|
|
(v) => v.name,
|
|
(v) => v.code2
|
|
);
|
|
|
|
return (
|
|
<form
|
|
onSubmit={form.onSubmit(({ language }) => {
|
|
if (language) {
|
|
selections.forEach((s) =>
|
|
task.create(s.path, TaskName, mutateAsync, {
|
|
action: "translate",
|
|
form: {
|
|
...s,
|
|
language: language.code2,
|
|
},
|
|
})
|
|
);
|
|
|
|
onSubmit?.();
|
|
modals.closeSelf();
|
|
}
|
|
})}
|
|
>
|
|
<Stack>
|
|
<Alert variant="outline">
|
|
Enabled languages not listed here are unsupported by Google Translate.
|
|
</Alert>
|
|
<Selector {...options} {...form.getInputProps("language")}></Selector>
|
|
<Divider></Divider>
|
|
<Button type="submit">Start</Button>
|
|
</Stack>
|
|
</form>
|
|
);
|
|
};
|
|
|
|
export const TranslationModal = withModal(TranslationForm, "translation-tool", {
|
|
title: "Translate Subtitle(s)",
|
|
});
|
|
|
|
export default TranslationForm;
|