add isSupportedLanguage
This commit is contained in:
parent
17a42f015a
commit
95da62680a
3 changed files with 108 additions and 29 deletions
|
@ -329,6 +329,7 @@ import XCheatSheet from "@/components/MkCheatSheetDialog.vue";
|
|||
import preprocess from "@/scripts/preprocess";
|
||||
import { vibrate } from "@/scripts/vibrate";
|
||||
import { langmap } from "@/scripts/langmap";
|
||||
import { isSupportedLang, isSameLanguage, languageContains, parentLanguage } from "@/scripts/language-utils";
|
||||
import type { MenuItem } from "@/types/menu";
|
||||
import detectLanguage from "@/scripts/detect-language";
|
||||
import icon from "@/scripts/icon";
|
||||
|
@ -1011,35 +1012,7 @@ function deleteDraft() {
|
|||
localStorage.setItem("drafts", JSON.stringify(draftData));
|
||||
}
|
||||
|
||||
/**
|
||||
* Compare two language codes to determine whether they are decisively different
|
||||
* @returns false if they are close enough
|
||||
*/
|
||||
function isSameLanguage(langCode1: string | null, langCode2: string | null) {
|
||||
return (
|
||||
languageContains(langCode1, langCode2) ||
|
||||
languageContains(langCode2, langCode1)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if langCode1 contains langCode2
|
||||
*/
|
||||
function languageContains(langCode1: string | null, langCode2: string | null) {
|
||||
if (!langCode1 || !langCode2) return false;
|
||||
|
||||
if (
|
||||
langCode1 === "zh" &&
|
||||
["zh-hant", "zh-hans", "yue", "nan"].includes(langCode2)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (langCode1 === "no" && ["nb", "nn"].includes(langCode2)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
async function post() {
|
||||
// For text that is too short, the false positive rate may be too high, so we don't show alarm.
|
||||
|
@ -1054,7 +1027,8 @@ async function post() {
|
|||
if (
|
||||
currentLanguageName &&
|
||||
detectedLanguageName &&
|
||||
!isSameLanguage(detectedLanguage, language.value)
|
||||
!isSameLanguage(detectedLanguage, language.value) &&
|
||||
isSupportedLang(parentLanguage(language.value))
|
||||
) {
|
||||
// "canceled" means "post with detected language".
|
||||
const { canceled } = await os.confirm({
|
||||
|
|
|
@ -380,3 +380,71 @@ export const iso639Regional = {
|
|||
};
|
||||
|
||||
export const langmap = Object.assign({}, langmapNoRegion, iso639Regional);
|
||||
|
||||
/**
|
||||
* @see https://github.com/komodojp/tinyld/blob/develop/docs/langs.md
|
||||
*/
|
||||
export const supportedLangs: Record<string, boolean> = {
|
||||
af: true, afr: true,
|
||||
am: true, amh: true,
|
||||
ber: true,
|
||||
rn: true, run: true,
|
||||
my: true, mya: true,
|
||||
id: true, ind: true,
|
||||
km: true, khm: true,
|
||||
tl: true, tgl: true,
|
||||
th: true, tha: true,
|
||||
vi: true, vie: true,
|
||||
zh: true, cmn: true,
|
||||
ja: true, jpn: true,
|
||||
ko: true, kor: true,
|
||||
bn: true, ben: true,
|
||||
gu: true, guj: true,
|
||||
hi: true, hin: true,
|
||||
kn: true, kan: true,
|
||||
ta: true, tam: true,
|
||||
te: true, tel: true,
|
||||
ur: true, urd: true,
|
||||
cs: true, ces: true,
|
||||
el: true, ell: true,
|
||||
la: true, lat: true,
|
||||
mk: true, mkd: true,
|
||||
sr: true, srp: true,
|
||||
sk: true, slk: true,
|
||||
be: true, bel: true,
|
||||
bg: true, bul: true,
|
||||
et: true, est: true,
|
||||
hu: true, hun: true,
|
||||
lv: true, lvs: true,
|
||||
lt: true, lit: true,
|
||||
pl: true, pol: true,
|
||||
ro: true, ron: true,
|
||||
ru: true, rus: true,
|
||||
uk: true, ukr: true,
|
||||
da: true, dan: true,
|
||||
fi: true, fin: true,
|
||||
is: true, isl: true,
|
||||
no: true, nob: true,
|
||||
sv: true, swe: true,
|
||||
nl: true, nld: true,
|
||||
en: true, eng: true,
|
||||
fr: true, fra: true,
|
||||
de: true, deu: true,
|
||||
ga: true, gle: true,
|
||||
it: true, ita: true,
|
||||
pt: true, por: true,
|
||||
es: true, spa: true,
|
||||
ar: true, ara: true,
|
||||
hy: true, hye: true,
|
||||
he: true, heb: true,
|
||||
kk: true, kaz: true,
|
||||
mn: true, mon: true,
|
||||
fa: true, pes: true,
|
||||
tt: true, tat: true,
|
||||
tr: true, tur: true,
|
||||
tk: true, tuk: true,
|
||||
yi: true, yid: true,
|
||||
eo: true, epo: true,
|
||||
tlh: true,
|
||||
vo: true, vol: true,
|
||||
}
|
||||
|
|
37
packages/client/src/scripts/language-utils.ts
Normal file
37
packages/client/src/scripts/language-utils.ts
Normal file
|
@ -0,0 +1,37 @@
|
|||
import { supportedLangs } from "@/scripts/langmap"
|
||||
|
||||
export function isSupportedLang(langCode: string | null) {
|
||||
if (!langCode) return false;
|
||||
return supportedLangs[langCode] ?? false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compare two language codes to determine whether they are decisively different
|
||||
* @returns false if they are close enough
|
||||
*/
|
||||
export function isSameLanguage(langCode1: string | null, langCode2: string | null) {
|
||||
return (
|
||||
languageContains(langCode1, langCode2) ||
|
||||
languageContains(langCode2, langCode1)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if langCode1 contains langCode2
|
||||
*/
|
||||
export function languageContains(langCode1: string | null, langCode2: string | null) {
|
||||
if (!langCode1 || !langCode2) return false;
|
||||
|
||||
return parentLanguage(langCode2) === langCode1;
|
||||
}
|
||||
|
||||
export function parentLanguage(langCode: string | null) {
|
||||
if (!langCode) return null;
|
||||
if (["zh-hant", "zh-hans", "yue", "nan"].includes(langCode)) {
|
||||
return "zh";
|
||||
}
|
||||
if (["nb", "nn"].includes(langCode)) {
|
||||
return "no";
|
||||
}
|
||||
return langCode;
|
||||
}
|
Loading…
Reference in a new issue