# gt-react: General Translation React SDK: Общие строки
URL: https://generaltranslation.com/ru/docs/react/guides/shared-strings.mdx
---
title: Общие строки
description: Как интернационализировать строки, используемые в разных компонентах и файлах
---
{/* АВТОМАТИЧЕСКИ СГЕНЕРИРОВАНО: Не редактируйте напрямую. Отредактируйте шаблон в content/docs-templates/. */}
Общие строки — это текстовые значения, которые используются в нескольких местах приложения, например в метках навигации, сообщениях форм или данных конфигурации. Вместо того чтобы дублировать логику перевода везде, используйте [`msg`](/docs/react/api/strings/msg), чтобы пометить строки для перевода, и [`useMessages`](/docs/react/api/strings/use-messages), чтобы декодировать их.
## Проблема с общим содержимым
Рассмотрим эту конфигурацию навигации, которая используется во всём приложении:
```tsx
// navData.ts
export const navData = [
{
label: 'Home',
description: 'The home page',
href: '/'
},
{
label: 'About',
description: 'Information about the company',
href: '/about'
}
];
```
Чтобы интернационализировать это, обычно приходится:
1. Преобразовать это в функцию, принимающую функцию перевода
2. Обновить все места использования, чтобы передавать в функцию `t`
3. Управлять возросшей сложностью по всей кодовой базе
Это усложняет сопровождение и делает код менее читаемым. Функция [`msg`](/docs/react/api/strings/msg) решает эту проблему: она позволяет помечать строки для перевода прямо в коде, а затем декодировать их при необходимости.
## Быстрый старт
Используйте [`msg`](/docs/react/api/strings/msg), чтобы помечать строки, и [`useMessages`](/docs/react/api/strings/use-messages), чтобы декодировать их:
```tsx
// navData.ts - Пометить строки для перевода
import { msg } from 'gt-react';
export const navData = [
{
label: msg('Home'),
description: msg('The home page'),
href: '/'
},
{
label: msg('About'),
description: msg('Information about the company'),
href: '/about'
}
];
```
```tsx
// Использование компонента — декодирование помеченных строк
import { useMessages } from 'gt-react';
import { navData } from './navData';
function Navigation() {
const m = useMessages();
return (
);
}
```
## Как работают общие строки
Система общих строк работает в два этапа:
1. **Этап маркировки**: [`msg`](/docs/react/api/strings/msg) кодирует строки метаданными перевода
2. **Этап декодирования**: [`useMessages`](/docs/react/api/strings/use-messages) декодирует и переводит строки
```tsx
// msg() кодирует строку с метаданными
const encoded = msg('Hello, world!');
console.log(encoded); // "Hello, world!:eyIkX2hhc2giOiJkMjA3MDliZGExNjNlZmM2In0="
// useMessages() декодирует и переводит
const m = useMessages();
const translated = m(encoded); // "Hello, world!" на языке пользователя
```
Закодированные строки из [`msg`](/docs/react/api/strings/msg) нельзя использовать напрямую — сначала их нужно декодировать с помощью [`useMessages`](/docs/react/api/strings/use-messages).
## Компоненты
Используйте хук [`useMessages`](/docs/react/api/strings/use-messages):
```tsx
import { useMessages } from 'gt-react';
const encodedString = msg('Hello, world!');
function MyComponent() {
const m = useMessages();
return
{m(encodedString)}
;
}
```
## Получение исходных строк через decodeMsg
Иногда нужно обратиться к исходной строке без перевода — например, для логирования, отладки или сравнений. Используйте [`decodeMsg`](/docs/react/api/strings/msg), чтобы извлечь исходный текст:
```tsx
import { decodeMsg } from 'gt-react';
const encoded = msg('Hello, world!');
const original = decodeMsg(encoded); // "Hello, world!" (оригинал)
const translated = m(encoded); // "Hello, world!" (на языке пользователя)
// Полезно для логирования или отладки
console.log('Исходная строка:', decodeMsg(encoded));
console.log('Переведённая строка:', m(encoded));
```
### Сценарии использования decodeMsg
* **Разработка & отладка**: Выводите исходные строки в лог для отладки
* **Резервный вариант**: Используйте исходный текст, если перевод не удалось получить
* **Сравнение строк**: Сравнивайте с известными исходными значениями
* **Аналитика**: Отслеживайте использование исходных строк
```tsx
// Пример: обработка запасного варианта
function getDisplayText(encodedStr) {
const m = useMessages();
try {
return m(encodedStr);
} catch (error) {
console.warn('Перевод не удался, используется оригинал:', decodeMsg(encodedStr));
return decodeMsg(encodedStr);
}
}
```
## Использование переменных
Для строк с динамическим содержимым используйте заполнители и передавайте переменные:
```tsx
// Отметить строку с переменными
const items = 100;
export const pricing = [
{
name: 'Basic',
price: 100,
description: msg('The basic plan includes {items} items', { items })
}
];
```
```tsx
// Использование в компоненте
function PricingCard() {
const m = useMessages();
return (
);
}
```
## Частые проблемы
### Использование закодированных строк напрямую
Никогда не используйте результат [`msg`](/docs/react/api/strings/msg) напрямую:
```tsx
// ❌ Неверно — закодированная строка используется напрямую
const encoded = msg('Hello, world!');
return
{encoded}
; // Отображает закодированную строку, а не перевод
// ✅ Верно — сначала декодируйте строку
const encoded = msg('Hello, world!');
const m = useMessages();
return
{m(encoded)}
; // Отображает корректный перевод
```
### Динамический контент в msg()
Строки должны быть известны на этапе сборки:
```tsx
// ❌ Неверно — динамический шаблонный литерал
const name = 'John';
const message = msg(`Hello, ${name}`); // Ошибка на этапе сборки
// ✅ Верно — используйте переменные
const name = 'John';
const message = msg('Hello, {name}', { name });
```
### Если забыть декодировать
Каждую строку [`msg`](/docs/react/api/strings/msg) нужно декодировать:
```tsx
// ❌ Отсутствует декодирование
const config = {
title: msg('Dashboard'),
subtitle: msg('Welcome back')
};
// Позже в компоненте — забыли декодировать
return
{config.title}
; // Отображает закодированную строку
// ✅ Правильно — декодируем при использовании
const m = useMessages();
return
{m(config.title)}
; // Отображает переведённый заголовок
```
## Что дальше
* [Руководство по словарям](/docs/react/guides/dictionaries) — Организуйте переводы с помощью структурированных данных
* [Руководство по языкам](/docs/react/guides/languages) — Настройте поддерживаемые языки
* Справочник по API:
* [Функция `msg`](/docs/react/api/strings/msg)