diff options
author | V <vendicated@riseup.net> | 2023-05-10 23:14:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-10 23:14:04 +0200 |
commit | cb385d1b280551eb16f1f9836a93cc9bcc43da15 (patch) | |
tree | 87897b84fe78d4d10686981c8bd1c31a5326b46d /src/plugins/translate/utils.ts | |
parent | 195f1a032fc63d4fd35564a9d11f8ed4afbcac4d (diff) | |
download | Vencord-cb385d1b280551eb16f1f9836a93cc9bcc43da15.tar.gz Vencord-cb385d1b280551eb16f1f9836a93cc9bcc43da15.tar.bz2 Vencord-cb385d1b280551eb16f1f9836a93cc9bcc43da15.zip |
New Plugin: Translate (#1089)
Co-authored-by: Nuckyz <61953774+Nuckyz@users.noreply.github.com>
Diffstat (limited to 'src/plugins/translate/utils.ts')
-rw-r--r-- | src/plugins/translate/utils.ts | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/plugins/translate/utils.ts b/src/plugins/translate/utils.ts new file mode 100644 index 0000000..784ec25 --- /dev/null +++ b/src/plugins/translate/utils.ts @@ -0,0 +1,75 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2023 Vendicated and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ + +import { classNameFactory } from "@api/Styles"; + +import { settings } from "./settings"; + +export const cl = classNameFactory("vc-trans-"); + +interface TranslationData { + src: string; + sentences: { + // 🏳️⚧️ + trans: string; + }[]; +} + +export interface TranslationValue { + src: string; + text: string; +} + +export async function translate(kind: "received" | "sent", text: string): Promise<TranslationValue> { + const sourceLang = settings.store[kind + "Input"]; + const targetLang = settings.store[kind + "Output"]; + + const url = "https://translate.googleapis.com/translate_a/single?" + new URLSearchParams({ + // see https://stackoverflow.com/a/29537590 for more params + // holy shidd nvidia + client: "gtx", + // source language + sl: sourceLang, + // target language + tl: targetLang, + // what to return, t = translation probably + dt: "t", + // Send json object response instead of weird array + dj: "1", + source: "input", + // query, duh + q: text + }); + + const res = await fetch(url); + if (!res.ok) + throw new Error( + `Failed to translate "${text}" (${sourceLang} -> ${targetLang}` + + `\n${res.status} ${res.statusText}` + ); + + const { src, sentences }: TranslationData = await res.json(); + + return { + src, + text: sentences. + map(s => s?.trans). + filter(Boolean). + join("") + }; +} |