From 56991b704f4de8ba7f8c3bbe5b598c370c059a06 Mon Sep 17 00:00:00 2001 From: dutlist <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Wed, 26 Jun 2024 06:41:53 +0200 Subject: [PATCH] language change for items --- .../custom/getItemListsController.ts | 19 +++-- src/services/itemDataService.ts | 82 ++++++++++++++++++- static/webui/index.html | 16 ++-- static/webui/script.js | 65 ++++++++++++++- 4 files changed, 165 insertions(+), 17 deletions(-) diff --git a/src/controllers/custom/getItemListsController.ts b/src/controllers/custom/getItemListsController.ts index 962b8857..ed90e495 100644 --- a/src/controllers/custom/getItemListsController.ts +++ b/src/controllers/custom/getItemListsController.ts @@ -1,5 +1,5 @@ import { RequestHandler } from "express"; -import { getEnglishString } from "@/src/services/itemDataService"; +import { getString } from "@/src/services/itemDataService"; import { ExportArcanes, ExportGear, @@ -16,20 +16,21 @@ interface ListedItem { fusionLimit?: number; } -const getItemListsController: RequestHandler = (_req, res) => { +const getItemListsController: RequestHandler = (req, res) => { const weapons = []; const miscitems = []; + const lang = req.query.lang?.toString() for (const [uniqueName, item] of Object.entries(ExportWeapons)) { if (item.productCategory !== "OperatorAmps") { if (item.totalDamage !== 0) { weapons.push({ uniqueName, - name: getEnglishString(item.name) + name: getString(item.name, lang) }); } else if (!item.excludeFromCodex) { miscitems.push({ uniqueName: "MiscItems:" + uniqueName, - name: getEnglishString(item.name) + name: getString(item.name, lang) }); } } @@ -37,13 +38,13 @@ const getItemListsController: RequestHandler = (_req, res) => { for (const [uniqueName, item] of Object.entries(ExportResources)) { miscitems.push({ uniqueName: "MiscItems:" + uniqueName, - name: getEnglishString(item.name) + name: getString(item.name, lang) }); } for (const [uniqueName, item] of Object.entries(ExportGear)) { miscitems.push({ uniqueName: "Consumables:" + uniqueName, - name: getEnglishString(item.name) + name: getString(item.name, lang) }); } @@ -52,7 +53,7 @@ const getItemListsController: RequestHandler = (_req, res) => { for (const [uniqueName, upgrade] of Object.entries(ExportUpgrades)) { mods.push({ uniqueName, - name: getEnglishString(upgrade.name), + name: getString(upgrade.name, lang), fusionLimit: upgrade.fusionLimit }); if (upgrade.isStarter || upgrade.isFrivolous || upgrade.upgradeEntries) { @@ -62,7 +63,7 @@ const getItemListsController: RequestHandler = (_req, res) => { for (const [uniqueName, arcane] of Object.entries(ExportArcanes)) { mods.push({ uniqueName, - name: getEnglishString(arcane.name) + name: getString(arcane.name, lang) }); } @@ -72,7 +73,7 @@ const getItemListsController: RequestHandler = (_req, res) => { .map(([uniqueName, warframe]) => { return { uniqueName, - name: getEnglishString(warframe.name) + name: getString(warframe.name, lang) }; }), weapons, diff --git a/src/services/itemDataService.ts b/src/services/itemDataService.ts index 3bf039dd..1a30400d 100644 --- a/src/services/itemDataService.ts +++ b/src/services/itemDataService.ts @@ -1,7 +1,21 @@ import { getIndexAfter } from "@/src/helpers/stringHelpers"; import { logger } from "@/src/utils/logger"; import { + dict_de, dict_en, + dict_es, + dict_fr, + dict_it, + dict_ja, + dict_ko, + dict_pl, + dict_pt, + dict_ru, + dict_tc, + dict_th, + dict_tr, + dict_uk, + dict_zh, ExportRecipes, ExportWarframes, ExportWeapons, @@ -75,6 +89,70 @@ export const getSuitByUniqueName = (uniqueName: string): IPowersuit | undefined return ExportWarframes[uniqueName]; }; -export const getEnglishString = (key: string): string => { - return dict_en[key] ?? key; +export const getString = (key: string, lang: string | undefined): string => { + let dict; + switch (lang) { + case "de": + dict = dict_de + break; + + case "es": + dict = dict_es + break; + + case "fr": + dict = dict_fr + break; + + case "it": + dict = dict_it + break; + + case "ja": + dict = dict_ja + break; + + case "ko": + dict = dict_ko + break; + + case "pl": + dict = dict_pl + break; + + case "pt": + dict = dict_pt + break; + + case "ru": + dict = dict_ru + break; + + case "tc": + dict = dict_tc + break; + + case "th": + dict = dict_th + break; + + case "tr": + dict = dict_tr + break; + + case "uk": + dict = dict_uk + break; + + case "zh": + dict = dict_zh + break; + + case "en": + default: + dict = dict_en + break; + } + + return dict[key] ?? key; }; diff --git a/static/webui/index.html b/static/webui/index.html index 533b2f20..59ec3bab 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -13,11 +13,17 @@ OpenWF WebUI - diff --git a/static/webui/script.js b/static/webui/script.js index db5b831c..5ba3d5d1 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -85,7 +85,7 @@ single.on("route_load", function (event) { }); window.itemListPromise = new Promise(resolve => { - const req = $.get("/custom/getItemLists"); + const req = $.get(`/custom/getItemLists?lang=${localStorage.getItem("lang")}`); req.done(data => { window.archonCrystalUpgrades = data.archonCrystalUpgrades; @@ -926,3 +926,66 @@ function doPopArchonCrystalUpgrade(type) { }); }); } + +function handleLangClick(lang) { + const languages = { + "de": "German", + "en": "English", + "es": "Spanish", + "fr": "French", + "it": "Italian", + "ja": "Japanese", + "ko": "Korean", + "pl": "Polish", + "pt": "Portuguese", + "ru": "Russian", + "tc": "Traditional Chinese", + "th": "Thai", + "tr": "Turkish", + "uk": "Ukrainian", + "zh": "Simplified Chinese" + }; + const selectedLangText = languages[lang] || "English"; + + $(".currentLanguage").text(selectedLangText); + + localStorage.setItem("lang", lang); + window.location.reload(); +} + +document.addEventListener('DOMContentLoaded', () => { + const languages = { + "de": "German", + "en": "English", + "es": "Spanish", + "fr": "French", + "it": "Italian", + "ja": "Japanese", + "ko": "Korean", + "pl": "Polish", + "pt": "Portuguese", + "ru": "Russian", + "tc": "Traditional Chinese", + "th": "Thai", + "tr": "Turkish", + "uk": "Ukrainian", + "zh": "Simplified Chinese" + }; + const languageMenu = document.getElementById('languageMenu'); + + Object.keys(languages).forEach(lang => { + const listItem = document.createElement('li'); + const linkItem = document.createElement('a'); + linkItem.className = 'dropdown-item'; + linkItem.href = '#'; + linkItem.dataset.lang = lang; + linkItem.textContent = languages[lang]; + linkItem.onclick = () => handleLangClick(lang); + listItem.appendChild(linkItem); + languageMenu.appendChild(listItem); + }); + + const savedLang = localStorage.getItem("lang") || "en"; + const savedLangText = languages[savedLang]; + $(".currentLanguage").text(savedLangText); +});