Files
EpicNext-Cms/src/lib/client-translation-files.ts
T
openhands df38dccbf1
Local Build and Deploy / deploy (push) Failing after 46s
style: format code biome
2026-07-13 21:57:41 +02:00

100 lines
2.6 KiB
TypeScript

// Whitelist of Nitro client localization files exposed in
// /admin/translations/client. The registry doubles as a path-traversal guard
// for the saveClientTranslations server action: only `id`s defined here can be
// written to.
export type ClientTranslationFormat = "json5" | "json";
export interface ClientTranslationFile {
id: string;
/** Path relative to the project root. */
relPath: string;
format: ClientTranslationFormat;
language: "it" | "en" | "shared";
readOnly: boolean;
/**
* True when the on-disk file commonly contains comments that the json5
* serializer cannot preserve. Used to surface a warning in the UI.
*/
hasComments: boolean;
/** Free-form note shown in the UI (e.g. why a file is read-only). */
note?: string;
}
export const CLIENT_TRANSLATION_FILES: ClientTranslationFile[] = [
{
id: "ui-texts-it",
relPath: "public/nitro-assets/config/UITexts.json5",
format: "json5",
language: "it",
readOnly: false,
hasComments: true,
note: "Override del client (sovrascrive ExternalTexts).",
},
{
id: "ui-texts-en",
relPath: "public/nitro-assets/config/UITexts_en.json5",
format: "json5",
language: "en",
readOnly: true,
hasComments: true,
note: "Riferimento EN — non viene caricato dal client.",
},
{
id: "external-texts",
relPath: "public/nitro-assets/config/ExternalTexts.json5",
format: "json5",
language: "shared",
readOnly: false,
hasComments: false,
},
{
id: "external-texts-badges",
relPath: "public/nitro-assets/config/ExternalTexts_Badges.json5",
format: "json5",
language: "shared",
readOnly: false,
hasComments: false,
note: "File grande (~30k voci): usa la ricerca.",
},
{
id: "catalog-texts",
relPath: "public/nitro-assets/config/CatalogTexts.json5",
format: "json5",
language: "shared",
readOnly: false,
hasComments: false,
},
{
id: "gamedata-external-texts",
relPath: "public/nitro-assets/gamedata/ExternalTexts.json",
format: "json",
language: "shared",
readOnly: true,
hasComments: false,
note: 'Copia "live" servita al client. Generata dal build, modifiche manuali sovrascritte.',
},
{
id: "badge-texts-en",
relPath: "public/nitro3/localization/badge-texts-en.json",
format: "json",
language: "en",
readOnly: false,
hasComments: false,
},
{
id: "badge-texts-it",
relPath: "public/nitro3/localization/badge-texts-it.json",
format: "json",
language: "it",
readOnly: false,
hasComments: false,
},
];
export function getClientTranslationFile(
id: string,
): ClientTranslationFile | undefined {
return CLIENT_TRANSLATION_FILES.find((f) => f.id === id);
}