# General Translation Changelog: gt-next 6.3.0: Traduce cadenas en cualquier lugar con msg()
URL: https://generaltranslation.com/es/blog/gt-next_v6_3_0.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 
Authors: Ernest McCarter
Published: 2025-08-27

## Descripción general

En **gt-next 6.3.0**, nos acercamos más a una biblioteca que resulte adecuada tanto para desarrolladores humanos como para desarrolladores de IA. Nuestro principio rector para esta versión fue **minimizar al máximo el impacto en el código existente** sin dejar de introducir la funcionalidad esencial necesaria para i18n.

Para lograrlo, presentamos una nueva función [`msg()`](/docs/react/reference/functions/msg) para traducir cadenas en cualquier parte de tu base de código. Antes, los desarrolladores tenían que pasar la función `gt()` desde [`useGT()`](/docs/react/reference/hooks/use-gt) o [`getGT()`](/docs/react/nextjs/reference/functions/get-gt) a lo largo de la pila de llamadas para poder traducir una cadena. Con [`msg()`](/docs/react/reference/functions/msg), solo tienes que envolver la cadena una vez y luego pasarla por `m()` en el momento del renderizado.

***

## Una comparación

Históricamente, las cadenas tenían que envolverse pasando la función `gt()` por múltiples capas:

```tsx title="constants.tsx"
export const greeting1 = 'Hello, world!'
export const getGreeting2 = (gt: any) => gt('Hello, world!')
```

```tsx title="Page.tsx"
import { greeting1, getGreeting2 } from './constants'

export default function Page() {
  const gt = useGT()
  return (
    <div>
      {greeting1}
      {getGreeting2(gt)}
    </div>
  )
}
```

Ahora, con [`msg()`](/docs/react/reference/functions/msg), las cadenas pueden declararse directamente como constantes. El único requisito es pasarlas por `m()` (de [`useMessages()`](/docs/react/reference/hooks/use-messages) o [`getMessages()`](/docs/react/nextjs/reference/functions/get-messages)) al mostrarlas.

```tsx title="constants.tsx"
export const greeting1 = 'Hello, world!'
export const greeting2 = msg('Hello, world!')
```

```tsx title="Page.tsx"
import { greeting1, greeting2 } from './constants'

export default function Page() {
  const m = useMessages()
  return (
    <div>
      {greeting1}
      {m(greeting2)}
    </div>
  )
}
```

***

## Codificación y decodificación

Para admitir la interpolación, la función [`msg()`](/docs/react/reference/functions/msg) devuelve un mensaje codificado en lugar de una cadena de texto sin formato. El formato es así:

```
<interpolated content>:<base64 encoded string>
```

La parte codificada en base64 contiene un objeto JSON con:

* `$_hash`: Hash de la cadena original
* `$_source`: Parámetros interpolados en el mensaje
* `$id`: Un identificador único personalizado (si se proporciona)
* `$context`: Contexto del mensaje (si se especifica)
* Cualquier variable incluida en la interpolación

Este diseño cambia ligeramente cómo se comparan las cadenas directamente, pero garantiza un impacto mínimo en el tipado y la estructura del código. Para acceder al contenido interpolado, usa `decodeMsg()`.

### ¿Por qué una cadena codificada?

La alternativa a usar una cadena codificada implicaría que [`msg()`](/docs/react/reference/functions/msg) tuviera que devolver un tipo de objeto personalizado que incluyera los metadatos adicionales. Aunque esto funciona dentro del paradigma de codificación/decodificación, plantea problemas al trabajar con tipado estricto.

Concluimos que, en este escenario, la mejor forma de minimizar el impacto de i18n es simplemente devolver una cadena que contenga los metadatos.

### Ejemplo

Código original sin i18n:

```ts title="original.ts"
const name = 'John'
const message = `Hello, ${name}!`

if (message.length > 10) {
  console.log('The message is too long')
} else {
  console.log('The message is just the right length')
}
```

Con [`msg()`](/docs/react/reference/functions/msg) y `decodeMsg()`:

```ts title="internationalized.ts"
import { msg, decodeMsg } from 'gt-next'

const name = 'John'
const message = msg('Hello, {name}!', { name })

if (decodeMsg(message).length > 10) {
  console.log('The message is too long')
} else {
  console.log('The message is just the right length')
}
```

## Otros

También puedes reemplazar parámetros dentro de la función `gt()`, incluso si ya se habían interpolado al llamar a [`msg()`](/docs/react/reference/functions/msg).

```tsx title="Page.tsx"
import { msg, useMessages } from 'gt-next'

const message = msg('Hello, {name}!', { name: 'John' })

export default function Page() {
  const m = useMessages()
  return <div>{m(message, { name: 'Jane' })}</div> // Esto devolverá "Hello, Jane!"
}
```

***

## Resumen

Esta versión se centra en hacer que `gt-next` sea más cómodo para los desarrolladores y, al mismo tiempo, en reducir al mínimo la sobrecarga de i18n. Al eliminar la necesidad de pasar la función `gt()` a través de la pila de llamadas, la nueva función [`msg()`](/docs/react/reference/functions/msg) ofrece una forma más clara e intuitiva de traducir cadenas y simplifica enormemente el proceso de i18n.

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
