# @cloud-ru/ds-locale > Рантайм локализации — строки живут в самих пакетах (defineLocale/defineMessages), провайдер несёт только язык. Docs: /snack-v2/components/locale/ ## Установка ```sh pnpm add @cloud-ru/ds-locale ``` ## Когда использовать - Компонент-пакет объявляет свои тексты: `defineMessages({ 'en-GB', 'ru-RU' })` + `defineLocale('NS', …)`. - Хост-приложение задаёт язык: `LocaleProvider lang={…}` (или `store` для MFE через `getGlobalLocaleStore`). - Сервис переопределяет строки или **добавляет язык** (например `de-DE`) через `.extend(lang, …)` либо тип `LocaleOverride`. ## API ### LocaleProvider | Prop | Type | Default | Required | Description | |------|------|---------|----------|-------------| | `children` | `string \| number \| boolean \| ReactElement> \| Iterable \| ReactPortal \| null \| undefined` | — | yes | | | `fallbackLang` | `string` | — | no | Язык, на который откатываемся при отсутствии перевода. По умолчанию `en-GB`. | | `lang` | `string` | — | no | Статический язык (одно-корневой app/SSR). Игнорируется, если задан `store`. | | `overrides` | `OverrideEntry[]` | — | no | Оверрайды/новые языки — собираются через `.extend(lang, ...)`, app-static. | | `store` | `LangStore` | — | no | Реактивный источник языка для MFE: `getGlobalLocaleStore().store`. | #### Related types - `Lang` (alias) - `LangStore` (interface) - `MessageTree` (alias) - `OverrideEntry` (interface) - `PartialDeep` (alias) - `PartialObjectDeep` (alias) ## Примеры ### LanguageToggle ```tsx import { Button } from '@cloud-ru/ds-button'; import { defineLocale, defineMessages, LocaleProvider } from '@cloud-ru/ds-locale'; import { SegmentControl } from '@cloud-ru/ds-segment-control'; import { Tag } from '@cloud-ru/ds-tag'; import { Typography } from '@cloud-ru/ds-typography'; import { Flex } from '@cloud-ru/ds-uikit-product-flex'; import { useState } from 'react'; // Словарь компонента co-located: defineMessages требует одинаковый набор ключей во всех языках. const DEMO_MESSAGES = defineMessages({ 'en-GB': { action: 'Save', status: 'Ready', greeting: 'Hello' }, 'ru-RU': { action: 'Сохранить', status: 'Готово', greeting: 'Привет' }, }); const demoLocale = defineLocale('LocaleDemo', DEMO_MESSAGES); // Консьюмер читает строки из ближайшего LocaleProvider — текст компонентов меняется вслед за языком. function LocalizedSurface() { const { t, lang } = demoLocale.useTranslations(); return (