Files
marketplaces/src/app/i18n/ru.ts
sdarbinyan 173ceb8081
Some checks failed
Architecture Governance / architecture (push) Has been cancelled
feat(seo): tenant-driven meta tags, sitemap/robots, reduced-motion, docs
Completes the rest of Sprint 28 on top of the earlier admin-scoped
a11y/skeleton pass (576f260):

- SeoService.resetToDefaults() now reads real bootstrap.seo.default /
  branding instead of hardcoded placeholder text + a broken
  /og-image.jpg reference; auto-reapplies via an effect() whenever
  bootstrap (re)loads, same pattern as UiRuntimeFacade.
- New public/sitemap.xml (static baseline, documented per-tenant-dynamic
  limitation) + public/robots.txt Sitemap directive and admin/editor
  Disallow rules.
- Global prefers-reduced-motion override in styles.scss covering every
  existing hover-transform/fade-in/shimmer animation in one place.
- New adminProducts/adminUsers/adminMonitoring/adminAnalytics
  empty-state i18n keys (en/ru/hy) for this sprint's skeleton/empty-state
  consistency fixes.
- docs/KNOWN-ISSUES.md: logged a newly-found, much larger pre-existing
  gap (~178 missing adminXxx.* i18n keys across the whole admin
  backoffice) - deferred to Sprint 29's translation validation, not
  fixed here.
- docs/BACKEND.md: new item 17 (sitemap generation gap).
- docs/ADMIN.md, docs/SPRINT-PLAN.md: rewritten Sprint 28 sections to
  describe the full, combined scope (both commits) instead of the
  earlier admin-only framing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-16 00:19:41 +04:00

878 lines
55 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Translations } from './translations';
export const ru: Translations = {
header: {
home: 'Главная',
search: 'Поиск',
about: 'О нас',
contacts: 'Контакты',
searchPlaceholder: 'Искать...',
catalog: 'Каталог',
wishlist: 'Избранное',
compare: 'Сравнение',
openMenu: 'Открыть меню',
closeMenu: 'Закрыть меню',
},
footer: {
description: 'Современный маркетплейс для комфортных покупок',
company: 'Компания',
aboutUs: 'О нас',
contacts: 'Контакты',
requisites: 'Реквизиты',
support: 'Поддержка',
faq: 'FAQ',
delivery: 'Доставка',
guarantee: 'Гарантия',
legal: 'Правовая информация',
offer: 'Оферта',
privacy: 'Конфиденциальность',
returns: 'Возврат',
info: 'Информация',
aboutCompany: 'О компании',
documents: 'Документы',
paymentRules: 'Правила оплаты',
returnPolicy: 'Политика возврата',
publicOffer: 'Публичная оферта',
help: 'Помощь',
payment: 'Оплата',
allRightsReserved: 'Все права защищены.',
},
home: {
welcomeTo: 'Добро пожаловать в {{brand}}',
subtitle: 'Найдите всё, что нужно, в одном месте',
startSearch: 'Начать поиск',
loading: 'Загружаем категории...',
errorTitle: 'Что-то пошло не так',
retry: 'Попробовать снова',
categoriesTitle: 'Категории товаров',
categoriesSubtitle: 'Выберите интересующую категорию',
categoriesEmpty: 'Категории скоро появятся',
categoriesEmptyDesc: 'Мы работаем над наполнением каталога',
dexarHeroTitle: 'Здесь ты найдёшь всё',
dexarHeroSubtitle: 'Тысячи товаров в одном месте',
dexarHeroTagline: 'просто и удобно',
goToCatalog: 'Перейти в каталог',
findProduct: 'Найти товар',
loadingDexar: 'Загрузка категорий...',
catalogTitle: 'Каталог товаров',
emptyCategoriesDexar: 'Категории пока отсутствуют',
categoriesSoonDexar: 'Скоро здесь появятся категории товаров',
itemsCount: '{{count}} товаров',
},
cart: {
title: 'Корзина',
clear: 'Очистить',
empty: 'Корзина пуста',
emptyDesc: 'Добавьте товары, чтобы начать покупки',
goShopping: 'Перейти к покупкам',
total: 'Итого',
items: 'Товары',
deliveryLabel: 'Доставка',
deliveryMethod: 'Способ доставки',
selectDelivery: 'Выберите способ доставки',
deliveryPlace: 'Место',
deliveryTime: 'Срок доставки',
digitalDelivery: 'Цифровая доставка',
deliveryRequired: 'Выберите доставку для всех товаров с доставкой перед оформлением заказа.',
toPay: 'К оплате',
agreeWith: 'Я согласен с',
publicOffer: 'публичной офертой',
returnPolicy: 'политикой возврата',
guaranteeTerms: 'условиями гарантии',
privacyPolicy: 'политикой конфиденциальности',
and: 'и',
checkout: 'Оформить заказ',
payViaQr: 'Оплатить через QR',
payViaCard: 'Оплатить картой',
close: 'Закрыть',
creatingPayment: 'Создание платежа...',
waitFewSeconds: 'Подождите несколько секунд',
scanQr: 'Сканируйте QR-код для оплаты',
amountToPay: 'Сумма к оплате:',
waitingPayment: 'Ожидание оплаты...',
copied: '✓ Скопировано',
copyLink: 'Скопировать ссылку',
openNewTab: 'Открыть в новой вкладке',
paymentSuccess: 'Поздравляем! Оплата прошла успешно!',
paymentSuccessDesc: 'Введите ваши контактные данные, и мы отправим вам покупку в течение нескольких минут',
sending: 'Отправка...',
send: 'Отправить',
paymentError: 'Не удалось создать платеж',
paymentErrorDesc: 'Сейчас не получилось подготовить QR-код для оплаты. Попробуйте еще раз через минуту.',
retryPayment: 'Попробовать снова',
paymentTimeout: 'Время ожидания истекло',
paymentTimeoutDesc: 'Мы не получили подтверждение оплаты в течение 3 минут.',
autoClose: 'Окно закроется автоматически...',
confirmClear: 'Вы уверены, что хотите очистить корзину?',
removeItem: 'Удалить товар',
paymentQrAlt: 'QR-код для оплаты',
acceptTerms: 'Пожалуйста, примите условия оферты, политику возврата и возврата для подтверждения оформления заказа.',
copyError: 'Ошибка копирования:',
emailSuccess: 'Email успешно отправлен! Проверьте свою почту.',
emailError: 'Произошла ошибка при отправке email. Пожалуйста, попробуйте снова.',
phoneRequired: 'Номер телефона обязателен',
phoneMoreDigits: 'Введите ещё {{count}} цифр',
phoneTooMany: 'Слишком много цифр',
emailRequired: 'Email обязателен',
emailTooShort: 'Email слишком короткий (минимум 5 символов)',
emailTooLong: 'Email слишком длинный (максимум 100 символов)',
emailNeedsAt: 'Email должен содержать @',
emailNeedsDomain: 'Email должен содержать домен (.com, .ru и т.д.)',
emailInvalid: 'Некорректный формат email',
loginRequired: 'Войдите для оформления',
loginRequiredDesc: 'Для оформления заказа войдите через Telegram',
loginWithTelegram: 'Войти через Telegram',
orScanQr: 'Или отсканируйте QR-код',
},
search: {
title: 'Поиск товаров',
placeholder: 'Введите название товара...',
searchBarAria: 'Поисковая строка',
resultsCount: 'Найдено товаров:',
searching: 'Поиск...',
retry: 'Попробовать снова',
noResults: 'Ничего не найдено',
noResultsFor: 'По запросу "{{query}}" товары не найдены',
noResultsHint: 'Попробуйте изменить запрос или используйте другие ключевые слова',
emptyResultsAria: 'Пустые результаты поиска',
popularCategories: 'Популярные категории',
recommendedProducts: 'Рекомендуемые товары',
aiSuggestionHint: 'AI-подсказка (в будущем)',
suggestionType: {
product: 'Товар',
category: 'Категория',
brand: 'Бренд',
collection: 'Подборка',
seller: 'Продавец',
'static-page': 'Страница',
ai: 'AI',
},
addToCart: 'В корзину',
loadingMore: 'Загрузка...',
allLoaded: 'Все результаты загружены',
emptyState: 'Введите запрос для поиска товаров',
minLength: 'Введите минимум {{count}} символа для поиска',
of: 'из',
},
category: {
retry: 'Попробовать снова',
addToCart: 'В корзину',
loadingMore: 'Загрузка...',
allLoaded: 'Все товары загружены',
emptyTitle: 'Упс! Здесь пока пусто',
emptyDesc: 'В этой категории ещё нет товаров, но скоро они появятся',
goHome: 'На главную',
loading: 'Загрузка товаров...',
},
catalog: {
title: 'Каталог',
breadcrumb: 'Навигация по каталогу',
allCategories: 'Все категории',
products: 'Товары',
loading: 'Загрузка каталога...',
loadingProducts: 'Загрузка товаров...',
errorTitle: 'Каталог недоступен',
error: 'Не удалось загрузить каталог. Попробуйте позже.',
retry: 'Попробовать снова',
categoryHint: 'Выберите категорию, чтобы продолжить',
productHint: 'Товары в выбранной категории',
emptyTitle: 'Здесь пока пусто',
emptyCategories: 'В этом разделе пока нет дочерних категорий.',
emptyProducts: 'В этой категории пока нет товаров.',
addToCart: 'В корзину',
categoriesCount: '{{count}} категорий',
productsCount: '{{count}} товаров',
entriesCount: '{{count}} позиций',
categoryBannerPlaceholder: 'Баннер категории подготовлен для медиа и описания из backend.',
navigationPlaceholder: 'Макет навигации подготовлен для конфигурации из backend/bootstrap.',
removeSavedSearch: 'Удалить сохраненный поиск',
resetFilters: 'Сбросить',
filtersTitle: 'Фильтры',
from: 'От',
to: 'До',
minValue: 'От {{value}}',
maxValue: 'До {{value}}',
enabled: 'Включено',
searchPlaceholder: 'Поиск товаров, брендов и категорий',
searchSubmit: 'Найти',
clearSearch: 'Очистить',
suggestionsTitle: 'Подсказки',
popularSearchesTitle: 'Популярные запросы',
recentSearchesTitle: 'Недавние запросы',
searchHistoryTitle: 'История поиска',
clearHistory: 'Очистить',
searchNoResultsHint: 'Ничего не найдено. Попробуйте более общий запрос.',
searchProductsFound: 'Найдено товаров: {{total}}',
searchResultsSummary: '{{total}} результатов по запросу "{{query}}"',
loadMore: 'Показать еще',
sortBy: 'Сортировать по',
sortRelevance: 'Рекомендуемые',
sortLatest: 'Новизне',
sortPriceAsc: 'Цене: по возрастанию',
sortPriceDesc: 'Цене: по убыванию',
sortRating: 'Рейтингу',
sortPopular: 'Популярности',
sortDiscount: 'Скидке',
layoutGrid: 'Сетка',
layoutLargeGrid: 'Крупная сетка',
layoutCompactGrid: 'Компактная сетка',
layoutGrid2: '2 колонки',
layoutGrid3: '3 колонки',
layoutGrid4: '4 колонки',
layoutCompact: 'Компактно',
layoutList: 'Список',
noResults: 'Нет результатов',
itemsCount: '{{count}} товаров',
emptyResultsTitle: 'Результаты не найдены',
emptyResultsDescription: 'Попробуйте изменить фильтры, сортировку или поисковый запрос.',
previousPage: 'Назад',
nextPage: 'Вперед',
pageOf: 'Страница {{page}} / {{total}}',
emptyCategoryTitle: 'В этой категории пока нет товаров',
emptyCategoryMessage: 'Попробуйте перейти в родительские категории или вернуться в общий каталог.',
goToParentCategory: 'Перейти в родительскую категорию',
browseCategories: 'Смотреть категории',
offlineTitle: 'Нет подключения',
offlineMessage: 'Подключитесь к сети, чтобы продолжить просмотр каталога.',
noFilterMatchTitle: 'Нет товаров, соответствующих выбранным фильтрам.',
noFilterMatchMessage: 'Попробуйте расширить диапазон цены, атрибуты или бренды.',
clearFilters: 'Очистить фильтры',
openFilters: 'Открыть фильтры',
applyFilters: 'Применить',
close: 'Закрыть',
filtersDrawerAria: 'Панель фильтров',
sortSheetAria: 'Параметры сортировки',
mobileToolbarAria: 'Мобильная панель каталога',
gridCycle: 'Сетка',
filtersPanelAria: 'Фильтры каталога',
filterPrice: 'Цена',
filterAvailability: 'Наличие',
filterInStock: 'В наличии',
filterLowStock: 'Мало в наличии',
filterOutOfStock: 'Нет в наличии',
filterRating: 'Рейтинг',
filterStars: '{{count}} звезд',
filterBrand: 'Бренд',
filterCategory: 'Категория',
filterCategoryValue: 'Категория {{value}}',
filterSubcategory: 'Подкатегория',
filterDiscount: 'Скидка',
filterNew: 'Новинки',
filterColor: 'Цвет',
filterSize: 'Размер',
filterAttributes: 'Атрибуты',
},
productDetails: {
loading: 'Загрузка товара...',
errorTitle: 'Товар недоступен',
retry: 'Попробовать снова',
missingTitle: 'Товар не найден',
missingDescription: 'Этот товар не существует или больше недоступен.',
backToCatalog: 'Вернуться в каталог',
tabsAria: 'Вкладки товара',
mediaAria: 'Медиа товара',
ratingStarsAria: 'Рейтинг в звездах',
selectRatingAria: 'Выберите оценку',
reviewsEmpty: 'Пока нет отзывов.',
questionsEmpty: 'Пока нет вопросов.',
askQuestion: 'Задать вопрос',
hideQuestionForm: 'Скрыть форму вопроса',
questionFormTitle: 'Задать вопрос',
questionFormPlaceholder: 'Спросите о размере, доставке, совместимости или использовании',
questionFormAnonymous: 'Задать анонимно',
submitQuestion: 'Отправить вопрос',
reviewFormTitle: 'Оставить отзыв',
reviewRatingLabel: 'Оценка',
reviewTitleLabel: 'Заголовок',
reviewTitlePlaceholder: 'Короткий заголовок',
reviewTextLabel: 'Отзыв',
reviewTextPlaceholder: 'Опишите ваш опыт использования',
reviewAnonymous: 'Отправить анонимно',
reviewUploadPlaceholder: 'Загрузка фото запланирована в следующем спринте.',
reviewRatingRequired: 'Выберите оценку.',
reviewTextRequired: 'Добавьте текст отзыва.',
reviewSuccess: 'Отзыв успешно отправлен.',
submitReview: 'Отправить отзыв',
submitting: 'Отправка...',
loadMore: 'Показать еще',
showingOf: 'Показано {{shown}} из {{total}}',
questionsSubmissionFuture: 'Отправку вопросов можно включить позже без изменения компонента.',
specificationsGeneral: 'Общие',
actionsAria: 'Действия с товаром',
buyNow: 'Купить сейчас',
wishlist: 'В избранное',
compare: 'Сравнить',
share: 'Поделиться',
notifyMe: 'Сообщить о наличии',
zoom: 'Увеличить',
fullscreen: 'Полный экран',
pdfDocument: 'PDF документ товара',
manualDocument: 'Инструкция товара',
warrantyDocument: 'Гарантийный документ',
openDocument: 'Открыть документ',
specificationsEmpty: 'Характеристики пока не указаны.',
warrantyTitle: 'Гарантия и возврат',
warrantyItem1: 'Условия гарантии определяются продавцом и местным законодательством.',
warrantyItem2: 'Возможность возврата зависит от состояния и категории товара.',
warrantyItem3: 'Подробная инструкция по возврату доступна после покупки.',
verifiedPurchase: 'Подтвержденная покупка',
officialSeller: 'Официальный продавец',
acceptedAnswer: 'Принятый ответ',
like: 'Нравится',
dislike: 'Не нравится',
reviewsCountLabel: '{{count}} отзывов',
previous: 'Назад',
next: 'Вперед',
pageOf: 'Страница {{page}} / {{total}}',
},
subcategories: {
loading: 'Загрузка подкатегорий...',
retry: 'Попробовать снова',
emptyTitle: 'Упс! Подкатегорий пока нет',
emptyDesc: 'В этом разделе ещё нет подкатегорий, но скоро они появятся',
goHome: 'На главную',
itemsInCategory: 'Товары в этой категории',
childrenCount: '{{count}} категорий',
productsCount: '{{count}} товаров',
includesProducts: 'Есть товары',
},
itemDetail: {
loading: 'Загрузка...',
loadingDexar: 'Загрузка товара...',
back: 'Вернуться',
backHome: 'Вернуться на главную',
noImage: 'Нет изображения',
stock: 'Наличие:',
inStock: 'В наличии',
lowStock: 'Осталось немного',
lastItems: 'Последние штуки',
mediumStock: 'Заканчивается',
addToCart: 'Добавить в корзину',
description: 'Описание',
specifications: 'Характеристики',
reviews: 'Отзывы',
yourReview: 'Ваш отзыв',
leaveReview: 'Оставить отзыв',
rating: 'Оценка:',
reviewPlaceholder: 'Поделитесь своими впечатлениями о товаре...',
reviewPlaceholderDexar: 'Поделитесь впечатлениями о товаре...',
anonymous: 'Анонимно',
submitting: 'Отправка...',
submit: 'Отправить',
reviewSuccess: 'Спасибо за ваш отзыв!',
reviewError: 'Ошибка отправки. Попробуйте позже.',
defaultUser: 'Пользователь',
defaultUserDexar: 'Аноним',
noReviews: 'Пока нет отзывов. Станьте первым!',
qna: 'Вопросы и ответы',
photo: 'Фото',
reviewsCount: 'отзывов',
today: 'Сегодня',
yesterday: 'Вчера',
daysAgo: 'дн. назад',
weeksAgo: 'нед. назад',
colour: 'Цвет',
size: 'Размер',
relatedProducts: 'Похожие товары',
},
app: {
connecting: 'Подключение к серверу...',
serverUnavailable: 'Сервер недоступен',
serverError: 'Не удалось подключиться к серверу. Проверьте подключение к интернету.',
retryConnection: 'Повторить попытку',
pageTitle: 'Маркетплейс товаров и услуг',
},
platform: {
loadingPage: 'Загрузка страницы платформы...',
emptyConfig: 'Конфигурация страницы не найдена.',
},
backoffice: {
title: 'Песочница Backoffice',
subtitle: 'Домен управления бизнес-данными (mock для платформенного фундамента).',
loading: 'Загрузка данных backoffice...',
products: 'Товары',
categories: 'Категории',
otherDomains: 'Другие домены',
sku: 'SKU',
titleColumn: 'Название',
price: 'Цена',
status: 'Статус',
itemsCount: 'шт.',
orders: 'Заказы',
customers: 'Клиенты',
inventory: 'Склад',
media: 'Медиа',
settings: 'Настройки',
notAvailable: 'н/д',
},
builder: {
title: 'Редактор проекта маркетплейса',
subtitle: 'Поверхность редактирования только bootstrap-конфигурации.',
general: 'Общие',
branding: 'Брендинг',
theme: 'Тема',
header: 'Хедер',
footer: 'Футер',
homepage: 'Главная страница',
widgets: 'Виджеты',
staticPages: 'Статические страницы',
marketplaceFeatures: 'Функции маркетплейса',
preview: 'Превью',
brandName: 'Название бренда',
marketplaceName: 'Название маркетплейса',
domain: 'Домен',
descriptionLabel: 'Описание',
defaultLanguage: 'Язык по умолчанию',
supportedLanguages: 'Поддерживаемые языки',
logo: 'Логотип',
smallLogo: 'Малый логотип',
favicon: 'Favicon',
marketplaceTitle: 'Заголовок маркетплейса',
primaryColor: 'Основной цвет',
secondaryColor: 'Вторичный цвет',
backgroundColor: 'Фон',
surfaceColor: 'Поверхность',
textColor: 'Текст',
successColor: 'Success',
warningColor: 'Warning',
dangerColor: 'Danger',
showLogo: 'Логотип',
showSearch: 'Поиск',
showCategories: 'Категории',
showLanguages: 'Языки',
showCart: 'Корзина',
showProfile: 'Профиль',
showWishlist: 'Избранное',
showCompare: 'Сравнение',
showRegion: 'Регион',
companyName: 'Информация о компании',
address: 'Адрес',
phone: 'Телефон',
email: 'Email',
copyright: 'Копирайт',
paymentIcons: 'Иконки оплаты',
socialLinks: 'Социальные ссылки',
createPage: 'Создать страницу',
deletePage: 'Удалить страницу',
pageId: 'ID страницы',
slug: 'Slug',
iconLabel: 'Иконка',
showInFooter: 'Показывать в футере',
showInHeader: 'Показывать в хедере',
showInSitemap: 'Показывать в sitemap',
requiresAuthentication: 'Требует авторизацию',
footerGroup: 'Группа футера',
orderLabel: 'Порядок',
translationTitle: 'Заголовок перевода',
htmlPreview: 'HTML',
seoSection: 'SEO',
seoTitle: 'SEO заголовок',
seoDescription: 'SEO описание',
seoKeywords: 'Ключевые слова',
seoCanonical: 'Canonical URL',
seoOgTitle: 'OG заголовок',
seoOgDescription: 'OG описание',
seoOgImage: 'OG изображение',
visible: 'Видимость',
layoutLabel: 'Layout',
columns: 'Колонки',
height: 'Высота',
overlay: 'Overlay',
autoplay: 'Autoplay',
cardsPerRow: 'Карточек в ряд',
filtersLabel: 'Фильтры',
showBadges: 'Показывать badges',
showRating: 'Показывать рейтинг',
showPrice: 'Показывать цену',
widgetJson: 'JSON виджета',
reviews: 'Отзывы',
questions: 'Вопросы',
comments: 'Комментарии',
recommendations: 'Рекомендации',
recentlyViewed: 'Недавно просмотренные',
searchSuggestions: 'Поисковые подсказки',
searchHistory: 'История поиска',
livePreview: 'Живое превью',
languagesTab: 'Языки',
addLanguage: 'Добавить язык',
removeLanguage: 'Удалить',
setDefaultLanguage: 'Сделать языком по умолчанию',
defaultLanguageLabel: 'По умолчанию',
navigationTab: 'Навигация',
navigationHeader: 'Навигация в шапке',
navigationFooter: 'Навигация в подвале',
navigationFooterGrouped: 'Навигация подвала сгруппирована по колонкам и пока недоступна для редактирования здесь — используйте вкладку "Подвал".',
addLink: 'Добавить ссылку',
removeLink: 'Удалить',
linkLabel: 'Название',
linkUrl: 'URL',
exportBootstrap: 'Экспорт bootstrap',
importBootstrap: 'Импорт bootstrap',
exportedBootstrap: 'Экспортированный bootstrap',
importSource: 'Источник импорта',
importError: 'Импорт не удался. Некорректный JSON bootstrap.',
featureFlags: 'Фичи-флаги',
validationMissingLogo: 'В брендинге отсутствует логотип.',
validationNoLanguages: 'Не настроены языки.',
validationInvalidUrl: 'Некорректный URL маркетплейса.',
validationDuplicateSlugs: 'Две или более статические страницы имеют одинаковый slug.',
validationEmptyHomepage: 'На главной странице нет секций.',
validationMissingWidget: 'В секции главной страницы есть виджет без типа.',
validationDuplicateNavLinks: 'Две или более ссылки в навигации шапки дублируются.',
validationInvalidColors: 'Один или несколько цветов темы указаны некорректно.',
validationMissingTranslations: 'Часть контента не переведена на один из поддерживаемых языков.',
validationInvalidLayouts: 'Один или несколько макетов ссылаются на неизвестный тип раскладки.',
statusDraft: 'Черновик',
statusPublished: 'Опубликовано',
unsavedChanges: 'Есть несохранённые изменения',
save: 'Сохранить',
publish: 'Опубликовать',
confirmLeaveUnsaved: 'Есть несохранённые изменения. Всё равно уйти?',
promptLinkUrl: 'URL',
promptImageUrl: 'URL изображения',
htmlEditorCode: 'Код',
htmlEditorPreview: 'Предпросмотр',
lastSaved: 'Последнее сохранение',
draftRestored: 'Локальный черновик восстановлен из предыдущей сессии.',
dismiss: 'Скрыть',
resetDraft: 'Сбросить черновик',
resetSection: 'Сбросить секцию',
confirmResetDraft: 'Это отменит все неопубликованные изменения и восстановит последнюю опубликованную конфигурацию. Продолжить?',
confirmResetSection: 'Это отменит неопубликованные изменения только в этой секции. Продолжить?',
marketplaceNameDesc: 'Название, которое видят покупатели на витрине и во вкладке браузера.',
domainDesc: 'Домен, по которому покупатели заходят на маркетплейс. Изменение поля не переносит DNS.',
descriptionFieldDesc: 'Краткое описание для поисковых систем и превью в соцсетях.',
defaultLanguageDesc: 'Язык, который показывается, если у покупателя нет сохранённого предпочтения.',
supportedLanguagesDesc: 'Коды языков через запятую, между которыми может переключаться покупатель (например, en, ru, hy).',
logoDesc: 'URL полного логотипа, отображается в шапке на десктопе.',
smallLogoDesc: 'URL компактного логотипа для ограниченного пространства (например, мобильная шапка).',
faviconDesc: 'URL иконки вкладки браузера. Должен быть небольшим квадратным изображением.',
marketplaceTitleDesc: 'Заголовок страницы для поисковых систем и вкладок браузера.',
primaryColorDesc: 'Основной цвет бренда для главных кнопок и акцентов. Должен быть корректным hex-цветом.',
secondaryColorDesc: 'Дополнительный цвет бренда для второстепенных элементов. Должен быть корректным hex-цветом.',
backgroundColorDesc: 'Цвет фона страницы по умолчанию. Должен быть корректным hex-цветом.',
surfaceColorDesc: 'Цвет фона карточек и приподнятых поверхностей. Должен быть корректным hex-цветом.',
textColorDesc: 'Цвет основного текста. Должен быть корректным hex-цветом.',
successColorDesc: 'Цвет для сообщений об успехе и положительных состояний. Должен быть корректным hex-цветом.',
warningColorDesc: 'Цвет для предупреждающих сообщений. Должен быть корректным hex-цветом.',
dangerColorDesc: 'Цвет для ошибок и разрушительных действий. Должен быть корректным hex-цветом.',
themeModeLabel: 'Цветовой режим',
themeModeDesc: 'Определяет, отображается ли витрина в светлой, тёмной теме или по системным настройкам покупателя.',
themeModeLight: 'Светлый',
themeModeLightDesc: 'Всегда использовать светлую тему.',
themeModeDark: 'Тёмный',
themeModeDarkDesc: 'Всегда использовать тёмную тему.',
themeModeSystem: 'Системный',
themeModeSystemDesc: 'Использовать системные/браузерные настройки цветовой темы устройства покупателя.',
siteLayoutLabel: 'Макет сайта',
siteLayoutDesc: 'Общий режим оформления страниц на витрине.',
siteLayoutDefault: 'По умолчанию',
siteLayoutDefaultDesc: 'Стандартный макет с верхней навигацией.',
siteLayoutSidebarLeft: 'Боковая панель (слева)',
siteLayoutSidebarLeftDesc: 'Добавляет левую боковую панель, обычно для навигации по категориям.',
siteLayoutCarouselHome: 'Карусель на главной',
siteLayoutCarouselHomeDesc: 'Главная страница начинается с полноширинной карусели/hero-блока.',
siteLayoutMinimal: 'Минимальный',
siteLayoutMinimalDesc: 'Упрощённое оформление с минимумом элементов навигации.',
showLogoDesc: 'Показывать логотип маркетплейса в шапке.',
showSearchDesc: 'Показывать строку поиска в шапке.',
showCategoriesDesc: 'Показывать вход в меню категорий в шапке.',
showLanguagesDesc: 'Показывать переключатель языка в шапке.',
showCartDesc: 'Показывать иконку/ссылку корзины в шапке.',
showProfileDesc: 'Показывать вход в профиль/аккаунт в шапке.',
showWishlistDesc: 'Показывать вход в избранное в шапке.',
showCompareDesc: 'Показывать вход в сравнение товаров в шапке.',
showRegionDesc: 'Показывать выбор региона/страны в шапке.',
companyNameDesc: 'Юридическое название компании, показывается в футере и на статических страницах.',
addressDesc: 'Юридический/фактический адрес компании, показывается в футере.',
phoneDesc: 'Контактный телефон, показывается в футере.',
emailDesc: 'Контактный email, показывается в футере.',
copyrightDesc: 'Строка копирайта внизу каждой страницы.',
paymentIconsDesc: 'По одной иконке оплаты на строку (URL изображения и подпись), показываются в футере.',
socialLinksDesc: 'По одной социальной ссылке на строку (платформа и URL), показываются в футере.',
staticPagesFieldDesc: 'Статические страницы (о компании, условия, политика и т.д.), на которые ссылается футер.',
sectionVisibleDesc: 'Показывать ли эту секцию главной страницы покупателям.',
layoutStrategyLabel: 'Стратегия раскладки',
layoutStrategyDesc: 'Как располагаются виджеты внутри этой секции.',
layoutStrategyStack: 'Стопка',
layoutStrategyStackDesc: 'Виджеты располагаются друг под другом вертикально.',
layoutStrategyGrid: 'Сетка',
layoutStrategyGridDesc: 'Виджеты располагаются в многоколоночной сетке.',
layoutStrategyHero: 'Hero',
layoutStrategyHeroDesc: 'Один крупный полноширинный промо-блок.',
layoutStrategyCarousel: 'Карусель',
layoutStrategyCarouselDesc: 'Виджеты прокручиваются горизонтально как карусель.',
layoutStrategySplit: 'Разделение',
layoutStrategySplitDesc: 'Контент делится на две колонки рядом друг с другом.',
sectionColumnsDesc: 'Количество колонок, если стратегия раскладки их поддерживает.',
widgetLayoutDesc: 'Название варианта раскладки в свободной форме, понятное этому виджету (например, "full-bleed", "boxed").',
widgetHeightDesc: 'Предпочтительная высота виджета (например, "480px" или "60vh").',
widgetOverlayDesc: 'Показывать тёмную подложку под текстом hero для читаемости.',
widgetAutoplayDesc: 'Автоматически прокручивать слайды hero без участия покупателя.',
widgetColumnsDesc: 'Количество плиток категорий в ряду.',
widgetCardsPerRowDesc: 'Количество карточек товаров в ряду.',
widgetFiltersDesc: 'Показывать элементы управления фильтрами рядом с подборкой товаров.',
widgetShowBadgesDesc: 'Показывать бейджи, например "Новинка" или "Скидка", на карточках товаров.',
widgetShowRatingDesc: 'Показывать рейтинг звёздами на карточках товаров.',
widgetShowPriceDesc: 'Показывать цену на карточках товаров.',
widgetJsonDesc: 'Сырые свойства виджета в формате JSON. Используется, если для этого типа виджета нет отдельного редактора.',
wishlistFeatureDesc: 'Разрешить покупателям сохранять товары в избранное.',
compareFeatureDesc: 'Разрешить покупателям сравнивать несколько товаров одновременно.',
reviewsFeatureDesc: 'Разрешить покупателям оставлять и читать отзывы о товарах.',
questionsFeatureDesc: 'Разрешить покупателям задавать вопросы о товарах и читать ответы.',
commentsFeatureDesc: 'Включить общие комментарии к контенту маркетплейса.',
recommendationsFeatureDesc: 'Показывать блоки рекомендованных товаров на витрине.',
recentlyViewedFeatureDesc: 'Показывать покупателям список "недавно просмотренные".',
searchSuggestionsDesc: 'Показывать живые подсказки поиска по мере ввода запроса.',
searchHistoryDesc: 'Запоминать и показывать недавние поисковые запросы покупателя.',
catalogNavigationModeLabel: 'Режим навигации каталога',
catalogNavigationModeDesc: 'Как покупатели перемещаются по категориям в каталоге.',
catalogNavDefault: 'По умолчанию',
catalogNavDefaultDesc: 'Стандартная навигация по категориям через хлебные крошки.',
catalogNavLeftCategory: 'Левая навигация по категориям',
catalogNavLeftCategoryDesc: 'Постоянное дерево категорий в левой боковой панели.',
catalogNavMegaCategory: 'Мега-меню категорий',
catalogNavMegaCategoryDesc: 'Развёрнутый выпадающий список с подкатегориями и избранными товарами.',
catalogNavTopCarousel: 'Карусель категорий сверху',
catalogNavTopCarouselDesc: 'Горизонтально прокручиваемые чипы категорий над сеткой каталога.',
newLanguageDesc: 'Код языка ISO для добавления в поддерживаемые языки витрины (например, de, fr).',
languagesTabDesc: 'Языки, доступные покупателям. Язык по умолчанию используется как резервный везде.',
linkLabelDesc: 'Текст, отображаемый для этой ссылки навигации.',
linkUrlDesc: 'Путь или URL, на который ведёт эта ссылка навигации.',
linkVisibleDesc: 'Показывать ли эту ссылку навигации покупателям.',
},
dashboard: {
title: 'Панель управления',
subtitle: 'Обзор вашего маркетплейса',
cardMarketplaceStatus: 'Статус маркетплейса',
cardProjectName: 'Название проекта',
cardCurrentTheme: 'Текущая тема',
cardLanguages: 'Языки',
cardCategoriesCount: 'Категории',
cardProductsCount: 'Товары',
cardOrders: 'Заказы',
cardRevenue: 'Выручка',
cardLastPublish: 'Последняя публикация',
cardLastDraftSave: 'Последнее сохранение черновика',
cardBootstrapVersion: 'Версия конфигурации',
cardActiveLayout: 'Активный макет',
cardEnabledWidgets: 'Активные виджеты',
stateLoading: 'Загрузка...',
stateEmpty: 'Пока нет данных',
stateError: 'Не удалось загрузить карточку',
statePendingBackend: 'Ожидает интеграции с бэкендом',
never: 'Никогда',
quickActionsTitle: 'Быстрые действия',
actionEditProject: 'Редактировать проект',
actionCategories: 'Категории',
actionProducts: 'Товары',
actionStaticPages: 'Статические страницы',
actionTransactions: 'Транзакции',
actionOrders: 'Заказы',
actionMediaLibrary: 'Медиатека',
actionUsers: 'Пользователи и права',
actionMonitoring: 'Мониторинг',
actionAnalytics: 'Аналитика',
actionPreviewMarketplace: 'Просмотр маркетплейса',
activityTitle: 'Недавняя активность',
activityEmpty: 'Пока нет активности. Сохраните или опубликуйте изменение, чтобы увидеть его здесь.',
activityDraftSaved: 'Черновик сохранён',
activityPublished: 'Опубликовано',
healthTitle: 'Состояние системы',
healthAllClear: 'Все проверки пройдены',
healthBootstrapValid: 'Bootstrap корректен',
healthConfigurationValid: 'Конфигурация корректна',
healthMissingTranslations: 'Отсутствуют переводы',
healthInvalidColors: 'Некорректные цвета',
healthInvalidWidgetReferences: 'Некорректные ссылки виджетов',
healthInvalidLayouts: 'Некорректные макеты',
comingSoonTitle: 'Скоро',
comingSoonDescription: 'Этот раздел ещё не реализован. Загляните позже.',
backToDashboard: 'Вернуться на панель управления',
},
staticPages: {
notFound: 'Страница не найдена',
backHome: 'На главную',
duplicateSlug: 'Дублирующиеся slug запрещены.',
emptyTitle: 'У каждой страницы должен быть хотя бы один заголовок.',
},
widgets: {
unavailable: 'Виджет недоступен',
},
carousel: {
loading: 'Загрузка товаров...',
addToCart: 'Добавить в корзину',
},
common: {
retry: 'Попробовать снова',
loading: 'Загрузка...',
},
location: {
allRegions: 'Все регионы',
chooseRegion: 'Выберите регион',
detectAuto: 'Определить автоматически',
},
auth: {
loginRequired: 'Требуется авторизация',
loginDescription: 'Для оформления заказа войдите через Telegram',
checking: 'Проверка...',
loginWithTelegram: 'Войти через Telegram',
orScanQr: 'Или отсканируйте QR-код',
loginNote: 'После входа вы будете перенаправлены обратно',
qrExpired: 'QR-код устарел. Нажмите, чтобы обновить',
qrError: 'Не удалось создать сессию входа. Нажмите, чтобы повторить',
},
ux: {
items: 'товаров',
wishlistTitle: 'Избранное',
wishlistEmptyTitle: 'Избранное пока пусто',
wishlistEmptyDescription: 'Сохраняйте товары, чтобы быстро вернуться к ним позже.',
clearWishlist: 'Очистить избранное',
wishlistCleared: 'Избранное очищено',
compareTitle: 'Сравнение товаров',
compareEmptyTitle: 'Нет товаров для сравнения',
compareEmptyDescription: 'Добавьте товары из каталога, чтобы сравнить характеристики и цену.',
clearCompare: 'Очистить сравнение',
hideIdentical: 'Скрыть одинаковые значения',
highlightDifferences: 'Подсвечивать различия',
clearRecentlyViewed: 'Очистить просмотренные',
recentlyViewedEmpty: 'Вы пока не просматривали товары.',
saveSearch: 'Сохранить поиск',
goToCatalog: 'Перейти в каталог',
wishlistAdded: 'Добавлено в избранное',
wishlistRemoved: 'Удалено из избранного',
compareAdded: 'Добавлено в сравнение',
compareRemoved: 'Удалено из сравнения',
compareLimitReached: 'Достигнут лимит сравнения ({{maxItems}})',
productShared: 'Товар отправлен',
productLinkCopied: 'Ссылка на товар скопирована',
sharingUnsupported: 'На этом устройстве нет поддержки шаринга',
addedToCart: 'Добавлено в корзину',
enterQueryBeforeSave: 'Введите поисковый запрос перед сохранением',
savedSearchNamed: 'Сохраненный поиск: {{name}}',
recentlyViewedTitle: 'Недавно просмотренные',
compareAttribute: 'Атрибут',
comparePrice: 'Цена',
compareRating: 'Рейтинг',
compareStock: 'Наличие',
compareDiscount: 'Скидка',
compareColor: 'Цвет',
compareSize: 'Размер',
compareUnknown: 'неизвестно',
},
diagnostics: {
title: 'Диагностика маркетплейса',
disabledTitle: 'Диагностика недоступна',
disabledDescription: 'Страница диагностики доступна только в режиме разработки.',
generatedAt: 'Сформировано: {{value}}',
healthScore: 'Оценка состояния',
summary: 'Сводка',
passedChecks: '{{count}} успешных проверок',
warnings: '{{count}} предупреждений',
errors: '{{count}} ошибок',
critical: '{{count}} критических',
healthChecks: 'Проверки состояния',
results: 'Подробные результаты',
noIssues: 'Проблем диагностики не найдено.',
ok: 'OK',
failed: 'Ошибка',
affectedComponent: 'Затронутый компонент',
suggestedResolution: 'Рекомендация',
severity: { info: 'Инфо', warning: 'Предупреждение', error: 'Ошибка', critical: 'Критично' },
checks: {
bootstrapLoaded: 'Bootstrap загружен',
tenantResolved: 'Tenant определен',
runtimeInitialized: 'Runtime инициализирован',
themeLoaded: 'Тема загружена',
widgetManifestLoaded: 'Манифест виджетов загружен',
sectionEngineInitialized: 'Section Engine доступен',
configurationEngineInitialized: 'Configuration Engine инициализирован',
translationResourcesAvailable: 'Переводы доступны',
requiredAssetsAvailable: 'Обязательные assets доступны',
},
bootstrapMissingTitle: 'Bootstrap отсутствует',
bootstrapMissingDescription: 'Конфигурация bootstrap не загружена.',
bootstrapMissingResolution: 'Проверьте provider bootstrap и локальный mock.',
requiredPropertyMissingTitle: 'Отсутствует обязательное свойство',
requiredPropertyMissingDescription: 'В bootstrap отсутствует обязательное свойство.',
requiredPropertyMissingResolution: 'Добавьте свойство в bootstrap payload.',
unknownWidgetTypeTitle: 'Неизвестный тип виджета',
unknownWidgetTypeDescription: 'Тип виджета отсутствует в widget manifest.',
unknownWidgetTypeResolution: 'Добавьте виджет в manifest или удалите неверную конфигурацию.',
duplicateIdTitle: 'Дублирующийся идентификатор',
duplicatePageIdDescription: 'Обнаружен дублирующийся id страницы.',
duplicateSectionIdDescription: 'Обнаружен дублирующийся id секции.',
duplicateWidgetIdDescription: 'Обнаружен дублирующийся id виджета.',
duplicateIdResolution: 'Сделайте id уникальными в bootstrap конфигурации.',
unknownLayoutTitle: 'Неизвестный layout',
unknownLayoutDescription: 'Значение layout страницы не распознано.',
unknownLayoutResolution: 'Используйте поддерживаемый layout или расширьте allow-list.',
invalidFeatureFlagTitle: 'Некорректный feature flag',
invalidFeatureFlagDescription: 'Значение feature flag должно быть boolean.',
invalidFeatureFlagResolution: 'Нормализуйте значение к true или false.',
brokenPageDefinitionTitle: 'Некорректное описание страницы',
brokenPageDefinitionDescription: 'Описание страницы неполное.',
brokenPageDefinitionResolution: 'Добавьте route, title, key или sections.',
invalidNavigationTargetTitle: 'Некорректная цель навигации',
invalidNavigationTargetDescription: 'Route навигации не совпадает с известными route.',
invalidNavigationTargetResolution: 'Исправьте target route или добавьте route.',
missingTranslationTitle: 'Отсутствует перевод',
missingTranslationDescription: 'Ключ перевода не разрешается.',
missingTranslationResolution: 'Добавьте ключ в translation resources.',
missingMediaTitle: 'Отсутствует media',
missingMediaDescription: 'Ожидаемый branding media ресурс отсутствует.',
missingMediaResolution: 'Укажите корректные media URL в branding конфиге.',
runtimeNotInitializedTitle: 'Runtime не инициализирован',
runtimeNotInitializedDescription: 'Platform runtime state не помечен как initialized.',
runtimeNotInitializedResolution: 'Проверьте цепочку initialize в PlatformRuntimeService.',
configFallbackUsageTitle: 'Используется fallback конфигурация',
configFallbackUsageDescription: 'Runtime разработки использует fallback или mock конфигурацию.',
configFallbackUsageResolution: 'Смените provider mode, если нужна проверка реального bootstrap.',
missingDatasourceTitle: 'Отсутствует datasource',
missingDatasourceDescription: 'Виджет поддерживает datasource, но он не задан.',
missingDatasourceResolution: 'Укажите source в props виджета или default settings manifest.',
widgetRenderFailureTitle: 'Сбой рендера виджета',
widgetRenderFailureDescription: 'Виджет откатился на unknown widget renderer.',
widgetRenderFailureResolution: 'Зарегистрируйте компонент виджета или исправьте component key.',
brokenRouteTitle: 'Нарушено ожидание route',
brokenRouteDescription: 'Ожидаемый route отсутствует.',
brokenRouteResolution: 'Верните регистрацию route или обновите правило диагностики.',
imageLoadFailedTitle: 'Ошибка загрузки изображения',
imageLoadFailedDescription: 'Отображаемое изображение не загрузилось.',
imageLoadFailedResolution: 'Проверьте asset path, CORS и доступность media.',
optionalDataMissingTitle: 'Отсутствуют необязательные данные',
optionalDataMissingDescription: 'Необязательное конфигурационное значение отсутствует.',
optionalDataMissingResolution: 'Добавьте значение, если оно нужно UX.',
},
mediaLibrary: {
title: 'Медиатека',
upload: 'Загрузить',
uploading: 'Загрузка...',
searchPlaceholder: 'Поиск файлов...',
delete: 'Удалить',
deleteConfirmTitle: 'Удалить файл?',
deleteConfirmBody: 'Это действие необратимо.',
cancel: 'Отмена',
confirm: 'Удалить',
emptyTitle: 'Пока нет файлов',
emptyDescription: 'Загрузите изображение или документ, чтобы начать.',
},
adminProducts: {
emptyTitle: 'Товары не найдены',
emptyDescription: 'Измените фильтры или создайте новый товар.',
},
adminUsers: {
emptyTitle: 'Пользователи не найдены',
emptyDescription: 'Пригласите коллегу, чтобы начать.',
invitationsEmptyTitle: 'Нет ожидающих приглашений',
},
adminMonitoring: {
eventsEmptyTitle: 'События не найдены',
eventsEmptyDescription: 'Попробуйте изменить фильтр категории или поисковый запрос.',
},
adminAnalytics: {
topProductsEmptyTitle: 'Нет продаж товаров за этот период',
topProductsEmptyDescription: 'Попробуйте выбрать более широкий диапазон дат.',
},
};