From 2e13bcfee2927cb6af2f6a89f7c79eb8181d1539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sat, 31 May 2025 12:07:52 -0500 Subject: [PATCH] feat: remote strings --- packages/website-ue/src/hooks/useLocale.tsx | 15 +++++++++++---- .../src/pages/api/strings/[locale].json.ts | 13 +++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 packages/website-ue/src/pages/api/strings/[locale].json.ts diff --git a/packages/website-ue/src/hooks/useLocale.tsx b/packages/website-ue/src/hooks/useLocale.tsx index 3a0d5b098..792e442eb 100644 --- a/packages/website-ue/src/hooks/useLocale.tsx +++ b/packages/website-ue/src/hooks/useLocale.tsx @@ -1,7 +1,6 @@ import locales from '@blitzkit/i18n/locales.json' with { type: 'json' }; import type { BlitzKitStrings } from 'packages/i18n/src'; import { createContext, use, useContext } from 'react'; - const LocaleContext = createContext<{ locale: string; gameStrings: Record; @@ -45,9 +44,17 @@ const cache = new Map>(); function loadLocale(locale: string) { if (cache.has(locale)) return cache.get(locale)!; - const promise = strings[ - `../../../i18n/strings/${locale}.json` - ]() as Promise; + let promise: Promise; + + if (import.meta.env.SSR) { + promise = import('../core/i18n/getStrings').then((module) => + module.getStrings(locale), + ); + } else { + promise = fetch(`/api/strings/${locale}.json`).then((response) => + response.json(), + ); + } cache.set(locale, promise); diff --git a/packages/website-ue/src/pages/api/strings/[locale].json.ts b/packages/website-ue/src/pages/api/strings/[locale].json.ts new file mode 100644 index 000000000..3d94dd3ae --- /dev/null +++ b/packages/website-ue/src/pages/api/strings/[locale].json.ts @@ -0,0 +1,13 @@ +import locales from '@blitzkit/i18n/locales.json'; +import type { APIRoute, GetStaticPaths } from 'astro'; +import { getStrings } from 'packages/website-ue/src/core/i18n/getStrings'; + +export const getStaticPaths: GetStaticPaths = () => { + return locales.supported.map(({ locale }) => ({ + params: { locale }, + })); +}; + +export const GET: APIRoute<{}, { locale: string }> = async ({ params }) => { + return Response.json(await getStrings(params.locale)); +};