# General Translation Changelog: gt-next 6.3.0: Переводите строки где угодно с помощью msg()
URL: https://generaltranslation.com/ru/blog/gt-next_v6_3_0.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 
Authors: Ernest McCarter
Published: 2025-08-27

## Обзор

В **gt-next 6.3.0** мы делаем ещё один шаг к библиотеке, одинаково удобной и для разработчиков, и для ИИ-разработчиков. Основной принцип этого релиза — **свести к минимуму изменения в существующем коде**, при этом добавив ключевую функциональность, необходимую для i18n.

Для этого мы вводим новую функцию [`msg()`](/docs/react/reference/functions/msg), которая позволяет переводить строки в любом месте кодовой базы. Раньше разработчикам приходилось передавать функцию `gt()` из [`useGT()`](/docs/react/reference/hooks/use-gt) или [`getGT()`](/docs/react/nextjs/reference/functions/get-gt) вверх по стеку вызовов, чтобы перевести строку. С [`msg()`](/docs/react/reference/functions/msg) достаточно один раз обернуть строку, а затем передать её через `m()` на этапе рендеринга.

***

## Сравнение

Раньше строки приходилось оборачивать, передавая функцию `gt()` через несколько уровней:

```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>
  )
}
```

Теперь с [`msg()`](/docs/react/reference/functions/msg) строки можно объявлять прямо как константы. Единственное требование — при выводе передавать их через `m()` (из [`useMessages()`](/docs/react/reference/hooks/use-messages) или [`getMessages()`](/docs/react/nextjs/reference/functions/get-messages)).

```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>
  )
}
```

***

## Кодирование и декодирование

Для поддержки интерполяции функция [`msg()`](/docs/react/reference/functions/msg) возвращает закодированное сообщение, а не обычную строку. Формат выглядит так:

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

Часть, закодированная в base64, содержит объект JSON со следующими полями:

* `$_hash`: хеш исходной строки
* `$_source`: параметры, подставленные в сообщение
* `$id`: пользовательский уникальный идентификатор (если указан)
* `$context`: контекст сообщения (если указан)
* любые переменные, включённые в интерполяцию

Такая схема немного меняет прямое сравнение строк, но сводит к минимуму влияние на типизацию и структуру кода. Чтобы получить доступ к подставленному содержимому, используйте `decodeMsg()`.

### Почему именно закодированная строка?

Альтернатива использованию закодированной строки означала бы, что [`msg()`](/docs/react/reference/functions/msg) пришлось бы возвращать пользовательский тип объекта с дополнительными метаданными. Хотя это работает в рамках парадигмы кодирования/декодирования, при строгой типизации возникают проблемы.

Мы пришли к выводу, что в этом случае лучший способ минимизировать влияние i18n — просто возвращать строку, содержащую метаданные.

### Пример

Исходный код без 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')
}
```

С помощью [`msg()`](/docs/react/reference/functions/msg) и `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')
}
```

## Другое

Вы также можете переопределить параметры в функции `gt()`, даже если они уже были подставлены при вызове [`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> // Вернёт "Hello, Jane!"
}
```

***

## Сводка

В этом релизе мы сделали `gt-next` удобнее для разработчиков и при этом свели накладные расходы на i18n к минимуму. Благодаря тому, что больше не нужно передавать функцию `gt()` через стек вызовов, новая функция [`msg()`](/docs/react/reference/functions/msg) предлагает более простой и интуитивно понятный способ перевода строк и значительно упрощает процесс i18n.

## Sitemap

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