diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 2dea817..6ca9663 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -246,6 +246,97 @@ "deleteSuccess": "Query deleted", "deleteError": "Delete error" }, + "OlapConstructor": { + "titleNew": "New OLAP Query", + "titleEdit": "Edit Query", + "saveQuery": "Save Query", + "exportJson": "Export JSON", + "importJson": "Import JSON", + "fieldsTitle": "Fields", + "searchPlaceholder": "Search by name or tags", + "foundCount": "Found: {found} / {total}", + "loadingFields": "Loading fields...", + "noFields": "No fields. Initialize the structure in the OLAP Columns section first.", + "numericGroup": "Numeric → VALUES", + "categoryGroup": "Categories → ROW / COLUMN", + "filtersGroup": "Filters", + "resetAll": "Reset All", + "queryNameLabel": "Query name *", + "queryNamePlaceholder": "For example: Sales by day", + "valuePlaceholder": "value", + "IncludeValuesPlaceholder": "value1,value2", + "reportTypeLabel": "Report type", + "sqlTableLabel": "SQL table *", + "dateToLabel": "Date to (end of day)", + "daysBackLabel": "Days back (≥1)", + "summaryCheckbox": "Summary", + "activeCheckbox": "Active", + "restaurantsLabel": "Restaurants (multiple) *", + "selectRestaurants": "Select restaurants", + "selectedCount": "Selected: {count}", + "dbConnectionLabel": "Database connection *", + "selectDbConnection": "Select connection", + "tabTable": "Table", + "tabSql": "SQL script", + "copySql": "Copy SQL", + "defaultSqlPlaceholder": "-- Select a database connection to generate SQL", + "userFiltersTitle": "Custom filters", + "dropFilterHint": "Drop a filter field", + "rowHeader": "ROW", + "columnHeader": "COLUMN", + "valuesHeader": "VALUES", + "dropCategoryHint": "Drop a category", + "dropNumberHint": "Drop a number", + "resetModalTitle": "Reset All Settings", + "resetModalMessage": "Are you sure? All selected fields, filters, and settings will be deleted.", + "restaurantModalTitle": "Select Restaurants", + "restaurantSearchPlaceholder": "Search by name or host", + "noRestaurantsFound": "No restaurants found", + "dbModalTitle": "Database Connection", + "dbSearchPlaceholder": "Search by name", + "noConnectionsFound": "No connections found", + "exitModalTitle": "Unsaved Changes", + "exitModalMessage": "Are you sure you want to exit? All unsaved data will be lost.", + "exitModalStay": "Stay", + "exitModalLeave": "Leave", + "reportTypes": { + "SALES": "SALES", + "DELIVERIES": "DELIVERIES", + "TRANSACTIONS": "TRANSACTIONS" + }, + "aggregations": { + "sum": "SUM", + "avg": "AVG", + "count": "COUNT" + }, + "filterTypes": { + "IncludeValues": "Include Values", + "ExcludeValues": "Exclude Values", + "EnumValue": "Enum Value", + "StringValue": "String Value" + }, + "notifications": { + "errorLoadRestaurants": "Couldn't load restaurant list", + "errorLoadDB": "The list of database connections could not be loaded", + "sqlGenerationError": "-- SQL generation error: {error}", + "exportSuccess": "iiko configuration exported", + "exportError": "Export error: {error}", + "importSuccess": "iiko configuration loaded", + "importError": "Error loading JSON: {error}", + "queryNameRequired": "Enter query name", + "dbConnectionRequired": "Select a database connection", + "restaurantsRequired": "Select at least one restaurant", + "tableNameRequired": "Specify SQL table name", + "saveSuccess": "Query saved", + "saveError": "Save error: {error}", + "loadQueryError": "Error loading query: {error}", + "resetSuccess": "All settings reset", + "sqlCopied": "SQL script copied", + "restaurantsSelected": "Restaurants selected", + "dbConnectionSelected": "Database connection selected", + "loadColumnsError": "Error loading fields: {error}" + } + }, "dbConnections": { "pageName": "Databases", "add": "Add Connection", diff --git a/frontend/src/locales/ru.json b/frontend/src/locales/ru.json index fdf4771..d53c2f0 100644 --- a/frontend/src/locales/ru.json +++ b/frontend/src/locales/ru.json @@ -246,6 +246,97 @@ "deleteSuccess": "Запрос удалён", "deleteError": "Ошибка удаления" }, + "OlapConstructor": { + "titleNew": "Новый OLAP запрос", + "titleEdit": "Редактирование запроса", + "saveQuery": "Сохранить запрос", + "exportJson": "Экспорт JSON", + "importJson": "Импорт JSON", + "fieldsTitle": "Поля", + "searchPlaceholder": "Поиск по названию или тегам", + "foundCount": "Найдено: {found} / {total}", + "loadingFields": "Загрузка полей...", + "noFields": "Нет полей. Сначала инициализируйте структуру в разделе OLAP Columns.", + "numericGroup": "Числовые → VALUES", + "categoryGroup": "Категории → ROW / COLUMN", + "filtersGroup": "Фильтры", + "resetAll": "Сбросить всё", + "queryNameLabel": "Имя запроса *", + "queryNamePlaceholder": "Например: Продажи по дням", + "valuePlaceholder": "значение", + "IncludeValuesPlaceholder": "знач1,знач2", + "reportTypeLabel": "Тип отчета", + "sqlTableLabel": "Таблица SQL *", + "dateToLabel": "Дата до (конец дня)", + "daysBackLabel": "Дней назад (≥1)", + "summaryCheckbox": "Summary", + "activeCheckbox": "Активно", + "restaurantsLabel": "Рестораны (можно несколько) *", + "selectRestaurants": "Выбрать рестораны", + "selectedCount": "Выбрано: {count}", + "dbConnectionLabel": "Подключение к БД *", + "selectDbConnection": "Выбрать подключение", + "tabTable": "Таблица", + "tabSql": "SQL скрипт", + "copySql": "Копировать SQL", + "defaultSqlPlaceholder": "-- Выберите подключение к БД для генерации SQL", + "userFiltersTitle": "Пользовательские фильтры", + "dropFilterHint": "Перетащите поле фильтра", + "rowHeader": "ROW", + "columnHeader": "COLUMN", + "valuesHeader": "VALUES", + "dropCategoryHint": "Перетащите категорию", + "dropNumberHint": "Перетащите число", + "resetModalTitle": "Сброс всех настроек", + "resetModalMessage": "Вы уверены? Все выбранные поля, фильтры, настройки будут удалены.", + "restaurantModalTitle": "Выбор ресторанов", + "restaurantSearchPlaceholder": "Поиск по названию или хосту", + "noRestaurantsFound": "Рестораны не найдены", + "dbModalTitle": "Подключение к БД", + "dbSearchPlaceholder": "Поиск по имени", + "noConnectionsFound": "Подключения не найдены", + "exitModalTitle": "Несохранённые изменения", + "exitModalMessage": "Вы уверены, что хотите выйти? Все несохранённые данные будут потеряны.", + "exitModalStay": "Остаться", + "exitModalLeave": "Выйти", + "reportTypes": { + "SALES": "ПРОДАЖИ", + "DELIVERIES": "ДОСТАВКИ", + "TRANSACTIONS": "ТРАНЗАКЦИИ" + }, + "aggregations": { + "sum": "СУММА", + "avg": "СРЕДНЕЕ", + "count": "КОЛИЧЕСТВО" + }, + "filterTypes": { + "IncludeValues": "Включая значения", + "ExcludeValues": "Исключая значения", + "EnumValue": "Значение перечисления", + "StringValue": "Строковое значение" + }, + "notifications": { + "errorLoadRestaurants": "Не удалось загрузить список ресторанов", + "errorLoadDB": "Не удалось загрузить список подключений к БД", + "sqlGenerationError": "-- Ошибка генерации SQL: {error}", + "exportSuccess": "Конфигурация iiko экспортирована", + "exportError": "Ошибка экспорта: {error}", + "importSuccess": "Конфигурация iiko загружена", + "importError": "Ошибка при загрузке JSON: {error}", + "queryNameRequired": "Введите имя запроса", + "dbConnectionRequired": "-- Выберите подключение к БД для генерации SQL", + "restaurantsRequired": "Выберите хотя бы один ресторан", + "tableNameRequired": "Укажите название таблицы SQL", + "saveSuccess": "Запрос сохранён", + "saveError": "Ошибка сохранения: {error}", + "loadQueryError": "Ошибка загрузки запроса: {error}", + "resetSuccess": "Все настройки сброшены", + "sqlCopied": "SQL скрипт скопирован", + "restaurantsSelected": "Рестораны выбраны", + "dbConnectionSelected": "Подключение к БД выбрано", + "loadColumnsError": "Ошибка загрузки полей: {error}" + } + }, "dbConnections": { "pageName": "Базы данных", "add": "Добавить подключение", diff --git a/frontend/src/views/OlapConstructor.vue b/frontend/src/views/OlapConstructor.vue index 657e71f..a336fbc 100644 --- a/frontend/src/views/OlapConstructor.vue +++ b/frontend/src/views/OlapConstructor.vue @@ -2,26 +2,26 @@

- {{ queryId ? 'Редактирование запроса' : 'Новый OLAP запрос' }} + {{ queryId ? t('OlapConstructor.titleEdit') : t('OlapConstructor.titleNew') }}

- +
@@ -122,38 +124,38 @@
- - + +
- +
- +
- +
- +
@@ -168,7 +170,7 @@
- Summary + {{ t('OlapConstructor.summaryCheckbox') }}
- Активно + {{ t('OlapConstructor.activeCheckbox') }} @@ -190,9 +192,9 @@
- +
- +
@@ -237,32 +239,32 @@ @dragleave="dragOverZone = null" @drop="dropOnZone('filter', $event)" :class="{ 'ring-2 ring-primary-400 bg-primary-50 rounded-lg': dragOverZone === 'filter' }"> -

Пользовательские фильтры

+

{{ t('OlapConstructor.userFiltersTitle') }}

{{ f.name }}
-
Перетащите поле фильтра
+
{{ t('OlapConstructor.dropFilterHint') }}
@@ -277,7 +279,7 @@ @dragleave="dragOverZone = null" @drop="dropOnZone('row', $event)" :class="{ 'bg-primary-50': dragOverZone === 'row' }"> -
ROW
+
{{ t('OlapConstructor.rowHeader') }}
- Перетащите категорию + {{ t('OlapConstructor.dropCategoryHint') }}
-
COLUMN
+
{{ t('OlapConstructor.columnHeader') }}
- Перетащите категорию + {{ t('OlapConstructor.dropCategoryHint') }}
@@ -325,7 +327,7 @@ @dragleave="dragOverZone = null" @drop="dropOnZone('value', $event)" :class="{ 'bg-primary-50': dragOverZone === 'value' }"> -
VALUES
+
{{ t('OlapConstructor.valuesHeader') }}
{{ f.name }}
- Перетащите число + {{ t('OlapConstructor.dropNumberHint') }}
@@ -361,8 +363,8 @@
-

Скрипт SQL

- +

{{ t('OlapConstructor.tabSql') }}

+
{{ sqlScript }}
@@ -385,11 +387,11 @@
-

Сброс всех настроек

-

Вы уверены? Все выбранные поля, фильтры, настройки будут удалены.

+

{{ t('OlapConstructor.resetModalTitle') }}

+

{{ t('OlapConstructor.resetModalMessage') }}

- - + +
@@ -404,7 +406,7 @@
-

Выбор ресторанов

+

{{ t('OlapConstructor.restaurantModalTitle') }}

@@ -441,11 +443,11 @@
-
Рестораны не найдены
+
{{ t('OlapConstructor.noRestaurantsFound') }}
- - + +
@@ -459,7 +461,7 @@
-

Подключение к БД

+

{{ t('OlapConstructor.dbModalTitle') }}

@@ -489,11 +491,11 @@
-
Подключения не найдены
+
{{ t('OlapConstructor.noConnectionsFound') }}
- - + +
@@ -512,11 +514,11 @@ -

Несохранённые изменения

-

Вы уверены, что хотите выйти? Все несохранённые данные будут потеряны.

+

{{ t('OlapConstructor.exitModalTitle') }}

+

{{ t('OlapConstructor.exitModalMessage') }}

- - + +
@@ -529,9 +531,11 @@