---
name: cms-localization
description: Работа с языком интерфейса админки Linecore Builder CMS (переключение, проблемы локализации). Используйте при настройке языка админ-панели, отладке переводов интерфейса, проблемах с cookie lang_admin.
metadata:
  author: linecore
  version: "1.0"
  package: vendor/linecore/linecore-cms
  updated: "2026-03-31"
---

# Локализация админки (язык интерфейса)

## Быстрая активация

- **Когда применять**: проблемы с переключением языка в админке, не работает смена языка интерфейса CMS, переводы интерфейса на русском вместо украинского.
- **RU сигналы**: язык админки, переключение языка в админке, не меняется язык интерфейса, admin language, lang_admin cookie
- **EN signals**: admin panel language, switch admin language, cms localization
- **Не применять когда**: задача про перевод сайта (фронтенд), про переводы товаров в каталоге, про email шаблоны.

## Как устроен механизм

### Переключение языка

- Маршрут: `change_lang` → `TBController@changeLanguage()`
- URL: `/admin/change_lang?lang=uk`
- Сохранение: кука `lang_admin` (длительный срок)

### Чтение языка интерфейса

- Функция `adminLang()` - читает куку `lang_admin`
- Функция `__cms()` - используется для переводов в админке
- Обе функции должны использовать одно и то же значение языка

### Конфигурация

- Файл: `config/cms/translations/cms.php`
- Параметры: `language_default`, `languages`

## Ключевые файлы пакета

- `vendor/linecore/linecore-cms/src/Http/helpers.php` - функции `__cms()`, `adminLang()`
- `vendor/linecore/linecore-cms/src/Http/Controllers/TBController.php` - переключение языка
- `vendor/linecore/linecore-cms/src/Http/Middleware/SetLocale.php` - установка локали

## Когда НЕ использовать этот навык

- Для общего перевода сайта (фронтенд) - там стандартная локализация Laravel
- Для переводов в админке в базе данных (Phrases) - это не связано с переключением языка интерфейса
- Для настройки языка писем (email templates) - отдельная система
- Для работы с мультиязычностью товаров/каталога - это каталог, не админка

## Важные нюансы

1. **Кука vs конфиг**: Функция `__cms()` должна читать куку `lang_admin`, а не только config. Проблема часто в том, что используется хардкод `config('builder.translations.cms.language_default')` без проверки куки.
2. **once() кеширование**: Функция `__cms()` использует `once()` - результат кешируется. При отладке учитывайте, что изменение куки не сразу отразится.
3. **Два языка**: В админке одновременно могут быть язык интерфейса админки (lang_admin) и язык контента (обычный locale сайта).
4. **Проверка куки**: При отладке сначала проверьте, устанавливается ли кука `lang_admin` в браузере после переключения.

## Отладка

При проблемах с языком админки проверять:

1. Устанавливается ли кука `lang_admin` при переключении
2. Какое значение возвращает `adminLang()`
3. Какое значение использует `__cms()` для переводов
4. Значение в конфиге `cms.translations.cms.language_default`

## Примеры запросов

- "Почему при переключении на украинский язык админка остается на русском?"
- "Не работает переключение языка в админке"
- "Как добавить новый язык в админку?"
