Local Build and Deploy / deploy (push) Successful in 1m15s
- bulkImportPermissions now returns {count, errors} instead of void
- ImportSection shows per-entry error details in toast
- Remove testRankPermission server action (test is 100% client-side)
- Clean up unused testing state in TestSection
- Sync pages.admin.{import,translations} keys to all 20 languages
- Add importedWithErrors translation key to all locales
2158 lines
73 KiB
JSON
2158 lines
73 KiB
JSON
{
|
|
"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 <strong>{amount}</strong> 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",
|
|
"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": "[email protected]",
|
|
"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"
|
|
},
|
|
"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",
|
|
"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"
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
},
|
|
"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 \u2014 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\u2019s own radio player page in an iframe \u2014 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 \u2014 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 \u2014 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 \u2014 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 \u2014 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 \u2014 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.",
|
|
"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",
|
|
"trackTitle": "Title",
|
|
"titlePlaceholder": "Track title",
|
|
"artist": "Artist",
|
|
"album": "Album",
|
|
"artworkUrl": "Artwork URL",
|
|
"artworkUrlPlaceholder": "https://\u2026/cover.png",
|
|
"duration": "Duration (seconds)",
|
|
"durationPlaceholder": "e.g. 215",
|
|
"sortOrder": "Sort order",
|
|
"playlist": "Playlist ({count})",
|
|
"noTracks": "No AutoDJ tracks yet \u2014 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"
|
|
},
|
|
"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 \u2014 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": "<span class=\"inline-block text-[0.72rem] font-bold px-2 py-0.5 rounded-full bg-green-600/20 text-[var(--color-text)]\">OK</span> reachable \u00b7 <span class=\"inline-block text-[0.72rem] font-bold px-2 py-0.5 rounded-full bg-[var(--color-primary)]/18 text-[var(--color-text)]\">WARN</span> not configured \u00b7 <span class=\"inline-block text-[0.72rem] font-bold px-2 py-0.5 rounded-full bg-red-500/22 text-[var(--color-text)]\">ERROR</span> fetch failed / timed out.",
|
|
"streamUrl": "Stream URL",
|
|
"unreachable": "unreachable",
|
|
"refresh": "Refresh"
|
|
},
|
|
"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",
|
|
"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…"
|
|
},
|
|
"colId": "ID",
|
|
"colTitle": "Title",
|
|
"colSentBy": "Sent by",
|
|
"colType": "Type",
|
|
"colDate": "Date",
|
|
"colActions": "Actions"
|
|
},
|
|
"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"
|
|
},
|
|
"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"
|
|
}
|
|
},
|
|
"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": "Housekeeping Permissions",
|
|
"subtitle": "Configure which ranks can access which admin sections",
|
|
"addPermission": "Add permission",
|
|
"editPermission": "Edit permission",
|
|
"deletePermission": "Delete permission",
|
|
"noPermissions": "No housekeeping permissions configured",
|
|
"confirmDelete": "Delete this permission?",
|
|
"colId": "ID",
|
|
"colRank": "Rank",
|
|
"colSection": "Section",
|
|
"colActions": "Actions",
|
|
"saved": "Saved!",
|
|
"deleted": "Deleted!",
|
|
"errorOccurred": "An error occurred",
|
|
"emptyInput": "Empty input",
|
|
"invalidJson": "Invalid JSON",
|
|
"imported": "Imported!",
|
|
"importedWithErrors": "Imported {count} permissions with {errors} errors",
|
|
"presetApplied": "Preset applied!",
|
|
"cleared": "All permissions cleared!",
|
|
"invalidRank": "Invalid rank",
|
|
"testDone": "Test done: {count} permissions found",
|
|
"testing": "Testing...",
|
|
"loading": "Loading...",
|
|
"prev": "Previous",
|
|
"next": "Next",
|
|
"form": {
|
|
"rankId": "Rank ID",
|
|
"rankIdPlaceholder": "Minimum rank",
|
|
"section": "Section key",
|
|
"sectionPlaceholder": "e.g. admin.dashboard",
|
|
"save": "Save permission",
|
|
"saving": "Saving…",
|
|
"cancel": "Cancel"
|
|
},
|
|
"confirmClearAll": "Delete ALL permissions? This action cannot be undone!",
|
|
"colGroup": "Group",
|
|
"colDepends": "Depends on",
|
|
"colPermission": "Permission",
|
|
"colDescription": "Description",
|
|
"colMinRank": "Min. Rank",
|
|
"permissionKey": "Permission key",
|
|
"minRank": "Min. rank",
|
|
"description": "Description",
|
|
"permissions": "Permissions",
|
|
"permissionsCount": "{count} permissions",
|
|
"permission": "permission",
|
|
"highestMinRank": "Highest min. rank: {rank}",
|
|
"totalMinRank": "Total min. rank sum: {total}",
|
|
"groupCount": "{count} groups",
|
|
"rankCount": "{count} ranks",
|
|
"missingDeps": "{count} missing dependencies",
|
|
"dependsOn": "depends on",
|
|
"notFound": "not found",
|
|
"missing": "(missing)",
|
|
"rank": "Rank",
|
|
"count": "Count",
|
|
"searchPermission": "Search permissions…",
|
|
"search": "Search",
|
|
"manage": "Manage",
|
|
"importSelection": "Import selection",
|
|
"noGroup": "No group",
|
|
"allGroups": "All groups",
|
|
"perGroup": "Permissions per group",
|
|
"perRank": "Permissions per rank",
|
|
"rankOverviewHint": "All permissions grouped by the rank they are assigned to.",
|
|
"tabOverview": "Overview",
|
|
"tabManage": "Manage",
|
|
"tabImport": "Import / Export",
|
|
"tabRanks": "Rank overview",
|
|
"tabPresets": "Presets",
|
|
"tabTest": "Test",
|
|
"tabAudit": "Audit log",
|
|
"importPermissions": "Import permissions",
|
|
"importHint": "Paste a JSON array of permission objects. Format: [{ \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" }]",
|
|
"importPlaceholder": "Paste JSON here…",
|
|
"import": "Import",
|
|
"exportTitle": "Export permissions",
|
|
"exportHint": "Export all permissions as JSON for backup or batch editing.",
|
|
"export": "Export JSON",
|
|
"copy": "Copy",
|
|
"copied": "Copied!",
|
|
"presets": "Permission presets",
|
|
"presetsHint": "Apply a predefined set of permissions for common staff roles.",
|
|
"presetModerator": "Moderator",
|
|
"presetModeratorDesc": "Basic moderation tools: user lookup, bans, CFH handling, chat logs.",
|
|
"presetAdmin": "Administrator",
|
|
"presetAdminDesc": "Full admin access: users, rooms, news, settings, shop, events, radio & more.",
|
|
"presetSuperAdmin": "Super Admin",
|
|
"presetSuperAdminDesc": "Complete access to every feature including permission management and asset import.",
|
|
"applyPreset": "Apply preset",
|
|
"clearAll": "Clear all permissions",
|
|
"testTitle": "Test rank access",
|
|
"testHint": "Enter a rank number to see which permissions would be granted.",
|
|
"test": "Test",
|
|
"auditTitle": "Permission audit log",
|
|
"auditHint": "All changes to housekeeping permissions are logged.",
|
|
"auditLogsAt": "Audit logs are available on the Audit log page.",
|
|
"viewAuditLogs": "View audit logs"
|
|
},
|
|
"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",
|
|
"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…",
|
|
"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"
|
|
}
|
|
},
|
|
"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."
|
|
},
|
|
"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"
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|