From d1606eb7d0404ab316dcb837f116f7090cddf421 Mon Sep 17 00:00:00 2001 From: Miralyn <41351810+Miralyn@users.noreply.github.com> Date: Sun, 19 Jun 2022 01:02:21 +1000 Subject: [PATCH] Add Russian translation for server software (#1304) * Don't know what Dispatch means and can't really find it in Russian anywhere, not a specialist anyway so decided to not invent things. * lost some symbols accidentally --- src/main/resources/languages/ru-RU.json | 446 ++++++++++++++++++++++++ 1 file changed, 446 insertions(+) create mode 100644 src/main/resources/languages/ru-RU.json diff --git a/src/main/resources/languages/ru-RU.json b/src/main/resources/languages/ru-RU.json new file mode 100644 index 000000000..3e5baa4af --- /dev/null +++ b/src/main/resources/languages/ru-RU.json @@ -0,0 +1,446 @@ +{ + "messages": { + "game": { + "port_bind": "Сервер запущен на порте %s", + "connect": "Клиент подключился с %s", + "disconnect": "Клиент подключился с %s", + "game_update_error": "Произошла ошибка при обновлении игры.", + "command_error": "Командная ошибка:" + }, + "dispatch": { + "port_bind": "[Dispatch] Dispatch server started on port %s", + "request": "[Dispatch] Client %s %s request: %s", + "keystore": { + "general_error": "[Dispatch] Error while loading keystore!", + "password_error": "[Dispatch] Unable to load keystore. Trying default keystore password...", + "no_keystore_error": "[Dispatch] Сертификат SSL не найден! Возвращаемся к режиму сервера HTTP.", + "default_password": "[Dispatch] The default keystore password was loaded successfully. Please consider setting the password to 123456 in config.json." + }, + "authentication": { + "default_unable_to_verify": "[Авторизация] Произошел вызов метода verifyUser, который недоступен в стандартном обработчике авторизации." + }, + "no_commands_error": "Commands are not supported in dispatch only mode.", + "unhandled_request_error": "[Dispatch] Potential unhandled %s request: %s.", + "account": { + "login_attempt": "[Dispatch] Клиент %s пытается войти.", + "login_success": "[Dispatch] Клиент %s вошел как %s.", + "login_max_player_limit": "[Dispatch] Клиент %s не смог войти по причине: Число игроков в сети достигло предела", + "login_token_attempt": "[Dispatch] Клиент %s пытается войти с помощью токена.", + "login_token_error": "[Dispatch] Клиент %s не смог войти с помощью токена.", + "login_token_success": "[Dispatch] Клиент %s вошел с помощью токена как %s.", + "combo_token_success": "[Dispatch] Client %s succeed to exchange combo token.", + "combo_token_error": "[Dispatch] Client %s failed to exchange combo token.", + "account_login_create_success": "[Dispatch] Клиенту %s не удалось войти по причине: Аккаунт %s был создан.", + "account_login_create_error": "[Dispatch] Клиенту %s не удалось войти по причне : Не удалось создать аккаунт.", + "account_login_exist_error": "[Dispatch] Клиенту %s не удалось войти по причине: Аккаунт не найден.", + "account_cache_error": "Game account cache information error.", + "session_key_error": "Некорректный ключ сессии.", + "username_error": "Имя пользователя не обнаружено.", + "username_create_error": "Имя пользователя не найденоUsername not found, создание не удалось.", + "server_max_player_limit": "Число игроков в сети достигло предела" + }, + "router_error": "[Dispatch] Unable to attach router." + }, + "status": { + "free_software": "Grasscutter является БЕСПЛАТНЫМ программным обеспечением. Если вы заплатили за него деньги, то вас обманули. Домашняя страница проекта: https://github.com/Grasscutters/Grasscutter", + "starting": "Запускаем Grasscutter...", + "shutdown": "Отключаемся...", + "done": "Готово! Для получения помощи, введите \"help\"", + "error": "Произошла ошибка.", + "welcome": "Добро пожаловать в Grasscutter!", + "run_mode_error": "Некорректный режим запуска сервера: %s.", + "run_mode_help": "Сервер должен запускаться в одном из следующих режимов: 'HYBRID', 'DISPATCH_ONLY', или 'GAME_ONLY'. Не удалось запустить Grasscutter...", + "create_resources": "Создаём папку ресурсов...", + "resources_error": "Поместите копию папок 'BinOutput' и 'ExcelBinOutput' в папку ресурсов.", + "version": "Версия Grasscutter: %s-%s", + "game_version": "Версия игры: %s" + } + }, + "commands": { + "generic": { + "not_specified": "Команда не выбрана.", + "unknown_command": "Неизвестная команда: %s", + "permission_error": "У вас нет доступа к этой команде.", + "console_execute_error": "Эту команду можно запустить только из консоли.", + "player_execute_error": "Запустите эту команду внутри игры.", + "command_exist_error": "Команда не найдена.", + "no_usage_specified": "Применение команды не указано", + "no_description_specified": "Описание отсутствует", + "invalid": { + "amount": "Некорректное количество.", + "artifactId": "Некорректный ID артефакта.", + "avatarId": "Некорректный ID аватара.", + "avatarLevel": "Некорректный уровень аватара (avatarLevel).", + "entityId": "Некорректный ID сущности.", + "itemId": "Некорректный ID предмета.", + "itemLevel": "Некорректный уровень предмета (itemLevel).", + "itemRefinement": "Некорректный уровень пробуждения предмета (itemRefinement).", + "playerId": "Некорректный ID игрока.", + "uid": "Некорректный UID." + } + }, + "execution": { + "uid_error": "Некорректный UID.", + "player_exist_error": "Игрок не найден.", + "player_offline_error": "Игрок не в сети.", + "item_id_error": "Некорректный ID предмета.", + "item_player_exist_error": "Некорректный предмет или UID.", + "entity_id_error": "Некорректный ID сущности.", + "player_exist_offline_error": "Игрок не был найден или не в сети.", + "argument_error": "Некорректные аргументы.", + "clear_target": "Цель была удалена.", + "set_target": "Все последующие команды будут использовать @%s в качестве цели по умолчанию.", + "set_target_online": "@%s сейчас в сети. Для некоторых команд, цель должна быть не в сети.", + "set_target_offline": "@%s сейчас не в сети. Для некоторых команд, цель должна быть в сети.", + "need_target": "Этой команде требуется UID цели. Добавьте аргумент <@UID> или задайте постоянную цель с помощью /target @UID.", + "need_target_online": "Для данной команды требуется UID цели, находящейся в сети, а выбранная цель сейчас не в сети. Введите другой аргумент <@UID> или добавьте постоянную цель с помощью /target @UID.", + "need_target_offline": "Для данной команды требуется UID цели, находящейся не в сети, а выбранная цель сейчас в сети. Введите другой аргумент <@UID> или добавьте постоянную цель с помощью /target @UID." + }, + "status": { + "enabled": "Включено", + "disabled": "Выключено", + "help": "Помощь", + "success": "Успех" + }, + "account": { + "modify": "Изменить аккаунты пользователя", + "invalid": "Некорректный UID.", + "exists": "Аккаунт с таким именем пользователя и/или UID уже существует.", + "create": "Создан аккаунт с UID %s.", + "delete": "Аккаунт удалён.", + "no_account": "Аккаунт не найден.", + "command_usage": "Применение: account <имя_пользователя> [UID]", + "description": "Изменяет аккаунт пользователя" + }, + "broadcast": { + "command_usage": "Применение: broadcast <сообщение>", + "message_sent": "Сообщение отправлено.", + "description": "Отправляет сообщение всем игрокам" + }, + "changescene": { + "usage": "Применение: changescene ", + "already_in_scene": "Вы уже находитесь в этой сцене.", + "success": "Переход в сцену %s.", + "exists_error": "Указанной сцены не существует.", + "description": "Изменяет текущую сцену" + }, + "clear": { + "command_usage": "Применение: clear ", + "weapons": "Удалены оружия у %s.", + "artifacts": "Удалены артефакты у %s.", + "materials": "Удалены материалы у %s.", + "furniture": "Удалена мебель у %s.", + "displays": "Cleared displays for %s.", + "virtuals": "Cleared virtuals for %s.", + "everything": "Удалено всё у %s.", + "description": "Удаляет все неэкипированные на данный момент предметы из инвентаря, включая предметы золотой редкости" + }, + "coop": { + "usage": "Применение: coop [UID хоста]", + "success": "Игрок %s был призван в мир %s.", + "description": "Принудительно присоединяет кого-то к миру другого человека. Если не выбрана цель, то вы всё равно войдете в совместный режим." + }, + "drop": { + "command_usage": "Применение: drop [кол-во]", + "success": "Были уронены %s игрока %s.", + "description": "Роняет предмет возле вас" + }, + "enter_dungeon": { + "usage": "Применение: enterdungeon ", + "changed": "Произошёл переход в подземелье %s.", + "not_found_error": "Подземелье не существует.", + "in_dungeon_error": "Вы уже в этом подземелье.", + "description": "Позволяет войти в подземелье" + }, + "giveAll": { + "usage": "Применение: giveall [игрок] [кол-во]", + "started": "Получаем все предметы...", + "success": "Все предметы были успешно выданы %s.", + "invalid_amount_or_playerId": "Некорректное число или ID игрока.", + "description": "Выдаёт все предметы" + }, + "giveArtifact": { + "usage": "Применение: giveart|gart [игрок] [[,<раз>]]... [уровень]", + "id_error": "Некорректный ID артефакта.", + "success": "Выдан %s игроку %s.", + "description": "Выдает игроку заданный артефакт" + }, + "giveChar": { + "usage": "Применение: givechar [level]", + "given": "Выдан(а) %s с уровнем %s игроку %s.", + "invalid_avatar_id": "Некорректный ID аватара.", + "invalid_avatar_level": "Некорректный уровень аватара.", + "invalid_avatar_or_player_id": "Некорректный ID игрока или аватара.", + "description": "Выдает игроку заданного персонажа" + }, + "give": { + "usage": "Применение: give <игрок> [кол-во] [уровень] [пробуждение]", + "refinement_only_applicable_weapons": "Пробуждение применимо только к оружию.", + "refinement_must_between_1_and_5": "Значение пробуждения должно быть от 1 до 5.", + "given": "Выдано %s %s игроку %s.", + "given_with_level_and_refinement": "Выдано %s с уровнем %s, уровнем пробуждения %s %s раз игроку %s.", + "given_level": "Выдано %s с уровнем %s %s раз игроку %s.", + "description": "Выдаёт предмет лично вам или заданному игроку" + }, + "godmode": { + "success": "Godmode теперь %s для %s.", + "description": "Не позволяет получать урон. По умолчанию переключается." + }, + "heal": { + "success": "Все персонажи были вылечены.", + "description": "Лечит всех персонажей в вашей команде." + }, + "help": { + "usage": "Применение: ", + "aliases": "Альтернативные названия: ", + "available_commands": "Доступные команды: ", + "description": "Отправляет сообщение с помощью или показывает информацию о заданной команде" + }, + "kick": { + "player_kick_player": "Игрок [%s:%s] кикнул игрока [%s:%s]", + "server_kick_player": "Кикаем игрока [%s:%s]...", + "description": "Кикает указанного игрока с сервера (WIP)" + }, + "killall": { + "usage": "Применение: killall [playerUID] [sceneID]", + "scene_not_found_in_player_world": "В мире игрока не была обнаружена эта сцена.", + "kill_monsters_in_scene": "Убиваем %s монстров в сцене %s.", + "description": "Убивает все сущности" + }, + "killCharacter": { + "usage": "Применение: killcharacter [playerID]", + "success": "Убит текущий персонаж игрока %s.", + "description": "Убивает текущего персонажа игрока" + }, + "language": { + "current_language": "Текущий язык: %s.", + "language_changed": "Язык изменен на: %s.", + "language_not_found": "На текущий момент, на сервере недоступен этот язык.", + "description": "Отображает или изменяет текущий язык" + }, + "list": { + "success": "Сейчас в сети %s игрок(ов):", + "description": "Список игроков в сети" + }, + "nostamina": { + "success": "NoStamina теперь %s для %s.", + "description": "Поддерживает уровень выносливости на максимуме." + }, + "permission": { + "usage": "Применение: permission <имя_пользователя> <разрешение>", + "add": "Разрешение добавлено.", + "has_error": "У данного пользователя уже имеется это разрешение!", + "remove": "Разрешение удалено.", + "not_have_error": "У данного пользователя отсутствует данное разрешение!", + "account_error": "Аккаунт не найден.", + "description": "Добавляет или удаляет разрешения у пользователя" + }, + "position": { + "success": "Координаты: %s, %s, %s\nID сцены: %s", + "description": "Показывает координаты" + }, + "quest": { + "usage": "quest [ID_квеста]", + "added": "Квест %s был добавлен.", + "finished": "Квест %s был завершен.", + "not_found": "Квест не найден.", + "invalid_id": "Неизвестный ID квеста.", + "description": "Добавляет или завершает квесты" + }, + "reload": { + "reload_start": "Перезагружаем файл конфигурации.", + "reload_done": "Перезагрузка завершена.", + "description": "Перезагружает конфигурационный файл сервера" + }, + "resetConst": { + "reset_all": "Сбросить созвездия всех аватаров.", + "success": "Созвездия %s были сброшены. Перезайдите в игру для вступления изменений в силу.", + "description": "Сбрасывает уровень созвездий активных в данный момент персонажей. Для вступления изменений в силу, после ввода команды необходимо перезайти в игру" + }, + "resetShopLimit": { + "usage": "Применение: resetshop ", + "success": "Сброс выполнен успешно.", + "description": "Сбрасывает таймер обновления магазина у выбранного игрока" + }, + "restart": { + "description": "Перезапускает текущую сессию" + }, + "sendMail": { + "usage": "Применение: sendmail [ID_шаблона]", + "user_not_exist": "Пользователь с ID '%s' не найден.", + "start_composition": "Начинаем создание письма.\nВведите '/sendmail <заголовок>' для того, чтобы продолжить.\nВ любой момент времени, вы можете прекратить писать письмо, введя '/sendmail stop'.", + "templates": "Шаблоны писем скоро будут реализованы...", + "invalid_arguments": "Некорректные аргументы.", + "send_cancel": "Отправление сообщения было отменено.", + "send_done": "Сообщение было отправлено пользователю %s!", + "send_all_done": "Сообщение было отправлено всем пользователям!", + "not_composition_end": "Message composition not at final stage.\nPlease use '/sendmail %s' or '/sendmail stop' to cancel", + "please_use": "Пожалуйста, введите '/sendmail %s'", + "set_title": "Был задан следующий заголовок: '%s'.\nВведите '/sendmail <содержание>' для того, чтобы продолжить.", + "set_contents": "Было задано следующее содержание письма: '%s'.\Введите '/sendmail <отправитель>' для того, чтобы продолжить.", + "set_message_sender": "Был задан следующий отправитель письма: '%s'.\Введите '/sendmail [кол-во] [уровень]' для того, чтобы продолжить.", + "send": "Было задано следующее вложение: %s %s (%s уровня).\nВы можете продолжить добавлять предметы или ввести '/sendmail finish' для того, чтобы отправить письмо.", + "invalid_arguments_please_use": "Некорректные аргументы.\n Пожалуйста, введите '/sendmail %s'", + "title": "<заголовок>", + "message": "<содержание>", + "sender": "<отправитель>", + "arguments": " [кол-во] [уровень]", + "error": "ОШИБКА: Некорректная стадия создания %s. Проверьте stacktrace в консоли.", + "description": "Отправляет сообщение по почте заданному пользователю. Применение данной команды изменяется в зависимости от стадии написания письма." + }, + "sendMessage": { + "usage": "Применение: sendmessage <игрок> <сообщение>", + "success": "Сообщение отправлено.", + "description": "Отправляет сообщение выбранному игроку от имени сервера" + }, + "setFetterLevel": { + "usage": "Применение: setfetterlevel ", + "range_error": "Значение уровня дружбы должно быть между 0 и 10.", + "success": "Уровень дружбы стал равен %s.", + "level_error": "Некорректный уровень дружбы.", + "description": "Устанавливает уровень дружбы для активного персонажа" + }, + "setStats": { + "usage_console": "Применение: setstats|stats @ <хар-ка> <значение>", + "usage_ingame": "Применение: setstats|stats [@UID] <хар-ка> <значение>", + "help_message": "\n\tВозможные значения для <хар-ка>: hp | maxhp | def | atk | em | er | crate | cdmg | cdr | heal | heali | shield | defi\n\t(прод.) Бонус элементального урона: epyro | ecryo | ehydro | egeo | edendro | eelectro | ephys\n\t(cont.) Элементальное сопротивление: respyro | rescryo | reshydro | resgeo | resdendro | reselectro | resphys\n", + "value_error": "Некорректное значение характеристики.", + "uid_error": "Некорректный UID.", + "player_error": "Игрок не найден или находится не в сети.", + "set_self": "Характеристика %s стала равной %s.", + "set_for_uid": "Характеристика %s игрока %s стала равной %s.", + "set_max_hp": "Максимальное значение здоровья стало равно %s.", + "description": "Задаёт боевые характеристики для активного персонажа" + }, + "setWorldLevel": { + "usage": "Применение: setworldlevel ", + "value_error": "Уровень мира должен находиться в пределах 0-8.", + "success": "Уровень мира стал равен %s.", + "invalid_world_level": "Некорректный уровень мира.", + "description": "Задает уровень мира (Перезайдите в игру для того, чтобы увидеть результат)" + }, + "spawn": { + "usage": "Применение: spawn [кол-во] [уровень(только для монстров)] [ (только для монстров, опционально)]", + "success": "Заспавнено %s %s.", + "limit_reached": "Лимит существ в сцене был достигнут. Спавним %s сущностей вместо этого.", + "description": "Спавнит сущность неподалеку от вас" + }, + "stop": { + "success": "Сервер завершает свою работу...", + "description": "Завершает работу сервера" + }, + "talent": { + "usage_1": "Для того, чтобы задать уровень таланта: /talent set <значение>", + "usage_2": "Еще один способ задать уровень таланта: /talent <значение>", + "usage_3": "Для того, чтобы получить ID таланта: /talent getid", + "lower_16": "Некорректный уровень таланта. Уровень должен быть ниже 16.", + "set_id": "Уровень таланта стал равен %s.", + "set_atk": "Уровень таланта стандартной атаки стал равен %s.", + "set_e": "Уровень таланта способности на E стал равен %s.", + "set_q": "Уровень таланта способности на Q стал равен %s.", + "invalid_skill_id": "Некорректный ID способности.", + "set_this": "Этот уровень таланта стал равен %s.", + "invalid_level": "Некорректный уровень таланта.", + "normal_attack_id": "ID стандартной атаки: %s.", + "e_skill_id": "ID способности на E: %s.", + "q_skill_id": "ID способности на Q: %s.", + "description": "Устанавливает уровень таланта для вашего активного персонажа" + }, + "team": { + "usage": "Применение: team [ID_аватара,...] [индекс|first|last|индекс-индекс,...]", + "invalid_usage": "Некорректное применение.", + "add_usage": "Применение (для добавления): team add [индекс]", + "invalid_index": "Некорректный индекс.", + "add_too_much": "Сервер позволяет вам иметь максимум %d аватар(а) в команде.", + "failed_to_add_avatar": "Не удалось добавить ID аватара %s.", + "remove_usage": "Применение (для удаления): team remove <индекс|first|last|индекс-индекс,...>", + "failed_to_parse_index": "Не удалось обработать индекс: %s", + "remove_too_much": "Вы не можете удалить всех своих аватаров.", + "ignore_index": "Игнорированы индекс(ы): %s", + "set_usage": "Применение (для задания): team set <индекс> ", + "index_out_of_range": "Указанный индекс вне границ.", + "failed_parse_avatar_id": "Не удалось распознать ID аватара: %s", + "avatar_already_in_team": "Аватар уже находится в команде.", + "avatar_not_found": "Аватар %d не найден.", + "description": "Вручную настройте свою команду." + }, + "teleportAll": { + "success": "Все игроки были телепортированы к вам.", + "error": "Данную команду возможно использовать только в многопользовательском режиме.", + "description": "Телепортирует всех игроков в вашем мире к вам" + }, + "teleport": { + "usage_server": "Применение: tp @ [ID_сцены]", + "usage": "Применение: tp [@] [ID_сцены]", + "specify_player_id": "Нужно указать ID игрока.", + "invalid_position": "Некорректная позиция.", + "success": "Игрок %s был телепортирован по координатам %s, %s, %s в сцене %s.", + "description": "Изменяет позицию игрока" + }, + "unlimitenergy": { + "success": "UnlimitEnergy теперь %s для игрока %s.", + "config_error": "Команда недоступна, поскольку energyUsage равно false в config.json.", + "description": "Используйте данный элемент для того, чтобы не тратить энергию" + }, + "unlocktower": { + "success": "Теперь открыты все этажи Коридора Бездны.", + "description": "Открывает все уровни башни" + }, + "weather": { + "usage": "Применение: weather <тип_климата(Id погоды)> <тип_погоды(Id климата)>\nТипы погоды 0: Отсутствует, 1: Солнечная, 2: Пасмурная, 3: Дождливая, 4: Грозовая, 5: Снежная, 6: Туманная", + "success": "Тип климата был изменен на %s, тип погоды: %s.", + "invalid_id": "Некорректный ID.", + "description": "Изменяет погоду" + }, + "ban": { + "description": "Банит игрока", + "success": "Успех.", + "failure": "Неудача, игрок не найден.", + "invalid_time": "Не удалось определить промежуток времени.", + "invalid_player_id": "Не удалось определить ID игрока.", + "command_usage": "Применение: ban [промежуток_времени] [причина]" + }, + "unban": { + "description": "Разбанивает игрока", + "success": "Успех.", + "failure": "Неудача, игрок не найден.", + "invalid_player_id": "Не удалось определить ID игрока.", + "command_usage": "Применение: unban " + } + }, + "gacha": { + "details": { + "title": "Подробности баннера", + "available_five_stars": "Доступные 5-звездочные предметы", + "available_four_stars": "Доступные 4-звездочные предметы", + "available_three_stars": "Доступные 3-звездочные предметы" + }, + "records": { + "title": "Результаты участия", + "date": "Дата", + "item": "Предмет" + } + }, + "documentation": { + "handbook": { + "title": "Справочник гейм-мастера", + "title_commands": "Команды", + "title_avatars": "Аватары", + "title_items": "Предметы", + "title_scenes": "Сцены", + "title_monsters": "Монстры", + "header_id": "ID", + "header_command": "Команда", + "header_description": "Описание", + "header_avatar": "Аватар", + "header_item": "Предмет", + "header_scene": "Сцена", + "header_monster": "Монстр" + }, + "index": { + "title": "Документация", + "handbook": "Справочник гейм-мастера", + "gacha_mapping": "Мапирование системы гача в JSON" + } + } +} \ No newline at end of file