Files
EpicNext-Cms/src/lib/client-translation-files.ts
T
Simo 8d37ae9ae0
Remote Build and Deploy / deploy (push) Has been cancelled
style: normalize restored source endings
2026-07-11 21:19:54 +02:00

98 lines
2.7 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)
}