diff --git a/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.html b/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.html
index b207d0f..66a9d46 100644
--- a/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.html
+++ b/src/app/features/admin/monitoring/pages/admin-monitoring-page.component.html
@@ -62,7 +62,7 @@
@@ -88,8 +88,8 @@
@for (event of facade.events(); track event.id) {
- | {{ ('adminMonitoring.category.' + event.category) | translate }} |
- {{ event.level }} |
+ {{ ('adminMonitoring.categoryValue.' + event.category) | translate }} |
+ {{ ('adminMonitoring.levelValue.' + event.level) | translate }} |
{{ event.message }} |
{{ event.actor }} |
{{ event.timestamp | date:'short' }} |
diff --git a/src/app/features/admin/transactions/pages/admin-transactions-list-page.component.html b/src/app/features/admin/transactions/pages/admin-transactions-list-page.component.html
index 1a8b2b7..55e0aa6 100644
--- a/src/app/features/admin/transactions/pages/admin-transactions-list-page.component.html
+++ b/src/app/features/admin/transactions/pages/admin-transactions-list-page.component.html
@@ -9,7 +9,7 @@
@@ -39,7 +39,7 @@
@for (tx of facade.transactions(); track tx.id) {
| {{ tx.orderNumber }} |
- {{ ('adminTransactions.type.' + tx.type) | translate }} |
+ {{ ('adminTransactions.typeValue.' + tx.type) | translate }} |
{{ tx.method }} |
{{ ('adminTransactions.status.' + tx.status) | translate }} |
{{ tx.amount }} {{ tx.currency }} |
diff --git a/src/app/i18n/en.ts b/src/app/i18n/en.ts
index 4fb2b3f..d9636e3 100644
--- a/src/app/i18n/en.ts
+++ b/src/app/i18n/en.ts
@@ -1535,6 +1535,8 @@ export const en: Translations = {
addVariant: 'Add variant',
variantName: 'Variant name',
variantsHint: 'Each variant is a purchasable option of this product, e.g. a size or color, with its own price and stock.',
+ variants: 'Variants',
+ archived: 'Archived',
seoExplain: 'This is what shows up in search results — a clear title and description help customers find this product.',
searchTitle: 'Search title',
searchTitleHint: 'The headline shown in search results. Keep it short and descriptive.',
@@ -1590,10 +1592,98 @@ export const en: Translations = {
emptyTitle: 'No users found',
emptyDescription: 'Invite a teammate to get started.',
invitationsEmptyTitle: 'No pending invitations',
+ title: 'Team members',
+ name: 'Name',
+ email: 'Email',
+ scope: 'Workspace',
+ role: 'Role',
+ roles: 'Roles',
+ lastLogin: 'Last sign-in',
+ sessions: 'Active sessions',
+ currentSession: 'This session',
+ invite: 'Invite member',
+ sendInvite: 'Send invitation',
+ revoke: 'Revoke',
+ passwordlessHint: 'Team members sign in with Telegram - no passwords to manage.',
+ confirmSuspend: 'Suspend this team member? They will lose access immediately.',
+ scopeValue: {
+ marketplace: 'Storefront',
+ office: 'Back office',
+ },
+ statusValue: {
+ active: 'Active',
+ invited: 'Invited',
+ suspended: 'Suspended',
+ },
+ invitationStatus: {
+ pending: 'Pending',
+ accepted: 'Accepted',
+ expired: 'Expired',
+ revoked: 'Revoked',
+ },
+ },
+ adminTransactions: {
+ search: 'Search transactions',
+ type: 'Type',
+ method: 'Payment method',
+ fraud: 'Fraud check',
+ flagged: 'Flagged',
+ retry: 'Retry',
+ audit: 'History',
+ emptyTitle: 'No transactions found',
+ emptyDescription: 'Try a different filter or search term.',
+ status: {
+ all: 'All statuses',
+ pending: 'Pending',
+ success: 'Successful',
+ failed: 'Failed',
+ retried: 'Retried',
+ },
+ typeValue: {
+ all: 'All types',
+ payment: 'Payment',
+ refund: 'Refund',
+ qr_payment: 'QR payment',
+ },
},
adminMonitoring: {
eventsEmptyTitle: 'No events found',
eventsEmptyDescription: 'Try a different category filter or search term.',
+ health: 'Health checks',
+ queues: 'Background queues',
+ depth: 'Waiting',
+ webhooks: 'Webhook deliveries',
+ endpoint: 'Destination',
+ event: 'Event',
+ events: 'Activity log',
+ category: 'Category',
+ level: 'Severity',
+ message: 'Description',
+ categoryValue: {
+ all: 'All categories',
+ audit: 'Admin activity',
+ security: 'Security',
+ login: 'Sign-in',
+ failed_login: 'Failed sign-in',
+ api: 'API',
+ error: 'Error',
+ warning: 'Warning',
+ },
+ queueStatus: {
+ healthy: 'Running smoothly',
+ degraded: 'Slowed down',
+ down: 'Stopped',
+ },
+ webhookStatus: {
+ delivered: 'Delivered',
+ failed: 'Failed',
+ pending: 'Pending',
+ },
+ levelValue: {
+ info: 'Info',
+ warning: 'Warning',
+ error: 'Error',
+ },
systemState: 'System state',
backendConnectivity: 'Backend',
connected: 'Connected',
@@ -1608,6 +1698,7 @@ export const en: Translations = {
adminAnalytics: {
topProductsEmptyTitle: 'No product sales in this period',
topProductsEmptyDescription: 'Try a wider date range.',
+ topProducts: 'Top products',
print: 'Print',
tabsLabel: 'Analytics sections',
tab: {
diff --git a/src/app/i18n/hy.ts b/src/app/i18n/hy.ts
index 2b243cf..87f0953 100644
--- a/src/app/i18n/hy.ts
+++ b/src/app/i18n/hy.ts
@@ -1530,6 +1530,8 @@ export const hy: Translations = {
addVariant: 'Ավելացնել տարբերակ',
variantName: 'Տարբերակի անուն',
variantsHint: 'Յուրաքանչյուր տարբերակ այս ապրանքի առանձին գնվող տարբերակ է (օր․՝ չափս կամ գույն)՝ իր գնով և մնացորդով։',
+ variants: 'Տարբերակներ',
+ archived: 'Արխիվում',
seoExplain: 'Սա այն է, ինչ երևում է որոնման արդյունքներում․ հստակ վերնագիրն ու նկարագրությունը օգնում են գտնել այս ապրանքը։',
searchTitle: 'Որոնման վերնագիր',
searchTitleHint: 'Վերնագիրը, որ երևում է որոնման արդյունքներում։ Պահեք կարճ։',
@@ -1585,10 +1587,98 @@ export const hy: Translations = {
emptyTitle: 'Օգտատերեր չեն գտնվել',
emptyDescription: 'Հրավիրեք գործընկերոջ՝ սկսելու համար։',
invitationsEmptyTitle: 'Սպասող հրավերներ չկան',
+ title: 'Թիմ',
+ name: 'Անուն',
+ 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 hy: Translations = {
adminAnalytics: {
topProductsEmptyTitle: 'Այս ժամանակահատվածում ապրանքների վաճառք չկա',
topProductsEmptyDescription: 'Փորձեք ընտրել ավելի լայն ամսաթվերի միջակայք։',
+ topProducts: 'Թոփ ապրանքներ',
print: 'Տպել',
tabsLabel: 'Վերլուծության բաժիններ',
tab: {
diff --git a/src/app/i18n/ru.ts b/src/app/i18n/ru.ts
index 1d67272..d9bfe4c 100644
--- a/src/app/i18n/ru.ts
+++ b/src/app/i18n/ru.ts
@@ -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: {
diff --git a/src/app/i18n/translations.ts b/src/app/i18n/translations.ts
index 581ff11..ab2200e 100644
--- a/src/app/i18n/translations.ts
+++ b/src/app/i18n/translations.ts
@@ -1542,6 +1542,8 @@ export interface Translations {
addVariant: string;
variantName: string;
variantsHint: string;
+ variants: string;
+ archived: string;
seoExplain: string;
searchTitle: string;
searchTitleHint: string;
@@ -1597,10 +1599,98 @@ export interface Translations {
emptyTitle: string;
emptyDescription: string;
invitationsEmptyTitle: string;
+ title: string;
+ name: string;
+ email: string;
+ scope: string;
+ role: string;
+ roles: string;
+ lastLogin: string;
+ sessions: string;
+ currentSession: string;
+ invite: string;
+ sendInvite: string;
+ revoke: string;
+ passwordlessHint: string;
+ confirmSuspend: string;
+ scopeValue: {
+ marketplace: string;
+ office: string;
+ };
+ statusValue: {
+ active: string;
+ invited: string;
+ suspended: string;
+ };
+ invitationStatus: {
+ pending: string;
+ accepted: string;
+ expired: string;
+ revoked: string;
+ };
+ };
+ adminTransactions: {
+ search: string;
+ type: string;
+ method: string;
+ fraud: string;
+ flagged: string;
+ retry: string;
+ audit: string;
+ emptyTitle: string;
+ emptyDescription: string;
+ status: {
+ all: string;
+ pending: string;
+ success: string;
+ failed: string;
+ retried: string;
+ };
+ typeValue: {
+ all: string;
+ payment: string;
+ refund: string;
+ qr_payment: string;
+ };
};
adminMonitoring: {
eventsEmptyTitle: string;
eventsEmptyDescription: string;
+ health: string;
+ queues: string;
+ depth: string;
+ webhooks: string;
+ endpoint: string;
+ event: string;
+ events: string;
+ category: string;
+ level: string;
+ message: string;
+ categoryValue: {
+ all: string;
+ audit: string;
+ security: string;
+ login: string;
+ failed_login: string;
+ api: string;
+ error: string;
+ warning: string;
+ };
+ queueStatus: {
+ healthy: string;
+ degraded: string;
+ down: string;
+ };
+ webhookStatus: {
+ delivered: string;
+ failed: string;
+ pending: string;
+ };
+ levelValue: {
+ info: string;
+ warning: string;
+ error: string;
+ };
systemState: string;
backendConnectivity: string;
connected: string;
@@ -1615,6 +1705,7 @@ export interface Translations {
adminAnalytics: {
topProductsEmptyTitle: string;
topProductsEmptyDescription: string;
+ topProducts: string;
print: string;
tabsLabel: string;
tab: {