Как реализовать валидацию на сайте многоязычной поддержки? - PullRequest
1 голос
/ 16 апреля 2020

В настоящее время я поддерживаю многоязыковую поддержку на одном из веб-сайтов, который реализуется в качестве инструмента переднего плана. Я использую библиотеку реагировать-i18next для перевода литералов пользовательского интерфейса на сайте. Но я не понимаю, как реализовать различные проверки на сайте, потому что регулярное выражение, которое я буду использовать в одной области текста для английского языка sh, не будет работать с другим языком (например, японским). Пожалуйста, помогите мне понять это.

Ответы [ 3 ]

0 голосов
/ 05 мая 2020

О каком подтверждении идет речь? Не могли бы вы привести несколько примеров?

Для большинства значений язык не должен иметь значения, например, числа одинаковы. Выбор параметров не зависит от языка - используйте язык по умолчанию (перед переводом) для проверки и только затем переводите.

Например:

const schema = yup.object().shape({
  name: yup.string().required(i18.t("This field is required")),
  pin_number: yup.matches(/\d{4}/, t("Is not in correct format"))
});

Однако, если есть проверка это определено c для языка, тогда да, вам нужно создать отдельное регулярное выражение для каждого из них.

getLanguageSpecificRegex = () => {
  let regex;
  if (i18n.language === "en") {
    regex = "C\d+";
  } else (i18n.language === "et") {
    regex = "K\d+";
  } else {
    regex = "\d+";
  }
  return regex;
}
0 голосов
/ 06 мая 2020

Как и в Regex, есть также формат даты и чисел, которые нужно учитывать, но regex является самой большой проблемой. Шаг 1 должен быть

i18n ваших регулярных выражений, а также строк проверки

, чтобы вы могли проверять, например,

new Regex(i18n.t('regexFirstName'))

вместо против /\w+/

Разметка становится более сложной, если вы используете платформу декларативной проверки разметки:

render() {
    return (
        ...
        <input name="firstName" regex={new Regex(i18n.t('regexFirstName'))}  />
        ...
    )

, но если вы устанавливаете проверку в коде, тогда используйте

new Regex(i18n.t('regexFirstName'))

вместо

/regexLiteral/

это не проблема?

0 голосов
/ 04 мая 2020

Одним из решений, которое я могу придумать, является перевод текста, который вы хотите проверить на соответствие регулярному выражению, на английский язык sh и проверка.

...