From 75d7b4554be1698a8e74ff40d411f30afc2fd03c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sat, 27 Sep 2025 15:38:37 -0500 Subject: [PATCH] feat: start of pew --- bun.lockb | Bin 463754 -> 549473 bytes packages/core/src/blitzkit/tankNames.ts | 34 ++--- packages/i18n/src/index.ts | 7 +- packages/i18n/src/strings.ts | 132 +++++++----------- packages/i18n/src/wrapper.ts | 15 ++ packages/website/astro.config.mjs | 30 ---- packages/website/astro.config.ts | 67 +++++++++ packages/website/package.json | 2 + packages/website/public/favicon.svg | 61 ++++---- .../website/src/components/LocaleSwitcher.tsx | 35 ++--- .../website/src/core/blitzkit/branches.ts | 13 +- packages/website/src/core/i18n/getStrings.ts | 7 +- .../website/src/pages/[...locale]/index.astro | 16 ++- 13 files changed, 225 insertions(+), 194 deletions(-) create mode 100644 packages/i18n/src/wrapper.ts delete mode 100644 packages/website/astro.config.mjs create mode 100644 packages/website/astro.config.ts diff --git a/bun.lockb b/bun.lockb index 466a6e303a236787b3b9ba4053d9579bd273d88f..90fba2261e6f9085fedea2875914cf8e7add1af3 100755 GIT binary patch delta 79025 zcmeFZc{r8b+c&=VW@A_83|o|;R7x4rCQ>RxBvFboXPz^YY$YNp+Hn;jQ--3DBs3e6 zN*Xi?rGX-pRKk0%eO=Xle!u(pzRz>K?_ck6@8fyCpYwCBbFKBc);ia^*0t*HV4-x+ zExF_+N|&dmB_<*GnHlN7BE4M>55PT-UR&fgN~=ox}^kSZ79 zPjm_p&Ah8)V32ZffQKt^G-5jl^mYkx@rC%iP+t=KS%4CN9?odgA&Y^dk$fZ%56lFk ziU^DcM5z_<8~wb!gCR8*!U&-b&jF$#d=8V0&=%sv0E1it0$l<~q|cY}5!$1Qx8rw; z#O^rI$B*6fOz@*ASr7FP_P`Xfeo5$n( zw2Kl*0Yq7lvzAOU1@t+AueY7Rb%AH;lSzvJ^T3ZXUe5r}23h|yj{Ho>BsJjnx@6Kqzz=K4 zq?Lf@0JQ)^0W|^F0xkm-B=ChE&Wp6kq

k0|3o>ajpei7Y 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 WpKfVsT|2S0Wn%N%OKmNGX8!}EzkwP6 delta 28152 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 Wf;m_(ws@K&#o`o%Uq0A;+Vmf6LyaQ< diff --git a/packages/core/src/blitzkit/tankNames.ts b/packages/core/src/blitzkit/tankNames.ts index 26dea0712..57018ee21 100644 --- a/packages/core/src/blitzkit/tankNames.ts +++ b/packages/core/src/blitzkit/tankNames.ts @@ -1,8 +1,8 @@ -import { deburr } from 'lodash-es'; -import { SUPPORTED_LOCALES } from '../../../i18n/src/strings'; -import { I18nString } from '../protos'; -import { fetchCamouflageDefinitions } from './camouflageDefinitions'; -import { fetchTankDefinitions } from './tankDefinitions'; +import locales from "@blitzkit/i18n/locales.json"; +import { deburr } from "lodash-es"; +import { I18nString } from "../protos"; +import { fetchCamouflageDefinitions } from "./camouflageDefinitions"; +import { fetchTankDefinitions } from "./tankDefinitions"; export async function fetchTankNames() { const [tankDefinitions, camouflageDefinitions] = await Promise.all([ @@ -26,25 +26,27 @@ export async function fetchTankNames() { searchableNameDeburr, camouflages: tank.camouflages ?.map((id) => - SUPPORTED_LOCALES.map( - (locale) => - camouflageDefinitions.camouflages[id]?.name.locales[locale], - ), + locales.supported.map( + ({ locale }) => + camouflageDefinitions.camouflages[id]?.name.locales[locale] + ) ) .flat() .filter(Boolean) .map(deburr) - .join(' '), + .join(" "), treeType: tank.type, }; - }), + }) ); } export const SEARCH_KEYS = [ - ...SUPPORTED_LOCALES.map((locale) => [ - `searchableName.locales.${locale}`, - `searchableNameDeburr.locales.${locale}`, - ]).flat(), - 'camouflages', + ...locales.supported + .map(({ locale }) => [ + `searchableName.locales.${locale}`, + `searchableNameDeburr.locales.${locale}`, + ]) + .flat(), + "camouflages", ]; diff --git a/packages/i18n/src/index.ts b/packages/i18n/src/index.ts index 1d7e6b8b6..9fb52c844 100644 --- a/packages/i18n/src/index.ts +++ b/packages/i18n/src/index.ts @@ -1,3 +1,4 @@ -export * from './literals'; -export * from './strings'; -export * from './unwrapper'; +export * from "./literals"; +export * from "./strings"; +export * from "./unwrapper"; +export * from "./wrapper"; diff --git a/packages/i18n/src/strings.ts b/packages/i18n/src/strings.ts index 25c022efd..386979308 100644 --- a/packages/i18n/src/strings.ts +++ b/packages/i18n/src/strings.ts @@ -1,98 +1,66 @@ -import { merge } from 'ts-deepmerge'; -import en from '../strings/en.json'; -import es from '../strings/es.json'; -import fr from '../strings/fr.json'; -import ja from '../strings/ja.json'; -import pl from '../strings/pl.json'; -import pt from '../strings/pt.json'; -import ru from '../strings/ru.json'; -import uk from '../strings/uk.json'; -import zh from '../strings/zh.json'; +import { merge } from "ts-deepmerge"; +import locales from "../locales.json"; +import en from "../strings/en.json"; +import es from "../strings/es.json"; +import fr from "../strings/fr.json"; +import ja from "../strings/ja.json"; +import pl from "../strings/pl.json"; +import pt from "../strings/pt.json"; +import ru from "../strings/ru.json"; +import uk from "../strings/uk.json"; +import zh from "../strings/zh.json"; export type BlitzKitStrings = typeof en; -const stringsRaw = { en, es, fr, ja, pl, pt, ru, uk, zh }; +const stringsRaw: Record = { + en, + es, + fr, + ja, + pl, + pt, + ru, + uk, + zh, +}; -export const SUPPORTED_LOCALES = Object.keys(stringsRaw) as SupportedLocale[]; - -export const DEFAULT_LOCALE = SUPPORTED_LOCALES[0]; - -function redact(string: string) { - const matches = [...string.matchAll(/%s\d+/g)]; - const characters = string - .split('') - .map((char) => (char === ' ' ? ' ' : 'β–ˆ')) as string[]; - - matches.forEach((match) => { - const start = match.index; - const matchText = match[0]; - for (let i = 0; i < matchText.length; i++) { - characters[start + i] = matchText[i]; - } - }); - - return characters.join(''); -} - -function nuke(object: TranslationTree) { - for (const key in object) { - const typedKey = key as keyof typeof object; - - if (typeof object[typedKey] === 'string') { - const value = object[typedKey]; - object[typedKey] = redact(value as string); - } else nuke(object[typedKey] as TranslationTree); - } -} - -const stringsPartial: Partial> = {}; +export const STRINGS: Record = {}; for (const locale in stringsRaw) { - if (locale === DEFAULT_LOCALE) { - stringsPartial[DEFAULT_LOCALE] = stringsRaw[DEFAULT_LOCALE]; + if (locale === locales.default) { + STRINGS[locales.default] = stringsRaw[locales.default] as BlitzKitStrings; continue; } - const localeStrings = stringsRaw[locale as SupportedLocale]; - stringsPartial[locale as SupportedLocale] = merge( - stringsRaw[DEFAULT_LOCALE], - localeStrings, - ); - - if (import.meta.env.PUBLIC_DEBUG_MISSING_I18N === 'true') { - nuke(stringsPartial[locale as SupportedLocale]!); - } + const localeStrings = stringsRaw[locale]; + STRINGS[locale] = merge( + stringsRaw[locales.default], + localeStrings + ) as BlitzKitStrings; } -export const STRINGS = stringsPartial as Record< - SupportedLocale, - BlitzKitStrings ->; - -export type SupportedLocale = keyof typeof stringsRaw; - -export const SUPPORTED_LOCALE_BLITZ_MAP: Record = { - en: 'en', - es: 'es', - fr: 'fr', - ja: 'ja', - pt: 'pt', - ru: 'ru', - uk: 'uk', - zh: 'zh-Hans', - pl: 'pl', +export const SUPPORTED_LOCALE_BLITZ_MAP: Record = { + en: "en", + es: "es", + fr: "fr", + ja: "ja", + pt: "pt", + ru: "ru", + uk: "uk", + zh: "zh-Hans", + pl: "pl", }; -export const SUPPORTED_LOCALE_FLAGS: Record = { - en: 'πŸ‡ΊπŸ‡Έ', - es: 'πŸ‡ͺπŸ‡Έ', - fr: 'πŸ‡«πŸ‡·', - ja: 'πŸ‡―πŸ‡΅', - pt: 'πŸ‡΅πŸ‡Ή', - ru: 'πŸ‡·πŸ‡Ί', - uk: 'πŸ‡ΊπŸ‡¦', - zh: 'πŸ‡¨πŸ‡³', - pl: 'πŸ‡΅πŸ‡±', +export const SUPPORTED_LOCALE_FLAGS: Record = { + en: "πŸ‡ΊπŸ‡Έ", + es: "πŸ‡ͺπŸ‡Έ", + fr: "πŸ‡«πŸ‡·", + ja: "πŸ‡―πŸ‡΅", + pt: "πŸ‡΅πŸ‡Ή", + ru: "πŸ‡·πŸ‡Ί", + uk: "πŸ‡ΊπŸ‡¦", + zh: "πŸ‡¨πŸ‡³", + pl: "πŸ‡΅πŸ‡±", }; export type TranslationTree = { [key: string]: TranslationNode }; diff --git a/packages/i18n/src/wrapper.ts b/packages/i18n/src/wrapper.ts new file mode 100644 index 000000000..544435136 --- /dev/null +++ b/packages/i18n/src/wrapper.ts @@ -0,0 +1,15 @@ +import locales from "../locales.json"; +import { BlitzKitStrings, STRINGS } from "./strings"; + +export function wrapper(slicer: (strings: BlitzKitStrings) => string) { + const defaultString = slicer(STRINGS[locales.default] as BlitzKitStrings); + + const object = { [locales.default]: defaultString }; + + for (const { locale } of locales.supported) { + const string = slicer(STRINGS[locale] as BlitzKitStrings); + if (string !== defaultString) object[locale] = string; + } + + return object; +} diff --git a/packages/website/astro.config.mjs b/packages/website/astro.config.mjs deleted file mode 100644 index 1cc967379..000000000 --- a/packages/website/astro.config.mjs +++ /dev/null @@ -1,30 +0,0 @@ -// @ts-check -import strings from "@blitzkit/i18n/strings/en.json"; -import favicons from "astro-favicons"; -import { defineConfig } from "astro/config"; - -import react from "@astrojs/react"; - -export default defineConfig({ - devToolbar: { enabled: false }, - - integrations: [ - favicons({ - name: strings.common.name, - short_name: strings.common.name, - - manifest: { start_url: "/", display_override: ["minimal-ui"] }, - - icons: { - windows: true, - android: true, - appleIcon: true, - appleStartup: true, - favicons: true, - yandex: true, - }, - }), - - react(), - ], -}); diff --git a/packages/website/astro.config.ts b/packages/website/astro.config.ts new file mode 100644 index 000000000..54bad5eed --- /dev/null +++ b/packages/website/astro.config.ts @@ -0,0 +1,67 @@ +// @ts-check +import strings from "@blitzkit/i18n/strings/en.json"; +import AstroPWA from "@vite-pwa/astro"; +import favicons from "astro-favicons"; +import { defineConfig } from "astro/config"; + +import react from "@astrojs/react"; +import { wrapper } from "@blitzkit/i18n"; +import { mauve, mauveDark } from "@radix-ui/colors"; +import { tools } from "./src/constants/tools"; + +export default defineConfig({ + devToolbar: { enabled: false }, + + integrations: [ + favicons({ + name: strings.common.name, + short_name: strings.common.name, + + background: mauveDark.mauve1, + themes: [mauve.mauve1, mauveDark.mauve1], + appleStatusBarStyle: "black-translucent", + + shortcuts: Object.values(tools) + .filter((tool) => !tool.disabled && !tool.href) + .map((tool) => { + const stringId = (tool.strings ?? + tool.id) as keyof typeof strings.website.tools; + + return { + name: strings.website.tools[stringId].name, + name_localized: wrapper( + (strings) => strings.website.tools[stringId].name + ), + description: strings.website.tools[stringId].description, + description_localized: wrapper( + (strings) => strings.website.tools[stringId].description + ), + short_name: strings.website.tools[stringId].name, + short_name_localized: wrapper( + (strings) => strings.website.tools[stringId].name + ), + url: `/${tool.id}`, + }; + }), + + manifest: { + start_url: "/", + display: "fullscreen", + display_override: ["fullscreen", "standalone", "minimal-ui"], + }, + + icons: { + windows: true, + android: true, + appleIcon: true, + appleStartup: true, + favicons: true, + yandex: true, + }, + }), + + AstroPWA({ manifest: false }), + + react(), + ], +}); diff --git a/packages/website/package.json b/packages/website/package.json index 3312821c6..b760100a3 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -9,8 +9,10 @@ }, "dependencies": { "@astrojs/react": "^4.4.0", + "@radix-ui/colors": "^3.0.0", "@types/react": "^19.1.14", "@types/react-dom": "^19.1.9", + "@vite-pwa/astro": "^1.1.0", "astro": "^5.14.1", "astro-favicons": "^3.1.5", "react": "^19.1.1", diff --git a/packages/website/public/favicon.svg b/packages/website/public/favicon.svg index f153bc7be..a89c21cb9 100644 --- a/packages/website/public/favicon.svg +++ b/packages/website/public/favicon.svg @@ -1,47 +1,46 @@ - - - - - - - - + + + + + + + + + + + + + + + - + - - + + - - + + - - - - - + - - - + + + - - - + + + - - - - - - - + + + diff --git a/packages/website/src/components/LocaleSwitcher.tsx b/packages/website/src/components/LocaleSwitcher.tsx index 9e949e944..d53ed9e2f 100644 --- a/packages/website/src/components/LocaleSwitcher.tsx +++ b/packages/website/src/components/LocaleSwitcher.tsx @@ -1,17 +1,16 @@ -import {} from '@blitzkit/core'; import { - DEFAULT_LOCALE, STRINGS, - SUPPORTED_LOCALES, SUPPORTED_LOCALE_FLAGS, -} from '@blitzkit/i18n'; -import { Select } from '@radix-ui/themes'; -import type { LocaleAcceptorProps } from '../hooks/useLocale'; -import { BlitzKitTheme } from './BlitzKitTheme'; + type BlitzKitStrings, +} from "@blitzkit/i18n"; +import locales from "@blitzkit/i18n/locales.json"; +import { Select } from "@radix-ui/themes"; +import type { LocaleAcceptorProps } from "../hooks/useLocale"; +import { BlitzKitTheme } from "./BlitzKitTheme"; export function LocaleSwitcherThemeWrapper({ locale }: LocaleAcceptorProps) { return ( - + ); @@ -22,29 +21,33 @@ export function LocaleSwitcher({ locale }: LocaleAcceptorProps) { { - localStorage.setItem('preferred-locale', locale); + localStorage.setItem("preferred-locale", locale); let rawPath = window.location.pathname; - for (const supportedLocale of SUPPORTED_LOCALES) { - if (window.location.pathname.startsWith(`/${supportedLocale}`)) { - rawPath = rawPath.replace(`/${supportedLocale}`, ''); + for (const supported of locales.supported) { + if (window.location.pathname.startsWith(`/${supported.locale}`)) { + rawPath = rawPath.replace(`/${supported.locale}`, ""); break; } } window.location.pathname = `${ - locale === DEFAULT_LOCALE ? '' : `/${locale}` + locale === locales.default ? "" : `/${locale}` }${rawPath}`; }} > - {SUPPORTED_LOCALES.map((locale) => ( + {locales.supported.map(({ locale }) => ( - {SUPPORTED_LOCALE_FLAGS[locale]}{' '} - {STRINGS[locale].common.locales[locale]} + {SUPPORTED_LOCALE_FLAGS[locale]}{" "} + { + STRINGS[locale].common.locales[ + locale as keyof BlitzKitStrings["common"]["locales"] + ] + } ))} diff --git a/packages/website/src/core/blitzkit/branches.ts b/packages/website/src/core/blitzkit/branches.ts index 2b3c5a9b3..1861f11c8 100644 --- a/packages/website/src/core/blitzkit/branches.ts +++ b/packages/website/src/core/blitzkit/branches.ts @@ -1,15 +1,16 @@ -import { assertSecret } from '@blitzkit/core'; -import { DEFAULT_LOCALE, STRINGS, type SupportedLocale } from '@blitzkit/i18n'; +import { assertSecret } from "@blitzkit/core"; +import { STRINGS } from "@blitzkit/i18n"; +import locales from "@blitzkit/i18n/locales.json"; -export function resolveBranchName(locale: string = DEFAULT_LOCALE) { +export function resolveBranchName(locale: string = locales.default) { if (!(locale in STRINGS)) throw new Error(`Unsupported locale: ${locale}`); - const strings = STRINGS[locale as SupportedLocale]; + const strings = STRINGS[locale]; const secret = assertSecret(import.meta.env.PUBLIC_BRANCH); if ( - assertSecret(import.meta.env.MODE) === 'development' && - secret === 'dev' + assertSecret(import.meta.env.MODE) === "development" && + secret === "dev" ) { return strings.common.branches.local; } else { diff --git a/packages/website/src/core/i18n/getStrings.ts b/packages/website/src/core/i18n/getStrings.ts index ccd3480bc..85f30f873 100644 --- a/packages/website/src/core/i18n/getStrings.ts +++ b/packages/website/src/core/i18n/getStrings.ts @@ -1,6 +1,7 @@ -import { DEFAULT_LOCALE, STRINGS, type SupportedLocale } from '@blitzkit/i18n'; +import { STRINGS } from "@blitzkit/i18n"; +import locales from "@blitzkit/i18n/locales.json"; -export function getStrings(locale: string = DEFAULT_LOCALE) { - if (locale in STRINGS) return STRINGS[locale as SupportedLocale]; +export function getStrings(locale: string = locales.default) { + if (locale in STRINGS) return STRINGS[locale]; throw new Error(`Unsupported locale: ${locale}`); } diff --git a/packages/website/src/pages/[...locale]/index.astro b/packages/website/src/pages/[...locale]/index.astro index 56d35daed..af513a94d 100644 --- a/packages/website/src/pages/[...locale]/index.astro +++ b/packages/website/src/pages/[...locale]/index.astro @@ -1,7 +1,7 @@ --- import { AstroSeo } from "@astrolib/seo"; import { assertSecret } from "@blitzkit/core"; -import { DEFAULT_LOCALE, SUPPORTED_LOCALES } from "@blitzkit/i18n"; +import locales from "@blitzkit/i18n/locales.json"; import { literals } from "@blitzkit/i18n/src/literals"; import { Box, Flex, Link } from "@radix-ui/themes"; import type { GetStaticPaths } from "astro"; @@ -16,7 +16,7 @@ import BaseLayout from "../../layouts/BaseLayout.astro"; const MAX_TOOLS_PER_ROW = 2; const PUBLIC_ASSET_BRANCH = assertSecret(import.meta.env.PUBLIC_BRANCH); -const locale = Astro.params.locale ?? DEFAULT_LOCALE; +const locale = Astro.params.locale ?? locales.default; const strings = getStrings(Astro.params.locale); const rows: Tool[][] = []; @@ -40,9 +40,9 @@ for (const id in tools) { export const getStaticPaths = (() => { return [ - ...SUPPORTED_LOCALES.filter((locale) => locale !== DEFAULT_LOCALE).map( - (locale) => ({ params: { locale } }) - ), + ...locales.supported + .filter(({ locale }) => locale !== locales.default) + .map(({ locale }) => ({ params: { locale } })), { params: { locale: undefined } }, ]; }) satisfies GetStaticPaths; @@ -81,7 +81,7 @@ export const getStaticPaths = (() => { --> { - locale !== DEFAULT_LOCALE && ( + locale !== locales.default && ( { > {literals(strings.website.home.help_translate, [ "BlitzKit", - strings.common.locales[locale], + strings.common.locales[ + locale as keyof typeof strings.common.locales + ], ])}