# react-native: Словари URL: https://generaltranslation.com/ru/docs/react-native/guides/dictionaries.mdx --- title: Словари description: Как использовать традиционный подход к переводу на основе словарей --- {/* СГЕНЕРИРОВАНО АВТОМАТИЧЕСКИ: Не редактируйте напрямую. Вместо этого измените шаблон в content/docs-templates/. */} Словари — это традиционный способ организации переводов во вложенных объектах в виде пар «ключ — значение». Хотя рекомендуемый подход — использовать [компоненты ``](/docs/react-native/guides/t), словари могут быть полезны при миграции с других библиотек i18n или если вы предпочитаете централизованное хранение переводов. **Рекомендация:** В новых проектах используйте [компоненты ``](/docs/react-native/guides/t). Словари поддерживаются в первую очередь для миграции и совместимости с существующими процессами перевода. ## Перевод через словарь и через компонент ### Паттерн со словарём ```tsx // dictionary.ts export default { greetings: { hello: 'Hello, world!', welcome: 'Welcome, {name}!' } }; // Использование компонента function MyComponent() { const t = useTranslations(); return
{t('greetings.hello')}
; } ``` ### Компонентный паттерн ```tsx // Прямое использование компонента — рекомендуется function MyComponent() { return
Hello, world!
; } ``` ## Компромиссы ### Преимущества словаря * **Централизованное хранение** - Все переводы собраны в одном месте * **Отраслевой стандарт** - Знакомый подход, используемый в других библиотеках i18n * **Удобство миграции** - Существующие переводы легко перенести ### Недостатки словарного подхода * **Сложность** - Требуется больше настроек и конфигурации * **Поддерживаемость** - Когда контент отделён от места использования, обновлять его сложнее * **Удобство отладки** - Сложнее понять, к каким компонентам относятся переводы * **Читаемость** - По ключам не видно реального содержимого ## Краткое руководство ### Шаг 1: Создайте файл словаря Создайте файл словаря в корне проекта или в каталоге `src`: ```ts title="dictionary.ts" const dictionary = { greetings: { hello: 'Hello, world!', welcome: 'Welcome to our app!' }, navigation: { home: 'Home', about: 'About', contact: 'Contact' } }; export default dictionary; ``` Или используйте формат JSON: ```json title="dictionary.json" { "greetings": { "hello": "Hello, world!", "welcome": "Welcome to our app!" }, "navigation": { "home": "Home", "about": "About", "contact": "Contact" } } ``` Затем передайте его в компонент [``](/docs/react-native/api/components/gtprovider): ```jsx title="index.js" copy import dictionary from "./dictionary.js"; import config from "./gt.config.json"; createRoot(document.getElementById("root")!).render( {/* [!code highlight] */} ); ``` ### Шаг 2: Используйте в компонентах Хук [`useTranslations`](/docs/react-native/api/dictionary/use-translations) позволяет обращаться к записям словаря: ```tsx import { useTranslations } from 'gt-react-native'; function MyComponent() { const t = useTranslations(); return (

{t('greetings.hello')}

{t('greetings.welcome')}

); } ``` ## Использование переменных Добавляйте переменные в записи словаря, используя синтаксис `{variable}`: ```ts title="dictionary.ts" const dictionary = { user: { greeting: 'Hello, {name}!', itemCount: 'You have {count} items', orderTotal: 'Total: ${amount}' } }; ``` ```tsx function UserDashboard() { const t = useTranslations(); return (

{t('user.greeting', { name: 'Alice' })}

{t('user.itemCount', { count: 5 })}

{t('user.orderTotal', { amount: 99.99 })}

); } ``` ## Использование префиксов Ограничьте доступ к словарю для конкретных разделов с помощью префиксов: ```ts title="dictionary.ts" const dictionary = { dashboard: { header: { welcome: 'Welcome back!', lastLogin: 'Last login: {date}' }, stats: { totalUsers: 'Total Users: {count}', activeUsers: 'Active Users: {count}' } } }; ``` ```tsx function DashboardHeader() { // Префикс ограничивает доступ к 'dashboard.header' const t = useTranslations('dashboard.header'); return (

{t('welcome')}

{/* -> dashboard.header.welcome */}

{t('lastLogin', { date: 'Today' })}

{/* -> dashboard.header.lastLogin */}
); } function DashboardStats() { // Другой префикс для раздела статистики const t = useTranslations('dashboard.stats'); return (

{t('totalUsers', { count: 1000 })}

{/* -> dashboard.stats.totalUsers */}

{t('activeUsers', { count: 150 })}

{/* -> dashboard.stats.activeUsers */}
); } ``` ## Поддержка нескольких языков ### Автоматический перевод (рекомендуется) Большинству пользователей следует использовать [`loadTranslations`](/docs/react-native/api/config/load-translations), чтобы автоматически создавать переводы на основе базового словаря: ```ts title="dictionary.ts" const dictionary = { common: { save: 'Save', cancel: 'Cancel', delete: 'Delete' }, forms: { required: 'This field is required', email: 'Please enter a valid email' } }; export default dictionary; ``` Затем создайте функцию `loadTranslations` для загрузки сгенерированных файлов переводов: ```ts title="src/loadTranslations.ts" export default async function loadTranslations(locale: string) { const translations = await import(`./_gt/${locale}.json`); return translations.default; } ``` Передайте это в ``: ```tsx title="src/index.tsx" import loadTranslations from './loadTranslations'; import dictionary from './dictionary'; createRoot(document.getElementById("root")!).render( ); ``` GT автоматически создает переводы на другие языки на основе вашего базового словаря. Выполните `npx gt translate`, чтобы создать переводы для всех настроенных языков. ### Ручные файлы переводов (миграция) Для перехода с других библиотек i18n или при ручном управлении переводами используйте [`loadDictionary`](/docs/react-native/api/config/load-dictionary): ```ts title="src/loadDictionary.ts" export default async function loadDictionary(locale: string) { const translations = await import(`../public/locales/${locale}.json`); return translations.default; } ``` При этом JSON-файлы переводов загружаются из каталога `public/locales/` вашего проекта: **Выберите подходящий вариант:** Используйте [`loadTranslations`](/docs/react-native/api/config/load-translations) для новых проектов с автоматической генерацией переводов, а [`loadDictionary`](/docs/react-native/api/config/load-dictionary) — при миграции существующих файлов переводов. ## Настройка продакшен-окружения ### Процесс сборки Добавьте перевод в пайплайн сборки: ```json title="package.json" { "scripts": { "build": "npx gt translate && <...YOUR_BUILD_COMMAND...>" } } ``` ### Поведение в режиме разработки и продакшене * **Разработка**: Записи словаря переводятся по запросу с использованием dev API key * **Продакшен**: Все переводы словаря заранее собираются на этапе сборки ## Использование вместе с компонентами Словари и [компоненты ``](/docs/react-native/guides/t) могут работать вместе: ```tsx function MixedApproach() { const t = useTranslations(); return (
{/* Словарь для простых строк */}

{t('page.title')}

{/* Компонент T для сложного JSX */}

This is a complex message with links.

{/* Словарь для меток форм */}
); } ``` ## Следующие шаги **Посмотрите в действии:** Ознакомьтесь с [примером приложения с подходом на основе словаря](https://github.com/gt-examples/dictionary-pattern) и посмотрите рабочую демонстрацию — [предпросмотр в браузере](https://dictionary-pattern.generaltranslation.dev). * [Руководство по языкам](/docs/react-native/guides/languages) - Настройте поддерживаемые языки и параметры локали * [Руководство по динамическому контенту](/docs/key-concepts/dynamic-content) - Работайте с задачами перевода во время выполнения * Справочник по API: * [Хук `useTranslations`](/docs/react-native/api/dictionary/use-translations)