feat: new protos

This commit is contained in:
TrèsAbhi committed 2025-05-24 12:24:53 -05:00
1 parent e7ca8f1b10
commit 5082e1b82b
31 files changed
+141 -132

No files matched your search

+1 -1
View File
@@ -22,7 +22,7 @@ depots
public/sitemap*
/firebase.json
target
# packages/core/src/protos/*.ts
# *.ts
/.vercel
/.astro
.vercel
+1
View File
@@ -148,6 +148,7 @@
"Promisable",
"proto",
"protobuf",
"protoc",
"protos",
"Pyogenics",
"ratingleaderboard",
BIN
View File
Binary file not shown.
+3 -2
View File
@@ -1,12 +1,13 @@
{
"name": "blitzkit",
"name": "@blitzkit",
"private": true,
"version": "1.27.11",
"description": "🎉 Tools for everything World of Tanks Blitz",
"type": "module",
"types": "./types.d.ts",
"workspaces": [
"packages/*"
"packages/*",
"submodules/*"
],
"scripts": {
"build:assets": "cd packages/scripts && bun run build:assets",
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/average_definitions.proto
// source: average_definitions.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
@@ -2,7 +2,7 @@ syntax = "proto2";
package blitzkit;
import "packages/core/src/protos/i18n.proto";
import "i18n.proto";
message CamouflageDefinitions {
map<uint32, Camouflage> camouflages = 1;
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/camouflage_definitions.proto
// source: camouflage_definitions.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
@@ -2,7 +2,7 @@ syntax = "proto2";
package blitzkit;
import "packages/core/src/protos/i18n.proto";
import "i18n.proto";
message ConsumableDefinitions {
map<uint32, Consumable> consumables = 1;
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/consumable_definitions.proto
// source: consumable_definitions.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
@@ -11,14 +11,14 @@ import { createBaseI18nString, I18nString } from "./i18n";
export const protobufPackage = "blitzkit";
export enum ConsumableTankCategoryFilterCategory {
CLIP = 0,
CONSUMABLE_TANK_CATEGORY_FILTER_CATEGORY_CLIP = 0,
}
export function consumableTankCategoryFilterCategoryFromJSON(object: any): ConsumableTankCategoryFilterCategory {
switch (object) {
case 0:
case "CONSUMABLE_TANK_CATEGORY_FILTER_CATEGORY_CLIP":
return ConsumableTankCategoryFilterCategory.CLIP;
return ConsumableTankCategoryFilterCategory.CONSUMABLE_TANK_CATEGORY_FILTER_CATEGORY_CLIP;
default:
throw new globalThis.Error(
"Unrecognized enum value " + object + " for enum ConsumableTankCategoryFilterCategory",
@@ -28,7 +28,7 @@ export function consumableTankCategoryFilterCategoryFromJSON(object: any): Consu
export function consumableTankCategoryFilterCategoryToJSON(object: ConsumableTankCategoryFilterCategory): string {
switch (object) {
case ConsumableTankCategoryFilterCategory.CLIP:
case ConsumableTankCategoryFilterCategory.CONSUMABLE_TANK_CATEGORY_FILTER_CATEGORY_CLIP:
return "CONSUMABLE_TANK_CATEGORY_FILTER_CATEGORY_CLIP";
default:
throw new globalThis.Error(
@@ -2,7 +2,7 @@ syntax = "proto2";
package blitzkit;
import "packages/core/src/protos/i18n.proto";
import "i18n.proto";
message EquipmentDefinitions {
map<string, EquipmentPreset> presets = 1;
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/equipment_definitions.proto
// source: equipment_definitions.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
+1 -1
View File
@@ -2,7 +2,7 @@ syntax = "proto2";
package blitzkit;
import "packages/core/src/protos/i18n.proto";
import "i18n.proto";
message Gallery {
repeated Avatar avatars = 1;
+1 -1
View File
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/gallery.proto
// source: gallery.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
@@ -2,7 +2,7 @@ syntax = "proto2";
package blitzkit;
import "packages/core/src/protos/i18n.proto";
import "i18n.proto";
message GameDefinitions {
required string version = 1;
+1 -1
View File
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/game_definitions.proto
// source: game_definitions.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
+1 -1
View File
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/i18n.proto
// source: i18n.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
@@ -2,7 +2,7 @@ syntax = "proto2";
package blitzkit;
import "packages/core/src/protos/i18n.proto";
import "i18n.proto";
message MapDefinitions {
map<int32, MapDefinition> maps = 1;
+1 -1
View File
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/map_definitions.proto
// source: map_definitions.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/model_definitions.proto
// source: model_definitions.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
+1 -1
View File
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/popular_tanks.proto
// source: popular_tanks.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
@@ -2,8 +2,8 @@ syntax = "proto2";
package blitzkit;
import "packages/core/src/protos/consumable_definitions.proto";
import "packages/core/src/protos/i18n.proto";
import "consumable_definitions.proto";
import "i18n.proto";
message ProvisionDefinitions {
map<uint32, Provision> provisions = 1;
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/provision_definitions.proto
// source: provision_definitions.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/rating_leaderboard.proto
// source: rating_leaderboard.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
+1 -1
View File
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/reviews.proto
// source: reviews.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/skill_definitions.proto
// source: skill_definitions.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
@@ -2,7 +2,7 @@ syntax = "proto2";
package blitzkit;
import "packages/core/src/protos/i18n.proto";
import "i18n.proto";
message TankDefinitions {
map<uint32, TankDefinition> tanks = 1;
+70 -70
View File
@@ -2,7 +2,7 @@
// versions:
// protoc-gen-ts_proto v2.2.2
// protoc v5.28.2
// source: packages/core/src/protos/tank_definitions.proto
// source: tank_definitions.proto
/* eslint-disable */
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
@@ -11,18 +11,18 @@ import { createBaseI18nString, I18nString } from "./i18n";
export const protobufPackage = "blitzkit";
export enum TankPriceType {
CREDITS = 0,
GOLD = 1,
TANK_PRICE_TYPE_CREDITS = 0,
TANK_PRICE_TYPE_GOLD = 1,
}
export function tankPriceTypeFromJSON(object: any): TankPriceType {
switch (object) {
case 0:
case "TANK_PRICE_TYPE_CREDITS":
return TankPriceType.CREDITS;
return TankPriceType.TANK_PRICE_TYPE_CREDITS;
case 1:
case "TANK_PRICE_TYPE_GOLD":
return TankPriceType.GOLD;
return TankPriceType.TANK_PRICE_TYPE_GOLD;
default:
throw new globalThis.Error("Unrecognized enum value " + object + " for enum TankPriceType");
}
@@ -30,9 +30,9 @@ export function tankPriceTypeFromJSON(object: any): TankPriceType {
export function tankPriceTypeToJSON(object: TankPriceType): string {
switch (object) {
case TankPriceType.CREDITS:
case TankPriceType.TANK_PRICE_TYPE_CREDITS:
return "TANK_PRICE_TYPE_CREDITS";
case TankPriceType.GOLD:
case TankPriceType.TANK_PRICE_TYPE_GOLD:
return "TANK_PRICE_TYPE_GOLD";
default:
throw new globalThis.Error("Unrecognized enum value " + object + " for enum TankPriceType");
@@ -40,26 +40,26 @@ export function tankPriceTypeToJSON(object: TankPriceType): string {
}
export enum ShellType {
AP = 0,
APCR = 1,
HEAT = 2,
HE = 3,
SHELL_TYPE_AP = 0,
SHELL_TYPE_APCR = 1,
SHELL_TYPE_HEAT = 2,
SHELL_TYPE_HE = 3,
}
export function shellTypeFromJSON(object: any): ShellType {
switch (object) {
case 0:
case "SHELL_TYPE_AP":
return ShellType.AP;
return ShellType.SHELL_TYPE_AP;
case 1:
case "SHELL_TYPE_APCR":
return ShellType.APCR;
return ShellType.SHELL_TYPE_APCR;
case 2:
case "SHELL_TYPE_HEAT":
return ShellType.HEAT;
return ShellType.SHELL_TYPE_HEAT;
case 3:
case "SHELL_TYPE_HE":
return ShellType.HE;
return ShellType.SHELL_TYPE_HE;
default:
throw new globalThis.Error("Unrecognized enum value " + object + " for enum ShellType");
}
@@ -67,13 +67,13 @@ export function shellTypeFromJSON(object: any): ShellType {
export function shellTypeToJSON(object: ShellType): string {
switch (object) {
case ShellType.AP:
case ShellType.SHELL_TYPE_AP:
return "SHELL_TYPE_AP";
case ShellType.APCR:
case ShellType.SHELL_TYPE_APCR:
return "SHELL_TYPE_APCR";
case ShellType.HEAT:
case ShellType.SHELL_TYPE_HEAT:
return "SHELL_TYPE_HEAT";
case ShellType.HE:
case ShellType.SHELL_TYPE_HE:
return "SHELL_TYPE_HE";
default:
throw new globalThis.Error("Unrecognized enum value " + object + " for enum ShellType");
@@ -81,30 +81,30 @@ export function shellTypeToJSON(object: ShellType): string {
}
export enum ModuleType {
VEHICLE = 0,
ENGINE = 1,
TRACKS = 2,
TURRET = 3,
GUN = 4,
MODULE_TYPE_VEHICLE = 0,
MODULE_TYPE_ENGINE = 1,
MODULE_TYPE_TRACKS = 2,
MODULE_TYPE_TURRET = 3,
MODULE_TYPE_GUN = 4,
}
export function moduleTypeFromJSON(object: any): ModuleType {
switch (object) {
case 0:
case "MODULE_TYPE_VEHICLE":
return ModuleType.VEHICLE;
return ModuleType.MODULE_TYPE_VEHICLE;
case 1:
case "MODULE_TYPE_ENGINE":
return ModuleType.ENGINE;
return ModuleType.MODULE_TYPE_ENGINE;
case 2:
case "MODULE_TYPE_TRACKS":
return ModuleType.TRACKS;
return ModuleType.MODULE_TYPE_TRACKS;
case 3:
case "MODULE_TYPE_TURRET":
return ModuleType.TURRET;
return ModuleType.MODULE_TYPE_TURRET;
case 4:
case "MODULE_TYPE_GUN":
return ModuleType.GUN;
return ModuleType.MODULE_TYPE_GUN;
default:
throw new globalThis.Error("Unrecognized enum value " + object + " for enum ModuleType");
}
@@ -112,15 +112,15 @@ export function moduleTypeFromJSON(object: any): ModuleType {
export function moduleTypeToJSON(object: ModuleType): string {
switch (object) {
case ModuleType.VEHICLE:
case ModuleType.MODULE_TYPE_VEHICLE:
return "MODULE_TYPE_VEHICLE";
case ModuleType.ENGINE:
case ModuleType.MODULE_TYPE_ENGINE:
return "MODULE_TYPE_ENGINE";
case ModuleType.TRACKS:
case ModuleType.MODULE_TYPE_TRACKS:
return "MODULE_TYPE_TRACKS";
case ModuleType.TURRET:
case ModuleType.MODULE_TYPE_TURRET:
return "MODULE_TYPE_TURRET";
case ModuleType.GUN:
case ModuleType.MODULE_TYPE_GUN:
return "MODULE_TYPE_GUN";
default:
throw new globalThis.Error("Unrecognized enum value " + object + " for enum ModuleType");
@@ -128,26 +128,26 @@ export function moduleTypeToJSON(object: ModuleType): string {
}
export enum TankClass {
LIGHT = 0,
MEDIUM = 1,
HEAVY = 2,
TANK_DESTROYER = 3,
TANK_CLASS_LIGHT = 0,
TANK_CLASS_MEDIUM = 1,
TANK_CLASS_HEAVY = 2,
TANK_CLASS_TANK_DESTROYER = 3,
}
export function tankClassFromJSON(object: any): TankClass {
switch (object) {
case 0:
case "TANK_CLASS_LIGHT":
return TankClass.LIGHT;
return TankClass.TANK_CLASS_LIGHT;
case 1:
case "TANK_CLASS_MEDIUM":
return TankClass.MEDIUM;
return TankClass.TANK_CLASS_MEDIUM;
case 2:
case "TANK_CLASS_HEAVY":
return TankClass.HEAVY;
return TankClass.TANK_CLASS_HEAVY;
case 3:
case "TANK_CLASS_TANK_DESTROYER":
return TankClass.TANK_DESTROYER;
return TankClass.TANK_CLASS_TANK_DESTROYER;
default:
throw new globalThis.Error("Unrecognized enum value " + object + " for enum TankClass");
}
@@ -155,13 +155,13 @@ export function tankClassFromJSON(object: any): TankClass {
export function tankClassToJSON(object: TankClass): string {
switch (object) {
case TankClass.LIGHT:
case TankClass.TANK_CLASS_LIGHT:
return "TANK_CLASS_LIGHT";
case TankClass.MEDIUM:
case TankClass.TANK_CLASS_MEDIUM:
return "TANK_CLASS_MEDIUM";
case TankClass.HEAVY:
case TankClass.TANK_CLASS_HEAVY:
return "TANK_CLASS_HEAVY";
case TankClass.TANK_DESTROYER:
case TankClass.TANK_CLASS_TANK_DESTROYER:
return "TANK_CLASS_TANK_DESTROYER";
default:
throw new globalThis.Error("Unrecognized enum value " + object + " for enum TankClass");
@@ -169,22 +169,22 @@ export function tankClassToJSON(object: TankClass): string {
}
export enum TankType {
RESEARCHABLE = 0,
PREMIUM = 1,
COLLECTOR = 2,
TANK_TYPE_RESEARCHABLE = 0,
TANK_TYPE_PREMIUM = 1,
TANK_TYPE_COLLECTOR = 2,
}
export function tankTypeFromJSON(object: any): TankType {
switch (object) {
case 0:
case "TANK_TYPE_RESEARCHABLE":
return TankType.RESEARCHABLE;
return TankType.TANK_TYPE_RESEARCHABLE;
case 1:
case "TANK_TYPE_PREMIUM":
return TankType.PREMIUM;
return TankType.TANK_TYPE_PREMIUM;
case 2:
case "TANK_TYPE_COLLECTOR":
return TankType.COLLECTOR;
return TankType.TANK_TYPE_COLLECTOR;
default:
throw new globalThis.Error("Unrecognized enum value " + object + " for enum TankType");
}
@@ -192,11 +192,11 @@ export function tankTypeFromJSON(object: any): TankType {
export function tankTypeToJSON(object: TankType): string {
switch (object) {
case TankType.RESEARCHABLE:
case TankType.TANK_TYPE_RESEARCHABLE:
return "TANK_TYPE_RESEARCHABLE";
case TankType.PREMIUM:
case TankType.TANK_TYPE_PREMIUM:
return "TANK_TYPE_PREMIUM";
case TankType.COLLECTOR:
case TankType.TANK_TYPE_COLLECTOR:
return "TANK_TYPE_COLLECTOR";
default:
throw new globalThis.Error("Unrecognized enum value " + object + " for enum TankType");
@@ -204,30 +204,30 @@ export function tankTypeToJSON(object: TankType): string {
}
export enum CrewType {
COMMANDER = 0,
RADIOMAN = 1,
GUNNER = 2,
DRIVER = 3,
LOADER = 4,
CREW_TYPE_COMMANDER = 0,
CREW_TYPE_RADIOMAN = 1,
CREW_TYPE_GUNNER = 2,
CREW_TYPE_DRIVER = 3,
CREW_TYPE_LOADER = 4,
}
export function crewTypeFromJSON(object: any): CrewType {
switch (object) {
case 0:
case "CREW_TYPE_COMMANDER":
return CrewType.COMMANDER;
return CrewType.CREW_TYPE_COMMANDER;
case 1:
case "CREW_TYPE_RADIOMAN":
return CrewType.RADIOMAN;
return CrewType.CREW_TYPE_RADIOMAN;
case 2:
case "CREW_TYPE_GUNNER":
return CrewType.GUNNER;
return CrewType.CREW_TYPE_GUNNER;
case 3:
case "CREW_TYPE_DRIVER":
return CrewType.DRIVER;
return CrewType.CREW_TYPE_DRIVER;
case 4:
case "CREW_TYPE_LOADER":
return CrewType.LOADER;
return CrewType.CREW_TYPE_LOADER;
default:
throw new globalThis.Error("Unrecognized enum value " + object + " for enum CrewType");
}
@@ -235,15 +235,15 @@ export function crewTypeFromJSON(object: any): CrewType {
export function crewTypeToJSON(object: CrewType): string {
switch (object) {
case CrewType.COMMANDER:
case CrewType.CREW_TYPE_COMMANDER:
return "CREW_TYPE_COMMANDER";
case CrewType.RADIOMAN:
case CrewType.CREW_TYPE_RADIOMAN:
return "CREW_TYPE_RADIOMAN";
case CrewType.GUNNER:
case CrewType.CREW_TYPE_GUNNER:
return "CREW_TYPE_GUNNER";
case CrewType.DRIVER:
case CrewType.CREW_TYPE_DRIVER:
return "CREW_TYPE_DRIVER";
case CrewType.LOADER:
case CrewType.CREW_TYPE_LOADER:
return "CREW_TYPE_LOADER";
default:
throw new globalThis.Error("Unrecognized enum value " + object + " for enum CrewType");
+38 -30
View File
@@ -1,10 +1,9 @@
import { exec as execSync } from 'child_process';
import { existsSync } from 'fs';
import { readdir, rm, writeFile } from 'fs/promises';
import { chunk } from 'lodash-es';
import { promisify } from 'util';
const ROOT = 'packages/core/src/protos';
const exec = promisify(execSync);
let executableFileExtension: string;
@@ -15,33 +14,42 @@ if (existsSync('node_modules/.bin/protoc-gen-ts_proto.exe')) {
executableFileExtension = '';
}
const filesRaw = await readdir(`${ROOT}`);
await Promise.all(
filesRaw.map(async (file) => {
if (!file.endsWith('.proto')) {
await rm(`${ROOT}/${file}`);
}
}),
);
await compile('packages/core/src/protos');
await compile('submodules/blitzkit-closed/src/unreal/protos');
const files = filesRaw.filter((file) => file.endsWith('.proto'));
const args = [
`--plugin=./node_modules/.bin/protoc-gen-ts_proto${executableFileExtension}`,
'--ts_proto_opt=esModuleInterop=true',
'--ts_proto_opt=oneof=unions-value',
'--ts_proto_opt=removeEnumPrefix=true',
'--ts_proto_opt=unrecognizedEnum=false',
'--ts_proto_opt=snakeToCamel=false',
'--ts_proto_out=.',
...files.map((file) => `${ROOT}/${file}`),
];
async function compile(root: string) {
const filesRaw = await readdir(root);
await exec(`protoc ${args.join(' ')}`);
await writeFile(
`${ROOT}/index.ts`,
'// @ts-nocheck\n' +
files
.map((file) => file.replace('.proto', ''))
.map((file) => `export * from './${file}.ts';`)
.join('\n'),
);
for (const file of filesRaw) {
if (!file.endsWith('.ts')) continue;
await rm(`${root}/${file}`);
}
const allFiles = filesRaw.filter((file) => file.endsWith('.proto'));
for (const files of chunk(allFiles, 32)) {
const args = [
`-I=${root}`,
`--plugin=./node_modules/.bin/protoc-gen-ts_proto${executableFileExtension}`,
'--ts_proto_opt=esModuleInterop=true',
'--ts_proto_opt=oneof=unions-value',
// '--ts_proto_opt=removeEnumPrefix=true',
'--ts_proto_opt=unrecognizedEnum=false',
'--ts_proto_opt=snakeToCamel=false',
`--ts_proto_out=${root}`,
...files.map((file) => `${root}/${file}`),
];
await exec(`protoc ${args.join(' ')}`);
}
await writeFile(
`${root}/index.ts`,
'// @ts-nocheck\n' +
allFiles
.sort()
.map((file) => file.replace('.proto', ''))
.map((file) => `export * from './${file}.ts';`)
.join('\n'),
);
}
+1
View File
@@ -14,6 +14,7 @@
"@astrolib/seo": "^1.0.0-beta.8",
"@blitzkit/core": "workspace:*",
"@blitzkit/i18n": "workspace:*",
"@blitzkit/closed": "workspace:*",
"@fontsource/inter": "^5.2.5",
"@nanostores/persistent": "^0.10.2",
"@nanostores/react": "^0.7.3",
@@ -7,7 +7,6 @@ import { Box, Flex, Heading, Link } from '@radix-ui/themes';
import type { GetStaticPaths } from 'astro';
import { AesonPlug } from '../../components/AesonPlug';
import HomeHero from '../../components/HomeHero.astro';
import { HomePageHotTanks } from '../../components/HomePageHotTanks';
import { Plugs } from '../../components/Plugs';
import ToolCard from '../../components/ToolCard.astro';
import {
@@ -25,7 +24,6 @@ import { getStrings } from '../../core/i18n/getStrings';
import BaseLayout from '../../layouts/BaseLayout.astro';
const PUBLIC_ASSET_BRANCH = assertSecret(import.meta.env.PUBLIC_ASSET_BRANCH);
const MODE = assertSecret(import.meta.env.MODE);
const locale = Astro.params.locale ?? DEFAULT_LOCALE;
const strings = getStrings(Astro.params.locale);