gt-next@6.13.0
Resumen
msg() ahora acepta arrays.
Antes, para registrar una lista de cadenas relacionadas, había que envolver cada una por separado:
const confirmations = [
msg("Yes"),
msg("Yup"),
msg("Right"),
msg("Absolutely"),
msg("Exactly"),
];Esto tiene dos problemas. Primero, cada línea requiere una llamada a msg(). Segundo, las cadenas relacionadas a menudo necesitan los mismos metadatos — $context, $id, etc. — y esos metadatos deben incluirse en línea porque la CLI los resuelve en tiempo de compilación. Para cadenas como "Right" o "Exactly", que son ambiguas por sí solas, terminas repitiendo $context en cada entrada:
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" }),
];Ahora puedes hacer esto en su lugar:
const confirmations = msg([
"Yes",
"Yup",
"Right",
"Absolutely",
"Exactly",
], { $context: "Confirmation responses" });Diseño
Generación de IDs
Cuando se especifica $id, cada elemento del array recibe un ID basado en el índice: ${id}.0, ${id}.1, etc.
const greetings = msg([
"Hi",
"Hello",
"Howdy",
], { $id: "greeting" });
// "Hi" → id: "greeting.0"
// "Hello" → id: "greeting.1"
// "Howdy" → id: "greeting.2"¿Por qué no usar objetos?
Nos tentó extender esto a los objetos, pero decidimos no hacerlo. Los objetos suelen mezclar campos traducibles y no traducibles:
{
id: 'planning.v1', // no traducir
message: 'Not yet enabled', // traducir
}No hay una forma clara de expresar qué campos deben registrarse sin introducir más sintaxis. Los arrays no tienen este problema: cada elemento es una cadena para traducir.
Futuro
La compatibilidad con arrays en gt() es el siguiente paso natural. Tanto gt() como msg() son funciones de registro, así que tiene sentido que exista paridad entre ambas. Esto también se aplica a m(), ya que msg() y m() suelen usarse juntas: que m() acepte arrays garantiza que pasar la salida de msg() a m() no cause errores.