fix(i18n): eliminate all raw translation key leaks across admin pages
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> - Audited every 'key | translate' and translateService.t() usage under features/admin against en/ru/hy; 37 static keys and 8 dynamic namespaces were missing and rendered as raw keys - Added full adminTransactions namespace (was entirely absent), adminUsers table/invite/session keys with scopeValue/statusValue/invitationStatus maps, adminMonitoring section titles and categoryValue/queueStatus/webhookStatus/levelValue maps, adminAnalytics.topProducts, adminProducts.variants/archived - Resolved leaf/object key conflicts: dynamic 'adminMonitoring.category.*' renamed to categoryValue.*, 'adminTransactions.type.*' to typeValue.* so the leaf labels translate correctly - Monitoring event severity now translated (levelValue) instead of raw English enum - Merchant wording over technical: 'Background queues', 'Webhook deliveries', 'Activity log', 'Running smoothly/Slowed down/Stopped' - Verified zero missing keys in en/ru/hy via AST-level key extraction
This commit is contained in:
@@ -1530,6 +1530,8 @@ export const ru: Translations = {
|
||||
addVariant: 'Добавить вариант',
|
||||
variantName: 'Название варианта',
|
||||
variantsHint: 'Каждый вариант — это отдельный покупаемый вариант товара (например, размер или цвет) со своей ценой и остатком.',
|
||||
variants: 'Варианты',
|
||||
archived: 'В архиве',
|
||||
seoExplain: 'Это то, что видно в результатах поиска — понятные заголовок и описание помогают найти товар.',
|
||||
searchTitle: 'Заголовок для поиска',
|
||||
searchTitleHint: 'Заголовок, показываемый в результатах поиска. Делайте его коротким.',
|
||||
@@ -1585,10 +1587,98 @@ export const ru: Translations = {
|
||||
emptyTitle: 'Пользователи не найдены',
|
||||
emptyDescription: 'Пригласите коллегу, чтобы начать.',
|
||||
invitationsEmptyTitle: 'Нет ожидающих приглашений',
|
||||
title: 'Команда',
|
||||
name: 'Имя',
|
||||
email: 'Email',
|
||||
scope: 'Рабочая область',
|
||||
role: 'Роль',
|
||||
roles: 'Роли',
|
||||
lastLogin: 'Последний вход',
|
||||
sessions: 'Активные сессии',
|
||||
currentSession: 'Текущая сессия',
|
||||
invite: 'Пригласить участника',
|
||||
sendInvite: 'Отправить приглашение',
|
||||
revoke: 'Отозвать',
|
||||
passwordlessHint: 'Участники входят через Telegram — пароли не нужны.',
|
||||
confirmSuspend: 'Заблокировать этого участника? Доступ будет закрыт немедленно.',
|
||||
scopeValue: {
|
||||
marketplace: 'Витрина',
|
||||
office: 'Бэк-офис',
|
||||
},
|
||||
statusValue: {
|
||||
active: 'Активен',
|
||||
invited: 'Приглашён',
|
||||
suspended: 'Заблокирован',
|
||||
},
|
||||
invitationStatus: {
|
||||
pending: 'Ожидает',
|
||||
accepted: 'Принято',
|
||||
expired: 'Истекло',
|
||||
revoked: 'Отозвано',
|
||||
},
|
||||
},
|
||||
adminTransactions: {
|
||||
search: 'Поиск транзакций',
|
||||
type: 'Тип',
|
||||
method: 'Способ оплаты',
|
||||
fraud: 'Проверка на мошенничество',
|
||||
flagged: 'Помечено',
|
||||
retry: 'Повторить',
|
||||
audit: 'История',
|
||||
emptyTitle: 'Транзакции не найдены',
|
||||
emptyDescription: 'Попробуйте изменить фильтр или поисковый запрос.',
|
||||
status: {
|
||||
all: 'Все статусы',
|
||||
pending: 'В обработке',
|
||||
success: 'Успешно',
|
||||
failed: 'Ошибка',
|
||||
retried: 'Повторено',
|
||||
},
|
||||
typeValue: {
|
||||
all: 'Все типы',
|
||||
payment: 'Оплата',
|
||||
refund: 'Возврат',
|
||||
qr_payment: 'Оплата по QR',
|
||||
},
|
||||
},
|
||||
adminMonitoring: {
|
||||
eventsEmptyTitle: 'События не найдены',
|
||||
eventsEmptyDescription: 'Попробуйте изменить фильтр категории или поисковый запрос.',
|
||||
health: 'Проверки состояния',
|
||||
queues: 'Фоновые очереди',
|
||||
depth: 'В ожидании',
|
||||
webhooks: 'Доставка вебхуков',
|
||||
endpoint: 'Получатель',
|
||||
event: 'Событие',
|
||||
events: 'Журнал активности',
|
||||
category: 'Категория',
|
||||
level: 'Важность',
|
||||
message: 'Описание',
|
||||
categoryValue: {
|
||||
all: 'Все категории',
|
||||
audit: 'Действия администраторов',
|
||||
security: 'Безопасность',
|
||||
login: 'Вход',
|
||||
failed_login: 'Неудачный вход',
|
||||
api: 'API',
|
||||
error: 'Ошибка',
|
||||
warning: 'Предупреждение',
|
||||
},
|
||||
queueStatus: {
|
||||
healthy: 'Работает штатно',
|
||||
degraded: 'Замедлена',
|
||||
down: 'Остановлена',
|
||||
},
|
||||
webhookStatus: {
|
||||
delivered: 'Доставлено',
|
||||
failed: 'Ошибка',
|
||||
pending: 'Ожидает',
|
||||
},
|
||||
levelValue: {
|
||||
info: 'Инфо',
|
||||
warning: 'Предупреждение',
|
||||
error: 'Ошибка',
|
||||
},
|
||||
systemState: 'Состояние системы',
|
||||
backendConnectivity: 'Бэкенд',
|
||||
connected: 'Подключено',
|
||||
@@ -1603,6 +1693,7 @@ export const ru: Translations = {
|
||||
adminAnalytics: {
|
||||
topProductsEmptyTitle: 'Нет продаж товаров за этот период',
|
||||
topProductsEmptyDescription: 'Попробуйте выбрать более широкий диапазон дат.',
|
||||
topProducts: 'Топ товаров',
|
||||
print: 'Печать',
|
||||
tabsLabel: 'Разделы аналитики',
|
||||
tab: {
|
||||
|
||||
Reference in New Issue
Block a user