- Add admin dashboard feature (models/gateway/facade/components/page) - Wire admin/products routes and backoffice coming-soon placeholders - Add lastPublishedAt to ProjectEditorFacade/state - Add dashboard i18n keys (en/ru/hy) and docs/ADMIN.md Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
736 lines
41 KiB
TypeScript
736 lines
41 KiB
TypeScript
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',
|
||
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: 'Это отменит неопубликованные изменения только в этой секции. Продолжить?',
|
||
},
|
||
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: 'Медиатека',
|
||
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.',
|
||
},
|
||
};
|