Spec-Zone.ru › Valibot

Интернационализация

Сообщения об ошибках на родном языке пользователей могут улучшить их взаимодействие с вашим программным обеспечением и повысить вероятность его внедрения. Поэтому мы предлагаем несколько гибких способов простой реализации 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API