hono-zod-validator-i18n
v1.0.5
Published
This library is used to translate Zod's default error messages.
Downloads
10
Readme
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.
- Arabic(ar)
- Bulgarian(bg)
- Czech(cs)
- German(de)
- English(en)
- Spanish(es)
- Persian(fa)
- Finnish(fi)
- French(fr)
- Hebrew(he)
- Croatian(hr-HR)
- Indonesian(id)
- Icelandic(is)
- Italian(it)
- Japanese(ja)
- Korean(ko)
- Lithuanian(lt)
- Norwegian(nb)
- Dutch(nl)
- Polish(pl)
- Portuguese(pt)
- Romanian(ro)
- Russian(ru)
- Swedish(sv)
- Turkish(tr)
- Ukrainian(uk-UA)
- Uzbek(uz)
- Chinese
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.
- see the LICENSE file for details
Contributors ✨
Special Thanks ❤️
- aiji42 for creating Zod i18n Map which inspired this package.