533 lines
26 KiB
TypeScript
533 lines
26 KiB
TypeScript
import russianMessages from "ra-language-russian";
|
||
|
||
import { SynapseTranslationMessages } from ".";
|
||
|
||
const fixedRussianMessages = {
|
||
...russianMessages,
|
||
ra: {
|
||
...russianMessages.ra,
|
||
navigation: {
|
||
...russianMessages.ra.navigation,
|
||
no_filtered_results: "Нет результатов",
|
||
clear_filters: "Все фильтры сбросить",
|
||
},
|
||
action: {
|
||
...russianMessages.ra.action,
|
||
select_all_button: "Выбрать все",
|
||
},
|
||
page: {
|
||
...russianMessages.ra.page,
|
||
empty: "Пусто",
|
||
access_denied: "Доступ запрещен",
|
||
authentication_error: "Ошибка аутентификации",
|
||
},
|
||
message: {
|
||
...russianMessages.ra.message,
|
||
access_denied: "У вас нет прав доступа к этой странице.",
|
||
authentication_error: "Сервер аутентификации вернул ошибку и не смог проверить ваши учетные данные.",
|
||
select_all_limit_reached: "Слишком много элементов для выбора. Были выбраны только первые %{max} элементов.",
|
||
},
|
||
},
|
||
};
|
||
|
||
const ru: SynapseTranslationMessages = {
|
||
...fixedRussianMessages,
|
||
synapseadmin: {
|
||
auth: {
|
||
base_url: "Адрес домашнего сервера",
|
||
welcome: "Добро пожаловать в Synapse Admin",
|
||
server_version: "Версия Synapse",
|
||
supports_specs: "поддерживает спецификации Matrix",
|
||
username_error: "Пожалуйста, укажите полный ID пользователя: '@user:domain'",
|
||
protocol_error: "Адрес должен начинаться с 'http://' или 'https://'",
|
||
url_error: "Неверный адрес сервера Matrix",
|
||
sso_sign_in: "Вход через SSO",
|
||
credentials: "Учетные данные",
|
||
access_token: "Токен доступа",
|
||
logout_acces_token_dialog: {
|
||
title: "Вы используете существующий токен доступа Matrix.",
|
||
content:
|
||
"Вы хотите завершить эту сессию (которая может быть использована в другом месте, например, в клиенте Matrix) или просто выйти из панели администрирования?",
|
||
confirm: "Завершить сессию",
|
||
cancel: "Просто выйти из панели администрирования",
|
||
},
|
||
},
|
||
users: {
|
||
invalid_user_id: "Локальная часть ID пользователя Matrix без адреса домашнего сервера.",
|
||
tabs: {
|
||
sso: "SSO",
|
||
experimental: "Экспериментальные",
|
||
limits: "Ограничения",
|
||
account_data: "Данные пользователя",
|
||
},
|
||
},
|
||
rooms: {
|
||
details: "Данные комнаты",
|
||
tabs: {
|
||
basic: "Основные",
|
||
members: "Участники",
|
||
detail: "Подробности",
|
||
permission: "Права доступа",
|
||
media: "Медиа",
|
||
},
|
||
},
|
||
reports: { tabs: { basic: "Основные", detail: "Подробности" } },
|
||
},
|
||
import_users: {
|
||
error: {
|
||
at_entry: "В записи %{entry}: %{message}",
|
||
error: "Ошибка",
|
||
required_field: "Отсутствует обязательное поле '%{field}'",
|
||
invalid_value: "Неверное значение в строке %{row}. Поле '%{field}' может быть либо 'true', либо 'false'",
|
||
unreasonably_big: "Отказано в загрузке слишком большого файла размером %{size} мегабайт",
|
||
already_in_progress: "Импорт уже в процессе",
|
||
id_exits: "ID %{id} уже существует",
|
||
},
|
||
title: "Импорт пользователей из CSV",
|
||
goToPdf: "Перейти к PDF",
|
||
cards: {
|
||
importstats: {
|
||
header: "Анализированные пользователи для импорта",
|
||
users_total:
|
||
"%{smart_count} пользователь в CSV файле |||| %{smart_count} пользователя в CSV файле |||| %{smart_count} пользователей в CSV файле",
|
||
guest_count: "%{smart_count} гость |||| %{smart_count} гостя |||| %{smart_count} гостей",
|
||
admin_count:
|
||
"%{smart_count} администратор |||| %{smart_count} администратора |||| %{smart_count} администраторов",
|
||
},
|
||
conflicts: {
|
||
header: "Стратегия разрешения конфликтов",
|
||
mode: {
|
||
stop: "Остановка при конфликте",
|
||
skip: "Показать ошибку и пропустить при конфликте",
|
||
},
|
||
},
|
||
ids: {
|
||
header: "Идентификаторы",
|
||
all_ids_present: "Идентификаторы присутствуют в каждой записи",
|
||
count_ids_present:
|
||
"%{smart_count} запись с ID |||| %{smart_count} записи с ID |||| %{smart_count} записей с ID",
|
||
mode: {
|
||
ignore: "Игнорировать идентификаторы в CSV и создать новые",
|
||
update: "Обновить существующие записи",
|
||
},
|
||
},
|
||
passwords: {
|
||
header: "Пароли",
|
||
all_passwords_present: "Пароли присутствуют в каждой записи",
|
||
count_passwords_present:
|
||
"%{smart_count} запись с паролем |||| %{smart_count} записи с паролями |||| %{smart_count} записей с паролями",
|
||
use_passwords: "Использовать пароли из CSV",
|
||
},
|
||
upload: {
|
||
header: "Загрузить CSV файл",
|
||
explanation:
|
||
"Здесь вы можете загрузить файл со значениями, разделёнными запятыми, которые будут использованы для создания или обновления данных пользователей. \
|
||
В файле должны быть поля 'id' и 'displayname'. Вы можете скачать и изменить файл-образец отсюда: ",
|
||
},
|
||
startImport: {
|
||
simulate_only: "Только симулировать",
|
||
run_import: "Импорт",
|
||
},
|
||
results: {
|
||
header: "Результаты импорта",
|
||
total: "%{smart_count} запись всего |||| %{smart_count} записи всего |||| %{smart_count} записей всего",
|
||
successful:
|
||
"%{smart_count} запись успешно импортирована |||| %{smart_count} записи успешно импортированы |||| %{smart_count} записей успешно импортированы",
|
||
skipped:
|
||
"%{smart_count} запись пропущена |||| %{smart_count} записи пропущены |||| %{smart_count} записей пропущено",
|
||
download_skipped: "Скачать пропущенные записи",
|
||
with_error:
|
||
"%{smart_count} запись с ошибкой |||| %{smart_count} записи с ошибками |||| %{smart_count} записей с ошибками",
|
||
simulated_only: "Импорт был симулирован",
|
||
},
|
||
},
|
||
},
|
||
delete_media: {
|
||
name: "Файлы",
|
||
fields: {
|
||
before_ts: "Последнее обращение до",
|
||
size_gt: "Более чем (в байтах)",
|
||
keep_profiles: "Сохранить аватары",
|
||
},
|
||
action: {
|
||
send: "Удалить файлы",
|
||
send_success: "Запрос успешно отправлен.",
|
||
send_failure: "Произошла ошибка.",
|
||
},
|
||
helper: {
|
||
send: "Это API удаляет локальные файлы с вашего собственного сервера, включая локальные миниатюры и копии скачанных файлов. \
|
||
Данный API не затрагивает файлы, загруженные во внешние хранилища.",
|
||
},
|
||
},
|
||
purge_remote_media: {
|
||
name: "Внешние медиа",
|
||
fields: {
|
||
before_ts: "последний доступ до",
|
||
},
|
||
action: {
|
||
send: "Очистить внешние медиа",
|
||
send_success: "Запрос на очистку внешних медиа был отправлен.",
|
||
send_failure: "Произошла ошибка при запросе очистки внешних медиа.",
|
||
},
|
||
helper: {
|
||
send: "Этот API очищает кэш внешних медиа с диска вашего сервера. Это включает любые локальные миниатюры и копии загруженных медиа. Этот API не повлияет на медиа, которые были загружены в собственное медиа-хранилище сервера.",
|
||
},
|
||
},
|
||
resources: {
|
||
users: {
|
||
name: "Пользователь |||| Пользователи",
|
||
email: "Почта",
|
||
msisdn: "Телефон",
|
||
threepid: "Почта / Телефон",
|
||
fields: {
|
||
avatar: "Аватар",
|
||
id: "ID пользователя",
|
||
name: "Имя",
|
||
is_guest: "Гость",
|
||
admin: "Администратор сервера",
|
||
locked: "Заблокирован",
|
||
suspended: "Приостановлен",
|
||
deactivated: "Деактивирован",
|
||
erased: "Удалён",
|
||
guests: "Показывать гостей",
|
||
show_deactivated: "Показывать деактивированных",
|
||
show_locked: "Показывать заблокированных",
|
||
show_suspended: "Показывать приостановленных",
|
||
user_id: "Поиск пользователя",
|
||
displayname: "Отображаемое имя",
|
||
password: "Пароль",
|
||
avatar_url: "Адрес аватары",
|
||
avatar_src: "Аватар",
|
||
medium: "Тип",
|
||
threepids: "3PID'ы",
|
||
address: "Адрес",
|
||
creation_ts_ms: "Дата создания",
|
||
consent_version: "Версия соглашения",
|
||
auth_provider: "Провайдер",
|
||
user_type: "Тип пользователя",
|
||
},
|
||
helper: {
|
||
password: "Смена пароля завершит все сессии пользователя.",
|
||
password_required_for_reactivation: "Вы должны предоставить пароль для реактивации учётной записи.",
|
||
create_password: "Сгенерировать надёжный и безопасный пароль, используя кнопку ниже.",
|
||
deactivate: "Вы должны предоставить пароль для реактивации учётной записи.",
|
||
suspend:
|
||
"Приостановка учётной записи означает, что пользователь не сможет войти в свою учётную запись, пока она не будет снова активирована.",
|
||
erase: "Пометить пользователя как удалённого в соответствии с GDPR",
|
||
admin: "Администратор сервера имеет полный контроль над сервером и его пользователями.",
|
||
lock: "Предотвращает использование пользователем сервера. Это неразрушающее действие, которое может быть отменено.",
|
||
erase_text:
|
||
"Это означает, что сообщения, отправленные пользователем (-ами), будут по-прежнему видны всем, кто находился в комнате в момент их отправки, но будут скрыты от пользователей, присоединившихся к комнате после этого.",
|
||
erase_admin_error: "Удаление собственного пользователя запрещено.",
|
||
modify_managed_user_error: "Изменение пользователя, управляемого системой, не допускается.",
|
||
username_available: "Имя пользователя доступно",
|
||
},
|
||
badge: {
|
||
you: "Вы",
|
||
bot: "Бот",
|
||
admin: "Админ",
|
||
support: "Поддержка",
|
||
regular: "Обычный пользователь",
|
||
system_managed: "Управляемый системой",
|
||
},
|
||
action: {
|
||
erase: "Удалить данные пользователя",
|
||
erase_avatar: "Удалить аватар",
|
||
delete_media: "Удаление всех медиафайлов, загруженных пользователем (-ами)",
|
||
redact_events: "Удаление всех событий, отправленных пользователем (-ами)",
|
||
generate_password: "Сгенерировать пароль",
|
||
overwrite_title: "Предупреждение!",
|
||
overwrite_content:
|
||
"Это имя пользователя уже занято. Вы уверены, что хотите перезаписать существующего пользователя?",
|
||
overwrite_cancel: "Отмена",
|
||
overwrite_confirm: "Перезаписать",
|
||
},
|
||
limits: {
|
||
messages_per_second: "Сообщений в секунду",
|
||
messages_per_second_text: "Количество действий, которые могут быть выполнены в секунду.",
|
||
burst_count: "Burst-счётчик",
|
||
burst_count_text: "Количество действий, которые могут быть выполнены до ограничения.",
|
||
},
|
||
account_data: {
|
||
title: "Данные пользователя",
|
||
global: "Глобальные",
|
||
rooms: "Комнаты",
|
||
},
|
||
},
|
||
rooms: {
|
||
name: "Комната |||| Комнаты",
|
||
fields: {
|
||
room_id: "ID комнаты",
|
||
name: "Название",
|
||
canonical_alias: "Псевдоним",
|
||
joined_members: "Участники",
|
||
joined_local_members: "Локальные участники",
|
||
joined_local_devices: "Локальные устройства",
|
||
state_events: "События состояния / Сложность",
|
||
version: "Версия",
|
||
is_encrypted: "Зашифровано",
|
||
encryption: "Шифрование",
|
||
federatable: "Федерация",
|
||
public: "Отображается в каталоге комнат",
|
||
creator: "Создатель",
|
||
join_rules: "Правила входа",
|
||
guest_access: "Гостевой доступ",
|
||
history_visibility: "Видимость истории",
|
||
topic: "Тема",
|
||
avatar: "Аватар",
|
||
actions: "Действия",
|
||
},
|
||
helper: {
|
||
forward_extremities:
|
||
"Оконечности — это события-листья в конце ориентированного ациклического графа (DAG) в комнате, т.е. события без дочерних элементов. \
|
||
Чем больше их в комнате, тем больше Synapse работает над разрешением состояния (это дорогостоящая операция). \
|
||
Хотя Synapse старается не допускать существования слишком большого числа таких событий в комнате, из-за ошибок они иногда снова появляются. \
|
||
Если в комнате >10 оконечностей, стоит найти комнату-виновника и попробовать удалить их с помощью SQL-запросов из #1760.",
|
||
},
|
||
enums: {
|
||
join_rules: {
|
||
public: "Для всех",
|
||
knock: "Надо постучать",
|
||
invite: "По приглашению",
|
||
private: "Приватная",
|
||
},
|
||
guest_access: {
|
||
can_join: "Гости могут войти",
|
||
forbidden: "Гости не могут войти",
|
||
},
|
||
history_visibility: {
|
||
invited: "С момента приглашения",
|
||
joined: "С момента входа",
|
||
shared: "С момента открытия доступа",
|
||
world_readable: "Для всех",
|
||
},
|
||
unencrypted: "Без шифрования",
|
||
},
|
||
action: {
|
||
erase: {
|
||
title: "Удалить комнату",
|
||
content:
|
||
"Действительно удалить эту комнату? Это действие будет невозможно отменить. Все сообщения и файлы в комнате будут удалены с сервера!",
|
||
fields: {
|
||
block: "Заблокировать и запретить пользователям присоединяться к комнате",
|
||
},
|
||
success: "Комната/ы успешно удалены",
|
||
failure: "Комната/ы не могут быть удалены.",
|
||
},
|
||
make_admin: {
|
||
assign_admin: "Назначить администратора",
|
||
title: "Назначить администратора комнате %{roomName}",
|
||
confirm: "Назначить администратора",
|
||
content:
|
||
"Введите полную MXID пользователя, которого нужно назначить администратором.\nПредупреждение: для этого должен быть назначен хотя бы один локальный участник в качестве администратора.",
|
||
success: "Пользователь назначен администратором комнаты.",
|
||
failure: "Пользователь не может быть назначен администратором комнаты. %{errMsg}",
|
||
},
|
||
},
|
||
},
|
||
reports: {
|
||
name: "Жалоба |||| Жалобы",
|
||
fields: {
|
||
id: "ID",
|
||
received_ts: "Дата и время жалобы",
|
||
user_id: "Автор жалобы",
|
||
name: "Название комнаты",
|
||
score: "Баллы",
|
||
reason: "Причина",
|
||
event_id: "ID события",
|
||
event_json: {
|
||
origin: "Исходнный сервер",
|
||
origin_server_ts: "Дата и время отправки",
|
||
type: "Тип события",
|
||
content: {
|
||
msgtype: "Тип содержимого",
|
||
body: "Содержимое",
|
||
format: "Формат",
|
||
formatted_body: "Форматированное содержимое",
|
||
algorithm: "Алгоритм",
|
||
url: "Ссылка",
|
||
info: {
|
||
mimetype: "Тип",
|
||
},
|
||
},
|
||
},
|
||
},
|
||
action: {
|
||
erase: {
|
||
title: "Удалить жалобу",
|
||
content: "Действительно удалить жалобу? Это действие будет невозможно отменить.",
|
||
},
|
||
},
|
||
},
|
||
connections: {
|
||
name: "Подключения",
|
||
fields: {
|
||
last_seen: "Дата",
|
||
ip: "IP адрес",
|
||
user_agent: "Юзер-агент",
|
||
},
|
||
},
|
||
devices: {
|
||
name: "Устройство |||| Устройства",
|
||
fields: {
|
||
device_id: "ID устройства",
|
||
display_name: "Название",
|
||
last_seen_ts: "Дата и время",
|
||
last_seen_ip: "IP адрес",
|
||
},
|
||
action: {
|
||
erase: {
|
||
title: "Удаление %{id}",
|
||
content: 'Действительно удалить устройство "%{name}"?',
|
||
success: "Устройство успешно удалено.",
|
||
failure: "Произошла ошибка.",
|
||
},
|
||
},
|
||
},
|
||
users_media: {
|
||
name: "Файлы",
|
||
fields: {
|
||
media_id: "ID файла",
|
||
media_length: "Размер файла (в байтах)",
|
||
media_type: "Тип",
|
||
upload_name: "Имя файла",
|
||
quarantined_by: "На карантине",
|
||
safe_from_quarantine: "Защитить от карантина",
|
||
created_ts: "Создано",
|
||
last_access_ts: "Последний доступ",
|
||
},
|
||
action: {
|
||
open: "Открыть файл в новом окне",
|
||
},
|
||
},
|
||
protect_media: {
|
||
action: {
|
||
create: "Не защищён, установить защиту",
|
||
delete: "Защищён, снять защиту",
|
||
none: "На карантине",
|
||
send_success: "Статус защиты успешно изменён.",
|
||
send_failure: "Произошла ошибка.",
|
||
},
|
||
},
|
||
quarantine_media: {
|
||
action: {
|
||
name: "Карантин",
|
||
create: "Поместить на карантин",
|
||
delete: "На карантине, снять карантин",
|
||
none: "Защищено от карантина",
|
||
send_success: "Статус карантина успешно изменён.",
|
||
send_failure: "Произошла ошибка.",
|
||
},
|
||
},
|
||
pushers: {
|
||
name: "Пушер |||| Пушеры",
|
||
fields: {
|
||
app: "Приложение",
|
||
app_display_name: "Название приложения",
|
||
app_id: "ID приложения",
|
||
device_display_name: "Название устройства",
|
||
kind: "Вид",
|
||
lang: "Язык",
|
||
profile_tag: "Тег профиля",
|
||
pushkey: "Ключ",
|
||
data: { url: "URL" },
|
||
},
|
||
},
|
||
servernotices: {
|
||
name: "Серверные уведомления",
|
||
send: "Отправить серверные уведомления",
|
||
fields: {
|
||
body: "Сообщение",
|
||
},
|
||
action: {
|
||
send: "Отправить",
|
||
send_success: "Серверное уведомление успешно отправлено.",
|
||
send_failure: "Произошла ошибка.",
|
||
},
|
||
helper: {
|
||
send: 'Отправить серверное уведомление выбранным пользователям. На сервере должна быть активна функция "Server Notices".',
|
||
},
|
||
},
|
||
user_media_statistics: {
|
||
name: "Файлы пользователей",
|
||
fields: {
|
||
media_count: "Количество файлов",
|
||
media_length: "Размер файлов",
|
||
},
|
||
},
|
||
forward_extremities: {
|
||
name: "Оконечности",
|
||
fields: {
|
||
id: "ID события",
|
||
received_ts: "Дата и время",
|
||
depth: "Глубина",
|
||
state_group: "Группа состояния",
|
||
},
|
||
},
|
||
room_state: {
|
||
name: "События состояния",
|
||
fields: {
|
||
type: "Тип",
|
||
content: "Содержимое",
|
||
origin_server_ts: "Дата отправки",
|
||
sender: "Отправитель",
|
||
},
|
||
},
|
||
room_media: {
|
||
name: "Медиа",
|
||
fields: {
|
||
media_id: "ID медиа",
|
||
},
|
||
helper: {
|
||
info: "Это список медиа, которые были загружены в комнату. Невозможно удалить медиа, которые были загружены в внешние медиа-репозитории.",
|
||
},
|
||
action: {
|
||
error: "%{errcode} (%{errstatus}) %{error}",
|
||
},
|
||
},
|
||
room_directory: {
|
||
name: "Каталог комнат",
|
||
fields: {
|
||
world_readable: "Гости могут просматривать без входа",
|
||
guest_can_join: "Гости могут войти",
|
||
},
|
||
action: {
|
||
title:
|
||
"Удалить комнату из каталога |||| Удалить %{smart_count} комнаты из каталога |||| Удалить %{smart_count} комнат из каталога",
|
||
content:
|
||
"Действительно удалить комнату из каталога? |||| Действительно удалить %{smart_count} комнаты из каталога? |||| Действительно удалить %{smart_count} комнат из каталога?",
|
||
erase: "Удалить из каталога комнат",
|
||
create: "Опубликовать в каталоге комнат",
|
||
send_success: "Комната успешно опубликована.",
|
||
send_failure: "Произошла ошибка.",
|
||
},
|
||
},
|
||
destinations: {
|
||
name: "Федерация",
|
||
fields: {
|
||
destination: "Назначение",
|
||
failure_ts: "Дата и время ошибки",
|
||
retry_last_ts: "Дата и время последней попытки",
|
||
retry_interval: "Интервал между попытками",
|
||
last_successful_stream_ordering: "Последний успешный поток",
|
||
stream_ordering: "Поток",
|
||
},
|
||
action: { reconnect: "Переподключиться" },
|
||
},
|
||
registration_tokens: {
|
||
name: "Токены регистрации",
|
||
fields: {
|
||
token: "Токен",
|
||
valid: "Рабочий токен",
|
||
uses_allowed: "Количество использований",
|
||
pending: "Ожидает",
|
||
completed: "Завершено",
|
||
expiry_time: "Дата окончания",
|
||
length: "Длина",
|
||
},
|
||
helper: { length: "Длина токена, если токен не задан." },
|
||
},
|
||
},
|
||
};
|
||
export default ru;
|