-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathtranslation.ts
664 lines (629 loc) · 41.1 KB
/
translation.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
import type { Locale } from "~/locales/types";
// import { Rules } from "./legal";
import tags from "./tags";
function Pluralize(num: number, str_1: string, str_234: string, str_other: string) {
if (num === 1) {
return str_1;
}
const lastDigit = num % 10;
if (lastDigit === 1) {
if (Math.floor((num % 100) / 10) === 1) {
return str_other;
}
return str_1;
}
if ([2, 3, 4].includes(lastDigit)) return str_234;
return str_other;
}
export default {
common: {
settings: "Настройки",
success: "Успех",
error: "Ошибка",
home: "Главная",
somethingWentWrong: "Что-то пошло не так!",
redirecting: "Перенаправляем...",
accept: "Принять",
decline: "Отклонить",
download: "Скачать",
report: "Пожаловаться",
copyId: "Скопировать ID",
all: "Все",
// ? New string
// noResults: "No results",
},
// NOTE: It isn't necessary to return the count in the array, because a Intl formatted count is used in the actual html
// it's here just for readability
count: {
downloads: (count: number) => {
const word = Pluralize(count, "загрузка", "загрузки", "загрузок");
return ["", count.toString(), word];
},
followers: (count: number) => {
const word = Pluralize(count, "фолловер", "фолловера", "фолловеров");
return ["", count.toString(), word];
},
projects: (count: number) => {
const word = Pluralize(count, "проект", "проекта", "проектов");
return ["", count.toString(), word];
},
members: (count: number) => {
const word = Pluralize(count, "участник", "участника", "участников");
return ["", count.toString(), word];
},
},
navbar: {
mod: "мод",
mods: "моды",
datamod: "дата-мод",
datamods: "дата-моды",
"resource-pack": "ресурспак",
"resource-packs": "ресурспаки",
shader: "шейдер",
shaders: "шейдеры",
modpack: "модпак",
modpacks: "модпаки",
plugin: "плагин",
plugins: "плагины",
signout: "Выйти",
dashboard: "Панель управления",
profile: "Профиль",
skipToMainContent: "Перейти к основному контенту",
},
homePage: {
title: (projectType: string) => ["Место, где вы найдете ", projectType, " для Cosmic Reach"],
desc: "Лучшее место для ваших модов Cosmic Reach. Открывайте, играйте и создавайте контент, здесь и сразу.",
exploreMods: "Найти моды",
},
auth: {
email: "Почта",
password: "Пароль",
changePassword: "Сменить пароль",
dontHaveAccount: "Не зарегистрированы?",
alreadyHaveAccount: "Уже зарегистрированы?",
forgotPassword: "Забыли пароль?",
signupWithProviders: "Зарегистрируйтесь одним из способов:",
aggrement:
"Создавая аккаунт, вы соглашаетесь с нашими [Условиями использования](/legal/terms) и [Политикой Конфиденциальности](/legal/privacy).",
invalidCode: "Неверный или уже истекший код",
didntRequest: "Не запрашивали это?",
checkSessions: "Посмотреть авторизованные сессии",
confirmNewPass: "Подтвердите новый пароль",
confirmNewPassDesc:
"Новый пароль был недавно добавлен к вашему аккаунту и ожидает подтверждения. Подтвердите ниже, если это были вы.",
newPass: "Новый пароль",
newPass_label: "Введите ваш новый пароль",
confirmPass: "Подтвердите пароль",
confirmPass_label: "Повторите ваш пароль",
deleteAccount: "Удалить аккаунт",
deleteAccountDesc:
"Удаление аккаунта приведет к удалению всего, что было создано Вами на нашем сайте. Восстановление аккаунта после удаления невозможно.",
enterEmail: "Введите ваш почтновый адрес",
},
settings: {
account: "Аккаунт",
preferences: "Настройки",
publicProfile: "Публичный профиль",
accountAndSecurity: "Аккаунт и Безопасность",
sessions: "Сессии",
toggleFeatures: "Переключение возможностей",
enableOrDisableFeatures: "Включите или выключите определённые возможности для этого девайса.",
viewTransitions: "Анимация интерфейса",
viewTransitionsDesc: "Включить анимации навигации по страницам.",
accountSecurity: "Безопасность аккаунта",
changePassTitle: "Сменить пароль от аккаунта",
addPassDesc: "Добавьте пароль, чтобы иметь возможность входить по логину и паролю.",
manageAuthProviders: "Управление способами входа",
manageProvidersDesc: "Добавьте или уберите способы входа в аккаунт.",
removePass: "Убрать пароль",
removePassTitle: "Удаление пароля",
removePassDesc: "После удаления пароля вы потеряете возможность входа по логину и паролю",
enterCurrentPass: "Введите текущий пароль",
addPass: "Добавить пароль",
addPassDialogDesc: "Вы сможете использовать этот пароль для входа в аккаунт",
manageProviders: "Управление способами входа",
linkedProviders: "Используемые способы входа",
linkProvider: (provider: string) => `Добавьте возможность входа в аккаунт через ${provider}`,
link: "Добавить", // Verb
sureToDeleteAccount: "Вы уверены, что хотите удалить аккаунт?",
profileInfo: "Информация о профиле",
profileInfoDesc: (site: string) => `Информация о вашем профиле доступна на ${site}.`,
profilePic: "Аватарка",
bio: "Информация",
bioDesc: "Кратко опишите себя.",
visitYourProfile: "Перейти в профиль",
showIpAddr: "Показать IP-адреса",
sessionsDesc:
"На этих девайсах есть активные сессии, вы можете завершить любую сессию в любое время. " +
"Если вы видите незнакомое устройство, немедленно завершите сессию и смените пароль у соответствующего способа входа.",
ipHidden: "IP Скрыт",
lastAccessed: (when: string) => `Последний раз был активен ${when}`,
created: (when: string) => `Создан ${when}`, // eg: Created a month ago
sessionCreatedUsing: (providerName: string) => `Сессия создана через ${providerName}`,
currSession: "Текущая сессия",
revokeSession: "Завершить сессию",
},
dashboard: {
dashboard: "Панель управления",
overview: "Основное",
notifications: "Уведомления",
activeReports: "Активные жалобы",
analytics: "Аналитика",
projects: "Проекты",
organizations: "Организации",
collections: "Коллекции",
revenue: "Доход",
manage: "Управление",
seeAll: "Посмотреть все",
viewNotifHistory: "Посмотреть историю уведомлений",
noUnreadNotifs: "У вас нет непрочитанных уведомлений.",
totalDownloads: "Всего скачиваний",
fromProjects: (count: number) => `с ${count} проектов`,
totalFollowers: "Всего фолловеров",
viewHistory: "Посмотреть историю",
markAllRead: "Отметить все как прочитанные",
markRead: "Отметить как прочитанное",
deleteNotif: "Удалить уведомление",
received: "Получено",
history: "История",
notifHistory: "История уведомлений",
createProjectInfo: "У вас нет проектов. Нажмите кнопку выше, чтобы создать новый.",
type: "Тип",
status: "Статус",
createProject: "Создать проект",
creatingProject: "Создание проекта",
chooseProjectType: "Выберите тип проекта",
projectTypeDesc: "Выберите подходящий тип для вашего проекта",
createOrg: "Создать организацию",
createAnOrg: "Создать организацию",
creatingOrg: "Создание организации",
enterOrgName: "Введите название организации",
enterOrgDescription: "Кратко опишите вашу организацию",
},
search: {
// Search labels
project: "Найти проекты",
mod: "Найти моды",
"resource-pack": "Найти ресурспаки",
shader: "Найти шейдеры",
plugin: "Найти плагины",
modpack: "Найти модпаки",
datamod: "Найти дата-моды",
// Sorting methods
showPerPage: "На странице",
sortBy: "Сортировать по",
relevance: "Релевантность",
downloads: "Количество загрузок",
follow_count: "Количество фолловеров",
recently_updated: "Недавно обновлённые",
recently_published: "Недавно опубликованные",
filters: "Фильтры",
searchFilters: "Найти фильтры",
loaders: "Загрузчики",
gameVersions: "Версии игры",
channels: "Каналы",
environment: "Среда",
categories: "Категории",
features: "Возможности",
resolutions: "Разрешения",
performanceImpact: "Влияние на производительность",
license: "Лицензия",
openSourceOnly: "Только с открытым исходным кодом",
clearFilters: "Очистить фильтры",
tags: tags,
},
project: {
compatibility: "Совместимость",
environments: "Среда",
reportIssues: "Сообщить о проблемах",
viewSource: "Посмотреть исходный код",
visitWiki: "Посмотреть вики",
joinDiscord: "Зайти в Discord-сервер",
featuredVersions: "Лучшие версии",
creators: "Создатели",
organization: "Организация",
project: "Проект",
details: "Подробнее",
updatedAt: (when: string) => `Обновлено ${when}`, // eg: Updated 3 days ago
publishedAt: (when: string) => `Опубликовано ${when}`, // eg: Published 3 days ago
gallery: "Галерея",
changelog: "Список изменений",
versions: "Версии",
noProjectDesc: "Описание проекта не заполнено",
uploadNewImg: "Добавить изображение в галерею",
uploadImg: "Добавить изображение в галерею",
galleryOrderingDesc: "Изображение с бОльшим значением будет показано первым.",
featuredGalleryImgDesc:
"Лучшее изображение показывается в поиске и в карточке проекта. Только одно изображение может быть помечено лучшим.",
addGalleryImg: "Добавить изображение в галерею",
featureImg: "Отметить лучшим",
unfeatureImg: "Снять отметку лучшего",
sureToDeleteImg: "Вы уверены, что хотите удалить это изображение?",
deleteImgDesc: "Это действие удалит изображение навсегда (типо реально навсегда).",
editGalleryImg: "Редактировать изображение",
currImage: "Текущее изображение",
// Version
uploadVersion: "Загрузить версию",
uploadNewVersion: "Загрузить новую версию",
showDevVersions: "Показать разрабатываемые версии",
noProjectVersions: "Версий не найдено",
stats: "Статистика",
published: "Опубликовано", // Used for table headers
downloads: "Загрузки", // Used for table headers
openInNewTab: "Открыть в новой вкладке",
copyLink: "Копировать ссылку",
doesNotSupport: (project: string, version: string, loader: string) => {
return `${project} не поддерживает версию ${version} для ${loader}`;
},
downloadProject: (project: string) => `Скачать ${project}`,
gameVersion: "Версия игры:",
selectGameVersion: "Выберите версию игры",
platform: "Платформа:",
selectPlatform: "Выберите платформу",
onlyAvailableFor: (project: string, platform: string) => `${project} доступен только для ${platform}`,
noVersionsAvailableFor: (gameVersion: string, loader: string) => `Версий не найдено для ${gameVersion} на ${loader}`,
declinedInvitation: "Отклонённое приглашение",
teamInvitationTitle: (teamType: string) => `Приглашение для присоединения к ${teamType}`, // teamType = organization | project
teamInviteDesc: (teamType: string, role: string) => `Вы были приглашены стать частью ${teamType} в качестве ${role}.`,
browse: {
mod: "Найти моды",
datamod: "Найти дата-моды",
"resource-pack": "Найти ресурспаки",
shader: "Найти шейдеры",
modpack: "Найти модпаки",
plugin: "Найти плагины",
},
rejected: "Отклонено",
withheld: "Скрыт",
archivedMessage: (project: string) =>
`Проект ${project} был архивирован. Он не будет получать никаких обновлений до тех пор, пока автор не решит разархивировать его.`,
publishingChecklist: {
required: "Обязательно",
suggestion: "Преложение",
review: "Рассмотреть",
progress: "Прогресс:",
title: "План публикации",
uploadVersion: "Загрузите версию",
uploadVersionDesc: "Для того, чтобы проект можно было отправить на рассмотрение, необходимо загрузить как минимум одну версию.",
addDescription: "Добавьте описание",
addDescriptionDesc: "Необходимо понятное описание к проекту.",
addIcon: "Добавьте иконку",
addIconDesc: "Желательно, чтобы ваш проект имел красивую и уникальную иконку, чтобы его можно было легко заметить.",
featureGalleryImg: "Добавьте лучшее изображение",
featureGalleryImgDesc: "Лучшие изображения могут создать первое впечатление у пользователей.",
selectTags: "Выберите теги",
selectTagsDesc: "Выберите все подходящие теги.",
addExtLinks: "Добавьте ссылки",
addExtLinksDesc: "Любые полезные ссылки, например, на исходный код, вики и так далее.",
selectLicense: "Выберите лицензию",
selectLicenseDesc: (projectType: string) => `Выберите лицензию, под которой вы распространяете ${projectType}.`,
selectEnv: "Выберите поддерживаемые среды",
selectEnvDesc: (projectType: string) => `Выберите среды, где применяется ваш ${projectType}.`,
submitForReview: "Отправить на рассмотрение",
submitForReviewDesc:
"Ваш проект виден только для участников. Он должен быть рассмотрен модераторами, чтобы стать доступным для всех.",
resubmitForReview: "Повторно отправить на рассмотрение",
resubmit_ApprovalRejected:
"Ваш проект был отклонён модератором. В большинстве случаев вы можете отправить проект на повторное рассмотрение после выполнения требований модератора.",
resubmit_ProjectWithheld:
"Ваш проект был скрыт модератором. В большинстве случаев вы можете отправить проект на повторное рассмотрение после выполнения требований модератора.",
visit: {
versionsPage: "Посетить страницу версий",
descriptionSettings: "Посетить настройки описания",
generalSettings: "Посетить основные настройки",
galleryPage: "Посетить галерею",
tagSettings: "Посетить настройки тегов",
linksSettings: "Посетить настройки ссылок",
licenseSettings: "Посетить настройки лицензии",
moderationPage: "Посетить страницу модерации",
},
},
},
version: {
deleteVersion: "Удалить версию",
sureToDelete: "Вы уверены, что хотите удалить эту версию?",
deleteDesc: "Это действие удалит эту версию навсегла (типо реально навсегда).",
enterVersionTitle: "Введите название версии...",
feature: "Пометить версию лучшей",
unfeature: "Снять отметку Лучшая с версии",
featured: "Лучшие",
releaseChannel: "Канал релизов",
versionNumber: "Номер версии",
selectLoaders: "Выберите загрузчики",
selectVersions: "Выберите версии",
cantAddCurrProject: "Нельзя добавить текущий проект как зависимость",
cantAddDuplicateDep: "Нельзя добавить одну и ту же зависимость два раза",
addDep: "Добавить зависимость",
enterProjectId: "Введите ID/Slug проекта",
enterVersionId: "Введите ID/Slug версии",
dependencies: "Зависимости",
files: "Файлы",
depencency: {
required: "Обязательно",
optional: "Необязательно",
incompatible: "Несовместимо",
embedded: "Встроено",
required_desc: (version: string) => `Версия ${version} обязательна`,
optional_desc: (version: string) => `Версия ${version} необязательна`,
incompatible_desc: (version: string) => `Версия ${version} несовместима`,
embedded_desc: (version: string) => `Версия ${version} встроена`,
},
primary: "Основной",
noPrimaryFile: "Основной файл не выбран",
chooseFile: "Выбрать файл",
replaceFile: "Заменить файл",
uploadExtraFiles: "Загрузить дополнительные фвйлы",
uploadExtraFilesDesc: "Используется для дополнительных файлов, таких как исходники, документация и так далее.",
selectFiles: "Выбрать файлы",
primaryFileRequired: "Основной файл обязателен",
metadata: "Металданные",
devReleasesNote: "ВНИМАНИЕ:- Старые dev-релизы будут удалены после публикации нового.",
publicationDate: "Опубликовано",
publisher: "Пользователь",
versionID: "ID Версии",
copySha1: "Копировать SHA-1 хеш",
copySha512: "Копировать SHA-512 хеш",
copyFileUrl: "Копировать URL файла",
},
projectSettings: {
settings: "Настройки проекта",
general: "Основное",
tags: "Теги",
links: "Ссылки",
members: "Участники",
view: "Отображение",
upload: "Загруженное",
externalLinks: "Внешние ссылки",
issueTracker: "Трекер проблем",
issueTrackerDesc: "Место, где пользователи делятся своими проблемами, ошибками и переживаниями касательно вашего проекта.",
sourceCode: "Исходный код",
sourceCodeDesc: "Страница/репозиторий, где содержится исходный код вашего проекта.",
wikiPage: "Вики",
wikiPageDesc: "Страница, содержащая информацию, документацию и помощь к вашему проекту.",
discordInvite: "Приглашение в Discord",
discordInviteDesc: "Ссылка-приглашение на ваш Discord сервер.",
licenseDesc1: (projectType: string) =>
`Очень важно выбрать правильную лицензию для ${projectType}. Вы можете выбрать одну из нашего списка или использовать свою. Вы также можете оставить ссылку на свою лицензию; иначе, будет отображен текст лицензии.`,
licenseDesc2:
"Введите корректный [SPDX идентификатор лицензии](https://spdx.org/licenses) в указанную область. Если ваша лицензия не имеет SPDX идентификатор (например, если вы создали лицензию сами или лицензия специфична для Cosmic Reach), просто поставьте галочку и введите название лицензии.",
selectLicense: "Выберите лицензию",
custom: "Своя",
licenseName: "Название лицензии",
licenseUrl: "URL Лицензии (необязательно)",
spdxId: "SPDX идентификатор",
doesntHaveSpdxId: "Лицензия не имеет SPDX идентификатор",
tagsDesc: "Правильно выбранные теги помогут людям найти ваш мод. Убедитесь, что выбрали все подходящие теги.",
tagsDesc2: (projectType: string) => `Выберите все категории, под которые подходит ваш ${projectType}.`,
featuredCategories: "Избранные категории",
featuredCategoriesDesc: (count: number) => `Вы можете избрать до ${count} самых релевантных тегов.`,
selectAtLeastOneCategory: "Выберите как минимум одну категорию, чтобы сделать ее избранной.",
projectInfo: "Информация о проекте",
clientSide: "Клиент",
clientSideDesc: (projectType: string) => `Выберите, если ваш ${projectType} имеет функционал на клиенте.`,
serverSide: "Сервер",
serverSideDesc: (projectType: string) => `Выберите, если ваш ${projectType} имеет функционал на сервере.`,
unknown: "Неизвестно",
// ? New strings
// clientOrServer: "Client or server",
// clientAndServer: "Client and server",
required: "Обязательно",
optional: "Необязательно",
unsupported: "Не поддерживается",
visibilityDesc:
"Публичные и архивированные проекты видны в поиске. Непубличные проекты доступны по ссылке, но не отображаются в поиске и профиле. Приватные проекты доступны только его участникам.",
ifApproved: "Если одобрено модераторами:",
visibleInSearch: "Отображается в поиске",
visibleOnProfile: "Отображается в профиле",
visibleViaUrl: "Доступен по ссылке",
visibleToMembersOnly: "Только участники проекта смогут его просматривать",
listed: "Публичный",
private: "Приватный",
unlisted: "По ссылке",
archived: "Архивирован",
deleteProject: "Удалить проект",
deleteProjectDesc: (site: string) =>
`Удалит ваш проект с серверов ${site}'s и поиска. Если вы нажмёте на эту кнопку, ваш проект будет удалён, так что будьте очень осторожны!`,
sureToDeleteProject: "Вы уверены, что хотите удалить этот проект?",
deleteProjectDesc2:
"Если вы продолжите, все версии и любые другие данные будут удалены с наших серверов. Это может поломать другие проекты, так что будьте очень осторожны!.",
typeToVerify: (projectName: string) => `Чтобы подтвердить, введите **${projectName}** ниже:`,
typeHere: "Введите сюда...",
manageMembers: "Управлять участниками",
leftProjectTeam: "Вы покинули команду проекта",
leaveOrg: "Покинуть организацию",
leaveProject: "Покинуть проект",
leaveOrgDesc: "Уберет вас из списка участников этой организации.",
leaveProjectDesc: "Уберет вас из списка участников этого проекта.",
sureToLeaveTeam: "Вы уверены, что хотите покинуть эту команду?",
cantManageInvites: "У вас нет доступа к управлению приглашениями",
inviteMember: "Пригласить участника",
inviteProjectMemberDesc: "Введите имя пользователя, которого вы хотите пригласить в проект в качестве участника.",
inviteOrgMemberDesc: "Введите имя пользователя, которого вы хотите пригласить в организацию в качестве участника.",
invite: "Пригласить",
memberUpdated: "Участник успешно обновлён",
pending: "Ожидает",
role: "Роль",
roleDesc: "Название роли, которую этот участник играет в команде.",
permissions: "Разрешения",
perms: {
upload_version: "Загружать версии",
delete_version: "Удалять версии",
edit_details: "Редактировать подробности",
edit_description: "Редактировать описание",
manage_invites: "Управлять приглашениями",
remove_member: "Удалять участников",
edit_member: "Редактировать участников",
delete_project: "Удалять проект",
view_analytics: "Просматривать аналитику",
view_revenue: "Просматривать доход",
},
owner: "Владелец",
removeMember: "Удалить участника",
transferOwnership: "Передать роль владельца",
overrideValues: "Переопределить значения",
overrideValuesDesc: "Переопределите стандартные значения и назначте специальные разрешения и роли для этого участника проекта.",
projectNotManagedByOrg:
"Этот проект не находится под управлением организации. If you are the member of any organizations, you can transfer management to one of them.",
transferManagementToOrg: "Передать управление",
selectOrg: "Выберите организацию",
projectManagedByOrg: (orgName: string) =>
`Этот проект находится под управлением организации ${orgName}. Стандартные разрешения установлены в настройках организации. Вы можете переопределить их ниже.`,
removeFromOrg: "Удалить из организации",
memberRemoved: "Участник успешно удалён",
sureToRemoveMember: (memberName: string) => `Вы уверены, что хотите удалить ${memberName} из этой командны?`,
ownershipTransfered: "Роль владельца успешно передана",
sureToTransferOwnership: (memberName: string) => `Вы уверены, что хотите передать роль владельца участнику ${memberName}?`,
},
organization: {
orgDoesntHaveProjects: "Эта организация пока что не имеет никаких проектов.",
manageProjects: "Управлять проектами",
orgSettings: "Настройки организации",
transferProjectsTip: "Вы можете перенести свои проекты в организацию через: Настройки проека > Участники",
noProjects_CreateOne: "Эта организация пока что не имеет никаких проектов. Нажмите на кнопку выше, чтобы создать новый.",
orgInfo: "Информация об организации",
deleteOrg: "Удалить организацию",
deleteOrgDesc: "Удаление организации приведет к переносу всех проектов к её владельцу. Это действие нельзя отменить.",
sureToDeleteOrg: "Вы уверены, что хотите удалить эту организацию?",
deleteOrgNamed: (orgName: string) => `Удалить организацию ${orgName}`,
deletionWarning: "Это действие удалит организацию навсегда (типо реально навсегда).",
perms: {
edit_details: "Редактировать подробности",
manage_invites: "Управлять приглашениями",
remove_member: "Удалять участников",
edit_member: "Редактировать участников",
add_project: "Создавать/добавлять проекты",
remove_project: "Удалять проекты",
delete_organization: "Удалять организацию",
edit_member_default_permissions: "Редактировать стандартные разрешения участников",
},
},
user: {
// ? New string
// admin: "Admin",
moderator: "Модератор",
doesntHaveProjects: (user: string) => `У пользователя ${user} ещё нет проектов.`,
isntPartOfAnyOrgs: (user: string) => `Пользователь ${user} не принадлежит ни одной организации.`,
joined: (when: string) => `Присоединился ${when}`, // eg: Joined 2 months ago
},
footer: {
company: "Документы",
terms: "Условия использования",
privacy: "Политика конфиденциальности",
rules: "Правила",
resources: "Ресурсы",
docs: "Документация",
status: "Статус",
support: "Поддержка",
socials: "Контакты",
about: "О нас",
changeTheme: "Сменить тему",
siteOfferedIn: (site: string) => `${site} доступен на следующих языках:`,
},
legal: {
legal: "Документы",
rulesTitle: "Контент",
// contentRules: Rules, // Not translated yet
termsTitle: "Условия использования",
copyrightPolicyTitle: "Политика авторских прав",
securityNoticeTitle: "Безопасноть",
privacyPolicyTitle: "Политика Конфиденциальности",
},
moderation: {
review: "Рассмотреть проекты",
reports: "Жалобы",
moderation: "Модерация",
statistics: "Статистика",
authors: "Авторы",
projectsInQueue: (count: number) => {
const lastDigit = count % 10;
if (lastDigit === 1) return "1 проект ожидает одобрения.";
if ([2, 3, 4].includes(lastDigit)) return `${count} проекта ожидают одобрения.`;
return `${count} проектов ожидают одобрения.`;
},
// hours will either be 24 or 48
projectsQueuedFor: (count: number, hours: number) => {
const lastDigit = count % 10;
if (lastDigit === 1) return `1 ожидает одобрения уже более ${hours} часов.`;
if ([2, 3, 4].includes(lastDigit)) return `${count} проекта ожидают одобрения уже более ${hours} часов.`;
return `${count} проектов ожидают одобрения уже более ${hours} часов.`;
},
submitted: (when: string) => `Отправлен на одобрение ${when}`, // eg: Created 4 hours ago, (the date string comes from the localized phrases defined at end of the file)
viewProject: "Посмотреть проект",
awaitingApproval: "Проект ожидает одобрения",
draft: "Черновик",
approve: "Одобрить",
reject: "Отклонить",
withhold: "Скрыть",
},
form: {
login: "Войти",
login_withSpace: "Войти",
signup: "Регистрация",
email: "Почта",
username: "Имя пользователя",
password: "Пароль",
name: "Название",
icon: "Иконка",
details: "Подробности",
description: "Описание",
id: "ID",
url: "URL",
projectType: "Тип проекта",
visibility: "Видимость",
summary: "Основное",
title: "Название",
ordering: "Упорядочивание",
featured: "Лучшее",
continue: "Продолжить",
submit: "Отправить",
remove: "Удалить",
confirm: "Подтвердить",
edit: "Изменить",
delete: "Удалить",
cancel: "Отмена",
saveChanges: "Сохранить изменения",
uploadIcon: "Загрузить иконку",
removeIcon: "Удалить иконку",
noFileChosen: "Файл не выбран",
showAllVersions: "Показать все версии",
},
error: {
sthWentWrong: "Ой! Что-то пошло не так",
errorDesc: "Кажется, что-то сломалось. Пока мы пытаемся исправить проблему, попробуйте перезагрузить страницу.",
refresh: "Перезагрузить",
pageNotFound: "404 | Страница не найдена.",
pageNotFoundDesc: "Извините, нам не удалось найти запрашиваемую Вами страницу.",
projectNotFound: "Проект не найден",
projectNotFoundDesc: (type: string, slug: string) => `${type} со slug/ID "${slug}" не существует.`,
},
editor: {
heading1: "Заголовок 1",
heading2: "Заголовок 2",
heading3: "Заголовок 3",
bold: "Жирный",
italic: "Курсив",
underline: "Подчеркнутый",
strikethrough: "Зачеркнутый",
code: "Код",
spoiler: "Спойлер",
bulletedList: "Непронумерованный список",
numberedList: "Пронумерованный список",
quote: "Цитата",
insertLink: "Вставить ссылку",
label: "Название",
enterLabel: "Введите название",
link: "Ссылка", // Noun
enterUrl: "Введите ссылку",
insertImage: "Вставить изображение",
imgAlt: "Описание (альтернативный текст)",
imgAltDesc: "Введите описание к изображению",
enterImgUrl: "Введите ссылку на изображение",
image: "Изображение",
inserYtVideo: "Вставьте YouTube-видео",
ytVideoUrl: "Ссылка на YouTube-видео",
enterYtUrl: "Введите ссылку на YouTube-видео",
video: "Видео",
preview: "Предпросмотр",
insert: "Вставить",
}
} satisfies Locale;