Skip to content

This library is used to translate Zod's default error messages.

License

Notifications You must be signed in to change notification settings

thijserven/hono-zod-validator-i18n

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

npm version

Zod Internationalization

This library is used to translate Zod's default error messages.

Installation 💿

npm install hono-zod-validator-i18n @intlify/hono

This library depends on @intlify/hono.

Getting Started 🚀

import { Hono } from 'hono';
import {
  defineI18nMiddleware,
  detectLocaleFromAcceptLanguageHeader,
  useTranslation,
} from '@intlify/hono';
import { zValidatorI18n } from 'hono-zod-validator-i18n';
import zodEn from 'hono-zod-validator-i18n/locales/en/zod.json';
import zodJa from 'hono-zod-validator-i18n/locales/ja/zod.json';

const i18nMiddleware = defineI18nMiddleware({
  locale: detectLocaleFromAcceptLanguageHeader,
  messages: {
    en: {
      hello: 'Hello {name}!',
      zod: zodEn,
    },
    ja: {
      hello: 'こんにちは、{name}!',
      zod: zodJa,
    },
  },
});

const app = new Hono();

app.use('*', i18nMiddleware);

const schema = z.object({
  name: z.string(),
  age: z.number(),
});

app.post('/author', zValidatorI18n('json', schema), (c) => {
  const data = c.req.valid('json');
  return c.json({
    success: true,
    message: `${data.name} is ${data.age}`,
  });
});

export default app;

zValidatorI18n

The zValidatorI18n function works exactly the same as the original zValidator function from @hono/zod-validator so you can still add a custom hook function.

zValidatorI18n('json', schema, (result, c) => {
  // "result" and "c" are fully typed!
  console.log('This will run after the error translation.');
});

Custom Translations

You can define custom Zod error message translations like this:

import zodEn from 'hono-zod-validator-i18n/locales/en/zod.json';
import zodJa from 'hono-zod-validator-i18n/locales/ja/zod.json';

const i18nMiddleware = defineI18nMiddleware({
  locale: 'ja',
  messages: {
    en: {
      hello: 'Hello {name}!',
      // All custom error message translations should be inside: zod.custom
      zod: { ...zodEn, custom: { some_message: 'Some message' } },
    },
    ja: {
      hello: 'こんにちは、{name}!',
      zod: { ...zodJa, custom: { some_message: '何かのメッセージ' } },
    },
  },
});

And use it like this:

zValidatorI18n(
  'json',
  z.object({
    name: z.string({ message: 'zod.custom.some_message' }), // Will result in: '何かのメッセージ'
  })
),

Custom Zod error translations only work when prefixed with zod.custom.. If you do not use this prefix, the translation of the standard Zod error message will be used

Translation Files 🌐

hono-zod-validator-i18n contains translation files for several locales.

It is also possible to create and edit translation files. You can use this English translation file as a basis for rewriting it in your language.

If you have created a translation file for a language not yet in the repository, please send us a pull request.

Contributing 🤝

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

License 🔖

This project is licensed under the MIT License.

Contributors ✨

Contributors icons

Special Thanks ❤️

About

This library is used to translate Zod's default error messages.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published