gt-next@6.13.0
Обзор
msg() теперь принимает массивы.
Раньше, чтобы зарегистрировать список связанных строк, приходилось оборачивать каждую строку отдельно:
const confirmations = [
msg("Yes"),
msg("Yup"),
msg("Right"),
msg("Absolutely"),
msg("Exactly"),
];Здесь есть две проблемы. Во‑первых, для каждой строки требуется вызов msg(). Во‑вторых, связанным строкам часто нужны одни и те же метаданные — $context, $id и т. д. — и эти метаданные приходится прописывать прямо в коде, потому что Интерфейс командной строки (CLI) разворачивает их на этапе сборки. Для строк вроде «Right» или «Exactly», которые сами по себе неоднозначны, в итоге приходится повторять $context в каждой записи:
const confirmations = [
msg("Yes"),
msg("Yup"),
msg("Right", { $context: "As in a confirmation" }),
msg("Absolutely", { $context: "As in a confirmation" }),
msg("Exactly", { $context: "As in a confirmation" }),
];Теперь вы можете сделать вот так:
const confirmations = msg([
"Yes",
"Yup",
"Right",
"Absolutely",
"Exactly",
], { $context: "Confirmation responses" });Проектирование
Генерация идентификаторов
Когда задан $id, каждый элемент массива получает идентификатор, основанный на индексе: ${id}.0, ${id}.1 и т.д.
const greetings = msg([
"Hi",
"Hello",
"Howdy",
], { $id: "greeting" });
// "Hi" → id: "greeting.0"
// "Hello" → id: "greeting.1"
// "Howdy" → id: "greeting.2"Почему не объекты?
Было заманчиво распространить это и на объекты, но мы решили этого не делать. Объекты обычно содержат смесь переводимых и непереводимых полей:
{
id: 'planning.v1', // не переводить
message: 'Not yet enabled', // перевести
}Нет элегантного способа указать, какие поля должны быть зарегистрированы, не вводя дополнительный синтаксис. У массивов такой проблемы нет — каждый их элемент является строкой для перевода.
Будущее
Поддержка массивов для gt() — естественный следующий шаг. И gt(), и msg() являются функциями регистрации, поэтому логично, чтобы их возможности совпадали. Это также относится к m(), поскольку msg() и m() часто используются вместе: если m() принимает массивы, это гарантирует, что передача результата работы msg() в m() не приведёт к ошибкам.