Files
pipu-music/packages/i18n/locales/ru/errors.json
T
mrleo1nidandClaude Opus 5.5 ab092def54
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 50s
ci / ts / ts (packages + web) (push) Successful in 43s
ci / docker / docker (образы собираются — их сервер собирает сам при обновлении) (push) Successful in 27s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m22s
feat(web): sign-in, first-run setup, app shell and user admin (M1)
- core: AuthSession keeps the access token in memory, refreshes it
  once for all parallel requests (single-flight) and retries them;
  refresh races between tabs are retried, reuse signs out; ApiError
  carries problem+json codes and field errors
- web: TanStack Router with guards — guests go to /login, the bootstrap
  admin to /setup/admin, temporary passwords to /setup/password, admin
  pages by role
- login, setup screens, Classic shell (top bar, role-based sidebar,
  empty player), settings: name, theme, language, password, devices
- users admin: search, role filter, create with a one-time temporary
  password, reset, block, role change, delete as the policy allows;
  audit log for admins
- ru/en strings for auth, admin and error codes; language and theme
  are saved in the profile

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 06:33:46 +03:00

48 lines
3.5 KiB
JSON

{
"common": {
"internal": "Что-то пошло не так на сервере. Попробуйте ещё раз",
"bad_request": "Некорректный запрос",
"not_found": "Не найдено",
"method_not_allowed": "Действие не поддерживается",
"network": "Нет связи с сервером. Проверьте сеть"
},
"auth": {
"invalid_credentials": "Неверный логин или пароль",
"too_many_attempts": "Слишком много попыток входа. Подождите немного",
"user_blocked": "Учётная запись заблокирована. Обратитесь к администратору",
"unauthorized": "Войдите, чтобы продолжить",
"token_expired": "Сессия истекла, войдите снова",
"token_invalid": "Сессия недействительна, войдите снова",
"token_revoked": "Сессия завершена, войдите снова",
"refresh_invalid": "Сессия завершена, войдите снова",
"refresh_reused": "Сессия завершена из соображений безопасности, войдите снова",
"refresh_race": "Сессия обновляется, повторите действие",
"credentials_change_required": "Сначала смените логин и пароль администратора",
"password_change_required": "Сначала смените временный пароль",
"current_password_required": "Введите текущий пароль",
"current_password_invalid": "Текущий пароль указан неверно",
"bootstrap_not_required": "Учётные данные администратора уже изменены",
"session_not_found": "Сессия не найдена",
"forbidden": "Недостаточно прав для этого действия"
},
"validation": {
"password_too_short": "Пароль должен быть не короче {{min}} символов",
"password_too_long": "Пароль должен быть не длиннее {{max}} символов",
"password_same_as_username": "Пароль не должен совпадать с логином",
"password_too_common": "Этот пароль слишком распространён — придумайте другой",
"password_unchanged": "Новый пароль должен отличаться от текущего",
"username_invalid": "Логин: от {{min}} до {{max}} символов — латинские буквы, цифры, «.», «_», «-»",
"username_taken": "Этот логин уже занят",
"locale_unsupported": "Этот язык не поддерживается",
"display_name_too_long": "Имя должно быть не длиннее {{max}} символов",
"ui_prefs_invalid": "Недопустимое значение настройки",
"client_type_invalid": "Неизвестный тип приложения",
"role_invalid": "Неизвестная роль",
"cursor_invalid": "Список устарел, обновите страницу"
},
"users": {
"not_found": "Пользователь не найден",
"last_admin": "Нельзя понизить, заблокировать или удалить последнего администратора"
}
}