From 27a7b8404bd042b291ecd2deb1383c983971234e Mon Sep 17 00:00:00 2001 From: openhands Date: Sat, 18 Jul 2026 13:42:57 +0200 Subject: [PATCH] Fix: Add missing game translations to en.json for HK visibility Games plugin nav labels, hub titles, and page translations now properly included in the main message file so the admin sidebar and hub tabs render correctly in the housekeeping panel. --- src/messages/en.json | 4769 +++++++++++++++++++++--------------------- 1 file changed, 2393 insertions(+), 2376 deletions(-) diff --git a/src/messages/en.json b/src/messages/en.json index 6f07d477..9dae2c21 100644 --- a/src/messages/en.json +++ b/src/messages/en.json @@ -1,2378 +1,2395 @@ { - "nav": { - "home": "Home", - "community": "Community", - "articles": "Articles", - "photos": "Photos", - "staff": "Staff", - "rankings": "Rankings", - "guilds": "Guilds", - "leaderboards": "Leaderboards", - "rareValues": "Rare values", - "shop": "Shop", - "market": "Market", - "assistance": "Assistance", - "helpCenter": "Help center", - "myTickets": "My tickets", - "badges": "Badges", - "radio": "Radio", - "friends": "Friends", - "messages": "Messages", - "admin": "Admin", - "openMenu": "Open menu", - "closeMenu": "Close menu", - "drawBadge": "Draw badge" - }, - "header": { - "online": "{count} {hotel} online", - "nitroClient": "Nitro client", - "tagline": "An online virtual world where you can create your own avatar, make friends, chat, create rooms and much more!", - "login": "Login", - "or": "Or", - "createAccount": "Create an account" - }, - "footer": { - "copyright": "© {year} - {hotel} is a not for profit educational project" - }, - "common": { - "language": "Language", - "lightMode": "Light mode", - "darkMode": "Dark mode" - }, - "pages": { - "staff": { - "title": "Staff", - "subtitle": "The team behind the hotel", - "ranksTitle": "Ranks", - "ranksSubtitle": "What each part of the team takes care of", - "membersTitle": "Team members", - "membersEmptySubtitle": "Nobody to show right now", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "No staff members to show.", - "colUsername": "Username", - "colRank": "Rank", - "colMotto": "Motto" - }, - "leaderboard": { - "title": "Leaderboard", - "subtitle": "Top 20 players by {currency}", - "tab_credits": "Credits", - "tab_diamonds": "Diamonds", - "tab_duckets": "Duckets", - "tab_achievement": "Achievements", - "tab_respects": "Respects", - "tab_onlinetime": "Online Time", - "emptyState": "No rankings to show yet.", - "colAvatar": "Avatar", - "colPlayer": "Player" - }, - "friends": { - "title": "Friends", - "emptySubtitle": "You have no friends added yet", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Add friends in the hotel and they will show up here.", - "noMotto": "No motto" - }, - "messages": { - "title": "Messages", - "subtitle": "Friend requests and offline messages waiting for you", - "requestsTitle": "Friend requests", - "requestsEmptySubtitle": "Nobody's asked to be your friend yet", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "No pending friend requests.", - "wantsToBeFriend": "wants to be your friend.", - "accept": "Accept", - "offlineTitle": "Offline messages", - "offlineEmptySubtitle": "Your inbox is empty", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "You have no offline messages.", - "unknownUser": "User #{id}" - }, - "profile": { - "noMotto": "No motto", - "statRank": "Rank", - "statCredits": "Credits", - "statRegistered": "Registered", - "badgesTitle": "Badges", - "badgesEmpty": "No badges yet.", - "photosTitle": "Photos", - "photosEmpty": "No photos yet.", - "guestbookTitle": "Guestbook", - "guestbookSubtitle": "Messages on {username}'s wall", - "leaveMessage": "Leave a message", - "guestbookPlaceholder": "Write something on {username}'s guestbook…", - "post": "Post", - "loginToPost": "Log in to leave a guestbook message.", - "guestbookEmpty": "No guestbook entries yet.", - "unknownUser": "User #{id}", - "statDuckets": "Duckets", - "statDiamonds": "Diamonds", - "walletTitle": "Wallet", - "friendsTitle": "Friends", - "friendsSubtitle": "People in the hotel they hang out with", - "friendsEmpty": "No friends to show.", - "roomsTitle": "Rooms", - "roomsSubtitle": "Rooms they own", - "roomsEmpty": "No rooms to show.", - "roomUntitled": "Untitled room" - }, - "rankings": { - "title": "Rankings", - "subtitle": "The top 12 players ranked by credits", - "emptyState": "No players to rank yet." - }, - "home": { - "welcome": "Welcome to {hotelName}", - "welcomeSubtitle": "Your retro hotel, now powered by Next.js", - "welcomeBody": "Hang out, collect furni, and meet friends.", - "enterHotel": "Enter {hotelName}", - "onlineFriends": "Online Friends", - "noFriendsOnline": "No friends online", - "register": "REGISTER NOW", - "joinNow": "Join {hotelName} today!", - "recentUsers": "Recent Users", - "recentPhotos": "Recent Photos", - "latestNews": "Latest news", - "newsTitle": "Latest news", - "newsSubtitle": "Fresh from the hotel", - "allNews": "All news →", - "noArticles": "No articles yet.", - "noPhotos": "No photos yet.", - "noUsers": "No users online", - "latestArticle": "Latest Article" - }, - "news": { - "title": "News", - "subtitle": "The latest announcements, events and updates from the hotel", - "noArticles": "No articles yet." - }, - "article": { - "backToNews": "← News", - "reactionsTitle": "Reactions", - "reactionsSubtitle": "Tell us what you think", - "reaction": { - "like": "Like", - "love": "Love", - "wow": "Wow" - }, - "removeReaction": "Click to remove your reaction", - "reactWith": "React with {reaction}", - "noReactions": "No reactions yet.", - "logIn": "Log in", - "toReact": "to react.", - "commentsTitle": "Comments", - "commentsSubtitle": "Join the conversation", - "commentsCount": "{count} so far", - "noComments": "No comments yet. Be the first to comment.", - "userNumber": "User #{id}", - "addComment": "Add a comment", - "commentPlaceholder": "Write your comment…", - "postComment": "Post comment", - "toComment": "to leave a comment." - }, - "photos": { - "title": "Photos", - "subtitle": "The latest snapshots taken in the hotel", - "noPhotos": "No photos yet.", - "photoAlt": "Photo by user #{id}", - "byUser": "by user #{id}" - }, - "badges": { - "title": "Badges", - "subtitle": "The badges you can earn and show off around the hotel", - "noBadges": "No badges available yet." - }, - "community": { - "title": "Community", - "subtitle": "Everything happening around the hotel in one place", - "open": "Open →", - "links": { - "rankings": { - "title": "Rankings", - "text": "See the wealthiest players in the hotel, ranked by credits." - }, - "staff": { - "title": "Staff", - "text": "Meet the team that keeps the hotel running every day." - }, - "news": { - "title": "News", - "text": "The latest announcements, events and updates." - }, - "photos": { - "title": "Photos", - "text": "Snapshots shared by the community from around the hotel." - }, - "guilds": { - "title": "Guilds", - "text": "Browse the groups players have created and joined." - }, - "leaderboards": { - "title": "Leaderboards", - "text": "Who's on top this season across the hotel's stats." - } - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Browse the groups players have created and joined", - "empty": "No guilds yet.", - "unnamedGuild": "Unnamed guild", - "noDescription": "No description" - }, - "guild": { - "allGuilds": "← All guilds", - "unnamedGuild": "Unnamed guild", - "noDescription": "No description", - "memberSingular": "Member", - "memberPlural": "Members", - "founded": "Founded", - "forumLink": "Forum →", - "discussion": "Discussion", - "membersTitle": "Members", - "memberLowerSingular": "member", - "memberLowerPlural": "members", - "noMembers": "No members.", - "owner": "Owner", - "noMotto": "No motto" - }, - "guildForum": { - "backToGuild": "← Back to guild", - "unnamedGuild": "Unnamed guild", - "forumTitle": "{guild} — Forum", - "threadSingular": "thread", - "threadPlural": "threads", - "newThread": "+ New thread", - "empty": "No threads in this forum yet.", - "colSubject": "Subject", - "colAuthor": "Author", - "colPosts": "Posts", - "colDate": "Date", - "noSubject": "(no subject)", - "pinned": "Pinned", - "locked": "Locked", - "userNumber": "User #{id}", - "unknown": "Unknown" - }, - "guildForumNew": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "title": "New thread", - "subtitle": "in {guild} forum", - "subjectLabel": "Subject", - "subjectPlaceholder": "Thread subject", - "messageLabel": "Message", - "messagePlaceholder": "Write your opening post…", - "postThread": "Post thread", - "cancel": "Cancel" - }, - "shop": { - "title": "Shop", - "subtitle": "Top up your account and grab exclusive packages, currency and badges.", - "browsingCategory": "Browsing the {category} packages.", - "all": "All", - "allPackages": "All packages", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "No packages available right now.", - "buy": "Buy" - }, - "topup": { - "title": "Top up with PayPal", - "subtitle": "Pay securely with PayPal and your credits are added the moment the payment clears.", - "cancelled": "Checkout was cancelled — no payment was taken.", - "chooseAmount": "Choose an amount", - "notConfiguredPre": "PayPal isn't configured yet. An administrator needs to set", - "notConfiguredAnd": "and", - "notConfiguredOptional": "(and optionally", - "notConfiguredPost": "for sandbox vs. live).", - "balanceTitle": "Your balance", - "signedInAs": "Signed in as {username}", - "credits": "Credits", - "creditsPerUnit": "Credits per 1.00 {currency}", - "rateLine": "You receive {amount} credits per 1.00 {currency}. Credits appear in-game the next time you log in." - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Browse furniture and rares listed by players. Listings are placed in-game and update live — head into the hotel to make an offer.", - "activeOffers": "Active offers", - "sellers": "Sellers", - "totalValue": "Total value", - "activeListings": "Active listings", - "mostRecentFirst": "Most recently listed first", - "empty": "There are no active marketplace offers right now. Check back later.", - "colOffer": "Offer", - "colItem": "Item", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "itemLabel": "Item #{id}", - "userLabel": "User #{id}", - "justNow": "just now", - "minutesAgo": "{count}m ago", - "hoursAgo": "{count}h ago", - "daysAgo": "{count}d ago" - }, - "rares": { - "title": "Rare values", - "subtitle": "Get an overview of all of the rares on the hotel, grouped by category.", - "empty": "We currently have no rares listed here.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "View rares →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← All rares", - "empty": "No rares listed in this category yet.", - "colRare": "Rare", - "colCredits": "Credits", - "colCurrency": "Currency", - "creditsValue": "{value} credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "credits": "Credits" - }, - "redeem": { - "title": "Redeem a voucher", - "subtitle": "Got a voucher code? Enter it below to add the reward to your account.", - "enterCode": "Enter your code", - "oncePerAccount": "Each voucher can only be redeemed once per account.", - "balanceTitle": "Your balance", - "signedInAs": "Signed in as {username}", - "credits": "Credits", - "instantCredit": "Redeemed rewards are credited instantly and appear in-game the next time you log in." - }, - "help": { - "title": "Help Center", - "subtitle": "Find guides, support topics, and the hotel rules — everything you need to get help.", - "myTickets": "My tickets →", - "topicsTitle": "Support topics", - "topicsSubtitle": "Browse guides and answers to common questions", - "topicsEmpty": "No help topics yet.", - "rulesTitle": "Hotel rules", - "rulesSubtitle": "Please read these before hanging out in the hotel", - "rulesEmpty": "No rules published yet.", - "categoryEmpty": "No rules in this category." - }, - "helpCategory": { - "back": "← Help Center", - "topicSubtitle": "Help Center topic", - "moreTitle": "More help topics", - "moreSubtitle": "Jump to another support topic" - }, - "helpTickets": { - "title": "Help Tickets", - "subtitle": "Submit a ticket to staff and track your open requests.", - "statTotal": "Total tickets", - "statOpen": "Open", - "statClosed": "Closed", - "newTitle": "New ticket", - "newSubtitle": "Describe your issue and staff will follow up", - "subjectPlaceholder": "Subject", - "contentPlaceholder": "Describe your issue…", - "submit": "Submit ticket", - "listTitle": "Your tickets", - "listSubtitle": "Every request you have sent to staff", - "listEmpty": "You have no tickets yet.", - "colId": "ID", - "colSubject": "Subject", - "colStatus": "Status", - "colCreated": "Created", - "statusOpen": "Open", - "statusClosed": "Closed" - }, - "applyStaff": { - "title": "Apply for {hotel} staff", - "subtitle": "We open staff applications every now and then. If you come across a position you feel you would fit perfectly into, do not hesitate to apply for it.", - "noPositionsTitle": "No positions open", - "noPositionsBody": "There are currently no positions open. Please come back at a later time to check if we have any openings by then. Thank you for your interest.", - "noDeadline": "No deadline set", - "deadline": "Application deadline: {date}", - "alreadyApplied": "You have already applied for {rank}", - "aboutYou": "About you", - "aboutPlaceholder": "Tell us why you'd be a great {rank}…", - "applyFor": "Apply for {rank}" - }, - "applyTeam": { - "title": "Apply for the {hotel} team", - "subtitle": "We open team applications periodically. If you see a team you fit, do not hesitate to apply!", - "noPositionsTitle": "No team positions open", - "noPositionsBody": "There are currently no open team positions. Please come back later to check for new openings. Thank you!", - "pending": "Your application is pending", - "aboutYou": "About you", - "aboutPlaceholder": "Tell us why you'd be a great fit for {rank}…", - "applyFor": "Apply for {rank}" - }, - "radio": { - "title": "Radio", - "subtitle": "Tune in to the hotel radio — live DJ sets, requests and shoutouts.", - "nowPlaying": "Now playing", - "nothingPlaying": "Nothing playing right now.", - "onAir": "On air: {dj}", - "noDj": "No DJ on air.", - "audioUnsupported": "Your browser does not support the audio element.", - "streamOffline": "The stream is currently offline.", - "exploreTitle": "Explore the radio", - "exploreSubtitle": "Schedule, shouts, requests and more", - "linkSchedule": "Schedule", - "linkScheduleText": "Our weekly line-up of DJs and shows.", - "linkShouts": "Shouts", - "linkShoutsText": "Shout-outs and requests from the community.", - "linkRequests": "Requests", - "linkRequestsText": "Ask the DJ to spin your favourite track.", - "linkApply": "Apply as DJ", - "linkApplyText": "Join the team and take to the airwaves.", - "linkLeaderboard": "Leaderboard", - "linkLeaderboardText": "Top listeners ranked by points earned.", - "todayTitle": "Today's schedule", - "todayTitleWithDay": "Today's schedule · {day}", - "todaySubtitle": "What's on the airwaves today", - "fullWeek": "Full week →", - "noShowsToday": "No shows scheduled for today.", - "colTime": "Time", - "colShow": "Show", - "colDj": "DJ", - "untitledShow": "Untitled show", - "userNumber": "User #{id}" - }, - "radioSchedule": { - "title": "Radio Schedule", - "subtitle": "Our weekly line-up of DJs and shows", - "empty": "No shows scheduled yet.", - "colDay": "Day", - "colTime": "Time", - "colDj": "DJ", - "colShow": "Show", - "noShows": "No shows" - }, - "radioShouts": { - "title": "Radio Shouts", - "subtitle": "Shout-outs and requests from the community", - "postTitle": "Post a shout", - "postSubtitle": "Send a message to the DJ on air", - "messageLabel": "Your message", - "messagePlaceholder": "Send a shout to the DJ…", - "shoutButton": "Shout", - "loginToPost": "Log in to post a shout.", - "latestTitle": "Latest shouts", - "latestSubtitle": "The most recent messages from listeners", - "empty": "No shouts yet. Be the first!" - }, - "radioContests": { - "title": "Radio Contests", - "subtitle": "Tune in and take part in our latest on-air contests", - "empty": "No contests yet.", - "contestLabel": "Contest #{id}", - "dateUnknown": "Date unknown" - }, - "radioGiveaways": { - "title": "Radio Giveaways", - "subtitle": "Listen in for your chance to win in our radio giveaways", - "empty": "No giveaways yet.", - "giveawayLabel": "Giveaway #{id}", - "dateUnknown": "Date unknown" - }, - "radioLeaderboard": { - "title": "Radio Listener Leaderboard", - "subtitle": "Top 50 listeners by points earned tuning in to the radio", - "empty": "No listener points to show yet.", - "colRank": "Rank", - "colAvatar": "Avatar", - "colListener": "Listener", - "colPoints": "Points" - }, - "radioRequests": { - "formTitle": "Submit a request", - "formSubtitle": "Ask the DJ to play your favourite track", - "songLabel": "Song", - "songPlaceholder": "Title of the song", - "artistLabel": "Artist", - "artistPlaceholder": "Name of the artist (optional)", - "submitButton": "Submit request", - "loginToRequest": "Log in to submit a request.", - "latestTitle": "Recent requests", - "latestSubtitle": "The most recently requested songs", - "empty": "No requests yet.", - "colSong": "Song", - "colArtist": "Artist", - "colRequester": "Requester", - "colDate": "Date", - "colStatus": "Status", - "statusPending": "Pending", - "statusApproved": "Approved", - "statusPlayed": "Played" - }, - "client": { - "title": "Nitro client", - "loading": "Loading client…", - "generatingTicket": "Generating SSO ticket…", - "connected": "Connected", - "welcome": "Welcome to {hotel}", - "openingClient": "Opening the client in a new tab…", - "fallbackLink": "If it doesn't open,", - "fallbackClick": "click here", - "errors": { - "unauthorized": "You need to be logged in to open the client.", - "generic": "Could not generate SSO ticket", - "loginRedirect": "Log in" - } - }, - "radioApply": { - "title": "Apply to be a Radio DJ", - "subtitle": "Tell us about yourself and why you'd be a great fit for the airwaves", - "latestTitle": "Your latest application", - "statusLabel": "Status:", - "submittedOn": "· submitted {date}", - "submitAgain": "You can submit again below if your details have changed.", - "formTitle": "Application form", - "formSubtitle": "All fields marked required must be filled in", - "realNameLabel": "Real name", - "realNamePlaceholder": "Your full name", - "ageLabel": "Age", - "availabilityLabel": "Availability", - "availabilityPlaceholder": "Which days and times can you broadcast?", - "musicStyleLabel": "Music style", - "musicStylePlaceholder": "e.g. House, Pop, Hip-Hop", - "experienceLabel": "Experience", - "optional": "(optional)", - "experiencePlaceholder": "Any prior DJ or hosting experience?", - "motivationLabel": "Motivation", - "motivationPlaceholder": "Why do you want to join the radio team?", - "submitButton": "Submit application" - }, - "settings": { - "accountSettings": "Account settings", - "accountSettingsSubtitle": "Manage your profile, security and connected accounts", - "publicProfile": "Your public profile", - "noMotto": "No motto", - "noEmail": "No e-mail on file", - "changeMotto": "Change motto", - "changeMottoSubtitle": "Updates instantly in-game if you are online", - "mottoPlaceholder": "Your motto", - "saveMotto": "Save motto", - "securityTitle": "Security", - "securitySubtitle": "Two-factor authentication", - "securityDescription": "Add a second layer of protection to your account.", - "twoFactorLink": "Two-factor authentication", - "connectionsTitle": "Connected accounts", - "connectionsSubtitle": "Sign in with one click", - "connectionsDescription": "Link Discord or Google to your hotel account.", - "manageConnections": "Manage connections" - }, - "settings2fa": { - "backToSettings": "← Settings", - "title": "Two-factor authentication", - "subtitle": "Add a second layer of security with an authenticator app", - "nowEnabled": "2FA is now enabled. 🔒", - "disabledNotice": "2FA has been disabled.", - "badCode": "That code wasn't valid — try again.", - "noAppKeyPrefix": "2FA is unavailable until", - "noAppKeyMiddle": "is configured (the same Laravel", - "noAppKeySuffix": "as your AtomCMS install, so existing secrets stay readable).", - "isEnabled": "2FA is enabled", - "onYourAccount": "on your account.", - "disable": "Disable 2FA", - "scanOrEnter": "Scan or enter this key", - "scanInstructions": "Add this to Google Authenticator / Authy, then enter the 6-digit code to confirm.", - "manualKey": "Manual key:", - "codePlaceholder": "6-digit code", - "confirm": "Confirm", - "enableIntro": "Add a second layer of security with an authenticator app.", - "enable": "Enable 2FA" - }, - "connections": { - "backToSettings": "← Settings", - "title": "Connected accounts", - "subtitle": "Link a social account so you can sign in with one click", - "matchByEmail": "We match it to your hotel account by e-mail, so use the address on file:", - "lookupFailed": "We couldn't read your linked accounts right now. You can still connect below — your status will show once it's available.", - "statusUnavailable": "Not available on this hotel.", - "statusConnected": "Connected — sign in with this account.", - "statusNotConnected": "Not connected.", - "connected": "Connected", - "connectProvider": "Connect {provider}", - "unavailable": "Unavailable", - "footerNote": "Connecting takes you to the provider to authorise, then back here. If your social account's e-mail doesn't match a hotel account, you'll be returned to the login screen with a note." - }, - "login": { - "title": "Sign in", - "subtitle": "Welcome back — log in to enter the hotel.", - "subtitle2fa": "Enter the 6-digit code from your authenticator.", - "usernamePlaceholder": "Username", - "passwordPlaceholder": "Password", - "codePlaceholder": "2FA code", - "pleaseWait": "Please wait…", - "verify": "Verify", - "signIn": "Sign in", - "or": "or", - "continueWithDiscord": "Continue with Discord", - "continueWithGoogle": "Continue with Google", - "noAccount": "No account?", - "createOne": "Create one", - "forgotPassword": "Forgot password?", - "errorInvalidCredentials": "Invalid username or password", - "errorInvalid2fa": "Invalid 2FA code" - }, - "register": { - "title": "Create account", - "subtitle": "Join the hotel — it only takes a moment.", - "username": "Username", - "email": "Email", - "password": "Password", - "confirmPassword": "Repeat password", - "usernamePlaceholder": "Username", - "emailPlaceholder": "Email", - "passwordPlaceholder": "Password (min 6 chars)", - "confirmPasswordPlaceholder": "Repeat password", - "selectOutfit": "Select your outfit", - "termsAccept": "I am 18+ and accept the {hotel} terms & rules.", - "createAccount": "Create account", - "creatingAccount": "Creating account...", - "alreadyHaveAccount": "Already have an account? Login!", - "register": "Register", - "termsError": "You must accept the terms & rules to register.", - "usernameError": "Username is required.", - "emailError": "Valid email is required.", - "passwordError": "Password must be at least 6 characters.", - "confirmPasswordError": "Passwords do not match.", - "termsRequired": "You must accept the terms & rules.", - "usernameRequired": "Username is required.", - "emailRequired": "Email is required.", - "passwordRequired": "Password is required.", - "passwordsDontMatch": "Passwords do not match." - }, - "forgot": { - "title": "Reset password", - "subtitle": "We'll email you a secure link to set a new password.", - "sentNotice": "If that email is registered, a reset link has been sent. Check your inbox.", - "emailPlaceholder": "Your email", - "sendResetLink": "Send reset link", - "backToLogin": "Back to login" - }, - "reset": { - "title": "Set a new password", - "subtitle": "Choose a strong password you don't use elsewhere.", - "passwordPlaceholder": "New password (min 6 chars)", - "resetPassword": "Reset password", - "backToLogin": "Back to login" - }, - "verify": { - "verifiedTitle": "You're all set", - "verifiedSubtitle": "Email verified", - "verifiedBody": "Your email address has been verified. You can now log in and play.", - "goToLogin": "Go to login", - "alreadyTitle": "Already verified", - "alreadySubtitle": "Nothing left to do", - "alreadyBody": "This email address has already been confirmed.", - "unavailableTitle": "Try again shortly", - "unavailableSubtitle": "Server unreachable", - "unavailableBody": "We couldn't reach the server to verify your email. Please retry the link in a moment.", - "invalidTitle": "Email verification", - "invalidSubtitle": "Invalid or expired link", - "invalidBody": "This verification link is not valid. Make sure you opened the full link from your email, or request a new one.", - "backToLogin": "Back to login" - }, - "banned": { - "title": "You are banned", - "subtitle": "Account suspended", - "body": "Your account has been suspended from the hotel.", - "reasonLabel": "Reason:", - "permanent": "This ban is permanent.", - "expires": "Expires {date}.", - "contactStaff": "If you believe this is a mistake, contact the staff team." - }, - "maintenance": { - "title": "{hotel} is under maintenance", - "subtitle": "We'll be back shortly", - "staffCanLogIn": "Staff can still log in." - }, - "admin": { - "nav": { - "overview": "Overview", - "dashboard": "Dashboard", - "content": "Content", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "articles": "Articles", - "tags": "Tags", - "navigator": "Navigator", - "helpCenter": "Help center", - "advertisements": "Advertisements", - "writeableBoxes": "Writeable boxes", - "photos": "Photos", - "tickets": "Tickets", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Users & access", - "hubUsers": "Users", - "hubAccess": "Access & security", - "users": "Users", - "bans": "Bans", - "ipManagement": "IP management", - "vpn": "VPN", - "applications": "Applications", - "teams": "Teams", - "permissions": "Permissions", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Economy", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "catalog": "Catalog", - "shop": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "rareValues": "Rare values", - "badges": "Badges", - "achievements": "Achievements", - "calendar": "Calendar", - "radio": "Radio", - "radioHistory": "Radio history", - "radioBanners": "Banners", - "radioEmbed": "Embed", - "radioApiKeys": "API keys", - "radioModeration": "Moderation", - "radioSettings": "Settings", - "radioMonitoring": "Monitoring", - "radioPoints": "Points", - "radioRanks": "Ranks", - "radioAutodj": "Auto DJ", - "plugins": "Plugins", - "system": "System", - "hubTools": "Tools", - "hubObservability": "Observability", - "commandocentrum": "Commandocentrum", - "emulator": "Emulator", - "alerts": "Alerts", - "logs": "Logs", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Word filter", - "maintenance": "Maintenance", - "rooms": "Rooms", - "emailTemplates": "Email templates", - "theme": "Theme", - "media": "Media", - "favicon": "Favicon", - "sounds": "Sounds", - "translations": "Translations", - "import": "Import", - "settings": "Settings", - "backToSite": "Back to site", - "housekeeping": "Housekeeping", - "hotelManagementPanel": "Hotel management panel", - "rankLabel": "Rank {rank}" - }, - "dashboard": { - "title": "Dashboard", - "subtitle": "Hotel overview & live status", - "playersOnline": "Players online", - "articles": "Articles", - "activeBans": "Active bans", - "database": "Database", - "databaseConnected": "Connected", - "databaseDown": "Down", - "usersByRank": "Users by rank", - "noAccountsToBreakDown": "No accounts to break down yet", - "rankLabel": "Rank {rank}", - "rankWithCount": "Rank {rank}: {count} accounts", - "recentStaffActivity": "Recent staff activity", - "viewAll": "View all", - "noStaffActivityLogged": "No staff activity logged yet" - }, - "articles": { - "title": "Articles", - "subtitle": "News articles — 50 most recent", - "newArticle": "+ New article", - "edit": "Edit", - "delete": "Delete", - "noArticles": "No articles yet", - "confirmDelete": "Are you sure you want to delete \"{title}\"?", - "colTitle": "Title", - "colSlug": "Slug", - "colAuthor": "Author", - "colCreated": "Created", - "colActions": "Actions", - "form": { - "title": "Title", - "titlePlaceholder": "Article title", - "slug": "Slug", - "slugPlaceholder": "article-url-slug", - "category": "Category", - "categoryPlaceholder": "Select a category", - "body": "Body", - "bodyPlaceholder": "Write your article content…", - "image": "Image", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Thumbnail", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Published", - "featured": "Featured", - "save": "Save article", - "saving": "Saving…", - "deleteArticle": "Delete article", - "deleteConfirm": "This action cannot be undone. The article will be permanently removed.", - "cancel": "Cancel" - } - }, - "tags": { - "title": "Tags", - "subtitle": "Article tags / categories", - "addTag": "Add tag", - "name": "Name", - "namePlaceholder": "Tag name", - "backgroundColour": "Background colour", - "createTag": "Create tag", - "editTag": "Edit tag", - "updateTag": "Update tag", - "deleteTag": "Delete tag", - "confirmDelete": "Delete \"{name}\"?", - "noTags": "No tags yet", - "colId": "ID", - "colTag": "Tag", - "colColour": "Colour", - "colUsedBy": "Used by", - "colCreated": "Created", - "colActions": "Actions" - }, - "navigation": { - "title": "Navigator", - "flatCategories": "Flat categories", - "publicRooms": "Public rooms", - "addCategory": "Add category", - "editCategory": "Edit category", - "deleteCategory": "Delete category", - "categoryName": "Category name", - "categoryNamePlaceholder": "e.g. Chill & Chat", - "categoryOrder": "Order", - "roomName": "Room name", - "roomNamePlaceholder": "e.g. Welcome Lounge", - "roomId": "Room ID", - "roomIdPlaceholder": "Numeric room ID", - "save": "Save", - "cancel": "Cancel", - "noCategories": "No categories yet", - "noPublicRooms": "No public rooms yet", - "colId": "ID", - "colName": "Name", - "colOrder": "Order", - "colRooms": "Rooms", - "colActions": "Actions" - }, - "helpCenter": { - "title": "Help Center", - "subtitle": "Support entries and FAQ management", - "entries": "Entries", - "newEntry": "+ New entry", - "edit": "Edit", - "delete": "Delete", - "noEntries": "No entries yet", - "confirmDelete": "Delete \"{title}\"?", - "colId": "ID", - "colTitle": "Title", - "colCategory": "Category", - "colCreated": "Created", - "colActions": "Actions", - "form": { - "title": "Title", - "titlePlaceholder": "Entry title", - "category": "Category", - "categoryPlaceholder": "Select category", - "body": "Body", - "bodyPlaceholder": "Write the answer…", - "save": "Save entry", - "saving": "Saving…", - "deleteEntry": "Delete entry", - "cancel": "Cancel" - } - }, - "ads": { - "title": "Advertisements", - "subtitle": "Manage hotel advertisements and promotional banners", - "newAd": "+ New ad", - "edit": "Edit", - "delete": "Delete", - "noAds": "No advertisements yet", - "confirmDelete": "Delete this ad?", - "colId": "ID", - "colName": "Name", - "colImage": "Image", - "colUrl": "URL", - "colViews": "Views", - "colStatus": "Status", - "colCreated": "Created", - "colActions": "Actions", - "form": { - "name": "Name", - "namePlaceholder": "Ad name", - "image": "Image URL", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Target URL", - "urlPlaceholder": "https://example.com", - "enabled": "Enabled", - "save": "Save ad", - "saving": "Saving…", - "deleteAd": "Delete ad", - "cancel": "Cancel" - } - }, - "writeableBoxes": { - "title": "Writeable Boxes", - "subtitle": "Content panels shown across the hotel and CMS", - "newBox": "New box", - "edit": "Edit", - "delete": "Delete", - "noBoxes": "No writeable boxes yet", - "confirmDelete": "Delete this box?", - "colId": "ID", - "colName": "Name", - "colLocation": "Location", - "colUpdated": "Updated", - "colActions": "Actions", - "form": { - "name": "Name", - "namePlaceholder": "Box name", - "location": "Location", - "locationPlaceholder": "e.g. homepage, sidebar", - "content": "Content", - "contentPlaceholder": "Write the box content…", - "enabled": "Enabled", - "save": "Save box", - "saving": "Saving…", - "deleteBox": "Delete box", - "cancel": "Cancel" - } - }, - "photos": { - "title": "Photo Moderation", - "subtitle": "Recent in-game camera photos", - "delete": "Delete", - "approve": "Approve", - "noPhotos": "No photos to moderate", - "confirmDelete": "Delete this photo permanently?", - "colId": "ID", - "colPreview": "Preview", - "colUser": "User", - "colRoom": "Room", - "colTimestamp": "Timestamp", - "colActions": "Actions", - "photoAlt": "User photo #{id}", - "byUser": "by {username}" - }, - "users": { - "title": "Users", - "subtitle": "Browse, search and manage hotel accounts", - "search": "Search", - "searchPlaceholder": "Search by username, email or ID…", - "searchResults": "{count, plural, one {# result} other {# results}} for \"{query}\"", - "noResults": "No users found", - "colId": "ID", - "colUsername": "Username", - "colEmail": "Email", - "colRank": "Rank", - "colOnline": "Online", - "colRegistered": "Registered", - "colLastOnline": "Last online", - "colActions": "Actions", - "yes": "Yes", - "no": "No", - "edit": "Edit", - "setRank": "Set rank", - "disconnect": "Disconnect", - "alert": "Alert", - "ban": "Ban", - "detail": { - "title": "User: {username}", - "subtitle": "Account details and management", - "overview": "Overview", - "actions": "Actions", - "username": "Username", - "email": "Email", - "motto": "Motto", - "rank": "Rank", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "online": "Online", - "registered": "Registered", - "lastOnline": "Last online", - "ipAddress": "IP address", - "machineId": "Machine ID", - "sendAlert": "Send alert", - "sendMessage": "Send message", - "disconnectUser": "Disconnect user", - "banUser": "Ban user", - "resetPassword": "Reset password", - "deleteUser": "Delete user", - "confirmDelete": "Are you sure you want to delete {username}? This cannot be undone." - }, - "editForm": { - "title": "Edit user: {username}", - "subtitle": "Modify account details", - "username": "Username", - "usernamePlaceholder": "Username", - "email": "Email", - "emailPlaceholder": "user@example.com", - "motto": "Motto", - "mottoPlaceholder": "User motto", - "rank": "Rank", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "save": "Save changes", - "saving": "Saving…", - "cancel": "Cancel" - } - }, - "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" - }, - "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}" - }, - "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" - }, - "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" - } - }, - "shop": { - "title": "Shop", - "subtitle": "Manage packages and orders", - "packages": "Packages", - "orders": "Orders", - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "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", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colCurrency": "Currency", - "colType": "Type", - "colSold": "Sold", - "colEnabled": "Enabled", - "colActions": "Actions", - "colOrderId": "Order ID", - "colCustomer": "Customer", - "colPackage": "Package", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "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" - } - }, - "transactions": { - "title": "Transactions", - "subtitle": "PayPal payment log", - "noTransactions": "No transactions yet", - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colId": "ID", - "colUser": "User", - "colPayer": "Payer", - "colAmount": "Amount", - "colCurrency": "Currency", - "colPackage": "Package", - "colStatus": "Status", - "colTransaction": "Transaction ID", - "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" - } - }, - "vouchers": { - "title": "Shop Vouchers", - "subtitle": "Manage redeemable voucher codes", - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "newVoucher": "+ New voucher", - "edit": "Edit", - "delete": "Delete", - "noVouchers": "No vouchers yet", - "confirmDeleteTitle": "Delete voucher", - "confirmDelete": "Delete voucher \"{code}\"?", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colId": "ID", - "colCode": "Code", - "colValue": "Value", - "colAmount": "Amount", - "colType": "Type", - "colUses": "Uses / Max", - "colStatus": "Status", - "colExpires": "Expires", - "colCreated": "Created", - "colActions": "Actions", - "form": { - "code": "Code", - "codePlaceholder": "e.g. SUMMER2025", - "value": "Value", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "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", - "create": "Create voucher", - "save": "Save voucher", - "saving": "Saving…", - "cancel": "Cancel" - } - }, - "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", - "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