diff --git a/packages/payload/src/errors/ValidationError.spec.ts b/packages/payload/src/errors/ValidationError.spec.ts new file mode 100644 index 0000000..7547089 --- /dev/null +++ b/packages/payload/src/errors/ValidationError.spec.ts @@ -0,0 +1,22 @@ +import { initI18n } from '@payloadcms/translations' +import { de } from '@payloadcms/translations/languages/de' +import { describe, expect, it } from 'vitest' + +import { ValidationError } from './ValidationError.js' + +describe('ValidationError', () => { + it('should translate the message with req.t when no t is passed', async () => { + const i18n = await initI18n({ + config: { fallbackLanguage: 'de', supportedLanguages: { de } }, + context: 'api', + language: 'de', + }) + + const error = new ValidationError({ + errors: [{ message: 'Invalides Passwort', path: 'password' }], + req: { i18n, t: i18n.t }, + }) + + expect(error.message).toBe('Das folgende Feld ist nicht korrekt: password') + }) +}) diff --git a/packages/payload/src/errors/ValidationError.ts b/packages/payload/src/errors/ValidationError.ts index e723028..0c99a10 100644 --- a/packages/payload/src/errors/ValidationError.ts +++ b/packages/payload/src/errors/ValidationError.ts @@ -37,13 +37,15 @@ export class ValidationError extends APIError<{ id?: number | string /** * req needs to be passed through (if you have one) in order to resolve label functions that may be part of the errors array + * and to translate the message when `t` is not passed */ req?: Partial }, t?: TFunction, ) { - const message = t - ? t('error:followingFieldsInvalid', { count: results.errors.length }) + const translate = t ?? results.req?.t + const message = translate + ? translate('error:followingFieldsInvalid', { count: results.errors.length }) : results.errors.length === 1 ? en.translations.error.followingFieldsInvalid_one : en.translations.error.followingFieldsInvalid_other