@object-ui/i18n 17.6.0 → 17.7.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.
- package/CHANGELOG.md +4320 -0
- package/README.md +192 -13
- package/dist/builtinAggregateLabels.d.ts +40 -0
- package/dist/builtinAggregateLabels.js +23 -0
- package/dist/currency.d.ts +27 -3
- package/dist/currency.js +28 -4
- package/dist/fallbackInterpolation.d.ts +79 -0
- package/dist/fallbackInterpolation.js +124 -0
- package/dist/i18n.d.ts +27 -1
- package/dist/i18n.js +99 -16
- package/dist/index.d.ts +7 -13
- package/dist/index.js +41 -17
- package/dist/locales/ar.d.ts +946 -113
- package/dist/locales/ar.js +1095 -161
- package/dist/locales/de.d.ts +618 -113
- package/dist/locales/de.js +715 -134
- package/dist/locales/en.d.ts +632 -127
- package/dist/locales/en.js +1044 -162
- package/dist/locales/es.d.ts +700 -113
- package/dist/locales/es.js +794 -130
- package/dist/locales/fr.d.ts +700 -113
- package/dist/locales/fr.js +795 -132
- package/dist/locales/index.d.ts +6990 -1169
- package/dist/locales/index.js +48 -9
- package/dist/locales/ja.d.ts +618 -113
- package/dist/locales/ja.js +708 -128
- package/dist/locales/ko.d.ts +618 -113
- package/dist/locales/ko.js +712 -132
- package/dist/locales/pt.d.ts +700 -113
- package/dist/locales/pt.js +794 -130
- package/dist/locales/registry.d.ts +102 -0
- package/dist/locales/registry.js +220 -0
- package/dist/locales/rtl.d.ts +24 -0
- package/dist/locales/rtl.js +26 -0
- package/dist/locales/ru.d.ts +782 -113
- package/dist/locales/ru.js +910 -152
- package/dist/locales/zh.d.ts +635 -130
- package/dist/locales/zh.js +725 -131
- package/dist/pickLocalized.d.ts +30 -0
- package/dist/pickLocalized.js +39 -0
- package/dist/provider.d.ts +101 -12
- package/dist/provider.js +335 -50
- package/dist/translateFn.d.ts +29 -0
- package/dist/translateFn.js +8 -0
- package/dist/useDisplayLocale.d.ts +11 -0
- package/dist/useDisplayLocale.js +11 -0
- package/dist/useObjectLabel.d.ts +40 -18
- package/dist/useObjectLabel.js +46 -14
- package/dist/useSafeTranslation.js +40 -42
- package/dist/utils/formatting.d.ts +16 -0
- package/dist/utils/formatting.js +23 -3
- package/dist/utils/spec-formatters.d.ts +13 -23
- package/dist/utils/spec-formatters.js +41 -2
- package/dist/utils/spec-translations.d.ts +16 -3
- package/dist/utils/spec-translations.js +52 -13
- package/package.json +12 -6
package/dist/locales/ru.js
CHANGED
|
@@ -19,10 +19,12 @@ const ru = {
|
|
|
19
19
|
manage_users: "Управление пользователями",
|
|
20
20
|
manage_org_users: "Управление пользователями организации",
|
|
21
21
|
manage_metadata: "Управление метаданными",
|
|
22
|
+
manage_org_presentation: "Управление представлением организации",
|
|
22
23
|
manage_platform_settings: "Управление настройками платформы",
|
|
23
24
|
setup_access: "Доступ к настройке",
|
|
24
25
|
setup_write: "Запись настроек",
|
|
25
26
|
studio_access: "Доступ к Studio",
|
|
27
|
+
manage_sharing: "Управление общим доступом",
|
|
26
28
|
},
|
|
27
29
|
group: {
|
|
28
30
|
platform: 'Платформа',
|
|
@@ -30,27 +32,38 @@ const ru = {
|
|
|
30
32
|
other: 'Другое',
|
|
31
33
|
},
|
|
32
34
|
},
|
|
33
|
-
// objectui#3546 slice six —
|
|
34
|
-
//
|
|
35
|
+
// objectui#3546 slice six — the read-only summary of PermissionFacetLink's six
|
|
36
|
+
// authorization facets, plus the Studio link.
|
|
35
37
|
//
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
//
|
|
41
|
-
// базовым ключом — форма не зависит от числа.
|
|
38
|
+
// The four count labels carry one slot per ru CLDR category (objectui#11432):
|
|
39
|
+
// `_one` 1/21/31… (nominative singular), `_few` 2-4/22-24… (genitive singular),
|
|
40
|
+
// `_many` 0/5-20… (genitive plural), `_other` fractions (genitive singular).
|
|
41
|
+
// The base key keeps the count-invariant «Существительное: {{count}}» form for
|
|
42
|
+
// a call made without a count.
|
|
42
43
|
perm: {
|
|
43
44
|
facet: {
|
|
44
45
|
none: "Нет",
|
|
45
46
|
more: "+{{count}} ещё",
|
|
46
47
|
objects: "Объектов: {{count}}",
|
|
47
|
-
objects_one: "
|
|
48
|
+
objects_one: "{{count}} объект",
|
|
49
|
+
objects_few: "{{count}} объекта",
|
|
50
|
+
objects_many: "{{count}} объектов",
|
|
51
|
+
objects_other: "{{count}} объекта",
|
|
48
52
|
fields: "Правил для полей: {{count}}",
|
|
49
|
-
fields_one: "
|
|
53
|
+
fields_one: "{{count}} правило для полей",
|
|
54
|
+
fields_few: "{{count}} правила для полей",
|
|
55
|
+
fields_many: "{{count}} правил для полей",
|
|
56
|
+
fields_other: "{{count}} правила для полей",
|
|
50
57
|
rls: "Политик RLS: {{count}}",
|
|
51
|
-
rls_one: "
|
|
58
|
+
rls_one: "{{count}} политика RLS",
|
|
59
|
+
rls_few: "{{count}} политики RLS",
|
|
60
|
+
rls_many: "{{count}} политик RLS",
|
|
61
|
+
rls_other: "{{count}} политики RLS",
|
|
52
62
|
tabs: "Правил для вкладок: {{count}}",
|
|
53
|
-
tabs_one: "
|
|
63
|
+
tabs_one: "{{count}} правило для вкладок",
|
|
64
|
+
tabs_few: "{{count}} правила для вкладок",
|
|
65
|
+
tabs_many: "{{count}} правил для вкладок",
|
|
66
|
+
tabs_other: "{{count}} правила для вкладок",
|
|
54
67
|
adminScope: "Делегированное администрирование настроено",
|
|
55
68
|
designInStudio: "Дизайн в Studio →",
|
|
56
69
|
designInStudioHint: "Дизайн в Studio",
|
|
@@ -69,7 +82,10 @@ const ru = {
|
|
|
69
82
|
selectFirst: 'Сначала выберите {{fields}}',
|
|
70
83
|
selectRecord: 'Выбрать запись',
|
|
71
84
|
recordCount: 'Записей: {{count}}',
|
|
72
|
-
|
|
85
|
+
recordCount_one: '{{count}} запись',
|
|
86
|
+
recordCount_few: '{{count}} записи',
|
|
87
|
+
recordCount_many: '{{count}} записей',
|
|
88
|
+
recordCount_other: '{{count}} записи',
|
|
73
89
|
pageOf: 'Страница {{current}} из {{total}}',
|
|
74
90
|
filters: 'Фильтры',
|
|
75
91
|
clear: 'Очистить',
|
|
@@ -121,8 +137,14 @@ const ru = {
|
|
|
121
137
|
closeChat: "Закрыть чат",
|
|
122
138
|
closePanel: "Закрыть панель",
|
|
123
139
|
resizeDrawer: "Изменить ширину панели",
|
|
124
|
-
|
|
125
|
-
|
|
140
|
+
// objectui#11445 — a count family: each slot agrees the noun with the
|
|
141
|
+
// number (one 1/21, few 2-4, many 5-20, other a fraction). The base key, a
|
|
142
|
+
// count-invariant form, answers a call made without a count.
|
|
143
|
+
itemCount: "Элементов: {{count}}",
|
|
144
|
+
itemCount_one: "{{count}} элемент",
|
|
145
|
+
itemCount_few: "{{count}} элемента",
|
|
146
|
+
itemCount_many: "{{count}} элементов",
|
|
147
|
+
itemCount_other: "{{count}} элемента",
|
|
126
148
|
toggleSidebar: "Переключить боковую панель",
|
|
127
149
|
package: "Пакет",
|
|
128
150
|
done: "Готово",
|
|
@@ -130,6 +152,16 @@ const ru = {
|
|
|
130
152
|
record: "Запись",
|
|
131
153
|
retry: "Повторить",
|
|
132
154
|
printDialogHint: "Открывает диалог печати браузера (это не экспорт в PDF)",
|
|
155
|
+
// The non-grid row ceiling's footnote (objectui#7210). Two keys because
|
|
156
|
+
// there are two conditions: a reported `total` states the fact with BOTH
|
|
157
|
+
// numbers, a missing one cannot name how many. Kept terse deliberately —
|
|
158
|
+
// this copy is eagerly loaded, and since objectui#7399 these bytes are
|
|
159
|
+
// budgeted by the `i18n-locales` chunk, not `framework`. ⛔ That ceiling's
|
|
160
|
+
// headroom is deliberately NOT restated here — it moves on every
|
|
161
|
+
// re-baseline, and the figure that was here went stale.
|
|
162
|
+
// `pnpm check:eager-closure` prints it.
|
|
163
|
+
rowCeilingNote: "Показаны первые {{shown}} из {{total}} записей. Сузьте фильтр.",
|
|
164
|
+
rowCeilingNoteUnknownTotal: "Показаны первые {{shown}} записей. Сузьте фильтр.",
|
|
133
165
|
},
|
|
134
166
|
actions: {
|
|
135
167
|
decisionOutput: {
|
|
@@ -141,6 +173,14 @@ const ru = {
|
|
|
141
173
|
acknowledge: 'Я сохранил(а) это',
|
|
142
174
|
copyAll: 'Копировать всё',
|
|
143
175
|
},
|
|
176
|
+
notAvailableHere: '«{{action}}» недоступно на текущей странице.',
|
|
177
|
+
completedSuccessfully: 'Действие успешно выполнено',
|
|
178
|
+
failed: 'Действие не выполнено',
|
|
179
|
+
parallelFailed: 'Одно или несколько параллельных действий не выполнены',
|
|
180
|
+
undo: 'Отменить',
|
|
181
|
+
undone: 'Изменение отменено',
|
|
182
|
+
undoneOperation: 'Отменить: {{description}}',
|
|
183
|
+
redoneOperation: 'Повторить: {{description}}',
|
|
144
184
|
},
|
|
145
185
|
validation: {
|
|
146
186
|
required: "Поле {{field}} обязательно для заполнения",
|
|
@@ -158,19 +198,45 @@ const ru = {
|
|
|
158
198
|
},
|
|
159
199
|
form: {
|
|
160
200
|
noPermissionToSave: "У вас нет прав на сохранение этой записи.",
|
|
201
|
+
noPermissionToCreate: "У вас нет прав на создание записей «{{object}}». Поля доступны только для чтения.",
|
|
202
|
+
noPermissionToEdit: "У вас нет прав на редактирование записей «{{object}}». Поля доступны только для чтения.",
|
|
161
203
|
submitFailed: "Не удалось сохранить. Попробуйте ещё раз.",
|
|
204
|
+
uploadInFlight: "Дождитесь завершения загрузки, прежде чем сохранять.",
|
|
205
|
+
clearedOnHide: "Очищено то, что больше не применимо к текущим значениям: {{fields}}",
|
|
206
|
+
visibleWhenFaulted: "Невозможно отправить: не удалось вычислить правило visibleWhen для {{fields}}. Правило нужно исправить, прежде чем эту форму можно будет отправить.",
|
|
162
207
|
discardTitle: "Отменить изменения?",
|
|
163
208
|
discardMessage: "Есть несохранённые изменения. Если закрыть форму сейчас, правки будут потеряны.",
|
|
164
209
|
// objectui#4024 — the create/edit dialog's `sr-only` accessible
|
|
165
210
|
// description, used when the form declares no `description` of its own.
|
|
166
211
|
dialogDescriptionFallback: "Заполните поля формы, затем отправьте или отмените.",
|
|
212
|
+
deniedDescription: "У вас нет прав на редактирование этого поля.",
|
|
213
|
+
masterDetail: {
|
|
214
|
+
loadingColumns: "Загрузка столбцов…",
|
|
215
|
+
subtotal: "Промежуточный итог",
|
|
216
|
+
tax: "Налог ({{rate}}%)",
|
|
217
|
+
total: "Итого",
|
|
218
|
+
lineItem: "Позиция",
|
|
219
|
+
rowTitle: "{{title}} — строка {{row}}",
|
|
220
|
+
applyRow: "Применить",
|
|
221
|
+
editorDescription: "Введите запись и её позиции, затем сохраните.",
|
|
222
|
+
noChildObject: "Для этой коллекции не настроен дочерний объект: укажите в {{property}} объект, строки которого она выводит.",
|
|
223
|
+
schemaUnavailable: "Не удалось загрузить схему {{object}}, поэтому у этой коллекции нет столбцов для отображения. Убедитесь, что объект существует и доступен для чтения, затем перезагрузите.",
|
|
224
|
+
noRelationshipField: "Не удалось определить, как {{object}} связан с {{parent}}: ни одно поле lookup или master_detail в нём не ссылается на родительский объект. Укажите в {{property}} этой коллекции поле, в котором хранится родительская запись.",
|
|
225
|
+
},
|
|
226
|
+
lineItems: {
|
|
227
|
+
title: "Позиции",
|
|
228
|
+
saveRecordFirst: "Сначала сохраните запись, чтобы добавить позиции.",
|
|
229
|
+
notLoaded: "Позиции этой записи не загружены.",
|
|
230
|
+
loadFailed: "Не удалось загрузить позиции",
|
|
231
|
+
saveFailed: "Не удалось сохранить позиции",
|
|
232
|
+
noChildObject: "Для этой панели не настроен дочерний объект: укажите в {{property}} объект, строки которого она выводит.",
|
|
233
|
+
},
|
|
167
234
|
keepEditing: "Продолжить редактирование",
|
|
168
235
|
discard: "Отменить",
|
|
169
236
|
conflictTitle: "Конфликт сохранения",
|
|
170
237
|
conflictMessage: "Пока вы редактировали, эту запись изменил другой пользователь. Перезапись заменит его изменения вашими.",
|
|
171
238
|
conflictLatestVersion: "Его сохранение: {{time}}",
|
|
172
239
|
conflictOverwrite: "Перезаписать",
|
|
173
|
-
addItem: "Добавить элемент",
|
|
174
240
|
removeItem: "Удалить элемент",
|
|
175
241
|
fieldRequired: "Это поле обязательно",
|
|
176
242
|
invalidFormat: "Неверный формат",
|
|
@@ -188,6 +254,12 @@ const ru = {
|
|
|
188
254
|
createSuccess: "{{object}} создан",
|
|
189
255
|
updateSuccess: "{{object}} обновлён",
|
|
190
256
|
deleteSuccess: "{{object}} удалён",
|
|
257
|
+
created: "Создано",
|
|
258
|
+
saved: "Сохранено",
|
|
259
|
+
savedNamed: "{{title}} сохранён",
|
|
260
|
+
submitted: "Отправлено",
|
|
261
|
+
errorLoading: "Ошибка загрузки формы",
|
|
262
|
+
navigateRefused: "Цель `navigateOnSuccess`, объявленная для этой формы, была отклонена, поэтому переход не выполнен.",
|
|
191
263
|
fullscreen: {
|
|
192
264
|
title: "Изменить текст",
|
|
193
265
|
description: "Измените полное текстовое значение, затем сохраните или отмените изменения.",
|
|
@@ -212,6 +284,10 @@ const ru = {
|
|
|
212
284
|
},
|
|
213
285
|
relativeDate: {
|
|
214
286
|
overdue: "Просрочено на {{count}} дн.",
|
|
287
|
+
overdue_one: "Просрочено на {{count}} дн.",
|
|
288
|
+
overdue_few: "Просрочено на {{count}} дн.",
|
|
289
|
+
overdue_many: "Просрочено на {{count}} дн.",
|
|
290
|
+
overdue_other: "Просрочено на {{count}} дн.",
|
|
215
291
|
},
|
|
216
292
|
file: {
|
|
217
293
|
dragDropHere: 'Перетащите файлы сюда',
|
|
@@ -228,6 +304,7 @@ const ru = {
|
|
|
228
304
|
remove: 'Удалить {{name}}',
|
|
229
305
|
exceedsMaxSize: '«{{name}}» превышает максимальный размер ({{max}} МБ)',
|
|
230
306
|
uploadFailed: 'Не удалось загрузить «{{name}}»: {{error}}',
|
|
307
|
+
uploadIncomplete: 'Загрузка «{{name}}» не завершена: идентификатор файла не получен, ничего не сохранено',
|
|
231
308
|
},
|
|
232
309
|
richText: {
|
|
233
310
|
format: "Формат: {{format}}",
|
|
@@ -255,6 +332,9 @@ const ru = {
|
|
|
255
332
|
selectBusinessUnit: "Выберите бизнес-подразделение",
|
|
256
333
|
selectPosition: "Выберите должность",
|
|
257
334
|
selectUnitAndSubordinates: "Выберите бизнес-подразделение",
|
|
335
|
+
selectField: "Выберите поле пользователя",
|
|
336
|
+
noUserFields: "В этом объекте нет полей пользователя",
|
|
337
|
+
fieldNotUserTyped: "{{name}} — не поле пользователя",
|
|
258
338
|
},
|
|
259
339
|
filterCondition: {
|
|
260
340
|
selectObjectFirst: "Сначала выберите объект.",
|
|
@@ -265,6 +345,26 @@ const ru = {
|
|
|
265
345
|
editAsJson: "Редактировать как JSON",
|
|
266
346
|
useVisualBuilder: "Использовать визуальный конструктор",
|
|
267
347
|
},
|
|
348
|
+
object: {
|
|
349
|
+
invalidJson: "Некорректный JSON",
|
|
350
|
+
},
|
|
351
|
+
location: {
|
|
352
|
+
refusedFormat: "Не сохранено: введите пару широта, долгота (например: 30.2741, 120.1551).",
|
|
353
|
+
refusedRange: "Не сохранено: {{detail}}",
|
|
354
|
+
latitude: "широта",
|
|
355
|
+
longitude: "долгота",
|
|
356
|
+
refusedResidueOne: "Не сохранено: {{name}} «{{text}}» — не число. Введите обычные десятичные дроби (например: 30.2741, 120.1551).",
|
|
357
|
+
refusedResidue: "Не сохранено: {{name}} «{{text}}» и {{otherName}} «{{otherText}}» — не числа. Введите обычные десятичные дроби (например: 30.2741, 120.1551).",
|
|
358
|
+
},
|
|
359
|
+
date: {
|
|
360
|
+
impossibleDay: "Сохранённое значение «{{value}}» — несуществующая дата. Выберите дату, чтобы заменить его.",
|
|
361
|
+
},
|
|
362
|
+
dateTime: {
|
|
363
|
+
impossibleDay: "Сохранённое значение «{{value}}» — несуществующая дата. Выберите дату и время, чтобы заменить его.",
|
|
364
|
+
},
|
|
365
|
+
number: {
|
|
366
|
+
badInput: "Не сохранено: текст в этом поле — не число. Введите обычную десятичную дробь (например: {{example}}).",
|
|
367
|
+
},
|
|
268
368
|
tags: {
|
|
269
369
|
placeholder: "Введите и нажмите Enter, чтобы добавить…",
|
|
270
370
|
},
|
|
@@ -280,6 +380,16 @@ const ru = {
|
|
|
280
380
|
characterCount: "Количество символов: {{count}} из {{max}}",
|
|
281
381
|
charactersRemaining: "Осталось символов: {{count}}",
|
|
282
382
|
},
|
|
383
|
+
grid: {
|
|
384
|
+
addLine: "Добавить строку",
|
|
385
|
+
noItems: "Нет элементов",
|
|
386
|
+
noItemsAddHint: "Пока нет элементов — нажмите «{{label}}», чтобы начать.",
|
|
387
|
+
optionalColumns: "Дополнительные столбцы",
|
|
388
|
+
computed: "Вычисляется",
|
|
389
|
+
openRow: "Открыть строку",
|
|
390
|
+
duplicateRow: "Дублировать строку",
|
|
391
|
+
removeRow: "Удалить строку",
|
|
392
|
+
},
|
|
283
393
|
},
|
|
284
394
|
table: {
|
|
285
395
|
rowsPerPage: "Строк на странице",
|
|
@@ -308,23 +418,47 @@ const ru = {
|
|
|
308
418
|
open: "Открыть",
|
|
309
419
|
search: "Поиск…",
|
|
310
420
|
modified: "{{count}} строк изменено",
|
|
421
|
+
modified_one: "Изменена {{count}} строка",
|
|
422
|
+
modified_few: "Изменено {{count}} строки",
|
|
423
|
+
modified_many: "Изменено {{count}} строк",
|
|
424
|
+
modified_other: "Изменено {{count}} строки",
|
|
311
425
|
saveFailed: 'Не удалось сохранить',
|
|
312
426
|
selected: "{{count}} выбрано",
|
|
427
|
+
selected_one: "Выбрано: {{count}}",
|
|
428
|
+
selected_few: "Выбрано: {{count}}",
|
|
429
|
+
selected_many: "Выбрано: {{count}}",
|
|
430
|
+
selected_other: "Выбрано: {{count}}",
|
|
313
431
|
edit: "Редактировать",
|
|
314
432
|
delete: "Удалить",
|
|
315
433
|
},
|
|
316
434
|
grid: {
|
|
317
435
|
bulkSelected: "Выбрано: {{count}}",
|
|
436
|
+
bulkSelected_one: "Выбрано: {{count}}",
|
|
437
|
+
bulkSelected_few: "Выбрано: {{count}}",
|
|
438
|
+
bulkSelected_many: "Выбрано: {{count}}",
|
|
439
|
+
bulkSelected_other: "Выбрано: {{count}}",
|
|
318
440
|
bulkSelectedAllMatches: "Выбрано: {{count}} (все совпадения)",
|
|
319
441
|
bulkClear: "Снять выделение",
|
|
320
442
|
bulkAllOnPage: "Выбраны все {{count}} на этой странице.",
|
|
443
|
+
bulkAllOnPage_one: "Выбраны все записи на этой странице ({{count}}).",
|
|
444
|
+
bulkAllOnPage_few: "Выбраны все записи на этой странице ({{count}}).",
|
|
445
|
+
bulkAllOnPage_many: "Выбраны все записи на этой странице ({{count}}).",
|
|
446
|
+
bulkAllOnPage_other: "Выбраны все записи на этой странице ({{count}}).",
|
|
321
447
|
bulkSelectAllMatching: "Выбрать все совпадения ({{count}})",
|
|
322
448
|
bulkAllMatchingSelected: "Выбраны все подходящие записи ({{count}}).",
|
|
323
449
|
bulk: {
|
|
324
450
|
confirmDefault: "Будет применено к записям: {{count}}.",
|
|
451
|
+
confirmDefault_one: "Будет применено к записям: {{count}}.",
|
|
452
|
+
confirmDefault_few: "Будет применено к записям: {{count}}.",
|
|
453
|
+
confirmDefault_many: "Будет применено к записям: {{count}}.",
|
|
454
|
+
confirmDefault_other: "Будет применено к записям: {{count}}.",
|
|
325
455
|
overLimit: "Выбрано ({{count}}) больше лимита действия ({{limit}}). Уменьшите выбор, чтобы продолжить.",
|
|
326
456
|
affectedRecords: "Затрагиваемые записи ({{count}}):",
|
|
327
457
|
skippedIneligible: '{{count}} из выбранных записей не подходят для этого действия и будут пропущены.',
|
|
458
|
+
skippedIneligible_one: '{{count}} из выбранных записей не подходит для этого действия и будет пропущена.',
|
|
459
|
+
skippedIneligible_few: '{{count}} из выбранных записей не подходят для этого действия и будут пропущены.',
|
|
460
|
+
skippedIneligible_many: '{{count}} из выбранных записей не подходят для этого действия и будут пропущены.',
|
|
461
|
+
skippedIneligible_other: '{{count}} из выбранных записей не подходят для этого действия и будут пропущены.',
|
|
328
462
|
rowFallback: "Строка {{index}}",
|
|
329
463
|
andMore: "… и ещё {{count}}",
|
|
330
464
|
processed: "Обработано {{count}} / {{total}}",
|
|
@@ -342,7 +476,6 @@ const ru = {
|
|
|
342
476
|
undo: "Отменить",
|
|
343
477
|
undoing: "Отмена…",
|
|
344
478
|
done: "Готово",
|
|
345
|
-
selectPlaceholder: "Выберите…",
|
|
346
479
|
loading: "Загрузка…",
|
|
347
480
|
},
|
|
348
481
|
actions: "Действия",
|
|
@@ -361,6 +494,14 @@ const ru = {
|
|
|
361
494
|
yes: "Да",
|
|
362
495
|
no: "Нет",
|
|
363
496
|
systemFields: "Система",
|
|
497
|
+
// objectui#10881 — the grouped grid's two refusals: over a data source
|
|
498
|
+
// that cannot answer the group header query, and over rows a host
|
|
499
|
+
// handed in while declaring them one page of more. `queryGroupHeaders`
|
|
500
|
+
// is the member's name and stays untranslated.
|
|
501
|
+
grouping: {
|
|
502
|
+
needsHeaderQuery: "Это представление сгруппировано, но его источник данных не реализует queryGroupHeaders, поэтому группы невозможно подсчитать. Уберите группировку, чтобы показать записи.",
|
|
503
|
+
needsWholeRows: "Для группировки нужны все записи, но этой таблице передана только одна их страница, поэтому группы невозможно подсчитать. Передайте все записи или позвольте таблице загрузить их из источника данных, который реализует queryGroupHeaders.",
|
|
504
|
+
},
|
|
364
505
|
// objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
|
|
365
506
|
// `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
|
|
366
507
|
// pack controls its own separator and word order.
|
|
@@ -387,10 +528,16 @@ const ru = {
|
|
|
387
528
|
},
|
|
388
529
|
import: {
|
|
389
530
|
downloadTemplate: "Скачать шаблон",
|
|
390
|
-
downloadTemplateHint: "Получите
|
|
531
|
+
downloadTemplateHint: "Получите файл Excel со столбцами, которые можно импортировать (обязательные поля отмечены *), и инструкцией по заполнению.",
|
|
391
532
|
templateFileName: "{{object}}-import-template",
|
|
533
|
+
templateDownloadFailed: "Не удалось скачать шаблон. Повторите попытку.",
|
|
534
|
+
templateNotPermitted: "У вас нет прав на создание записей этого объекта, поэтому шаблон импорта недоступен.",
|
|
392
535
|
autoMatched: "Сопоставлено автоматически",
|
|
393
536
|
autoMatchedSummary: "Автоматически сопоставлено столбцов: {{count}} — проверьте и скорректируйте ниже.",
|
|
537
|
+
autoMatchedSummary_one: "Автоматически сопоставлено столбцов: {{count}} — проверьте и скорректируйте ниже.",
|
|
538
|
+
autoMatchedSummary_few: "Автоматически сопоставлено столбцов: {{count}} — проверьте и скорректируйте ниже.",
|
|
539
|
+
autoMatchedSummary_many: "Автоматически сопоставлено столбцов: {{count}} — проверьте и скорректируйте ниже.",
|
|
540
|
+
autoMatchedSummary_other: "Автоматически сопоставлено столбцов: {{count}} — проверьте и скорректируйте ниже.",
|
|
394
541
|
confidence: {
|
|
395
542
|
high: "Высокая точность",
|
|
396
543
|
medium: "Средняя точность",
|
|
@@ -403,8 +550,20 @@ const ru = {
|
|
|
403
550
|
cancelImport: "Отменить импорт",
|
|
404
551
|
importCancelled: "Импорт отменён",
|
|
405
552
|
resultsTruncated: "Показаны результаты первых {{count}} строк (из {{total}}).",
|
|
553
|
+
resultsTruncated_one: "Показаны результаты первых строк: {{count}} (из {{total}}).",
|
|
554
|
+
resultsTruncated_few: "Показаны результаты первых строк: {{count}} (из {{total}}).",
|
|
555
|
+
resultsTruncated_many: "Показаны результаты первых строк: {{count}} (из {{total}}).",
|
|
556
|
+
resultsTruncated_other: "Показаны результаты первых строк: {{count}} (из {{total}}).",
|
|
406
557
|
createdCount: "Создано: {{count}}",
|
|
558
|
+
createdCount_one: "Создано: {{count}}",
|
|
559
|
+
createdCount_few: "Создано: {{count}}",
|
|
560
|
+
createdCount_many: "Создано: {{count}}",
|
|
561
|
+
createdCount_other: "Создано: {{count}}",
|
|
407
562
|
updatedCount: "Обновлено: {{count}}",
|
|
563
|
+
updatedCount_one: "Обновлено: {{count}}",
|
|
564
|
+
updatedCount_few: "Обновлено: {{count}}",
|
|
565
|
+
updatedCount_many: "Обновлено: {{count}}",
|
|
566
|
+
updatedCount_other: "Обновлено: {{count}}",
|
|
408
567
|
downloadFailed: "Скачать строки с ошибками",
|
|
409
568
|
options: "Параметры импорта",
|
|
410
569
|
writeMode: "Если строка совпадает с существующей записью",
|
|
@@ -452,6 +611,10 @@ const ru = {
|
|
|
452
611
|
historyColResult: "Результат",
|
|
453
612
|
historyColTime: "Когда",
|
|
454
613
|
errorCount: "Ошибок: {{count}}",
|
|
614
|
+
errorCount_one: "Ошибок: {{count}}",
|
|
615
|
+
errorCount_few: "Ошибок: {{count}}",
|
|
616
|
+
errorCount_many: "Ошибок: {{count}}",
|
|
617
|
+
errorCount_other: "Ошибок: {{count}}",
|
|
455
618
|
undoImport: "Отменить импорт",
|
|
456
619
|
undoing: "Отмена…",
|
|
457
620
|
undoConfirm: "Отменить этот импорт? Созданные им записи будут удалены, а обновлённые — восстановлены к прежним значениям.",
|
|
@@ -512,7 +675,15 @@ const ru = {
|
|
|
512
675
|
mapped: "Сопоставлено",
|
|
513
676
|
skipped: "Пропущено",
|
|
514
677
|
rowsWithErrors: "{{count}} строк с ошибками",
|
|
678
|
+
rowsWithErrors_one: "{{count}} строка с ошибками",
|
|
679
|
+
rowsWithErrors_few: "{{count}} строки с ошибками",
|
|
680
|
+
rowsWithErrors_many: "{{count}} строк с ошибками",
|
|
681
|
+
rowsWithErrors_other: "{{count}} строки с ошибками",
|
|
515
682
|
rowsCorrected: "{{count}} строк исправлено",
|
|
683
|
+
rowsCorrected_one: "Исправлена {{count}} строка",
|
|
684
|
+
rowsCorrected_few: "Исправлено {{count}} строки",
|
|
685
|
+
rowsCorrected_many: "Исправлено {{count}} строк",
|
|
686
|
+
rowsCorrected_other: "Исправлено {{count}} строки",
|
|
516
687
|
clickToFix: "— нажмите на выделенную ячейку для редактирования.",
|
|
517
688
|
showingRows: "Отображено {{shown}} из {{total}} строк",
|
|
518
689
|
importing: "Импорт… {{progress}}%",
|
|
@@ -520,11 +691,19 @@ const ru = {
|
|
|
520
691
|
imported: "{{count}} импортировано",
|
|
521
692
|
skippedCount: "{{count}} пропущено",
|
|
522
693
|
moreErrors: "…ещё {{count}} ошибок",
|
|
694
|
+
moreErrors_one: "…ещё {{count}} ошибка",
|
|
695
|
+
moreErrors_few: "…ещё {{count}} ошибки",
|
|
696
|
+
moreErrors_many: "…ещё {{count}} ошибок",
|
|
697
|
+
moreErrors_other: "…ещё {{count}} ошибки",
|
|
523
698
|
cancel: "Отмена",
|
|
524
699
|
back: "Назад",
|
|
525
700
|
next: "Далее",
|
|
526
701
|
close: "Закрыть",
|
|
527
702
|
importNRows: "Импортировать {{count}} строк",
|
|
703
|
+
importNRows_one: "Импортировать {{count}} строку",
|
|
704
|
+
importNRows_few: "Импортировать {{count}} строки",
|
|
705
|
+
importNRows_many: "Импортировать {{count}} строк",
|
|
706
|
+
importNRows_other: "Импортировать {{count}} строки",
|
|
528
707
|
importingProgress: "Импортируется…",
|
|
529
708
|
requiredMark: "*",
|
|
530
709
|
required: "Обязательно",
|
|
@@ -536,11 +715,39 @@ const ru = {
|
|
|
536
715
|
month: "Месяц",
|
|
537
716
|
week: "Неделя",
|
|
538
717
|
day: "День",
|
|
539
|
-
agenda: "Расписание",
|
|
540
718
|
allDay: "Весь день",
|
|
541
|
-
noEvents: "Нет событий",
|
|
542
719
|
newEvent: "Новое событие",
|
|
543
720
|
moreEvents: "+{{count}} ещё",
|
|
721
|
+
unscheduled: "Без даты ({{count}})",
|
|
722
|
+
loading: "Загрузка календаря…",
|
|
723
|
+
loadError: "Ошибка: {{message}}",
|
|
724
|
+
configRequired: "Требуется настройка календаря. Укажите startDateField — единственный обязательный ключ календаря; заголовок события определяется и без titleField.",
|
|
725
|
+
configRequiredHint: "Он относится к блоку calendar представления. У страницы интерфейса нет собственного слота календаря: укажите в её sourceView представление, которое его объявляет.",
|
|
726
|
+
eventDetails: "Сведения о событии",
|
|
727
|
+
pullToRefresh: "Потяните для обновления",
|
|
728
|
+
refreshing: "Обновление…",
|
|
729
|
+
onDate: "{{date}}",
|
|
730
|
+
eventTitle: "Название",
|
|
731
|
+
eventTitlePlaceholder: "О чём это событие?",
|
|
732
|
+
creating: "Создание…",
|
|
733
|
+
titleRequired: "Укажите название",
|
|
734
|
+
a11y: {
|
|
735
|
+
region: "Календарь",
|
|
736
|
+
grid: "Сетка календаря",
|
|
737
|
+
goToToday: "Перейти к сегодняшнему дню",
|
|
738
|
+
previousPeriod: "Предыдущий период",
|
|
739
|
+
nextPeriod: "Следующий период",
|
|
740
|
+
currentDate: "Текущая дата: {{date}}",
|
|
741
|
+
dayCell: "{{date}}, событий: {{count}}",
|
|
742
|
+
dayCell_one: "{{date}}, {{count}} событие",
|
|
743
|
+
dayCell_few: "{{date}}, {{count}} события",
|
|
744
|
+
dayCell_many: "{{date}}, {{count}} событий",
|
|
745
|
+
dayCell_other: "{{date}}, событий: {{count}}",
|
|
746
|
+
resizeEventEnd: "Изменить окончание события",
|
|
747
|
+
resizeEventEndHint: "Перетащите, чтобы изменить дату окончания",
|
|
748
|
+
resizeStart: "Изменить начало",
|
|
749
|
+
resizeEnd: "Изменить окончание",
|
|
750
|
+
},
|
|
544
751
|
},
|
|
545
752
|
list: {
|
|
546
753
|
firstRunTitle: "Здесь пока пусто",
|
|
@@ -582,8 +789,14 @@ const ru = {
|
|
|
582
789
|
},
|
|
583
790
|
refresh: "Обновить",
|
|
584
791
|
loading: "Загрузка записей…",
|
|
585
|
-
|
|
586
|
-
|
|
792
|
+
// objectui#11445 — a count family: each slot agrees the noun with the
|
|
793
|
+
// number (one 1/21, few 2-4, many 5-20, other a fraction). The base key, a
|
|
794
|
+
// count-invariant form, answers a call made without a count.
|
|
795
|
+
recordCount: "Записей: {{count}}",
|
|
796
|
+
recordCount_one: "{{count}} запись",
|
|
797
|
+
recordCount_few: "{{count}} записи",
|
|
798
|
+
recordCount_many: "{{count}} записей",
|
|
799
|
+
recordCount_other: "{{count}} записи",
|
|
587
800
|
addRecord: "Добавить запись",
|
|
588
801
|
tabs: "Вкладки",
|
|
589
802
|
allRecords: "Все записи",
|
|
@@ -615,7 +828,7 @@ const ru = {
|
|
|
615
828
|
hideFieldsTitle: "Скрыть поля",
|
|
616
829
|
dataLimitReached: "Отображаются первые {{limit}} записей. Возможно, есть ещё данные.",
|
|
617
830
|
viewSettings: "Настройки представления",
|
|
618
|
-
viewSettingsHint: "Группировка, цвет, плотность и отображаемые поля.",
|
|
831
|
+
viewSettingsHint: "Группировка, цвет, плотность и отображаемые поля. Применяется ко всем пользователям этого представления.",
|
|
619
832
|
addGroup: "Добавить поле группировки",
|
|
620
833
|
collapsedByDefault: "Свёрнуто по умолчанию",
|
|
621
834
|
removeGroup: "Удалить",
|
|
@@ -680,6 +893,17 @@ const ru = {
|
|
|
680
893
|
},
|
|
681
894
|
gantt: {
|
|
682
895
|
rowLabel: "Элементы",
|
|
896
|
+
unusableRange: {
|
|
897
|
+
malformedDate: "Непригодный диапазон дат гантта — {{path}} равно {{value}}, что не является корректной датой. Все даты гантта должны разбираться: startDate и endDate каждого элемента строки, а также minDate / maxDate, заданные в схеме.",
|
|
898
|
+
malformedRow: "Непригодные строки гантта — {{path}} равно {{value}}, что не является формой строки. Гантт читает items как список строк, каждую строку — как объект с label и собственными items, а items каждой строки — как список полос; null, число, строка или простой объект в любом из этих мест не могут быть отрисованы.",
|
|
899
|
+
inverted: "Непригодный диапазон дат гантта — minDate {{minDate}} позже maxDate {{maxDate}}. Заданные minDate / maxDate имеют приоритет над диапазоном, вычисленным по строкам, поэтому у этой оси нет столбцов и полосу разместить негде; поменяйте оба значения местами.",
|
|
900
|
+
},
|
|
901
|
+
},
|
|
902
|
+
unsupported: {
|
|
903
|
+
objectBoundGantt: "Неподдерживаемый вариант \"gantt\" — временная шкала, привязанная к объекту, отображает ленточные варианты ({{variants}}). Для гантта нужны литеральные строки, каждая со своим вложенным items, поэтому ось гантта (scale) здесь не действует.",
|
|
904
|
+
},
|
|
905
|
+
unconfigured: {
|
|
906
|
+
noDateAxis: "Требуется ось дат временной шкалы — это представление не объявляет ни одного поля даты, а временная шкала, привязанная к объекту, не придумывает его сама. Объявите одно из: {{fields}}. Первое — написание из спецификации, остальные — устаревшие псевдонимы.",
|
|
683
907
|
},
|
|
684
908
|
},
|
|
685
909
|
gantt: {
|
|
@@ -697,6 +921,7 @@ const ru = {
|
|
|
697
921
|
},
|
|
698
922
|
aria: {
|
|
699
923
|
taskList: "Список задач",
|
|
924
|
+
refreshing: "Обновление…",
|
|
700
925
|
},
|
|
701
926
|
tooltip: {
|
|
702
927
|
days: "дн",
|
|
@@ -742,13 +967,25 @@ const ru = {
|
|
|
742
967
|
conflict: {
|
|
743
968
|
title: "Конфликт расписания",
|
|
744
969
|
body: "Это перемещение противоречит ограничениям зависимостей. Автоматически перепланировать затронутые задачи ({{count}})?",
|
|
970
|
+
body_one: "Это перемещение противоречит ограничениям зависимостей. Автоматически перепланировать затронутые задачи ({{count}})?",
|
|
971
|
+
body_few: "Это перемещение противоречит ограничениям зависимостей. Автоматически перепланировать затронутые задачи ({{count}})?",
|
|
972
|
+
body_many: "Это перемещение противоречит ограничениям зависимостей. Автоматически перепланировать затронутые задачи ({{count}})?",
|
|
973
|
+
body_other: "Это перемещение противоречит ограничениям зависимостей. Автоматически перепланировать затронутые задачи ({{count}})?",
|
|
745
974
|
confirm: "Перепланировать автоматически",
|
|
746
975
|
cancel: "Оставить как есть",
|
|
747
976
|
},
|
|
748
977
|
autoScheduleDlg: {
|
|
749
978
|
title: "Автопланирование",
|
|
750
979
|
body: "Сдвинуть {{count}} задач(и) на более поздний срок, чтобы соблюсти связи зависимостей?",
|
|
980
|
+
body_one: "Сдвинуть {{count}} задачу на более поздний срок, чтобы соблюсти связи зависимостей?",
|
|
981
|
+
body_few: "Сдвинуть {{count}} задачи на более поздний срок, чтобы соблюсти связи зависимостей?",
|
|
982
|
+
body_many: "Сдвинуть {{count}} задач на более поздний срок, чтобы соблюсти связи зависимостей?",
|
|
983
|
+
body_other: "Сдвинуть {{count}} задачи на более поздний срок, чтобы соблюсти связи зависимостей?",
|
|
751
984
|
skipped: "{{count}} заблокированных задач(и) также нарушают связи и были пропущены.",
|
|
985
|
+
skipped_one: "{{count}} заблокированная задача также нарушает связи и была пропущена.",
|
|
986
|
+
skipped_few: "{{count}} заблокированные задачи также нарушают связи и были пропущены.",
|
|
987
|
+
skipped_many: "{{count}} заблокированных задач также нарушают связи и были пропущены.",
|
|
988
|
+
skipped_other: "{{count}} заблокированной задачи также нарушают связи и были пропущены.",
|
|
752
989
|
confirm: "Применить",
|
|
753
990
|
cancel: "Отмена",
|
|
754
991
|
none: "Все зависимости соблюдены — перепланировать нечего.",
|
|
@@ -827,6 +1064,7 @@ const ru = {
|
|
|
827
1064
|
tabActionsFor: "Действия с представлением {{name}}",
|
|
828
1065
|
readonlyAriaLabel: "Представление только для чтения",
|
|
829
1066
|
readonlyTooltip: "Системное представление — определено в коде, только для чтения.",
|
|
1067
|
+
malformedFilter: "Фильтр этого представления некорректен, поэтому записи не отображаются: условие {{subject}} невозможно применить.",
|
|
830
1068
|
},
|
|
831
1069
|
designer: {
|
|
832
1070
|
undo: "Отменить",
|
|
@@ -853,8 +1091,14 @@ const ru = {
|
|
|
853
1091
|
addReaction: "Добавить реакцию",
|
|
854
1092
|
pageHeaderActions: "Действия в заголовке страницы",
|
|
855
1093
|
emojiPicker: "Выбор эмодзи",
|
|
856
|
-
|
|
857
|
-
|
|
1094
|
+
// objectui#11445 — a count family: each slot agrees the noun with the
|
|
1095
|
+
// number (one 1/21, few 2-4, many 5-20, other a fraction). The base key, a
|
|
1096
|
+
// count-invariant form, answers a call made without a count.
|
|
1097
|
+
reactionCount: "{{emoji}} Реакций: {{count}}",
|
|
1098
|
+
reactionCount_one: "{{emoji}} {{count}} реакция",
|
|
1099
|
+
reactionCount_few: "{{emoji}} {{count}} реакции",
|
|
1100
|
+
reactionCount_many: "{{emoji}} {{count}} реакций",
|
|
1101
|
+
reactionCount_other: "{{emoji}} {{count}} реакции",
|
|
858
1102
|
recordDetail: "Сведения о записи",
|
|
859
1103
|
recordDetailWithLabel: "Сведения: {{label}}",
|
|
860
1104
|
openAsFullPage: "Открыть на всю страницу",
|
|
@@ -881,7 +1125,6 @@ const ru = {
|
|
|
881
1125
|
viewAll: "Показать все",
|
|
882
1126
|
new: "Создать",
|
|
883
1127
|
add: "Добавить",
|
|
884
|
-
emptyValue: "—",
|
|
885
1128
|
activity: "Активность",
|
|
886
1129
|
editRow: "Редактировать",
|
|
887
1130
|
deleteRow: "Удалить",
|
|
@@ -893,6 +1136,7 @@ const ru = {
|
|
|
893
1136
|
sortBy: "Сортировать по",
|
|
894
1137
|
filterPlaceholder: "Фильтр…",
|
|
895
1138
|
highlightFields: "Ключевые поля",
|
|
1139
|
+
highlightsLabel: "Ключевые поля записи",
|
|
896
1140
|
comments: "Комментарии",
|
|
897
1141
|
searchComments: "Поиск комментариев…",
|
|
898
1142
|
addCommentPlaceholder: "Добавить комментарий… (Ctrl+Enter для отправки)",
|
|
@@ -903,11 +1147,26 @@ const ru = {
|
|
|
903
1147
|
unpin: "Открепить",
|
|
904
1148
|
justNow: "только что",
|
|
905
1149
|
minutesAgo: "{{count}} мин. назад",
|
|
1150
|
+
minutesAgo_one: "{{count}} мин. назад",
|
|
1151
|
+
minutesAgo_few: "{{count}} мин. назад",
|
|
1152
|
+
minutesAgo_many: "{{count}} мин. назад",
|
|
1153
|
+
minutesAgo_other: "{{count}} мин. назад",
|
|
906
1154
|
hoursAgo: "{{count}} ч. назад",
|
|
1155
|
+
hoursAgo_one: "{{count}} ч. назад",
|
|
1156
|
+
hoursAgo_few: "{{count}} ч. назад",
|
|
1157
|
+
hoursAgo_many: "{{count}} ч. назад",
|
|
1158
|
+
hoursAgo_other: "{{count}} ч. назад",
|
|
907
1159
|
daysAgo: "{{count}} дн. назад",
|
|
1160
|
+
daysAgo_one: "{{count}} дн. назад",
|
|
1161
|
+
daysAgo_few: "{{count}} дн. назад",
|
|
1162
|
+
daysAgo_many: "{{count}} дн. назад",
|
|
1163
|
+
daysAgo_other: "{{count}} дн. назад",
|
|
908
1164
|
dropFilesToUpload: "Перетащите файлы сюда или нажмите для загрузки",
|
|
909
1165
|
attachmentCount: "{{count}} вложение",
|
|
910
|
-
|
|
1166
|
+
attachmentCount_one: "{{count}} вложение",
|
|
1167
|
+
attachmentCount_few: "{{count}} вложения",
|
|
1168
|
+
attachmentCount_many: "{{count}} вложений",
|
|
1169
|
+
attachmentCount_other: "{{count}} вложения",
|
|
911
1170
|
removeAttachment: "Удалить вложение",
|
|
912
1171
|
// Record Attachments panel (enable.files, objectstack#4358)
|
|
913
1172
|
attachments: "Вложения",
|
|
@@ -925,11 +1184,6 @@ const ru = {
|
|
|
925
1184
|
attachmentsLoadFailed: "Не удалось загрузить вложения этой записи.",
|
|
926
1185
|
attachmentsApiUnavailable: "Список вложений недоступен для этого объекта.",
|
|
927
1186
|
retryLoadAttachments: "Повторить",
|
|
928
|
-
unifiedDiff: "Единое представление",
|
|
929
|
-
sideBySideDiff: "Параллельное представление",
|
|
930
|
-
noChanges: "Нет изменений",
|
|
931
|
-
previousVersion: "Предыдущая",
|
|
932
|
-
currentVersion: "Текущая",
|
|
933
1187
|
discussion: "Обсуждение",
|
|
934
1188
|
showDiscussion: "Показать обсуждение ({{count}})",
|
|
935
1189
|
hideDiscussion: "Скрыть обсуждение",
|
|
@@ -944,25 +1198,37 @@ const ru = {
|
|
|
944
1198
|
writeComment: "Написать комментарий…",
|
|
945
1199
|
subscribedTooltip: "Подписаны — нажмите для отписки",
|
|
946
1200
|
unsubscribedTooltip: "Подписаться на уведомления",
|
|
947
|
-
firstRecord: "Первая запись (Home)",
|
|
948
|
-
previousRecordKey: "Предыдущая запись (←)",
|
|
949
|
-
nextRecordKey: "Следующая запись (→)",
|
|
950
|
-
lastRecord: "Последняя запись (End)",
|
|
951
1201
|
noRecords: "Нет записей",
|
|
952
|
-
searchWhileNavigating: "Поиск при навигации",
|
|
953
|
-
searchRecords: "Поиск записей…",
|
|
954
1202
|
allActivity: "Вся активность",
|
|
955
1203
|
commentsOnly: "Только комментарии",
|
|
956
1204
|
fieldChangesFilter: "Изменения полей",
|
|
957
1205
|
tasksOnly: "Только задачи",
|
|
958
1206
|
leaveCommentPlaceholder: "Оставить комментарий… (Ctrl+Enter для отправки)",
|
|
959
1207
|
noActivity: "Нет зарегистрированной активности",
|
|
1208
|
+
activityAccessDenied: "У вас нет разрешения на просмотр активности этой записи.",
|
|
1209
|
+
commentsAccessDenied: "У вас нет разрешения на просмотр комментариев к этой записи.",
|
|
1210
|
+
// objectui#7149 — the rest of `ActivityTimeline`. The four chip labels the
|
|
1211
|
+
// `detail.*` pack did not already name, and the `formatFieldChange`
|
|
1212
|
+
// sentences, which are assembled in code and so need interpolation holes.
|
|
1213
|
+
allFilter: 'Все',
|
|
1214
|
+
createsFilter: 'Создания',
|
|
1215
|
+
deletesFilter: 'Удаления',
|
|
1216
|
+
statusChangesFilter: 'Изменения статуса',
|
|
1217
|
+
activityEmptyValue: '(пусто)',
|
|
1218
|
+
activityFieldChanged: 'Изменено поле {{field}} с «{{old}}» на «{{new}}»',
|
|
1219
|
+
activityCreated: 'Создал эту запись',
|
|
1220
|
+
activityDeleted: 'Удалил эту запись',
|
|
1221
|
+
activityStatusChanged: 'Изменил статус на «{{value}}»',
|
|
1222
|
+
activityUpdated: 'Обновил запись',
|
|
960
1223
|
loadMore: "Загрузить ещё",
|
|
961
1224
|
edited: "(изменено)",
|
|
962
1225
|
via: "через {{source}}",
|
|
963
1226
|
viewSource: "Показать источник",
|
|
964
1227
|
replyCount: "{{count}} ответ",
|
|
965
|
-
|
|
1228
|
+
replyCount_one: "{{count}} ответ",
|
|
1229
|
+
replyCount_few: "{{count}} ответа",
|
|
1230
|
+
replyCount_many: "{{count}} ответов",
|
|
1231
|
+
replyCount_other: "{{count}} ответа",
|
|
966
1232
|
replyPlaceholder: "Ответить…",
|
|
967
1233
|
filterActivity: "Фильтр активности",
|
|
968
1234
|
openDiscussion: "Открыть панель обсуждения",
|
|
@@ -977,6 +1243,7 @@ const ru = {
|
|
|
977
1243
|
writeStrippedReadonly: "Поля только для чтения, поэтому не применены: {{fields}}",
|
|
978
1244
|
writeStrippedByState: "Поля недоступны для редактирования в текущем состоянии записи, поэтому не применены: {{fields}}",
|
|
979
1245
|
writeStrippedPrimaryKey: "Идентификатор записи нельзя изменить при сохранении, поэтому поля не применены: {{fields}}",
|
|
1246
|
+
writeStrippedComputed: "Поля вычисляются сервером по формуле, поэтому отправленные значения не применены: {{fields}}",
|
|
980
1247
|
writeStrippedUnknownReason: "Не применены сервером: {{fields}}",
|
|
981
1248
|
approvalPendingEditable: "На согласовании · редактирование доступно",
|
|
982
1249
|
approvalPendingTooltip: "У этой записи есть ожидающий запрос на согласование, но этот шаг всё ещё разрешает редактирование",
|
|
@@ -998,6 +1265,8 @@ const ru = {
|
|
|
998
1265
|
pathStageLostUpcoming: '{{stage}}, проигран, не достигнут',
|
|
999
1266
|
pathStageWonUpcoming: '{{stage}}, целевой этап, не достигнут',
|
|
1000
1267
|
linkCopied: "Ссылка скопирована в буфер обмена",
|
|
1268
|
+
commentFailed: "Комментарий не опубликован. Ничего не сохранено — попробуйте ещё раз.",
|
|
1269
|
+
reactionFailed: "Реакция не сохранена. Попробуйте ещё раз.",
|
|
1001
1270
|
linkCopyFailed: "Не удалось скопировать ссылку",
|
|
1002
1271
|
cancel: "Отмена",
|
|
1003
1272
|
cancelEdit: "Отменить изменения",
|
|
@@ -1018,39 +1287,70 @@ const ru = {
|
|
|
1018
1287
|
deleteRowTitle: "Удалить запись",
|
|
1019
1288
|
createdBy: "Создано",
|
|
1020
1289
|
updatedBy: "Обновлено",
|
|
1021
|
-
// objectui#3863 — base key,
|
|
1022
|
-
//
|
|
1023
|
-
//
|
|
1024
|
-
//
|
|
1025
|
-
//
|
|
1026
|
-
// correct for EVERY Russian count. `_one` keeps the agreeing form for 1/21/31/…
|
|
1290
|
+
// objectui#3863 — base key, answering only a call made without a count: since
|
|
1291
|
+
// objectui#11432 every ru category has its own slot — `_one` 1/21/31…, `_few`
|
|
1292
|
+
// 2-4/22-24… and `_many` 0/5-20… (genitive plural after the substantivised
|
|
1293
|
+
// adjective in both), `_other` fractions (genitive singular). The base keeps the
|
|
1294
|
+
// count-invariant «Существительное: {{count}}» form.
|
|
1027
1295
|
showEmptyRelated: "+ Пустых: {{count}}",
|
|
1028
1296
|
showEmptyRelated_one: "+ {{count}} пустое",
|
|
1029
|
-
|
|
1297
|
+
showEmptyRelated_few: "+ {{count}} пустых",
|
|
1298
|
+
showEmptyRelated_many: "+ {{count}} пустых",
|
|
1299
|
+
showEmptyRelated_other: "+ {{count}} пустого",
|
|
1030
1300
|
copyEmail: "Копировать email",
|
|
1031
1301
|
copyPhone: "Копировать телефон",
|
|
1032
1302
|
copyRecordId: "Копировать ID записи",
|
|
1033
1303
|
showEmptyFields: "Показать {{count}} пустых полей",
|
|
1304
|
+
showEmptyFields_one: "Показать {{count}} пустое поле",
|
|
1305
|
+
showEmptyFields_few: "Показать {{count}} пустых поля",
|
|
1306
|
+
showEmptyFields_many: "Показать {{count}} пустых полей",
|
|
1307
|
+
showEmptyFields_other: "Показать {{count}} пустого поля",
|
|
1034
1308
|
hideEmptyFields: "Скрыть пустые поля",
|
|
1035
1309
|
noValue: "Нет значения",
|
|
1310
|
+
unresolvedReference: "Неразрешённая ссылка: {{value}} не удалось сопоставить с пользователем",
|
|
1311
|
+
unresolvedLookupReference: "Неразрешённая ссылка: {{value}} не удалось сопоставить с записью на этом экране",
|
|
1312
|
+
repeaterItemCount: "Элементов: {{count}}",
|
|
1313
|
+
repeaterItemCount_one: "{{count}} элемент",
|
|
1314
|
+
repeaterItemCount_few: "{{count}} элемента",
|
|
1315
|
+
repeaterItemCount_many: "{{count}} элементов",
|
|
1316
|
+
repeaterItemCount_other: "{{count}} элемента",
|
|
1317
|
+
fileCount: "Файлов: {{count}}",
|
|
1318
|
+
fileCount_one: "{{count}} файл",
|
|
1319
|
+
fileCount_few: "{{count}} файла",
|
|
1320
|
+
fileCount_many: "{{count}} файлов",
|
|
1321
|
+
fileCount_other: "{{count}} файла",
|
|
1036
1322
|
},
|
|
1037
1323
|
chart: {
|
|
1038
|
-
noData: "Нет данных для графика",
|
|
1039
1324
|
loading: "Загрузка графика…",
|
|
1325
|
+
refreshing: "Обновление…",
|
|
1040
1326
|
nullCategory: "(Не указано)",
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
markersCount: "{{count}} маркеров",
|
|
1046
|
-
invalidCoordinates: "{{count}} запись с отсутствующими или недействительными координатами исключена из карты.",
|
|
1047
|
-
invalidCoordinatesPlural: "{{count}} записей с отсутствующими или недействительными координатами исключены из карты.",
|
|
1327
|
+
scatterOneMeasure: "Точечная диаграмма строит только одну меру. Оставьте один ряд:",
|
|
1328
|
+
unconfigured: {
|
|
1329
|
+
noCategoryAxis: "Требуется ось категорий диаграммы — диаграмма, привязанная к объекту, не придумывает её. Объявите одно из:",
|
|
1330
|
+
},
|
|
1048
1331
|
},
|
|
1049
1332
|
dashboard: {
|
|
1050
|
-
|
|
1333
|
+
// objectui#7063 — the DEFAULT empty state every dashboard widget renders
|
|
1334
|
+
// when its query SUCCEEDED and returned nothing. It replaced the terse
|
|
1335
|
+
// per-widget `noRows` / `noDataAvailable` fragments at the render site;
|
|
1336
|
+
// objectui#7125 deleted those two keys from all ten packs once nothing
|
|
1337
|
+
// read them. The copy here has to read as a state rather than a failure,
|
|
1338
|
+
// which is why it says the widget loaded. `sourceLabel` carries its own
|
|
1339
|
+
// punctuation so the call site concatenates no separator (see
|
|
1340
|
+
// `WidgetEmptyState`).
|
|
1341
|
+
empty: {
|
|
1342
|
+
title: "Данных пока нет",
|
|
1343
|
+
message: "Виджет успешно загружен, но запрос пока не вернул ни одной записи.",
|
|
1344
|
+
sourceLabel: "Источник данных:",
|
|
1345
|
+
},
|
|
1051
1346
|
loading: "Загрузка…",
|
|
1347
|
+
refreshing: "Обновление…",
|
|
1348
|
+
refreshAll: "Обновить все",
|
|
1349
|
+
refreshDashboard: "Обновить дашборд",
|
|
1052
1350
|
pickMeasures: "Выберите меры (значения) для этого виджета набора данных.",
|
|
1053
1351
|
datasetUnsupported: "Этот источник данных не поддерживает запросы к наборам данных.",
|
|
1352
|
+
widgetForbiddenTitle: "Нет доступа",
|
|
1353
|
+
widgetForbiddenMessage: "У вас нет прав на просмотр данных этого виджета.",
|
|
1054
1354
|
details: "Подробности",
|
|
1055
1355
|
exportCsv: "Экспорт в CSV",
|
|
1056
1356
|
openInList: "Открыть в списке",
|
|
@@ -1078,12 +1378,10 @@ const ru = {
|
|
|
1078
1378
|
},
|
|
1079
1379
|
},
|
|
1080
1380
|
addWidget: "Добавить виджет",
|
|
1081
|
-
removeWidget: "Удалить виджет",
|
|
1082
1381
|
editLayout: "Редактировать макет",
|
|
1083
1382
|
saveLayout: "Сохранить макет",
|
|
1084
1383
|
resetLayout: "Сбросить макет",
|
|
1085
1384
|
total: "Итого",
|
|
1086
|
-
noDataAvailable: "Данные недоступны",
|
|
1087
1385
|
noDataSourceFor: "Нет источника данных для",
|
|
1088
1386
|
config: {
|
|
1089
1387
|
breadcrumb: {
|
|
@@ -1205,10 +1503,6 @@ const ru = {
|
|
|
1205
1503
|
appDescription: "Описание",
|
|
1206
1504
|
appIcon: "Значок",
|
|
1207
1505
|
template: "Шаблон",
|
|
1208
|
-
layout: "Макет",
|
|
1209
|
-
layoutSidebar: "Боковая панель",
|
|
1210
|
-
layoutHeader: "Заголовок",
|
|
1211
|
-
layoutEmpty: "Пусто",
|
|
1212
1506
|
selectObjects: "Выбрать объекты",
|
|
1213
1507
|
searchObjects: "Поиск объектов…",
|
|
1214
1508
|
selectAll: "Выбрать все",
|
|
@@ -1217,7 +1511,6 @@ const ru = {
|
|
|
1217
1511
|
addGroup: "Добавить группу",
|
|
1218
1512
|
addUrl: "Добавить URL",
|
|
1219
1513
|
addSeparator: "Добавить разделитель",
|
|
1220
|
-
noNavItems: "Элементов навигации пока нет.",
|
|
1221
1514
|
logoUrl: "Logo URL",
|
|
1222
1515
|
primaryColor: "Основной цвет",
|
|
1223
1516
|
faviconUrl: "Favicon URL",
|
|
@@ -1244,13 +1537,12 @@ const ru = {
|
|
|
1244
1537
|
appearance: "Внешний вид",
|
|
1245
1538
|
rowHeight: "Высота строки",
|
|
1246
1539
|
livePreview: "Предпросмотр в реальном времени",
|
|
1247
|
-
stepBasicDesc: "Имя, заголовок и
|
|
1540
|
+
stepBasicDesc: "Имя, заголовок и значок",
|
|
1248
1541
|
stepObjectsDesc: "Выбрать бизнес-объекты",
|
|
1249
1542
|
stepNavigationDesc: "Построить дерево навигации",
|
|
1250
1543
|
stepBrandingDesc: "Логотип, цвета и фавикон",
|
|
1251
1544
|
noObjectsFound: "Объекты не найдены.",
|
|
1252
1545
|
noNavItemsHint: "Элементов навигации пока нет. Выберите объекты на предыдущем шаге или добавьте вручную.",
|
|
1253
|
-
separator: "Разделитель",
|
|
1254
1546
|
separatorLabel: "— Разделитель —",
|
|
1255
1547
|
newGroup: "Новая группа",
|
|
1256
1548
|
newLink: "Новая ссылка",
|
|
@@ -1284,6 +1576,7 @@ const ru = {
|
|
|
1284
1576
|
navTypeSeparator: "Разделитель",
|
|
1285
1577
|
navTypeAction: "Действие",
|
|
1286
1578
|
navTypeComponent: "Компонент",
|
|
1579
|
+
navTypeDoc: "Документ",
|
|
1287
1580
|
navEditIcon: "Редактировать значок",
|
|
1288
1581
|
navToggleVisible: "Переключить видимость",
|
|
1289
1582
|
navHidden: "Скрыто",
|
|
@@ -1361,11 +1654,8 @@ const ru = {
|
|
|
1361
1654
|
defaultValue: "Значение по умолчанию",
|
|
1362
1655
|
placeholder: "Заполнитель",
|
|
1363
1656
|
referenceTo: "Ссылка на",
|
|
1364
|
-
formula: "Формула",
|
|
1365
1657
|
options: "Параметры",
|
|
1366
1658
|
addOption: "Добавить параметр",
|
|
1367
|
-
validationRules: "Правила валидации",
|
|
1368
|
-
addRule: "Добавить правило",
|
|
1369
1659
|
systemBadge: "Система",
|
|
1370
1660
|
ungrouped: "Общее",
|
|
1371
1661
|
deleteConfirmTitle: "Удалить поле?",
|
|
@@ -1384,7 +1674,25 @@ const ru = {
|
|
|
1384
1674
|
},
|
|
1385
1675
|
},
|
|
1386
1676
|
console: {
|
|
1677
|
+
studio: {
|
|
1678
|
+
backToHome: "На главную",
|
|
1679
|
+
},
|
|
1387
1680
|
saveAdvisoryTitle: "Сохранено — проверка авторинга выдала рекомендаций: {{count}}",
|
|
1681
|
+
saveAdvisoryTitle_one: "Сохранено — проверка авторинга выдала рекомендаций: {{count}}",
|
|
1682
|
+
saveAdvisoryTitle_few: "Сохранено — проверка авторинга выдала рекомендаций: {{count}}",
|
|
1683
|
+
saveAdvisoryTitle_many: "Сохранено — проверка авторинга выдала рекомендаций: {{count}}",
|
|
1684
|
+
saveAdvisoryTitle_other: "Сохранено — проверка авторинга выдала рекомендаций: {{count}}",
|
|
1685
|
+
publishAdvisoryTitle: "Опубликовано — проверка авторинга выдала рекомендаций: {{count}}",
|
|
1686
|
+
publishAdvisoryTitle_one: "Опубликовано — проверка авторинга выдала рекомендаций: {{count}}",
|
|
1687
|
+
publishAdvisoryTitle_few: "Опубликовано — проверка авторинга выдала рекомендаций: {{count}}",
|
|
1688
|
+
publishAdvisoryTitle_many: "Опубликовано — проверка авторинга выдала рекомендаций: {{count}}",
|
|
1689
|
+
publishAdvisoryTitle_other: "Опубликовано — проверка авторинга выдала рекомендаций: {{count}}",
|
|
1690
|
+
importMappingsUnavailable: "Не удалось загрузить сохранённые сопоставления импорта для {{object}}",
|
|
1691
|
+
importMappingsRefused: "Сервер отклонил этот запрос, поэтому список пуст из-за того, что его не удалось прочитать, а не потому, что ничего не зарегистрировано. Войдите заново или запросите доступ у администратора.",
|
|
1692
|
+
importMappingsUnreadable: "Список пуст из-за того, что его не удалось прочитать, а не потому, что ничего не зарегистрировано. Повторите попытку и сообщите о проблеме, если она повторяется.",
|
|
1693
|
+
savedViewsUnavailable: "Не удалось загрузить сохранённые представления для {{object}}",
|
|
1694
|
+
savedViewsRefused: "Сервер отклонил этот запрос, поэтому список пуст из-за того, что его не удалось прочитать, а не потому, что у этого объекта нет сохранённых представлений. Войдите заново или запросите доступ у администратора.",
|
|
1695
|
+
savedViewsUnreadable: "Список пуст из-за того, что его не удалось прочитать, а не потому, что у этого объекта нет сохранённых представлений. Повторите попытку и сообщите о проблеме, если она повторяется.",
|
|
1388
1696
|
settingsHub: {
|
|
1389
1697
|
title: "Настройки",
|
|
1390
1698
|
subtitle: "Настройте рабочее пространство, интеграции и флаги функций.",
|
|
@@ -1447,9 +1755,20 @@ const ru = {
|
|
|
1447
1755
|
statusFull: "Лимит исчерпан",
|
|
1448
1756
|
resetsDaily: "Сбросится сегодня ночью",
|
|
1449
1757
|
resetsMonthly: "Сбросится в следующем цикле",
|
|
1758
|
+
resetsWeeklyDays: "Сброс через {{count}} дней",
|
|
1759
|
+
resetsWeeklyDays_one: "Сброс через {{count}} день",
|
|
1760
|
+
resetsWeeklyDays_few: "Сброс через {{count}} дня",
|
|
1761
|
+
resetsWeeklyDays_many: "Сброс через {{count}} дней",
|
|
1762
|
+
resetsWeeklyDays_other: "Сброс через {{count}} дня",
|
|
1763
|
+
resetsWeeklyHours: "Сброс через {{count}} часов",
|
|
1764
|
+
resetsWeeklyHours_one: "Сброс через {{count}} час",
|
|
1765
|
+
resetsWeeklyHours_few: "Сброс через {{count}} часа",
|
|
1766
|
+
resetsWeeklyHours_many: "Сброс через {{count}} часов",
|
|
1767
|
+
resetsWeeklyHours_other: "Сброс через {{count}} часа",
|
|
1450
1768
|
ctaUpgrade: "Повысьте тариф, чтобы продолжить",
|
|
1451
1769
|
ctaTopUp: "Добавьте кредиты, чтобы продолжить",
|
|
1452
1770
|
ariaLabel: "Использование ИИ: {{status}}",
|
|
1771
|
+
breakdownTitle: "Использовано на данный момент",
|
|
1453
1772
|
},
|
|
1454
1773
|
workspaceTitle: "Рабочее пространство ИИ",
|
|
1455
1774
|
workspaceSubtitle: "Задавайте вопросы, изучайте и возвращайтесь к диалогам",
|
|
@@ -1459,6 +1778,31 @@ const ru = {
|
|
|
1459
1778
|
share: "Поделиться",
|
|
1460
1779
|
shareTitle: "Поделиться этим диалогом",
|
|
1461
1780
|
shareDisabledTitle: "Начните диалог, чтобы включить публикацию",
|
|
1781
|
+
buildDoctor: "Диагностика сборки",
|
|
1782
|
+
buildDoctorTitle: "Диагностика сборки — что на самом деле применено?",
|
|
1783
|
+
buildDoctorDisabledTitle: "Сначала отправьте сообщение",
|
|
1784
|
+
buildDoctorDrawer: {
|
|
1785
|
+
description: 'Что заявил агент и что на самом деле действует. Диагностика только для чтения.',
|
|
1786
|
+
reconciling: 'Сверка…',
|
|
1787
|
+
notAvailable: 'Недоступно — беседа не найдена или у вас нет доступа.',
|
|
1788
|
+
untitled: '(без названия)',
|
|
1789
|
+
summary: 'Ходов: {{turns}} · сообщений: {{messages}} · токенов: {{tokens}} · LLM: {{seconds}} с',
|
|
1790
|
+
allLive: 'Все попытки изменений ({{count}}) действуют — ничего не потерялось.',
|
|
1791
|
+
discrepancies: 'Расхождений: {{count}} — сказанное в чате не совпадает с тем, что действует.',
|
|
1792
|
+
orphanedTitle: 'Предложено, но не применено',
|
|
1793
|
+
orphanedHint: 'Карточку подтверждения, предложенную агентом, не применил ни один последующий ход — изменение незаметно потерялось.',
|
|
1794
|
+
missingTitle: 'Заявлено, но отсутствует',
|
|
1795
|
+
missingHint: 'Результат инструмента сообщил, что изменение применено, но артефакт не действует в sys_metadata.',
|
|
1796
|
+
toolErrorsTitle: 'Ошибки инструментов',
|
|
1797
|
+
toolErrorsHint: 'Вызовы инструментов, вернувшие ошибку во время сборки.',
|
|
1798
|
+
verifyTitle: 'Проверка сборки (verify_build)',
|
|
1799
|
+
yourApp: 'Ваше приложение:',
|
|
1800
|
+
noIssues: 'Проблем: 0',
|
|
1801
|
+
issueCount: 'Проблем: {{count}}',
|
|
1802
|
+
platformNoise: 'Скрыто находок платформы sys_*: {{count}}',
|
|
1803
|
+
pendingActions: 'Ожидающие действия',
|
|
1804
|
+
timeline: 'Хронология ({{count}})',
|
|
1805
|
+
},
|
|
1462
1806
|
newChat: "Создать",
|
|
1463
1807
|
searchChats: "Поиск по чатам…",
|
|
1464
1808
|
noChatsYet: "Чатов пока нет",
|
|
@@ -1488,7 +1832,7 @@ const ru = {
|
|
|
1488
1832
|
empty: {
|
|
1489
1833
|
build: {
|
|
1490
1834
|
title: "Создать с помощью ИИ",
|
|
1491
|
-
description: "Опишите приложение
|
|
1835
|
+
description: "Опишите приложение обычными словами — я подготовлю объекты, экраны и демонстрационные данные, а вы проверите и опубликуете.",
|
|
1492
1836
|
},
|
|
1493
1837
|
ask: {
|
|
1494
1838
|
title: "Спросите свои данные",
|
|
@@ -1497,7 +1841,7 @@ const ru = {
|
|
|
1497
1841
|
editApp: {
|
|
1498
1842
|
title: "Редактирование «{{app}}»",
|
|
1499
1843
|
titleGeneric: "Редактировать это приложение",
|
|
1500
|
-
description: "Что нужно изменить? Я изменю это приложение на месте — добавлю поле, объект, представление или
|
|
1844
|
+
description: "Что нужно изменить? Я изменю это приложение на месте — добавлю поле, объект, представление или дашборд либо скорректирую существующее.",
|
|
1501
1845
|
},
|
|
1502
1846
|
},
|
|
1503
1847
|
clearConversation: "Очистить",
|
|
@@ -1550,23 +1894,41 @@ const ru = {
|
|
|
1550
1894
|
recentRecords: "Перечисли 5 последних созданных записей.",
|
|
1551
1895
|
recordCounts: "Посчитай количество записей по каждому объекту.",
|
|
1552
1896
|
},
|
|
1897
|
+
// cloud#1984 — these five chips are the maker's own recommendations, so
|
|
1898
|
+
// they may only ask for what ADR-0112 v1 BUILDS: objects, fields, views
|
|
1899
|
+
// (grid/kanban/calendar/gallery), pages, dashboards and sample data. No
|
|
1900
|
+
// wording that promises autonomous behaviour (alert / remind / notify /
|
|
1901
|
+
// automate / status workflow) — v1 has no flows, actions or schedules, and
|
|
1902
|
+
// the model silently degrades such a request into a board or a filtered
|
|
1903
|
+
// view, so the chip would promise an alert and deliver a page. REVERT to
|
|
1904
|
+
// the automation wording when ADR-0112 v2 re-adds flows and actions.
|
|
1553
1905
|
metadataAssistant: {
|
|
1554
|
-
buildCrm: "Создай CRM для продаж — клиенты, контакты и
|
|
1555
|
-
buildApp: "Создай трекер проектов — проекты, задачи с ответственными и сроками, доска по
|
|
1556
|
-
buildFlow: "Спроектируй службу поддержки — заявки с
|
|
1557
|
-
buildInventory: "Создай приложение для склада — товары, остатки, поставщики и
|
|
1558
|
-
buildRecruiting: "Создай трекер кандидатов — кандидаты, открытые вакансии,
|
|
1906
|
+
buildCrm: "Создай CRM для продаж — клиенты, контакты и сделки с полем этапа, а также дашборд с суммой сделок по этапам.",
|
|
1907
|
+
buildApp: "Создай трекер проектов — проекты, задачи с ответственными и сроками, доска по статусам и календарь сроков.",
|
|
1908
|
+
buildFlow: "Спроектируй службу поддержки — заявки с полями приоритета и статуса, доска по статусам и связи с клиентами.",
|
|
1909
|
+
buildInventory: "Создай приложение для склада — товары, остатки, поставщики и представление, отбирающее товары ниже точки заказа.",
|
|
1910
|
+
buildRecruiting: "Создай трекер кандидатов — кандидаты, открытые вакансии, поле этапа собеседования и доска по этапам.",
|
|
1559
1911
|
},
|
|
1560
1912
|
generic: {
|
|
1561
1913
|
help: "Чем ты можешь мне помочь?",
|
|
1562
1914
|
availableObjects: "Перечисли доступные объекты данных.",
|
|
1563
1915
|
recentActivity: "Сделай сводку моей недавней активности.",
|
|
1564
1916
|
},
|
|
1917
|
+
// objectui#7709 — the edit-mode starters, shown when the maker is bound
|
|
1918
|
+
// to an EXISTING app (`?package=`). Same rule as the five above: they
|
|
1919
|
+
// may only ask for what ADR-0112 v1 BUILDS. The fourth chip used to be
|
|
1920
|
+
// `addAutomation` ("an approval, a status flow, or a notification") and
|
|
1921
|
+
// every capability it named is refused by v1 (cloud#1956 / PR #1970), so
|
|
1922
|
+
// it now asks for sample data — `seed` IS on v1's whitelist, and having
|
|
1923
|
+
// no data is what an existing app most often lacks. REVERT: when
|
|
1924
|
+
// ADR-0112 v2 re-adds flows and actions, THIS chip's automation wording
|
|
1925
|
+
// comes back as `addAutomation`; the retired string is pinned for every
|
|
1926
|
+
// pack in `packages/i18n/src/__tests__/makerEditChips-v1-scope-7709.test.ts`.
|
|
1565
1927
|
editApp: {
|
|
1566
1928
|
addField: "Добавь поле в один из объектов.",
|
|
1567
1929
|
addObject: "Добавь новый объект и свяжи его с существующим.",
|
|
1568
1930
|
addDashboard: "Добавь дашборд с ключевыми показателями.",
|
|
1569
|
-
|
|
1931
|
+
addSampleData: "Заполни существующие объекты правдоподобными демонстрационными записями, чтобы приложение можно было показать.",
|
|
1570
1932
|
},
|
|
1571
1933
|
},
|
|
1572
1934
|
changesTitle: "Подтвердите изменения",
|
|
@@ -1648,6 +2010,13 @@ const ru = {
|
|
|
1648
2010
|
pages: "Страницы",
|
|
1649
2011
|
reports: "Отчёты",
|
|
1650
2012
|
system: "Система",
|
|
2013
|
+
marketplace: "Маркетплейс",
|
|
2014
|
+
settings: 'Настройки',
|
|
2015
|
+
apps: 'Приложения',
|
|
2016
|
+
profile: 'Профиль',
|
|
2017
|
+
approvals: 'Согласования',
|
|
2018
|
+
aiApprovals: 'Согласования ИИ',
|
|
2019
|
+
auditLog: 'Журнал аудита',
|
|
1651
2020
|
},
|
|
1652
2021
|
// objectui#4024 — the single-namespace settings screen. Its sibling
|
|
1653
2022
|
// `settingsHub` above already resolved through this pack; the view was the
|
|
@@ -1667,7 +2036,9 @@ const ru = {
|
|
|
1667
2036
|
saveChanges: "Сохранить изменения",
|
|
1668
2037
|
unsavedCount: "Несохранённых изменений: {{count}}",
|
|
1669
2038
|
unsavedCount_one: "{{count}} несохранённое изменение",
|
|
1670
|
-
|
|
2039
|
+
unsavedCount_few: "{{count}} несохранённых изменения",
|
|
2040
|
+
unsavedCount_many: "{{count}} несохранённых изменений",
|
|
2041
|
+
unsavedCount_other: "{{count}} несохранённого изменения",
|
|
1671
2042
|
cryptoRefusalTitle: "Эта установка не может шифровать секреты",
|
|
1672
2043
|
cryptoRefusalSubjectSuffix: "объявлен зашифрованным, поэтому ничего не было записано.",
|
|
1673
2044
|
cryptoRefusalNoSubject: "Значение, объявленное зашифрованным, было отклонено, поэтому ничего не было записано.",
|
|
@@ -1739,6 +2110,21 @@ const ru = {
|
|
|
1739
2110
|
records: "Записи",
|
|
1740
2111
|
recentRecords: "Недавно просмотренные",
|
|
1741
2112
|
},
|
|
2113
|
+
// objectui#9954 — see the `en` pack for what raises each case.
|
|
2114
|
+
readRate: {
|
|
2115
|
+
ratioTitle: 'Необычный объём чтения в этой среде',
|
|
2116
|
+
ratio: 'На каждую записанную строку читается {{ratio}} строк. Платформа отмечает всё, что выше {{threshold}}. Ничто не ограничивается и не блокируется; это отчёт, чтобы можно было проверить схему чтения.',
|
|
2117
|
+
noWritesTitle: 'Чтение вообще без записи в этой среде',
|
|
2118
|
+
noWrites: 'Строки читаются, но не записывается ни одной, поэтому у скорости чтения нет верхней границы. Это самый серьёзный показатель. Платформа отмечает всё, что выше {{threshold}}. Ничто не ограничивается и не блокируется; это отчёт, чтобы можно было проверить схему чтения.',
|
|
2119
|
+
},
|
|
2120
|
+
// objectui#10439 — see the `en` pack for what raises each case.
|
|
2121
|
+
storageUsage: {
|
|
2122
|
+
warningTitle: 'Хранилище почти заполнено',
|
|
2123
|
+
warning: 'Использовано {{used}} МБ из {{limit}} МБ. Когда хранилище заполнится, загрузка файлов и импорт будут приостановлены.',
|
|
2124
|
+
blockedTitle: 'Хранилище заполнено: загрузка файлов и импорт приостановлены',
|
|
2125
|
+
blocked: 'Использовано {{used}} МБ из {{limit}} МБ. Существующие данные не затронуты; чтение, экспорт и редактирование отдельных записей по-прежнему работают.',
|
|
2126
|
+
upgrade: 'Повысьте тариф, чтобы продолжить',
|
|
2127
|
+
},
|
|
1742
2128
|
errors: {
|
|
1743
2129
|
somethingWentWrong: "Что-то пошло не так",
|
|
1744
2130
|
unexpectedError: "При отображении этого представления произошла непредвиденная ошибка.",
|
|
@@ -1769,6 +2155,7 @@ const ru = {
|
|
|
1769
2155
|
viewNameInvalid: "Используйте строчные латинские буквы, цифры и подчёркивания; начните с буквы или подчёркивания.",
|
|
1770
2156
|
systemViewReadonly: "Системное представление определено в коде — только для чтения.",
|
|
1771
2157
|
cannotEditMetaView: "Это встроенное представление, определённое в коде, — изменить его нельзя.",
|
|
2158
|
+
viewConfigPermissionDenied: "Настройки представления применяются ко всем пользователям этого представления, поэтому их изменение требует разрешения «Управление метаданными». Обратитесь к администратору, чтобы внести это изменение.",
|
|
1772
2159
|
cannotDeleteMetaView: "Это встроенное представление, определённое в коде, — удалить его нельзя.",
|
|
1773
2160
|
expandToPage: "Открыть на всю страницу",
|
|
1774
2161
|
objectNotFound: "Объект не найден",
|
|
@@ -1779,12 +2166,18 @@ const ru = {
|
|
|
1779
2166
|
allRecords: "Все записи",
|
|
1780
2167
|
new: "Создать",
|
|
1781
2168
|
configureView: "Настроить представление",
|
|
1782
|
-
toolbar: "Панель инструментов",
|
|
1783
2169
|
toolbarEnabledCount: "{{count}} из {{total}} включено",
|
|
1784
2170
|
searchFields: "Поиск полей…",
|
|
1785
2171
|
title: "Заголовок",
|
|
1786
2172
|
viewType: "Тип представления",
|
|
1787
|
-
|
|
2173
|
+
// objectui#11445 — a count family: each slot agrees the noun with the
|
|
2174
|
+
// number (one 1/21, few 2-4, many 5-20, other a fraction). The base key, a
|
|
2175
|
+
// count-invariant form, answers a call made without a count.
|
|
2176
|
+
recordCount: "Записей: {{count}}",
|
|
2177
|
+
recordCount_one: "{{count}} запись",
|
|
2178
|
+
recordCount_few: "{{count}} записи",
|
|
2179
|
+
recordCount_many: "{{count}} записей",
|
|
2180
|
+
recordCount_other: "{{count}} записи",
|
|
1788
2181
|
save: "Сохранить",
|
|
1789
2182
|
discard: "Отменить",
|
|
1790
2183
|
createView: "Создать представление",
|
|
@@ -1796,11 +2189,14 @@ const ru = {
|
|
|
1796
2189
|
longitudeField: "Поле долготы",
|
|
1797
2190
|
imageField: "Поле изображения",
|
|
1798
2191
|
selectField: "Выберите поле…",
|
|
1799
|
-
groupBy: "Группировать по",
|
|
1800
2192
|
endDateField: "Поле даты окончания",
|
|
1801
2193
|
import: "Импорт",
|
|
1802
2194
|
importTitle: "Импорт из CSV",
|
|
1803
2195
|
importedToast: "{{count}} строк импортировано.",
|
|
2196
|
+
importedToast_one: "Импортирована {{count}} строка.",
|
|
2197
|
+
importedToast_few: "Импортировано {{count}} строки.",
|
|
2198
|
+
importedToast_many: "Импортировано {{count}} строк.",
|
|
2199
|
+
importedToast_other: "Импортировано {{count}} строки.",
|
|
1804
2200
|
importedWithSkipped: "{{ok}} строк импортировано; {{skipped}} пропущено.",
|
|
1805
2201
|
createViewDesc: "Выберите тип представления и задайте ему имя. Все настройки можно изменить позже.",
|
|
1806
2202
|
cancel: "Отмена",
|
|
@@ -1809,6 +2205,10 @@ const ru = {
|
|
|
1809
2205
|
deleteViewTitle: "Удалить представление",
|
|
1810
2206
|
deleteViewConfirm: "Удалить представление \"{{name}}\"? Это действие нельзя отменить.",
|
|
1811
2207
|
bulkDeleteConfirm: "Удалить {{count}} выбранных записей? Это действие нельзя отменить.",
|
|
2208
|
+
bulkDeleteConfirm_one: "Удалить {{count}} выбранную запись? Это действие нельзя отменить.",
|
|
2209
|
+
bulkDeleteConfirm_few: "Удалить {{count}} выбранные записи? Это действие нельзя отменить.",
|
|
2210
|
+
bulkDeleteConfirm_many: "Удалить {{count}} выбранных записей? Это действие нельзя отменить.",
|
|
2211
|
+
bulkDeleteConfirm_other: "Удалить {{count}} выбранной записи? Это действие нельзя отменить.",
|
|
1812
2212
|
duplicateViewName: "Представление с таким именем уже существует.",
|
|
1813
2213
|
viewTypeGrid: "Таблица",
|
|
1814
2214
|
viewTypeGridDesc: "Таблица записей в стиле электронной таблицы.",
|
|
@@ -1845,10 +2245,14 @@ const ru = {
|
|
|
1845
2245
|
chartTypePie: "Круговая",
|
|
1846
2246
|
chartTypeArea: "Областная",
|
|
1847
2247
|
chartTypeScatter: "Точечная",
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
2248
|
+
dataset: "Набор данных",
|
|
2249
|
+
datasetHelp: "Диаграмма берёт значения из этого набора данных объекта.",
|
|
2250
|
+
chartMeasure: "Мера",
|
|
2251
|
+
chartMeasureHelp: "Мера набора данных, отображаемая на оси значений.",
|
|
2252
|
+
chartDimension: "Измерение",
|
|
2253
|
+
chartDimensionHelp: "Измерение набора данных, по которому группируются значения (необязательно).",
|
|
2254
|
+
viewTypeUnavailableDataset: "Этот объект не предоставляет набора данных для диаграммы.",
|
|
2255
|
+
noDatasetMeasure: "В этом наборе данных не объявлено ни одной меры для диаграммы.",
|
|
1852
2256
|
ufTabs: "Вкладки",
|
|
1853
2257
|
ufAddField: "+ Добавить поле фильтра…",
|
|
1854
2258
|
ufShowAllRecords: "Показать вкладку \"Все записи\"",
|
|
@@ -1862,6 +2266,9 @@ const ru = {
|
|
|
1862
2266
|
unpinItem: "Открепить {{name}}",
|
|
1863
2267
|
dragToReorder: "Перетащите для изменения порядка",
|
|
1864
2268
|
favorites: "Избранное",
|
|
2269
|
+
launcherLabel: "Панель приложений",
|
|
2270
|
+
menuLabel: "Навигация приложения",
|
|
2271
|
+
menuEmpty: "В этом приложении нет доступных для открытия элементов навигации.",
|
|
1865
2272
|
},
|
|
1866
2273
|
},
|
|
1867
2274
|
auth: {
|
|
@@ -1915,6 +2322,8 @@ const ru = {
|
|
|
1915
2322
|
resendOtpCountdownText: "Отправить снова через {seconds} с",
|
|
1916
2323
|
usePhoneOtpText: "Войти по коду подтверждения",
|
|
1917
2324
|
usePasswordSignInText: "Войти с паролем",
|
|
2325
|
+
socialButton: "Продолжить через {provider}",
|
|
2326
|
+
orText: "или продолжите с электронной почтой",
|
|
1918
2327
|
},
|
|
1919
2328
|
register: {
|
|
1920
2329
|
title: "Создать аккаунт",
|
|
@@ -1933,8 +2342,12 @@ const ru = {
|
|
|
1933
2342
|
submittingButton: "Создание аккаунта…",
|
|
1934
2343
|
hasAccountText: "Уже есть аккаунт?",
|
|
1935
2344
|
signInText: "Войти",
|
|
2345
|
+
socialButton: "Зарегистрироваться через {provider}",
|
|
2346
|
+
orText: "или продолжите с электронной почтой",
|
|
1936
2347
|
errors: {
|
|
1937
2348
|
userExists: "Аккаунт с таким email уже существует. Попробуйте войти.",
|
|
2349
|
+
selfRegistrationClosed: "Самостоятельная регистрация в этой среде закрыта. Обратитесь к администратору за приглашением.",
|
|
2350
|
+
emailDomainNotAllowed: "Регистрация с адресами этого домена здесь не разрешена. Используйте email вашей организации или обратитесь к администратору за приглашением.",
|
|
1938
2351
|
},
|
|
1939
2352
|
verifyInbox: {
|
|
1940
2353
|
title: "Проверьте входящие",
|
|
@@ -2133,6 +2546,15 @@ const ru = {
|
|
|
2133
2546
|
role: "Роль",
|
|
2134
2547
|
save: "Сохранить изменения",
|
|
2135
2548
|
},
|
|
2549
|
+
language: {
|
|
2550
|
+
title: "Язык",
|
|
2551
|
+
description: "Язык уведомлений и сообщений, которые отправляются вам. Язык интерфейса выбирается отдельно — в меню с глобусом.",
|
|
2552
|
+
label: "Предпочитаемый язык",
|
|
2553
|
+
systemDefault: "Использовать значение по умолчанию для развёртывания",
|
|
2554
|
+
save: "Сохранить",
|
|
2555
|
+
saved: "Языковые настройки обновлены.",
|
|
2556
|
+
readOnly: "Язык вашей учётной записи настраивает администратор.",
|
|
2557
|
+
},
|
|
2136
2558
|
password: {
|
|
2137
2559
|
changeTitle: "Изменить пароль",
|
|
2138
2560
|
setTitle: "Задать локальный пароль",
|
|
@@ -2164,7 +2586,6 @@ const ru = {
|
|
|
2164
2586
|
label: "Рабочие пространства",
|
|
2165
2587
|
default: "Моё рабочее пространство",
|
|
2166
2588
|
switch: "Переключить рабочее пространство",
|
|
2167
|
-
create: "Создать рабочее пространство",
|
|
2168
2589
|
createTitle: "Создать рабочее пространство",
|
|
2169
2590
|
createDescription: "Рабочее пространство — это общее место для совместной работы вашей команды.",
|
|
2170
2591
|
createButton: "Создать рабочее пространство",
|
|
@@ -2189,7 +2610,6 @@ const ru = {
|
|
|
2189
2610
|
packageManagement: "Управление пакетами",
|
|
2190
2611
|
searchNavigation: "Поиск по навигации…",
|
|
2191
2612
|
settings: "Настройки",
|
|
2192
|
-
help: "Помощь",
|
|
2193
2613
|
helpTooltip: "Помощь и документация",
|
|
2194
2614
|
activityFeed: "Лента активности",
|
|
2195
2615
|
notifications: "Уведомления",
|
|
@@ -2249,6 +2669,10 @@ const ru = {
|
|
|
2249
2669
|
},
|
|
2250
2670
|
pendingDrafts: {
|
|
2251
2671
|
message: "У вас {{count}} неопубликованных изменений — опубликуйте их, чтобы они вступили в силу.",
|
|
2672
|
+
message_one: "У вас {{count}} неопубликованное изменение — опубликуйте его, чтобы оно вступило в силу.",
|
|
2673
|
+
message_few: "У вас {{count}} неопубликованных изменения — опубликуйте их, чтобы они вступили в силу.",
|
|
2674
|
+
message_many: "У вас {{count}} неопубликованных изменений — опубликуйте их, чтобы они вступили в силу.",
|
|
2675
|
+
message_other: "У вас {{count}} неопубликованного изменения — опубликуйте их, чтобы они вступили в силу.",
|
|
2252
2676
|
cta: "Опубликовать",
|
|
2253
2677
|
publishing: "Публикация…",
|
|
2254
2678
|
published: "Опубликовано! Изменения вступили в силу.",
|
|
@@ -2264,7 +2688,6 @@ const ru = {
|
|
|
2264
2688
|
capabilityWarn: "Проверка при создании — несуществующих ссылок на возможности: {{count}}.",
|
|
2265
2689
|
},
|
|
2266
2690
|
title: "Главная",
|
|
2267
|
-
subtitle: "Панель вашего рабочего пространства",
|
|
2268
2691
|
nav: "Главная",
|
|
2269
2692
|
allApps: "Все приложения",
|
|
2270
2693
|
yourApps: "Ваши приложения",
|
|
@@ -2276,8 +2699,6 @@ const ru = {
|
|
|
2276
2699
|
empty: "Всё выполнено",
|
|
2277
2700
|
},
|
|
2278
2701
|
loading: "Загрузка рабочего пространства…",
|
|
2279
|
-
recent: "Недавние",
|
|
2280
|
-
starred: "Избранные",
|
|
2281
2702
|
welcome: "Добро пожаловать в ObjectUI",
|
|
2282
2703
|
welcomeDescription: "Начните с создания вашего первого приложения или настройки системы.",
|
|
2283
2704
|
createFirstApp: "Создайте первое приложение",
|
|
@@ -2285,8 +2706,6 @@ const ru = {
|
|
|
2285
2706
|
browseMarketplace: "Обзор маркетплейса приложений",
|
|
2286
2707
|
quickActions: {
|
|
2287
2708
|
title: "Быстрые действия",
|
|
2288
|
-
createApp: "Создать приложение",
|
|
2289
|
-
createAppDesc: "Начните с нового приложения",
|
|
2290
2709
|
manageObjects: "Управление объектами",
|
|
2291
2710
|
manageObjectsDesc: "Настройте модели данных",
|
|
2292
2711
|
systemSettings: "Системные настройки",
|
|
@@ -2302,18 +2721,15 @@ const ru = {
|
|
|
2302
2721
|
greetingNight: "Ночная смена",
|
|
2303
2722
|
heroTagline: "Продолжите с того места, где остановились, или откройте что-то новое.",
|
|
2304
2723
|
open: "Открыть",
|
|
2305
|
-
stats: {
|
|
2306
|
-
apps: "Приложения",
|
|
2307
|
-
starred: "Отмеченные",
|
|
2308
|
-
recent: "Недавние",
|
|
2309
|
-
},
|
|
2310
2724
|
recentApps: {
|
|
2311
2725
|
title: "Недавно открытые",
|
|
2312
2726
|
itemType: {
|
|
2313
2727
|
object: "Объект",
|
|
2314
2728
|
dashboard: "Панель",
|
|
2315
2729
|
page: "Страница",
|
|
2730
|
+
report: "Отчёт",
|
|
2316
2731
|
record: "Запись",
|
|
2732
|
+
metadata: "Метаданные",
|
|
2317
2733
|
},
|
|
2318
2734
|
},
|
|
2319
2735
|
starredApps: {
|
|
@@ -2335,7 +2751,6 @@ const ru = {
|
|
|
2335
2751
|
organizations: "Организации",
|
|
2336
2752
|
roles: "Роли",
|
|
2337
2753
|
configuration: "Конфигурация",
|
|
2338
|
-
createApp: "Создать приложение",
|
|
2339
2754
|
administration: "Администрирование",
|
|
2340
2755
|
datasources: "Источники данных",
|
|
2341
2756
|
documentation: "Документация",
|
|
@@ -2360,6 +2775,7 @@ const ru = {
|
|
|
2360
2775
|
typeUpdate: "Обновление",
|
|
2361
2776
|
typeDelete: "Удаление",
|
|
2362
2777
|
typeComment: "Комментарий",
|
|
2778
|
+
typeSystem: "Система",
|
|
2363
2779
|
relativeJustNow: "только что",
|
|
2364
2780
|
relativeSecondsAgo: "{{count}} с назад",
|
|
2365
2781
|
relativeMinutesAgo: "{{count}} м назад",
|
|
@@ -2381,8 +2797,18 @@ const ru = {
|
|
|
2381
2797
|
placeholder: "Поиск объектов, панелей, страниц, отчётов…",
|
|
2382
2798
|
inputAriaLabel: "Поиск объектов, панелей, страниц, отчётов",
|
|
2383
2799
|
resultsCount: "{{count}} результат для \"{{query}}\"",
|
|
2384
|
-
|
|
2800
|
+
resultsCount_one: "{{count}} результат по запросу \"{{query}}\"",
|
|
2801
|
+
resultsCount_few: "{{count}} результата по запросу \"{{query}}\"",
|
|
2802
|
+
resultsCount_many: "{{count}} результатов по запросу \"{{query}}\"",
|
|
2803
|
+
resultsCount_other: "{{count}} результата по запросу \"{{query}}\"",
|
|
2804
|
+
// objectui#11445 — a count family: each slot agrees the noun with the
|
|
2805
|
+
// number (one 1/21, few 2-4, many 5-20, other a fraction). The base key, a
|
|
2806
|
+
// count-invariant form, answers a call made without a count.
|
|
2385
2807
|
itemsAvailable: "{{count}} доступно",
|
|
2808
|
+
itemsAvailable_one: "{{count}} доступно",
|
|
2809
|
+
itemsAvailable_few: "{{count}} доступно",
|
|
2810
|
+
itemsAvailable_many: "{{count}} доступно",
|
|
2811
|
+
itemsAvailable_other: "{{count}} доступно",
|
|
2386
2812
|
noResults: "Результатов не найдено",
|
|
2387
2813
|
noResultsHint: "Попробуйте изменить поисковые запросы",
|
|
2388
2814
|
typeObjects: "Объекты",
|
|
@@ -2407,7 +2833,11 @@ const ru = {
|
|
|
2407
2833
|
noAppsConfigured: "Нет приложений",
|
|
2408
2834
|
noAppsConfiguredDescription: "Нет зарегистрированных приложений. Создайте первое приложение или посетите системные настройки.",
|
|
2409
2835
|
appNotAvailable: "Приложение недоступно",
|
|
2410
|
-
appNotAvailableDescription: "Это приложение
|
|
2836
|
+
appNotAvailableDescription: "Это приложение недоступно — повторите попытку через мгновение.",
|
|
2837
|
+
appNotFound: "Не удалось открыть это приложение",
|
|
2838
|
+
appNotFoundDescription: "Сервер не вернул это приложение для вашей учётной записи.",
|
|
2839
|
+
appUnreachable: "Не удалось связаться с сервером",
|
|
2840
|
+
appUnreachableDescription: "Не удалось проверить это приложение. Повторите попытку через мгновение.",
|
|
2411
2841
|
appAccessDenied: "У вас нет доступа к этому приложению",
|
|
2412
2842
|
appAccessDeniedDescription: "Это приложение существует, но у вашей учётной записи нет прав на его открытие. Обратитесь к администратору за доступом.",
|
|
2413
2843
|
appAccessDeniedHome: "На главную",
|
|
@@ -2422,11 +2852,11 @@ const ru = {
|
|
|
2422
2852
|
description: "Введите необходимую информацию для продолжения.",
|
|
2423
2853
|
selectPlaceholder: "Выбрать {{label}}",
|
|
2424
2854
|
requiredError: "{{label}} обязательно",
|
|
2855
|
+
unresolvedParam: 'Этот параметр невозможно показать: поле, на котором он основан, отсутствует в метаданных объекта, поэтому нужный элемент управления нельзя построить. Попросите администратора исправить определение действия.',
|
|
2856
|
+
carryOverHint: 'Переносится без изменений (только чтение)',
|
|
2425
2857
|
cancel: "Отмена",
|
|
2426
2858
|
confirm: "Подтвердить",
|
|
2427
2859
|
uploading: "Загрузка…",
|
|
2428
|
-
defaultActionTitle: "Действие",
|
|
2429
|
-
ok: "ОК",
|
|
2430
2860
|
lookupPlaceholder: "ID записи для {{label}}",
|
|
2431
2861
|
lookupHelpText: "Для этого параметра не настроен объект ссылки, поэтому выбор записи недоступен. Введите ID записи или попросите администратора исправить параметр действия.",
|
|
2432
2862
|
},
|
|
@@ -2435,11 +2865,6 @@ const ru = {
|
|
|
2435
2865
|
confirm: "Продолжить",
|
|
2436
2866
|
cancel: "Отмена",
|
|
2437
2867
|
},
|
|
2438
|
-
rowAction: {
|
|
2439
|
-
openMenu: "Открыть меню",
|
|
2440
|
-
edit: "Редактировать",
|
|
2441
|
-
delete: "Удалить",
|
|
2442
|
-
},
|
|
2443
2868
|
navigationSync: {
|
|
2444
2869
|
addedPage: "Навигация обновлена: страница \"{{name}}\" добавлена",
|
|
2445
2870
|
addedDashboard: "Навигация обновлена: панель \"{{name}}\" добавлена",
|
|
@@ -2460,6 +2885,10 @@ const ru = {
|
|
|
2460
2885
|
noRecordId: "ID записи не указан",
|
|
2461
2886
|
deleteConfirm: "Удалить эту запись?",
|
|
2462
2887
|
bulkDeleteSuccess: "{{count}} записей {{label}} удалено",
|
|
2888
|
+
bulkDeleteSuccess_one: "Удалена {{count}} запись {{label}}",
|
|
2889
|
+
bulkDeleteSuccess_few: "Удалено {{count}} записи {{label}}",
|
|
2890
|
+
bulkDeleteSuccess_many: "Удалено {{count}} записей {{label}}",
|
|
2891
|
+
bulkDeleteSuccess_other: "Удалено {{count}} записи {{label}}",
|
|
2463
2892
|
bulkDeletePartial: "{{succeeded}} удалено, {{failed}} не удалось",
|
|
2464
2893
|
},
|
|
2465
2894
|
objectViewActions: {
|
|
@@ -2471,15 +2900,6 @@ const ru = {
|
|
|
2471
2900
|
exportFailed: "Ошибка экспорта: {{message}}",
|
|
2472
2901
|
forecastSoon: "Прогнозное представление скоро будет",
|
|
2473
2902
|
},
|
|
2474
|
-
recordDetail: {
|
|
2475
|
-
viewersTooltip: "Пользователи, просматривающие эту запись",
|
|
2476
|
-
},
|
|
2477
|
-
cellRender: {
|
|
2478
|
-
empty: "Пусто",
|
|
2479
|
-
yes: "Да",
|
|
2480
|
-
no: "Нет",
|
|
2481
|
-
systemFields: "Система",
|
|
2482
|
-
},
|
|
2483
2903
|
user: {
|
|
2484
2904
|
profile: "Профиль",
|
|
2485
2905
|
settings: "Настройки",
|
|
@@ -2669,18 +3089,41 @@ const ru = {
|
|
|
2669
3089
|
regionLabel: "Уведомления",
|
|
2670
3090
|
groupCount: "Уведомлений: {{count}}",
|
|
2671
3091
|
groupUnread: "Непрочитанных: {{count}}",
|
|
3092
|
+
groupUnread_one: "Непрочитанных: {{count}}",
|
|
3093
|
+
groupUnread_few: "Непрочитанных: {{count}}",
|
|
3094
|
+
groupUnread_many: "Непрочитанных: {{count}}",
|
|
3095
|
+
groupUnread_other: "Непрочитанных: {{count}}",
|
|
2672
3096
|
groupMarkRead: "Отметить прочитанными",
|
|
2673
3097
|
groupMarkReadTitle: "Отметить прочитанными все этого типа",
|
|
2674
3098
|
empty: "Нет уведомлений",
|
|
2675
3099
|
markAllRead: "Отметить все как прочитанные",
|
|
2676
3100
|
viewAll: "Показать все уведомления",
|
|
2677
3101
|
approvalsPending: "{{count}} ожидающих утверждений",
|
|
3102
|
+
approvalsPending_one: "{{count}} ожидающее утверждение",
|
|
3103
|
+
approvalsPending_few: "{{count}} ожидающих утверждения",
|
|
3104
|
+
approvalsPending_many: "{{count}} ожидающих утверждений",
|
|
3105
|
+
approvalsPending_other: "{{count}} ожидающего утверждения",
|
|
2678
3106
|
viewApprovals: "Показать утверждения",
|
|
2679
3107
|
noPendingApprovals: "Нет ожидающих утверждений",
|
|
2680
3108
|
openApprovalsInbox: "Открыть входящие утверждений",
|
|
2681
3109
|
badgeTotal: "Всего: {{total}}",
|
|
2682
3110
|
badgeNotifications: "{{unread}} уведомлений",
|
|
2683
3111
|
badgeApprovals: "{{approvals}} ожидающих утверждений",
|
|
3112
|
+
arrivalMany: "Новых сообщений: {{count}}",
|
|
3113
|
+
arrivalMany_one: "Новых сообщений: {{count}}",
|
|
3114
|
+
arrivalMany_few: "Новых сообщений: {{count}}",
|
|
3115
|
+
arrivalMany_many: "Новых сообщений: {{count}}",
|
|
3116
|
+
arrivalMany_other: "Новых сообщений: {{count}}",
|
|
3117
|
+
arrivalRepeats: "Новых сообщений по этой теме: {{count}}",
|
|
3118
|
+
arrivalRepeats_one: "Новых сообщений по этой теме: {{count}}",
|
|
3119
|
+
arrivalRepeats_few: "Новых сообщений по этой теме: {{count}}",
|
|
3120
|
+
arrivalRepeats_many: "Новых сообщений по этой теме: {{count}}",
|
|
3121
|
+
arrivalRepeats_other: "Новых сообщений по этой теме: {{count}}",
|
|
3122
|
+
arrivalOpen: "Открыть",
|
|
3123
|
+
toastEnabled: "Оповещения в приложении",
|
|
3124
|
+
desktopEnabled: "Уведомления на рабочем столе",
|
|
3125
|
+
desktopBlocked: "Заблокировано. Разрешите уведомления для этого сайта в настройках браузера.",
|
|
3126
|
+
desktopUnsupported: "Этот браузер не поддерживает уведомления на рабочем столе.",
|
|
2684
3127
|
emptyUnread: "Всё прочитано",
|
|
2685
3128
|
filterUnread: "Непрочитанные",
|
|
2686
3129
|
filterAll: "Все",
|
|
@@ -2694,12 +3137,14 @@ const ru = {
|
|
|
2694
3137
|
thankYouTitle: "Спасибо!",
|
|
2695
3138
|
thankYouMessage: "Ваш ответ успешно получен.",
|
|
2696
3139
|
redirecting: "Перенаправление через {{seconds}} с…",
|
|
3140
|
+
redirectPending: "Перенаправление…",
|
|
2697
3141
|
unavailableTitle: "Форма недоступна",
|
|
2698
3142
|
unavailableDescription: "По этому URL нет публичной формы. Убедитесь, что базовое представление имеет анонимный доступ.",
|
|
2699
3143
|
tryDemo: "Попробовать демо",
|
|
2700
3144
|
retry: "Повторить",
|
|
2701
3145
|
loading: "Загрузка формы…",
|
|
2702
3146
|
requiredHint: "* Обязательное поле",
|
|
3147
|
+
requiredFields: "Обязательные поля: {{fields}}",
|
|
2703
3148
|
consentLabelDefault: "Я принимаю политику конфиденциальности и соглашаюсь на обработку моих данных.",
|
|
2704
3149
|
consentLink: "Политика конфиденциальности",
|
|
2705
3150
|
consentRequired: "Пожалуйста, примите политику конфиденциальности.",
|
|
@@ -2750,6 +3195,10 @@ const ru = {
|
|
|
2750
3195
|
noImportableFields: "У этого объекта нет полей, доступных для импорта.",
|
|
2751
3196
|
schemaReadFailed: "Не удалось прочитать схему объекта.",
|
|
2752
3197
|
imported: "Импортировано строк: {{count}} в {{object}}.",
|
|
3198
|
+
imported_one: "Импортировано строк: {{count}} в {{object}}.",
|
|
3199
|
+
imported_few: "Импортировано строк: {{count}} в {{object}}.",
|
|
3200
|
+
imported_many: "Импортировано строк: {{count}} в {{object}}.",
|
|
3201
|
+
imported_other: "Импортировано строк: {{count}} в {{object}}.",
|
|
2753
3202
|
importFrom: "Импортировать реальные строки из",
|
|
2754
3203
|
into: "в",
|
|
2755
3204
|
opening: "Открытие…",
|
|
@@ -2763,6 +3212,80 @@ const ru = {
|
|
|
2763
3212
|
openProduction: "Открыть продакшн",
|
|
2764
3213
|
manageEnvironments: "Управление окружениями",
|
|
2765
3214
|
},
|
|
3215
|
+
cloudPlanStatus: {
|
|
3216
|
+
current: "Текущий тариф",
|
|
3217
|
+
},
|
|
3218
|
+
ai: {
|
|
3219
|
+
nlQuery: {
|
|
3220
|
+
placeholder: "Задайте вопрос о своих данных…",
|
|
3221
|
+
ask: "Спросить",
|
|
3222
|
+
results: "Результаты",
|
|
3223
|
+
match: "Совпадение: {{percent}}",
|
|
3224
|
+
simulatedSummary: "Результаты по запросу: {{query}}",
|
|
3225
|
+
noResults: "Подходящие записи не найдены",
|
|
3226
|
+
recentQueries: "Недавние запросы",
|
|
3227
|
+
},
|
|
3228
|
+
formAssist: {
|
|
3229
|
+
title: "Предложения ИИ",
|
|
3230
|
+
suggestionCount: "Предложений: {{count}}",
|
|
3231
|
+
suggestionCount_one: "{{count}} предложение",
|
|
3232
|
+
suggestionCount_few: "{{count}} предложения",
|
|
3233
|
+
suggestionCount_many: "{{count}} предложений",
|
|
3234
|
+
suggestionCount_other: "{{count}} предложения",
|
|
3235
|
+
applyAll: "Применить все",
|
|
3236
|
+
confidence: "Уверенность: {{percent}}",
|
|
3237
|
+
appliedCount: "Применено предложений: {{count}}",
|
|
3238
|
+
appliedCount_one: "Применено {{count}} предложение",
|
|
3239
|
+
appliedCount_few: "Применено {{count}} предложения",
|
|
3240
|
+
appliedCount_many: "Применено {{count}} предложений",
|
|
3241
|
+
appliedCount_other: "Применено {{count}} предложения",
|
|
3242
|
+
},
|
|
3243
|
+
recommendations: {
|
|
3244
|
+
title: "Рекомендации",
|
|
3245
|
+
generating: "Формирование рекомендаций…",
|
|
3246
|
+
empty: "Нет доступных рекомендаций",
|
|
3247
|
+
},
|
|
3248
|
+
},
|
|
3249
|
+
aiApprovals: {
|
|
3250
|
+
title: "Согласования ИИ",
|
|
3251
|
+
description: "Действия, предложенные ИИ-агентом: перед выполнением их должен проверить человек.",
|
|
3252
|
+
tabPending: "Ожидают",
|
|
3253
|
+
tabDecided: "Обработанные",
|
|
3254
|
+
tabAll: "Все",
|
|
3255
|
+
statusPending: "Ожидает",
|
|
3256
|
+
statusApproved: "Согласовано",
|
|
3257
|
+
statusExecuted: "Выполнено",
|
|
3258
|
+
statusFailed: "Не выполнено",
|
|
3259
|
+
statusRejected: "Отклонено",
|
|
3260
|
+
colTool: "Инструмент",
|
|
3261
|
+
colAction: "Действие",
|
|
3262
|
+
colObject: "Объект",
|
|
3263
|
+
colStatus: "Статус",
|
|
3264
|
+
colProposed: "Предложено",
|
|
3265
|
+
colDecision: "Решение",
|
|
3266
|
+
emptyTitle: "Нет действий в ожидании",
|
|
3267
|
+
emptyDescription: "Когда ИИ предложит важное действие, оно появится здесь на проверку.",
|
|
3268
|
+
view: "Открыть",
|
|
3269
|
+
approve: "Согласовать",
|
|
3270
|
+
reject: "Отклонить",
|
|
3271
|
+
working: "Выполняется…",
|
|
3272
|
+
approveAndExecute: "Согласовать и выполнить",
|
|
3273
|
+
outcomeApprove: "Согласование {{id}}: {{message}}",
|
|
3274
|
+
outcomeReject: "Отклонение {{id}}: {{message}}",
|
|
3275
|
+
outcomeExecuteFailed: "Действие завершилось ошибкой при выполнении",
|
|
3276
|
+
drawerFallbackTitle: "Действие в ожидании",
|
|
3277
|
+
drawerSubtitle: "Инструмент {{tool}} для объекта {{object}}",
|
|
3278
|
+
fieldProposedBy: "Кто предложил",
|
|
3279
|
+
fieldDecidedBy: "Кто решил",
|
|
3280
|
+
fieldConversation: "Диалог",
|
|
3281
|
+
fieldToolInput: "Входные данные инструмента",
|
|
3282
|
+
fieldResult: "Результат",
|
|
3283
|
+
fieldError: "Ошибка",
|
|
3284
|
+
fieldRejectionReason: "Причина отклонения",
|
|
3285
|
+
rejectTitle: "Отклонить это действие?",
|
|
3286
|
+
rejectBody: "Причина возвращается ИИ, чтобы он скорректировал следующий ответ.",
|
|
3287
|
+
rejectPlaceholder: "Причина (необязательно), например: «Неверный идентификатор записи — сначала уточните у пользователя.»",
|
|
3288
|
+
},
|
|
2766
3289
|
aiModelStatus: {
|
|
2767
3290
|
summary: "Сборка / вопросы используют {{conversational}} ({{conversationalSource}}); структурированный вывод — {{structured}} ({{structuredSource}}).",
|
|
2768
3291
|
summaryRouting: "Политика маршрутизации: бесплатные тарифы → {{free}}, платные тарифы → {{paid}}.",
|
|
@@ -2780,6 +3303,117 @@ const ru = {
|
|
|
2780
3303
|
sourceInherits: "как у build/ask",
|
|
2781
3304
|
sourcePinned: "закреплено через {{source}}",
|
|
2782
3305
|
},
|
|
3306
|
+
// objectui#7254 — the AI copilot's tool cards. Three families, all of them
|
|
3307
|
+
// English-only until this landed while every other string on the same screen
|
|
3308
|
+
// was translated:
|
|
3309
|
+
//
|
|
3310
|
+
// `tool.*` — one entry per PLATFORM-PROVIDED tool name
|
|
3311
|
+
// (@objectstack/spec `PLATFORM_TOOLS_BY_PACKAGE`, the
|
|
3312
|
+
// closed registry those runtimes are conformance-tested
|
|
3313
|
+
// against). `humanizeToolName` looks each up as
|
|
3314
|
+
// `chatbot.tool.<tool_name>` and falls back to its English
|
|
3315
|
+
// title-caser for a custom / third-party tool, so a name
|
|
3316
|
+
// missing here is degraded, never broken. The `en` values
|
|
3317
|
+
// are deliberately EQUAL to what that title-caser produces:
|
|
3318
|
+
// adding the key must not silently reword the English UI.
|
|
3319
|
+
// `toolState.*` — the card-header badge + activity-chip vocabulary. ONE
|
|
3320
|
+
// set for both surfaces (they used to carry separate
|
|
3321
|
+
// tables and disagreed on casing).
|
|
3322
|
+
// `plan.*` — the "N objects · N views · N dashboards" strip. Plural
|
|
3323
|
+
// FAMILIES: one slot per CLDR category the pack's language
|
|
3324
|
+
// selects (objectui#11432), plus the base key for a call
|
|
3325
|
+
// made without a count. `all-locales-key-parity.test.ts`
|
|
3326
|
+
// derives the required slots from `Intl.PluralRules`.
|
|
3327
|
+
//
|
|
3328
|
+
// objectui#7481 — five `tool.*` entries are NEWER than the registry above:
|
|
3329
|
+
// `get_authoring_rules` (cloud#1837), `load_tools`, `open_record`, `test_flow`
|
|
3330
|
+
// and `toggle_flow` are registered by cloud `service-ai-studio` but the pinned
|
|
3331
|
+
// `@objectstack/spec` snapshot does not list them yet. They are kept here on
|
|
3332
|
+
// purpose: a step label the user reads must not wait on a pin bump. When the
|
|
3333
|
+
// pin advances, `chatbotToolLabels-locale-parity-7481` starts checking them
|
|
3334
|
+
// against the registry instead of against its own hand-held list.
|
|
3335
|
+
chatbot: {
|
|
3336
|
+
tool: {
|
|
3337
|
+
aggregate_data: "Сводка данных",
|
|
3338
|
+
get_record: "Получить запись",
|
|
3339
|
+
query_data: "Запросить данные",
|
|
3340
|
+
query_records: "Запросить записи",
|
|
3341
|
+
search_knowledge: "Поиск по базе знаний",
|
|
3342
|
+
visualize_data: "Построить график",
|
|
3343
|
+
add_field: "Добавить поле",
|
|
3344
|
+
apply_blueprint: "Собрать приложение",
|
|
3345
|
+
apply_edit: "Применить изменения",
|
|
3346
|
+
create_metadata: "Создать метаданные",
|
|
3347
|
+
create_object: "Создать объект",
|
|
3348
|
+
create_package: "Создать пакет",
|
|
3349
|
+
create_seed: "Сгенерировать примеры данных",
|
|
3350
|
+
delete_field: "Удалить поле",
|
|
3351
|
+
describe_metadata: "Посмотреть метаданные",
|
|
3352
|
+
describe_object: "Посмотреть структуру объекта",
|
|
3353
|
+
get_active_package: "Получить активный пакет",
|
|
3354
|
+
get_authoring_rules: "Читать правила разработки",
|
|
3355
|
+
get_metadata_schema: "Получить схему метаданных",
|
|
3356
|
+
get_package: "Получить пакет",
|
|
3357
|
+
list_metadata: "Список метаданных",
|
|
3358
|
+
list_objects: "Список объектов",
|
|
3359
|
+
list_packages: "Список пакетов",
|
|
3360
|
+
load_tools: "Загрузить инструменты",
|
|
3361
|
+
modify_field: "Изменить поле",
|
|
3362
|
+
open_record: "Открыть запись",
|
|
3363
|
+
propose_blueprint: "Спроектировать приложение",
|
|
3364
|
+
set_active_package: "Сменить активный пакет",
|
|
3365
|
+
suggest_builder: "Предложить способ сборки",
|
|
3366
|
+
test_flow: "Проверить процесс",
|
|
3367
|
+
todo_write: "Записать задачи",
|
|
3368
|
+
toggle_flow: "Включить или выключить процесс",
|
|
3369
|
+
update_metadata: "Обновить метаданные",
|
|
3370
|
+
validate_expression: "Проверить выражение",
|
|
3371
|
+
verify_build: "Проверить сборку",
|
|
3372
|
+
},
|
|
3373
|
+
toolState: {
|
|
3374
|
+
agentActivity: "Действия агента",
|
|
3375
|
+
pending: "Ожидание",
|
|
3376
|
+
running: "Выполняется",
|
|
3377
|
+
awaitingApproval: "Ожидает подтверждения",
|
|
3378
|
+
responded: "Отвечено",
|
|
3379
|
+
completed: "Завершено",
|
|
3380
|
+
error: "Ошибка",
|
|
3381
|
+
denied: "Отклонено",
|
|
3382
|
+
failed: "Ошибка выполнения",
|
|
3383
|
+
},
|
|
3384
|
+
plan: {
|
|
3385
|
+
countObjects: "объектов: {{count}}",
|
|
3386
|
+
countObjects_one: "{{count}} объект",
|
|
3387
|
+
countObjects_few: "{{count}} объекта",
|
|
3388
|
+
countObjects_many: "{{count}} объектов",
|
|
3389
|
+
countObjects_other: "{{count}} объекта",
|
|
3390
|
+
countViews: "представлений: {{count}}",
|
|
3391
|
+
countViews_one: "{{count}} представление",
|
|
3392
|
+
countViews_few: "{{count}} представления",
|
|
3393
|
+
countViews_many: "{{count}} представлений",
|
|
3394
|
+
countViews_other: "{{count}} представления",
|
|
3395
|
+
countDashboards: "дашбордов: {{count}}",
|
|
3396
|
+
countDashboards_one: "{{count}} дашборд",
|
|
3397
|
+
countDashboards_few: "{{count}} дашборда",
|
|
3398
|
+
countDashboards_many: "{{count}} дашбордов",
|
|
3399
|
+
countDashboards_other: "{{count}} дашборда",
|
|
3400
|
+
countSeedData: "демоданные",
|
|
3401
|
+
},
|
|
3402
|
+
build: {
|
|
3403
|
+
building: "Создание {{app}}…",
|
|
3404
|
+
built: "Создание {{app}} завершено",
|
|
3405
|
+
appFallback: "вашего приложения",
|
|
3406
|
+
addingSampleData: "добавление демоданных",
|
|
3407
|
+
group: {
|
|
3408
|
+
object: "Объекты",
|
|
3409
|
+
view: "Представления",
|
|
3410
|
+
dashboard: "Дашборды",
|
|
3411
|
+
app: "Приложение",
|
|
3412
|
+
seed: "Демоданные",
|
|
3413
|
+
},
|
|
3414
|
+
moreArtifacts: "ещё {{n}}",
|
|
3415
|
+
},
|
|
3416
|
+
},
|
|
2783
3417
|
chatbotError: {
|
|
2784
3418
|
title: "Ошибка ответа",
|
|
2785
3419
|
fallbackDetail: "Что-то пошло не так. Попробуйте ещё раз.",
|
|
@@ -2860,7 +3494,7 @@ const ru = {
|
|
|
2860
3494
|
},
|
|
2861
3495
|
title: "Маркетплейс приложений",
|
|
2862
3496
|
subtitle: "Просматривайте одобренные приложения из каталога ObjectStack. Нажмите на приложение, чтобы увидеть подробности и установить его.",
|
|
2863
|
-
searchPlaceholder:
|
|
3497
|
+
searchPlaceholder: 'Поиск приложений по имени или ID приложения…',
|
|
2864
3498
|
searchAria: "Поиск в маркетплейсе",
|
|
2865
3499
|
installed: "Установлено",
|
|
2866
3500
|
installedCount: "Установлено ({{count}})",
|
|
@@ -2908,10 +3542,19 @@ const ru = {
|
|
|
2908
3542
|
purgeSampleData: 'Удалить демоданные',
|
|
2909
3543
|
purgeConfirm: 'Удалить все демонстрационные записи, созданные этим пакетом? Записи, добавленные пользователем, НЕ будут затронуты.',
|
|
2910
3544
|
purgeSuccess: 'Удалено демонстрационных записей: {{count}}.',
|
|
3545
|
+
purgeSuccess_one: 'Удалено демонстрационных записей: {{count}}.',
|
|
3546
|
+
purgeSuccess_few: 'Удалено демонстрационных записей: {{count}}.',
|
|
3547
|
+
purgeSuccess_many: 'Удалено демонстрационных записей: {{count}}.',
|
|
3548
|
+
purgeSuccess_other: 'Удалено демонстрационных записей: {{count}}.',
|
|
2911
3549
|
purgeNoData: 'Демонстрационные записи для удаления не найдены.',
|
|
2912
3550
|
reseedQueued: 'Демоданные будут перезагружены при следующем доступе к среде.',
|
|
2913
3551
|
reseedLocalSuccess: 'Демоданные перезагружены: добавлено {{inserted}}, обновлено {{updated}}.',
|
|
2914
3552
|
reseedPartialErrors: '(не удалось записать записей: {{count}})',
|
|
3553
|
+
reseedPartialErrors_one: '(не удалось записать записей: {{count}})',
|
|
3554
|
+
reseedPartialErrors_few: '(не удалось записать записей: {{count}})',
|
|
3555
|
+
reseedPartialErrors_many: '(не удалось записать записей: {{count}})',
|
|
3556
|
+
reseedPartialErrors_other: '(не удалось записать записей: {{count}})',
|
|
3557
|
+
sampleDataKernelUnavailable: 'У этой control plane нет ядра среды, поэтому здесь нельзя перезагрузить или удалить демоданные. Выполните это действие в собственном рантайме среды.',
|
|
2915
3558
|
updateAvailable: 'Доступно обновление',
|
|
2916
3559
|
},
|
|
2917
3560
|
action: {
|
|
@@ -2964,7 +3607,8 @@ const ru = {
|
|
|
2964
3607
|
reviewed: "Проверено и одобрено",
|
|
2965
3608
|
unreviewed: "Ещё не проверено",
|
|
2966
3609
|
signed: "Подписано",
|
|
2967
|
-
grantsIntro: "
|
|
3610
|
+
grantsIntro: "Пакет запрашивает:",
|
|
3611
|
+
notEnforced: "Список записывается при установке и подтверждается заново, если более поздняя версия запросит больше, но среда выполнения пока не ограничивает пакет этим списком.",
|
|
2968
3612
|
services: "Сервисы платформы",
|
|
2969
3613
|
hooks: "Хуки жизненного цикла",
|
|
2970
3614
|
network: "Доступ к сети",
|
|
@@ -3003,30 +3647,23 @@ const ru = {
|
|
|
3003
3647
|
storage: "Хранилище",
|
|
3004
3648
|
other: "Другое",
|
|
3005
3649
|
},
|
|
3006
|
-
pricing: {
|
|
3007
|
-
free: "Бесплатно",
|
|
3008
|
-
freemium: "Freemium",
|
|
3009
|
-
paid: "Платно",
|
|
3010
|
-
subscription: "Подписка",
|
|
3011
|
-
"usage-based": "По использованию",
|
|
3012
|
-
"contact-sales": "Связаться с продажами",
|
|
3013
|
-
},
|
|
3014
3650
|
relativeTime: {
|
|
3015
3651
|
today: "сегодня",
|
|
3016
3652
|
daysAgo: "{{count}} д назад",
|
|
3017
3653
|
monthsAgo: "{{count}} мес назад",
|
|
3654
|
+
monthsAgo_one: "{{count}} мес назад",
|
|
3655
|
+
monthsAgo_few: "{{count}} мес назад",
|
|
3656
|
+
monthsAgo_many: "{{count}} мес назад",
|
|
3657
|
+
monthsAgo_other: "{{count}} мес назад",
|
|
3018
3658
|
yearsAgo: "{{count}} лет назад",
|
|
3659
|
+
yearsAgo_one: "{{count}} год назад",
|
|
3660
|
+
yearsAgo_few: "{{count}} года назад",
|
|
3661
|
+
yearsAgo_many: "{{count}} лет назад",
|
|
3662
|
+
yearsAgo_other: "{{count}} года назад",
|
|
3019
3663
|
},
|
|
3020
3664
|
},
|
|
3021
|
-
approvals: {
|
|
3022
|
-
approve: 'Утвердить',
|
|
3023
|
-
reject: 'Отклонить',
|
|
3024
|
-
comment: 'Комментарий (необязательно)',
|
|
3025
|
-
approveSuccess: 'Утверждено',
|
|
3026
|
-
rejectSuccess: 'Отклонено',
|
|
3027
|
-
rejectConfirm: 'Отклонить этот запрос на согласование?',
|
|
3028
|
-
},
|
|
3029
3665
|
approvalsInbox: {
|
|
3666
|
+
recordUnresolvable: 'Эту запись невозможно открыть',
|
|
3030
3667
|
loadMore: 'Загрузить ещё',
|
|
3031
3668
|
loadingMore: 'Загрузка…',
|
|
3032
3669
|
loadedOf: 'Загружено {{loaded}} из {{total}}',
|
|
@@ -3045,6 +3682,10 @@ const ru = {
|
|
|
3045
3682
|
requestInfoSent: 'Возвращено заявителю за дополнениями',
|
|
3046
3683
|
remindBtn: 'Напомнить',
|
|
3047
3684
|
remindSuccess: 'Напоминание отправлено: {{count}}',
|
|
3685
|
+
remindSuccess_one: 'Напоминание отправлено: {{count}}',
|
|
3686
|
+
remindSuccess_few: 'Напоминание отправлено: {{count}}',
|
|
3687
|
+
remindSuccess_many: 'Напоминание отправлено: {{count}}',
|
|
3688
|
+
remindSuccess_other: 'Напоминание отправлено: {{count}}',
|
|
3048
3689
|
remindThrottled: 'Напоминание уже отправлялось недавно — попробуйте позже.',
|
|
3049
3690
|
replyPlaceholder: 'Ответить по этому запросу…',
|
|
3050
3691
|
slaRemaining: 'SLA: осталось {{dur}}',
|
|
@@ -3061,6 +3702,10 @@ const ru = {
|
|
|
3061
3702
|
progressApprovals: 'Согласования — {{got}} из {{need}}',
|
|
3062
3703
|
progressGroups: 'Ход визирования — {{got}} из {{need}} групп',
|
|
3063
3704
|
progressEligible: 'Доступных согласующих: {{count}}',
|
|
3705
|
+
progressEligible_one: 'Доступных согласующих: {{count}}',
|
|
3706
|
+
progressEligible_few: 'Доступных согласующих: {{count}}',
|
|
3707
|
+
progressEligible_many: 'Доступных согласующих: {{count}}',
|
|
3708
|
+
progressEligible_other: 'Доступных согласующих: {{count}}',
|
|
3064
3709
|
progressBar: 'Ход решения',
|
|
3065
3710
|
declaredActions: 'Действия',
|
|
3066
3711
|
attachmentChip: 'Вложение',
|
|
@@ -3092,6 +3737,10 @@ const ru = {
|
|
|
3092
3737
|
filterCount: '{{shown}} из {{total}}',
|
|
3093
3738
|
selected: 'выбрано',
|
|
3094
3739
|
actionableCount: '({{count}} доступно)',
|
|
3740
|
+
actionableCount_one: '({{count}} доступно)',
|
|
3741
|
+
actionableCount_few: '({{count}} доступно)',
|
|
3742
|
+
actionableCount_many: '({{count}} доступно)',
|
|
3743
|
+
actionableCount_other: '({{count}} доступно)',
|
|
3095
3744
|
selectAll: 'Выбрать все',
|
|
3096
3745
|
selectRow: 'Выбрать запрос',
|
|
3097
3746
|
colRequest: 'Запрос',
|
|
@@ -3165,11 +3814,27 @@ const ru = {
|
|
|
3165
3814
|
approveN: 'Согласовать {{count}}',
|
|
3166
3815
|
rejectN: 'Отклонить {{count}}',
|
|
3167
3816
|
bulkApproveTitle: 'Согласовать {{count}} запросов?',
|
|
3817
|
+
bulkApproveTitle_one: 'Согласовать {{count}} запрос?',
|
|
3818
|
+
bulkApproveTitle_few: 'Согласовать {{count}} запроса?',
|
|
3819
|
+
bulkApproveTitle_many: 'Согласовать {{count}} запросов?',
|
|
3820
|
+
bulkApproveTitle_other: 'Согласовать {{count}} запроса?',
|
|
3168
3821
|
bulkApproveBody: 'Каждый запрос согласуется от вашего имени, и поток продолжится по ветке согласования.',
|
|
3169
3822
|
bulkRejectTitle: 'Отклонить {{count}} запросов?',
|
|
3823
|
+
bulkRejectTitle_one: 'Отклонить {{count}} запрос?',
|
|
3824
|
+
bulkRejectTitle_few: 'Отклонить {{count}} запроса?',
|
|
3825
|
+
bulkRejectTitle_many: 'Отклонить {{count}} запросов?',
|
|
3826
|
+
bulkRejectTitle_other: 'Отклонить {{count}} запроса?',
|
|
3170
3827
|
bulkRejectBody: 'Выбранные запросы будут отклонены, заявители получат уведомления.',
|
|
3171
3828
|
bulkApproved: 'Согласовано запросов: {{count}}',
|
|
3829
|
+
bulkApproved_one: 'Согласовано запросов: {{count}}',
|
|
3830
|
+
bulkApproved_few: 'Согласовано запросов: {{count}}',
|
|
3831
|
+
bulkApproved_many: 'Согласовано запросов: {{count}}',
|
|
3832
|
+
bulkApproved_other: 'Согласовано запросов: {{count}}',
|
|
3172
3833
|
bulkRejected: 'Отклонено запросов: {{count}}',
|
|
3834
|
+
bulkRejected_one: 'Отклонено запросов: {{count}}',
|
|
3835
|
+
bulkRejected_few: 'Отклонено запросов: {{count}}',
|
|
3836
|
+
bulkRejected_many: 'Отклонено запросов: {{count}}',
|
|
3837
|
+
bulkRejected_other: 'Отклонено запросов: {{count}}',
|
|
3173
3838
|
bulkPartial: 'Успешно: {{ok}}, с ошибкой: {{fail}}: {{which}}',
|
|
3174
3839
|
rejectOneTitle: 'Отклонить «{{title}}»?',
|
|
3175
3840
|
rejectOneBody: 'Запрос будет отклонён, заявитель получит уведомление.',
|
|
@@ -3194,8 +3859,20 @@ const ru = {
|
|
|
3194
3859
|
alreadyDecided: 'Этот запрос уже обработан. Обновите список.',
|
|
3195
3860
|
justNow: 'только что',
|
|
3196
3861
|
minutesAgo: '{{count}} мин назад',
|
|
3862
|
+
minutesAgo_one: '{{count}} мин назад',
|
|
3863
|
+
minutesAgo_few: '{{count}} мин назад',
|
|
3864
|
+
minutesAgo_many: '{{count}} мин назад',
|
|
3865
|
+
minutesAgo_other: '{{count}} мин назад',
|
|
3197
3866
|
hoursAgo: '{{count}} ч назад',
|
|
3867
|
+
hoursAgo_one: '{{count}} ч назад',
|
|
3868
|
+
hoursAgo_few: '{{count}} ч назад',
|
|
3869
|
+
hoursAgo_many: '{{count}} ч назад',
|
|
3870
|
+
hoursAgo_other: '{{count}} ч назад',
|
|
3198
3871
|
daysAgo: '{{count}} дн назад',
|
|
3872
|
+
daysAgo_one: '{{count}} дн назад',
|
|
3873
|
+
daysAgo_few: '{{count}} дн назад',
|
|
3874
|
+
daysAgo_many: '{{count}} дн назад',
|
|
3875
|
+
daysAgo_other: '{{count}} дн назад',
|
|
3199
3876
|
},
|
|
3200
3877
|
preview: {
|
|
3201
3878
|
empty: {
|
|
@@ -3230,11 +3907,19 @@ const ru = {
|
|
|
3230
3907
|
detailNone: 'Различий не обнаружено — черновик совпадает с опубликованной версией.',
|
|
3231
3908
|
detailChangedKeys: 'Также изменено:',
|
|
3232
3909
|
confirmNote: 'Публикация атомарно выпускает все {{count}} ожидающих черновиков этого пакета.',
|
|
3910
|
+
confirmNote_one: 'Публикация атомарно выпускает {{count}} ожидающий черновик этого пакета.',
|
|
3911
|
+
confirmNote_few: 'Публикация атомарно выпускает все {{count}} ожидающих черновика этого пакета.',
|
|
3912
|
+
confirmNote_many: 'Публикация атомарно выпускает все {{count}} ожидающих черновиков этого пакета.',
|
|
3913
|
+
confirmNote_other: 'Публикация атомарно выпускает {{count}} ожидающего черновика этого пакета.',
|
|
3233
3914
|
publishConfirm: 'Опубликовать всё',
|
|
3234
|
-
// [
|
|
3915
|
+
// [`7a90afdf9`] Pre-publish security-posture findings, shown next to
|
|
3235
3916
|
// the confirm button so a refusal the door would issue is read BEFORE
|
|
3236
3917
|
// the click rather than as a toast after the batch rolled back.
|
|
3237
3918
|
securityBlockTitle: 'Публикация будет отклонена — {{count}} элемент(ов) требуют решения',
|
|
3919
|
+
securityBlockTitle_one: 'Публикация будет отклонена — {{count}} элемент требует решения',
|
|
3920
|
+
securityBlockTitle_few: 'Публикация будет отклонена — {{count}} элемента требуют решения',
|
|
3921
|
+
securityBlockTitle_many: 'Публикация будет отклонена — {{count}} элементов требуют решения',
|
|
3922
|
+
securityBlockTitle_other: 'Публикация будет отклонена — {{count}} элемента требуют решения',
|
|
3238
3923
|
securityBlockWhere: 'Исправьте это в объекте в разделе «Настройки → Общий доступ к записям» и опубликуйте снова.',
|
|
3239
3924
|
},
|
|
3240
3925
|
// ADR-0045 — the materialized-but-unlisted app banner
|
|
@@ -3259,7 +3944,7 @@ const ru = {
|
|
|
3259
3944
|
revertLabel: 'Изменение отменено',
|
|
3260
3945
|
applyLabel: 'Изменение сборки',
|
|
3261
3946
|
revert: 'отмена',
|
|
3262
|
-
items: '
|
|
3947
|
+
items: 'Элементов: {{count}}',
|
|
3263
3948
|
revertAction: 'Отменить',
|
|
3264
3949
|
reverted: 'Отменено — изменение возвращено.',
|
|
3265
3950
|
revertFailed: 'Не удалось отменить',
|
|
@@ -3288,25 +3973,25 @@ const ru = {
|
|
|
3288
3973
|
rangeEnd: "До",
|
|
3289
3974
|
operators: {
|
|
3290
3975
|
equals: "Равно",
|
|
3291
|
-
|
|
3976
|
+
not_equals: "Не равно",
|
|
3292
3977
|
contains: "Содержит",
|
|
3293
|
-
|
|
3294
|
-
|
|
3295
|
-
|
|
3296
|
-
|
|
3297
|
-
|
|
3298
|
-
|
|
3299
|
-
|
|
3300
|
-
|
|
3978
|
+
icontains: "Содержит (без учёта регистра)",
|
|
3979
|
+
not_contains: "Не содержит",
|
|
3980
|
+
is_empty: "Пусто",
|
|
3981
|
+
is_not_empty: "Не пусто",
|
|
3982
|
+
greater_than: "Больше",
|
|
3983
|
+
less_than: "Меньше",
|
|
3984
|
+
greater_than_or_equal: "Больше или равно",
|
|
3985
|
+
less_than_or_equal: "Меньше или равно",
|
|
3301
3986
|
before: "До",
|
|
3302
3987
|
after: "После",
|
|
3303
3988
|
between: "Между",
|
|
3304
3989
|
in: "В списке",
|
|
3305
|
-
|
|
3306
|
-
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3990
|
+
not_in: "Не в списке",
|
|
3991
|
+
starts_with: "Начинается с",
|
|
3992
|
+
ends_with: "Заканчивается на",
|
|
3993
|
+
is_null: "Равно null",
|
|
3994
|
+
is_not_null: "Не равно null",
|
|
3310
3995
|
exists: "Задано",
|
|
3311
3996
|
notExists: "Не задано",
|
|
3312
3997
|
},
|
|
@@ -3322,7 +4007,10 @@ const ru = {
|
|
|
3322
4007
|
},
|
|
3323
4008
|
collaboration: {
|
|
3324
4009
|
commentCount: "Комментариев: {{count}}",
|
|
3325
|
-
|
|
4010
|
+
commentCount_one: "{{count}} комментарий",
|
|
4011
|
+
commentCount_few: "{{count}} комментария",
|
|
4012
|
+
commentCount_many: "{{count}} комментариев",
|
|
4013
|
+
commentCount_other: "{{count}} комментария",
|
|
3326
4014
|
resolvedSuffix: " · Решено",
|
|
3327
4015
|
sortComments: "Сортировка комментариев",
|
|
3328
4016
|
sortOldest: "Сначала старые",
|
|
@@ -3331,11 +4019,26 @@ const ru = {
|
|
|
3331
4019
|
reopen: "Открыть заново",
|
|
3332
4020
|
justNow: "только что",
|
|
3333
4021
|
minutesAgo: "{{count}} мин назад",
|
|
4022
|
+
minutesAgo_one: "{{count}} мин назад",
|
|
4023
|
+
minutesAgo_few: "{{count}} мин назад",
|
|
4024
|
+
minutesAgo_many: "{{count}} мин назад",
|
|
4025
|
+
minutesAgo_other: "{{count}} мин назад",
|
|
3334
4026
|
hoursAgo: "{{count}} ч назад",
|
|
4027
|
+
hoursAgo_one: "{{count}} ч назад",
|
|
4028
|
+
hoursAgo_few: "{{count}} ч назад",
|
|
4029
|
+
hoursAgo_many: "{{count}} ч назад",
|
|
4030
|
+
hoursAgo_other: "{{count}} ч назад",
|
|
3335
4031
|
daysAgo: "{{count}} д назад",
|
|
4032
|
+
daysAgo_one: "{{count}} д назад",
|
|
4033
|
+
daysAgo_few: "{{count}} д назад",
|
|
4034
|
+
daysAgo_many: "{{count}} д назад",
|
|
4035
|
+
daysAgo_other: "{{count}} д назад",
|
|
3336
4036
|
edited: "(изменено)",
|
|
3337
4037
|
reactionCount: "Реакций: {{count}}",
|
|
3338
|
-
|
|
4038
|
+
reactionCount_one: "{{count}} реакция",
|
|
4039
|
+
reactionCount_few: "{{count}} реакции",
|
|
4040
|
+
reactionCount_many: "{{count}} реакций",
|
|
4041
|
+
reactionCount_other: "{{count}} реакции",
|
|
3339
4042
|
addThumbsUp: "Поставить лайк",
|
|
3340
4043
|
reply: "Ответить",
|
|
3341
4044
|
reactThumbsUp: "Отреагировать лайком",
|
|
@@ -3346,9 +4049,15 @@ const ru = {
|
|
|
3346
4049
|
commentPlaceholder: "Добавьте комментарий… (@ — упоминание)",
|
|
3347
4050
|
send: "Отправить",
|
|
3348
4051
|
presentUserCount: "Присутствует пользователей: {{count}}",
|
|
3349
|
-
|
|
4052
|
+
presentUserCount_one: "Присутствует {{count}} пользователь",
|
|
4053
|
+
presentUserCount_few: "Присутствуют {{count}} пользователя",
|
|
4054
|
+
presentUserCount_many: "Присутствует {{count}} пользователей",
|
|
4055
|
+
presentUserCount_other: "Присутствует {{count}} пользователя",
|
|
3350
4056
|
moreUserCount: "Ещё пользователей: {{count}}",
|
|
3351
|
-
|
|
4057
|
+
moreUserCount_one: "Ещё {{count}} пользователь",
|
|
4058
|
+
moreUserCount_few: "Ещё {{count}} пользователя",
|
|
4059
|
+
moreUserCount_many: "Ещё {{count}} пользователей",
|
|
4060
|
+
moreUserCount_other: "Ещё {{count}} пользователя",
|
|
3352
4061
|
userStatusTitle: "{{name}} ({{status}})",
|
|
3353
4062
|
statusActive: "активен",
|
|
3354
4063
|
statusIdle: "бездействует",
|
|
@@ -3356,6 +4065,11 @@ const ru = {
|
|
|
3356
4065
|
},
|
|
3357
4066
|
wizard: {
|
|
3358
4067
|
missingRequired: "Заполните обязательные поля: {{fields}}",
|
|
4068
|
+
back: "Назад",
|
|
4069
|
+
submitting: "Отправка…",
|
|
4070
|
+
stepFallback: "Шаг {{n}}",
|
|
4071
|
+
progressLabel: "Прогресс",
|
|
4072
|
+
emptyStep: "Для этого шага не настроены поля",
|
|
3359
4073
|
},
|
|
3360
4074
|
flowRunner: {
|
|
3361
4075
|
title: 'Ввод',
|
|
@@ -3413,5 +4127,49 @@ const ru = {
|
|
|
3413
4127
|
bulkOperationFailed: "Массовая операция не выполнена: {{reason}}",
|
|
3414
4128
|
},
|
|
3415
4129
|
},
|
|
4130
|
+
// objectui#6301 — Настройка › Автоматизация из пакетов (ADR-0126 §7.4).
|
|
4131
|
+
// Терминология пакета: `common.package` = Пакет, `flowRunner.completed` =
|
|
4132
|
+
// Поток, кавычки «…». ⛔ Никаких формулировок о происхождении или
|
|
4133
|
+
// расхождении в этой группе (§9).
|
|
4134
|
+
packagedAutomation: {
|
|
4135
|
+
title: "Автоматизация из пакетов",
|
|
4136
|
+
subtitle: "Потоки и действия, поставляемые установленными пакетами. Отключите любой из них в этой установке или клонируйте поток под новым именем, чтобы настроить. Редактирование — в Studio.",
|
|
4137
|
+
refresh: "Обновить",
|
|
4138
|
+
flowsHeading: "Потоки из пакетов",
|
|
4139
|
+
actionsHeading: "Действия из пакетов",
|
|
4140
|
+
colFlow: "Поток",
|
|
4141
|
+
colActivation: "Активация",
|
|
4142
|
+
colActions: "Действия",
|
|
4143
|
+
toggleLabel: "Активация для {{label}}",
|
|
4144
|
+
on: "Вкл.",
|
|
4145
|
+
off: "Выкл.",
|
|
4146
|
+
clone: "Клонировать",
|
|
4147
|
+
cloneTitle: "Клонировать поток из пакета",
|
|
4148
|
+
cloneBody: "Копия сохраняет определение целиком и требует нового машинного имени и метки. Редактируйте копию в Studio.",
|
|
4149
|
+
cloneName: "Новое машинное имя",
|
|
4150
|
+
cloneLabel: "Новая метка",
|
|
4151
|
+
cancel: "Отмена",
|
|
4152
|
+
cloneConfirm: "Создать клон",
|
|
4153
|
+
cloneCreated: "Поток «{{name}}» создан.",
|
|
4154
|
+
emptyTitle: "Нет потоков из пакетов",
|
|
4155
|
+
emptyBody: "В этой установке ни один установленный пакет не поставляет поток автоматизации. Потоки, которые вы создаёте сами, находятся в Studio.",
|
|
4156
|
+
loadFailed: "Не удалось загрузить автоматизацию из пакетов.",
|
|
4157
|
+
toggleFailedHttp: "Не удалось изменить активацию (HTTP {{status}}).",
|
|
4158
|
+
toggleFailed: "Не удалось изменить активацию.",
|
|
4159
|
+
cloneFailedHttp: "Не удалось клонировать этот поток (HTTP {{status}}).",
|
|
4160
|
+
cloneFailed: "Не удалось клонировать этот поток.",
|
|
4161
|
+
actionsSubtitle: "Действия, поставляемые установленными пакетами. Отключите действие в этой установке — и оно перестанет выполняться везде, где предлагается. Создать рядом собственное действие по-прежнему можно в Studio.",
|
|
4162
|
+
colAction: "Действие",
|
|
4163
|
+
colObject: "Объект",
|
|
4164
|
+
actionToggleLabel: "Активация для {{label}} на {{object}}",
|
|
4165
|
+
actionsEmptyTitle: "Нет действий из пакетов",
|
|
4166
|
+
actionsEmptyBody: "В этой установке ни один установленный пакет не объявляет действие. Действия, которые вы создаёте сами, находятся в Studio.",
|
|
4167
|
+
actionsLoadFailed: "Не удалось загрузить действия из пакетов.",
|
|
4168
|
+
},
|
|
4169
|
+
element: {
|
|
4170
|
+
number: {
|
|
4171
|
+
noObject: "Объект не указан: задайте object или dataSource.object.",
|
|
4172
|
+
},
|
|
4173
|
+
},
|
|
3416
4174
|
};
|
|
3417
4175
|
export default ru;
|