100 lines
2.6 KiB
TypeScript
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);
|
|
}
|