Назад

gt-react@10.15.0

Ernest McCarter avatarErnest McCarter
gt-reactderivetagged-templatei18n

Обзор

В этом релизе продолжено избавление gt-react от контекста React и развитие макроса тегированного шаблонного литерала t. derive() теперь работает внутри тегированного шаблонного литерала t. Ранее derive() можно было использовать только внутри вызовов функции t():

t("The {subject} is playing.", { subject: derive(getSubject(gender)) })

Теперь это можно писать прямо в шаблонном литерале:

t`The ${derive(getSubject(gender))} is playing.`

Как это работает

derive() указывает CLI-инструменту проанализировать все возможные значения, которые может возвращать функция, и создать отдельную запись перевода для каждого из них. Это позволяет сохранить грамматическое согласование в разных языках — например, в испанском для фраз «The boy is playing» и «The girl is playing» нужны разные артикли (El niño и La niña).

Пример

import { t } from "gt-react/browser";
import { derive } from "gt-react";

function getSubject(gender) {
  return gender === "male" ? "boy" : "girl";
}

function Component({ gender }) {
  return <p>{t`The ${derive(getSubject(gender))} is playing.`}</p>;
}

Это создаст две записи перевода:

  • "Мальчик играет."
  • "Девочка играет."

Ссылки