Files
EpicNext-Cms/src/messages/ru.json
T
Simo 00e33623f7
CI / check (push) Successful in 2m0s
CI / deploy (push) Successful in 1m35s
CI / publish-container (push) Successful in 46s
feat(devops): diagnose slow HK requests and dependency timings
2026-09-11 09:48:19 +02:00

3868 lines
161 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"draftRecovery": {
"ready": "Копия для восстановления будет храниться в этом браузере 7 дней.",
"saved": "Копия для восстановления сохранена в этом браузере на 7 дней.",
"unavailable": "Восстановление в браузере недоступно. Не закрывай эту страницу, пока изменения не будут сохранены.",
"found": "В этом браузере доступна копия для восстановления. Дата сохранения:",
"restore": "Восстановить копию из браузера",
"discard": "Удалить копию из браузера",
"confirmRestore": "Заменить текущую форму копией из браузера? Проверь содержимое перед сохранением.",
"confirmDiscard": "Удалить эту копию из браузера? Текущая форма останется без изменений."
},
"nav": {
"home": "Главная",
"community": "Сообщество",
"articles": "Статьи",
"photos": "Фото",
"staff": "Персонал",
"rankings": "Рейтинг",
"guilds": "Гильдии",
"leaderboards": "Таблицы лидеров",
"rareValues": "Редкие значения",
"shop": "Магазин",
"market": "Рынок",
"assistance": "Содействие",
"helpCenter": "Центр помощи",
"myTickets": "Мои билеты",
"badges": "Значки",
"radio": "Радио",
"friends": "Друзья",
"messages": "Сообщения",
"admin": "Администратор",
"openMenu": "Открыть меню",
"closeMenu": "Закрыть меню",
"drawBadge": "Нарисуйте значок",
"events": "Events",
"polls": "Polls",
"mod": "Mod"
},
"header": {
"online": "{count} {hotel} онлайн",
"nitroClient": "Клиент Nitro",
"tagline": "Онлайн-виртуальный мир, где можно создать собственный аватар, подружиться, пообщаться, создать комнаты и многое другое!",
"login": "Вход",
"or": "Или",
"createAccount": "Создать аккаунт"
},
"footer": {
"copyright": "© {year} - {hotel} - некоммерческий образовательный проект"
},
"pages": {
"staff": {
"title": "Персонал",
"subtitle": "Команда, стоящая за отелем",
"ranksTitle": "Ранги",
"ranksSubtitle": "О чем заботится каждая часть команды",
"membersTitle": "Члены команды",
"membersEmptySubtitle": "Сейчас некого показывать",
"membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}",
"emptyState": "Нет сотрудников для показа.",
"colUsername": "Имя пользователя",
"colRank": "Ранг",
"colMotto": "Девиз"
},
"leaderboard": {
"title": "Таблица лидеров",
"subtitle": "Топ-20 игроков по {currency}",
"tab_credits": "Кредиты",
"tab_diamonds": "Алмазы",
"tab_duckets": "Утки",
"tab_achievement": "Достижения",
"tab_respects": "Уважает",
"tab_onlinetime": "Онлайн-время",
"emptyState": "Пока нет рейтингов для показа.",
"colAvatar": "Аватар",
"colPlayer": "Игрок"
},
"friends": {
"title": "Друзья",
"emptySubtitle": "У вас еще нет добавленных друзей",
"subtitle": "{count, plural, one {You have # friend} other {You have # friends}}",
"emptyState": "Добавьте друзей в отель, и они появятся здесь.",
"noMotto": "Нет девиза",
"remove": "Remove",
"success": {
"removed": "Friend removed."
},
"errors": {
"notFound": "That friendship was not found.",
"invalid": "Invalid friend.",
"error": "Something went wrong. Please try again."
}
},
"messages": {
"title": "Сообщения",
"subtitle": "Запросы в друзья и офлайн-сообщения ждут вас",
"requestsTitle": "Запросы на добавление в друзья",
"requestsEmptySubtitle": "Никто еще не просил быть вашим другом",
"requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}",
"requestsEmptyState": "Нет ожидающих запросов на добавление в друзья.",
"wantsToBeFriend": "хочет быть твоим другом.",
"accept": "Принять",
"offlineTitle": "Офлайн-сообщения",
"offlineEmptySubtitle": "Ваш почтовый ящик пуст",
"offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}",
"offlineEmptyState": "У вас нет сообщений в автономном режиме.",
"unknownUser": "Пользователь #{id}",
"decline": "Decline",
"composeTitle": "Send offline message",
"composeSubtitle": "Delivered in the hotel messenger when your friend is offline",
"composeEmptyFriends": "Add friends in the hotel to send offline messages.",
"composeFriendLabel": "Friend",
"composeFriendPlaceholder": "Choose a friend",
"composeMessageLabel": "Message",
"composeMessagePlaceholder": "Write your message (max 500 characters)…",
"composeSend": "Send message",
"success": {
"accepted": "Friend request accepted.",
"declined": "Friend request declined.",
"sent": "Offline message sent."
},
"errors": {
"notFound": "That friend request was not found.",
"unauthorized": "You can't act on this friend request.",
"invalid": "Invalid friend request.",
"error": "Something went wrong. Please try again.",
"notFriend": "You can only message friends.",
"emptyMessage": "Please write a message.",
"rateLimited": "Too many messages. Wait a moment and try again."
}
},
"profile": {
"noMotto": "Нет девиза",
"statRank": "Ранг",
"statCredits": "Кредиты",
"statRegistered": "Зарегистрировано",
"badgesTitle": "Значки",
"badgesEmpty": "Значков пока нет.",
"photosTitle": "Фото",
"photosEmpty": "Фотографий пока нет.",
"guestbookTitle": "Гостевая книга",
"guestbookSubtitle": "Сообщения на стене {username}",
"leaveMessage": "Оставить сообщение",
"guestbookPlaceholder": "Запишите что-то в гостевую книгу {username}...",
"post": "Опубликовать",
"loginToPost": "Войдите, чтобы оставить сообщение в гостевой книге.",
"guestbookEmpty": "Пока нет записей в гостевой книге.",
"unknownUser": "Пользователь #{id}",
"statDuckets": "Утки",
"statDiamonds": "Алмазы",
"walletTitle": "Кошелек",
"friendsTitle": "Друзья",
"friendsSubtitle": "Люди в отеле, с которыми они тусуются",
"friendsEmpty": "Друзей нет.",
"roomsTitle": "Номера",
"roomsSubtitle": "Комнаты, которыми они владеют",
"roomsEmpty": "Нет комнат для показа.",
"roomUntitled": "Комната без названия",
"addFriend": "Add friend",
"alreadyFriends": "You're friends",
"requestPending": "Request pending",
"respondInMessages": "Respond in Messages",
"success": {
"sent": "Friend request sent.",
"guestbook": "Guestbook message posted."
},
"errors": {
"self": "You can't send a friend request to yourself.",
"alreadyFriends": "You're already friends with this user.",
"alreadyPending": "You already sent a friend request to this user.",
"incomingPending": "This user already sent you a request — accept or decline it in Messages.",
"empty": "Please write a message before posting.",
"moderated": "That message was blocked by moderation.",
"ratelimit": "You're posting too fast. Please wait a moment and try again.",
"invalid": "That request was invalid.",
"error": "Something went wrong. Please try again."
}
},
"rankings": {
"title": "Рейтинг",
"subtitle": "12 лучших игроков по кредитам",
"emptyState": "Пока нет игроков для ранжирования."
},
"home": {
"welcome": "Добро пожаловать в {hotelName}",
"welcomeSubtitle": "Ваш ретро-отель на базе Next.js",
"welcomeBody": "Тусуйтесь, собирайте мебель и встречайтесь с друзьями.",
"enterHotel": "Введите {hotelName}",
"onlineFriends": "Онлайн-друзья",
"noFriendsOnline": "Нет друзей в сети",
"register": "ЗАРЕГИСТРИРОВАТЬСЯ",
"joinNow": "Присоединяйтесь к {hotelName} сегодня!",
"recentUsers": "Недавние пользователи",
"recentPhotos": "Недавние фотографии",
"latestNews": "Последние новости",
"newsTitle": "Последние новости",
"newsSubtitle": "Только что из отеля",
"allNews": "Все новости →",
"allUsers": "Сообщество →",
"noArticles": "Статей пока нет.",
"noPhotos": "Фотографий пока нет.",
"noUsers": "Нет пользователей в сети",
"latestArticle": "Последняя статья",
"latestUsers": "Новые граждане ({count} всего)",
"statsOnline": "Онлайн",
"statsCitizens": "Граждане",
"statsRooms": "Комнаты",
"statsArticles": "Статьи",
"featuresAvatar": "Аватар",
"featuresAvatarDesc": "Создай свой уникальный образ",
"featuresFurniture": "Мебель",
"featuresFurnitureDesc": "Украшай комнаты предметами",
"featuresCommunity": "Сообщество",
"featuresCommunityDesc": "Заводи друзей и общайся",
"featuresGames": "Игры",
"featuresGamesDesc": "Соревнуйся и веселись"
},
"news": {
"title": "Новости",
"subtitle": "Последние анонсы, события и обновления от отеля",
"noArticles": "Статей пока нет."
},
"article": {
"backToNews": "← Новости",
"reactionsTitle": "Реакции",
"reactionsSubtitle": "Расскажите нам, что вы думаете",
"reaction": {
"like": "Нравится",
"love": "Любовь",
"wow": "WOW"
},
"removeReaction": "Нажмите, чтобы удалить свою реакцию",
"reactWith": "Реакция с {reaction}",
"noReactions": "Реакций пока нет.",
"logIn": "Войти",
"toReact": "реагировать.",
"commentsTitle": "Комментарии",
"commentsSubtitle": "Присоединиться к беседе",
"commentsCount": "{count} до сих пор",
"noComments": "Комментариев пока нет. Будьте первым, кто оставит комментарий.",
"userNumber": "Пользователь #{id}",
"addComment": "Добавить комментарий",
"commentPlaceholder": "Напишите свой комментарий...",
"postComment": "Оставить комментарий",
"toComment": "чтобы оставить комментарий.",
"success": {
"posted": "Comment posted.",
"reaction": "Reaction updated."
},
"errors": {
"empty": "Please write a comment before posting.",
"moderated": "That comment was blocked by moderation.",
"ratelimit": "You're commenting too fast. Please wait a moment and try again.",
"invalid": "Invalid comment.",
"notFound": "That article was not found.",
"error": "Something went wrong. Please try again."
}
},
"photos": {
"title": "Фото",
"subtitle": "Последние снимки, сделанные в отеле",
"noPhotos": "Фотографий пока нет.",
"photoAlt": "Фото пользователя #{id}",
"byUser": "пользователем #{id}"
},
"badges": {
"title": "Значки",
"subtitle": "Значки, которые вы можете заработать и показать вокруг отеля",
"noBadges": "Пока нет доступных значков."
},
"community": {
"title": "Сообщество",
"subtitle": "Все, что происходит вокруг отеля в одном месте",
"open": "Открыть →",
"links": {
"rankings": {
"title": "Рейтинг",
"text": "Посмотрите самых богатых игроков в отеле, ранжированных по кредитам."
},
"staff": {
"title": "Персонал",
"text": "Познакомьтесь с командой, которая поддерживает работу отеля каждый день."
},
"news": {
"title": "Новости",
"text": "Последние анонсы, события и обновления."
},
"photos": {
"title": "Фото",
"text": "Снимки, предоставленные сообществом по всему отелю."
},
"guilds": {
"title": "Гильдии",
"text": "Просмотрите группы, созданные игроками и присоединившиеся к ним."
},
"leaderboards": {
"title": "Таблицы лидеров",
"text": "Кто лидирует в этом сезоне по статистике отеля."
}
}
},
"guilds": {
"title": "Гильдии",
"subtitle": "Просмотр групп, созданных игроками и присоединившихся к ним",
"empty": "Гильдий пока нет.",
"unnamedGuild": "Безымянная гильдия",
"noDescription": "Нет описания"
},
"guild": {
"allGuilds": "← Все гильдии",
"unnamedGuild": "Безымянная гильдия",
"noDescription": "Нет описания",
"memberSingular": "Элемент",
"memberPlural": "Участники",
"founded": "Основан",
"forumLink": "Форум →",
"discussion": "Обсуждение",
"membersTitle": "Участники",
"memberLowerSingular": "участник",
"memberLowerPlural": "участники",
"noMembers": "Нет участников.",
"owner": "Владелец",
"noMotto": "Нет девиза"
},
"guildForum": {
"backToGuild": "← Вернуться в гильдию",
"unnamedGuild": "Безымянная гильдия",
"forumTitle": "{guild} — Форум",
"threadSingular": "резьба",
"threadPlural": "резьба",
"newThread": "+ Новая резьба",
"empty": "В этом форуме пока нет тем.",
"colSubject": "Тема",
"colAuthor": "Автор",
"colPosts": "Публикации",
"colDate": "Дата",
"noSubject": "(без темы)",
"pinned": "Закреплено",
"locked": "Заблокировано",
"userNumber": "Пользователь #{id}",
"unknown": "Неизвестно",
"success": {
"posted": "Thread posted."
}
},
"guildForumNew": {
"backToForum": "← Вернуться на форум",
"unnamedGuild": "Безымянная гильдия",
"title": "Новая резьба",
"subtitle": "в форуме {guild}",
"subjectLabel": "Тема",
"subjectPlaceholder": "Тема резьбы",
"messageLabel": "Сообщение",
"messagePlaceholder": "Напишите свою вступительную запись...",
"postThread": "Post thread",
"cancel": "Отмена",
"errors": {
"invalid": "Subject and message are required.",
"notFound": "That guild was not found.",
"ratelimit": "You're posting too fast. Please wait a moment and try again.",
"error": "Something went wrong. Please try again."
}
},
"shop": {
"title": "Магазин",
"subtitle": "Пополните счет и получите эксклюзивные пакеты, валюту и значки.",
"browsingCategory": "Просмотр пакетов {category}.",
"all": "Все",
"allPackages": "Все пакеты",
"packagesAvailable": "{count, plural, one {# package available} other {# packages available}}",
"empty": "На данный момент нет доступных пакетов.",
"buy": "Купить",
"loginToBuy": "Log in to buy",
"creditsHint": "Packages are paid with in-game credits. Top up first if you need more.",
"topUpLink": "Top up credits",
"priceCredits": "{credits} credits (≈ {usd})",
"priceCreditsShort": "{credits} cr",
"success": {
"bought": "Package purchased — rewards have been added to your account.",
"boughtNamed": "You purchased \"{name}\" — rewards have been added to your account."
},
"errors": {
"invalid": "That package is no longer available.",
"credits": "You don't have enough credits for this package.",
"ratelimit": "You're purchasing too fast. Please wait a moment and try again.",
"error": "Something went wrong. Please try again."
}
},
"topup": {
"title": "Пополнить с помощью PayPal",
"subtitle": "Безопасная оплата с помощью PayPal, и ваши кредиты будут добавлены в момент оплаты.",
"cancelled": "Выезд отменен — оплата не произведена.",
"chooseAmount": "Выберите сумму",
"notConfiguredPre": "PayPal еще не настроен. Администратор должен установить",
"notConfiguredAnd": "и",
"notConfiguredOptional": "(и необязательно",
"notConfiguredPost": "для песочницы vs. live).",
"balanceTitle": "Ваш баланс",
"signedInAs": "Вы вошли как {username}",
"credits": "Кредиты",
"creditsPerUnit": "Кредиты на 1.00 {currency}",
"rateLine": "Вы получаете <strong>кредиты</strong> {amount} за 1,00 {currency}. Бонусы появляются в игре при следующем входе."
},
"marketplace": {
"title": "Маркетплейс",
"subtitle": "Просмотр мебели и раре, перечисленных игроками. Объявления размещаются в игре и обновляются в реальном времени — отправляйтесь в отель, чтобы сделать предложение.",
"activeOffers": "Активные предложения",
"sellers": "Продавцы",
"totalValue": "Общая стоимость",
"activeListings": "Активные объявления",
"mostRecentFirst": "Недавно перечисленные первые",
"empty": "В настоящее время нет активных предложений на рынке. Повторите попытку позже.",
"colOffer": "Предложение",
"colItem": "Позиция",
"colSeller": "Продавец",
"colPrice": "Цена",
"colListed": "Размещено",
"itemLabel": "Изделие №{id}",
"userLabel": "Пользователь #{id}",
"justNow": "только что",
"minutesAgo": "{count}m назад",
"hoursAgo": "{count}h назад",
"daysAgo": "{count}d назад"
},
"rares": {
"title": "Редкие значения",
"subtitle": "Получите обзор всех раров в отеле, сгруппированных по категориям.",
"empty": "В настоящее время у нас нет перечисленных раров.",
"rareCount": "{count, plural, one {# rare} other {# rares}}",
"viewRares": "Посмотреть рары →"
},
"rareCategory": {
"rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}",
"allRares": "← Все рары",
"empty": "В этой категории пока нет раров.",
"colRare": "Редко",
"colCredits": "Кредиты",
"colCurrency": "Валюта",
"creditsValue": "{value} кредитов",
"duckets": "Утки",
"diamonds": "Алмазы",
"credits": "Кредиты"
},
"redeem": {
"title": "Использовать купон",
"subtitle": "У вас есть код купона? Введите его ниже, чтобы добавить бонус в свой аккаунт.",
"enterCode": "Введите код",
"oncePerAccount": "Каждый купон можно использовать только один раз на аккаунт.",
"balanceTitle": "Ваш баланс",
"signedInAs": "Вы вошли как {username}",
"credits": "Кредиты",
"instantCredit": "Погашенные награды зачисляются мгновенно и появляются в игре при следующем входе."
},
"help": {
"title": "Центр помощи",
"subtitle": "Найдите путеводители, темы поддержки и правила отеля — все, что вам нужно, чтобы получить помощь.",
"myTickets": "Мои билеты →",
"topicsTitle": "Темы поддержки",
"topicsSubtitle": "Ознакомьтесь с руководствами и ответами на распространенные вопросы",
"topicsEmpty": "Пока нет разделов справки.",
"rulesTitle": "Правила отеля",
"rulesSubtitle": "Пожалуйста, прочитайте их, прежде чем тусоваться в отеле",
"rulesEmpty": "Пока нет опубликованных правил.",
"categoryEmpty": "В этой категории нет правил."
},
"helpCategory": {
"back": "← Центр помощи",
"topicSubtitle": "Тема Центра помощи",
"moreTitle": "Другие разделы справки",
"moreSubtitle": "Перейти к другой теме поддержки"
},
"helpTickets": {
"title": "Обращения в службу помощи",
"subtitle": "Отправьте заявку сотрудникам и отслеживайте свои открытые запросы.",
"statTotal": "Всего билетов",
"statOpen": "Открыть",
"statClosed": "Закрыто",
"newTitle": "Новый билет",
"newSubtitle": "Опишите проблему, и сотрудники свяжутся с вами",
"subjectPlaceholder": "Тема",
"contentPlaceholder": "Опишите проблему...",
"submit": "Отправить заявку",
"listTitle": "Ваши билеты",
"listSubtitle": "Каждый запрос, который вы отправляете сотрудникам",
"listEmpty": "У вас еще нет билетов.",
"colId": "ID",
"colSubject": "Тема",
"colStatus": "Статус",
"colCreated": "Создано",
"statusOpen": "Открыть",
"statusClosed": "Закрыто",
"success": {
"created": "Ticket submitted."
},
"errors": {
"invalid": "Please fill in a subject and description.",
"moderated": "That ticket was blocked by moderation.",
"ratelimit": "You're submitting too fast. Please wait a moment and try again.",
"error": "Something went wrong. Please try again."
},
"banAppealLabel": "This is a ban appeal"
},
"applyStaff": {
"title": "Подать заявку на персонал {hotel}",
"subtitle": "Время от времени мы открываем приложения для сотрудников. Если вы столкнетесь с позицией, в которую, по вашему мнению, вы бы идеально вписались, не стесняйтесь подавать заявку на нее.",
"noPositionsTitle": "Нет открытых позиций",
"noPositionsBody": "В настоящее время нет открытых позиций. Пожалуйста, вернитесь позже, чтобы проверить, есть ли у нас какие-либо вакансии к тому времени. Благодарим за проявленный интерес.",
"noDeadline": "Крайний срок не установлен",
"deadline": "Срок подачи заявки: {date}",
"alreadyApplied": "Вы уже подали заявку на {rank}",
"aboutYou": "О вас",
"aboutPlaceholder": "Расскажите нам, почему вы были бы отличным {rank}...",
"applyFor": "Применить для {rank}",
"success": {
"submitted": "Application submitted — staff will review it soon."
},
"errors": {
"empty": "Please write at least 10 characters about yourself.",
"invalid": "Invalid application.",
"duplicate": "You have already applied for this position.",
"ratelimit": "You're submitting too fast. Please wait a moment and try again.",
"error": "Something went wrong. Please try again."
}
},
"applyTeam": {
"title": "Подать заявку на команду {hotel}",
"subtitle": "Периодически открываем командные приложения. Если вы видите команду, которая вам подходит, не стесняйтесь подавать заявку!",
"noPositionsTitle": "Нет открытых позиций в команде",
"noPositionsBody": "В настоящее время нет открытых позиций в команде. Пожалуйста, вернитесь позже, чтобы проверить наличие новых вакансий. Спасибо!",
"pending": "Ваша заявка на рассмотрении",
"aboutYou": "О вас",
"aboutPlaceholder": "Расскажите нам, почему вы отлично подходите для {rank}...",
"applyFor": "Применить для {rank}",
"success": {
"submitted": "Application submitted — staff will review it soon."
},
"errors": {
"empty": "Please write at least 10 characters about yourself.",
"invalid": "Invalid application.",
"duplicate": "You have already applied for this team.",
"ratelimit": "You're submitting too fast. Please wait a moment and try again.",
"error": "Something went wrong. Please try again."
}
},
"radio": {
"title": "Радио",
"subtitle": "Настройтесь на радио отеля — живые DJ-сеты, запросы и крики.",
"nowPlaying": "Сейчас играет",
"nothingPlaying": "Сейчас ничего не играет.",
"onAir": "На воздухе: {dj}",
"noDj": "Нет диджея в эфире.",
"audioUnsupported": "Ваш браузер не поддерживает аудиоэлемент.",
"streamOffline": "Трансляция в настоящее время неактивна.",
"exploreTitle": "Познакомьтесь с радио",
"exploreSubtitle": "Расписание, крики, запросы и многое другое",
"linkSchedule": "График",
"linkScheduleText": "Наш еженедельный состав диджеев и шоу.",
"linkShouts": "Крики",
"linkShoutsText": "Крики и просьбы сообщества.",
"linkRequests": "Запросы",
"linkRequestsText": "Попросите диджея раскрутить ваш любимый трек.",
"linkApply": "Подать заявку в качестве диджея",
"linkApplyText": "Присоединяйтесь к команде и выходите в эфир.",
"linkLeaderboard": "Таблица лидеров",
"linkLeaderboardText": "Лучшие слушатели, ранжированные по заработанным баллам.",
"todayTitle": "Расписание на сегодня",
"todayTitleWithDay": "Сегодняшнее расписание · {day}",
"todaySubtitle": "Что сегодня в эфире",
"fullWeek": "Полная неделя →",
"noShowsToday": "На сегодня нет запланированных показов.",
"colTime": "Время",
"colShow": "Показать",
"colDj": "Диджей",
"untitledShow": "Шоу без названия",
"userNumber": "Пользователь #{id}"
},
"radioSchedule": {
"title": "Расписание радио",
"subtitle": "Наш еженедельный состав диджеев и шоу",
"empty": "Пока нет запланированных показов.",
"colDay": "День",
"colTime": "Время",
"colDj": "Диджей",
"colShow": "Показать",
"noShows": "Нет показов"
},
"radioShouts": {
"title": "Radio Shouts",
"subtitle": "Крики и просьбы сообщества",
"postTitle": "Опубликовать объявление",
"postSubtitle": "Отправить сообщение диджею в эфире",
"messageLabel": "Ваше сообщение",
"messagePlaceholder": "Отправьте крик диджею...",
"shoutButton": "Крик",
"loginToPost": "Войдите, чтобы опубликовать сообщение.",
"latestTitle": "Последние крики",
"latestSubtitle": "Самые свежие сообщения от слушателей",
"empty": "Пока никаких криков. Будьте первыми!",
"success": {
"posted": "Shout posted."
},
"errors": {
"invalid": "Please write a message before shouting.",
"moderated": "That shout was blocked by moderation.",
"ratelimit": "You're shouting too fast. Please wait a moment and try again.",
"error": "Something went wrong. Please try again."
}
},
"radioContests": {
"title": "Конкурсы радио",
"subtitle": "Настройтесь и примите участие в наших последних эфирных конкурсах",
"empty": "Конкурсов пока нет.",
"contestLabel": "Конкурс №{id}",
"dateUnknown": "Дата неизвестна"
},
"radioGiveaways": {
"title": "Раздачи по радио",
"subtitle": "Прислушайтесь к своему шансу выиграть в наших розыгрышах по радио",
"empty": "Розыгрышей пока нет.",
"giveawayLabel": "Раздача #{id}",
"dateUnknown": "Дата неизвестна"
},
"radioLeaderboard": {
"title": "Таблица лидеров слушателей радио",
"subtitle": "Топ-50 слушателей по очкам, заработанным тюнингом на радио",
"empty": "Нет очков слушателя для показа.",
"colRank": "Ранг",
"colAvatar": "Аватар",
"colListener": "Слушатель",
"colPoints": "Баллы"
},
"radioRequests": {
"formTitle": "Отправить запрос",
"formSubtitle": "Попросите диджея сыграть ваш любимый трек",
"songLabel": "Песня",
"songPlaceholder": "Название песни",
"artistLabel": "Исполнитель",
"artistPlaceholder": "Имя исполнителя (необязательно)",
"submitButton": "Отправить запрос",
"loginToRequest": "Войдите, чтобы отправить запрос.",
"latestTitle": "Недавние запросы",
"latestSubtitle": "Самые последние запрошенные песни",
"empty": "Запросов пока нет.",
"colSong": "Песня",
"colArtist": "Исполнитель",
"colRequester": "Заявитель",
"colDate": "Дата",
"colStatus": "Статус",
"statusPending": "В ожидании",
"statusApproved": "Утвердил",
"statusPlayed": "Сыграно",
"success": {
"posted": "Request submitted."
},
"errors": {
"empty": "Please enter a song title or artist.",
"invalid": "Invalid request.",
"ratelimit": "You're submitting too fast. Please wait a moment and try again.",
"error": "Something went wrong. Please try again."
}
},
"radioApply": {
"title": "Подать заявку на роль радио-диджея",
"subtitle": "Расскажите о себе и о том, почему вы отлично подходите для эфира",
"latestTitle": "Ваша последняя заявка",
"statusLabel": "Статус:",
"submittedOn": "· подано {date}",
"submitAgain": "Если данные изменились, отправьте их еще раз.",
"formTitle": "Форма заявки",
"formSubtitle": "Все поля, отмеченные как обязательные, должны быть заполнены",
"realNameLabel": "Настоящее имя",
"realNamePlaceholder": "Ваше полное имя",
"ageLabel": "Возраст",
"availabilityLabel": "Доступность",
"availabilityPlaceholder": "Какие дни и время вы можете транслировать?",
"musicStyleLabel": "Музыкальный стиль",
"musicStylePlaceholder": "например, хаус, поп, хип-хоп",
"experienceLabel": "Опыт",
"optional": "(необязательно)",
"experiencePlaceholder": "Есть ли у вас опыт диджея или приема гостей?",
"motivationLabel": "Мотивация",
"motivationPlaceholder": "Почему вы хотите присоединиться к команде радио?",
"submitButton": "Подать заявку",
"success": {
"submitted": "Application submitted — we will get back to you soon."
},
"errors": {
"invalid": "Please fill in all required fields.",
"ratelimit": "You're submitting too fast. Please wait a moment and try again.",
"error": "Something went wrong. Please try again."
}
},
"settings": {
"accountSettings": "Настройки аккаунта",
"accountSettingsSubtitle": "Управление профилем, безопасностью и связанными аккаунтами",
"publicProfile": "Ваш общедоступный профиль",
"noMotto": "Нет девиза",
"noEmail": "Нет электронной почты в файле",
"changeMotto": "Изменить девиз",
"changeMottoSubtitle": "Мгновенные обновления в игре, если вы находитесь в сети",
"mottoPlaceholder": "Ваш девиз",
"saveMotto": "Сохранить девиз",
"securityTitle": "Безопасность",
"securitySubtitle": "Двухфакторная аутентификация",
"securityDescription": "Добавьте в аккаунт второй уровень защиты.",
"twoFactorLink": "Двухфакторная аутентификация"
},
"settings2fa": {
"backToSettings": "← Настройки",
"title": "Двухфакторная аутентификация",
"subtitle": "Добавьте второй уровень безопасности с помощью приложения-аутентификатора",
"nowEnabled": "2FA теперь включена. 🔒",
"disabledNotice": "2FA отключена.",
"badCode": "Код недействителен. Повторите попытку.",
"noAppKeyPrefix": "Двухфакторная аутентификация недоступна до",
"noAppKeyMiddle": "сконфигурирован (тот же Laravel",
"noAppKeySuffix": "при установке AtomCMS, поэтому существующие секреты остаются читаемыми).",
"isEnabled": "2FA включена",
"onYourAccount": "в вашем аккаунте.",
"disable": "Отключить 2FA",
"scanOrEnter": "Отсканируйте или введите этот ключ",
"scanInstructions": "Добавьте это в Google Authenticator / Authy, затем введите 6-значный код для подтверждения.",
"manualKey": "Ручная клавиша:",
"codePlaceholder": "6-значный код",
"confirm": "Подтвердить",
"enableIntro": "Добавьте второй уровень безопасности с помощью приложения-аутентификатора.",
"enable": "Включить 2FA"
},
"title": "Связанные аккаунты",
"subtitle": "Привяжите аккаунт в соцсетях, чтобы войти в систему одним щелчком мыши",
"login": {
"title": "Sign in",
"subtitle": "С возвращением! Войдите в систему, чтобы войти в отель.",
"subtitle2fa": "Введите 6-значный код из аутентификатора.",
"usernamePlaceholder": "Имя пользователя",
"passwordPlaceholder": "Пароль",
"codePlaceholder": "Код 2FA",
"pleaseWait": "Подождите…",
"verify": "Подтвердить",
"signIn": "Войти",
"or": "или",
"noAccount": "Нет аккаунта?",
"createOne": "Создать",
"forgotPassword": "Забыли пароль?",
"errorInvalidCredentials": "Неверное имя пользователя или пароль",
"errorInvalid2fa": "Недействительный код 2FA",
"welcomeBack": "С возвращением",
"welcomeBackSub": "Войди, чтобы продолжить в {hotelName}",
"errorUnverified": "Please verify your email before signing in.",
"errorCaptcha": "Captcha verification failed. Please try again."
},
"register": {
"title": "Создать аккаунт",
"subtitle": "Присоединяйтесь к отелю — это займет всего минуту.",
"username": "Имя пользователя",
"email": "Электронная почта",
"password": "Пароль",
"confirmPassword": "Повторите пароль",
"usernamePlaceholder": "Имя пользователя",
"emailPlaceholder": "Электронная почта",
"passwordPlaceholder": "Пароль (мин. 6 символов)",
"confirmPasswordPlaceholder": "Повторите пароль",
"selectOutfit": "Выберите свой наряд",
"termsAccept": "Мне 18+ и я принимаю условия и правила {hotel}.",
"createAccount": "Создать аккаунт",
"creatingAccount": "Создание учетной записи...",
"redirecting": "Переход в ваш аккаунт...",
"alreadyHaveAccount": "Уже есть аккаунт? Войти!",
"register": "Регистрация",
"termsError": "Чтобы зарегистрироваться, вы должны принять условия и правила.",
"usernameError": "Требуется имя пользователя.",
"emailError": "Требуется действительный адрес электронной почты.",
"passwordError": "Пароль должен содержать не менее 6 символов.",
"confirmPasswordError": "Пароли не совпадают.",
"termsRequired": "Вы должны принять условия и правила.",
"usernameRequired": "Требуется имя пользователя.",
"emailRequired": "Требуется адрес электронной почты.",
"passwordRequired": "Требуется пароль.",
"passwordsDontMatch": "Пароли не совпадают.",
"alreadyHaveAccountPre": "Уже есть аккаунт?",
"alreadyHaveAccountLink": "Войти",
"whoIsOnline": "Кто онлайн",
"usersOnline": "{count} онлайн"
},
"forgot": {
"title": "Сбросить пароль",
"subtitle": "Мы отправим вам безопасную ссылку для установки нового пароля.",
"sentNotice": "Если это письмо зарегистрировано, ссылка для сброса отправлена. Проверьте папку «Входящие».",
"emailPlaceholder": "Ваш адрес электронной почты",
"sendResetLink": "Отправить ссылку для сброса",
"backToLogin": "Назад к входу",
"errorCaptcha": "Captcha verification failed. Please try again."
},
"reset": {
"title": "Установить новый пароль",
"subtitle": "Выберите надежный пароль, который вы больше не используете.",
"passwordPlaceholder": "Новый пароль (мин. 6 символов)",
"resetPassword": "Сбросить пароль",
"backToLogin": "Назад к входу"
},
"verify": {
"verifiedTitle": "Всё готово",
"verifiedSubtitle": "Адрес электронной почты подтвержден",
"verifiedBody": "Ваш адрес электронной почты подтвержден. Теперь вы можете войти в систему и играть.",
"goToLogin": "Перейти к входу",
"alreadyTitle": "Уже проверено",
"alreadySubtitle": "Делать больше нечего",
"alreadyBody": "Этот адрес электронной почты уже подтвержден.",
"unavailableTitle": "Повторите попытку позже",
"unavailableSubtitle": "Сервер недоступен",
"unavailableBody": "Не удалось связаться с сервером для подтверждения вашей электронной почты. Повторите попытку через минуту.",
"invalidTitle": "Подтверждение адреса электронной почты",
"invalidSubtitle": "Недействительная или просроченная ссылка",
"invalidBody": "Эта ссылка для подтверждения недействительна. Убедитесь, что вы открыли полную ссылку из письма, или запросите новую.",
"backToLogin": "Назад к входу"
},
"banned": {
"title": "Вы заблокированы",
"subtitle": "Аккаунт заблокирован",
"body": "Ваш аккаунт заблокирован в отеле.",
"reasonLabel": "Причина:",
"permanent": "Этот запрет является постоянным.",
"expires": "Истекает {date}.",
"contactStaff": "Если вы считаете, что это ошибка, свяжитесь с командой сотрудников."
},
"maintenance": {
"title": "{hotel} находится на техобслуживании",
"subtitle": "Мы скоро вернемся",
"staffCanLogIn": "Сотрудники все еще могут войти в систему."
},
"admin": {
"nav": {
"overview": "Обзор",
"dashboard": "Панель управления",
"content": "Содержание",
"articles": "Статьи",
"tags": "Метки",
"navigator": "Навигатор",
"helpCenter": "Центр помощи",
"advertisements": "Объявления",
"writeableBoxes": "Ящики для записи",
"photos": "Фото",
"tickets": "Билеты",
"events": "Events",
"polls": "Polls",
"banners": "Banners",
"prefixes": "Prefixes",
"usersAndAccess": "Пользователи и доступ",
"users": "Пользователи",
"bans": "Запреты",
"ipManagement": "Управление IP",
"vpn": "VPN",
"applications": "Области применения",
"teams": "Команды",
"permissions": "Разрешения",
"onlineUsers": "Online users",
"moderation": "Moderation",
"economy": "Экономика",
"catalog": "Каталог",
"shop": "Магазин",
"transactions": "Транзакции",
"vouchers": "Купоны",
"subscriptions": "Подписки",
"rareValues": "Редкие значения",
"badges": "Значки",
"achievements": "Достижения",
"calendar": "Календарь",
"radio": "Радио",
"radioHistory": "История радио",
"radioBanners": "Баннеры",
"radioEmbed": "Встроить",
"radioApiKeys": "API-ключи",
"radioModeration": "Модерация",
"radioSettings": "Настройки",
"radioMonitoring": "Мониторинг",
"radioPoints": "Баллы",
"radioRanks": "Ранги",
"radioAutodj": "Авто DJ",
"system": "Система",
"commandocentrum": "Commandocentrum",
"emulator": "Эмулятор",
"alerts": "Оповещения",
"logs": "Журналы",
"auditLog": "Audit log",
"analytics": "Analytics",
"devops": "DevOps",
"wordFilter": "Фильтр слов",
"maintenance": "Техническое обслуживание",
"rooms": "Номера",
"emailTemplates": "Шаблоны писем",
"theme": "Тема",
"media": "Медиа",
"favicon": "Фавиконка",
"sounds": "Звуки",
"translations": "Переводы",
"import": "Импорт",
"settings": "Настройки",
"backToSite": "Вернуться на сайт",
"housekeeping": "Ведение домашнего хозяйства",
"hotelManagementPanel": "Панель управления отелем",
"rankLabel": "Ранг {rank}",
"hubNewsMedia": "News & media",
"hubSiteContent": "Site content",
"hubEngagement": "Engagement",
"hubUsers": "Users",
"hubAccess": "Access & security",
"hubCatalog": "Catalog & rares",
"hubShop": "Shop & payments",
"hubTools": "Tools",
"hubObservability": "Observability",
"helpTickets": "Help-center tickets",
"marketplace": "Marketplace",
"expandAll": "Expand all",
"collapseAll": "Collapse all",
"searchMenu": "Search menu…",
"clearMenuSearch": "Clear menu search",
"noMenuResults": "No matching pages.",
"community": "Community",
"monitoring": "Monitoring",
"staffAccess": "Ranks & permissions",
"multiAccounts": "Multi-accounts",
"chatLog": "Chat log",
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"guilds": "Guilds",
"itemsBase": "Items base",
"adminMenu": "Admin menu",
"studio": "Studio",
"operationsCenter": "Operations center"
},
"dashboard": {
"title": "Панель управления",
"subtitle": "Обзор отеля и статус в реальном времени",
"playersOnline": "Игроки онлайн",
"articles": "Статьи",
"activeBans": "Активные запреты",
"database": "База данных",
"databaseConnected": "Подключено",
"databaseDown": "Вниз",
"usersByRank": "Пользователи по рангу",
"noAccountsToBreakDown": "Пока нет аккаунтов для разбивки",
"rankLabel": "Ранг {rank}",
"rankWithCount": "Ранг {rank}: счета {count}",
"recentStaffActivity": "Недавние действия персонала",
"viewAll": "Посмотреть все",
"noStaffActivityLogged": "Нет зарегистрированных действий персонала"
},
"articles": {
"title": "Статьи",
"subtitle": "Новостные статьи — 50 самых последних",
"newArticle": "+ Новая статья",
"edit": "Редактировать",
"delete": "Удалить",
"noArticles": "Пока нет статей",
"confirmDelete": "Вы уверены, что хотите удалить \"{title}\"?",
"colTitle": "Название",
"colSlug": "Слаг",
"colAuthor": "Автор",
"colCreated": "Создано",
"colActions": "Действия",
"form": {
"title": "Название",
"titlePlaceholder": "Название статьи",
"slug": "Слаг",
"slugPlaceholder": "article-url-slug",
"category": "Категория",
"categoryPlaceholder": "Выберите категорию",
"body": "Основной текст",
"bodyPlaceholder": "Напишите содержание статьи...",
"image": "Изображение",
"imagePlaceholder": "https://example.com/image.png",
"thumbnail": "Миниатюра",
"thumbnailPlaceholder": "https://example.com/thumb.png",
"published": "Опубликовано",
"featured": "Избранное",
"save": "Сохранить статью",
"saving": "Сохранение...",
"deleteArticle": "Удалить статью",
"deleteConfirm": "Это действие нельзя отменить. Статья будет удалена без возможности восстановления.",
"cancel": "Отмена",
"autosaveLoading": "Loading saved drafts…",
"autosaveReady": "Private draft autosave is ready.",
"autosaveSaving": "Saving private draft…",
"autosaveSaved": "Private draft saved. Publication changes require Save.",
"autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.",
"autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.",
"recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.",
"recoverDraft": "Recover draft",
"discardDraft": "Discard saved draft",
"confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.",
"confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.",
"revisionHistory": "Previous saved versions (latest 20)",
"restoreRevision": "Restore into editor",
"confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.",
"editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.",
"retryRecovery": "Reload recovery without changing this form"
},
"listActionError": "The article action could not be completed.",
"listStatus": "Publication status",
"listStatus_all": "All articles",
"listStatus_draft": "Draft",
"listStatus_published": "Published",
"listStatus_scheduled": "Scheduled",
"listSearch": "Search title or summary",
"listApply": "Apply",
"listLoading": "Loading…",
"listReset": "Reset filters",
"listUnavailable": "Articles are temporarily unavailable. Try again.",
"listRetry": "Try again",
"listTotal": "{count, plural, one {# matching article} other {# matching articles}}",
"listNoMatches": "No articles match these filters. Change the search or reset the filters.",
"listPagination": "Article pages",
"listPrevious": "Previous",
"listNext": "Next",
"listPage": "Page {page} of {total}"
},
"tags": {
"title": "Метки",
"subtitle": "Теги / категории статей",
"addTag": "Добавить тег",
"name": "Имя",
"namePlaceholder": "Название тега",
"backgroundColour": "Цвет фона",
"createTag": "Создать тег",
"editTag": "Редактировать тег",
"updateTag": "Обновить тег",
"deleteTag": "Удалить тег",
"confirmDelete": "Удалить \"{name}\"?",
"noTags": "Пока нет тегов",
"colId": "ID",
"colTag": "Тег",
"colColour": "Цвет",
"colUsedBy": "Используется",
"colCreated": "Создано",
"colActions": "Действия"
},
"navigation": {
"title": "Навигатор",
"flatCategories": "Плоские категории",
"publicRooms": "Общественные помещения",
"addCategory": "Добавить категорию",
"editCategory": "Редактировать категорию",
"deleteCategory": "Удалить категорию",
"categoryName": "Название категории",
"categoryNamePlaceholder": "например, Chill & Chat",
"categoryOrder": "Заказ",
"roomName": "Название помещения",
"roomNamePlaceholder": "например, Welcome Lounge",
"roomId": "ID комнаты",
"roomIdPlaceholder": "Цифровой идентификатор помещения",
"save": "Сохранить",
"cancel": "Отмена",
"noCategories": "Пока нет категорий",
"noPublicRooms": "Общественных комнат пока нет",
"colId": "ID",
"colName": "Имя",
"colOrder": "Заказ",
"colRooms": "Номера",
"colActions": "Действия"
},
"helpCenter": {
"title": "Центр помощи",
"subtitle": "Поддержка записей и управление часто задаваемыми вопросами",
"entries": "Записи",
"newEntry": "+ Новая запись",
"edit": "Редактировать",
"delete": "Удалить",
"noEntries": "Записей пока нет",
"confirmDelete": "Удалить \"{title}\"?",
"colId": "ID",
"colTitle": "Название",
"colCategory": "Категория",
"colCreated": "Создано",
"colActions": "Действия",
"form": {
"title": "Название",
"titlePlaceholder": "Заголовок записи",
"category": "Категория",
"categoryPlaceholder": "Выберите категорию",
"body": "Основной текст",
"bodyPlaceholder": "Напишите ответ...",
"save": "Сохранить запись",
"saving": "Сохранение...",
"deleteEntry": "Удалить запись",
"cancel": "Отмена"
}
},
"ads": {
"title": "Объявления",
"subtitle": "Управление рекламой отелей и рекламными баннерами",
"newAd": "+ Новое объявление",
"edit": "Редактировать",
"delete": "Удалить",
"noAds": "Рекламы пока нет",
"confirmDelete": "Удалить это объявление?",
"colId": "ID",
"colName": "Имя",
"colImage": "Изображение",
"colUrl": "URL",
"colViews": "Просмотры",
"colStatus": "Статус",
"colCreated": "Создано",
"colActions": "Действия",
"form": {
"name": "Имя",
"namePlaceholder": "Название объявления",
"image": "URL изображения",
"imagePlaceholder": "https://example.com/banner.png",
"url": "Целевой URL-адрес",
"urlPlaceholder": "https://example.com",
"enabled": "Включено",
"save": "Сохранить объявление",
"saving": "Сохранение...",
"deleteAd": "Удалить объявление",
"cancel": "Отмена"
},
"deleteSuccess": "Advertisement deleted!",
"deleteError": "Failed to delete advertisement.",
"adsCount": "Total ads",
"latest": "Latest",
"mostRecentAd": "Most recent ad",
"allAds": "All advertisements",
"colPreview": "Preview"
},
"writeableBoxes": {
"title": "Записываемые коробки",
"subtitle": "Контент-панели, показанные по всему отелю и CMS",
"newBox": "Новое поле",
"edit": "Редактировать",
"delete": "Удалить",
"noBoxes": "Пока нет доступных для записи ящиков",
"confirmDelete": "Удалить это поле?",
"colId": "ID",
"colName": "Имя",
"colLocation": "Местоположение",
"colUpdated": "Обновлено",
"colActions": "Действия",
"form": {
"name": "Имя",
"namePlaceholder": "Название ящика",
"location": "Местоположение",
"locationPlaceholder": "например, домашняя страница, боковая панель",
"content": "Содержание",
"contentPlaceholder": "Напишите содержимое блока...",
"enabled": "Включено",
"save": "Сохранить поле",
"saving": "Сохранение...",
"deleteBox": "Удалить поле",
"cancel": "Отмена"
}
},
"photos": {
"title": "Модерация фото",
"subtitle": "Недавние фотографии с камеры в игре",
"delete": "Удалить",
"approve": "Одобрить",
"noPhotos": "Нет фото для модерации",
"confirmDelete": "Удалить это фото навсегда?",
"colId": "ID",
"colPreview": "Предварительный просмотр",
"colUser": "Пользователь",
"colRoom": "Комната",
"colTimestamp": "Метка времени",
"colActions": "Действия",
"photoAlt": "Фото пользователя #{id}",
"byUser": "на {username}",
"photosShown": "Shown",
"rooms": "Rooms",
"users": "Users",
"distinctRooms": "Distinct rooms on this page",
"distinctPhotographers": "Distinct photographers on this page",
"total": "Total photos",
"recentPhotos": "Recent photos",
"pageOf": "Page {page} of {last} · {total} total",
"purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged."
},
"users": {
"title": "Пользователи",
"subtitle": "Просмотр, поиск и управление аккаунтами отелей",
"search": "Поиск",
"searchPlaceholder": "Поиск по имени пользователя, электронной почте или идентификатору...",
"searchResults": "{count, plural, one {# result} other {# results}} для \"{query}\"",
"noResults": "Пользователи не найдены",
"colId": "ID",
"colUsername": "Имя пользователя",
"colEmail": "Электронная почта",
"colRank": "Ранг",
"colOnline": "Онлайн",
"colRegistered": "Зарегистрировано",
"colLastOnline": "Последний раз в сети",
"colActions": "Действия",
"yes": "Да",
"no": "Нет",
"edit": "Редактировать",
"setRank": "Установить ранг",
"disconnect": "Отключить",
"alert": "Оповещение",
"ban": "Запрет",
"detail": {
"title": "Пользователь: {username}",
"subtitle": "Сведения об учетной записи и управление ею",
"overview": "Обзор",
"actions": "Действия",
"username": "Имя пользователя",
"email": "Электронная почта",
"motto": "Девиз",
"rank": "Ранг",
"credits": "Кредиты",
"duckets": "Утки",
"diamonds": "Алмазы",
"online": "Онлайн",
"registered": "Зарегистрировано",
"lastOnline": "Последний раз в сети",
"ipAddress": "IP-адрес",
"machineId": "Идентификатор машины",
"sendAlert": "Отправить оповещение",
"sendMessage": "Отправить сообщение",
"disconnectUser": "Отключить пользователя",
"banUser": "Заблокировать пользователя",
"resetPassword": "Сбросить пароль",
"deleteUser": "Удалить пользователя",
"confirmDelete": "Вы уверены, что хотите удалить {username}? Это действие нельзя отменить.",
"tabInfo": "Account Info",
"tabBadges": "Badges ({count})",
"tabRooms": "Rooms ({count})",
"tabSanctions": "Sanctions ({count})",
"tabActivity": "Activity"
},
"editForm": {
"title": "Редактировать пользователя: {username}",
"subtitle": "Изменить данные аккаунта",
"username": "Имя пользователя",
"usernamePlaceholder": "Имя пользователя",
"email": "Электронная почта",
"emailPlaceholder": "[email protected]",
"motto": "Девиз",
"mottoPlaceholder": "User motto",
"rank": "Rank",
"credits": "Credits",
"duckets": "Duckets",
"diamonds": "Diamonds",
"save": "Save changes",
"saving": "Saving…",
"cancel": "Cancel"
},
"presentation": {
"users": "Users",
"edit": "Edit",
"view": "View",
"rank": "Rank {rank}",
"online": "Online",
"offline": "Offline",
"banned": "Banned",
"credits": "credits",
"diamonds": "diamonds",
"duckets": "duckets",
"pixels": "pixels",
"rooms": "Rooms",
"messages": "Messages",
"trades": "Trades",
"accountDetails": "Account details",
"registered": "Registered",
"lastLogin": "Last login",
"ipRegister": "Registration IP",
"ipCurrent": "Current IP",
"machineId": "Device ID",
"email": "Email",
"gender": "Gender",
"never": "Never",
"findIp": "Find users with this IP",
"enabled": "Enabled",
"disabled": "Disabled",
"unavailable": "Not available",
"noBadges": "No badges assigned"
},
"create": {
"newUser": "New user",
"title": "Create user",
"description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.",
"username": "Username",
"email": "Email",
"password": "Password",
"rank": "Rank",
"rankOption": "Rank {rank}",
"motto": "Motto (optional)",
"usernamePlaceholder": "NewHabbo",
"passwordPlaceholder": "At least 6 characters",
"mottoPlaceholder": "I'm new here!",
"generate": "Generate",
"passwordGenerated": "Password generated in the password field.",
"required": "Username, email and password are required.",
"invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.",
"passwordLength": "The password must contain at least 6 characters.",
"created": "User {username} created."
},
"overview": {
"title": "Overview",
"hint": "Up to 5 recent records per source. Only sections you can access are shown.",
"restricted": "You do not have permission to view operational records.",
"sanctions": "Recent bans",
"mute": "Active mute",
"tickets": "Support tickets",
"help": "Help center requests",
"reports": "In-game reports",
"transactions": "Payments",
"purchases": "Catalog purchases",
"activity": "Recorded staff actions",
"openModule": "Open management",
"purchaseHint": "Recorded quantities and currency costs.",
"purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})",
"activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.",
"muteUntil": "Muted until {date}",
"error": "This source could not be loaded. Refresh the page to try again.",
"empty": "No records found.",
"status": {
"active": "Active",
"expired": "Expired",
"open": "Open",
"closed": "Closed",
"reported": "Reported user",
"reporter": "Reporter"
}
}
},
"bans": {
"title": "Bans",
"subtitle": "Manage account, IP and machine bans",
"newBan": "New ban",
"edit": "Edit",
"delete": "Delete",
"noBans": "No bans yet",
"confirmDelete": "Remove this ban?",
"colId": "ID",
"colValue": "Value",
"colType": "Type",
"colReason": "Reason",
"colBannedBy": "Banned by",
"colExpires": "Expires",
"colCreated": "Created",
"colActions": "Actions",
"form": {
"value": "Value",
"valuePlaceholder": "Username, IP, or machine ID",
"type": "Type",
"typeUser": "User",
"typeIp": "IP",
"typeMachine": "Machine",
"reason": "Reason",
"reasonPlaceholder": "Ban reason",
"expiresAt": "Expires at",
"permanent": "Permanent",
"save": "Save ban",
"saving": "Saving…",
"cancel": "Cancel"
}
},
"ip": {
"title": "IP Management",
"subtitle": "Manage IP whitelist and blacklist",
"whitelist": "Whitelist",
"blacklist": "Blacklist",
"addIp": "Add IP",
"ipAddress": "IP address",
"ipAddressPlaceholder": "e.g. 127.0.0.1",
"reason": "Reason",
"reasonPlaceholder": "Reason for listing",
"add": "Add",
"remove": "Remove",
"confirmRemove": "Remove this IP from the {list}?",
"noWhitelistedIps": "No whitelisted IPs",
"noBlacklistedIps": "No blacklisted IPs",
"colIp": "IP",
"colReason": "Reason",
"colAdded": "Added",
"colActions": "Actions"
},
"vpn": {
"title": "VPN / Proxy Detection",
"subtitle": "Configure VPN and proxy detection settings",
"enabled": "Enabled",
"apiKey": "API key",
"apiKeyPlaceholder": "Your VPN detection API key",
"apiKeyHint": "Leave empty to disable",
"blockOnDetect": "Block on detection",
"blockOnDetectHint": "Automatically block users detected behind a VPN or proxy",
"save": "Save settings",
"saving": "Saving…",
"settingsSaved": "VPN settings saved successfully"
},
"applications": {
"title": "Staff Applications",
"subtitle": "Pending and reviewed staff applications",
"pending": "Pending",
"approved": "Approved",
"rejected": "Rejected",
"noApplications": "No applications yet",
"colId": "ID",
"colApplicant": "Applicant",
"colPosition": "Position",
"colStatus": "Status",
"colSubmitted": "Submitted",
"colActions": "Actions",
"review": "Review",
"approve": "Approve",
"reject": "Reject",
"confirmApprove": "Approve {username} for {position}?",
"confirmReject": "Reject {username}'s application for {position}?",
"detail": {
"title": "Application by {username}",
"subtitle": "For {position}",
"about": "About the applicant",
"message": "Application message",
"status": "Status",
"submitted": "Submitted",
"noMessage": "No message provided"
}
},
"teams": {
"title": "Teams",
"subtitle": "Define staff rank names and descriptions",
"addRank": "Add rank",
"editRank": "Edit rank",
"deleteRank": "Delete rank",
"noTeams": "No rank definitions yet",
"confirmDelete": "Delete rank {id} definition?",
"colId": "ID",
"colRank": "Rank",
"colName": "Name",
"colBadge": "Badge",
"colColour": "Colour",
"colActions": "Actions",
"form": {
"rankId": "Rank ID",
"rankIdPlaceholder": "Numeric rank ID",
"name": "Name",
"namePlaceholder": "e.g. Administrator",
"badge": "Badge code",
"badgePlaceholder": "e.g. ADM001",
"colour": "Colour",
"colourPlaceholder": "e.g. #ff0000",
"save": "Save team definition",
"saving": "Saving…",
"cancel": "Cancel"
}
},
"permissions": {
"title": "Permissions",
"subtitle": "Manage rank-based permissions for the admin panel",
"addPermission": "Add permission",
"editPermission": "Edit permission",
"deletePermission": "Delete permission",
"noPermissions": "No permissions configured yet",
"confirmDelete": "Delete this permission?",
"colId": "ID",
"colRank": "Rank",
"colPermission": "Permission",
"colCreated": "Created",
"colActions": "Actions",
"form": {
"rankId": "Rank ID",
"rankIdPlaceholder": "Minimum rank required",
"permission": "Permission key",
"permissionPlaceholder": "e.g. admin.articles.manage",
"save": "Save permission",
"saving": "Saving…",
"cancel": "Cancel"
}
},
"catalog": {
"title": "Catalog",
"subtitle": "Browse and manage catalog pages and items",
"pages": "Pages",
"items": "Items",
"addPage": "Add page",
"editPage": "Edit page",
"deletePage": "Delete page",
"addItem": "Add item",
"editItem": "Edit item",
"deleteItem": "Delete item",
"noPages": "No catalog pages yet",
"noItems": "No items in this page",
"confirmDeletePage": "Delete catalog page \"{name}\"?",
"confirmDeleteItem": "Delete this item?",
"colId": "ID",
"colName": "Name",
"colIcon": "Icon",
"colOrder": "Order",
"colItems": "Items",
"colEnabled": "Enabled",
"colActions": "Actions",
"colItemId": "Item ID",
"colItemName": "Item name",
"colCostCredits": "Cost (credits)",
"colCostPoints": "Cost (points)",
"colLimited": "Limited",
"pageForm": {
"name": "Name",
"namePlaceholder": "Page name",
"icon": "Icon ID",
"iconPlaceholder": "Numeric icon ID",
"order": "Order",
"enabled": "Enabled",
"parent": "Parent page",
"parentNone": "None (root)",
"save": "Save page",
"saving": "Saving…",
"cancel": "Cancel"
},
"itemForm": {
"itemId": "Item ID",
"itemName": "Item name",
"costCredits": "Cost in credits",
"costDuckets": "Cost in duckets",
"costDiamonds": "Cost in diamonds",
"limitedStack": "Limited stack size",
"limitedSold": "Limited sold",
"save": "Save item",
"saving": "Saving…",
"cancel": "Cancel"
},
"packages": {
"openPackages": "Catalog packages",
"title": "Catalog packages",
"description": "Prepare category and price changes in a separate draft. Review the catalog before publishing.",
"createPackage": "New package",
"createDraft": "Create draft",
"draftCreated": "Package draft created. The live catalog has not changed.",
"refresh": "Refresh list",
"searchPackages": "Search packages",
"noPackages": "No packages match this search.",
"choosePackage": "Open a package or create a draft from existing categories.",
"name": "Package name",
"mode": "Publication mode",
"update": "Update existing categories",
"copy": "Create copies",
"updateHint": "Publication applies the package to its existing categories and offers.",
"copyHint": "Publication creates new categories and offers under the selected parent. Furniture references are preserved.",
"sourceCategories": "Source categories",
"packageLimits": "Descendant categories are included. Each package supports up to 200 categories and 500 offers.",
"searchCategories": "Search categories",
"selectedCategories": "Selected: {count}",
"targetParent": "Destination parent category",
"rootCategory": "Catalog root",
"draft": "Draft",
"published": "Published",
"editDraft": "Edit draft",
"catalogPreview": "Catalog preview",
"showBaseline": "Show the original saved snapshot",
"changes": "Before and after",
"entry": "Entry",
"field": "Field",
"before": "Before",
"after": "After",
"noChanges": "No edited fields compared with the original snapshot.",
"copyReview": "The entire package will be copied on publication, even if no fields were edited. The table lists edits to the original snapshot.",
"updateReview": "These draft changes will update existing catalog entries after publication.",
"saveDraft": "Save draft",
"saveHint": "Saving keeps the package as a draft. Save all changes before requesting a publication review.",
"draftSaved": "Draft saved. Publication is a separate step.",
"reviewPublication": "Review publication",
"publicationImpact": "Publication affects {pages} categories and {offers} offers.",
"conflicts": "Publication is blocked by conflicts. Resolve them before requesting another review.",
"readyToPublish": "The saved version passed the publication check. Publishing changes the live catalog.",
"publish": "Publish package",
"confirmPublish": "Publish this reviewed package to the live catalog now?",
"publishedSuccess": "Package published: {pages} categories and {offers} offers.",
"staleReview": "This package changed in another session. Reopen it to review the latest saved version.",
"unsaved": "Unsaved changes",
"discardChanges": "Discard unsaved package changes and continue?",
"working": "Working…",
"requestFailed": "The request failed. Try again.",
"invalidFields": "Check required names, layouts and whole-number fields before saving.",
"category": "Category",
"caption": "Category caption",
"iconImage": "Category icon ID",
"minRank": "Minimum rank",
"orderNum": "Display order",
"pageLayout": "Page layout",
"enabled": "Enabled",
"visible": "Visible",
"clubOnly": "Club members only",
"vipOnly": "VIP members only",
"offers": "Offers ({count})",
"offer": "Offer",
"catalogName": "Offer name",
"costCredits": "Credits",
"costPoints": "Points",
"pointsType": "Points currency ID",
"amount": "Amount",
"searchOffers": "Search offers",
"currentCategoryOffers": "Only the selected category",
"selectMatching": "Select all matching offers ({count})",
"clearSelection": "Clear selection",
"selectedOffers": "Selected offers: {count}",
"select": "Select",
"selectOffer": "Select offer #{id}",
"noOffers": "No offers match these filters.",
"bulkPrices": "Bulk draft prices ({count} selected)",
"bulkHint": "Preview the selected price changes, then accept them into this draft. The live catalog remains unchanged until publication.",
"operation": "Operation",
"set": "Set value",
"add": "Add or subtract",
"percent": "Adjust by percent",
"value": "Value",
"reviewBulk": "Preview prices",
"invalidBulk": "Choose valid numbers and at least one offer. Resulting prices must be nonnegative and within the supported range.",
"acceptBulk": "Accept prices into draft",
"previous": "Previous",
"next": "Next"
},
"integrity": {
"title": "Catalog integrity",
"description": "Check references, category paths, identifiers and furniture icons. Scanning does not change records.",
"catalog": "Catalog",
"normal": "Normal catalog",
"bc": "Builders Club",
"refresh": "Scan again",
"working": "Checking…",
"failed": "The operation could not be completed. Try again.",
"stalePreview": "The catalog changed after the preview. Create a new preview before applying repairs.",
"applied": "{count} categories reattached to the catalog root.",
"iconsUnavailable": "The icon folder could not be read. Icon availability has not been verified.",
"healthy": "No issues found in the completed checks.",
"total": "{count} issues found. Showing {shown}.",
"open": "Open",
"reference": "Reference: {value}",
"repairHint": "Preview categories whose parent no longer exists. Applying moves only these categories to the root and preserves every record. Cycles, missing furniture, icons and identifier conflicts require individual review.",
"preview": "Preview safe repairs",
"planned": "{count} categories will be moved:",
"parentChange": "parent #{from} → catalog root",
"apply": "Apply previewed repairs",
"legacyTitle": "Advanced maintenance actions",
"legacyHint": "These existing maintenance tools can rewrite identifiers and merge or remove duplicate records. They are separate from the non-destructive integrity check and its previewed parent repair.",
"issues": {
"missing_furniture": "Offer references missing furniture",
"invalid_item_ids": "Invalid furniture identifiers",
"missing_page": "Offer references a missing category",
"unreachable_page": "Unreachable category",
"category_cycle": "Category path contains a cycle",
"missing_icon": "Missing furniture icon",
"invalid_offer_id": "Invalid offer identifier",
"duplicate_offer_id": "Repeated offer identifier"
}
}
},
"shop": {
"title": "Shop",
"subtitle": "Manage packages and orders",
"packages": "Packages",
"orders": "Orders",
"newPackage": "+ New package",
"edit": "Edit",
"delete": "Delete",
"viewOrder": "View",
"noPackages": "No shop packages yet",
"noOrders": "No orders yet",
"confirmDelete": "Delete this package?",
"colId": "ID",
"colName": "Name",
"colPrice": "Price",
"colCurrency": "Currency",
"colType": "Type",
"colSold": "Sold",
"colEnabled": "Enabled",
"colActions": "Actions",
"colOrderId": "Order ID",
"colCustomer": "Customer",
"colPackage": "Package",
"colAmount": "Amount",
"colStatus": "Status",
"colDate": "Date",
"statusPending": "Pending",
"statusCompleted": "Completed",
"statusRefunded": "Refunded",
"form": {
"name": "Name",
"namePlaceholder": "Package name",
"description": "Description",
"descriptionPlaceholder": "Package description",
"price": "Price",
"currency": "Currency",
"currencyPlaceholder": "EUR, USD, GBP…",
"type": "Type",
"typeCredits": "Credits",
"typeDuckets": "Duckets",
"typeDiamonds": "Diamonds",
"typeBadge": "Badge",
"typeFurni": "Furniture",
"typeRank": "Rank",
"amount": "Amount",
"badgeCode": "Badge code",
"badgeCodePlaceholder": "e.g. VIP001",
"rankId": "Rank ID",
"furniItems": "Furniture items",
"enabled": "Enabled",
"save": "Save package",
"saving": "Saving…",
"cancel": "Cancel"
},
"recentOrders": "Recent orders",
"paidOrders": "Paid orders",
"ordersHint": "Latest PayPal transactions",
"colCredits": "Credits",
"colDuckets": "Duckets",
"colDiamonds": "Diamonds",
"colRank": "Rank",
"colPosition": "Position",
"colTransaction": "Transaction",
"colUser": "User",
"colDescription": "Description",
"pageOf": "Page {page} of {lastPage}",
"packagesTotal": "{count} packages"
},
"transactions": {
"title": "Transactions",
"subtitle": "PayPal payment log",
"noTransactions": "No transactions yet",
"colId": "ID",
"colUser": "User",
"colAmount": "Amount",
"colCurrency": "Currency",
"colPackage": "Package",
"colStatus": "Status",
"colDate": "Date",
"colActions": "Actions",
"statusCompleted": "Completed",
"statusPending": "Pending",
"statusFailed": "Failed",
"statusRefunded": "Refunded",
"detail": {
"title": "Transaction #{id}",
"paypalId": "PayPal ID",
"payerEmail": "Payer email",
"grossAmount": "Gross amount",
"fee": "Fee",
"netAmount": "Net amount"
},
"totalTransactions": "Total transactions",
"pagePaid": "Paid (this page)",
"pageFailed": "Failed (this page)",
"searchPlaceholder": "Search by user, transaction ID or package…",
"presetPaid": "Paid",
"presetFailed": "Failed",
"colPayer": "Payer",
"colTransaction": "Transaction ID"
},
"vouchers": {
"title": "Shop Vouchers",
"subtitle": "Manage redeemable voucher codes",
"newVoucher": "+ New voucher",
"edit": "Edit",
"delete": "Delete",
"noVouchers": "No vouchers yet",
"confirmDelete": "Delete voucher \"{code}\"?",
"colId": "ID",
"colCode": "Code",
"colValue": "Value",
"colType": "Type",
"colUses": "Uses / Max",
"colExpires": "Expires",
"colCreated": "Created",
"colActions": "Actions",
"form": {
"code": "Code",
"codePlaceholder": "e.g. SUMMER2025",
"value": "Value",
"type": "Type",
"typeCredits": "Credits",
"typeDuckets": "Duckets",
"typeDiamonds": "Diamonds",
"typeBadge": "Badge",
"typeFurni": "Furniture",
"typeRank": "Rank",
"badgeCode": "Badge code",
"badgeCodePlaceholder": "e.g. VIP001",
"rankId": "Rank ID",
"maxUses": "Max uses",
"maxUsesPlaceholder": "0 = unlimited",
"expiresAt": "Expires at",
"enabled": "Enabled",
"save": "Save voucher",
"saving": "Saving…",
"cancel": "Cancel",
"amount": "Credits amount",
"amountPlaceholder": "e.g. 100",
"create": "Create voucher"
},
"vouchers": "Vouchers",
"active": "Active",
"usedUp": "Used up",
"expired": "Expired",
"confirmDeleteTitle": "Delete voucher",
"created": "Voucher created",
"deleted": "Voucher deleted",
"createError": "Could not create voucher",
"deleteError": "Could not delete voucher",
"statusActive": "Active",
"statusUsedUp": "Used up",
"statusExpired": "Expired",
"colAmount": "Amount",
"colStatus": "Status"
},
"subscriptions": {
"title": "Subscriptions",
"subtitle": "Active recurring subscriptions",
"noSubscriptions": "No active subscriptions",
"cancel": "Cancel",
"confirmCancel": "Cancel subscription for {username}?",
"colId": "ID",
"colUser": "User",
"colPackage": "Package",
"colAmount": "Amount",
"colInterval": "Interval",
"colStarted": "Started",
"colNextBilling": "Next billing",
"colStatus": "Status",
"colActions": "Actions",
"statusActive": "Active",
"statusCancelled": "Cancelled",
"statusExpired": "Expired"
},
"rareValues": {
"title": "Rare Values",
"subtitle": "Manage rare value categories and item prices",
"categories": "Categories",
"items": "Items",
"addCategory": "Add category",
"editCategory": "Edit category",
"deleteCategory": "Delete category",
"noCategories": "No rare value categories yet",
"confirmDeleteCategory": "Delete category \"{name}\" and all its items?",
"colId": "ID",
"colName": "Name",
"colItems": "Items",
"colUpdated": "Updated",
"colActions": "Actions",
"colItemName": "Item name",
"colCredits": "Credits",
"colPoints": "Points",
"colPointType": "Point type",
"categoryForm": {
"name": "Name",
"namePlaceholder": "Category name",
"save": "Save category",
"saving": "Saving…",
"cancel": "Cancel"
},
"itemForm": {
"itemName": "Item name",
"itemNamePlaceholder": "e.g. Throne",
"credits": "Credits value",
"points": "Points value",
"pointType": "Point type",
"pointTypeDuckets": "Duckets",
"pointTypeDiamonds": "Diamonds",
"save": "Save item",
"saving": "Saving…",
"cancel": "Cancel"
}
},
"badges": {
"title": "Badges",
"subtitle": "Upload, give and manage badge catalogue",
"upload": "Upload",
"giveBadge": "Give badge",
"catalogue": "Catalogue",
"uploadTitle": "Upload a new badge",
"uploadSubtitle": "Upload a badge image file",
"badgeCode": "Badge code",
"badgeCodePlaceholder": "e.g. VIP001",
"badgeFile": "Badge file",
"badgeFileHint": "PNG or GIF, recommended 40x40",
"uploadButton": "Upload",
"uploading": "Uploading…",
"giveTitle": "Give badge to user",
"giveSubtitle": "Grant a badge to a specific user",
"username": "Username",
"usernamePlaceholder": "Target username",
"giveButton": "Give badge",
"giving": "Giving…",
"catalogueTitle": "Badge catalogue",
"catalogueSubtitle": "All available badges in the hotel",
"noBadges": "No badges in the catalogue",
"search": "Search badges",
"searchPlaceholder": "Search by code or name…",
"colCode": "Code",
"colImage": "Image",
"colName": "Name",
"colDescription": "Description",
"colActions": "Actions"
},
"achievements": {
"title": "Achievements",
"subtitle": "Read-only list of in-game achievements",
"noAchievements": "No achievements configured",
"colId": "ID",
"colName": "Name",
"colCategory": "Category",
"colLevels": "Levels",
"colReward": "Reward",
"colProgress": "Progress",
"levelLabel": "Level {level}",
"rewardCredits": "{count} credits",
"rewardPoints": "{count} {points}"
},
"calendar": {
"title": "Calendar campaigns",
"subtitle": "Read-only list of calendar campaigns and events",
"noCampaigns": "No calendar campaigns yet",
"colId": "ID",
"colName": "Name",
"colStart": "Start",
"colEnd": "End",
"colType": "Type",
"colReward": "Reward",
"colActions": "Actions",
"detail": {
"title": "Campaign: {name}",
"subtitle": "Calendar event details",
"days": "Days",
"dayLabel": "Day {day}",
"reward": "Reward",
"noDays": "No days configured for this campaign"
}
},
"radio": {
"title": "Radio Moderation",
"subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).",
"moderation": "Moderation",
"shouts": "Shouts",
"applications": "Applications",
"schedules": "Schedules",
"settings": "Settings",
"embed": "Embed",
"ranks": "Ranks",
"history": "History",
"apiKeys": "API Keys",
"points": "Points",
"autoDj": "AutoDJ",
"monitoring": {
"title": "Radio Monitoring",
"subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.",
"stream": "Stream",
"online": "Online",
"offline": "Offline",
"notConfigured": "Not configured",
"nowPlaying": "Now playing",
"nowPlayingApi": "Now-playing API",
"listenersApi": "Listeners API",
"listeners": "Listeners",
"currentSong": "Current song",
"bitrate": "Bitrate",
"status": "Status",
"noNowPlayingHint": "no now-playing API set",
"noListenersHint": "no listeners API set",
"endpointDiagnostics": "Endpoint diagnostics",
"diagnosticsLegend": "OK: доступно · WARN: не настроено · ERROR: ошибка запроса или истекло время ожидания.",
"streamUrl": "Stream URL",
"unreachable": "unreachable",
"refresh": "Refresh"
},
"user": "User",
"message": "Message",
"posted": "Posted",
"realName": "Real Name",
"age": "Age",
"style": "Style",
"applied": "Applied",
"day": "Day",
"start": "Start",
"end": "End",
"show": "Show",
"status": "Status",
"active": "active",
"inactive": "inactive",
"hidden": "hidden",
"activeSchedules": "Active schedules",
"noShouts": "No shouts to moderate",
"noApplications": "No applications submitted.",
"noSchedules": "No schedules configured.",
"deleteShout": "Delete",
"confirmDeleteShout": "Delete this shout?",
"pendingApplications": "Pending applications",
"settingsForm": {
"title": "Radio Settings",
"subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.",
"enabled": "Enabled",
"disabled": "Disabled",
"totalKeys": "Total keys",
"configured": "Configured",
"curatedHint": "curated keys with a value",
"customKeys": "Custom keys",
"saveAll": "Save all",
"singleKey": "Add / overwrite a single key",
"keyPlaceholder": "radio_custom_key",
"valuePlaceholder": "value",
"commentPlaceholder": "comment (optional)",
"saveSingle": "Save",
"otherSettings": "Other radio settings",
"dbError": "Could not load settings (database unavailable). Defaults will be created on save."
},
"embedPage": {
"title": "Radio Embed",
"subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).",
"streamUrl": "Stream URL",
"configured": "Configured",
"missing": "Missing",
"radioName": "Radio name",
"nowPlayingApi": "Now-playing API",
"set": "Set",
"notSet": "Not set",
"noStreamUrl": "No stream URL configured",
"noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.",
"goToSettings": "Go to Radio Settings",
"livePreview": "Live preview",
"livePreviewText": "This is the bare audio player as visitors will see it. Press play to confirm the stream is reachable.",
"source": "Source",
"audioSnippet": "Audio player snippet",
"audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.",
"iframeSnippet": "Iframe wrapper snippet",
"iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.",
"audioUnsupported": "Your browser does not support the audio element."
},
"banners": {
"title": "Banners",
"heading": "Radio Banners",
"description": "Promotional banners shown on the radio page, ordered by sort order.",
"addBanner": "Add banner",
"createBanner": "Create banner",
"deleteBanner": "Delete banner",
"noBanners": "No banners yet — add one above.",
"existing": "Existing banners ({count})",
"save": "Save",
"delete": "Delete",
"byUser": "by user {id}",
"active": "active",
"hidden": "hidden",
"bannerAlt": "Radio banner",
"statusActive": "Active",
"statusHidden": "Hidden",
"dbError": "Could not load banners (database unavailable).",
"form": {
"imagePath": "Image path / URL",
"imagePathPlaceholder": "/storage/radio/banner.png",
"title": "Title",
"description": "Description",
"sortOrder": "Sort order",
"active": "Active"
}
},
"ranksForm": {
"title": "Radio Ranks",
"subtitle": "DJ / staff ranks assignable on radio applications.",
"dbError": "Could not load ranks (database unavailable).",
"active": "Active",
"addRank": "Add rank",
"name": "Name",
"badgeCode": "Badge code",
"description": "Description",
"createRank": "Create rank",
"existing": "Existing ranks ({count})",
"noRanks": "No ranks yet — add one above.",
"activeLabel": "active",
"inactiveLabel": "inactive",
"save": "Save",
"deleteRank": "Delete rank #{id}"
},
"historyPage": {
"title": "Radio Play History",
"subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.",
"dbError": "Could not load radio history (database unavailable).",
"showsLogged": "Shows logged",
"onAirNow": "On air now",
"uniqueDjs": "Unique DJs",
"peakListeners": "Peak listeners",
"empty": "No radio history recorded yet.",
"showLog": "Show log ({count})",
"colDj": "DJ",
"colShow": "Show",
"colStarted": "Started",
"colEnded": "Ended",
"colAirtime": "Airtime",
"colListeners": "Listeners",
"colNotes": "Notes",
"onAir": "on air"
},
"apiKeysForm": {
"title": "Radio API Keys",
"subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.",
"dbError": "Could not load API keys (database unavailable).",
"totalKeys": "Total keys",
"active": "Active",
"inactive": "Inactive",
"generateKey": "Generate key",
"generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.",
"name": "Name",
"namePlaceholder": "AzureCast bridge",
"rateLimit": "Rate limit (requests/min)",
"allowedIps": "Allowed IPs (optional)",
"allowedIpsPlaceholder": "comma-separated, blank = any",
"generate": "Generate key",
"existingKeys": "Existing keys ({count})",
"noKeys": "No API keys yet — generate one above.",
"colName": "Name",
"colKey": "Key",
"colAllowedIps": "Allowed IPs",
"colRateLimit": "Rate limit",
"colLastUsed": "Last used",
"colExpires": "Expires",
"colStatus": "Status",
"colActions": "Actions",
"maskedHint": "Only the first 8 characters are shown",
"any": "any",
"activeLabel": "active",
"inactiveLabel": "inactive",
"deactivate": "Deactivate",
"activate": "Activate",
"delete": "Delete"
},
"pointsForm": {
"title": "Radio Listener Points",
"subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.",
"saved": "Saved",
"points": "Points",
"enabled": "Enabled",
"disabled": "Disabled",
"perMinute": "Per minute",
"paidIn": "paid in {currency}",
"maxPerDay": "Max / day",
"unlimited": "Unlimited",
"minListeners": "Min listeners",
"settings": "Settings",
"pointsEnabled": "Points enabled",
"pointsEnabledHint": "Master switch for awarding listener points.",
"currency": "Currency",
"currencyHint": "Which wallet the points are paid into.",
"pointsPerMinute": "Points per minute",
"pointsPerMinuteHint": "Amount awarded for each full minute of listening.",
"maxPerDayHint": "Daily cap per user. Use 0 for unlimited.",
"minListenersHint": "Points are only awarded when at least this many people are tuned in.",
"save": "Save points settings"
},
"autoDjForm": {
"title": "Radio AutoDJ",
"subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.",
"dbError": "Could not load the AutoDJ playlist (database unavailable).",
"tracks": "Tracks",
"active": "Active",
"inactive": "Inactive",
"addTrack": "Add track",
"titlePlaceholder": "Track title",
"artist": "Artist",
"album": "Album",
"artworkUrl": "Artwork URL",
"artworkUrlPlaceholder": "https://…/cover.png",
"duration": "Duration (seconds)",
"durationPlaceholder": "e.g. 215",
"sortOrder": "Sort order",
"playlist": "Playlist ({count})",
"noTracks": "No AutoDJ tracks yet — add one above.",
"colOrder": "Order",
"colTitle": "Title",
"colArtist": "Artist",
"colAlbum": "Album",
"colDuration": "Duration",
"colPlays": "Plays",
"colLastPlayed": "Last played",
"colStatus": "Status",
"colActions": "Actions",
"activeLabel": "active",
"inactiveLabel": "inactive",
"deactivate": "Deactivate",
"activate": "Activate",
"delete": "Delete",
"trackTitle": "Title"
},
"moderationPage": {
"title": "DJ Moderation",
"subtitle": "Review and remove radio shouts (50 most recent).",
"recentShouts": "Recent Shouts ({count})"
}
},
"commandocentrum": {
"title": "Commandocentrum",
"subtitle": "Diagnostics, RCON controls and user management",
"diagnostics": "Diagnostics",
"rcon": "RCON",
"userActions": "User actions",
"diagnosticsTitle": "Emulator diagnostics",
"memoryUsage": "Memory usage",
"uptime": "Uptime",
"onlineUsers": "Online users",
"roomsLoaded": "Rooms loaded",
"refresh": "Refresh",
"rconTitle": "RCON commands",
"rconPlaceholder": "Enter RCON command…",
"rconSend": "Send",
"rconSending": "Sending…",
"rconResponse": "Response",
"userActionsTitle": "User actions",
"username": "Username",
"usernamePlaceholder": "Target username",
"action": "Action",
"execute": "Execute",
"actions": {
"disconnect": "Disconnect",
"alert": "Send alert",
"giveCredits": "Give credits",
"giveBadge": "Give badge",
"givePoints": "Give points",
"ban": "Ban",
"kick": "Kick"
},
"messagePlaceholder": "Message (for alerts)…",
"amountPlaceholder": "Amount…",
"badgePlaceholder": "Badge code…"
},
"emulator": {
"title": "Emulator Config",
"subtitle": "View and edit emulator settings and locale texts",
"settings": "Settings",
"texts": "Texts",
"search": "Search",
"searchPlaceholder": "Search keys…",
"noSettings": "No settings found",
"noTexts": "No texts found",
"edit": "Edit",
"save": "Save",
"saving": "Saving…",
"cancel": "Cancel",
"colKey": "Key",
"colValue": "Value",
"colType": "Type",
"colActions": "Actions",
"editDialog": {
"title": "Edit: {key}",
"value": "Value",
"valuePlaceholder": "Enter value…",
"save": "Save changes",
"cancel": "Cancel"
}
},
"alerts": {
"title": "Alerts",
"subtitle": "Send hotel-wide alerts and view recent alerts",
"sendAlert": "Send hotel alert",
"recentAlerts": "Recent alerts ({count})",
"noRecentAlerts": "No recent alerts",
"form": {
"title": "Alert title",
"titlePlaceholder": "e.g. Server maintenance in 10 minutes",
"message": "Alert message",
"messagePlaceholder": "Write the alert message…",
"type": "Type",
"typeHotel": "Hotel-wide alert",
"typeStaff": "Staff only",
"urgent": "Urgent",
"send": "Send alert",
"sending": "Sending…",
"description": "Broadcasts via RCON <code>hotelalert</code> to online users."
},
"colId": "ID",
"colTitle": "Title",
"colSentBy": "Sent by",
"colType": "Type",
"colDate": "Date",
"colActions": "Actions",
"noAlerts": "No recent alerts",
"alertsShown": "Shown",
"critical": "Critical",
"warnings": "Warnings",
"unread": "Unread",
"markAllRead": "Mark all read",
"colWhen": "When",
"colSeverity": "Severity",
"colMessage": "Message"
},
"logs": {
"title": "Staff Activities",
"subtitle": "Audit trail of staff actions in the admin panel",
"noLogs": "No staff activity logged yet",
"colId": "ID",
"colUser": "User",
"colAction": "Action",
"colTarget": "Target",
"colDescription": "Description",
"colIp": "IP",
"colTimestamp": "Timestamp",
"filterByUser": "Filter by user…",
"filterByAction": "Filter by action…",
"clearFilters": "Clear filters",
"noResults": "No matching activities",
"colStaff": "Staff",
"colWhen": "When",
"searchPlaceholder": "Search action, description or IP…",
"totalActivities": "Total activities",
"onThisPage": "On this page",
"recent": "Last minute",
"authorizationErrors": "Authorization errors",
"authorizationOnly": "Auth errors only",
"allActivities": "All activities",
"staffId": "Staff ID",
"actionType": "Action type",
"filter": "Filter",
"activities": "{count} activities",
"staffWithId": "#{id} {name}",
"userPrefix": "user",
"pagination": "Page {page} of {pages} · {total} total",
"next": "Next",
"prev": "Previous",
"unknownUser": "unknown",
"emptyValue": "-",
"colTime": "Time",
"audit": {
"colTargetId": "Target ID",
"colDetails": "Details",
"colDate": "Date",
"searchPlaceholder": "Search by action or target…",
"changesCount": "{count} changes",
"notAvailable": "N/A",
"filtersTitle": "Filter audit records",
"filterActor": "Actor (exact username or ID)",
"filterAction": "Exact action",
"filterFrom": "From date (UTC)",
"filterTo": "Through date (UTC)",
"filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.",
"applyFilters": "Apply filters",
"resetFilters": "Reset filters",
"invalidDetails": "These legacy details cannot be displayed.",
"beforeValue": "Before",
"afterValue": "After",
"exportHint": "CSV exports the current filtered page, up to 100 records."
},
"chat": {
"colMessage": "Message",
"colRoomId": "Room ID",
"searchPlaceholder": "Search by username or message…"
},
"commands": {
"colCommand": "Command",
"colParams": "Params",
"searchPlaceholder": "Search by username, command, or params…"
},
"trades": {
"colUserOne": "User one",
"colUserTwo": "User two",
"colStatus": "Status",
"statusUnknown": "unknown",
"searchPlaceholder": "Search by username…"
},
"history": {
"preview": "Preview restore",
"title": "Restore a recorded edit",
"description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.",
"loading": "Loading…",
"unavailable": "This revision is unavailable or you do not have permission to restore it.",
"conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.",
"failed": "The restore could not be completed. Please reload and try again.",
"field": "Field",
"current": "Current value",
"restore": "Value to restore",
"confirm": "Confirm restore",
"restoring": "Restoring…",
"fields": {
"caption": "Category name",
"captionSave": "Internal category name",
"pageLayout": "Category layout",
"enabled": "Enabled",
"visible": "Visible",
"clubOnly": "Club members only",
"vipOnly": "VIP members only",
"minRank": "Minimum rank",
"iconImage": "Category icon",
"iconColor": "Icon colour",
"pageHeadline": "Header image",
"pageTeaser": "Preview image",
"pageSpecial": "Special image",
"pageText1": "Primary text",
"pageText2": "Secondary text",
"pageTextDetails": "Details text",
"pageTextTeaser": "Preview text",
"includes": "Included categories",
"costCredits": "Credit price",
"costPoints": "Points price",
"pointsType": "Points currency",
"title": "News title",
"slug": "News address",
"image": "News image",
"shortStory": "Summary",
"fullStory": "Article content",
"status": "Publication status",
"publishAt": "Scheduled publication",
"publishedAt": "Publication date"
}
}
},
"wordfilter": {
"title": "Word Filter",
"subtitle": "Manage filtered words and phrases in the hotel",
"addWord": "Add word",
"addWords": "Add words",
"noWords": "No filtered words yet",
"confirmDelete": "Remove \"{word}\" from the filter?",
"colId": "ID",
"colWord": "Word",
"colAddedBy": "Added by",
"colCreated": "Created",
"colActions": "Actions",
"form": {
"word": "Word",
"wordPlaceholder": "e.g. badword",
"addMore": "Add multiple words (one per line)",
"save": "Add to filter",
"saving": "Saving…",
"cancel": "Cancel"
},
"filteredWords": "Filtered words",
"words": "Words",
"delete": "Delete",
"confirmDeleteTitle": "Remove word",
"added": "Word added to filter",
"deleted": "Word removed from filter",
"addError": "Could not add word (it may already exist)",
"deleteError": "Could not remove word"
},
"maintenance": {
"title": "Maintenance Mode",
"subtitle": "Enable or disable hotel-wide maintenance",
"enabled": "Maintenance mode is enabled",
"disabled": "Maintenance mode is disabled",
"enable": "Enable maintenance",
"disable": "Disable maintenance",
"message": "Maintenance message",
"messagePlaceholder": "We'll be back shortly!",
"staffAccess": "Allow staff access during maintenance",
"save": "Save settings",
"saving": "Saving…",
"confirmEnable": "Enabling maintenance will prevent all non-staff users from accessing the hotel. Continue?",
"confirmDisable": "Disable maintenance mode and restore access for all users?"
},
"housekeeping": {
"title": "Ведение домашнего хозяйства Разрешения",
"subtitle": "Configure which Ранги can access which admin sections",
"addPermission": "Add permission",
"editPermission": "Редактировать permission",
"deletePermission": "Удалить permission",
"noPermissions": "Нет Ведение домашнего хозяйства Разрешения configured",
"confirmDelete": "Удалить this permission?",
"colId": "ID",
"colRank": "Ранг",
"colSection": "Section",
"colActions": "Действия",
"form": {
"rankId": "Ранг ID",
"rankIdPlaceholder": "Minimum Ранг",
"section": "Section key",
"sectionPlaceholder": "e.g. admin.Панель управления",
"save": "Сохранить permission",
"saving": "Сохранение...",
"cancel": "Отмена"
},
"saved": "Saved!",
"deleted": "Deleted!",
"errorOccurred": "An error occurred",
"emptyInput": "Empty input",
"invalidJson": "Invalid JSON",
"imported": "Imported!",
"presetApplied": "Preset applied!",
"cleared": "All Разрешения cleared!",
"invalidRank": "Invalid Ранг",
"testDone": "Test done: {count} Разрешения found",
"testing": "Testing...",
"loading": "Loading...",
"prev": "Previous",
"next": "Next",
"confirmClearAll": "Удалить ALL Разрешения? This action cannot be undone!",
"colGroup": "Group",
"colDepends": "Depends on",
"colPermission": "Permission",
"colDescription": "Description",
"colMinRank": "Min. Ранг",
"permissionKey": "Permission key",
"minRank": "Min. Ранг",
"description": "Description",
"permissions": "Разрешения",
"permissionsCount": "{count} Разрешения",
"permission": "permission",
"highestMinRank": "Highest min. Ранг: {rank}",
"totalMinRank": "Total min. Ранг sum: {total}",
"groupCount": "{count} groups",
"rankCount": "{count} Ранги",
"missingDeps": "{count} missing dependencies",
"dependsOn": "depends on",
"notFound": "not found",
"missing": "(missing)",
"rank": "Ранг",
"count": "Count",
"searchPermission": "Поиск Разрешения…",
"search": "Поиск",
"manage": "Manage",
"importSelection": "Импорт selection",
"noGroup": "Нет group",
"allGroups": "All groups",
"perGroup": "Разрешения per group",
"perRank": "Разрешения per Ранг",
"rankOverviewHint": "All Разрешения grouped by the Ранг they are assigned to.",
"tabOverview": "Обзор",
"tabManage": "Manage",
"tabImport": "Импорт / Export",
"tabRanks": "Ранг Обзор",
"tabPresets": "Presets",
"tabTest": "Test",
"tabAudit": "Audit log",
"importPermissions": "Импорт Разрешения",
"importHint": "Paste a JSON array of permission objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']",
"importPlaceholder": "Paste JSON here…",
"import": "Импорт",
"exportTitle": "Export Разрешения",
"exportHint": "Export all Разрешения as JSON for backup or batch editing.",
"export": "Export JSON",
"copy": "Copy",
"copied": "Copied!",
"presets": "Permission presets",
"presetsHint": "Apply a predefined set of Разрешения for common staff roles.",
"presetModerator": "Moderator",
"presetModeratorDesc": "Basic Модерация tools: Пользователь lookup, Запреты, CFH handling, chat Журналы.",
"presetAdmin": "Administrator",
"presetAdminDesc": "Full admin access: Пользователи, Номера, news, Настройки, Магазин, events, Радио & more.",
"presetSuperAdmin": "Super Admin",
"presetSuperAdminDesc": "Complete access to every feature including permission management and asset Импорт.",
"applyPreset": "Apply preset",
"clearAll": "Clear all Разрешения",
"testTitle": "Test Ранг access",
"testHint": "Enter a Ранг number to see which Разрешения would be granted.",
"test": "Test",
"auditTitle": "Permission audit log",
"auditHint": "All changes to Ведение домашнего хозяйства Разрешения are logged.",
"auditLogsAt": "Audit Журналы are available on the Audit log page.",
"viewAuditLogs": "View audit Журналы",
"importedWithErrors": "Imported {count} Разрешения with {errors} errors",
"confirmClearAllDesc": "This will remove every permission entry from the База данных. Are you sure?",
"confirmDeletePermission": "Удалить this permission permanently?",
"confirmBulkDelete": "Удалить {count} selected Разрешения?",
"deleteSelected": "Удалить {count} selected",
"cancel": "Отмена",
"confirm": "Confirm",
"auditTime": "Time",
"auditUser": "Пользователь",
"auditAction": "Action",
"auditTarget": "Target",
"selectAllMatching": "Select all {count} matching",
"save": "Save",
"importTitle": "Import permissions",
"legacyBannerTitle": "Use Permissions to change who can do what",
"legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.",
"legacyBannerCta": "Open Permissions",
"writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.",
"tabCompare": "ACL compare",
"tabExportOnly": "Export archive",
"compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).",
"compareAligned": "{count} aligned",
"compareMissingAcl": "{count} missing in ACL",
"compareMismatch": "{count} rank mismatch",
"colAclPresent": "In ACL",
"colAclMinRank": "ACL min rank",
"colStatus": "Status",
"statusAligned": "Aligned",
"statusMissingAcl": "Missing in ACL",
"statusMismatch": "Rank differs",
"exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival."
},
"rooms": {
"title": "Rooms",
"subtitle": "Search and manage hotel rooms",
"search": "Search",
"searchPlaceholder": "Search by name, owner or ID…",
"searchResults": "{count, plural, one {# room} other {# rooms}} found for \"{query}\"",
"noResults": "No rooms found",
"colId": "ID",
"colName": "Name",
"colOwner": "Owner",
"colUsers": "Users",
"colState": "State",
"colCategory": "Category",
"colCreated": "Created",
"colActions": "Actions",
"stateOpen": "Open",
"stateClosed": "Closed",
"stateLocked": "Locked",
"stateInvisible": "Invisible",
"detail": {
"title": "Room: {name}",
"subtitle": "Owned by {owner}",
"overview": "Overview",
"actions": "Actions",
"description": "Description",
"noDescription": "No description",
"owner": "Owner",
"users": "Users online",
"maxUsers": "Max users",
"category": "Category",
"state": "State",
"tags": "Tags",
"noTags": "No tags",
"created": "Created",
"deleteRoom": "Delete room",
"confirmDelete": "Delete room \"{name}\"? This cannot be undone.",
"enterRoom": "Enter room",
"changeOwner": "Change owner",
"changeOwnerPlaceholder": "New owner username"
}
},
"emailTemplates": {
"title": "Email Templates",
"subtitle": "Manage transactional email templates",
"newTemplate": "+ New template",
"edit": "Edit",
"delete": "Delete",
"noTemplates": "No email templates yet",
"confirmDelete": "Delete template \"{name}\"?",
"colId": "ID",
"colName": "Name",
"colSubject": "Subject",
"colKey": "Key",
"colUpdated": "Updated",
"colActions": "Actions",
"form": {
"name": "Name",
"namePlaceholder": "e.g. Welcome email",
"key": "Key",
"keyPlaceholder": "e.g. welcome_email",
"subject": "Subject",
"subjectPlaceholder": "Email subject line",
"body": "Body (HTML)",
"bodyPlaceholder": "<p>Dear {username},</p>",
"variables": "Available variables",
"variablesHint": "{username}, {email}, {hotel_name}",
"save": "Save template",
"saving": "Saving…",
"cancel": "Cancel"
}
},
"theme": {
"title": "Theme",
"subtitle": "Customise the CMS appearance",
"presets": "Presets",
"colours": "Colours",
"css": "CSS",
"presetsTitle": "Theme presets",
"presetsSubtitle": "Choose a pre-built colour scheme",
"applyPreset": "Apply",
"presetApplied": "Preset applied: {preset}",
"customiseTitle": "Custom colours",
"primary": "Primary",
"secondary": "Secondary",
"accent": "Accent",
"background": "Background",
"surface": "Surface",
"text": "Text",
"saveColours": "Save colours",
"savingColours": "Saving…",
"cssTitle": "Custom CSS",
"cssSubtitle": "Add custom CSS to override theme styles",
"cssPlaceholder": "/* Your custom CSS here */",
"saveCss": "Save CSS",
"savingCss": "Saving…",
"reset": "Reset to defaults",
"confirmReset": "Reset theme to default values?"
},
"media": {
"title": "Media Library",
"subtitle": "Upload and manage media files",
"upload": "Upload",
"uploadTitle": "Upload a file",
"uploadSubtitle": "Drag and drop or click to upload",
"uploadButton": "Choose file",
"uploading": "Uploading…",
"noFiles": "No media files yet",
"delete": "Delete",
"confirmDelete": "Delete this file permanently?",
"search": "Search",
"searchPlaceholder": "Search by filename…",
"colPreview": "Preview",
"colName": "Name",
"colSize": "Size",
"colType": "Type",
"colUploaded": "Uploaded",
"colActions": "Actions",
"copyUrl": "Copy URL",
"urlCopied": "URL copied to clipboard"
},
"favicon": {
"title": "Favicon",
"subtitle": "Upload and manage the site favicon",
"current": "Current favicon",
"uploadLabel": "Upload favicon",
"uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.",
"upload": "Upload",
"uploading": "Uploading…",
"delete": "Remove",
"deleting": "Removing…",
"saved": "Favicon saved successfully!",
"deleted": "Favicon removed successfully!",
"error": "Something went wrong",
"confirmDelete": "Remove the favicon? The site will no longer show a custom favicon.",
"generator": {
"title": "Generate favicon",
"text": "Text",
"bgColor": "Background color",
"textColor": "Text color",
"rounded": "Rounded corners",
"save": "Save as favicon"
},
"cancel": "Cancel"
},
"settings": {
"title": "CMS Settings",
"subtitle": "Manage key/value CMS configuration",
"addSetting": "Add setting",
"edit": "Edit",
"delete": "Delete",
"noSettings": "No settings found",
"confirmDelete": "Delete setting \"{key}\"?",
"colKey": "Key",
"colValue": "Value",
"colUpdated": "Updated",
"colActions": "Actions",
"form": {
"key": "Key",
"keyPlaceholder": "e.g. hotel_name",
"value": "Value",
"valuePlaceholder": "Setting value",
"save": "Save setting",
"saving": "Saving…",
"cancel": "Cancel"
},
"keysInDatabase": "{count} keys in database",
"managedInForm": "{count} managed in form",
"documented": "{count} documented",
"saved": "Settings saved.",
"saveFailed": "Could not save settings.",
"saveSettings": "Save settings",
"viewOnly": "You can view settings but need edit permission to change them."
},
"import": {
"title": "Import",
"subtitle": "Import assets from external sources into your hotel.",
"badges": "Badges",
"badgesDescription": "Import and manage badge assets from external sources.",
"furni": "Furni",
"furniDescription": "Import furniture definitions, SWF files, and icons.",
"clothing": "Clothing",
"clothingDescription": "Import clothing and wearables for avatars.",
"effects": "Effects",
"effectsDescription": "Import avatar effects and animations.",
"pets": "Pets",
"petsDescription": "Import pet data and icons.",
"clone": "Clone",
"cloneDescription": "Clone existing items from one source to another.",
"upload": "Upload .nitro",
"uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.",
"sync": "Auto Sync",
"syncDescription": "Automatically import missing furniture from all configured sources.",
"repairIcons": "Repair Icons",
"repairIconsDescription": "Download any missing icon files for furniture already in the database.",
"audit": "Catalog Audit",
"auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources."
},
"translations": {
"title": "Translations",
"subtitle": "Translate your hotel into multiple languages.",
"tabs": {
"cms": "CMS",
"client": "Client (Nitro)",
"emulator": "Emulator"
},
"emulator": {
"title": "Emulator",
"subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).",
"infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.",
"fullSettings": "Full settings"
}
},
"tickets": {
"title": "Tickets",
"subtitle": "Support tickets from players",
"noTickets": "No active tickets",
"searchPlaceholder": "Search subject, user, category or ID…",
"presetActive": "Active",
"statusOpen": "Open",
"statusInProgress": "In progress",
"statusWaiting": "Waiting",
"statusClosed": "Closed",
"colTicket": "Ticket",
"colStatus": "Status",
"colPriority": "Priority",
"colAssigned": "Assigned",
"colDate": "Date",
"meta": "by {user} · {count} msg · {category}",
"queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.",
"queueOtherCta": "Open help-center tickets",
"queueCounts": "Open here: {here} · Help center: {other}"
},
"cfh": {
"title": "Call for Help",
"subtitle": "In-game CFH / support tickets",
"noTickets": "No CFH tickets",
"searchPlaceholder": "Search issue, user or ID…",
"noDescription": "No description",
"roomMeta": "Room #{room} · {when}",
"stateOpen": "Open",
"statePicked": "Picked",
"stateClosed": "Closed",
"colId": "ID",
"colIssue": "Issue",
"colSender": "Sender",
"colReported": "Reported",
"colMod": "Mod",
"colStatus": "Status"
},
"hubs": {
"newsMedia": "News & media",
"newsMediaSubtitle": "Articles, photos, banners, ads and media library",
"siteContent": "Site content",
"siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes",
"engagement": "Engagement",
"engagementSubtitle": "Events, polls and support tickets",
"users": "Users",
"usersSubtitle": "Directory, online players, applications and teams",
"access": "Access & security",
"accessSubtitle": "Bans, IP, VPN, permissions and word filter",
"moderation": "Moderation",
"moderationSubtitle": "Reports, actions and moderation team",
"catalog": "Catalog & rares",
"catalogSubtitle": "Catalog, rares, badges, achievements and sounds",
"shop": "Shop & payments",
"shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar",
"radio": "Radio",
"radioSubtitle": "Stream, DJ tools, embed and monitoring",
"settings": "Settings",
"settingsSubtitle": "CMS config, theme, maintenance and related tools",
"tools": "Tools",
"toolsSubtitle": "RCON, rooms, import and translations",
"observability": "Observability",
"observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts",
"tabs": {
"articles": "Articles",
"photos": "Photos",
"banners": "Banners",
"ads": "Ads",
"media": "Media",
"navigator": "Navigator",
"help": "Help",
"boxes": "Boxes",
"tags": "Tags",
"prefixes": "Prefixes",
"events": "Events",
"eventTypes": "Event types",
"polls": "Polls",
"tickets": "Tickets",
"templates": "Templates",
"directory": "Directory",
"multiAccounts": "Multi-accounts",
"online": "Online",
"applications": "Applications",
"teams": "Teams",
"bans": "Bans",
"ip": "IP",
"vpn": "VPN",
"permissions": "Permissions",
"wordFilter": "Word filter",
"overview": "Overview",
"actions": "Actions",
"cfh": "CFH",
"team": "Team",
"catalogTab": "Catalog",
"rares": "Rares",
"badges": "Badges",
"achievements": "Achievements",
"sounds": "Sounds",
"shopTab": "Shop",
"transactions": "Transactions",
"vouchers": "Vouchers",
"subscriptions": "Subscriptions",
"calendar": "Calendar",
"history": "History",
"moderationTab": "Moderation",
"monitoring": "Monitoring",
"settingsTab": "Settings",
"embed": "Embed",
"apiKeys": "API keys",
"points": "Points",
"ranks": "Ranks",
"autoDj": "Auto DJ",
"cms": "CMS",
"theme": "Theme",
"maintenance": "Maintenance",
"favicon": "Favicon",
"emulator": "Emulator",
"email": "Email",
"housekeeping": "Housekeeping",
"commando": "Commando",
"rooms": "Rooms",
"import": "Import",
"translations": "Translations",
"logs": "Logs",
"audit": "Audit",
"chat": "Chat",
"commands": "Commands",
"trades": "Trades",
"analytics": "Analytics",
"activity": "Activity",
"economy": "Economy",
"devops": "DevOps",
"errors": "Errors",
"alerts": "Alerts",
"toolsGroup": "Tools",
"helpTickets": "Help-center tickets",
"ticketInbox": "Inbox",
"importOverview": "Overview",
"importBadges": "Badges",
"importFurni": "Furni",
"importUpload": "Upload",
"importClothing": "Clothing",
"importEffects": "Effects",
"importPets": "Pets",
"importClone": "Clone",
"importSync": "Sync",
"importRepairIcons": "Repair icons",
"importAudit": "Audit"
},
"events": "Events",
"eventsSubtitle": "Hotel events and event types",
"tickets": "Support desk",
"ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates",
"staffAccess": "Ranks & permissions",
"staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access",
"analytics": "Analytics",
"analyticsSubtitle": "Hotel activity, retention and economy",
"devops": "DevOps",
"devopsSubtitle": "Service health and emulator errors",
"import": "Import",
"importSubtitle": "Furni, badges, clothing and asset tools"
},
"events": {
"newEvent": "+ New event",
"createTitle": "Create event",
"createSubtitle": "Schedule a new hotel event",
"searchPlaceholder": "Search events…",
"colId": "ID",
"colTitle": "Title",
"colType": "Type",
"colStarts": "Starts",
"colStatus": "Status",
"colActions": "Actions",
"statusPublished": "Published",
"statusDraft": "Draft",
"statusCancelled": "Cancelled",
"statusCompleted": "Completed",
"statRegistrations": "Registrations",
"statPrizes": "Prizes",
"statWinners": "Winners",
"statTime": "Time",
"maxPlayers": "Max: {count}",
"timeUpcoming": "Upcoming",
"timePast": "Past",
"endsAt": "Ends: {date}",
"userFallback": "User #{id}",
"registrationsTitle": "Registrations ({count})",
"noRegistrations": "No registrations yet.",
"noPrizes": "No prizes configured yet.",
"noWinners": "No winners yet.",
"addPrize": "Add prize",
"addWinner": "Add winner",
"formEditTitle": "Edit event",
"formDetailsTitle": "Event details",
"formTitle": "Title",
"formEventType": "Event type",
"formSelectType": "Select type",
"formDescription": "Description",
"formStartsAt": "Starts at",
"formEndsAt": "Ends at",
"formSelectStart": "Select start date",
"formSelectEnd": "Select end date",
"formMaxPlayers": "Max players",
"formUnlimited": "Unlimited",
"formRoomId": "Room ID",
"formOptional": "Optional",
"formImageUrl": "Image URL",
"formSaving": "Saving…",
"formUpdate": "Update event",
"formCreate": "Create event",
"toastUpdated": "Event updated!",
"toastCreated": "Event created!"
},
"polls": {
"newPoll": "+ New poll",
"createTitle": "Create poll",
"createSubtitle": "Create a new community poll or survey",
"searchPlaceholder": "Search polls…",
"colId": "ID",
"colTitle": "Title",
"colStatus": "Status",
"colType": "Type",
"colCreated": "Created",
"colActions": "Actions",
"statusActive": "Active",
"statusDraft": "Draft",
"statusClosed": "Closed",
"typeMultiple": "Multiple choice",
"typeSingle": "Single choice",
"statVoters": "Total voters",
"statQuestions": "Questions",
"statVotes": "Total votes",
"questionsTitle": "Questions ({count})",
"addQuestion": "Add question",
"noQuestions": "No questions yet. Add your first question above.",
"resultsTitle": "Results",
"formEditTitle": "Edit poll",
"formDetailsTitle": "Poll details",
"formTitle": "Title",
"formDescription": "Description",
"formStartsAt": "Starts at",
"formEndsAt": "Ends at",
"formSelectStart": "Select start date",
"formSelectEnd": "Select end date",
"formShowResults": "Show results to voters",
"formAllowMultiple": "Allow multiple answers",
"formSaving": "Saving…",
"formUpdate": "Update poll",
"formCreate": "Create poll",
"toastUpdated": "Poll updated!",
"toastCreated": "Poll created!"
},
"multiAccounts": {
"minAccounts": "Min accounts per cluster",
"resultLimit": "Result limit",
"refresh": "Refresh",
"noClusters": "No clusters found at the current thresholds."
},
"devops": {
"noEmulatorErrors": "No emulator errors found",
"noRecentErrors": "No recent errors"
},
"helpTickets": {
"title": "Help center tickets",
"subtitle": "Player tickets from /help/tickets",
"noTickets": "No open help center tickets",
"searchPlaceholder": "Search title, user or ID…",
"presetOpen": "Open",
"presetAll": "All",
"statusOpen": "Open",
"statusClosed": "Closed",
"colTicket": "Ticket",
"colStatus": "Status",
"colUser": "User",
"colCreated": "Created",
"colUpdated": "Updated",
"meta": "by {user} · {count} replies",
"backToList": "Back to list",
"threadTitle": "Conversation",
"staffBadge": "Staff",
"replyPlaceholder": "Reply as staff…",
"replySubmit": "Send reply",
"replyHint": "Ctrl+Enter to send.",
"closeSubmit": "Close ticket",
"reopenSubmit": "Reopen ticket",
"closedHint": "This ticket is closed.",
"actionsTitle": "Actions",
"requesterTitle": "Requester",
"detailsTitle": "Details",
"rankLabel": "Rank {rank}",
"messageCountLabel": "Messages",
"success": {
"replied": "Reply sent.",
"closed": "Ticket closed.",
"reopened": "Ticket reopened.",
"banLifted": "Ban lifted and ticket closed."
},
"queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.",
"queueOtherCta": "Open CMS support desk",
"queueCounts": "Open here: {here} · Support desk: {other}",
"liftBanSubmit": "Lift requester ban & close",
"requesterBanned": "Requester banned"
},
"marketplace": {
"title": "Marketplace",
"subtitle": "Hotel marketplace listings",
"activeListings": "Active listings",
"soldListings": "Sold",
"filterActive": "Active",
"filterSold": "Sold",
"empty": "No marketplace listings to show.",
"loadError": "Could not load marketplace data (database unavailable).",
"cancel": "Cancel listing",
"colId": "ID",
"colItem": "Item ID",
"colSeller": "Seller",
"colPrice": "Price",
"colListed": "Listed",
"colSold": "Sold at",
"colActions": "Actions"
},
"analytics": {
"loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.",
"totalUsers": "Total users",
"onlineNow": "{count} online now",
"weekRegistrations": "Week registrations",
"thisMonth": "{count} this month",
"activeRooms": "Active rooms",
"totalRooms": "{count} total rooms",
"weeklyActivity": "Weekly activity",
"tradesAndBans": "{trades} trades, {bans} bans",
"registrationsChartTitle": "Registrations (30 days)",
"registrationsChartDescription": "New user registrations over the last 30 days",
"chatActivity": "Chat activity",
"messagesLast7Days": "Messages in the last 7 days",
"trades": "Trades",
"tradesLast7Days": "Trades in the last 7 days",
"retention": "Retention",
"usersOnlineOverTotal": "Users online / total",
"activity": {
"chatMessages": "Chat messages",
"commands": "Commands",
"bans": "Bans",
"registrations": "Registrations",
"last7Days": "Last 7 days",
"dailyBreakdownTitle": "Daily breakdown (7 days)",
"colDay": "Day",
"colChats": "Chats",
"colCmds": "Cmds",
"colBans": "Bans",
"colRegs": "Regs",
"mostActiveUsersTitle": "Most active users (7 days)",
"noChatActivity": "No chat activity",
"msgCount": "{count} msgs",
"userFallback": "User #{id}"
},
"economy": {
"creditsInCirculation": "Credits in circulation",
"creditsDescription": "Total credits across all users",
"pixelsInCirculation": "Pixels in circulation",
"pixelsDescription": "Total pixels across all users",
"pointsInCirculation": "Points in circulation",
"pointsDescription": "Total points across all users",
"weeklyTrades": "Weekly trades",
"marketplaceListings": "{count} marketplace listings",
"shopRevenueTitle": "Shop revenue (7d)",
"purchases": "Purchases",
"creditsSpent": "Credits spent",
"pointsSpent": "Points spent",
"marketplaceTitle": "Marketplace",
"activeListings": "Active listings",
"sold7d": "Sold (7d)",
"currencyDistributionTitle": "Currency distribution",
"credits": "Credits",
"pixels": "Pixels",
"points": "Points",
"catalogSpendingTitle": "Catalog spending",
"creditsTooltip": "{count} credits",
"pointsTooltip": "{count} points"
},
"peakHours": {
"title": "Peak hours",
"description": "User activity by day & hour (last 7 days)",
"days": {
"mon": "Mon",
"tue": "Tue",
"wed": "Wed",
"thu": "Thu",
"fri": "Fri",
"sat": "Sat",
"sun": "Sun"
},
"tooltip": "{day} {hour}:00 — {count} users",
"less": "Less",
"more": "More"
}
},
"guilds": {
"title": "Guilds",
"subtitle": "Hotel groups and membership",
"totalGuilds": "Guilds",
"searchPlaceholder": "Search by name, description or ID…",
"search": "Search",
"empty": "No guilds found.",
"loadError": "Could not load guilds (database unavailable).",
"colId": "ID",
"colBadge": "Badge",
"colName": "Name",
"colOwner": "Owner",
"colMembers": "Members",
"colCreated": "Created",
"colThreads": "Forum threads",
"colRoom": "Room",
"colUser": "User",
"colLevel": "Level",
"colJoined": "Joined",
"members": "Members",
"noMembers": "No members.",
"back": "Back to guilds",
"viewPublic": "Open public page",
"disband": "Disband guild",
"listHeading": "Guilds ({count})"
},
"items": {
"title": "Items base",
"subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)",
"total": "{count, plural, one {# item} other {# items}}",
"editTitle": "Edit {name}",
"editSubtitle": "items_base #{id}",
"back": "Back to list",
"save": "Save",
"saved": "Item saved",
"untitled": "Untitled item",
"sectionIdentity": "Identity",
"sectionDims": "Dimensions & interaction",
"sectionFlags": "Allow flags",
"sectionExtra": "Extra",
"publicName": "Public name",
"itemName": "Classname",
"type": "Type",
"spriteId": "Sprite ID",
"width": "Width",
"length": "Length",
"stackHeight": "Stack height",
"interactionType": "Interaction",
"interactionModes": "Modes",
"vendingIds": "Vending IDs",
"multiheight": "Multiheight",
"customparams": "Custom params"
},
"online": {
"title": "Online users",
"subtitle": "Players currently connected",
"connected": "{count, plural, one {# player connected} other {# players connected}}"
},
"ticketInbox": {
"hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.",
"noTickets": "No open tickets in either queue",
"searchPlaceholder": "Search subject, title, user or ID…",
"statCmsOpen": "CMS open",
"statHelpOpen": "Help open",
"statTotal": "Open total",
"colTicket": "Ticket",
"colStatus": "Status",
"colType": "Queue",
"colUpdated": "Updated",
"meta": "by {user}",
"typeAll": "All queues",
"typeCms": "CMS desk",
"typeHelp": "Help center",
"statusOpen": "Open",
"statusClosed": "Closed",
"statusAll": "All statuses",
"presetOpen": "Open only",
"modNavLabel": "Queues:",
"modNavInbox": "Inbox",
"modNavDesk": "CMS desk",
"modNavHelp": "Help center"
},
"menu": {
"title": "Admin menu",
"subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.",
"save": "Save menu",
"saving": "Saving…",
"saved": "Admin menu saved.",
"saveFailed": "Could not save admin menu.",
"reset": "Reset to default",
"viewOnly": "You can view the menu layout but need settings edit permission to change it.",
"hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.",
"moveUp": "Move up",
"moveDown": "Move down",
"hideGroup": "Hide group",
"showGroup": "Show group",
"hideItem": "Hide item",
"showItem": "Show item",
"pinned": "Pinned"
},
"cmsErrors": {
"firstSeen": "First occurrence in retained records",
"lastSeen": "Latest occurrence",
"affectedUsers": "Distinct identified users",
"unidentifiedEvents": "Events without a verified user ID",
"metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.",
"assignedStaff": "Assigned to staff #{id}",
"unassigned": "Unassigned",
"assignSelf": "Assign to me",
"clearAssignment": "Clear assignment",
"openOperation": "Open related area",
"releaseOccurrences": "Occurrences by release",
"releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.",
"releaseFilter": "Version",
"allReleases": "All versions",
"period": "Period",
"allRetained": "All retained events",
"last24h": "Last 24 hours",
"last7d": "Last 7 days",
"sort": "Order",
"recentFirst": "Most recent first",
"frequentFirst": "Most frequent first",
"filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions."
},
"installation": {
"title": "Installation diagnostics",
"hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.",
"checked": "Checked at {time} · probes completed in {ms} ms",
"recheck": "Check again",
"ok": "Check passed",
"failed": "Needs attention",
"unknown": "Not verified",
"missing": "Not configured",
"release": "Running release",
"database": "Database",
"redis": "Redis",
"emulator": "Emulator",
"storage": "Writable storage",
"migrations": "Database migrations",
"worker": "Background worker",
"renderer": "Renderer configuration",
"registry": "Container registry",
"releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.",
"databaseHint": "Connection check and measured SELECT 1 response time.",
"redisHint": "Optional for some pages; required for queued import work.",
"emulatorHint": "Response to the configured emulator ping.",
"storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.",
"migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.",
"workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.",
"rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.",
"registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea."
},
"importHistory": {
"cancelled": "Cancelled",
"cancelFailed": "Could not request cancellation. Retry or refresh the job history.",
"cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.",
"cancelHint": "Cancellation preserves completed items and allows the current item to finish.",
"cancelRemaining": "Cancel remaining items",
"historyLimit": "Showing up to 30 most recently updated jobs.",
"refreshHistory": "Refresh history",
"showMoreItems": "Show 50 more items",
"uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.",
"reviewLocalData": "Review local data",
"ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.",
"previousPage": "Previous",
"nextPage": "Next",
"page": "Page {page}"
},
"operations": {
"title": "Needs attention",
"hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.",
"empty": "No pending items found in the checked records.",
"errors": "Unresolved CMS error groups",
"imports": "Your imports needing review",
"tickets": "Open support tickets",
"publications": "News drafts",
"unavailable": "{source}: data is temporarily unavailable.",
"installation": "Installation diagnostics"
},
"catalogPackages": {
"backend": {
"sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.",
"saveConflict": "Package changed. Reload it before saving",
"publishConflict": "Package changed. Refresh the publication preview",
"catalogChanged": "Catalog changed. Refresh the publication preview",
"missing": "Catalog package not found",
"pageLimit": "A package supports at most 200 categories including descendants",
"offerLimit": "A package supports at most 500 offers",
"payloadLimit": "Package data exceeds 8 MB safety limit",
"membership": "Package membership cannot change",
"hierarchy": "Package hierarchy cannot change",
"references": "Package furniture references cannot change",
"furnitureMissing": "Package furniture reference no longer exists",
"auditWarning": "Package published, but audit logging failed.",
"hotelWarning": "Package published, but the hotel update was not delivered.",
"exportWarning": "Package published, but export scheduling failed.",
"refreshWarning": "Package published. Refresh the page to see the latest catalog."
}
},
"catalogPackagePreview": {
"title": "Catalog preview",
"hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.",
"search": "Search categories or offers",
"playerMode": "Player access",
"rank": "Rank",
"club": "Club",
"vip": "VIP",
"externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.",
"invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.",
"snapshotLimit": "Preview limited to 200 pages and 500 offers.",
"restricted": "{count} pages are hidden by the selected player access settings.",
"categories": "Catalog categories",
"noPages": "This snapshot contains no categories.",
"inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.",
"noMatches": "No matches for this search.",
"offerCount": "{count} offers",
"layout": "Layout: {layout}",
"missingLayout": "Not specified",
"unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.",
"loadingIcons": "Loading furniture icons…",
"assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.",
"assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.",
"emptyPage": "This category has no direct offers. Browse its subcategories.",
"missingIcon": "Icon unavailable",
"amount": "Quantity: {count}",
"bundle": "{count} furniture types",
"changed": "Changed from the saved baseline",
"previous": "Previous",
"next": "Next",
"page": "Page {page} of {total}",
"offerId": "Offer #{id}",
"unknownFurniture": "Furniture name unavailable",
"selectOffer": "Select an offer to inspect its price and furniture references.",
"credits": "Credits",
"duckets": "Duckets",
"diamonds": "Diamonds",
"pointsType": "Points (type {type}):",
"free": "Free",
"specialPricing": "Special pricing: {credits} credits, {points} points (type {type})",
"restrictedOffers": "{count} offers in this category require Club membership.",
"clubOffer": "Club offer"
},
"search": {
"furniture": "Furniture",
"catalog": "Catalog categories",
"tickets": "Support tickets",
"loading": "Searching…",
"hint": "Enter a numeric ID or at least 2 characters, or choose a page.",
"retry": "Retry",
"description": "Search pages, users, furniture, catalog categories, articles and support tickets.",
"partialError": "Some results could not be loaded. Try again."
},
"permissionPreview": {
"title": "Role access preview",
"description": "Inspect CMS access without changing a session or impersonating a user.",
"back": "Back to permissions",
"role": "Role",
"show": "Show access",
"missing": "Select an existing role.",
"entryAllowed": "Housekeeping entry allowed",
"entryDenied": "Housekeeping entry denied: dashboard permission missing",
"superAdmin": "This rank currently receives the highest-rank override.",
"scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.",
"sections": "Sections",
"allowed": "Allowed",
"denied": "Denied",
"actions": "CMS permissions",
"actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.",
"granted": "Granted",
"notGranted": "Not granted"
},
"operationsCenter": {
"title": "Operations center",
"hint": "Track your durable imports and repairs, and the shared catalog export queue.",
"syncTitle": "Source synchronization",
"syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.",
"openSync": "Open synchronization and export",
"openImports": "Open furniture imports"
},
"operationsExport": {
"title": "Catalog repository export",
"hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.",
"loadError": "Unable to load export status",
"queueError": "Unable to queue export",
"loading": "Loading…",
"disabled": "Export is disabled. Open synchronization to review its configuration.",
"active": "Waiting for {count} operation(s) to finish.",
"running": "Export in progress…",
"pending": "{count} update(s) queued for export.",
"idle": "No pending updates.",
"lastCommit": "Last published commit:",
"lastAttempt": "Last attempt: {date}",
"queuing": "Queuing…",
"queue": "Export now / retry"
},
"performance": {
"title": "Request performance",
"scope": "Authenticated HK APIs: server time until the response is ready. This does not measure browser rendering or public pages.",
"refresh": "Refresh",
"shared": "Shared diagnostics via Redis.",
"local": "Local diagnostics for this instance only; cleared on restart.",
"retention": "Up to 200 recent requests, retained for one hour. Collection is best effort.",
"search": "Route or operation ID",
"sort": "Order",
"slowest": "Slowest first",
"recent": "Most recent first",
"threshold": "Duration filter",
"all": "All durations",
"slow": "At least 1 second",
"explanation": "Database time includes completed queries and pool waits. External time covers monitored curl downloads only. Concurrent calls can add up to more than the request duration; these values are not exclusive parts of the total.",
"empty": "No matching requests yet. Use the HK, then refresh this page.",
"database": "Database",
"external": "Monitored downloads",
"calls": "{count} calls",
"failures": "{count} failures",
"streaming": "Streaming response: timing stops at response creation, not at the end of the operation.",
"operation": "Operation ID"
}
},
"error": {
"code": "Error",
"title": "Something went wrong",
"subtitle": "The hotel hit an unexpected snag.",
"body": "Try again in a moment. If it keeps happening, contact staff with the reference below.",
"tryAgain": "Try again",
"backHome": "Back home",
"reference": "Reference: {digest}"
},
"notFound": {
"code": "404",
"title": "Page not found",
"subtitle": "This room doesn’t exist — or the furniture was moved.",
"body": "Check the link, or head back to the lobby.",
"backHome": "Back home",
"latestNews": "Latest news"
},
"sessions": {
"title": "Login activity",
"subtitle": "Recent sign-ins and failed attempts on your account",
"recentTitle": "Recent sign-ins",
"recentEmpty": "No sign-ins recorded yet.",
"colWhen": "When",
"colIp": "IP",
"colDevice": "Device",
"failedTitle": "Failed attempts",
"failedSubtitle": "Wrong password on your username",
"unknownDevice": "Unknown device",
"signOutEverywhereTitle": "Sign out everywhere",
"signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.",
"signOutEverywhereButton": "Sign out all sessions",
"successSignedOutAll": "All sessions have been signed out."
},
"guildForumThread": {
"backToForum": "← Back to forum",
"unnamedGuild": "Unnamed guild",
"noSubject": "(no subject)",
"inGuildForum": "{guild} forum",
"pinned": "Pinned",
"locked": "Locked",
"postsTitle": "Posts",
"postsSubtitle": "{count, plural, one {# post} other {# posts}}",
"postsEmpty": "No posts in this thread.",
"userNumber": "User #{id}",
"replyTitle": "Reply",
"replySubtitle": "Add your message to this thread",
"replyPlaceholder": "Write your reply…",
"replySubmit": "Post reply",
"lockedHint": "This thread is locked — new replies are disabled.",
"loginToReply": "Sign in to reply.",
"loginLink": "Log in",
"success": {
"replied": "Reply posted."
},
"errors": {
"invalid": "Please enter a message.",
"notFound": "That thread was not found.",
"locked": "This thread is locked.",
"ratelimit": "You're posting too fast. Please wait a moment and try again.",
"error": "Something went wrong. Please try again."
}
},
"helpTicketDetail": {
"backToList": "← Your tickets",
"ticketId": "Ticket #{id}",
"statusOpen": "Open",
"statusClosed": "Closed",
"messagesTitle": "Conversation",
"messagesSubtitle": "{count, plural, one {# message} other {# messages}}",
"you": "You",
"userNumber": "User #{id}",
"replyTitle": "Reply",
"replySubtitle": "Send a follow-up to staff",
"replyPlaceholder": "Write your message…",
"replySubmit": "Send reply",
"closeTitle": "Close ticket",
"closeSubtitle": "Mark this request as resolved when you no longer need help",
"closeSubmit": "Close ticket",
"closedHint": "This ticket is closed. Open a new ticket if you need more help.",
"success": {
"replied": "Reply sent.",
"closed": "Ticket closed."
},
"errors": {
"invalid": "Please enter a message.",
"notFound": "That ticket was not found.",
"closedTicket": "This ticket is closed.",
"moderated": "That message was blocked by moderation.",
"ratelimit": "You're submitting too fast. Please wait a moment and try again.",
"error": "Something went wrong. Please try again."
}
},
"events": {
"title": "Events",
"subtitle": "Upcoming and recent hotel events you can join",
"empty": "No events yet.",
"back": "← Events",
"when": "When",
"status": "Status",
"statusPublished": "Open",
"statusCompleted": "Completed",
"registrations": "Registrations",
"registered": "{count} registered",
"spots": "{count} / {max} spots",
"registerTitle": "Register",
"registerSubtitle": "Save your spot for this event",
"register": "Register for event",
"registering": "Registering…",
"registerSuccess": "You are registered!",
"registerError": "Could not register for this event.",
"loginToRegister": "Log in to register for this event.",
"alreadyRegistered": "You are already registered.",
"eventEnded": "This event has ended.",
"eventFull": "This event is full.",
"cannotRegister": "Registration is not available.",
"prizesTitle": "Prizes",
"winnersTitle": "Winners",
"unknownUser": "User #{id}"
},
"polls": {
"title": "Polls",
"subtitle": "Share your opinion in community polls",
"empty": "No polls yet.",
"back": "← Polls",
"statusActive": "Open",
"statusClosed": "Closed",
"questionsCount": "{count} questions",
"ends": "Ends {date}",
"voteTitle": "Cast your vote",
"voteSubtitle": "Answer each question below",
"submitVote": "Submit vote",
"voting": "Submitting…",
"voteSuccess": "Thanks for voting!",
"voteError": "Could not submit your vote.",
"loginToVote": "Log in to vote in this poll.",
"alreadyVoted": "You have already voted.",
"pollClosed": "This poll is closed.",
"cannotVote": "Voting is not available.",
"textPlaceholder": "Your answer…",
"resultsTitle": "Results",
"voteCount": "{count} ({pct}%)",
"totalVotes": "{count} total votes",
"textResponses": "{count} free-text responses"
},
"mod": {
"title": "Moderation panel",
"badge": "Mod",
"overviewTitle": "Moderator overview",
"overviewSubtitle": "CFH, quick actions and bans without full admin access.",
"shortcutsTitle": "Shortcuts",
"nav": {
"overview": "Overview",
"cfh": "Call for Help",
"actions": "Quick actions",
"bans": "Bans",
"fullAdmin": "Full admin",
"backToSite": "Back to site",
"tickets": "Tickets",
"team": "Team",
"helpTickets": "Help-center tickets",
"users": "Users"
},
"stats": {
"openCfh": "Open CFH",
"bansToday": "Bans today",
"modsOnline": "Mods online",
"quickActions": "Quick actions",
"quickActionsHint": "Kick, mute, alert",
"openTickets": "Open tickets",
"team": "Mod team",
"teamHint": "Online staff & workload",
"openHelpTickets": "Open help tickets"
},
"usersTitle": "Players",
"usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.",
"usersEmpty": "No players found",
"usersSearchPlaceholder": "Search username, motto or ID…",
"usersRank": "rank",
"usersPublicProfile": "Public profile",
"usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.",
"usersJoined": "Joined",
"usersLastLogin": "Last login",
"usersLastOnline": "Last online"
},
"studio": {
"title": "Studio",
"sourceFurnidata": "{source} furnidata",
"searchPlaceholder": "Search furni, classnames, keywords… (/)",
"results": "{count} results",
"inDb": "in DB",
"inCatalog": "in catalog",
"missingNitro": "missing nitro",
"globalTranslation": "Translation (global)",
"catalogTree": "Catalog",
"source": "Furni source",
"officialSource": "(official)",
"type": "Type",
"allTypes": "All types",
"floorItems": "Floor items",
"wallItems": "Wall items",
"category": "Category",
"allCategories": "All categories",
"status": "Status",
"allStatuses": "All statuses",
"imported": "Imported",
"inCatalogStatus": "In catalog",
"missingNitroStatus": "Missing nitro",
"sort": "Sort",
"defaultOrder": "Default order",
"nameAZ": "Name A–Z",
"classnameAZ": "Classname A–Z",
"categorySort": "Category",
"importedFirst": "Imported first",
"notImportedFirst": "Not imported first",
"noNitro": "{count} no nitro",
"gridView": "Grid view",
"listView": "List view",
"selectAll": "Select all",
"selectedCount": "{count} selected",
"clear": "Clear",
"translate": "Translate",
"noLanguages": "No languages",
"allLanguages": "All languages",
"languagesCount": "{count} languages",
"languages": "Languages",
"all": "All",
"none": "None",
"languageLabel": "Language {lang}",
"translateAll": "Translate all",
"translateAllTitle": "Translate the whole catalog into all languages (afterwards)",
"importAuto": "Import {count} auto",
"maintenance": {
"title": "Catalog maintenance",
"description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.",
"refresh": "Refresh",
"currentHealth": "Current health",
"itemsInBase": "{count} items in items_base",
"loading": "Loading…",
"statSpriteId": "sprite_id ≠ id",
"hintSpriteId": "items_base sprite drift",
"statOfferId": "offer_id ≠ id",
"hintOfferId": "catalog offer drift",
"statDuplicateClassnames": "Duplicate classnames",
"hintDuplicateClassnames": "items_base item_name repeats",
"statDuplicateCatalogRows": "Duplicate catalog rows",
"hintDuplicateCatalogRows": "same product listed twice on a page",
"statIdMismatch": "ID ≠ FurnitureData",
"hintIdMismatch": "items_base id differs from furnidata",
"statDuplicateBcCatalogRows": "Duplicate BC catalog rows",
"hintDuplicateBcCatalogRows": "same product listed twice in builder club",
"statDuplicateCatalogPages": "Duplicate catalog pages",
"hintDuplicateCatalogPages": "same caption under the same parent (double links)",
"optionSpriteId": "Fix sprite_id",
"optionOfferId": "Fix catalog offer_id",
"optionRemoveDuplicates": "Remove duplicates (items + catalog)",
"optionReconcile": "Reconcile FurnitureData ↔ DB",
"optionAlignIds": "Align items_base IDs to FurnitureData",
"alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.",
"previewChanges": "Preview changes",
"plannedIdMoves": "Planned ID moves: {moves}",
"newItemsInsert": "New items to insert: {inserted}",
"skipped": "Skipped (id occupied): {list}",
"applyAlignment": "Apply alignment",
"fixEverythingTitle": "Fix everything",
"fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.",
"alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)",
"runSelected": "Run selected",
"selectAtLeastOne": "Select at least one repair to run",
"previewReady": "Preview ready",
"previewFailed": "Preview failed",
"toast": {
"spriteFixed": "sprite_id fixed",
"offerFixed": "catalog offer_id fixed",
"duplicatesRemoved": "Duplicates removed (items + catalog)",
"reconciled": "FurnitureData reconciled",
"aligned": "items_base IDs aligned to FurnitureData",
"allApplied": "All selected repairs applied",
"failed": "Failed"
}
}
},
"myDashboard": {
"messagesCaughtUp": "No unread messages",
"messagesUnavailable": "Open your inbox to check",
"eventTitle": "On the calendar",
"allEvents": "All events",
"eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.",
"eventOngoing": "Happening now",
"eventUpcoming": "Coming up",
"eventDetails": "View event",
"noUpcomingEvents": "No upcoming events have been announced yet.",
"roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again."
}
},
"emails": {
"verify": {
"subject": "Verify your email · {hotel}",
"heading": "Verify your email",
"body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.",
"button": "Verify email",
"fallback": "If the button doesn't work, paste this link into your browser:"
}
},
"toolbar": {
"home": "Главная",
"reload": "Перезагрузить",
"fullscreen": "Полный экран",
"logout": "Выйти",
"onlineUsers": "Пользователи онлайн",
"emulatorOnline": "Эмулятор онлайн",
"emulatorOffline": "Эмулятор офлайн",
"dragToMove": "Перетащите, чтобы переместить",
"hide": "Скрыть панель",
"fullscreenExit": "Выйти из полноэкранного режима",
"show": "Показать панель",
"emulatorUnknown": "Состояние эмулятора неизвестно"
},
"admin": {
"studio": {
"importDiagnostics": {
"attempts": "Диагностика файлов",
"preliminary": "Предварительная проверка адресов; содержимое проверяется при импорте.",
"http": "HTTP {status}",
"network": "Не удалось подключиться",
"timeout": "Источник не ответил вовремя",
"invalidResponse": "Источник вернул веб-страницу вместо файла",
"available": "Файл найден; ожидает проверки",
"recover": "Прикрепить оригинал и продолжить",
"recoveryHint": "Выберите {file} (до 50 MB). Подлинность соответствия проверяется. Повторяются неудачные элементы; завершённые импорты сохраняются.",
"attach": "Выберите исходный файл .nitro",
"working": "Проверка или возобновление...",
"attached": "Соответствующий оригинал прикреплён",
"resume": "Повторить неудачные импорты с этим файлом",
"invalidFile": "Выберите соответствующий исходный .nitro до 50 MB и повторите попытку.",
"resumeError": "Обновите историю и используйте последнюю попытку; проверьте файл и попробуйте снова.",
"mismatchedFile": "Этот файл относится к другой мебели.",
"alreadyStarted": "Восстановление уже началось. Обновите историю и используйте последнюю попытку.",
"notEligible": "Этот элемент нельзя восстановить вложением."
},
"completeness": {
"title": "Completeness and next steps",
"parts": {
"sql": "SQL item",
"catalog": "Catalog offer",
"furnidata": "Furnidata",
"icon": "Local icon",
"nitro": "Nitro file"
},
"statuses": {
"present": "Present",
"missing": "Missing",
"unknown": "Not verified",
"conflict": "Needs review"
},
"actions": {
"sql": "Import or repair this furni to create the missing item record.",
"catalog": "Import or repair this furni to add an offer using the automatic category and price.",
"furnidata": "Import or repair this furni to add the missing furniture data.",
"icon": "Import or repair this furni to retrieve the missing local icon.",
"nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.",
"recheck": "Recheck local state before repair. If this persists, check the local file access.",
"audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair."
},
"openAudit": "Open Catalog audit to resolve conflicts",
"excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}"
}
}
}
}