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