@object-ui/i18n 6.2.3 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,1317 +1,2024 @@
1
- /**
2
- * Русский (ru) - Russian language pack for Object UI
3
- */
4
1
  const ru = {
5
- common: {
6
- addToFavorites: 'Добавить в избранное',
7
- removeFromFavorites: 'Удалить из избранного',
8
- loading: 'Загрузка...',
9
- save: 'Сохранить',
10
- cancel: 'Отмена',
11
- delete: 'Удалить',
12
- edit: 'Редактировать',
13
- create: 'Создать',
14
- search: 'Поиск',
15
- filter: 'Фильтр',
16
- reset: 'Сбросить',
17
- confirm: 'Подтвердить',
18
- close: 'Закрыть',
19
- back: 'Назад',
20
- next: 'Далее',
21
- previous: 'Назад',
22
- submit: 'Отправить',
23
- refresh: 'Обновить',
24
- export: 'Экспорт',
25
- import: 'Импорт',
2
+ lookup: {
3
+ recentlyUsed: 'Недавние',
4
+ allResults: 'Все результаты',
5
+ createNew: 'Создать',
6
+ createNamed: 'Создать «{{name}}»',
7
+ showingResults: 'Показано {{shown}} из {{total}} результатов',
8
+ showAllResults: 'Показать все результаты ({{count}})',
9
+ selectedBadge: 'Выбрано',
10
+ browseAll: 'Просмотреть все записи',
11
+ remove: 'Удалить {{label}}',
12
+ selectFirst: 'Сначала выберите {{fields}}',
13
+ selectRecord: 'Выбрать запись',
14
+ recordCount: 'Записей: {{count}}',
15
+ recordCountOne: '1 запись',
16
+ pageOf: 'Страница {{current}} из {{total}}',
17
+ filters: 'Фильтры',
18
+ clear: 'Очистить',
26
19
  yes: 'Да',
27
- no: 'Нет',
28
- ok: 'ОК',
29
- actions: 'Действия',
30
- more: 'Ещё',
31
- selectAll: 'Выбрать все',
32
- clearAll: 'Очистить все',
33
- noData: 'Нет данных',
34
- noResults: 'Результаты не найдены',
35
- required: 'Обязательно',
36
- optional: 'Необязательно',
37
- selectOption: 'Выберите вариант',
38
- select: 'Выбрать...',
39
- openChat: 'Открыть чат',
40
- closeChat: 'Закрыть чат',
41
- toggleSidebar: 'Переключить боковую панель',
20
+ filterPlaceholder: 'Фильтр: {{label}}',
21
+ prevPage: 'Предыдущая страница',
22
+ nextPage: 'Следующая страница',
23
+ jumpToPage: 'Перейти к странице',
24
+ retry: 'Повторить',
25
+ loading: 'Загрузка…',
26
+ noOptions: 'Варианты не найдены',
27
+ noRecords: 'Записи не найдены',
28
+ },
29
+ common: {
30
+ addToFavorites: "Добавить в избранное",
31
+ removeFromFavorites: "Удалить из избранного",
32
+ loading: "Загрузка...",
33
+ save: "Сохранить",
34
+ cancel: "Отмена",
35
+ delete: "Удалить",
36
+ edit: "Редактировать",
37
+ create: "Создать",
38
+ search: "Поиск",
39
+ filter: "Фильтр",
40
+ reset: "Сбросить",
41
+ confirm: "Подтвердить",
42
+ close: "Закрыть",
43
+ back: "Назад",
44
+ next: "Далее",
45
+ previous: "Назад",
46
+ submit: "Отправить",
47
+ refresh: "Обновить",
48
+ export: "Экспорт",
49
+ import: "Импорт",
50
+ yes: "Да",
51
+ no: "Нет",
52
+ ok: "ОК",
53
+ actions: "Действия",
54
+ more: "Ещё",
55
+ selectAll: "Выбрать все",
56
+ clearAll: "Очистить все",
57
+ noData: "Нет данных",
58
+ noResults: "Результаты не найдены",
59
+ required: "Обязательно",
60
+ optional: "Необязательно",
61
+ selectOption: "Выберите вариант",
62
+ select: "Выбрать...",
63
+ openChat: "Открыть чат",
64
+ closeChat: "Закрыть чат",
65
+ toggleSidebar: "Переключить боковую панель",
66
+ package: "Пакет",
67
+ },
68
+ actions: {
69
+ resultDialog: {
70
+ defaultTitle: 'Save this value now',
71
+ acknowledge: 'I have saved this',
72
+ },
42
73
  },
43
74
  validation: {
44
- required: 'Поле {{field}} обязательно для заполнения',
45
- minLength: '{{field}} должно содержать не менее {{min}} символов',
46
- maxLength: '{{field}} должно содержать не более {{max}} символов',
47
- min: '{{field}} должно быть не менее {{min}}',
48
- max: '{{field}} должно быть не более {{max}}',
49
- email: 'Пожалуйста, введите корректный адрес электронной почты',
50
- url: 'Пожалуйста, введите корректный URL',
51
- pattern: 'Неверный формат поля {{field}}',
52
- unique: '{{field}} должно быть уникальным',
53
- type: '{{field}} должно быть допустимым {{type}}',
75
+ required: "Поле {{field}} обязательно для заполнения",
76
+ minLength: "{{field}} должно содержать не менее {{min}} символов",
77
+ maxLength: "{{field}} должно содержать не более {{max}} символов",
78
+ min: "{{field}} должно быть не менее {{min}}",
79
+ max: "{{field}} должно быть не более {{max}}",
80
+ email: "Пожалуйста, введите корректный адрес электронной почты",
81
+ url: "Пожалуйста, введите корректный URL",
82
+ pattern: "Неверный формат поля {{field}}",
83
+ unique: "{{field}} должно быть уникальным",
84
+ type: "{{field}} должно быть допустимым {{type}}",
54
85
  },
55
86
  form: {
56
- addItem: 'Добавить элемент',
57
- removeItem: 'Удалить элемент',
58
- fieldRequired: 'Это поле обязательно',
59
- invalidFormat: 'Неверный формат',
60
- saveSuccess: 'Успешно сохранено',
61
- saveError: 'Ошибка сохранения',
62
- unsavedChanges: 'У вас есть несохранённые изменения. Вы уверены, что хотите покинуть страницу?',
63
- stepOf: 'Шаг {{current}} из {{total}}',
64
- createTitle: 'Создать {{object}}',
65
- editTitle: 'Редактировать {{object}}',
66
- createDescription: 'Добавить новый {{object}} в базу данных.',
67
- editDescription: 'Обновить данные {{object}}',
68
- saveRecord: 'Сохранить запись',
87
+ addItem: "Добавить элемент",
88
+ removeItem: "Удалить элемент",
89
+ fieldRequired: "Это поле обязательно",
90
+ invalidFormat: "Неверный формат",
91
+ saveSuccess: "Успешно сохранено",
92
+ saveError: "Ошибка сохранения",
93
+ unsavedChanges: "У вас есть несохранённые изменения. Вы уверены, что хотите покинуть страницу?",
94
+ stepOf: "Шаг {{current}} из {{total}}",
95
+ createTitle: "Создать {{object}}",
96
+ editTitle: "Редактировать {{object}}",
97
+ createDescription: "Добавить новый {{object}} в базу данных.",
98
+ editDescription: "Обновить данные {{object}}",
99
+ saveRecord: "Сохранить запись",
100
+ create: "Создать",
101
+ update: "Обновить",
102
+ createSuccess: "{{object}} создан",
103
+ updateSuccess: "{{object}} обновлён",
104
+ deleteSuccess: "{{object}} удалён",
69
105
  },
70
106
  fields: {
71
107
  richText: {
72
- format: 'Format: {{format}}',
73
- basicEditorHint: 'Rich text editor (basic)',
74
- placeholder: 'Enter text...',
108
+ format: "Формат: {{format}}",
109
+ basicEditorHint: "Редактор форматированного текста (базовый)",
110
+ placeholder: "Введите текст...",
75
111
  },
76
112
  },
77
113
  table: {
78
- rowsPerPage: 'Строк на странице',
79
- showing: 'Показано с {{from}} по {{to}} из {{total}}',
80
- noRows: 'Нет строк для отображения',
81
- sortAsc: 'Сортировка по возрастанию',
82
- sortDesc: 'Сортировка по убыванию',
83
- filterColumn: 'Фильтр по {{column}}',
84
- columns: 'Столбцы',
85
- exportCSV: 'Экспорт в CSV',
86
- exportExcel: 'Экспорт в Excel',
87
- selectRow: 'Выбрать строку',
88
- selectAllRows: 'Выбрать все строки',
89
- expandRow: 'Развернуть строку',
90
- collapseRow: 'Свернуть строку',
91
- hideColumn: 'Скрыть столбец',
92
- freezeColumn: 'Закрепить столбец',
93
- unfreezeColumn: 'Открепить столбец',
94
- pageInfo: 'Страница {{current}} из {{total}}',
95
- totalRecords: 'Всего {{count}}',
114
+ rowsPerPage: "Строк на странице",
115
+ showing: "Показано с {{from}} по {{to}} из {{total}}",
116
+ noRows: "Нет строк для отображения",
117
+ sortAsc: "Сортировка по возрастанию",
118
+ sortDesc: "Сортировка по убыванию",
119
+ filterColumn: "Фильтр по {{column}}",
120
+ columns: "Столбцы",
121
+ exportCSV: "Экспорт в CSV",
122
+ exportExcel: "Экспорт в Excel",
123
+ selectRow: "Выбрать строку",
124
+ selectAllRows: "Выбрать все строки",
125
+ expandRow: "Развернуть строку",
126
+ collapseRow: "Свернуть строку",
127
+ hideColumn: "Скрыть столбец",
128
+ freezeColumn: "Закрепить столбец",
129
+ unfreezeColumn: "Открепить столбец",
130
+ pageInfo: "Страница {{current}} из {{total}}",
131
+ totalRecords: "Всего {{count}}",
132
+ noResults: "Результатов нет",
133
+ noResultsHint: "Попробуйте изменить фильтры или поисковые запросы.",
134
+ cancelAll: "Отменить всё",
135
+ saveAll: "Сохранить всё ({{count}})",
136
+ addRecord: "Добавить запись",
137
+ open: "Открыть",
138
+ search: "Поиск...",
139
+ modified: "{{count}} строк изменено",
140
+ selected: "{{count}} выбрано",
141
+ edit: "Редактировать",
142
+ delete: "Удалить",
96
143
  },
97
144
  grid: {
98
- actions: 'Действия',
99
- edit: 'Редактировать',
100
- delete: 'Удалить',
101
- export: 'Экспорт',
102
- exportAs: 'Экспорт в {{format}}',
103
- loading: 'Загрузка таблицы...',
104
- errorLoading: 'Ошибка загрузки таблицы',
105
- pullToRefresh: 'Потяните для обновления',
106
- refreshing: 'Обновление…',
107
- openRecord: 'Открыть запись',
108
- rowHeight: 'Высота строки: {{mode}}',
145
+ actions: "Действия",
146
+ edit: "Редактировать",
147
+ delete: "Удалить",
148
+ export: "Экспорт",
149
+ exportAs: "Экспорт в {{format}}",
150
+ loading: "Загрузка таблицы...",
151
+ errorLoading: "Ошибка загрузки таблицы",
152
+ pullToRefresh: "Потяните для обновления",
153
+ refreshing: "Обновление…",
154
+ openRecord: "Открыть запись",
155
+ rowHeight: "Высота строки: {{mode}}",
156
+ openMenu: "Открыть меню",
157
+ empty: "Пусто",
158
+ yes: "Да",
159
+ no: "Нет",
160
+ systemFields: "Система",
161
+ toolbar: {
162
+ densityMode: "Плотность",
163
+ densityCompact: "Компактный",
164
+ densityComfortable: "Обычный",
165
+ densitySpacious: "Просторный",
166
+ densityCycleHint: "{{label}} (нажмите для изменения)",
167
+ densityCycleShortHint: "Нажмите для изменения",
168
+ },
169
+ import: {
170
+ title: "Импорт {{object}}",
171
+ stepUpload: "Загрузка",
172
+ stepMapping: "Сопоставление",
173
+ stepPreview: "Предпросмотр",
174
+ uploadDescription: "Загрузите CSV-файл для начала работы.",
175
+ mappingDescription: "Сопоставьте столбцы CSV с полями объекта.",
176
+ previewDescription: "Проверьте данные перед импортом.",
177
+ dragDrop: "Перетащите CSV-файл сюда или нажмите для выбора",
178
+ browseFiles: "Обзор файлов",
179
+ onlyCsv: "Поддерживаются только CSV-файлы.",
180
+ fileNeedsHeader: "Файл должен содержать строку заголовка и хотя бы одну строку данных.",
181
+ mappingTemplate: "Шаблон сопоставления:",
182
+ chooseTemplate: "Выбрать шаблон…",
183
+ noSavedTemplates: "Нет сохранённых шаблонов",
184
+ noneOption: "— Нет —",
185
+ saveCurrent: "Сохранить текущий",
186
+ templateName: "Название шаблона",
187
+ save: "Сохранить",
188
+ deleteTemplate: "Удалить шаблон",
189
+ csvColumn: "Столбец CSV",
190
+ mapsTo: "Сопоставляется с",
191
+ status: "Статус",
192
+ skipColumn: "Пропустить столбец",
193
+ skip: "— Пропустить —",
194
+ mapped: "Сопоставлено",
195
+ skipped: "Пропущено",
196
+ rowsWithErrors: "{{count}} строк с ошибками",
197
+ rowsCorrected: "{{count}} строк исправлено",
198
+ clickToFix: "— нажмите на выделенную ячейку для редактирования.",
199
+ showingRows: "Отображено {{shown}} из {{total}} строк",
200
+ importing: "Импорт… {{progress}}%",
201
+ importComplete: "Импорт завершён",
202
+ imported: "{{count}} импортировано",
203
+ skippedCount: "{{count}} пропущено",
204
+ moreErrors: "…ещё {{count}} ошибок",
205
+ cancel: "Отмена",
206
+ back: "Назад",
207
+ next: "Далее",
208
+ close: "Закрыть",
209
+ importNRows: "Импортировать {{count}} строк",
210
+ importingProgress: "Импортируется…",
211
+ requiredMark: "*",
212
+ required: "Обязательно",
213
+ invalidType: "Неверный {{type}}",
214
+ },
109
215
  },
110
216
  calendar: {
111
- today: 'Сегодня',
112
- month: 'Месяц',
113
- week: 'Неделя',
114
- day: 'День',
115
- agenda: 'Расписание',
116
- allDay: 'Весь день',
117
- noEvents: 'Нет событий',
118
- newEvent: 'Новое событие',
119
- moreEvents: '+{{count}} ещё',
217
+ today: "Сегодня",
218
+ month: "Месяц",
219
+ week: "Неделя",
220
+ day: "День",
221
+ agenda: "Расписание",
222
+ allDay: "Весь день",
223
+ noEvents: "Нет событий",
224
+ newEvent: "Новое событие",
225
+ moreEvents: "+{{count}} ещё",
120
226
  },
121
227
  list: {
122
- recordCount: '{{count}} записей',
123
- recordCountOne: '{{count}} запись',
124
- addRecord: 'Добавить запись',
125
- tabs: 'Вкладки',
126
- allRecords: 'Все записи',
127
- search: 'Поиск',
128
- filter: 'Фильтр',
129
- filterRecords: 'Фильтр записей',
130
- sort: 'Сортировка',
131
- sortRecords: 'Сортировка записей',
132
- group: 'Группировка',
133
- groupBy: 'Группировать по',
134
- export: 'Экспорт',
135
- exportAs: 'Экспорт в {{format}}',
136
- color: 'Цвет',
137
- rowColor: 'Цвет строки',
138
- colorByField: 'Окраска по полю',
139
- clear: 'Очистить',
140
- none: 'Нет',
141
- hideFields: 'Скрыть поля',
142
- noItems: 'Элементы не найдены',
143
- noItemsMessage: 'Нет записей для отображения. Попробуйте изменить фильтры или добавить новые данные.',
228
+ loading: 'Loading records...',
229
+ recordCount: "{{count}} записей",
230
+ recordCountOne: "{{count}} запись",
231
+ addRecord: "Добавить запись",
232
+ tabs: "Вкладки",
233
+ allRecords: "Все записи",
234
+ search: "Поиск",
235
+ filter: "Фильтр",
236
+ filterRecords: "Фильтр записей",
237
+ sort: "Сортировка",
238
+ sortRecords: "Сортировка записей",
239
+ group: "Группировка",
240
+ groupBy: "Группировать по",
241
+ export: "Экспорт",
242
+ exportAs: "Экспорт в {{format}}",
243
+ color: "Цвет",
244
+ rowColor: "Цвет строки",
245
+ colorByField: "Окраска по полю",
246
+ clear: "Очистить",
247
+ none: "Нет",
248
+ hideFields: "Скрыть поля",
249
+ noItems: "Элементы не найдены",
250
+ noItemsMessage: "Нет записей для отображения. Попробуйте изменить фильтры или добавить новые данные.",
251
+ showAll: "Показать всё",
252
+ pullToRefresh: "Потяните для обновления",
253
+ refreshing: "Обновление…",
254
+ share: "Поделиться",
255
+ print: "Печать",
256
+ hideFieldsTitle: "Скрыть поля",
257
+ dataLimitReached: "Отображаются первые {{limit}} записей. Возможно, есть ещё данные.",
258
+ viewSettings: "Настройки представления",
259
+ viewSettingsHint: "Группировка, цвет, плотность и отображаемые поля.",
260
+ addGroup: "Добавить поле группировки",
261
+ collapsedByDefault: "Свёрнуто по умолчанию",
262
+ removeGroup: "Удалить",
144
263
  },
145
264
  kanban: {
146
- addCard: 'Добавить карточку',
147
- addColumn: 'Добавить колонку',
148
- moveCard: 'Переместить карточку',
149
- deleteCard: 'Удалить карточку',
150
- deleteColumn: 'Удалить колонку',
265
+ addCard: "Добавить карточку",
266
+ addColumn: "Добавить колонку",
267
+ moveCard: "Переместить карточку",
268
+ deleteCard: "Удалить карточку",
269
+ deleteColumn: "Удалить колонку",
270
+ noCards: "Нет карточек",
271
+ cardTitlePlaceholder: "Введите название карточки...",
151
272
  },
152
273
  timeline: {
153
274
  bucket: {
154
- overdue: 'Просрочено',
155
- today: 'Сегодня',
156
- tomorrow: 'Завтра',
157
- thisWeek: 'На этой неделе',
158
- nextWeek: 'На следующей неделе',
159
- later: 'Позже',
160
- noDate: 'Без даты',
161
- unassigned: 'Не назначено',
275
+ overdue: "Просрочено",
276
+ today: "Сегодня",
277
+ tomorrow: "Завтра",
278
+ thisWeek: "На этой неделе",
279
+ nextWeek: "На следующей неделе",
280
+ later: "Позже",
281
+ noDate: "Без даты",
282
+ unassigned: "Не назначено",
162
283
  },
163
284
  },
164
285
  gantt: {
165
286
  column: {
166
- taskName: 'Task Name',
167
- start: 'Start',
168
- end: 'End',
287
+ taskName: "Название задачи",
288
+ start: "Начало",
289
+ end: "Конец",
169
290
  },
170
291
  toolbar: {
171
- prevPeriod: 'Previous period',
172
- nextPeriod: 'Next period',
173
- zoomIn: 'Zoom in',
174
- zoomOut: 'Zoom out',
175
- jumpToToday: 'Jump to today',
176
- today: 'Today',
177
- showTaskList: 'Show task list',
178
- hideTaskList: 'Hide task list',
292
+ prevPeriod: "Предыдущий период",
293
+ nextPeriod: "Следующий период",
294
+ zoomIn: "Увеличить",
295
+ zoomOut: "Уменьшить",
296
+ jumpToToday: "Перейти к сегодня",
297
+ today: "Сегодня",
298
+ showTaskList: "Показать список задач",
299
+ hideTaskList: "Скрыть список задач",
179
300
  },
180
301
  },
181
302
  view: {
182
- rename: 'Переименовать',
183
- duplicateView: 'Дублировать представление',
184
- shareView: 'Поделиться представлением',
185
- setAsDefault: 'Установить по умолчанию',
186
- pinView: 'Закрепить представление',
187
- unpinView: 'Открепить представление',
188
- changeViewType: 'Изменить тип представления',
189
- deleteView: 'Удалить представление',
190
- addView: 'Добавить представление',
191
- unsavedChanges: 'Несохранённые изменения',
192
- saveAsView: 'Сохранить как представление',
193
- moreViews: 'ещё {{count}}',
194
- activeFilters: 'Фильтры активны',
195
- activeSort: 'Сортировка активна',
303
+ editViewConfig: "Изменить настройки представления",
304
+ rename: "Переименовать",
305
+ duplicateView: "Дублировать представление",
306
+ shareView: "Поделиться представлением",
307
+ setAsDefault: "Установить по умолчанию",
308
+ pinView: "Закрепить представление",
309
+ unpinView: "Открепить представление",
310
+ changeViewType: "Изменить тип представления",
311
+ deleteView: "Удалить представление",
312
+ addView: "Добавить представление",
313
+ unsavedChanges: "Несохранённые изменения",
314
+ saveAsView: "Сохранить как представление",
315
+ moreViews: "ещё {{count}}",
316
+ activeFilters: "Фильтры активны",
317
+ activeSort: "Сортировка активна",
318
+ manageViews: "Управление представлениями",
319
+ manageAllViews: "Управление всеми представлениями…",
320
+ manageViewsDescription: "Переупорядочьте, переименуйте, закрепите или удалите все представления этого объекта.",
321
+ searchViews: "Поиск представлений",
322
+ addNewView: "Добавить новое представление",
323
+ done: "Готово",
324
+ noViewsFound: "Представления не найдены.",
325
+ dragToReorder: "Перетащите для изменения порядка",
326
+ defaultView: "Представление по умолчанию",
327
+ defaultBadge: "по умолчанию",
328
+ tabActionsFor: "Действия с представлением {{name}}",
329
+ readonlyAriaLabel: "Представление только для чтения",
330
+ readonlyTooltip: "Системное представление — скопируйте для настройки.",
331
+ },
332
+ designer: {
333
+ undo: 'Undo',
334
+ redo: 'Redo',
196
335
  },
197
336
  detail: {
198
- back: 'Назад',
199
- edit: 'Редактировать',
200
- editInline: 'Редактировать',
201
- save: 'Сохранить',
202
- saveChanges: 'Сохранить изменения',
203
- editFieldsInline: 'Редактировать поля',
204
- share: 'Поделиться',
205
- duplicate: 'Дублировать',
206
- export: 'Экспорт',
207
- viewHistory: 'Просмотр истории',
208
- delete: 'Удалить',
209
- moreActions: 'Другие действия',
210
- addToFavorites: 'Добавить в избранное',
211
- removeFromFavorites: 'Удалить из избранного',
212
- previousRecord: 'Предыдущая запись',
213
- nextRecord: 'Следующая запись',
214
- recordOf: '{{current}} из {{total}}',
215
- recordNotFound: 'Запись не найдена',
216
- recordNotFoundDescription: 'Запись, которую вы ищете, не существует или была удалена.',
217
- goBack: 'Назад',
218
- details: 'Детали',
219
- related: 'Связанные',
220
- relatedRecords: '{{count}} записей',
221
- relatedRecordOne: '{{count}} запись',
222
- noRelatedRecords: 'Связанные записи не найдены',
223
- loading: 'Загрузка...',
224
- copyToClipboard: 'Копировать в буфер обмена',
225
- copied: 'Скопировано!',
226
- deleteConfirmation: 'Вы уверены, что хотите удалить эту запись?',
227
- editRecord: 'Редактировать запись',
228
- viewAll: 'Показать все',
229
- new: 'Создать',
230
- emptyValue: '—',
231
- activity: 'Активность',
232
- editRow: 'Редактировать',
233
- deleteRow: 'Удалить',
234
- deleteRowConfirmation: 'Вы уверены, что хотите удалить эту запись?',
235
- actions: 'Действия',
236
- previousPage: 'Назад',
237
- nextPage: 'Далее',
238
- pageOf: 'Страница {{current}} из {{total}}',
239
- sortBy: 'Сортировать по',
240
- filterPlaceholder: 'Фильтр...',
241
- highlightFields: 'Ключевые поля',
242
- // Comments
243
- comments: 'Комментарии',
244
- searchComments: 'Поиск комментариев…',
245
- addCommentPlaceholder: 'Добавить комментарий… (Ctrl+Enter для отправки)',
246
- noMatchingComments: 'Нет совпадающих комментариев',
247
- noCommentsYet: 'Комментариев пока нет',
248
- pinned: 'Закреплено',
249
- pin: 'Закрепить',
250
- unpin: 'Открепить',
251
- justNow: 'только что',
252
- minutesAgo: '{{count}} мин. назад',
253
- hoursAgo: '{{count}} ч. назад',
254
- daysAgo: '{{count}} дн. назад',
255
- // Attachments
256
- dropFilesToUpload: 'Перетащите файлы сюда или нажмите для загрузки',
257
- attachmentCount: '{{count}} вложение',
258
- attachmentCountPlural: '{{count}} вложений',
259
- removeAttachment: 'Удалить вложение',
260
- // Diff
261
- unifiedDiff: 'Единое представление',
262
- sideBySideDiff: 'Параллельное представление',
263
- noChanges: 'Нет изменений',
264
- previousVersion: 'Предыдущая',
265
- currentVersion: 'Текущая',
266
- // Discussion
267
- discussion: 'Обсуждение',
268
- showDiscussion: 'Показать обсуждение ({{count}})',
269
- hideDiscussion: 'Скрыть обсуждение',
270
- // Rich text editor
271
- bold: 'Жирный (Ctrl+B)',
272
- italic: 'Курсив (Ctrl+I)',
273
- listFormat: 'Список',
274
- inlineCode: 'Строчный код',
275
- mentionSomeone: 'Упомянуть кого-то',
276
- preview: 'Предпросмотр',
277
- submitComment: 'Отправить (Ctrl+Enter)',
278
- sendComment: 'Отправить',
279
- writeComment: 'Написать комментарий…',
280
- // Subscription
281
- subscribedTooltip: 'Подписаны — нажмите для отписки',
282
- unsubscribedTooltip: 'Подписаться на уведомления',
283
- // Navigation
284
- firstRecord: 'Первая запись (Home)',
285
- previousRecordKey: 'Предыдущая запись (←)',
286
- nextRecordKey: 'Следующая запись (→)',
287
- lastRecord: 'Последняя запись (End)',
288
- noRecords: 'Нет записей',
289
- searchWhileNavigating: 'Поиск при навигации',
290
- searchRecords: 'Поиск записей…',
291
- // Activity timeline
292
- allActivity: 'Вся активность',
293
- commentsOnly: 'Только комментарии',
294
- fieldChangesFilter: 'Изменения полей',
295
- tasksOnly: 'Только задачи',
296
- leaveCommentPlaceholder: 'Оставить комментарий… (Ctrl+Enter для отправки)',
297
- noActivity: 'Нет зарегистрированной активности',
298
- loadMore: 'Загрузить ещё',
299
- edited: '(изменено)',
300
- via: 'через {{source}}',
301
- // Replies
302
- replyCount: '{{count}} ответ',
303
- replyCountPlural: '{{count}} ответов',
304
- replyPlaceholder: 'Ответить…',
305
- filterActivity: 'Фильтр активности',
306
- openDiscussion: 'Открыть панель обсуждения',
307
- closeDiscussion: 'Закрыть панель обсуждения',
308
- subscribeAriaLabel: 'Подписаться на уведомления',
309
- unsubscribeAriaLabel: 'Отписаться от уведомлений',
310
- clearSearch: 'Очистить поиск',
337
+ back: "Назад",
338
+ edit: "Редактировать",
339
+ editInline: "Редактировать",
340
+ save: "Сохранить",
341
+ saveChanges: "Сохранить изменения",
342
+ editFieldsInline: "Редактировать поля",
343
+ share: "Поделиться",
344
+ duplicate: "Дублировать",
345
+ export: "Экспорт",
346
+ viewHistory: "Просмотр истории",
347
+ delete: "Удалить",
348
+ moreActions: "Другие действия",
349
+ addToFavorites: "Добавить в избранное",
350
+ removeFromFavorites: "Удалить из избранного",
351
+ previousRecord: "Предыдущая запись",
352
+ nextRecord: "Следующая запись",
353
+ recordOf: "{{current}} из {{total}}",
354
+ recordNotFound: "Запись не найдена",
355
+ recordNotFoundDescription: "Запись, которую вы ищете, не существует или была удалена.",
356
+ goBack: "Назад",
357
+ details: "Детали",
358
+ related: "Связанные",
359
+ relatedRecords: "{{count}} записей",
360
+ relatedRecordOne: "{{count}} запись",
361
+ noRelatedRecords: "Связанные записи не найдены",
362
+ loading: "Загрузка...",
363
+ copyToClipboard: "Копировать в буфер обмена",
364
+ copied: "Скопировано!",
365
+ deleteConfirmation: "Вы уверены, что хотите удалить эту запись?",
366
+ editRecord: "Редактировать запись",
367
+ viewAll: "Показать все",
368
+ new: "Создать",
369
+ emptyValue: "—",
370
+ activity: "Активность",
371
+ editRow: "Редактировать",
372
+ deleteRow: "Удалить",
373
+ deleteRowConfirmation: "Удалить эту запись?",
374
+ actions: "Действия",
375
+ previousPage: "Назад",
376
+ nextPage: "Далее",
377
+ pageOf: "Страница {{current}} из {{total}}",
378
+ sortBy: "Сортировать по",
379
+ filterPlaceholder: "Фильтр...",
380
+ highlightFields: "Ключевые поля",
381
+ comments: "Комментарии",
382
+ searchComments: "Поиск комментариев…",
383
+ addCommentPlaceholder: "Добавить комментарий… (Ctrl+Enter для отправки)",
384
+ noMatchingComments: "Нет совпадающих комментариев",
385
+ noCommentsYet: "Комментариев пока нет",
386
+ pinned: "Закреплено",
387
+ pin: "Закрепить",
388
+ unpin: "Открепить",
389
+ justNow: "только что",
390
+ minutesAgo: "{{count}} мин. назад",
391
+ hoursAgo: "{{count}} ч. назад",
392
+ daysAgo: "{{count}} дн. назад",
393
+ dropFilesToUpload: "Перетащите файлы сюда или нажмите для загрузки",
394
+ attachmentCount: "{{count}} вложение",
395
+ attachmentCountPlural: "{{count}} вложений",
396
+ removeAttachment: "Удалить вложение",
397
+ unifiedDiff: "Единое представление",
398
+ sideBySideDiff: "Параллельное представление",
399
+ noChanges: "Нет изменений",
400
+ previousVersion: "Предыдущая",
401
+ currentVersion: "Текущая",
402
+ discussion: "Обсуждение",
403
+ showDiscussion: "Показать обсуждение ({{count}})",
404
+ hideDiscussion: "Скрыть обсуждение",
405
+ bold: "Жирный (Ctrl+B)",
406
+ italic: "Курсив (Ctrl+I)",
407
+ listFormat: "Список",
408
+ inlineCode: "Строчный код",
409
+ mentionSomeone: "Упомянуть кого-то",
410
+ preview: "Предпросмотр",
411
+ submitComment: "Отправить (Ctrl+Enter)",
412
+ sendComment: "Отправить",
413
+ writeComment: "Написать комментарий…",
414
+ subscribedTooltip: "Подписаны — нажмите для отписки",
415
+ unsubscribedTooltip: "Подписаться на уведомления",
416
+ firstRecord: "Первая запись (Home)",
417
+ previousRecordKey: "Предыдущая запись (←)",
418
+ nextRecordKey: "Следующая запись (→)",
419
+ lastRecord: "Последняя запись (End)",
420
+ noRecords: "Нет записей",
421
+ searchWhileNavigating: "Поиск при навигации",
422
+ searchRecords: "Поиск записей…",
423
+ allActivity: "Вся активность",
424
+ commentsOnly: "Только комментарии",
425
+ fieldChangesFilter: "Изменения полей",
426
+ tasksOnly: "Только задачи",
427
+ leaveCommentPlaceholder: "Оставить комментарий… (Ctrl+Enter для отправки)",
428
+ noActivity: "Нет зарегистрированной активности",
429
+ loadMore: "Загрузить ещё",
430
+ edited: "(изменено)",
431
+ via: "через {{source}}",
432
+ replyCount: "{{count}} ответ",
433
+ replyCountPlural: "{{count}} ответов",
434
+ replyPlaceholder: "Ответить…",
435
+ filterActivity: "Фильтр активности",
436
+ openDiscussion: "Открыть панель обсуждения",
437
+ closeDiscussion: "Закрыть панель обсуждения",
438
+ subscribeAriaLabel: "Подписаться на уведомления",
439
+ unsubscribeAriaLabel: "Отписаться от уведомлений",
440
+ clearSearch: "Очистить поиск",
441
+ saving: "Сохранение…",
442
+ lockedByApproval: "Заблокировано для согласования",
443
+ lockedTooltip: "У этой записи есть ожидающий запрос на согласование; редактирование заблокировано",
444
+ cancelApproval: "Отменить согласование",
445
+ cancelApprovalInFlight: "Отмена…",
446
+ cancelApprovalTooltip: "Отмените ожидающий запрос на согласование, чтобы разблокировать запись",
447
+ cancelApprovalFailed: "Не удалось отменить согласование",
448
+ cancelApprovalUnavailable: "Отмена согласований не поддерживается этим источником данных",
449
+ linkCopied: "Ссылка скопирована в буфер обмена",
450
+ linkCopyFailed: "Не удалось скопировать ссылку",
451
+ cancel: "Отмена",
452
+ cancelEdit: "Отменить изменения",
453
+ sectionMoreDetails: "Подробнее",
454
+ concurrentUpdateTitle: "Эта запись была изменена другим пользователем",
455
+ concurrentUpdateDescription: "Другой пользователь сохранил более новую версию {{field}} во время вашего редактирования. Выберите, как разрешить конфликт.",
456
+ concurrentUpdateYourEdit: "Ваше изменение",
457
+ concurrentUpdateCurrentValue: "Текущее значение",
458
+ concurrentUpdateUpdatedBy: "Обновлено пользователем {{name}}",
459
+ concurrentUpdateUpdatedAt: "Обновлено {{when}}",
460
+ concurrentUpdateReload: "Загрузить текущую версию",
461
+ concurrentUpdateOverwrite: "Всё равно перезаписать",
462
+ concurrentUpdateCancel: "Отмена",
463
+ openInNewTab: "Открыть в новой вкладке",
464
+ history: "История",
465
+ deleteRowTitle: "Удалить запись",
466
+ createdBy: "Создано",
467
+ updatedBy: "Обновлено",
468
+ showEmptyRelated_one: "+ {{count}} пустое",
469
+ showEmptyRelated_other: "+ {{count}} пустых",
470
+ copyEmail: "Копировать email",
471
+ copyPhone: "Копировать телефон",
472
+ copyRecordId: "Копировать ID записи",
473
+ showEmptyFields: "Показать {{count}} пустых полей",
474
+ hideEmptyFields: "Скрыть пустые поля",
475
+ noValue: "Нет значения",
311
476
  },
312
477
  chart: {
313
- noData: 'Нет данных для графика',
314
- loading: 'Загрузка графика...',
478
+ noData: "Нет данных для графика",
479
+ loading: "Загрузка графика...",
315
480
  },
316
481
  map: {
317
- searchLocations: 'Поиск местоположений…',
318
- locationDetails: 'Детали местоположения',
319
- markersCount: '{{count}} маркеров',
320
- invalidCoordinates: '{{count}} запись с отсутствующими или недействительными координатами исключена из карты.',
321
- invalidCoordinatesPlural: '{{count}} записей с отсутствующими или недействительными координатами исключены из карты.',
482
+ searchLocations: "Поиск местоположений…",
483
+ locationDetails: "Детали местоположения",
484
+ markersCount: "{{count}} маркеров",
485
+ invalidCoordinates: "{{count}} запись с отсутствующими или недействительными координатами исключена из карты.",
486
+ invalidCoordinatesPlural: "{{count}} записей с отсутствующими или недействительными координатами исключены из карты.",
322
487
  },
323
488
  workflow: {
324
- draft: 'Черновик',
325
- active: 'Активный',
326
- paused: 'Приостановлен',
327
- completed: 'Завершён',
328
- cancelled: 'Отменён',
329
- save: 'Сохранить',
330
- publish: 'Опубликовать',
331
- addNode: 'Добавить узел',
332
- workflowFlow: 'Рабочий процесс',
333
- properties: 'Свойства',
334
- connections: 'Соединения',
335
- quickConnect: 'Быстрое соединение',
336
- fromPlaceholder: 'От...',
337
- toPlaceholder: 'К...',
338
- connect: 'Соединить',
339
- label: 'Метка',
340
- type: 'Тип',
341
- description: 'Описание',
342
- assignee: 'Ответственный',
343
- assigneeType: 'Тип ответственного',
344
- user: 'Пользователь',
345
- role: 'Роль',
346
- group: 'Группа',
347
- expression: 'Выражение',
348
- timeoutMinutes: 'Тайм-аут (минуты)',
349
- selectNodeToEdit: 'Выберите узел для редактирования его свойств',
350
- workflowTitle: 'Название рабочего процесса',
351
- newWorkflow: 'Новый рабочий процесс',
352
- outConnections: '{{count}} выходов',
353
- start: 'Начало',
354
- end: 'Конец',
355
- task: 'Задача',
356
- userTask: 'Задача пользователя',
357
- serviceTask: 'Сервисная задача',
358
- scriptTask: 'Скриптовая задача',
359
- approval: 'Одобрение',
360
- condition: 'Условие',
361
- parallelGateway: 'Параллельный шлюз',
362
- joinGateway: 'Шлюз объединения',
363
- boundaryEvent: 'Граничное событие',
364
- delay: 'Задержка',
365
- notification: 'Уведомление',
366
- webhook: 'Webhook',
367
- allowConcurrency: 'Разрешить (параллельное выполнение)',
368
- forbidConcurrency: 'Запретить (пропустить новые)',
369
- replaceConcurrency: 'Заменить (отменить текущие)',
370
- queueConcurrency: 'Очередь (выполнить после текущего)',
371
- conditionEvent: 'Условие',
372
- manualEvent: 'Ручной',
373
- webhookEvent: 'Webhook',
374
- timerEvent: 'Таймер',
375
- signalEvent: 'Сигнал',
376
- versionHistory: 'История версий',
377
- importBpmn: 'Импорт BPMN',
378
- exportBpmn: 'Экспорт BPMN',
379
- undo: 'Отменить',
380
- redo: 'Повторить',
381
- resetZoom: 'Сбросить масштаб',
489
+ draft: "Черновик",
490
+ active: "Активный",
491
+ paused: "Приостановлен",
492
+ completed: "Завершён",
493
+ cancelled: "Отменён",
494
+ save: "Сохранить",
495
+ publish: "Опубликовать",
496
+ addNode: "Добавить узел",
497
+ workflowFlow: "Рабочий процесс",
498
+ properties: "Свойства",
499
+ connections: "Соединения",
500
+ quickConnect: "Быстрое соединение",
501
+ fromPlaceholder: "От...",
502
+ toPlaceholder: "К...",
503
+ connect: "Соединить",
504
+ label: "Метка",
505
+ type: "Тип",
506
+ description: "Описание",
507
+ assignee: "Ответственный",
508
+ assigneeType: "Тип ответственного",
509
+ user: "Пользователь",
510
+ role: "Роль",
511
+ group: "Группа",
512
+ expression: "Выражение",
513
+ timeoutMinutes: "Тайм-аут (минуты)",
514
+ selectNodeToEdit: "Выберите узел для редактирования его свойств",
515
+ workflowTitle: "Название рабочего процесса",
516
+ newWorkflow: "Новый рабочий процесс",
517
+ outConnections: "{{count}} выходов",
518
+ start: "Начало",
519
+ end: "Конец",
520
+ task: "Задача",
521
+ userTask: "Задача пользователя",
522
+ serviceTask: "Сервисная задача",
523
+ scriptTask: "Скриптовая задача",
524
+ approval: "Одобрение",
525
+ condition: "Условие",
526
+ parallelGateway: "Параллельный шлюз",
527
+ joinGateway: "Шлюз объединения",
528
+ boundaryEvent: "Граничное событие",
529
+ delay: "Задержка",
530
+ notification: "Уведомление",
531
+ webhook: "Webhook",
532
+ allowConcurrency: "Разрешить (параллельное выполнение)",
533
+ forbidConcurrency: "Запретить (пропустить новые)",
534
+ replaceConcurrency: "Заменить (отменить текущие)",
535
+ queueConcurrency: "Очередь (выполнить после текущего)",
536
+ conditionEvent: "Условие",
537
+ manualEvent: "Ручной",
538
+ webhookEvent: "Webhook",
539
+ timerEvent: "Таймер",
540
+ signalEvent: "Сигнал",
541
+ versionHistory: "История версий",
542
+ importBpmn: "Импорт BPMN",
543
+ exportBpmn: "Экспорт BPMN",
544
+ undo: "Отменить",
545
+ redo: "Повторить",
546
+ resetZoom: "Сбросить масштаб",
382
547
  },
383
548
  dashboard: {
384
- addWidget: 'Добавить виджет',
385
- removeWidget: 'Удалить виджет',
386
- editLayout: 'Редактировать макет',
387
- saveLayout: 'Сохранить макет',
388
- resetLayout: 'Сбросить макет',
549
+ addWidget: "Добавить виджет",
550
+ removeWidget: "Удалить виджет",
551
+ editLayout: "Редактировать макет",
552
+ saveLayout: "Сохранить макет",
553
+ resetLayout: "Сбросить макет",
554
+ total: "Итого",
555
+ noDataAvailable: "Данные недоступны",
556
+ noDataSourceFor: "Нет источника данных для",
557
+ trend: {
558
+ vsLastQuarter: "пред. квартал",
559
+ vsLastMonth: "пред. месяц",
560
+ vsLastWeek: "пред. неделя",
561
+ vsLastYear: "пред. год",
562
+ vsYesterday: "вчера",
563
+ vsPreviousPeriod: "пред. период",
564
+ },
389
565
  },
390
566
  configPanel: {
391
- save: 'Сохранить',
392
- discard: 'Отменить',
393
- close: 'Закрыть',
394
- layout: 'Макет',
395
- columns: 'Столбцы',
396
- gap: 'Отступ',
397
- rowHeight: 'Высота строки',
398
- data: 'Данные',
399
- refreshInterval: 'Интервал обновления',
400
- appearance: 'Внешний вид',
401
- title: 'Заголовок',
402
- showDescription: 'Показать описание',
403
- theme: 'Тема',
404
- configuration: 'Конфигурация',
405
- general: 'Основные',
406
- advanced: 'Дополнительно',
567
+ save: "Сохранить",
568
+ discard: "Отменить",
569
+ close: "Закрыть",
570
+ layout: "Макет",
571
+ columns: "Столбцы",
572
+ gap: "Отступ",
573
+ rowHeight: "Высота строки",
574
+ data: "Данные",
575
+ refreshInterval: "Интервал обновления",
576
+ appearance: "Внешний вид",
577
+ title: "Заголовок",
578
+ showDescription: "Показать описание",
579
+ theme: "Тема",
580
+ configuration: "Конфигурация",
581
+ general: "Основные",
582
+ advanced: "Дополнительно",
407
583
  },
408
584
  appDesigner: {
409
- createApp: 'Create Application',
410
- editApp: 'Edit Application',
411
- basicInfo: 'Basic Info',
412
- objects: 'Objects',
413
- navigation: 'Navigation',
414
- branding: 'Branding',
415
- appName: 'App Name',
416
- appTitle: 'Title',
417
- appDescription: 'Description',
418
- appIcon: 'Icon',
419
- template: 'Template',
420
- layout: 'Layout',
421
- layoutSidebar: 'Sidebar',
422
- layoutHeader: 'Header',
423
- layoutEmpty: 'Empty',
424
- selectObjects: 'Select Objects',
425
- searchObjects: 'Search objects…',
426
- selectAll: 'Select All',
427
- deselectAll: 'Deselect All',
428
- navBuilder: 'Navigation Builder',
429
- addGroup: 'Add Group',
430
- addUrl: 'Add URL',
431
- addSeparator: 'Add Separator',
432
- noNavItems: 'No navigation items yet.',
433
- logoUrl: 'Logo URL',
434
- primaryColor: 'Primary Color',
435
- faviconUrl: 'Favicon URL',
436
- preview: 'Preview',
437
- complete: 'Complete',
438
- snakeCaseHint: 'Must be snake_case (e.g. my_app)',
439
- modeEdit: 'Edit',
440
- modePreview: 'Preview',
441
- modeCode: 'Code',
442
- addWidget: 'Add Widget',
443
- widgetProperties: 'Widget Properties',
444
- dataSource: 'Data Source',
445
- valueField: 'Value Field',
446
- aggregate: 'Aggregate',
447
- colorVariant: 'Color Variant',
448
- addComponent: 'Add Component',
449
- componentProperties: 'Component Properties',
450
- viewType: 'View Type',
451
- fields: 'Fields',
452
- toolbar: 'Toolbar',
453
- showSearch: 'Show Search',
454
- showFilters: 'Show Filters',
455
- showSort: 'Show Sort',
456
- appearance: 'Appearance',
457
- rowHeight: 'Row Height',
458
- stripedRows: 'Striped Rows',
459
- bordered: 'Bordered',
460
- livePreview: 'Live Preview',
461
- stepBasicDesc: 'Имя, заголовок и макет',
462
- stepObjectsDesc: 'Выбрать бизнес-объекты',
463
- stepNavigationDesc: 'Построить дерево навигации',
464
- stepBrandingDesc: 'Логотип, цвета и фавикон',
465
- noObjectsFound: 'Объекты не найдены.',
466
- noNavItemsHint: 'Элементов навигации пока нет. Выберите объекты на предыдущем шаге или добавьте вручную.',
467
- separator: 'Разделитель',
468
- separatorLabel: '— Разделитель —',
469
- newGroup: 'Новая группа',
470
- newLink: 'Новая ссылка',
471
- saveDraft: 'Сохранить черновик',
472
- cancelConfirmTitle: 'Отменить изменения?',
473
- cancelConfirmMessage: 'У вас есть несохранённые изменения. Вы уверены, что хотите отменить?',
474
- confirmDiscard: 'Отменить',
475
- keepEditing: 'Продолжить редактирование',
476
- navNoItems: 'Нет элементов навигации. Нажмите кнопки выше, чтобы добавить элементы.',
477
- navNoPreviewItems: 'Нет элементов',
478
- navLivePreview: 'Предварительный просмотр',
479
- navCollapseGroup: 'Свернуть группу',
480
- navExpandGroup: 'Развернуть группу',
481
- navAddChild: 'Добавить дочерний элемент',
482
- navMoveUp: 'Переместить вверх',
483
- navMoveDown: 'Переместить вниз',
484
- navRemove: 'Удалить',
485
- navObjectPage: 'Страница объекта',
486
- navDashboard: 'Дашборд',
487
- navPage: 'Страница',
488
- navReport: 'Отчёт',
489
- navGroup: 'Группа',
490
- navUrl: 'URL',
491
- navSeparator: 'Разделитель',
492
- navTypeObject: 'Объект',
493
- navTypeDashboard: 'Дашборд',
494
- navTypePage: 'Страница',
495
- navTypeReport: 'Отчёт',
496
- navTypeUrl: 'URL',
497
- navTypeGroup: 'Группа',
498
- navTypeSeparator: 'Разделитель',
499
- navTypeAction: 'Действие',
500
- navEditIcon: 'Изменить иконку',
501
- navToggleVisible: 'Переключить видимость',
502
- navHidden: 'Скрыто',
503
- navExportSchema: 'Экспорт JSON',
504
- navImportSchema: 'Импорт JSON',
505
- navExportSuccess: 'Структура навигации экспортирована',
506
- navImportSuccess: 'Структура навигации импортирована',
507
- navImportError: 'Недопустимый JSON навигации',
508
- navIconPlaceholder: 'Имя иконки (напр. Users)',
509
- dashboardEditor: 'Редактор панели',
510
- noWidgets: 'Нет виджетов. Нажмите кнопку выше, чтобы добавить.',
511
- widgetLayoutSize: 'Размер макета',
512
- widgetWidth: 'Ширина',
513
- widgetHeight: 'Высота',
514
- dashboardPreview: 'Предпросмотр панели',
515
- noWidgetsPreview: 'Нет виджетов для предпросмотра',
516
- pageCanvasEditor: 'Редактор холста страницы',
517
- emptyPage: 'Пустая страница. Нажмите кнопку выше, чтобы добавить компонент.',
518
- pagePreview: 'Предпросмотр страницы',
519
- noComponentsPreview: 'Нет компонентов для предпросмотра',
520
- modePage: 'Страница',
521
- modeDashboard: 'Панель',
522
- undo: 'Отменить',
523
- redo: 'Повторить',
524
- brandingEditor: 'Редактор бренда',
525
- brandingExport: 'Экспорт JSON',
526
- brandingImport: 'Импорт JSON',
527
- brandingPreview: 'Предпросмотр',
528
- brandingSampleButton: 'Пример кнопки',
529
- brandingSampleText: 'Так будет выглядеть тема вашего бренда.',
530
- colorPalette: 'Палитра цветов',
531
- fontFamily: 'Шрифт',
532
- fontDefault: 'По умолчанию (Системный)',
533
- modeLight: 'Светлая',
534
- modeDark: 'Тёмная',
535
- mobilePreview: 'Мобильный предпросмотр',
585
+ createApp: "Создать приложение",
586
+ editApp: "Редактировать приложение",
587
+ basicInfo: "Основная информация",
588
+ objects: "Объекты",
589
+ navigation: "Навигация",
590
+ branding: "Брендинг",
591
+ appName: "Название приложения",
592
+ appTitle: "Заголовок",
593
+ appDescription: "Описание",
594
+ appIcon: "Значок",
595
+ template: "Шаблон",
596
+ layout: "Макет",
597
+ layoutSidebar: "Боковая панель",
598
+ layoutHeader: "Заголовок",
599
+ layoutEmpty: "Пусто",
600
+ selectObjects: "Выбрать объекты",
601
+ searchObjects: "Поиск объектов…",
602
+ selectAll: "Выбрать все",
603
+ deselectAll: "Снять все",
604
+ navBuilder: "Конструктор навигации",
605
+ addGroup: "Добавить группу",
606
+ addUrl: "Добавить URL",
607
+ addSeparator: "Добавить разделитель",
608
+ noNavItems: "Элементов навигации пока нет.",
609
+ logoUrl: "Logo URL",
610
+ primaryColor: "Основной цвет",
611
+ faviconUrl: "Favicon URL",
612
+ preview: "Предпросмотр",
613
+ complete: "Завершить",
614
+ snakeCaseHint: "Must be snake_case (e.g. my_app)",
615
+ modeEdit: "Редактировать",
616
+ modePreview: "Предпросмотр",
617
+ modeCode: "Код",
618
+ addWidget: "Добавить виджет",
619
+ widgetProperties: "Свойства виджета",
620
+ dataSource: "Источник данных",
621
+ valueField: "Поле значения",
622
+ aggregate: "Агрегат",
623
+ colorVariant: "Вариант цвета",
624
+ addComponent: "Добавить компонент",
625
+ componentProperties: "Свойства компонента",
626
+ viewType: "Тип представления",
627
+ fields: "Поля",
628
+ toolbar: "Панель инструментов",
629
+ showSearch: "Показать поиск",
630
+ showFilters: "Показать фильтры",
631
+ showSort: "Показать сортировку",
632
+ appearance: "Внешний вид",
633
+ rowHeight: "Высота строки",
634
+ stripedRows: "Чередующиеся строки",
635
+ bordered: "С рамкой",
636
+ livePreview: "Предпросмотр в реальном времени",
637
+ stepBasicDesc: "Имя, заголовок и макет",
638
+ stepObjectsDesc: "Выбрать бизнес-объекты",
639
+ stepNavigationDesc: "Построить дерево навигации",
640
+ stepBrandingDesc: "Логотип, цвета и фавикон",
641
+ noObjectsFound: "Объекты не найдены.",
642
+ noNavItemsHint: "Элементов навигации пока нет. Выберите объекты на предыдущем шаге или добавьте вручную.",
643
+ separator: "Разделитель",
644
+ separatorLabel: "— Разделитель —",
645
+ newGroup: "Новая группа",
646
+ newLink: "Новая ссылка",
647
+ saveDraft: "Сохранить черновик",
648
+ cancelConfirmTitle: "Отменить изменения?",
649
+ cancelConfirmMessage: "У вас есть несохранённые изменения. Вы уверены, что хотите отменить?",
650
+ confirmDiscard: "Отменить",
651
+ keepEditing: "Продолжить редактирование",
652
+ navNoItems: "Нет элементов навигации. Нажмите кнопки выше, чтобы добавить элементы.",
653
+ navNoPreviewItems: "Нет элементов",
654
+ navLivePreview: "Предварительный просмотр",
655
+ navCollapseGroup: "Свернуть группу",
656
+ navExpandGroup: "Развернуть группу",
657
+ navAddChild: "Добавить дочерний элемент",
658
+ navMoveUp: "Переместить вверх",
659
+ navMoveDown: "Переместить вниз",
660
+ navRemove: "Удалить",
661
+ navObjectPage: "Страница объекта",
662
+ navDashboard: "Дашборд",
663
+ navPage: "Страница",
664
+ navReport: "Отчёт",
665
+ navGroup: "Группа",
666
+ navUrl: "URL",
667
+ navSeparator: "Разделитель",
668
+ navTypeObject: "Объект",
669
+ navTypeDashboard: "Панель",
670
+ navTypePage: "Страница",
671
+ navTypeReport: "Отчёт",
672
+ navTypeUrl: "URL",
673
+ navTypeGroup: "Группа",
674
+ navTypeSeparator: "Разделитель",
675
+ navTypeAction: "Действие",
676
+ navEditIcon: "Редактировать значок",
677
+ navToggleVisible: "Переключить видимость",
678
+ navHidden: "Скрыто",
679
+ navExportSchema: "Экспорт JSON",
680
+ navImportSchema: "Импорт JSON",
681
+ navExportSuccess: "Схема навигации экспортирована",
682
+ navImportSuccess: "Схема навигации импортирована",
683
+ navImportError: "Недействительный JSON навигации",
684
+ navIconPlaceholder: "Имя значка (например, Users)",
685
+ dashboardEditor: "Редактор панели",
686
+ noWidgets: "Нет виджетов. Нажмите кнопку выше для добавления.",
687
+ widgetLayoutSize: "Размер макета",
688
+ widgetWidth: "Ширина",
689
+ widgetHeight: "Высота",
690
+ dashboardPreview: "Предпросмотр панели",
691
+ noWidgetsPreview: "Нет виджетов для предпросмотра",
692
+ pageCanvasEditor: "Редактор холста страницы",
693
+ emptyPage: "Пустая страница. Нажмите кнопку выше для добавления компонента.",
694
+ pagePreview: "Предпросмотр страницы",
695
+ noComponentsPreview: "Нет компонентов для предпросмотра",
696
+ modePage: "Страница",
697
+ modeDashboard: "Панель",
698
+ undo: "Отменить",
699
+ redo: "Повторить",
700
+ brandingEditor: "Редактор брендинга",
701
+ brandingExport: "Экспорт JSON",
702
+ brandingImport: "Импорт JSON",
703
+ brandingPreview: "Предпросмотр",
704
+ brandingSampleButton: "Пример кнопки",
705
+ brandingSampleText: "Так будет выглядеть ваша тема бренда.",
706
+ colorPalette: "Цветовая палитра",
707
+ fontFamily: "Шрифт",
708
+ fontDefault: "По умолчанию (системный)",
709
+ modeLight: "Светлая",
710
+ modeDark: "Тёмная",
711
+ mobilePreview: "Предпросмотр мобильной версии",
536
712
  objectManager: {
537
- title: 'Менеджер объектов',
538
- addObject: 'Новый объект',
539
- searchPlaceholder: 'Поиск объектов…',
540
- noObjects: 'Объекты не найдены.',
541
- objectName: 'Имя API',
542
- objectLabel: 'Метка',
543
- pluralLabel: 'Метка (мн. число)',
544
- icon: 'Иконка',
545
- selectIcon: 'Выбрать иконку…',
546
- group: 'Группа',
547
- noGroup: 'Без группы',
548
- sortOrder: 'Порядок сортировки',
549
- enabled: 'Включён',
550
- relationships: 'Связи',
551
- systemBadge: 'Системный',
552
- fieldCount: '{{count}} полей',
553
- ungrouped: 'Без группы',
554
- deleteConfirmTitle: 'Удалить объект?',
555
- deleteConfirmMessage: 'Объект и все его поля будут удалены безвозвратно. Это действие невозможно отменить.',
713
+ title: "Менеджер объектов",
714
+ addObject: "Новый объект",
715
+ searchPlaceholder: "Поиск объектов…",
716
+ noObjects: "Объекты не найдены.",
717
+ objectName: "API-имя",
718
+ objectLabel: "Метка",
719
+ pluralLabel: "Метка (мн. ч.)",
720
+ icon: "Значок",
721
+ selectIcon: "Выбрать значок…",
722
+ group: "Группа",
723
+ noGroup: "Без группы",
724
+ sortOrder: "Порядок сортировки",
725
+ enabled: "Включено",
726
+ relationships: "Связи",
727
+ systemBadge: "Система",
728
+ fieldCount: "{{count}} поле(й)",
729
+ ungrouped: "Без группы",
730
+ deleteConfirmTitle: "Удалить объект?",
731
+ deleteConfirmMessage: "Объект и все его поля будут удалены навсегда. Это действие нельзя отменить.",
556
732
  },
557
733
  fieldDesigner: {
558
- title: 'Дизайнер полей',
559
- addField: 'Новое поле',
560
- searchPlaceholder: 'Поиск полей…',
561
- allTypes: 'Все типы',
562
- noFields: 'Поля не найдены.',
563
- fieldName: 'Имя API',
564
- fieldLabel: 'Метка',
565
- fieldType: 'Тип',
566
- fieldGroup: 'Группа',
567
- description: 'Описание',
568
- required: 'Обязательное',
569
- unique: 'Уникальное',
570
- readOnly: 'Только чтение',
571
- hidden: 'Скрытое',
572
- indexed: 'Индексированное',
573
- externalId: 'Внешний ID',
574
- trackHistory: 'Отслеживание истории',
575
- defaultValue: 'Значение по умолчанию',
576
- placeholder: 'Подсказка',
577
- referenceTo: 'Ссылка на',
578
- formula: 'Формула',
579
- options: 'Варианты',
580
- addOption: 'Добавить вариант',
581
- validationRules: 'Правила валидации',
582
- addRule: 'Добавить правило',
583
- systemBadge: 'Системное',
584
- ungrouped: 'Общее',
585
- deleteConfirmTitle: 'Удалить поле?',
586
- deleteConfirmMessage: 'Поле будет удалено безвозвратно. Существующие данные будут потеряны.',
734
+ title: "Конструктор полей",
735
+ addField: "Новое поле",
736
+ searchPlaceholder: "Поиск полей…",
737
+ allTypes: "Все типы",
738
+ noFields: "Поля не найдены.",
739
+ fieldName: "API-имя",
740
+ fieldLabel: "Метка",
741
+ fieldType: "Тип",
742
+ fieldGroup: "Группа",
743
+ description: "Описание",
744
+ required: "Обязательно",
745
+ unique: "Уникальное",
746
+ readOnly: "Только чтение",
747
+ hidden: "Скрытое",
748
+ indexed: "Индексированное",
749
+ externalId: "Внешний ID",
750
+ trackHistory: "Отслеживать историю",
751
+ defaultValue: "Значение по умолчанию",
752
+ placeholder: "Заполнитель",
753
+ referenceTo: "Ссылка на",
754
+ formula: "Формула",
755
+ options: "Параметры",
756
+ addOption: "Добавить параметр",
757
+ validationRules: "Правила валидации",
758
+ addRule: "Добавить правило",
759
+ systemBadge: "Система",
760
+ ungrouped: "Общее",
761
+ deleteConfirmTitle: "Удалить поле?",
762
+ deleteConfirmMessage: "Поле будет удалено навсегда. Существующие данные в этом поле будут потеряны.",
763
+ basicSection: "Основное",
764
+ typeSpecificSection: "Настройки типа",
765
+ advancedSection: "Дополнительно",
766
+ typeCategory: {
767
+ text: "Текст",
768
+ number: "Число",
769
+ date: "Дата и время",
770
+ choice: "Выбор",
771
+ relation: "Связь",
772
+ advanced: "Дополнительно",
773
+ },
587
774
  },
588
775
  },
589
776
  console: {
590
- title: 'Консоль ObjectStack',
591
- initializing: 'Инициализация приложения...',
777
+ title: "Консоль ObjectStack",
778
+ initializing: "Инициализация приложения...",
592
779
  breadcrumb: {
593
- dashboards: 'Панели',
594
- pages: 'Страницы',
595
- reports: 'Отчёты',
596
- system: 'Система',
780
+ dashboards: "Панели",
781
+ pages: "Страницы",
782
+ reports: "Отчёты",
783
+ system: "Система",
597
784
  },
598
785
  loadingSteps: {
599
- connecting: 'Подключение к источнику данных',
600
- loadingConfig: 'Загрузка конфигурации',
601
- preparingWorkspace: 'Подготовка рабочего пространства',
786
+ connecting: "Подключение к источнику данных",
787
+ loadingConfig: "Загрузка конфигурации",
788
+ preparingWorkspace: "Подготовка рабочего пространства",
602
789
  },
603
790
  error: {
604
- connectionFailed: 'Не удаётся подключиться к серверу',
605
- serverUnreachable: 'Сервер {{url}} недоступен.',
606
- checkServer: 'Проверьте сетевое подключение или работает ли бэкенд.',
607
- timeout: 'Время ожидания подключения истекло (10 секунд).',
791
+ connectionFailed: "Не удаётся подключиться к серверу",
792
+ serverUnreachable: "Сервер {{url}} недоступен.",
793
+ checkServer: "Проверьте сетевое подключение или работает ли бэкенд.",
794
+ timeout: "Время ожидания подключения истекло (10 секунд).",
608
795
  },
609
796
  actions: {
610
- retry: 'Повторить',
611
- retrying: 'Повтор…',
797
+ retry: "Повторить",
798
+ retrying: "Повтор…",
612
799
  },
613
800
  shortcuts: {
614
- title: 'Горячие клавиши',
615
- description: 'Краткий справочник по всем доступным горячим клавишам.',
616
- groups: { general: 'Общие', navigation: 'Навигация', dataViews: 'Представления данных', preferences: 'Настройки' },
617
- openCommandPalette: 'Открыть палитру команд',
618
- showShortcuts: 'Показать горячие клавиши',
619
- closeDialog: 'Закрыть диалог / панель',
620
- toggleSidebar: 'Переключить боковую панель',
621
- focusSearch: 'Фокус на поиске',
622
- createRecord: 'Создать новую запись',
623
- refreshData: 'Обновить данные',
624
- editRecord: 'Редактировать выбранную запись',
625
- toggleDarkMode: 'Переключить тёмный режим',
801
+ title: "Горячие клавиши",
802
+ description: "Краткий справочник по всем доступным горячим клавишам.",
803
+ groups: {
804
+ general: "Общие",
805
+ navigation: "Навигация",
806
+ dataViews: "Представления данных",
807
+ preferences: "Настройки",
808
+ },
809
+ openCommandPalette: "Открыть палитру команд",
810
+ showShortcuts: "Показать горячие клавиши",
811
+ closeDialog: "Закрыть диалог / панель",
812
+ toggleSidebar: "Переключить боковую панель",
813
+ focusSearch: "Фокус на поиске",
814
+ createRecord: "Создать новую запись",
815
+ refreshData: "Обновить данные",
816
+ editRecord: "Редактировать выбранную запись",
817
+ toggleDarkMode: "Переключить тёмный режим",
626
818
  },
627
819
  commandPalette: {
628
- placeholder: 'Введите команду или поиск...',
629
- noResults: 'Результаты не найдены.',
630
- objects: 'Объекты',
631
- dashboards: 'Панели мониторинга',
632
- pages: 'Страницы',
633
- reports: 'Отчёты',
634
- switchApp: 'Переключить приложение',
635
- current: 'Текущее',
636
- preferences: 'Настройки',
637
- lightTheme: 'Светлая тема',
638
- darkTheme: 'Тёмная тема',
639
- systemTheme: 'Системная тема',
640
- actions: 'Действия',
641
- openFullSearch: 'Открыть полную страницу поиска',
642
- createApp: 'Создать новое приложение',
820
+ placeholder: "Введите команду или поиск...",
821
+ noResults: "Результаты не найдены.",
822
+ objects: "Объекты",
823
+ dashboards: "Панели мониторинга",
824
+ pages: "Страницы",
825
+ reports: "Отчёты",
826
+ switchApp: "Переключить приложение",
827
+ current: "Текущее",
828
+ preferences: "Настройки",
829
+ lightTheme: "Светлая тема",
830
+ darkTheme: "Тёмная тема",
831
+ systemTheme: "Системная тема",
832
+ actions: "Действия",
833
+ openFullSearch: "Открыть полную страницу поиска",
834
+ createApp: "Создать новое приложение",
835
+ searching: "Поиск…",
836
+ records: "Записи",
837
+ recentRecords: "Недавно просмотренные",
643
838
  },
644
839
  errors: {
645
- somethingWentWrong: 'Что-то пошло не так',
646
- unexpectedError: 'При отображении этого представления произошла непредвиденная ошибка.',
647
- tryAgain: 'Попробовать снова',
648
- goHome: 'На главную',
649
- errorDetails: 'Подробности ошибки (только для разработки)',
840
+ somethingWentWrong: "Что-то пошло не так",
841
+ unexpectedError: "При отображении этого представления произошла непредвиденная ошибка.",
842
+ tryAgain: "Попробовать снова",
843
+ goHome: "На главную",
844
+ errorDetails: "Подробности ошибки (только для разработки)",
650
845
  },
651
846
  theme: {
652
- toggle: 'Переключить тему',
653
- light: 'Светлая',
654
- dark: 'Тёмная',
655
- system: 'Системная',
847
+ toggle: "Переключить тему",
848
+ light: "Светлая",
849
+ dark: "Тёмная",
850
+ system: "Системная",
656
851
  },
657
852
  objectView: {
658
- objectNotFound: 'Объект не найден',
659
- objectNotFoundDescription: 'Объект «{{objectName}}» не существует в текущей конфигурации.',
660
- objectNotFoundHint: 'Проверьте настройки навигации приложения или выберите другой объект на боковой панели.',
661
- allRecords: 'Все записи',
662
- exitDesignMode: 'Выйти из режима дизайна',
663
- enterDesignMode: 'Войти в режим дизайна',
664
- metadataInspector: 'Инспектор метаданных',
665
- editView: 'Редактировать представление',
666
- addView: 'Добавить представление',
667
- designTools: 'Инструменты дизайна',
668
- new: 'Создать',
669
- configureView: 'Настроить представление',
670
- closePanel: 'Закрыть панель',
671
- page: 'Страница',
672
- pageConfigHint: 'Панель инструментов, навигация и настройки оболочки представления',
673
- listConfigHint: 'Отрисовка данных, столбцы и внешний вид для этого типа списка',
674
- general: 'Общие',
675
- generalHint: 'Название, описание и тип представления',
676
- toolbar: 'Панель инструментов',
677
- toolbarHint: 'Поиск, фильтр, сортировка, группировка и переключение плотности',
678
- toolbarEnabledCount: '{{count}} из {{total}} включено',
679
- navigationSection: 'Навигация',
680
- navigationHint: 'Поведение при нажатии на строку и настройки детального представления',
681
- records: 'Записи',
682
- recordsHint: 'Режим выбора, добавление записи и встроенное редактирование',
683
- exportPrint: 'Экспорт и печать',
684
- exportPrintHint: 'Форматы экспорта, печать и отображение количества записей',
685
- showAllFields: 'Показать все',
686
- hideAllFields: 'Скрыть все',
687
- searchFields: 'Поиск полей...',
688
- title: 'Заголовок',
689
- description: 'Описание',
690
- data: 'Данные',
691
- source: 'Источник',
692
- columns: 'Столбцы',
693
- filterBy: 'Фильтр по',
694
- sortBy: 'Сортировка по',
695
- appearance: 'Внешний вид',
696
- showDescription: 'Показать описание',
697
- viewType: 'Тип представления',
698
- userFilters: 'Фильтры пользователя',
699
- enableSearch: 'Включить поиск',
700
- enableFilter: 'Включить фильтр',
701
- enableSort: 'Включить сортировку',
702
- enableHideFields: 'Включить скрытие полей',
703
- enableGroup: 'Включить группировку',
704
- enableColor: 'Включить цвет',
705
- enableDensity: 'Включить плотность',
706
- userActions: 'Действия пользователя',
707
- addRecordViaForm: 'Добавить записи через форму',
708
- advanced: 'Расширенные',
709
- allowExport: 'Разрешить экспорт',
710
- recordCount: '{{count}} записей',
711
- noDescription: 'Нет описания',
712
- none: 'Нет',
713
- columnsConfigured: '{{count}} столбцов',
714
- save: 'Сохранить',
715
- discard: 'Отменить',
716
- createView: 'Создать представление',
717
- newView: 'Новое представление',
718
- typeOptions: 'Параметры типа',
719
- groupByField: 'Поле группировки',
720
- startDateField: 'Поле даты начала',
721
- titleField: 'Поле заголовка',
722
- latitudeField: 'Поле широты',
723
- longitudeField: 'Поле долготы',
724
- imageField: 'Поле изображения',
725
- dateField: 'Поле даты',
726
- selectField: 'Выберите поле...',
727
- gridOptionsHint: 'Представление таблицы использует столбцы, настроенные выше.',
728
- groupBy: 'Группировать по',
729
- prefixField: 'Поле префикса',
730
- fields: 'Поля',
731
- fieldsVisible: '{{count}} видимых',
732
- sortsCount: '{{count}} сортировок',
733
- filtersCount: '{{count}} фильтров',
734
- endDateField: 'Поле даты окончания',
735
- color: 'Цвет',
736
- fieldTextColor: 'Цвет текста поля',
737
- rowHeight: 'Высота строки',
738
- wrapHeaders: 'Перенос заголовков',
739
- showFieldDescriptions: 'Показать описания полей',
740
- collapseAllByDefault: 'Свернуть всё по умолчанию',
741
- striped: 'Полосатые строки',
742
- bordered: 'Ячейки с границами',
743
- inlineEdit: 'Редактировать записи встроенно',
744
- addDeleteRecordsInline: 'Добавлять/удалять записи встроенно',
745
- clickIntoRecordDetails: 'Нажмите для просмотра деталей записи',
746
- navigationMode: 'Режим навигации',
747
- navigationWidth: 'Ширина навигации',
748
- navigationWidthHint: 'Доступно для режимов навигации: выдвижная панель, модальное окно и разделённый вид',
749
- openNewTab: 'Открыть в новой вкладке',
750
- openNewTabHint: 'Доступно для режимов навигации: страница и новое окно',
853
+ systemViewReadonly: 'System view defined in code - duplicate to customize.',
854
+ expandToPage: 'Open as full page',
855
+ objectNotFound: "Объект не найден",
856
+ objectNotFoundDescription: "Объект «{{objectName}}» не существует в текущей конфигурации.",
857
+ objectNotFoundHint: "Проверьте настройки навигации приложения или выберите другой объект на боковой панели.",
858
+ allRecords: "Все записи",
859
+ exitDesignMode: "Выйти из режима дизайна",
860
+ enterDesignMode: "Войти в режим дизайна",
861
+ metadataInspector: "Инспектор метаданных",
862
+ editView: "Редактировать представление",
863
+ addView: "Добавить представление",
864
+ designTools: "Инструменты дизайна",
865
+ new: "Создать",
866
+ configureView: "Настроить представление",
867
+ closePanel: "Закрыть панель",
868
+ page: "Страница",
869
+ pageConfigHint: "Панель инструментов, навигация и настройки оболочки представления",
870
+ listConfigHint: "Отрисовка данных, столбцы и внешний вид для этого типа списка",
871
+ general: "Общие",
872
+ generalHint: "Название, описание и тип представления",
873
+ toolbar: "Панель инструментов",
874
+ toolbarHint: "Поиск, фильтр, сортировка, группировка и переключение плотности",
875
+ toolbarEnabledCount: "{{count}} из {{total}} включено",
876
+ navigationSection: "Навигация",
877
+ navigationHint: "Поведение при нажатии на строку и настройки детального представления",
878
+ records: "Записи",
879
+ recordsHint: "Режим выбора, добавление записи и встроенное редактирование",
880
+ exportPrint: "Экспорт и печать",
881
+ exportPrintHint: "Форматы экспорта, печать и отображение количества записей",
882
+ showAllFields: "Показать все",
883
+ hideAllFields: "Скрыть все",
884
+ searchFields: "Поиск полей...",
885
+ title: "Заголовок",
886
+ description: "Описание",
887
+ data: "Данные",
888
+ source: "Источник",
889
+ columns: "Столбцы",
890
+ filterBy: "Фильтр по",
891
+ sortBy: "Сортировка по",
892
+ appearance: "Внешний вид",
893
+ showDescription: "Показать описание",
894
+ viewType: "Тип представления",
895
+ userFilters: "Фильтры пользователя",
896
+ enableSearch: "Включить поиск",
897
+ enableFilter: "Включить фильтр",
898
+ enableSort: "Включить сортировку",
899
+ enableHideFields: "Включить скрытие полей",
900
+ enableGroup: "Включить группировку",
901
+ enableColor: "Включить цвет",
902
+ enableDensity: "Включить плотность",
903
+ userActions: "Действия пользователя",
904
+ addRecordViaForm: "Добавить записи через форму",
905
+ advanced: "Расширенные",
906
+ allowExport: "Разрешить экспорт",
907
+ recordCount: "{{count}} записей",
908
+ noDescription: "Нет описания",
909
+ none: "Нет",
910
+ columnsConfigured: "{{count}} столбцов",
911
+ save: "Сохранить",
912
+ discard: "Отменить",
913
+ createView: "Создать представление",
914
+ newView: "Новое представление",
915
+ typeOptions: "Параметры типа",
916
+ groupByField: "Поле группировки",
917
+ startDateField: "Поле даты начала",
918
+ titleField: "Поле заголовка",
919
+ latitudeField: "Поле широты",
920
+ longitudeField: "Поле долготы",
921
+ imageField: "Поле изображения",
922
+ dateField: "Поле даты",
923
+ selectField: "Выберите поле...",
924
+ gridOptionsHint: "Представление таблицы использует столбцы, настроенные выше.",
925
+ groupBy: "Группировать по",
926
+ prefixField: "Поле префикса",
927
+ fields: "Поля",
928
+ fieldsVisible: "{{count}} видимых",
929
+ sortsCount: "{{count}} сортировок",
930
+ filtersCount: "{{count}} фильтров",
931
+ endDateField: "Поле даты окончания",
932
+ color: "Цвет",
933
+ fieldTextColor: "Цвет текста поля",
934
+ rowHeight: "Высота строки",
935
+ wrapHeaders: "Перенос заголовков",
936
+ showFieldDescriptions: "Показать описания полей",
937
+ collapseAllByDefault: "Свернуть всё по умолчанию",
938
+ striped: "Полосатые строки",
939
+ bordered: "Ячейки с границами",
940
+ inlineEdit: "Редактировать записи встроенно",
941
+ addDeleteRecordsInline: "Добавлять/удалять записи встроенно",
942
+ clickIntoRecordDetails: "Нажмите для просмотра деталей записи",
943
+ navigationMode: "Режим навигации",
944
+ navigationWidth: "Ширина навигации",
945
+ navigationWidthHint: "Доступно для режимов навигации: выдвижная панель, модальное окно и разделённый вид",
946
+ openNewTab: "Открыть в новой вкладке",
947
+ openNewTabHint: "Доступно для режимов навигации: страница и новое окно",
948
+ import: "Импорт",
949
+ importTitle: "Импорт из CSV",
950
+ importedToast: "{{count}} строк импортировано.",
951
+ importedWithSkipped: "{{ok}} строк импортировано; {{skipped}} пропущено.",
952
+ showAdvancedSettings: "Показать расширенные настройки",
953
+ showFewerSettings: "Меньше настроек",
954
+ createViewDesc: "Выберите тип представления и задайте ему имя. Все настройки можно изменить позже.",
955
+ cancel: "Отмена",
956
+ create: "Создать",
957
+ delete: "Удалить",
958
+ deleteViewTitle: "Удалить представление",
959
+ deleteViewConfirm: "Удалить представление \"{{name}}\"? Это действие нельзя отменить.",
960
+ bulkDeleteConfirm: "Удалить {{count}} выбранных записей? Это действие нельзя отменить.",
961
+ duplicateViewName: "Представление с таким именем уже существует.",
962
+ viewTypeGrid: "Таблица",
963
+ viewTypeGridDesc: "Таблица записей в стиле электронной таблицы.",
964
+ viewTypeKanban: "Канбан",
965
+ viewTypeKanbanDesc: "Карточки, сгруппированные в столбцы по полю единственного выбора.",
966
+ viewTypeCalendar: "Календарь",
967
+ viewTypeCalendarDesc: "Записи, размещённые по дате в месячном календаре.",
968
+ viewTypeGallery: "Галерея",
969
+ viewTypeGalleryDesc: "Крупные карточки изображений из поля вложений.",
970
+ viewTypeTimeline: "Временная шкала",
971
+ viewTypeTimelineDesc: "Записи вдоль горизонтальной временной оси.",
972
+ viewTypeGantt: "Гантт",
973
+ viewTypeGanttDesc: "Диаграмма Ганта с датами начала/конца и зависимостями.",
974
+ viewTypeMap: "Карта",
975
+ viewTypeMapDesc: "Географические маркеры из полей широты/долготы.",
976
+ viewTypeChart: "Диаграмма",
977
+ viewTypeChartDesc: "Агрегированные столбчатые/линейные/круговые диаграммы.",
978
+ groupByFieldHelp: "Доска Канбан группирует записи в столбцы по значениям поля.",
979
+ startDateFieldHelp: "Календарь размещает записи в ячейке, соответствующей этой дате.",
980
+ ganttStartDateFieldHelp: "Левый край каждой полосы Ганта использует эту дату.",
981
+ ganttEndDateFieldHelp: "Правый край каждой полосы Ганта использует эту дату.",
982
+ timelineDateFieldHelp: "Записи позиционируются на временной шкале по этой дате.",
983
+ latitudeFieldHelp: "Поле с широтой (только гео-поля).",
984
+ longitudeFieldHelp: "Поле с долготой (только гео-поля).",
985
+ imageFieldHelp: "Обложка галереи берётся из этого поля изображения или вложений.",
986
+ selectOption: "Выбрать...",
987
+ noEligibleFieldForType: "Нет подходящих полей этого типа. Сначала добавьте его к объекту.",
988
+ viewTypeUnavailable: "У этого объекта нет поля, которое может служить \"{{field}}\".",
989
+ viewTypeUnavailableShort: "Не поддерживается этим объектом.",
990
+ chartType: "Тип диаграммы",
991
+ chartTypeHelp: "Определяет способ отображения данных.",
992
+ chartTypeBar: "Столбчатая",
993
+ chartTypeLine: "Линейная",
994
+ chartTypePie: "Круговая",
995
+ chartTypeArea: "Областная",
996
+ chartTypeScatter: "Точечная",
997
+ xAxisField: "Поле оси X",
998
+ xAxisFieldHelp: "Категориальное или временное измерение.",
999
+ yAxisField: "Поле оси Y",
1000
+ yAxisFieldHelp: "Числовое поле для агрегации.",
1001
+ selectionMode: "Режим выбора",
1002
+ selectionNone: "Нет",
1003
+ selectionSingle: "Одиночный",
1004
+ selectionMultiple: "Множественный",
1005
+ pageSize: "Размер страницы",
1006
+ pageSizeOptions: "Варианты размера страницы",
1007
+ exportFormats: "Форматы экспорта",
1008
+ exportMaxRecords: "Макс. записей",
1009
+ exportIncludeHeaders: "Включить заголовки",
1010
+ exportFileNamePrefix: "Префикс имени файла",
1011
+ searchableFields: "Поля для поиска",
1012
+ filterableFields: "Поля для фильтрации",
1013
+ resizableColumns: "Изменяемые столбцы",
1014
+ densityCompact: "Компактный",
1015
+ densityComfortable: "Обычный",
1016
+ densitySpacious: "Просторный",
1017
+ densityMode: "Режим плотности",
1018
+ hiddenFields: "Скрытые поля",
1019
+ rowActions: "Действия строки",
1020
+ bulkActions: "Массовые действия",
1021
+ sharing: "Общий доступ",
1022
+ sharingEnabled: "Общий доступ включён",
1023
+ sharingVisibility: "Видимость",
1024
+ addRecordEnabled: "Добавление записей включено",
1025
+ addRecordPosition: "Позиция",
1026
+ addRecordMode: "Режим",
1027
+ addRecordFormView: "Представление формы",
1028
+ conditionalFormatting: "Условное форматирование",
1029
+ addRule: "Добавить правило",
1030
+ quickFilters: "Быстрые фильтры",
1031
+ addQuickFilter: "Добавить быстрый фильтр",
1032
+ ufElements: "Элементы",
1033
+ ufDropdown: "Выпадающий список",
1034
+ ufTabs: "Вкладки",
1035
+ ufToggle: "Переключатель",
1036
+ ufAddField: "+ Добавить поле фильтра...",
1037
+ ufNoFields: "Поля недоступны",
1038
+ ufAddTab: "+ Добавить вкладку",
1039
+ ufTabLabel: "Метка",
1040
+ ufShowAllRecords: "Показать вкладку \"Все записи\"",
1041
+ ufAllowAddTab: "Разрешить добавление вкладок",
1042
+ showRecordCount: "Показать количество записей",
1043
+ allowPrinting: "Разрешить печать",
1044
+ virtualScroll: "Виртуальная прокрутка",
1045
+ emptyStateTitle: "Заголовок пустого состояния",
1046
+ emptyStateMessage: "Сообщение пустого состояния",
1047
+ emptyStateIcon: "Значок пустого состояния",
1048
+ ariaLabel: "Метка ARIA",
1049
+ ariaDescribedBy: "Описано ARIA",
1050
+ ariaLive: "ARIA Live",
1051
+ accessibility: "Доступность",
1052
+ viewTabs: "Вкладки представлений",
751
1053
  },
752
1054
  localeSwitcher: {
753
- label: 'Язык',
1055
+ label: "Язык",
1056
+ },
1057
+ search: "Поиск…",
1058
+ nav: {
1059
+ pinItem: "Закрепить {{name}}",
1060
+ unpinItem: "Открепить {{name}}",
1061
+ dragToReorder: "Перетащите для изменения порядка",
1062
+ favorites: "Избранное",
754
1063
  },
755
1064
  },
756
1065
  auth: {
757
1066
  login: {
758
- title: 'Войдите в свой аккаунт',
759
- description: 'Введите электронную почту и пароль для продолжения',
760
- emailLabel: 'Электронная почта',
761
- emailPlaceholder: 'name@example.com',
762
- passwordLabel: 'Пароль',
763
- passwordPlaceholder: 'Введите пароль',
764
- forgotPasswordText: 'Забыли пароль?',
765
- submitButton: 'Войти',
766
- submittingButton: 'Вход...',
767
- noAccountText: 'Нет аккаунта?',
768
- signUpText: 'Зарегистрироваться',
1067
+ title: "Войдите в свой аккаунт",
1068
+ description: "Введите электронную почту и пароль для продолжения",
1069
+ emailLabel: "Электронная почта",
1070
+ emailPlaceholder: "name@example.com",
1071
+ passwordLabel: "Пароль",
1072
+ passwordPlaceholder: "Введите пароль",
1073
+ forgotPasswordText: "Забыли пароль?",
1074
+ submitButton: "Войти",
1075
+ submittingButton: "Вход...",
1076
+ noAccountText: "Нет аккаунта?",
1077
+ signUpText: "Зарегистрироваться",
1078
+ errors: {
1079
+ invalidCredentials: "Неверный email или пароль. Попробуйте ещё раз.",
1080
+ emailNotVerified: "Пожалуйста, подтвердите email перед входом.",
1081
+ },
769
1082
  },
770
1083
  register: {
771
- title: 'Создать аккаунт',
772
- description: 'Введите свои данные, чтобы начать',
773
- nameLabel: 'Имя',
774
- namePlaceholder: 'Иван Иванов',
775
- emailLabel: 'Электронная почта',
776
- emailPlaceholder: 'name@example.com',
777
- passwordLabel: 'Пароль',
778
- passwordPlaceholder: 'Создайте пароль (мин. 8 символов)',
779
- confirmPasswordLabel: 'Подтвердите пароль',
780
- confirmPasswordPlaceholder: 'Подтвердите свой пароль',
781
- passwordMismatchError: 'Пароли не совпадают',
782
- passwordTooShortError: 'Пароль должен содержать не менее 8 символов',
783
- submitButton: 'Создать аккаунт',
784
- submittingButton: 'Создание аккаунта...',
785
- hasAccountText: 'Уже есть аккаунт?',
786
- signInText: 'Войти',
1084
+ title: "Создать аккаунт",
1085
+ description: "Введите свои данные, чтобы начать",
1086
+ nameLabel: "Имя",
1087
+ namePlaceholder: "Иван Иванов",
1088
+ emailLabel: "Электронная почта",
1089
+ emailPlaceholder: "name@example.com",
1090
+ passwordLabel: "Пароль",
1091
+ passwordPlaceholder: "Создайте пароль (мин. 8 символов)",
1092
+ confirmPasswordLabel: "Подтвердите пароль",
1093
+ confirmPasswordPlaceholder: "Подтвердите свой пароль",
1094
+ passwordMismatchError: "Пароли не совпадают",
1095
+ passwordTooShortError: "Пароль должен содержать не менее 8 символов",
1096
+ submitButton: "Создать аккаунт",
1097
+ submittingButton: "Создание аккаунта...",
1098
+ hasAccountText: "Уже есть аккаунт?",
1099
+ signInText: "Войти",
1100
+ errors: {
1101
+ userExists: "Аккаунт с таким email уже существует. Попробуйте войти.",
1102
+ },
1103
+ verifyInbox: {
1104
+ title: "Проверьте входящие",
1105
+ description: "Мы отправили ссылку подтверждения на {{email}}. Нажмите на ссылку для активации аккаунта.",
1106
+ resend: "Отправить письмо повторно",
1107
+ resending: "Отправка…",
1108
+ resent: "Письмо с подтверждением отправлено.",
1109
+ backToSignIn: "Вернуться к входу",
1110
+ },
787
1111
  },
788
1112
  forgotPassword: {
789
- title: 'Сбросить пароль',
790
- description: 'Введите адрес электронной почты, и мы отправим вам ссылку для сброса пароля',
791
- emailLabel: 'Электронная почта',
792
- emailPlaceholder: 'name@example.com',
793
- submitButton: 'Отправить ссылку для сброса',
794
- submittingButton: 'Отправка...',
795
- successTitle: 'Проверьте почту',
796
- successDescription: 'Мы отправили ссылку для сброса пароля на {{email}}. Пожалуйста, проверьте свою почту.',
797
- backToSignInText: 'Вернуться к входу',
798
- rememberPasswordText: 'Помните свой пароль?',
799
- signInText: 'Войти',
1113
+ title: "Сбросить пароль",
1114
+ description: "Введите адрес электронной почты, и мы отправим вам ссылку для сброса пароля",
1115
+ emailLabel: "Электронная почта",
1116
+ emailPlaceholder: "name@example.com",
1117
+ submitButton: "Отправить ссылку для сброса",
1118
+ submittingButton: "Отправка...",
1119
+ successTitle: "Проверьте почту",
1120
+ successDescription: "Мы отправили ссылку для сброса пароля на {{email}}. Пожалуйста, проверьте свою почту.",
1121
+ backToSignInText: "Вернуться к входу",
1122
+ rememberPasswordText: "Помните свой пароль?",
1123
+ signInText: "Войти",
1124
+ },
1125
+ resetPassword: {
1126
+ title: "Установить новый пароль",
1127
+ description: "Выберите пароль, который вы ещё не использовали.",
1128
+ newPassword: "Новый пароль",
1129
+ confirmPassword: "Подтвердить пароль",
1130
+ submit: "Обновить пароль",
1131
+ submitting: "Обновление…",
1132
+ success: "Пароль обновлён",
1133
+ failed: "Сброс не удался",
1134
+ invalidToken: "Эта ссылка для сброса недействительна или истекла.",
1135
+ missingToken: "Ссылка для сброса отсутствует или истекла",
1136
+ passwordsMismatch: "Пароли не совпадают",
1137
+ requestNewLink: "Запросить новую ссылку",
1138
+ },
1139
+ verifyEmail: {
1140
+ title: "Подтвердить адрес email",
1141
+ description: "Мы отправили ссылку подтверждения на ваш email. Нажмите на ссылку для подтверждения аккаунта.",
1142
+ sentTo: "Отправлено на:",
1143
+ verifyingTitle: "Проверка…",
1144
+ verifyingDescription: "Подтверждаем ваш email. Пожалуйста, подождите.",
1145
+ successTitle: "Email подтверждён",
1146
+ successDescription: "Ваш email подтверждён. Теперь вы можете войти.",
1147
+ errorTitle: "Подтверждение не удалось",
1148
+ errorDescription: "Подтверждение не удалось. Запросите новую ссылку.",
1149
+ missingToken: "В ссылке подтверждения отсутствует токен.",
1150
+ emailMissing: "Email не указан",
1151
+ resendButton: "Отправить письмо повторно",
1152
+ resending: "Отправка…",
1153
+ resent: "Письмо отправлено! Проверьте входящие",
1154
+ resentSuccess: "Письмо с подтверждением отправлено!",
1155
+ resentDescription: "Проверьте входящие и нажмите на ссылку подтверждения.",
1156
+ resendFailed: "Не удаётся отправить письмо повторно",
1157
+ signInLink: "Перейти ко входу",
1158
+ backToSignIn: "Вернуться к входу",
1159
+ backToLogin: "Вернуться ко входу",
1160
+ checkSpam: "Не получили письмо? Проверьте папку \"Спам\" или обратитесь в поддержку.",
1161
+ or: "Или",
1162
+ },
1163
+ setup: {
1164
+ welcomeTitle: "Добро пожаловать в ObjectStack",
1165
+ description: "Создайте первый аккаунт владельца для завершения настройки.",
1166
+ yourName: "Ваше имя",
1167
+ orgName: "Название организации",
1168
+ orgNamePlaceholder: "ООО Пример",
1169
+ emailLabel: "Email",
1170
+ emailPlaceholder: "name@example.ru",
1171
+ passwordLabel: "Пароль",
1172
+ passwordHint: "Не менее 8 символов",
1173
+ submit: "Создать аккаунт владельца",
1174
+ submitting: "Настройка…",
1175
+ failed: "Настройка не удалась",
1176
+ },
1177
+ device: {
1178
+ title: "Авторизовать новое устройство",
1179
+ subtitle: "Одобрите это устройство для входа как {{email}}.",
1180
+ userCodeLabel: "Код устройства",
1181
+ requesterLabel: "Запрос на подключение от",
1182
+ approveWarning: "Подтверждайте только если вы сами только что начали это подключение. После подтверждения эта среда выполнения получит доступ к приватным пакетам вашей организации.",
1183
+ loggedInAs: "Вошли как {{email}}",
1184
+ approve: "Одобрить устройство",
1185
+ approving: "Одобрение…",
1186
+ approvedTitle: "Устройство авторизовано",
1187
+ approvedDescription: "Можете вернуться к устройству — оно должно войти в систему.",
1188
+ approveSuccess: "Устройство авторизовано",
1189
+ approveSuccessDescription: "Можете закрыть это окно.",
1190
+ approveFailed: "Одобрение не удалось",
1191
+ deny: "Отклонить запрос",
1192
+ denying: "Отклонение…",
1193
+ deniedTitle: "Доступ запрещён",
1194
+ deniedDescription: "Устройству не будет предоставлен доступ.",
1195
+ denyFailed: "Не удалось отклонить запрос",
1196
+ invalidTitle: "Недействительная ссылка устройства",
1197
+ invalidDescription: "В URL не указан код устройства.",
1198
+ loading: "Загрузка…",
1199
+ cancel: "Отмена",
1200
+ },
1201
+ shell: {
1202
+ tenantHostHint: "Вы входите в это рабочее пространство",
800
1203
  },
801
1204
  },
802
1205
  errors: {
803
- networkError: 'Ошибка сети. Проверьте подключение к интернету.',
804
- serverError: 'Ошибка сервера. Попробуйте позже.',
805
- notFound: 'Ресурс не найден.',
806
- unauthorized: 'У вас нет прав для выполнения этого действия.',
807
- forbidden: 'Доступ запрещён.',
808
- timeout: 'Время ожидания истекло. Попробуйте снова.',
809
- unknown: 'Произошла непредвиденная ошибка.',
1206
+ networkError: "Ошибка сети. Проверьте подключение к интернету.",
1207
+ serverError: "Ошибка сервера. Попробуйте позже.",
1208
+ notFound: "Ресурс не найден.",
1209
+ unauthorized: "У вас нет прав для выполнения этого действия.",
1210
+ forbidden: "Доступ запрещён.",
1211
+ timeout: "Время ожидания истекло. Попробуйте снова.",
1212
+ unknown: "Произошла непредвиденная ошибка.",
810
1213
  },
811
1214
  workspace: {
812
- label: 'Рабочие пространства',
813
- default: 'Моё рабочее пространство',
814
- switch: 'Переключить рабочее пространство',
815
- create: 'Создать рабочее пространство',
816
- createTitle: 'Создать рабочее пространство',
817
- createDescription: 'Рабочее пространство — это общее место для совместной работы вашей команды.',
818
- createButton: 'Создать рабочее пространство',
819
- nameLabel: 'Имя рабочего пространства',
820
- namePlaceholder: 'например, Acme Inc',
821
- slugLabel: 'URL-слаг',
822
- slugHint: 'Используется в URL. Только строчные буквы, цифры и дефисы.',
823
- invite: 'Пригласить участника',
824
- members: 'Участники',
825
- settings: 'Настройки рабочего пространства',
1215
+ label: "Рабочие пространства",
1216
+ default: "Моё рабочее пространство",
1217
+ switch: "Переключить рабочее пространство",
1218
+ create: "Создать рабочее пространство",
1219
+ createTitle: "Создать рабочее пространство",
1220
+ createDescription: "Рабочее пространство — это общее место для совместной работы вашей команды.",
1221
+ createButton: "Создать рабочее пространство",
1222
+ nameLabel: "Имя рабочего пространства",
1223
+ namePlaceholder: "например, Acme Inc",
1224
+ slugLabel: "URL-слаг",
1225
+ slugHint: "Используется в URL. Только строчные буквы, цифры и дефисы.",
1226
+ invite: "Пригласить участника",
1227
+ members: "Участники",
1228
+ settings: "Настройки рабочего пространства",
1229
+ },
1230
+ help: {
1231
+ appDocs: 'Документация приложения',
1232
+ allDocs: 'Вся документация',
1233
+ onlineDocs: 'Онлайн-документация',
826
1234
  },
827
1235
  sidebar: {
828
- settings: 'Настройки',
829
- help: 'Помощь',
830
- helpTooltip: 'Помощь и документация',
831
- activityFeed: 'Лента активности',
1236
+ settings: "Настройки",
1237
+ help: "Помощь",
1238
+ helpTooltip: "Помощь и документация",
1239
+ activityFeed: "Лента активности",
1240
+ notifications: "Уведомления",
1241
+ approvals: "Согласования",
1242
+ inbox: "Входящие",
1243
+ inboxAriaLabel: "Открыть входящие",
1244
+ area: "Область",
1245
+ scope: "Область",
1246
+ recent: "Недавние",
1247
+ favorites: "Избранное",
1248
+ starred: "Отмеченные",
1249
+ removeFromFavorites: "Убрать {{name}} из избранного",
1250
+ },
1251
+ topbar: {
1252
+ aiAssistant: "ИИ-ассистент",
832
1253
  },
833
1254
  home: {
834
- title: 'Главная',
835
- subtitle: 'Панель вашего рабочего пространства',
836
- nav: 'Главная',
837
- allApps: 'Все приложения',
838
- loading: 'Загрузка рабочего пространства...',
839
- recent: 'Недавние',
840
- starred: 'Избранные',
841
- welcome: 'Добро пожаловать в ObjectUI',
842
- welcomeDescription: 'Начните с создания вашего первого приложения или настройки системы.',
843
- createFirstApp: 'Создайте первое приложение',
844
- systemSettings: 'Системные настройки',
845
- browseMarketplace: 'Обзор маркетплейса приложений',
1255
+ title: "Главная",
1256
+ subtitle: "Панель вашего рабочего пространства",
1257
+ nav: "Главная",
1258
+ allApps: "Все приложения",
1259
+ loading: "Загрузка рабочего пространства...",
1260
+ recent: "Недавние",
1261
+ starred: "Избранные",
1262
+ welcome: "Добро пожаловать в ObjectUI",
1263
+ welcomeDescription: "Начните с создания вашего первого приложения или настройки системы.",
1264
+ createFirstApp: "Создайте первое приложение",
1265
+ systemSettings: "Системные настройки",
1266
+ browseMarketplace: "Обзор маркетплейса приложений",
846
1267
  quickActions: {
847
- title: 'Быстрые действия',
848
- createApp: 'Создать приложение',
849
- createAppDesc: 'Начните с нового приложения',
850
- manageObjects: 'Управление объектами',
851
- manageObjectsDesc: 'Настройте модели данных',
852
- systemSettings: 'Системные настройки',
853
- systemSettingsDesc: 'Настройте рабочее пространство',
1268
+ title: "Быстрые действия",
1269
+ createApp: "Создать приложение",
1270
+ createAppDesc: "Начните с нового приложения",
1271
+ manageObjects: "Управление объектами",
1272
+ manageObjectsDesc: "Настройте модели данных",
1273
+ systemSettings: "Системные настройки",
1274
+ systemSettingsDesc: "Настройте рабочее пространство",
854
1275
  },
855
1276
  appCard: {
856
- noDescription: 'Без описания',
857
- default: 'По умолчанию',
1277
+ noDescription: "Без описания",
1278
+ default: "По умолчанию",
1279
+ },
1280
+ greetingMorning: "Доброе утро",
1281
+ greetingAfternoon: "Добрый день",
1282
+ greetingEvening: "Добрый вечер",
1283
+ greetingNight: "Ночная смена",
1284
+ heroTagline: "Продолжите с того места, где остановились, или откройте что-то новое.",
1285
+ open: "Открыть",
1286
+ stats: {
1287
+ apps: "Приложения",
1288
+ starred: "Отмеченные",
1289
+ recent: "Недавние",
1290
+ },
1291
+ recentApps: {
1292
+ title: "Недавно открытые",
1293
+ itemType: {
1294
+ object: "Объект",
1295
+ dashboard: "Панель",
1296
+ page: "Страница",
1297
+ record: "Запись",
1298
+ },
1299
+ },
1300
+ starredApps: {
1301
+ title: "Отмеченные",
1302
+ },
1303
+ gettingStarted: {
1304
+ title: "Настройка главной",
1305
+ description: "Отметьте приложение как избранное, чтобы закрепить его здесь и открывать одним кликом. Всё, что вы открываете, автоматически появляется в \"Недавно открытых\".",
1306
+ cta: "Просмотреть все приложения",
858
1307
  },
859
1308
  },
860
1309
  layout: {
861
1310
  appSwitcher: {
862
- home: 'Home',
863
- addApp: 'Add App',
864
- editApp: 'Edit App',
865
- manageAllApps: 'Manage All Apps',
866
- systemConsole: 'System Console',
867
- noAppsConfigured: 'No apps configured',
1311
+ home: "Главная",
1312
+ addApp: "Добавить приложение",
1313
+ editApp: "Редактировать приложение",
1314
+ manageAllApps: "Управление приложениями",
1315
+ systemConsole: "Системная консоль",
1316
+ noAppsConfigured: "Нет приложений",
868
1317
  },
869
1318
  activityFeed: {
870
- title: 'Recent Activity',
871
- filter: 'Filter',
872
- empty: 'No recent activity',
873
- ariaLabel: 'Activity feed',
874
- typeCreate: 'Create',
875
- typeUpdate: 'Update',
876
- typeDelete: 'Delete',
877
- typeComment: 'Comment',
878
- relativeJustNow: 'just now',
879
- relativeSecondsAgo: '{{count}}s ago',
880
- relativeMinutesAgo: '{{count}}m ago',
881
- relativeHoursAgo: '{{count}}h ago',
882
- relativeDaysAgo: '{{count}}d ago',
1319
+ title: "Последние действия",
1320
+ filter: "Фильтр",
1321
+ empty: "Нет действий",
1322
+ ariaLabel: "Лента активности",
1323
+ typeCreate: "Создание",
1324
+ typeUpdate: "Обновление",
1325
+ typeDelete: "Удаление",
1326
+ typeComment: "Комментарий",
1327
+ relativeJustNow: "только что",
1328
+ relativeSecondsAgo: "{{count}} с назад",
1329
+ relativeMinutesAgo: "{{count}} м назад",
1330
+ relativeHoursAgo: "{{count}} ч назад",
1331
+ relativeDaysAgo: "{{count}} д назад",
1332
+ viewAll: "Все действия",
883
1333
  },
884
1334
  metadata: {
885
- label: 'Metadata',
886
- toggleTitle: 'Toggle Metadata Inspector',
887
- panelTitle: 'Metadata Inspector',
888
- jsonBadge: 'JSON',
889
- copyJson: 'Copy JSON',
1335
+ label: "Метаданные",
1336
+ toggleTitle: "Инспектор метаданных",
1337
+ panelTitle: "Инспектор метаданных",
1338
+ jsonBadge: "JSON",
1339
+ copyJson: "Копировать JSON",
890
1340
  },
891
1341
  },
892
1342
  search: {
893
- title: 'Search',
894
- back: 'Back',
895
- placeholder: 'Search objects, dashboards, pages, reports...',
896
- inputAriaLabel: 'Search objects, dashboards, pages, reports',
897
- resultsCount: '{{count}} result for "{{query}}"',
898
- resultsCountPlural: '{{count}} results for "{{query}}"',
899
- itemsAvailable: '{{count}} items available',
900
- noResults: 'No results found',
901
- noResultsHint: 'Try adjusting your search terms',
902
- typeObjects: 'Objects',
903
- typeDashboards: 'Dashboards',
904
- typePages: 'Pages',
905
- typeReports: 'Reports',
906
- badgeObject: 'object',
907
- badgeDashboard: 'dashboard',
908
- badgePage: 'page',
909
- badgeReport: 'report',
1343
+ title: "Поиск",
1344
+ back: "Назад",
1345
+ placeholder: "Поиск объектов, панелей, страниц, отчётов...",
1346
+ inputAriaLabel: "Поиск объектов, панелей, страниц, отчётов",
1347
+ resultsCount: "{{count}} результат для \"{{query}}\"",
1348
+ resultsCountPlural: "{{count}} результатов для \"{{query}}\"",
1349
+ itemsAvailable: "{{count}} доступно",
1350
+ noResults: "Результатов не найдено",
1351
+ noResultsHint: "Попробуйте изменить поисковые запросы",
1352
+ typeObjects: "Объекты",
1353
+ typeDashboards: "Панели",
1354
+ typePages: "Страницы",
1355
+ typeReports: "Отчёты",
1356
+ badgeObject: "Объект",
1357
+ badgeDashboard: "Панель",
1358
+ badgePage: "Страница",
1359
+ badgeReport: "Отчёт",
910
1360
  },
911
1361
  empty: {
912
- objectNotFound: 'Object Not Found',
913
- objectNotFoundDescription: 'Object "{{name}}" definition missing. Check your configuration or navigate back to select a valid object.',
914
- pageNotFound: 'Page Not Found',
915
- pageNotFoundDescription: 'The page "{{name}}" could not be found. It may have been removed or renamed.',
916
- dashboardNotFound: 'Dashboard Not Found',
917
- dashboardNotFoundDescription: 'The dashboard "{{name}}" could not be found. It may have been removed or renamed.',
918
- reportNotFound: 'Report Not Found',
919
- reportNotFoundDescription: 'The report "{{name}}" could not be found. It may have been removed or renamed.',
920
- noAppsConfigured: 'No Apps Configured',
921
- noAppsConfiguredDescription: 'No applications have been registered. Create your first app or visit System Settings to configure your environment.',
922
- createFirstApp: 'Create Your First App',
923
- systemSettings: 'System Settings',
924
- back: 'Back',
1362
+ objectNotFound: "Объект не найден",
1363
+ objectNotFoundDescription: "Определение объекта \"{{name}}\" отсутствует. Проверьте конфигурацию или вернитесь назад.",
1364
+ pageNotFound: "Страница не найдена",
1365
+ pageNotFoundDescription: "Страница \"{{name}}\" не найдена. Возможно, она была удалена или переименована.",
1366
+ dashboardNotFound: "Панель не найдена",
1367
+ dashboardNotFoundDescription: "Панель \"{{name}}\" не найдена. Возможно, она была удалена или переименована.",
1368
+ reportNotFound: "Отчёт не найден",
1369
+ reportNotFoundDescription: "Отчёт \"{{name}}\" не найден. Возможно, он был удалён или переименован.",
1370
+ noAppsConfigured: "Нет приложений",
1371
+ noAppsConfiguredDescription: "Нет зарегистрированных приложений. Создайте первое приложение или посетите системные настройки.",
1372
+ createFirstApp: "Создать приложение",
1373
+ systemSettings: "Системные настройки",
1374
+ back: "Назад",
1375
+ recordNotFound: "Запись не найдена",
1376
+ recordNotFoundDescription: "Искомая запись не существует или была удалена.",
925
1377
  },
926
1378
  renderer: {
927
- noPageSchema: 'No page schema provided',
928
- noFormSchema: 'No form schema provided',
929
- noDashboardSchema: 'No dashboard schema provided',
930
- pageRendering: 'Page rendering: {{name}}',
931
- dashboardRendering: 'Dashboard rendering: {{name}}',
932
- formRenderingMode: 'Form rendering in {{mode}} mode',
933
- formRenderingFor: 'for record {{id}}',
934
- createRecord: 'Create Record',
935
- editRecord: 'Edit Record',
936
- page: 'Page',
937
- dashboard: 'Dashboard',
938
- save: 'Save',
939
- cancel: 'Cancel',
1379
+ noPageSchema: "Схема страницы не указана",
1380
+ noFormSchema: "Схема формы не указана",
1381
+ noDashboardSchema: "Схема панели не указана",
1382
+ pageRendering: "Рендеринг страницы: {{name}}",
1383
+ dashboardRendering: "Рендеринг панели: {{name}}",
1384
+ formRenderingMode: "Форма в режиме {{mode}}",
1385
+ formRenderingFor: "для записи {{id}}",
1386
+ createRecord: "Создать запись",
1387
+ editRecord: "Редактировать запись",
1388
+ page: "Страница",
1389
+ dashboard: "Панель",
1390
+ save: "Сохранить",
1391
+ cancel: "Отмена",
940
1392
  },
941
1393
  actionDialog: {
942
- title: 'Action Parameters',
943
- description: 'Please provide the required information to continue.',
944
- selectPlaceholder: 'Select {{label}}',
945
- requiredError: '{{label}} is required',
946
- cancel: 'Cancel',
947
- confirm: 'Confirm',
948
- defaultActionTitle: 'Action',
949
- ok: 'OK',
1394
+ title: "Параметры действия",
1395
+ description: "Введите необходимую информацию для продолжения.",
1396
+ selectPlaceholder: "Выбрать {{label}}",
1397
+ requiredError: "{{label}} обязательно",
1398
+ cancel: "Отмена",
1399
+ confirm: "Подтвердить",
1400
+ defaultActionTitle: "Действие",
1401
+ ok: "ОК",
1402
+ lookupPlaceholder: "Вставить ID записи (UUID) для {{label}}",
1403
+ lookupHelpText: "Введите ID записи связанного объекта. Выбор записи будет добавлен позже.",
1404
+ },
1405
+ actionConfirm: {
1406
+ title: "Подтвердите действие",
1407
+ confirm: "Продолжить",
1408
+ cancel: "Отмена",
950
1409
  },
951
1410
  rowAction: {
952
- openMenu: 'Open menu',
953
- edit: 'Edit',
954
- delete: 'Delete',
1411
+ openMenu: "Открыть меню",
1412
+ edit: "Редактировать",
1413
+ delete: "Удалить",
955
1414
  },
956
1415
  navigationSync: {
957
- addedPage: 'Navigation updated: added page "{{name}}"',
958
- addedDashboard: 'Navigation updated: added dashboard "{{name}}"',
959
- removedPage: 'Navigation updated: removed page "{{name}}"',
960
- removedDashboard: 'Navigation updated: removed dashboard "{{name}}"',
961
- renamedPage: 'Navigation updated: renamed page "{{oldName}}" → "{{newName}}"',
962
- renamedDashboard: 'Navigation updated: renamed dashboard "{{oldName}}" → "{{newName}}"',
963
- undoLabel: 'Undo',
964
- undone: 'Navigation change undone',
965
- undoFailed: 'Failed to undo navigation change',
966
- updateFailed: 'Failed to update navigation',
1416
+ addedPage: "Навигация обновлена: страница \"{{name}}\" добавлена",
1417
+ addedDashboard: "Навигация обновлена: панель \"{{name}}\" добавлена",
1418
+ removedPage: "Навигация обновлена: страница \"{{name}}\" удалена",
1419
+ removedDashboard: "Навигация обновлена: панель \"{{name}}\" удалена",
1420
+ renamedPage: "Навигация обновлена: страница \"{{oldName}}\" переименована в \"{{newName}}\"",
1421
+ renamedDashboard: "Навигация обновлена: панель \"{{oldName}}\" переименована в \"{{newName}}\"",
1422
+ undoLabel: "Отменить",
1423
+ undone: "Изменение навигации отменено",
1424
+ undoFailed: "Не удалось отменить изменение навигации",
1425
+ updateFailed: "Не удалось обновить навигацию",
967
1426
  },
968
1427
  objectActions: {
969
- deleteSuccess: '{{label}} deleted successfully',
970
- deleteFailed: 'Failed to delete {{label}}',
971
- noRecordId: 'No record ID provided',
972
- deleteConfirm: 'Are you sure you want to delete this record?',
1428
+ deleteSuccess: "{{label}} успешно удалён",
1429
+ deleteFailed: "Не удалось удалить {{label}}",
1430
+ noRecordId: "ID записи не указан",
1431
+ deleteConfirm: "Удалить эту запись?",
1432
+ bulkDeleteSuccess: "{{count}} записей {{label}} удалено",
1433
+ bulkDeletePartial: "{{succeeded}} удалено, {{failed}} не удалось",
973
1434
  },
974
1435
  objectViewActions: {
975
- renameFailed: 'Failed to rename view',
976
- deleteFailed: 'Failed to delete view',
1436
+ renameFailed: "Не удалось переименовать представление",
1437
+ deleteFailed: "Не удалось удалить представление",
977
1438
  },
978
1439
  dashboardActions: {
979
- pdfPreparing: 'Preparing PDF export…',
980
- exportFailed: 'Export failed: {{message}}',
981
- forecastSoon: 'Forecast view coming soon',
1440
+ pdfPreparing: "Подготовка экспорта PDF…",
1441
+ exportFailed: "Ошибка экспорта: {{message}}",
1442
+ forecastSoon: "Прогнозное представление скоро будет",
982
1443
  },
983
1444
  recordDetail: {
984
- viewersTooltip: 'Users viewing this record',
1445
+ viewersTooltip: "Пользователи, просматривающие эту запись",
985
1446
  },
986
1447
  cellRender: {
987
- empty: 'Empty',
988
- yes: 'Yes',
989
- no: 'No',
990
- systemFields: 'System',
1448
+ empty: "Пусто",
1449
+ yes: "Да",
1450
+ no: "Нет",
1451
+ systemFields: "Система",
991
1452
  },
992
1453
  user: {
993
- profile: 'Profile',
994
- settings: 'Settings',
995
- logout: 'Log out',
1454
+ profile: "Профиль",
1455
+ settings: "Настройки",
1456
+ logout: "Выйти",
1457
+ preferences: "Настройки",
1458
+ theme: "Тема",
1459
+ language: "Язык",
996
1460
  },
997
1461
  report: {
998
- rowTotal: 'Row Total',
999
- columnTotal: 'Column Total',
1000
- grandTotal: 'Grand Total',
1001
- totals: 'Totals',
1002
- rowsLabel: 'Row',
1003
- columnsLabel: 'Column',
1004
- allLabel: '(All)',
1005
- emptyLabel: '(Empty)',
1006
- loading: 'Loading…',
1007
- failedToLoad: 'Failed to load matrix: {{message}}',
1008
- needsAcross: 'Matrix report requires at least one `groupingsAcross` field.',
1462
+ total: "Итого",
1463
+ rowTotal: "Итог строки",
1464
+ columnTotal: "Итог столбца",
1465
+ grandTotal: "Общий итог",
1466
+ totals: "Итоги",
1467
+ rowsLabel: "Строка",
1468
+ columnsLabel: "Столбец",
1469
+ allLabel: "(Все)",
1470
+ emptyLabel: "(Пусто)",
1471
+ loading: "Загрузка…",
1472
+ failedToLoad: "Не удалось загрузить матрицу: {{message}}",
1473
+ needsAcross: "Матричный отчёт требует хотя бы одно поле `groupingsAcross`.",
1009
1474
  aggregate: {
1010
- count: 'Count',
1011
- countDistinct: 'Distinct Count',
1012
- sum: 'Sum',
1013
- avg: 'Average',
1014
- min: 'Min',
1015
- max: 'Max',
1016
- first: 'First',
1475
+ count: "Количество",
1476
+ countDistinct: "Уникальные",
1477
+ sum: "Сумма",
1478
+ avg: "Среднее",
1479
+ min: "Минимум",
1480
+ max: "Максимум",
1481
+ first: "Первый",
1017
1482
  },
1018
1483
  editor: {
1019
- breadcrumb: 'Конфигурация',
1020
- basic: 'Основное',
1021
- title: 'Заголовок',
1022
- titlePlaceholder: 'напр., Воронка по кварталам',
1023
- description: 'Описание',
1024
- descriptionPlaceholder: 'Что показывает этот отчёт?',
1025
- type: 'Тип отчёта',
1026
- typeTabular: 'Табличный — плоский список',
1027
- typeSummary: 'Сводный — группировка с итогами',
1028
- typeMatrix: 'Матричный — сводка строки × столбцы',
1029
- typeJoined: 'Объединённый — несколько блоков',
1030
- typeHelp: 'Выберите макет, который соответствует тому, что хотите увидеть.',
1031
- data: 'Данные',
1032
- objectName: 'Источник данных',
1033
- objectNamePlaceholder: 'напр., opportunity',
1034
- objectNameHelp: 'К какому объекту обращается этот отчёт?',
1035
- limit: 'Лимит строк',
1036
- limitPlaceholder: 'напр., 100',
1037
- columns: 'Столбцы',
1038
- columnsHint: 'Выберите поля для столбцов. В сводных и матричных отчётах добавляйте агрегаты (Сумма, Количество…).',
1039
- filters: 'Фильтры',
1040
- filtersHint: 'Ограничьте строки, попадающие в отчёт.',
1041
- filtersComplex: 'В отчёте используется расширенный фильтр, который нельзя редактировать здесь. При сохранении он останется без изменений.',
1042
- groupBy: 'Группировать по',
1043
- groupByHint: 'Сгруппируйте данные и посчитайте промежуточные итоги.',
1044
- rows: 'Строки',
1045
- rowsHint: 'Сгруппировать строки по этим полям.',
1046
- columnsAxis: 'Столбцы',
1047
- columnsAxisHint: 'Развернуть эти поля по горизонтали.',
1048
- values: 'Значения',
1049
- valuesHint: 'Числа в каждой ячейке. Выберите одно или несколько полей и задайте агрегат (Сумма, Количество…).',
1050
- grouping: 'Группировка',
1051
- addGrouping: 'Добавить группировку',
1052
- dateGranularity: 'Гранулярность даты',
1053
- dateGranularityNone: '(исходное значение)',
1054
- day: 'День',
1055
- week: 'Неделя',
1056
- month: 'Месяц',
1057
- quarter: 'Квартал',
1058
- year: 'Год',
1059
- sortAsc: 'По возрастанию',
1060
- sortDesc: 'По убыванию',
1061
- chart: 'График',
1062
- chartHint: 'Дополнительная визуализация рядом с таблицей.',
1063
- chartType: 'Тип графика',
1064
- chartTitle: 'Заголовок графика',
1065
- chartTitlePlaceholder: 'По умолчанию — заголовок отчёта',
1066
- chartXAxis: 'Ось X (категория)',
1067
- chartYAxis: 'Ось Y (значение)',
1068
- chartShowLegend: 'Показывать легенду',
1069
- chartShowDataLabels: 'Показывать подписи данных',
1070
- chartNone: '(без графика)',
1071
- chartBar: 'Столбчатый',
1072
- chartLine: 'Линейный',
1073
- chartArea: 'Областной',
1074
- chartPie: 'Круговой',
1075
- chartDonut: 'Кольцевой',
1076
- chartFunnel: 'Воронка',
1077
- validationNeedsObject: 'Выберите источник данных перед добавлением столбцов.',
1078
- validationMatrixNeedsRowsCols: 'Для матричного отчёта нужны хотя бы одна строка и один столбец.',
1079
- validationSummaryNeedsRows: 'Для сводного отчёта нужно хотя бы одно поле группировки.',
1080
- blocks: 'Блоки',
1081
- blocksHint: 'Каждый блок — отдельная таблица или график. Фильтры блока объединяются с фильтром отчёта по И.',
1082
- addBlock: 'Добавить блок',
1083
- removeBlock: 'Удалить блок',
1084
- blockName: 'Имя блока',
1085
- blockNamePlaceholder: 'уникальное_имя_блока',
1086
- blockLabel: 'Отображаемое название',
1087
- blockLabelPlaceholder: 'Показывается над блоком',
1088
- blockDescription: 'Описание',
1089
- blockDescriptionPlaceholder: 'Необязательный контекст для блока',
1090
- validationJoinedNeedsBlocks: 'Объединённый отчёт должен содержать хотя бы один блок.',
1091
- validationBlockNameRequired: 'У каждого блока должно быть непустое имя.',
1092
- validationBlockNameDuplicate: 'Имена блоков в отчёте должны быть уникальными.',
1093
- validationBlockNeedsColumns: 'В каждом блоке должна быть хотя бы одна колонка.',
1094
- noneOption: '(нет)',
1095
- addCondition: 'Добавить условие',
1096
- combineLogic: 'Объединить с',
1097
- opContains: 'содержит',
1098
- opIsEmpty: 'пусто',
1099
- opIsNotEmpty: 'не пусто',
1100
- formatAuto: 'Авто',
1101
- formatCurrency: 'Валюта',
1102
- formatPercent: 'Процент',
1103
- formatInteger: 'Целое число',
1104
- formatDate: 'Дата',
1105
- formatDatetime: 'Дата и время',
1106
- columnLabelPlaceholder: 'Переопределить подпись',
1107
- aggregateColumn: 'Агрегат',
1108
- formatColumn: 'Формат',
1109
- addColumns: 'Добавить столбцы',
1110
- searchFields: 'Поиск полей…',
1111
- noMatchingFields: 'Нет полей, соответствующих запросу.',
1112
- noFieldsAvailable: 'Полей нет.',
1484
+ breadcrumb: "Конфигурация",
1485
+ basic: "Основное",
1486
+ title: "Заголовок",
1487
+ titlePlaceholder: "напр., Воронка по кварталам",
1488
+ description: "Описание",
1489
+ descriptionPlaceholder: "Что показывает этот отчёт?",
1490
+ type: "Тип отчёта",
1491
+ typeTabular: "Табличный — плоский список",
1492
+ typeSummary: "Сводный — группировка с итогами",
1493
+ typeMatrix: "Матричный — сводка строки × столбцы",
1494
+ typeJoined: "Объединённый — несколько блоков",
1495
+ typeHelp: "Выберите макет, который соответствует тому, что хотите увидеть.",
1496
+ data: "Данные",
1497
+ objectName: "Источник данных",
1498
+ objectNamePlaceholder: "напр., opportunity",
1499
+ objectNameHelp: "К какому объекту обращается этот отчёт?",
1500
+ limit: "Лимит строк",
1501
+ limitPlaceholder: "напр., 100",
1502
+ columns: "Столбцы",
1503
+ columnsHint: "Выберите поля для столбцов. В сводных и матричных отчётах добавляйте агрегаты (Сумма, Количество…).",
1504
+ filters: "Фильтры",
1505
+ filtersHint: "Ограничьте строки, попадающие в отчёт.",
1506
+ filtersComplex: "В отчёте используется расширенный фильтр, который нельзя редактировать здесь. При сохранении он останется без изменений.",
1507
+ groupBy: "Группировать по",
1508
+ groupByHint: "Сгруппируйте данные и посчитайте промежуточные итоги.",
1509
+ rows: "Строки",
1510
+ rowsHint: "Сгруппировать строки по этим полям.",
1511
+ columnsAxis: "Столбцы",
1512
+ columnsAxisHint: "Развернуть эти поля по горизонтали.",
1513
+ values: "Значения",
1514
+ valuesHint: "Числа в каждой ячейке. Выберите одно или несколько полей и задайте агрегат (Сумма, Количество…).",
1515
+ grouping: "Группировка",
1516
+ addGrouping: "Добавить группировку",
1517
+ dateGranularity: "Гранулярность даты",
1518
+ dateGranularityNone: "(исходное значение)",
1519
+ day: "День",
1520
+ week: "Неделя",
1521
+ month: "Месяц",
1522
+ quarter: "Квартал",
1523
+ year: "Год",
1524
+ sortAsc: "По возрастанию",
1525
+ sortDesc: "По убыванию",
1526
+ chart: "График",
1527
+ chartHint: "Дополнительная визуализация рядом с таблицей.",
1528
+ chartType: "Тип графика",
1529
+ chartTitle: "Заголовок графика",
1530
+ chartTitlePlaceholder: "По умолчанию — заголовок отчёта",
1531
+ chartXAxis: "Ось X (категория)",
1532
+ chartYAxis: "Ось Y (значение)",
1533
+ chartShowLegend: "Показывать легенду",
1534
+ chartShowDataLabels: "Показывать подписи данных",
1535
+ chartNone: "(без графика)",
1536
+ chartBar: "Столбчатый",
1537
+ chartLine: "Линейный",
1538
+ chartArea: "Областной",
1539
+ chartPie: "Круговой",
1540
+ chartDonut: "Кольцевой",
1541
+ chartFunnel: "Воронка",
1542
+ validationNeedsObject: "Выберите источник данных перед добавлением столбцов.",
1543
+ validationMatrixNeedsRowsCols: "Для матричного отчёта нужны хотя бы одна строка и один столбец.",
1544
+ validationSummaryNeedsRows: "Для сводного отчёта нужно хотя бы одно поле группировки.",
1545
+ blocks: "Блоки",
1546
+ blocksHint: "Каждый блок — отдельная таблица или график. Фильтры блока объединяются с фильтром отчёта по И.",
1547
+ addBlock: "Добавить блок",
1548
+ removeBlock: "Удалить блок",
1549
+ blockName: "Имя блока",
1550
+ blockNamePlaceholder: "уникальное_имя_блока",
1551
+ blockLabel: "Отображаемое название",
1552
+ blockLabelPlaceholder: "Показывается над блоком",
1553
+ blockDescription: "Описание",
1554
+ blockDescriptionPlaceholder: "Необязательный контекст для блока",
1555
+ validationJoinedNeedsBlocks: "Объединённый отчёт должен содержать хотя бы один блок.",
1556
+ validationBlockNameRequired: "У каждого блока должно быть непустое имя.",
1557
+ validationBlockNameDuplicate: "Имена блоков в отчёте должны быть уникальными.",
1558
+ validationBlockNeedsColumns: "В каждом блоке должна быть хотя бы одна колонка.",
1559
+ noneOption: "(нет)",
1560
+ addCondition: "Добавить условие",
1561
+ combineLogic: "Объединить с",
1562
+ opContains: "содержит",
1563
+ opIsEmpty: "пусто",
1564
+ opIsNotEmpty: "не пусто",
1565
+ formatAuto: "Авто",
1566
+ formatCurrency: "Валюта",
1567
+ formatPercent: "Процент",
1568
+ formatInteger: "Целое число",
1569
+ formatDate: "Дата",
1570
+ formatDatetime: "Дата и время",
1571
+ columnLabelPlaceholder: "Переопределить подпись",
1572
+ aggregateColumn: "Агрегат",
1573
+ formatColumn: "Формат",
1574
+ addColumns: "Добавить столбцы",
1575
+ searchFields: "Поиск полей…",
1576
+ noMatchingFields: "Нет полей, соответствующих запросу.",
1577
+ noFieldsAvailable: "Полей нет.",
1578
+ columnsCount: "{n} столбец(ов) выбрано",
1579
+ columnsEmpty: "Столбцы ещё не выбраны.",
1580
+ fieldPickerTitle: "Выбрать поля",
1581
+ fieldPickerDescription: "Выберите одно или несколько полей для добавления. Используйте поиск для фильтрации.",
1582
+ fieldPickerChangeTitle: "Изменить поле",
1583
+ fieldPickerAddGroupingTitle: "Добавить группировку",
1584
+ fieldPickerEmpty: "(Выбрать поле)",
1585
+ fieldPickerSelected: "{n} выбрано",
1586
+ fieldPickerClear: "Сбросить выбор",
1587
+ fieldPickerAdd: "Добавить",
1588
+ fieldPickerAddN: "Добавить {n}",
1113
1589
  },
1114
1590
  },
1115
1591
  organizations: {
1116
- mine: 'Мои организации',
1117
- title: 'Организации',
1118
- heading: 'Ваши организации',
1119
- subtitle: 'Выберите организацию, чтобы продолжить, или создайте новую.',
1120
- searchPlaceholder: 'Поиск организации',
1121
- new: 'Новая организация',
1122
- current: 'Текущая организация',
1123
- manage: 'Управление',
1124
- emptyTitle: 'Пока нет организаций',
1125
- emptyDescription: 'Создайте свою первую организацию, чтобы начать.',
1126
- noMatches: 'Нет организаций, соответствующих запросу.',
1592
+ mine: "Мои организации",
1593
+ title: "Организации",
1594
+ heading: "Ваши организации",
1595
+ subtitle: "Выберите организацию, чтобы продолжить, или создайте новую.",
1596
+ searchPlaceholder: "Поиск организации",
1597
+ new: "Новая организация",
1598
+ current: "Текущая организация",
1599
+ manage: "Управление",
1600
+ emptyTitle: "Пока нет организаций",
1601
+ emptyDescription: "Создайте свою первую организацию, чтобы начать.",
1602
+ noMatches: "Нет организаций, соответствующих запросу.",
1127
1603
  },
1128
1604
  notifications: {
1129
- empty: 'Нет уведомлений',
1130
- markAllRead: 'Отметить все как прочитанные',
1131
- viewAll: 'Показать все уведомления',
1132
- approvalsPending: '{{count}} ожидающих утверждений',
1133
- viewApprovals: 'Показать утверждения',
1134
- noPendingApprovals: 'Нет ожидающих утверждений',
1135
- openApprovalsInbox: 'Открыть входящие утверждений',
1605
+ empty: "Нет уведомлений",
1606
+ markAllRead: "Отметить все как прочитанные",
1607
+ viewAll: "Показать все уведомления",
1608
+ approvalsPending: "{{count}} ожидающих утверждений",
1609
+ viewApprovals: "Показать утверждения",
1610
+ noPendingApprovals: "Нет ожидающих утверждений",
1611
+ openApprovalsInbox: "Открыть входящие утверждений",
1612
+ emptyUnread: "Всё прочитано",
1613
+ filterUnread: "Непрочитанные",
1614
+ filterAll: "Все",
1136
1615
  },
1137
1616
  publicForm: {
1138
- submit: 'Submit',
1139
- submitting: 'Submitting…',
1140
- submitAnother: 'Submit another response',
1141
- poweredBy: 'Powered by ObjectStack',
1142
- secureNotice: 'Your information is transmitted securely and only used to respond to your request.',
1143
- thankYouTitle: 'Thank you!',
1144
- thankYouMessage: 'Your submission has been received successfully.',
1145
- redirecting: 'Redirecting in {{seconds}} seconds…',
1146
- unavailableTitle: 'Form unavailable',
1147
- unavailableDescription: 'No public form is available at this URL. Make sure the underlying view has anonymous sharing enabled and matches this slug.',
1148
- tryDemo: 'Try the demo',
1149
- retry: 'Retry',
1150
- loading: 'Loading form…',
1151
- requiredHint: '* Required field',
1152
- consentLabelDefault: 'I agree to the privacy policy and consent to my data being processed for this request.',
1153
- consentLink: 'Privacy policy',
1154
- consentRequired: 'Please accept the privacy policy to continue.',
1155
- rateLimited: 'Please take a moment to review your answers before submitting.',
1156
- redirectBlocked: 'Submission accepted, but the redirect URL was blocked for security.',
1617
+ submit: "Отправить",
1618
+ submitting: "Отправка…",
1619
+ submitAnother: "Отправить ещё ответ",
1620
+ poweredBy: "Работает на ObjectStack",
1621
+ secureNotice: "Ваши данные передаются безопасно и используются только для обработки запроса.",
1622
+ thankYouTitle: "Спасибо!",
1623
+ thankYouMessage: "Ваш ответ успешно получен.",
1624
+ redirecting: "Перенаправление через {{seconds}} с…",
1625
+ unavailableTitle: "Форма недоступна",
1626
+ unavailableDescription: "По этому URL нет публичной формы. Убедитесь, что базовое представление имеет анонимный доступ.",
1627
+ tryDemo: "Попробовать демо",
1628
+ retry: "Повторить",
1629
+ loading: "Загрузка формы…",
1630
+ requiredHint: "* Обязательное поле",
1631
+ consentLabelDefault: "Я принимаю политику конфиденциальности и соглашаюсь на обработку моих данных.",
1632
+ consentLink: "Политика конфиденциальности",
1633
+ consentRequired: "Пожалуйста, примите политику конфиденциальности.",
1634
+ rateLimited: "Проверьте ответы перед отправкой.",
1635
+ redirectBlocked: "Ответ принят, но URL перенаправления заблокирован по соображениям безопасности.",
1157
1636
  demo: {
1158
- contactTitle: 'Contact us',
1159
- contactDescription: 'Tell us about your project and a sales representative will get back to you within one business day.',
1160
- supportTitle: 'Submit a support request',
1161
- supportDescription: 'Tell us what is going wrong — our team responds within one business day.',
1162
- thankYouSalesTitle: 'Thanks — we received your message!',
1163
- thankYouSalesMessage: 'A sales representative will be in touch within one business day.',
1164
- thankYouSupportTitle: 'Got it — your request is in the queue.',
1165
- thankYouSupportMessage: 'A support engineer will follow up shortly. Save this page if you have more screenshots to add.',
1637
+ contactTitle: "Связаться с нами",
1638
+ contactDescription: "Расскажите о вашем проекте, и наш менеджер свяжется с вами в течение рабочего дня.",
1639
+ supportTitle: "Отправить запрос в поддержку",
1640
+ supportDescription: "Опишите проблему — наша команда ответит в течение рабочего дня.",
1641
+ thankYouSalesTitle: "Спасибо — мы получили ваше сообщение!",
1642
+ thankYouSalesMessage: "Наш менеджер свяжется с вами в течение рабочего дня.",
1643
+ thankYouSupportTitle: "Готово — ваш запрос в очереди.",
1644
+ thankYouSupportMessage: "Инженер поддержки скоро свяжется с вами. Сохраните эту страницу, если у вас есть скриншоты.",
1166
1645
  field: {
1167
- firstName: 'First name',
1168
- lastName: 'Last name',
1169
- email: 'Work email',
1170
- phone: 'Phone',
1171
- jobTitle: 'Job title',
1172
- company: 'Company',
1173
- website: 'Website',
1174
- industry: 'Industry',
1175
- companySize: 'Company size',
1176
- howCanWeHelp: 'How can we help?',
1177
- subject: 'Subject',
1178
- description: 'Description',
1179
- issueType: 'Issue type',
1180
- priority: 'Priority',
1646
+ firstName: "Имя",
1647
+ lastName: "Фамилия",
1648
+ email: "Рабочий email",
1649
+ phone: "Телефон",
1650
+ jobTitle: "Должность",
1651
+ company: "Компания",
1652
+ website: "Сайт",
1653
+ industry: "Отрасль",
1654
+ companySize: "Размер компании",
1655
+ howCanWeHelp: "Как мы можем помочь?",
1656
+ subject: "Тема",
1657
+ description: "Описание",
1658
+ issueType: "Тип проблемы",
1659
+ priority: "Приоритет",
1181
1660
  },
1182
1661
  industry: {
1183
- technology: 'Technology',
1184
- software: 'Software / SaaS',
1185
- finance: 'Finance',
1186
- healthcare: 'Healthcare',
1187
- retail: 'Retail',
1188
- other: 'Other',
1662
+ technology: "Технологии",
1663
+ software: "Программное обеспечение / SaaS",
1664
+ finance: "Финансы",
1665
+ healthcare: "Здравоохранение",
1666
+ retail: "Розница",
1667
+ other: "Другое",
1189
1668
  },
1190
1669
  issueType: {
1191
- question: 'Question',
1192
- problem: 'Problem',
1193
- bug: 'Bug',
1194
- feature_request: 'Feature request',
1670
+ question: "Вопрос",
1671
+ problem: "Проблема",
1672
+ bug: "Ошибка",
1673
+ feature_request: "Пожелание",
1195
1674
  },
1196
1675
  priority: {
1197
- low: 'Low',
1198
- medium: 'Medium',
1199
- high: 'High',
1200
- critical: 'Critical',
1676
+ low: "Низкий",
1677
+ medium: "Средний",
1678
+ high: "Высокий",
1679
+ critical: "Критический",
1201
1680
  },
1202
1681
  },
1203
1682
  },
1204
1683
  marketplace: {
1205
- title: 'App Marketplace',
1206
- subtitle: 'Browse approved apps published to the ObjectStack catalog. Click an app to view details and install it into one of your environments.',
1207
- searchPlaceholder: 'Search apps by name or manifest ID…',
1208
- searchAria: 'Search marketplace apps',
1209
- installed: 'Installed',
1210
- installedCount: 'Installed ({{count}})',
1211
- refresh: 'Refresh',
1212
- all: 'All',
1213
- noApprovedYet: 'No apps have been approved for the marketplace yet.',
1214
- noMatchFilters: 'No apps match your filters.',
1215
- noDescription: 'No description provided.',
1216
- back: 'Back to marketplace',
1217
- installedTitle: 'Installed Apps',
1218
- installedSubtitle: 'Marketplace packages currently installed into this runtime\'s kernel. Cached manifests live in <code>.objectstack/installed-packages/</code> and survive restarts.',
1219
- installedEmpty: 'No marketplace apps installed in this runtime yet.',
1220
- browseLink: 'Browse the marketplace →',
1221
- installedAdditiveNote: '<strong>Note:</strong> The kernel API is additive only — uninstall removes the on-disk manifest so the package won\'t load on next boot, but the running kernel keeps the app registered until you restart the runtime.',
1222
- installedAt: 'Installed {{when}}',
1223
- installedBy: 'by {{user}}',
1224
- installedPackageId: 'package',
1225
- cachedAs: 'Cached as <code>{{path}}</code>',
1226
- versionBadge: 'v{{version}}',
1227
- installedBadge: 'Installed v{{version}}',
1684
+ title: "Маркетплейс приложений",
1685
+ subtitle: "Просматривайте одобренные приложения из каталога ObjectStack. Нажмите на приложение, чтобы увидеть подробности и установить его.",
1686
+ searchPlaceholder: "Поиск приложений по имени или ID манифеста…",
1687
+ searchAria: "Поиск в маркетплейсе",
1688
+ installed: "Установлено",
1689
+ installedCount: "Установлено ({{count}})",
1690
+ refresh: "Обновить",
1691
+ all: "Все",
1692
+ noApprovedYet: "Пока нет одобренных приложений.",
1693
+ noMatchFilters: "Нет приложений, соответствующих фильтрам.",
1694
+ noDescription: "Описание отсутствует.",
1695
+ back: "Назад в маркетплейс",
1696
+ installedTitle: "Установленные приложения",
1697
+ installedSubtitle: "Пакеты маркетплейса, установленные в ядре этого рантайма.",
1698
+ installedEmpty: "Пока нет установленных приложений.",
1699
+ browseLink: "Маркетплейс →",
1700
+ installedAdditiveNote: "<strong>Примечание:</strong> API ядра только аддитивный — удаление убирает манифест с диска, чтобы пакет не загружался при следующем запуске, но работающее ядро держит приложение зарегистрированным до перезапуска.",
1701
+ installedAt: "Установлено {{when}}",
1702
+ installedBy: "пользователем {{user}}",
1703
+ installedPackageId: "Пакет",
1704
+ cachedAs: "Кэшировано как <code>{{path}}</code>",
1705
+ versionBadge: "v{{version}}",
1706
+ installedBadge: "Установлено v{{version}}",
1228
1707
  load: {
1229
- failed: 'Failed to load marketplace',
1230
- failedHint: 'By default this runtime points at the public ObjectStack cloud. Check the runtime is online, or override <code>OS_CLOUD_URL</code> to point at a self-hosted control plane.',
1231
- packageFailed: 'Failed to load package',
1232
- notFound: 'Not found.',
1708
+ failed: "Не удалось загрузить маркетплейс",
1709
+ failedHint: "По умолчанию этот рантайм указывает на публичное облако ObjectStack. Убедитесь, что рантайм онлайн.",
1710
+ packageFailed: "Не удалось загрузить пакет",
1711
+ notFound: "Не найдено.",
1233
1712
  },
1234
1713
  detail: {
1235
- homepage: 'Homepage',
1236
- installedV: 'Installed · v{{version}}',
1237
- about: 'About',
1238
- noReadme: 'No readme provided.',
1239
- versions: 'Versions',
1240
- noApprovedVersions: 'No approved versions.',
1241
- prerelease: 'pre',
1242
- moreOptions: 'More install options',
1243
- uninstallFromRuntime: 'Uninstall from this runtime',
1714
+ homepage: "Сайт",
1715
+ installedV: "Установлено · v{{version}}",
1716
+ about: "О приложении",
1717
+ noReadme: "README отсутствует.",
1718
+ versions: "Версии",
1719
+ noApprovedVersions: "Нет одобренных версий.",
1720
+ prerelease: "Пред-релиз",
1721
+ moreOptions: "Другие варианты установки",
1722
+ uninstallFromRuntime: "Удалить из рантайма",
1723
+ addSampleData: 'Добавить демоданные',
1724
+ reseedAgain: 'Перезагрузить демоданные',
1725
+ purgeSampleData: 'Удалить демоданные',
1726
+ purgeConfirm: 'Удалить все демонстрационные записи, созданные этим пакетом? Записи, добавленные пользователем, НЕ будут затронуты.',
1727
+ purgeSuccess: 'Удалено демонстрационных записей: {{count}}.',
1728
+ purgeNoData: 'Демонстрационные записи для удаления не найдены.',
1729
+ reseedQueued: 'Демоданные будут перезагружены при следующем доступе к среде.',
1730
+ reseedLocalSuccess: 'Демоданные перезагружены: добавлено {{inserted}}, обновлено {{updated}}.',
1731
+ reseedPartialErrors: '(не удалось записать записей: {{count}})',
1732
+ updateAvailable: 'Доступно обновление',
1244
1733
  },
1245
1734
  action: {
1246
- install: 'Install',
1247
- reinstall: 'Reinstall',
1248
- working: 'Working…',
1249
- installToCloud: 'Install to cloud…',
1250
- installing: 'Installing…',
1251
- uninstall: 'Uninstall',
1252
- uninstalling: 'Uninstalling…',
1253
- details: 'Details',
1254
- close: 'Close',
1255
- dismiss: 'Dismiss',
1256
- openOnCloud: 'Open on cloud',
1257
- backHome: 'Back to home',
1735
+ install: "Установить",
1736
+ reinstall: "Переустановить",
1737
+ working: "Обработка…",
1738
+ installToCloud: "Установить в облако…",
1739
+ installing: "Установка…",
1740
+ uninstall: "Удалить",
1741
+ uninstalling: "Удаление…",
1742
+ details: "Подробности",
1743
+ close: "Закрыть",
1744
+ dismiss: "Закрыть",
1745
+ openOnCloud: "Открыть в облаке",
1746
+ backHome: "На главную",
1258
1747
  },
1259
1748
  install: {
1260
- dialogTitle: 'Install {{name}}',
1261
- dialogDescCurrent: 'Install into this environment ({{host}}).',
1262
- dialogDescPicker: 'Choose an environment to install this app into. You need to be signed into ObjectStack Cloud.',
1263
- environment: 'Environment',
1264
- environmentPlaceholder: 'Pick an environment',
1265
- includeSampleData: 'Include sample data',
1266
- noEnvs: 'No environments found in your active organization.',
1267
- noPermission: 'You do not have permission to install apps in any environment. Only organization owners and admins can install — ask your workspace admin.',
1268
- signInFirst: 'You need to sign into ObjectStack Cloud first. Click "Open on cloud" below.',
1269
- success: 'Installed successfully. Open the environment to see the new app.',
1270
- localSuccess: 'Installed v{{version}} to this runtime. "{{name}}" should now appear in the app switcher.',
1271
- localManifestConflict: '{{message}}\nTip: a local app already owns this manifest_id. Remove it from objectstack.config.ts first.',
1272
- localUnauthorized: 'Sign in to this runtime first, then try again.',
1273
- localMarketplaceUnavailable: 'This runtime has no OS_CLOUD_URL configured, so the marketplace catalog is unreachable.',
1749
+ dialogTitle: "Установить {{name}}",
1750
+ dialogDescCurrent: "Установить в эту среду ({{host}}).",
1751
+ dialogDescPicker: "Выберите среду для установки. Требуется вход в ObjectStack Cloud.",
1752
+ environment: "Среда",
1753
+ environmentPlaceholder: "Выбрать среду",
1754
+ includeSampleData: "Включить образцы данных",
1755
+ noEnvs: "В активной организации нет сред.",
1756
+ noPermission: "Нет прав на установку. Только владельцы и администраторы могут устанавливать.",
1757
+ signInFirst: "Сначала войдите в ObjectStack Cloud.",
1758
+ success: "Установлено. Откройте среду, чтобы увидеть новое приложение.",
1759
+ localSuccess: "v{{version}} установлено. \"{{name}}\" должно появиться в переключателе.",
1760
+ localManifestConflict: "{{message}}\nПримечание: Локальное приложение уже имеет этот manifest_id. Сначала удалите его из objectstack.config.ts.",
1761
+ localUnauthorized: "Сначала войдите в этот рантайм.",
1762
+ localMarketplaceUnavailable: "OS_CLOUD_URL не настроен.",
1274
1763
  },
1275
1764
  uninstall: {
1276
- confirm: 'Uninstall {{manifestId}} v{{version}} from this runtime?\n\nThe cached manifest will be removed. The app will remain loaded in the running kernel until the next restart.',
1277
- successInList: 'Removed {{manifestId}}. Restart the runtime to fully unload it from the running kernel.',
1278
- successInDetail: 'Removed cached manifest for {{manifestId}}. Restart the runtime to fully unload the app from the running kernel.',
1765
+ confirm: "Удалить {{manifestId}} v{{version}}?\n\nКэшированный манифест будет удалён.",
1766
+ successInList: "{{manifestId}} удалён. Перезапустите рантайм для полной выгрузки.",
1767
+ successInDetail: "Кэшированный манифест {{manifestId}} удалён.",
1279
1768
  },
1280
1769
  accessDenied: {
1281
- title: 'App Marketplace is admin-only',
1282
- description: 'You don\'t have permission to install apps in this environment. Ask an owner or admin of this organization for access.',
1770
+ title: "Только для администраторов",
1771
+ description: "Нет прав на установку приложений.",
1283
1772
  },
1284
1773
  category: {
1285
- crm: 'CRM',
1286
- erp: 'ERP',
1287
- hr: 'Human Resources',
1288
- finance: 'Finance',
1289
- project: 'Project Management',
1290
- collaboration: 'Collaboration',
1291
- analytics: 'Analytics',
1292
- integration: 'Integration',
1293
- automation: 'Automation',
1294
- ai: 'AI',
1295
- security: 'Security',
1296
- 'developer-tools': 'Developer Tools',
1297
- 'ui-theme': 'UI Theme',
1298
- storage: 'Storage',
1299
- other: 'Other',
1774
+ crm: "CRM",
1775
+ erp: "ERP",
1776
+ hr: "HR",
1777
+ finance: "Финансы",
1778
+ project: "Управление проектами",
1779
+ collaboration: "Совместная работа",
1780
+ analytics: "Аналитика",
1781
+ integration: "Интеграция",
1782
+ automation: "Автоматизация",
1783
+ ai: "ИИ",
1784
+ security: "Безопасность",
1785
+ "developer-tools": "Инструменты разработчика",
1786
+ "ui-theme": "Тема UI",
1787
+ storage: "Хранилище",
1788
+ other: "Другое",
1300
1789
  },
1301
1790
  pricing: {
1302
- free: 'Free',
1303
- freemium: 'Freemium',
1304
- paid: 'Paid',
1305
- subscription: 'Subscription',
1306
- 'usage-based': 'Usage-based',
1307
- 'contact-sales': 'Contact Sales',
1791
+ free: "Бесплатно",
1792
+ freemium: "Freemium",
1793
+ paid: "Платно",
1794
+ subscription: "Подписка",
1795
+ "usage-based": "По использованию",
1796
+ "contact-sales": "Связаться с продажами",
1308
1797
  },
1309
1798
  relativeTime: {
1310
- today: 'today',
1311
- daysAgo: '{{count}}d ago',
1312
- monthsAgo: '{{count}}mo ago',
1313
- yearsAgo: '{{count}}y ago',
1799
+ today: "сегодня",
1800
+ daysAgo: "{{count}} д назад",
1801
+ monthsAgo: "{{count}} мес назад",
1802
+ yearsAgo: "{{count}} лет назад",
1803
+ },
1804
+ },
1805
+ approvalsInbox: {
1806
+ loadMore: 'Загрузить ещё',
1807
+ loadingMore: 'Загрузка…',
1808
+ loadedOf: 'Загружено {{loaded}} из {{total}}',
1809
+ actEscalate: 'Эскалация SLA',
1810
+ systemSlaActor: 'Система (SLA)',
1811
+ reassignBtn: 'Передать',
1812
+ reassignTitle: 'Передать согласование другому?',
1813
+ reassignBody: 'Ваше место согласующего перейдёт выбранному человеку — он получит уведомление и сможет действовать сразу.',
1814
+ reassignTo: 'Новый согласующий',
1815
+ reassignToPlaceholder: 'Выберите пользователя или введите email / role:<имя>',
1816
+ reassignSuccess: 'Передано: {{to}}',
1817
+ requestInfoBtn: 'Запросить данные',
1818
+ requestInfoTitle: 'Запросить у заявителя дополнительную информацию?',
1819
+ requestInfoBody: 'Запрос остаётся в ожидании; заявитель получит уведомление и сможет ответить в обсуждении.',
1820
+ requestInfoPlaceholder: 'Что нужно от заявителя?',
1821
+ requestInfoSent: 'Возвращено заявителю за дополнениями',
1822
+ remindBtn: 'Напомнить',
1823
+ remindSuccess: 'Напоминание отправлено: {{count}}',
1824
+ remindThrottled: 'Напоминание уже отправлялось недавно — попробуйте позже.',
1825
+ replyPlaceholder: 'Ответить по этому запросу…',
1826
+ slaRemaining: 'SLA: осталось {{dur}}',
1827
+ slaOverdue: 'SLA просрочен на {{dur}}',
1828
+ actReassign: 'Передано',
1829
+ actRemind: 'Напоминание',
1830
+ actRequestInfo: 'Запрошены данные',
1831
+ actComment: 'Комментарий',
1832
+ stepProgress: 'Шаги согласования',
1833
+ prevRequest: 'Назад',
1834
+ nextRequest: 'Далее',
1835
+ positionOf: '{{index}} из {{total}}',
1836
+ quickPhrase1: 'Согласовано — соответствует требованиям.',
1837
+ quickPhrase2: 'Согласовано с условиями — следите за исполнением.',
1838
+ quickPhrase3: 'Дополните материалы и отправьте повторно.',
1839
+ title: 'Центр согласований',
1840
+ subtitle: 'Просматривайте и обрабатывайте запросы на согласование.',
1841
+ refresh: 'Обновить',
1842
+ tabMyPending: 'Ожидают меня',
1843
+ tabSubmitted: 'Отправленные мной',
1844
+ tabAll: 'Все',
1845
+ searchPlaceholder: 'Поиск по записи, процессу, заявителю…',
1846
+ clearSearch: 'Очистить поиск',
1847
+ statusFilter: 'Статус',
1848
+ allStatuses: 'Все статусы',
1849
+ processFilter: 'Процесс',
1850
+ allProcesses: 'Все процессы',
1851
+ objectFilter: 'Объект',
1852
+ allObjects: 'Все объекты',
1853
+ filterCount: '{{shown}} из {{total}}',
1854
+ selected: 'выбрано',
1855
+ actionableCount: '({{count}} доступно)',
1856
+ selectAll: 'Выбрать все',
1857
+ selectRow: 'Выбрать запрос',
1858
+ colRequest: 'Запрос',
1859
+ colRecord: 'Запись',
1860
+ colRequester: 'Заявитель',
1861
+ colStatus: 'Статус',
1862
+ colWaiting: 'Отправлен',
1863
+ colActions: 'Действия',
1864
+ statusPending: 'Ожидает',
1865
+ statusApproved: 'Согласован',
1866
+ statusRejected: 'Отклонён',
1867
+ statusRecalled: 'Отозван',
1868
+ statusReturned: 'Возвращено на доработку',
1869
+ sendBackBtn: 'Вернуть',
1870
+ sendBackTitle: 'Вернуть этот запрос на доработку?',
1871
+ sendBackBody: 'Этот раунд завершается, запись разблокируется, и заявитель может исправить данные. После повторной отправки откроется новый раунд согласования для всех согласующих.',
1872
+ sendBackPlaceholder: 'Что нужно исправить, чтобы запрос можно было согласовать?',
1873
+ sendBackSuccess: 'Возвращено на доработку — заявитель может изменить данные и отправить повторно',
1874
+ sendBackAutoRejected: 'Достигнут лимит доработок — запрос был автоматически отклонён',
1875
+ actRevise: 'Возвращено на доработку',
1876
+ actResubmit: 'Отправлено повторно',
1877
+ roundChip: 'Раунд {{n}}',
1878
+ returnedHint: 'Согласующий вернул вам этот запрос. Запись разблокирована — исправьте данные и отправьте повторно, чтобы начать новый раунд согласования.',
1879
+ resubmitBtn: 'Отправить повторно',
1880
+ resubmitting: 'Повторная отправка…',
1881
+ resubmitSuccess: 'Отправлено повторно — открыт новый раунд согласования',
1882
+ resubmitPlaceholder: 'Что вы изменили?',
1883
+ editRecordBtn: 'Изменить запись',
1884
+ abandonTitle: 'Отказаться от доработки?',
1885
+ abandonBody: 'Запрос будет отозван вместо повторной отправки. Согласование на этом завершается.',
1886
+ emptyTitle: 'Запросов нет',
1887
+ emptyPending: 'Всё обработано — ничего не ожидает вашего решения.',
1888
+ emptyOther: 'Здесь пока пусто.',
1889
+ emptyViewAll: 'Все запросы',
1890
+ noMatches: 'Нет совпадений с текущими фильтрами.',
1891
+ keyboardHint: 'Клавиши: j/k перемещение · Enter открыть · x выбрать · a согласовать · r отклонить',
1892
+ drawerTitle: 'Запрос на согласование',
1893
+ submittedAgo: 'Отправлен {{when}}',
1894
+ completedAt: 'Завершён {{when}}',
1895
+ waitingOn: 'Ожидает решения',
1896
+ history: 'История',
1897
+ noActions: 'Действий пока нет.',
1898
+ actSubmit: 'Отправлен',
1899
+ actApprove: 'Согласован',
1900
+ actReject: 'Отклонён',
1901
+ actRecall: 'Отозван',
1902
+ rawData: 'Исходные данные (JSON)',
1903
+ copy: 'Копировать',
1904
+ copied: 'Скопировано',
1905
+ copyFailed: 'Не удалось скопировать',
1906
+ overrideActor: 'Действовать от другого имени (админ)',
1907
+ actor: 'Идентичность',
1908
+ auto: 'Авто',
1909
+ overrideHint: 'например, role:sales_manager. Оставьте пустым для автоматического определения.',
1910
+ comment: 'Комментарий (необязательно)',
1911
+ approve: 'Согласовать',
1912
+ approving: 'Согласование…',
1913
+ reject: 'Отклонить',
1914
+ rejecting: 'Отклонение…',
1915
+ recall: 'Отозвать',
1916
+ recalling: 'Отзыв…',
1917
+ cancel: 'Отмена',
1918
+ clear: 'Очистить',
1919
+ approveN: 'Согласовать {{count}}',
1920
+ rejectN: 'Отклонить {{count}}',
1921
+ bulkApproveTitle: 'Согласовать {{count}} запросов?',
1922
+ bulkApproveBody: 'Каждый запрос согласуется от вашего имени, и поток продолжится по ветке согласования.',
1923
+ bulkRejectTitle: 'Отклонить {{count}} запросов?',
1924
+ bulkRejectBody: 'Выбранные запросы будут отклонены, заявители получат уведомления.',
1925
+ bulkApproved: 'Согласовано запросов: {{count}}',
1926
+ bulkRejected: 'Отклонено запросов: {{count}}',
1927
+ bulkPartial: 'Успешно: {{ok}}, с ошибкой: {{fail}}: {{which}}',
1928
+ rejectOneTitle: 'Отклонить «{{title}}»?',
1929
+ rejectOneBody: 'Запрос будет отклонён, заявитель получит уведомление.',
1930
+ rejectTitle: 'Отклонить этот запрос?',
1931
+ rejectBody: 'Запрос будет помечен как отклонённый, заявитель получит уведомление.',
1932
+ recallTitle: 'Отозвать этот запрос?',
1933
+ recallBody: 'После отзыва согласующие не смогут действовать, запись будет разблокирована.',
1934
+ inlineApproved: '«{{title}}» согласован',
1935
+ inlineRejected: '«{{title}}» отклонён',
1936
+ approvedFinal: 'Согласовано',
1937
+ approvedWaiting: 'Согласовано — ожидаются остальные согласующие',
1938
+ rejectedToast: 'Отклонено',
1939
+ recalledToast: 'Запрос отозван',
1940
+ whyDisabled: 'Действовать могут только назначенные согласующие. Ожидает: {{who}}.',
1941
+ whyDisabledSubmitter: 'Вы отправили этот запрос и можете его отозвать, но согласовать или отклонить могут только назначенные согласующие.',
1942
+ noActor: 'Не удалось определить идентичность',
1943
+ actionFailed: 'Действие не выполнено',
1944
+ loadFailed: 'Не удалось загрузить запрос',
1945
+ recallUnavailable: 'Отзыв недоступен в этой среде.',
1946
+ requestGone: 'Этот запрос больше не существует. Обновите список.',
1947
+ notAllowed: 'У вас нет прав на это действие.',
1948
+ alreadyDecided: 'Этот запрос уже обработан. Обновите список.',
1949
+ justNow: 'только что',
1950
+ minutesAgo: '{{count}} мин назад',
1951
+ hoursAgo: '{{count}} ч назад',
1952
+ daysAgo: '{{count}} дн назад',
1953
+ },
1954
+ preview: {
1955
+ empty: {
1956
+ loadFailedTitle: 'Не удалось загрузить предпросмотр черновика',
1957
+ loadFailedDescription: 'Не удалось прочитать слой черновика. Повторите попытку или проверьте соединение.',
1958
+ notReadyTitle: '«{{app}}» ещё нет в черновике',
1959
+ notReadyDescription: 'Сборка может ещё выполняться или завершилась с ошибкой до подготовки этого приложения. Проверьте статус сборки в диалоге — панель обновится, когда появятся черновики.',
1960
+ nothingTitle: 'Пока нечего предпросматривать',
1961
+ retry: 'Повторить',
1962
+ },
1963
+ draftBar: {
1964
+ message: 'Предпросмотр черновика — вы видите неопубликованные изменения. Ничего не вступит в силу до публикации.',
1965
+ publish: 'Опубликовать',
1966
+ publishing: 'Публикация…',
1967
+ exit: 'Выйти из предпросмотра',
1968
+ changes: 'Изменения',
1969
+ },
1970
+ changes: {
1971
+ title: 'Ожидающие изменения',
1972
+ description: 'Что изменит публикация. Новые элементы добавляются; обновления перезаписывают опубликованную версию.',
1973
+ loading: 'Загрузка ожидающих изменений…',
1974
+ loadFailed: 'Не удалось загрузить ожидающие изменения:',
1975
+ empty: 'Ничего не ожидает — все черновики опубликованы.',
1976
+ kindNew: 'Новое',
1977
+ kindUpdate: 'Обновление',
1314
1978
  },
1315
1979
  },
1980
+ filterBuilder: {
1981
+ where: "Где",
1982
+ and: "И",
1983
+ or: "ИЛИ",
1984
+ clearAll: "Очистить всё",
1985
+ selectField: "Выберите поле",
1986
+ operator: "Оператор",
1987
+ selectValue: "Выберите значение",
1988
+ value: "Значение",
1989
+ addFilter: "Добавить фильтр",
1990
+ removeCondition: "Удалить условие",
1991
+ trueLabel: "Да",
1992
+ falseLabel: "Нет",
1993
+ noResults: "Нет результатов",
1994
+ searchField: "Поиск {{label}}…",
1995
+ enterId: "Введите ID {{label}}",
1996
+ operators: {
1997
+ equals: "Равно",
1998
+ notEquals: "Не равно",
1999
+ contains: "Содержит",
2000
+ notContains: "Не содержит",
2001
+ isEmpty: "Пусто",
2002
+ isNotEmpty: "Не пусто",
2003
+ greaterThan: "Больше",
2004
+ lessThan: "Меньше",
2005
+ greaterOrEqual: "Больше или равно",
2006
+ lessOrEqual: "Меньше или равно",
2007
+ before: "До",
2008
+ after: "После",
2009
+ between: "Между",
2010
+ in: "В списке",
2011
+ notIn: "Не в списке",
2012
+ },
2013
+ },
2014
+ sortBuilder: {
2015
+ sortBy: "Сортировать по",
2016
+ thenBy: "Затем по",
2017
+ selectField: "Выберите поле",
2018
+ ascending: "A → Z",
2019
+ descending: "Z → A",
2020
+ addSort: "Добавить сортировку",
2021
+ removeSort: "Удалить сортировку",
2022
+ },
1316
2023
  };
1317
2024
  export default ru;