From 8203db3dc224fac659072b8e58b7f39e6851e35e Mon Sep 17 00:00:00 2001 From: tresabhi <43380238+tresabhi@users.noreply.github.com> Date: Fri, 27 Dec 2024 13:43:25 -0600 Subject: [PATCH] feat: some locale links --- packages/website/src/components/Footer.astro | 18 ++++++++++++------ packages/website/src/components/LinkI18n.tsx | 19 +++++++++++++++++++ .../website/src/core/i18n/getBestLocale.ts | 11 +++++++++++ packages/website/src/layouts/BaseLayout.astro | 11 +++++------ 4 files changed, 47 insertions(+), 12 deletions(-) create mode 100644 packages/website/src/components/LinkI18n.tsx create mode 100644 packages/website/src/core/i18n/getBestLocale.ts diff --git a/packages/website/src/components/Footer.astro b/packages/website/src/components/Footer.astro index 2bd1ccc6b..1f22b5a93 100644 --- a/packages/website/src/components/Footer.astro +++ b/packages/website/src/components/Footer.astro @@ -2,8 +2,10 @@ import { assertSecret, fetchGameDefinitions } from '@blitzkit/core'; import { Code, Flex, Heading, Link, Text } from '@radix-ui/themes'; import packageJson from '../../../../package.json'; +import { LinkI18n } from './LinkI18n'; const gameDefinitions = await fetchGameDefinitions(); +const { locale } = Astro.params; --- + {locale} - Credits + Credits GitHub - Patches + Patches @@ -101,12 +107,12 @@ const gameDefinitions = await fetchGameDefinitions(); > Legal - + Privacy policy - - + + Terms of service - + diff --git a/packages/website/src/components/LinkI18n.tsx b/packages/website/src/components/LinkI18n.tsx new file mode 100644 index 000000000..4ad51e137 --- /dev/null +++ b/packages/website/src/components/LinkI18n.tsx @@ -0,0 +1,19 @@ +import { Link, type LinkProps } from '@radix-ui/themes'; +import { getBestLocale } from '../core/i18n/getBestLocale'; + +type LinkI18nProps = LinkProps & { + locale: string | undefined; +}; + +export function LinkI18n({ locale, href, ...props }: LinkI18nProps) { + const bestLocale = getBestLocale(); + const resolvedLocale = locale ?? bestLocale; + const prefix = resolvedLocale === undefined ? '' : `/${resolvedLocale}`; + + return ( + + ); +} diff --git a/packages/website/src/core/i18n/getBestLocale.ts b/packages/website/src/core/i18n/getBestLocale.ts new file mode 100644 index 000000000..471f663ed --- /dev/null +++ b/packages/website/src/core/i18n/getBestLocale.ts @@ -0,0 +1,11 @@ +import { DEFAULT_LOCALE, SUPPORTED_LOCALES } from '@blitzkit/core'; + +export function getBestLocale() { + const desiredLocale = navigator.language.split('-')[0]; + const isSupported = SUPPORTED_LOCALES.includes(desiredLocale); + const isDefault = desiredLocale === DEFAULT_LOCALE; + + if (!isSupported || isDefault) return undefined; + + return desiredLocale; +} diff --git a/packages/website/src/layouts/BaseLayout.astro b/packages/website/src/layouts/BaseLayout.astro index 819ab245f..9704d5d82 100644 --- a/packages/website/src/layouts/BaseLayout.astro +++ b/packages/website/src/layouts/BaseLayout.astro @@ -38,17 +38,16 @@ const isRoot = pathname === '/';