From 760055bcc23409fe8e832bd5da4d3b3afa37d89d Mon Sep 17 00:00:00 2001 From: Leah Date: Wed, 5 Feb 2025 17:33:07 +0100 Subject: [PATCH] fix using wrong langmap for post lang --- .../backend/src/core/NoteCreateService.ts | 4 +- packages/backend/src/misc/langmap.ts | 628 ++++++++++++++++++ .../backend/src/models/json-schema/note.ts | 4 +- .../src/server/api/endpoints/i/update.ts | 4 +- .../src/server/api/endpoints/notes/create.ts | 4 +- .../frontend/src/components/MkPostForm.vue | 2 +- 6 files changed, 637 insertions(+), 9 deletions(-) diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index 1d588342e..708f80d14 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -72,7 +72,7 @@ import { trackPromise } from '@/misc/promise-tracker.js'; import { isNotNull } from '@/misc/is-not-null.js'; import { IdentifiableError } from '@/misc/identifiable-error.js'; import { CollapsedQueue } from '@/misc/collapsed-queue.js'; -import {langmap} from "@/misc/langmap.js"; +import { SUPPORTED_POST_LOCALES } from "@/misc/langmap.js"; type NotificationType = 'reply' | 'renote' | 'quote' | 'mention'; @@ -344,7 +344,7 @@ export class NoteCreateService implements OnApplicationShutdown { } if (data.lang) { - if (!Object.keys(langmap).includes(data.lang.toLowerCase())) { + if (!Object.keys(SUPPORTED_POST_LOCALES).includes(data.lang.toLowerCase())) { throw new Error("invalid lang param"); } data.lang = data.lang.toLowerCase(); diff --git a/packages/backend/src/misc/langmap.ts b/packages/backend/src/misc/langmap.ts index 5ff933865..4e9c2f69a 100644 --- a/packages/backend/src/misc/langmap.ts +++ b/packages/backend/src/misc/langmap.ts @@ -669,3 +669,631 @@ export const langmap = { nativeName: 'isiZulu', }, }; + + +export const ISO_639_1 = { + aa: { + nativeName: 'Afaraf', + }, + ab: { + nativeName: 'аҧсуа бызшәа', + }, + ae: { + nativeName: 'avesta', + }, + af: { + nativeName: 'Afrikaans', + }, + ak: { + nativeName: 'Akan', + }, + am: { + nativeName: 'አማርኛ', + }, + an: { + nativeName: 'aragonés', + }, + ar: { + nativeName: 'اللغة العربية', + }, + as: { + nativeName: 'অসমীয়া', + }, + av: { + nativeName: 'авар мацӀ', + }, + ay: { + nativeName: 'aymar aru', + }, + az: { + nativeName: 'azərbaycan dili', + }, + ba: { + nativeName: 'башҡорт теле', + }, + be: { + nativeName: 'беларуская мова', + }, + bg: { + nativeName: 'български език', + }, + bh: { + nativeName: 'भोजपुरी', + }, + bi: { + nativeName: 'Bislama', + }, + bm: { + nativeName: 'bamanankan', + }, + bn: { + nativeName: 'বাংলা', + }, + bo: { + nativeName: 'བོད་ཡིག', + }, + br: { + nativeName: 'brezhoneg', + }, + bs: { + nativeName: 'bosanski jezik', + }, + ca: { + nativeName: 'Català', + }, + ce: { + nativeName: 'нохчийн мотт', + }, + ch: { + nativeName: 'Chamoru', + }, + co: { + nativeName: 'corsu', + }, + cr: { + nativeName: 'ᓀᐦᐃᔭᐍᐏᐣ', + }, + cs: { + nativeName: 'čeština', + }, + cu: { + nativeName: 'ѩзыкъ словѣньскъ', + }, + cv: { + nativeName: 'чӑваш чӗлхи', + }, + cy: { + nativeName: 'Cymraeg', + }, + da: { + nativeName: 'dansk', + }, + de: { + nativeName: 'Deutsch', + }, + dv: { + nativeName: 'Dhivehi', + }, + dz: { + nativeName: 'རྫོང་ཁ', + }, + ee: { + nativeName: 'Eʋegbe', + }, + el: { + nativeName: 'Ελληνικά', + }, + en: { + nativeName: 'English', + }, + eo: { + nativeName: 'Esperanto', + }, + es: { + nativeName: 'Español', + }, + et: { + nativeName: 'eesti', + }, + eu: { + nativeName: 'euskara', + }, + fa: { + nativeName: 'فارسی', + }, + ff: { + nativeName: 'Fulfulde', + }, + fi: { + nativeName: 'suomi', + }, + fj: { + nativeName: 'Vakaviti', + }, + fo: { + nativeName: 'føroyskt', + }, + fr: { + nativeName: 'Français', + }, + fy: { + nativeName: 'Frysk', + }, + ga: { + nativeName: 'Gaeilge', + }, + gd: { + nativeName: 'Gàidhlig', + }, + gl: { + nativeName: 'galego', + }, + gu: { + nativeName: 'ગુજરાતી', + }, + gv: { + nativeName: 'Gaelg', + }, + ha: { + nativeName: 'هَوُسَ', + }, + he: { + nativeName: 'עברית', + }, + hi: { + nativeName: 'हिन्दी', + }, + ho: { + nativeName: 'Hiri Motu', + }, + hr: { + nativeName: 'Hrvatski', + }, + ht: { + nativeName: 'Kreyòl ayisyen', + }, + hu: { + nativeName: 'magyar', + }, + hy: { + nativeName: 'Հայերեն', + }, + hz: { + nativeName: 'Otjiherero', + }, + ia: { + nativeName: 'Interlingua', + }, + id: { + nativeName: 'Bahasa Indonesia', + }, + ie: { + nativeName: 'Interlingue', + }, + ig: { + nativeName: 'Asụsụ Igbo', + }, + ii: { + nativeName: 'ꆈꌠ꒿ Nuosuhxop', + }, + ik: { + nativeName: 'Iñupiaq', + }, + io: { + nativeName: 'Ido', + }, + is: { + nativeName: 'Íslenska', + }, + it: { + nativeName: 'Italiano', + }, + iu: { + nativeName: 'ᐃᓄᒃᑎᑐᑦ', + }, + ja: { + nativeName: '日本語', + }, + jv: { + nativeName: 'basa Jawa', + }, + ka: { + nativeName: 'ქართული', + }, + kg: { + nativeName: 'Kikongo', + }, + ki: { + nativeName: 'Gĩkũyũ', + }, + kj: { + nativeName: 'Kuanyama', + }, + kk: { + nativeName: 'қазақ тілі', + }, + kl: { + nativeName: 'kalaallisut', + }, + km: { + nativeName: 'ខេមរភាសា', + }, + kn: { + nativeName: 'ಕನ್ನಡ', + }, + ko: { + nativeName: '한국어', + }, + kr: { + nativeName: 'Kanuri', + }, + ks: { + nativeName: 'कश्मीरी', + }, + ku: { + nativeName: 'Kurmancî', + }, + kv: { + nativeName: 'коми кыв', + }, + kw: { + nativeName: 'Kernewek', + }, + ky: { + nativeName: 'Кыргызча', + }, + la: { + nativeName: 'latine', + }, + lb: { + nativeName: 'Lëtzebuergesch', + }, + lg: { + nativeName: 'Luganda', + }, + li: { + nativeName: 'Limburgs', + }, + ln: { + nativeName: 'Lingála', + }, + lo: { + nativeName: 'ລາວ', + }, + lt: { + nativeName: 'lietuvių kalba', + }, + lu: { + nativeName: 'Tshiluba', + }, + lv: { + nativeName: 'latviešu valoda', + }, + mg: { + nativeName: 'fiteny malagasy', + }, + mh: { + nativeName: 'Kajin M̧ajeļ', + }, + mi: { + nativeName: 'te reo Māori', + }, + mk: { + nativeName: 'македонски јазик', + }, + ml: { + nativeName: 'മലയാളം', + }, + mn: { + nativeName: 'Монгол хэл', + }, + mr: { + nativeName: 'मराठी', + }, + ms: { + nativeName: 'Bahasa Melayu', + }, + 'ms-Arab': { + nativeName: 'بهاس ملايو', + }, + mt: { + nativeName: 'Malti', + }, + my: { + nativeName: 'ဗမာစာ', + }, + na: { + nativeName: 'Ekakairũ Naoero', + }, + nb: { + nativeName: 'Norsk bokmål', + }, + nd: { + nativeName: 'isiNdebele', + }, + ne: { + nativeName: 'नेपाली', + }, + ng: { + nativeName: 'Owambo', + }, + nl: { + nativeName: 'Nederlands', + }, + nn: { + nativeName: 'Norsk Nynorsk', + }, + no: { + nativeName: 'Norsk', + }, + nr: { + nativeName: 'isiNdebele', + }, + nv: { + nativeName: 'Diné bizaad', + }, + ny: { + nativeName: 'chiCheŵa', + }, + oc: { + nativeName: 'occitan', + }, + oj: { + nativeName: 'ᐊᓂᔑᓈᐯᒧᐎᓐ', + }, + om: { + nativeName: 'Afaan Oromoo', + }, + or: { + nativeName: 'ଓଡ଼ିଆ', + }, + os: { + nativeName: 'ирон æвзаг', + }, + pa: { + nativeName: 'ਪੰਜਾਬੀ', + }, + pi: { + nativeName: 'पाऴि', + }, + pl: { + nativeName: 'Polski', + }, + ps: { + nativeName: 'پښتو', + }, + pt: { + nativeName: 'Português', + }, + qu: { + nativeName: 'Runa Simi', + }, + rm: { + nativeName: 'rumantsch grischun', + }, + rn: { + nativeName: 'Ikirundi', + }, + ro: { + nativeName: 'Română', + }, + ru: { + nativeName: 'Русский', + }, + rw: { + nativeName: 'Ikinyarwanda', + }, + sa: { + nativeName: 'संस्कृतम्', + }, + sc: { + nativeName: 'sardu', + }, + sd: { + nativeName: 'सिन्धी', + }, + se: { + nativeName: 'Davvisámegiella', + }, + sg: { + nativeName: 'yângâ tî sängö', + }, + si: { + nativeName: 'සිංහල', + }, + sk: { + nativeName: 'slovenčina', + }, + sl: { + nativeName: 'slovenščina', + }, + sn: { + nativeName: 'chiShona', + }, + so: { + nativeName: 'Soomaaliga', + }, + sq: { + nativeName: 'Shqip', + }, + sr: { + nativeName: 'српски језик', + }, + ss: { + nativeName: 'SiSwati', + }, + st: { + nativeName: 'Sesotho', + }, + su: { + nativeName: 'Basa Sunda', + }, + sv: { + nativeName: 'Svenska', + }, + sw: { + nativeName: 'Kiswahili', + }, + ta: { + nativeName: 'தமிழ்', + }, + te: { + nativeName: 'తెలుగు', + }, + tg: { + nativeName: 'тоҷикӣ', + }, + th: { + nativeName: 'ไทย', + }, + ti: { + nativeName: 'ትግርኛ', + }, + tk: { + nativeName: 'Türkmen', + }, + tl: { + nativeName: 'Tagalog', + }, + tn: { + nativeName: 'Setswana', + }, + to: { + nativeName: 'faka Tonga', + }, + tr: { + nativeName: 'Türkçe', + }, + ts: { + nativeName: 'Xitsonga', + }, + tt: { + nativeName: 'татар теле', + }, + tw: { + nativeName: 'Twi', + }, + ty: { + nativeName: 'Reo Tahiti', + }, + ug: { + nativeName: 'ئۇيغۇرچە‎', + }, + uk: { + nativeName: 'Українська', + }, + ur: { + nativeName: 'اردو', + }, + vi: { + nativeName: 'Tiếng Việt', + }, + vo: { + nativeName: 'Volapük', + }, + wa: { + nativeName: 'Walon', + }, + wo: { + nativeName: 'Wollof', + }, + xh: { + nativeName: 'isiXhosa', + }, + yi: { + nativeName: 'ייִדיש', + }, + zu: { + nativeName: 'isiZulu', + }, +}; + +export const ISO_639_3 = { + ast: { + nativeName: 'Asturianu', + }, + chr: { + nativeName: 'ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ', + }, + ckb: { + nativeName: 'سۆرانی', + }, + cnr: { + nativeName: 'crnogorski', + }, + csb: { + nativeName: 'Kaszëbsczi', + }, + gsw: { + nativeName: 'Schwiizertütsch', + }, + jbo: { + nativeName: 'la .lojban.', + }, + kab: { + nativeName: 'Taqbaylit', + }, + ldn: { + nativeName: 'Láadan', + }, + lfn: { + nativeName: 'lingua franca nova', + }, + moh: { + nativeName: 'Kanienʼkéha', + }, + nds: { + nativeName: 'Plattdüütsch', + }, + pdc: { + nativeName: 'Pennsilfaani-Deitsch', + }, + sco: { + nativeName: 'Scots', + }, + sma: { + nativeName: 'Åarjelsaemien Gïele', + }, + smj: { + nativeName: 'Julevsámegiella', + }, + szl: { + nativeName: 'ślůnsko godka', + }, + tok: { + nativeName: 'toki pona', + }, + vai: { + nativeName: 'ꕙꔤ', + }, + xal: { + nativeName: 'Хальмг келн', + }, + zba: { + nativeName: 'باليبلن', + }, + zgh: { + nativeName: 'ⵜⴰⵎⴰⵣⵉⵖⵜ', + }, +}; + +export const ISO_639_1_REGIONAL = { + 'zh-CN': { + nativeName: '简体中文', + }, + 'zh-HK': { + nativeName: '繁體中文(香港)', + }, + 'zh-TW': { + nativeName: '繁體中文(臺灣)', + }, + 'zh-YUE': { + nativeName: '廣東話', + }, +}; + +export const SUPPORTED_POST_LOCALES = { + ...ISO_639_1, + ...ISO_639_3, + ...ISO_639_1_REGIONAL, +}; diff --git a/packages/backend/src/models/json-schema/note.ts b/packages/backend/src/models/json-schema/note.ts index 8f2fee0f0..aead839e2 100644 --- a/packages/backend/src/models/json-schema/note.ts +++ b/packages/backend/src/models/json-schema/note.ts @@ -2,7 +2,7 @@ * SPDX-FileCopyrightText: syuilo and misskey-project * SPDX-License-Identifier: AGPL-3.0-only */ -import { langmap } from "@/misc/langmap.js"; +import { SUPPORTED_POST_LOCALES } from "@/misc/langmap.js"; export const packedNoteSchema = { type: 'object', @@ -29,7 +29,7 @@ export const packedNoteSchema = { }, lang: { type: 'string', - enum: [...Object.keys(langmap)], + enum: [...Object.keys(SUPPORTED_POST_LOCALES)], nullable: true, }, cw: { diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts index eb537a59d..3341ede75 100644 --- a/packages/backend/src/server/api/endpoints/i/update.ts +++ b/packages/backend/src/server/api/endpoints/i/update.ts @@ -16,7 +16,7 @@ import type { MiLocalUser, MiUser } from '@/models/User.js'; import { birthdaySchema, descriptionSchema, locationSchema, nameSchema } from '@/models/User.js'; import type { MiUserProfile } from '@/models/UserProfile.js'; import { normalizeForSearch } from '@/misc/normalize-for-search.js'; -import { langmap } from '@/misc/langmap.js'; +import { SUPPORTED_POST_LOCALES } from '@/misc/langmap.js'; import { Endpoint } from '@/server/api/endpoint-base.js'; import { UserEntityService } from '@/core/entities/UserEntityService.js'; import { GlobalEventService } from '@/core/GlobalEventService.js'; @@ -150,7 +150,7 @@ export const paramDef = { description: { ...descriptionSchema, nullable: true }, location: { ...locationSchema, nullable: true }, birthday: { ...birthdaySchema, nullable: true }, - lang: { type: 'string', enum: [null, ...Object.keys(langmap)] as string[], nullable: true }, + lang: { type: 'string', enum: [null, ...Object.keys(SUPPORTED_POST_LOCALES)] as string[], nullable: true }, avatarId: { type: 'string', format: 'misskey:id', nullable: true }, avatarDecorations: { type: 'array', maxItems: 16, items: { type: 'object', diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts index 09b9ff5aa..a85aa0fa4 100644 --- a/packages/backend/src/server/api/endpoints/notes/create.ts +++ b/packages/backend/src/server/api/endpoints/notes/create.ts @@ -23,7 +23,7 @@ import { isQuote, isRenote } from '@/misc/is-renote.js'; import { IdentifiableError } from '@/misc/identifiable-error.js'; import { LoggerService } from '@/core/LoggerService.js'; import { ApiError } from '../../error.js'; -import {langmap} from "@/misc/langmap.js"; +import { SUPPORTED_POST_LOCALES } from "@/misc/langmap.js"; export const meta = { tags: ['notes'], @@ -213,7 +213,7 @@ export const paramDef = { }, lang: { type: "string", - enum: Object.keys(langmap), + enum: Object.keys(SUPPORTED_POST_LOCALES), nullable: true, }, fileIds: { diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index 70ca4e552..0db8ce631 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -174,7 +174,7 @@ import { miLocalStorage } from '@/local-storage.js'; import { dateTimeFormat } from '@/scripts/intl-const.js'; import { claimAchievement } from '@/scripts/achievements.js'; import { mfmFunctionPicker } from '@/scripts/mfm-function-picker.js'; -import {SUPPORTED_POST_LOCALES} from "@/scripts/langmap"; +import { SUPPORTED_POST_LOCALES } from "@/scripts/langmap"; const $i = signinRequired();