Skip to content

Commit

Permalink
feat: Add more languages to dictionary map.
Browse files Browse the repository at this point in the history
  • Loading branch information
vxern committed Nov 24, 2024
1 parent c1d39d5 commit 9f5b7d1
Show file tree
Hide file tree
Showing 8 changed files with 266 additions and 18 deletions.
246 changes: 246 additions & 0 deletions source/constants/dictionaries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,252 @@ const dictionariesByLanguage = Object.freeze({
Spanish: ["wiktionary"],
Swedish: ["wiktionary"],
Turkish: ["wiktionary"],
Abkhazian: ["wiktionary"],
Afar: ["wiktionary"],
Afrikaans: ["wiktionary"],
Akan: ["wiktionary"],
Albanian: ["wiktionary"],
Amharic: ["wiktionary"],
Arabic: ["wiktionary"],
Assamese: ["wiktionary"],
Aymara: ["wiktionary"],
Azerbaijani: ["wiktionary"],
Bashkir: ["wiktionary"],
Basque: ["wiktionary"],
Belarusian: ["wiktionary"],
Bengali: ["wiktionary"],
Bihari: ["wiktionary"],
Bislama: ["wiktionary"],
Breton: ["wiktionary"],
Bulgarian: ["wiktionary"],
Burmese: ["wiktionary"],
Catalan: ["wiktionary"],
Cherokee: ["wiktionary"],
Chewa: ["wiktionary"],
"Chinese/Simplified": ["wiktionary"],
"Chinese/Traditional": ["wiktionary"],
Corsican: ["wiktionary"],
"Creole/Haitian": ["wiktionary"],
"Creole/Mauritian": ["wiktionary"],
"Creole/SierraLeone": ["wiktionary"],
"CzechoSlovak/Czech": ["wiktionary"],
"CzechoSlovak/Slovak": ["wiktionary"],
Dholuo: ["wiktionary"],
Dzongkha: ["wiktionary"],
English: ["wiktionary"],
Esperanto: ["wiktionary"],
Estonian: ["wiktionary"],
Ewe: ["wiktionary"],
Faroese: ["wiktionary"],
Fijian: ["wiktionary"],
"Filipino/Cebuano": ["wiktionary"],
"Filipino/Kapampangan": ["wiktionary"],
"Filipino/Tagalog": ["wiktionary"],
"Filipino/Waray": ["wiktionary"],
Frisian: ["wiktionary"],
Ga: ["wiktionary"],
Galician: ["wiktionary"],
Ganda: ["wiktionary"],
Georgian: ["wiktionary"],
Greenlandic: ["wiktionary"],
Guarani: ["wiktionary"],
Gujarati: ["wiktionary"],
Hausa: ["wiktionary"],
Hawaiian: ["wiktionary"],
Hebrew: ["wiktionary"],
Hindi: ["wiktionary"],
Hmong: ["wiktionary"],
Icelandic: ["wiktionary"],
Igbo: ["wiktionary"],
Indonesian: ["wiktionary"],
Interlingua: ["wiktionary"],
Interlingue: ["wiktionary"],
Inuktitut: ["wiktionary"],
Inupiak: ["wiktionary"],
Irish: ["wiktionary"],
Italian: ["wiktionary"],
Japanese: ["wiktionary"],
Javanese: ["wiktionary"],
Kannada: ["wiktionary"],
Kashmiri: ["wiktionary"],
Kazakh: ["wiktionary"],
Khasi: ["wiktionary"],
Khmer: ["wiktionary"],
Korean: ["wiktionary"],
Kurdish: ["wiktionary"],
Kyrgyz: ["wiktionary"],
Lao: ["wiktionary"],
Latin: ["wiktionary"],
Latvian: ["wiktionary"],
Limbu: ["wiktionary"],
Lingala: ["wiktionary"],
Lithuanian: ["wiktionary"],
Lozi: ["wiktionary"],
LubaLulua: ["wiktionary"],
Luxembourgish: ["wiktionary"],
Macedonian: ["wiktionary"],
Malagasy: ["wiktionary"],
Malay: ["wiktionary"],
Malayalam: ["wiktionary"],
Maldivian: ["wiktionary"],
Maltese: ["wiktionary"],
Manx: ["wiktionary"],
Maori: ["wiktionary"],
Marathi: ["wiktionary"],
Mongolian: ["wiktionary"],
Nauru: ["wiktionary"],
Nepali: ["wiktionary"],
Newar: ["wiktionary"],
"Norwegian/Nynorsk": ["wiktionary"],
Occitan: ["wiktionary"],
Odia: ["wiktionary"],
Oromo: ["wiktionary"],
Ossetian: ["wiktionary"],
Pashto: ["wiktionary"],
Pedi: ["wiktionary"],
Persian: ["wiktionary"],
"Portuguese/European": ["wiktionary"],
Punjabi: ["wiktionary"],
Quechua: ["wiktionary"],
Rajasthani: ["wiktionary"],
RhaetoRomance: ["wiktionary"],
"RwandaRundi/Kinyarwanda": ["wiktionary"],
"RwandaRundi/Kirundi": ["wiktionary"],
Samoan: ["wiktionary"],
Sango: ["wiktionary"],
Sanskrit: ["wiktionary"],
Scots: ["wiktionary"],
ScottishGaelic: ["wiktionary"],
"SerboCroatian/Bosnian": ["wiktionary"],
"SerboCroatian/Croatian": ["wiktionary"],
"SerboCroatian/Montenegrin": ["wiktionary"],
"SerboCroatian/Serbian": ["wiktionary"],
Seselwa: ["wiktionary"],
Shona: ["wiktionary"],
Sindhi: ["wiktionary"],
Sinhala: ["wiktionary"],
Slovenian: ["wiktionary"],
Somali: ["wiktionary"],
"Sotho/Southern": ["wiktionary"],
Sundanese: ["wiktionary"],
Swahili: ["wiktionary"],
Swazi: ["wiktionary"],
Syriac: ["wiktionary"],
Tajik: ["wiktionary"],
Tamil: ["wiktionary"],
Tatar: ["wiktionary"],
Telugu: ["wiktionary"],
Thai: ["wiktionary"],
Tibetan: ["wiktionary"],
Tigrinya: ["wiktionary"],
Tonga: ["wiktionary"],
Tsonga: ["wiktionary"],
Tswana: ["wiktionary"],
Tumbuka: ["wiktionary"],
Turkmen: ["wiktionary"],
Twi: ["wiktionary"],
Ukrainian: ["wiktionary"],
Urdu: ["wiktionary"],
Uyghur: ["wiktionary"],
Uzbek: ["wiktionary"],
Venda: ["wiktionary"],
Vietnamese: ["wiktionary"],
Volapuk: ["wiktionary"],
Welsh: ["wiktionary"],
Wolof: ["wiktionary"],
Xhosa: ["wiktionary"],
Yiddish: ["wiktionary"],
Yoruba: ["wiktionary"],
Zhuang: ["wiktionary"],
Zulu: ["wiktionary"],
Berber: ["wiktionary"],
Klingon: ["wiktionary"],
"Arabic/Egyptian": ["wiktionary"],
Aragonese: ["wiktionary"],
Armenian: ["wiktionary"],
Asturian: ["wiktionary"],
Avar: ["wiktionary"],
"Azerbaijani/Southern": ["wiktionary"],
Bavarian: ["wiktionary"],
"Bikol/Central": ["wiktionary"],
Bishnupriya: ["wiktionary"],
"Buriat/Russian": ["wiktionary"],
Chavacano: ["wiktionary"],
Chechen: ["wiktionary"],
Chinese: ["wiktionary"],
"Chinese/Wu": ["wiktionary"],
"Chinese/Yue": ["wiktionary"],
Chuvash: ["wiktionary"],
Cornish: ["wiktionary"],
Dotyali: ["wiktionary"],
"Emiliano-Romagnolo": ["wiktionary"],
Erzya: ["wiktionary"],
"Filipino/Ilocano": ["wiktionary"],
"Frisian/Northern": ["wiktionary"],
"Frisian/Western": ["wiktionary"],
"German/Low": ["wiktionary"],
"German/Swiss": ["wiktionary"],
"Hindi/Fijian": ["wiktionary"],
Ido: ["wiktionary"],
"Italian/Neapolitan": ["wiktionary"],
"Italian/Venetian": ["wiktionary"],
Kalmyk: ["wiktionary"],
"Karachay-Balkar": ["wiktionary"],
Komi: ["wiktionary"],
"Konkani/Goan": ["wiktionary"],
"Kurdish/Northern": ["wiktionary"],
Lezgian: ["wiktionary"],
Limburgish: ["wiktionary"],
Lojban: ["wiktionary"],
Lombard: ["wiktionary"],
"Luri/Northern": ["wiktionary"],
Maithili: ["wiktionary"],
"Mari/Eastern": ["wiktionary"],
"Mari/Western": ["wiktionary"],
Mazanderani: ["wiktionary"],
Minangkabau: ["wiktionary"],
Mingrelian: ["wiktionary"],
Mirandese: ["wiktionary"],
Nahuatl: ["wiktionary"],
Norwegian: ["wiktionary"],
Pfaelzisch: ["wiktionary"],
Piedmontese: ["wiktionary"],
Portuguese: ["wiktionary"],
"Punjabi/Western": ["wiktionary"],
Romansh: ["wiktionary"],
Rusyn: ["wiktionary"],
Sardinian: ["wiktionary"],
SerboCroatian: ["wiktionary"],
Sicilian: ["wiktionary"],
"Sorbian/Lower": ["wiktionary"],
"Sorbian/Upper": ["wiktionary"],
Tuvinian: ["wiktionary"],
Uighur: ["wiktionary"],
Veps: ["wiktionary"],
Vlaams: ["wiktionary"],
Walloon: ["wiktionary"],
Yakut: ["wiktionary"],
Zaza: ["wiktionary"],
"Portuguese/Brazilian": ["wiktionary"],
Bambara: ["wiktionary"],
Bhojpuri: ["wiktionary"],
Dogri: ["wiktionary"],
Filipino: ["wiktionary"],
Konkani: ["wiktionary"],
"Kurdish/Sorani": ["wiktionary"],
Meitei: ["wiktionary"],
Mizo: ["wiktionary"],
"Sotho/Northern": ["wiktionary"],
"Arabic/Emirati": ["wiktionary"],
"Arabic/SaudiArabian": ["wiktionary"],
"Catalan/Valencian": ["wiktionary"],
"English/Australian": ["wiktionary"],
"French/Canadian": ["wiktionary"],
"French/French": ["wiktionary"],
"Portuguese/Portuguese": ["wiktionary"],
"Spanish/Mexican": ["wiktionary"],
"Spanish/Spanish": ["wiktionary"],
"Spanish/American": ["wiktionary"],
} satisfies Record<LearningLanguage, Dictionary[]> as Record<LearningLanguage, Dictionary[]>);

export default Object.freeze({ languages: dictionariesByLanguage });
Expand Down
8 changes: 4 additions & 4 deletions source/constants/languages.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { languages as detectionLanguages, type DetectionLanguage } from "logos:constants/languages/detection";
import { languages as featureLanguages, type FeatureLanguage } from "logos:constants/languages/feature";
import { languages as learningLanguages, type LearningLanguage } from "logos:constants/languages/learning";
import { type DetectionLanguage, languages as detectionLanguages } from "logos:constants/languages/detection";
import { type FeatureLanguage, languages as featureLanguages } from "logos:constants/languages/feature";
import { collectLanguages, sortLanguages } from "logos:constants/languages/languages";
import { type LearningLanguage, languages as learningLanguages } from "logos:constants/languages/learning";
import {
type DiscordLocale,
type LocalisationLanguage,
Expand All @@ -12,7 +13,6 @@ import {
isTranslationLanguage,
languages as translationLanguages,
} from "logos:constants/languages/translation";
import { collectLanguages, sortLanguages } from "logos:constants/languages/languages";

const languages = Object.freeze({
languages: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ class WiktionaryAdapter extends DictionaryAdapter<Wiktionary.Entry[]> {
results = await Wiktionary.get(lemma, {
lemmaLanguage: targetLanguageWiktionary,
userAgent: constants.USER_AGENT,
followRedirect: true,
});
} catch (error) {
this.client.log.error(error, `The request for lemma "${lemma}" failed.`);
Expand Down
6 changes: 3 additions & 3 deletions source/library/collectors.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { isAutocomplete, isSubcommand, isSubcommandGroup } from "logos:constants/interactions";
import { type LearningLanguage, getLocaleByLearningLanguage } from "logos:constants/languages/learning";
import { type LearningLanguage, getLearningLocaleByLanguage } from "logos:constants/languages/learning";
import { getDiscordLanguageByLocale, getLocalisationLocaleByLanguage } from "logos:constants/languages/localisation";
import type { PromiseOr } from "logos:core/utilities";
import type { Client } from "logos/client";
Expand Down Expand Up @@ -296,12 +296,12 @@ class InteractionCollector<

const targetLanguage = guildDocument.languages.target;
const learningLanguage = this.#determineLearningLanguage(guildDocument, member) ?? targetLanguage;
const learningLocale = getLocaleByLearningLanguage(learningLanguage);
const learningLocale = getLearningLocaleByLanguage(learningLanguage);

const guildLanguage = guildDocument.isTargetLanguageOnlyChannel(interaction.channelId!.toString())
? targetLanguage
: guildDocument.languages.localisation;
const guildLocale = getLocalisationLocaleByLanguage(guildLanguage);
const guildLocale = getLearningLocaleByLanguage(guildLanguage);
const featureLanguage = guildDocument.languages.feature;

if (!isAutocomplete(interaction)) {
Expand Down
6 changes: 3 additions & 3 deletions source/library/commands/handlers/context.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { getLocaleByLearningLanguage } from "logos:constants/languages/learning";
import { getLearningLocaleByLanguage } from "logos:constants/languages/learning";
import { isLocalisationLanguage } from "logos:constants/languages/localisation";
import { shuffle } from "ioredis/built/utils";
import type { Client } from "logos/client";
Expand Down Expand Up @@ -29,15 +29,15 @@ async function handleFindInContext(
await client.postponeReply(interaction, { visible: interaction.parameters.show });

const learningLanguage = interaction.parameters.language ?? interaction.learningLanguage;
const learningLocale = getLocaleByLearningLanguage(learningLanguage);
const learningLocale = getLearningLocaleByLanguage(learningLanguage);

const segmenter = new Intl.Segmenter(learningLocale, { granularity: "word" });
const lemmas = Array.from(segmenter.segment(interaction.parameters.phrase))
.filter((data) => data.isWordLike)
.map((data) => data.segment);
const lemmaUses = await client.volatile?.searchForLemmaUses({
lemmas,
learningLocale: learningLocale,
learningLocale,
caseSensitive: interaction.parameters["case-sensitive"],
});
if (lemmaUses === undefined || lemmaUses.sentencePairs.length === 0) {
Expand Down
4 changes: 2 additions & 2 deletions source/library/commands/handlers/game.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { capitalise } from "logos:constants/formatting";
import type { Locale } from "logos:constants/languages/localisation";
import type { LearningLocale } from "logos:constants/languages/learning";
import * as levenshtein from "fastest-levenshtein";
import type { Client } from "logos/client";
import { InteractionCollector } from "logos/collectors";
Expand Down Expand Up @@ -316,7 +316,7 @@ interface SentenceSelection {

async function getSentenceSelection(
client: Client,
{ learningLocale }: { learningLocale: Locale },
{ learningLocale }: { learningLocale: LearningLocale },
): Promise<SentenceSelection> {
const sentencePairs = await client.volatile!.getRandomSentencePairs({
learningLocale,
Expand Down
2 changes: 1 addition & 1 deletion source/library/commands/handlers/word.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ async function handleFindWordAutocomplete(
client: Client,
interaction: Logos.Interaction<any, { language: string | undefined }>,
): Promise<void> {
await handleAutocompleteLanguage(client, interaction, { type: "localisation" });
await handleAutocompleteLanguage(client, interaction, { type: "learning" });
}

/** Allows the user to look up a word and get information about it. */
Expand Down
Loading

0 comments on commit 9f5b7d1

Please sign in to comment.