Интернационализация
Сообщения об ошибках на родном языке пользователей могут улучшить их взаимодействие с вашим программным обеспечением и повысить вероятность его внедрения. Поэтому мы предлагаем несколько гибких способов простой реализации i18n.
Официальные переводы
Самый быстрый способ начать работу с i18n — использовать официальные переводы Valibot. Они предоставляются в отдельном пакете под названием @valibot/i18n.
Если вам не хватает какого-либо перевода, создайте задачу или отправьте запрос на включение изменений на GitHub.
Импорт переводов
Каждый перевод в этом пакете реализован модульно и экспортируется как подмодуль. Это позволяет импортировать только те переводы, которые вам действительно нужны, чтобы уменьшить размер сборки.
// Import every translation (not recommended)
import '@valibot/i18n';
// Import every translation for a specific language
import '@valibot/i18n/de';
// Import only the translation for schema functions
import '@valibot/i18n/de/schema';
// Import only the translation for a specific pipeline function
import '@valibot/i18n/de/minLength';
В подмодулях используются побочные эффекты для загрузки переводов в глобальное хранилище, к которому обращаются функции схемы и проверки при добавлении сообщения об ошибке в проблему.
Выбор языка
Используемый язык выбирается с помощью конфигурации lang. Вы можете задать его глобально с помощью setGlobalConfig или локально при разборе неизвестных данных с помощью parse или safeParse.
import * as v from 'valibot';
// Set the language configuration globally
v.setGlobalConfig({ lang: 'de' });
// Set the language configuration locally
v.parse(Schema, input, { lang: 'de' });
Пользовательские переводы
Вы можете использовать те же API, что и для @valibot/i18n, чтобы добавить собственные переводы в глобальное хранилище. Кроме того, их можно передать напрямую конкретной схеме или функции проверки в качестве первого необязательного аргумента. Это может пригодиться, если вы хотите настроить существующий язык или определить собственный язык с нуля.
Вы можете ввести переводы вручную или воспользоваться библиотекой i18n, например Paraglide JS.
Глобальная настройка переводов
Вы можете добавлять переводы с помощью setGlobalMessage, setSchemaMessage и setSpecificMessage на трёх разных уровнях иерархии. При создании проблемы Valibot сначала проверяет, доступен ли специальный перевод, затем — перевод для функций схемы и, наконец, глобальный перевод.
В отличие от официальных переводов, для этого не нужно импортировать подмодуль @valibot/i18n. Значение lang — это просто ключ, по которому Valibot находит зарегистрированные переводы. Поэтому в качестве него можно использовать любую строку.
import * as v from 'valibot';
// Set the translation globally (can be used as a fallback)
v.setGlobalMessage((issue) => `Invalid input: ...`, 'custom');
// Set the translation globally for every schema functions
v.setSchemaMessage((issue) => `Invalid type: ...`, 'custom');
// Set the translation globally for a specific function
v.setSpecificMessage(v.minLength, (issue) => `Invalid length: ...`, 'custom');
// Use the registered translations
v.setGlobalConfig({ lang: 'custom' });
Локальная настройка переводов
Если вы предпочитаете задавать переводы по отдельности, передавайте их в качестве первого необязательного аргумента функциям схемы и проверки. В этом случае мы рекомендуем использовать библиотеку i18n, например Paraglide JS.
import * as v from 'valibot';
import * as m from './paraglide/messages.js';
const LoginSchema = v.object({
email: v.pipe(
v.string(),
v.nonEmpty(m.emailRequired),
v.email(m.emailInvalid)
),
password: v.pipe(
v.string(),
v.nonEmpty(m.passwordRequired),
v.minLength(8, m.passwordInvalid)
),
});
© Fabian Hiller
Licensed under the MIT License.
https://valibot.dev/guides/internationalization/