diff --git a/src/lib/lang/en/buildings.json b/public/lang/en/buildings.json similarity index 100% rename from src/lib/lang/en/buildings.json rename to public/lang/en/buildings.json diff --git a/src/lib/lang/en/game.json b/public/lang/en/game.json similarity index 100% rename from src/lib/lang/en/game.json rename to public/lang/en/game.json diff --git a/src/lib/lang/en/navbar.json b/public/lang/en/navbar.json similarity index 100% rename from src/lib/lang/en/navbar.json rename to public/lang/en/navbar.json diff --git a/src/lib/lang/en/research.json b/public/lang/en/research.json similarity index 100% rename from src/lib/lang/en/research.json rename to public/lang/en/research.json diff --git a/src/lib/lang/en/resourcebar.json b/public/lang/en/resourcebar.json similarity index 100% rename from src/lib/lang/en/resourcebar.json rename to public/lang/en/resourcebar.json diff --git a/src/lib/lang/en/resources.json b/public/lang/en/resources.json similarity index 100% rename from src/lib/lang/en/resources.json rename to public/lang/en/resources.json diff --git a/src/lib/lang/en/ships.json b/public/lang/en/ships.json similarity index 100% rename from src/lib/lang/en/ships.json rename to public/lang/en/ships.json diff --git a/public/lang/metadata.json b/public/lang/metadata.json new file mode 100644 index 0000000..617238c --- /dev/null +++ b/public/lang/metadata.json @@ -0,0 +1,6 @@ +[ + { + "id": "en", + "name": "English" + } +] \ No newline at end of file diff --git a/src/components/NavBar.astro b/src/components/NavBar.astro index 964e5e7..5c0bc41 100644 --- a/src/components/NavBar.astro +++ b/src/components/NavBar.astro @@ -1,5 +1,5 @@ --- -import { getHighestWeightedLanguage, getLocales } from '../lib/lang/langDriver'; +import { getHighestWeightedLanguage, getLocales } from '../lib/utils/langDriver'; interface Props { loggedIn: string; active: string; @@ -19,7 +19,7 @@ interface NavElement { dropdowns?: Array; } -const lang = await getLocales(getHighestWeightedLanguage(Astro.request.headers.get('accept-language')), 'navbar'); +const lang = await getLocales(await getHighestWeightedLanguage(Astro.request.headers.get('accept-language')), 'navbar'); const listOfElements: Array = [{ id: "home", diff --git a/src/components/ResourceBar.astro b/src/components/ResourceBar.astro index 6da3895..e0616e8 100644 --- a/src/components/ResourceBar.astro +++ b/src/components/ResourceBar.astro @@ -1,12 +1,12 @@ --- import { ObjectId } from 'mongodb'; import { calculateCurrentAvailableResources, getUserResources } from '../lib/utils/resourceManager'; -import { getHighestWeightedLanguage, getLocales } from '../lib/lang/langDriver'; +import { getHighestWeightedLanguage, getLocales } from '../lib/utils/langDriver'; import resourceTypes from '../lib/data/resources.json'; -const resourceLang = await getLocales(getHighestWeightedLanguage(Astro.request.headers.get('accept-language')), 'resources'); -const resBarLang = await getLocales(getHighestWeightedLanguage(Astro.request.headers.get('accept-language')), 'resourcebar'); +const resourceLang = await getLocales(await getHighestWeightedLanguage(Astro.request.headers.get('accept-language')), 'resources'); +const resBarLang = await getLocales(await getHighestWeightedLanguage(Astro.request.headers.get('accept-language')), 'resourcebar'); const resources = await calculateCurrentAvailableResources(new ObjectId(Astro.cookies.get('userid')?.value ?? '')); diff --git a/src/lib/lang/langDriver.ts b/src/lib/utils/langDriver.ts similarity index 59% rename from src/lib/lang/langDriver.ts rename to src/lib/utils/langDriver.ts index 598c1f9..b321052 100644 --- a/src/lib/lang/langDriver.ts +++ b/src/lib/utils/langDriver.ts @@ -1,18 +1,18 @@ -import fs from 'fs'; -import path from 'path'; -import { fileURLToPath } from 'url'; +export async function getSupportedLanguages() { + const metadata: [] = await (await fetch('http://localhost:4321/lang/metadata.json')).json(); -export function getSupportedLanguages() { - const supportedLanguages = fs.readdirSync(path.dirname(fileURLToPath(import.meta.url))).filter((file: string) => { - return fs.statSync(path.join(path.dirname(fileURLToPath(import.meta.url)), file)).isDirectory(); + const response: Array = []; + + metadata.forEach((lang: any) => { + response.push(lang.id); }); - return supportedLanguages; + return response; } -export function getHighestWeightedLanguage(header: string | null): any { +export async function getHighestWeightedLanguage(header: string | null): Promise { if(header === null) return 'en'; - const supportedLanguages = getSupportedLanguages(); + const supportedLanguages = await getSupportedLanguages(); const langs = header.split(','); let highestWeight = 0; @@ -33,11 +33,12 @@ export function getHighestWeightedLanguage(header: string | null): any { } export async function getLocales(language: string, type: string) { - if(!getSupportedLanguages().includes(language)) { + if(!(await getSupportedLanguages()).includes(language)) { + console.log(await getSupportedLanguages(), language) return null; } - const lang = (await import(`./${language}/${type}.json`)).default; + const lang = await (await fetch(`http://localhost:4321/lang/${language}/${type}.json`)).json(); const out: any = {}; for(const category in lang) { diff --git a/src/pages/game/buildings.astro b/src/pages/game/buildings.astro index ff6f65b..58b10cb 100644 --- a/src/pages/game/buildings.astro +++ b/src/pages/game/buildings.astro @@ -2,7 +2,7 @@ import Layout from '../../layouts/Layout.astro'; import NavBar from '../../components/NavBar.astro'; import { getUserByAccessToken } from '../../lib/db/users'; -import { getHighestWeightedLanguage, getLocales } from '../../lib/lang/langDriver'; +import { getHighestWeightedLanguage, getLocales } from '../../lib/utils/langDriver'; import ResourceBar from '../../components/ResourceBar.astro'; // import { calculateCurrentAvailableResources } from '../../lib/utils/resourceManager'; // import { getUserResources } from '../../lib/utils/resourceManager'; @@ -18,7 +18,7 @@ if(checkUser === null || checkUser.username !== username) return Astro.redirect( // const resources = await getUserResources(checkUser._id); -const locale = getHighestWeightedLanguage(Astro.request.headers.get('accept-language')); +const locale = await getHighestWeightedLanguage(Astro.request.headers.get('accept-language')); const langResources = await getLocales(locale, 'resources'); const langGame = await getLocales(locale, 'game'); diff --git a/src/pages/game/galaxyView.astro b/src/pages/game/galaxyView.astro index 3cea6dd..33419b0 100644 --- a/src/pages/game/galaxyView.astro +++ b/src/pages/game/galaxyView.astro @@ -2,7 +2,7 @@ import Layout from '../../layouts/Layout.astro'; import NavBar from '../../components/NavBar.astro'; import { getAllUsers, getUserByAccessToken } from '../../lib/db/users'; -import { getHighestWeightedLanguage, getLocales } from '../../lib/lang/langDriver'; +import { getHighestWeightedLanguage, getLocales } from '../../lib/utils/langDriver'; import format from '../../lib/utils/format'; const loggedToken = Astro.cookies.get('sessionToken')?.value ?? null; @@ -14,7 +14,7 @@ if(checkUser === null || checkUser.username !== username) return Astro.redirect( const allUsers = await getAllUsers(); -const langGame = await getLocales(getHighestWeightedLanguage(Astro.request.headers.get('accept-language')), 'game'); +const langGame = await getLocales(await getHighestWeightedLanguage(Astro.request.headers.get('accept-language')), 'game'); --- diff --git a/src/pages/game/profile.astro b/src/pages/game/profile.astro index 4c647d3..d86261d 100644 --- a/src/pages/game/profile.astro +++ b/src/pages/game/profile.astro @@ -2,7 +2,7 @@ import Layout from '../../layouts/Layout.astro'; import NavBar from '../../components/NavBar.astro'; import { getUserByAccessToken, getUserByNickOrEmail } from '../../lib/db/users'; -import { getHighestWeightedLanguage, getLocales } from '../../lib/lang/langDriver'; +import { getHighestWeightedLanguage, getLocales } from '../../lib/utils/langDriver'; import ResourceBar from '../../components/ResourceBar.astro'; import format from '../../lib/utils/format'; @@ -13,7 +13,7 @@ if(loggedToken === null || username === "") return Astro.redirect('/logout'); const checkUser = await getUserByAccessToken(loggedToken); if(checkUser === null || checkUser.username !== username) return Astro.redirect('/logout'); -const locale = getHighestWeightedLanguage(Astro.request.headers.get('accept-language')); +const locale = await getHighestWeightedLanguage(Astro.request.headers.get('accept-language')); const user = await getUserByNickOrEmail(username); diff --git a/src/pages/game/research.astro b/src/pages/game/research.astro index 96ded03..133063f 100644 --- a/src/pages/game/research.astro +++ b/src/pages/game/research.astro @@ -4,7 +4,7 @@ import { Icon } from 'astro-icon/components' import Layout from '../../layouts/Layout.astro'; import NavBar from '../../components/NavBar.astro'; import { getUserByAccessToken } from '../../lib/db/users'; -import { getHighestWeightedLanguage, getLocales } from '../../lib/lang/langDriver'; +import { getHighestWeightedLanguage, getLocales } from '../../lib/utils/langDriver'; import ResourceBar from '../../components/ResourceBar.astro'; type ResearchDetail = { id: string, level: number, requiredResearch: { id: string, level: number}[], cost: { [key: string]: number } }; @@ -18,7 +18,7 @@ if(loggedToken === null || username === "") return Astro.redirect('/logout'); const checkUser = await getUserByAccessToken(loggedToken); if(checkUser === null || checkUser.username !== username) return Astro.redirect('/logout'); -const locale = getHighestWeightedLanguage(Astro.request.headers.get('accept-language')); +const locale = await getHighestWeightedLanguage(Astro.request.headers.get('accept-language')); const langResources = await getLocales(locale, 'resources'); const langGame = await getLocales(locale, 'game'); diff --git a/src/pages/game/ships.astro b/src/pages/game/ships.astro index 9fad385..3b1f32e 100644 --- a/src/pages/game/ships.astro +++ b/src/pages/game/ships.astro @@ -2,7 +2,7 @@ import Layout from '../../layouts/Layout.astro'; import NavBar from '../../components/NavBar.astro'; import { getUserByAccessToken } from '../../lib/db/users'; -import { getHighestWeightedLanguage, getLocales } from '../../lib/lang/langDriver'; +import { getHighestWeightedLanguage, getLocales } from '../../lib/utils/langDriver'; import ResourceBar from '../../components/ResourceBar.astro'; import ships from '../../lib/data/ships.json'; @@ -14,7 +14,7 @@ if(loggedToken === null || username === "") return Astro.redirect('/logout'); const checkUser = await getUserByAccessToken(loggedToken); if(checkUser === null || checkUser.username !== username) return Astro.redirect('/logout'); -const locale = getHighestWeightedLanguage(Astro.request.headers.get('accept-language')); +const locale = await getHighestWeightedLanguage(Astro.request.headers.get('accept-language')); const langShips = await getLocales(locale, 'ships'); const playerShips = checkUser.ships;