{
"draftRecovery": {
"ready": "Palautuskopio säilytetään tässä selaimessa 7 päivän ajan.",
"saved": "Palautuskopio on tallennettu tähän selaimeen 7 päiväksi.",
"unavailable": "Selaimen palautustoiminto ei ole käytettävissä. Pidä tämä sivu auki, kunnes muutoksesi on tallennettu.",
"found": "Tässä selaimessa on palautuskopio, joka on tallennettu",
"restore": "Palauta selaimen kopio",
"discard": "Poista selaimen kopio",
"confirmRestore": "Korvataanko nykyinen lomake selaimen palautuskopiolla? Tarkista sisältö ennen tallentamista.",
"confirmDiscard": "Poistetaanko tämä palautuskopio selaimesta? Nykyinen lomake säilyy ennallaan."
},
"nav": {
"home": "Home",
"community": "Community",
"articles": "Articles",
"photos": "Photos",
"staff": "Staff",
"rankings": "Rankings",
"guilds": "Guilds",
"events": "Events",
"polls": "Polls",
"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",
"mod": "Mod"
},
"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"
},
"emails": {
"verify": {
"subject": "Verify your email · {hotel}",
"heading": "Verify your email",
"body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.",
"button": "Verify email",
"fallback": "If the button doesn't work, paste this link into your browser:"
}
},
"pages": {
"admin": {
"nav": {
"studio": "Studio",
"operationsCenter": "Operations center",
"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",
"helpTickets": "Help-center tickets",
"events": "Events",
"polls": "Polls",
"guilds": "Guilds",
"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",
"catalogMaintenance": "Catalog maintenance",
"itemsBase": "Items base",
"shop": "Shop",
"marketplace": "Marketplace",
"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": "Command center",
"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",
"adminMenu": "Admin menu",
"backToSite": "Back to site",
"expandAll": "Expand all",
"collapseAll": "Collapse all",
"searchMenu": "Search menu…",
"clearMenuSearch": "Clear menu search",
"noMenuResults": "No matching pages.",
"housekeeping": "Permission archive",
"hotelManagementPanel": "Hotel management panel",
"rankLabel": "Rank {rank}",
"community": "Community",
"monitoring": "Monitoring",
"staffAccess": "Ranks & permissions",
"multiAccounts": "Multi-accounts",
"chatLog": "Chat log",
"commandLog": "Command log",
"tradeLog": "Trade log",
"tools": "Tools",
"search": {
"placeholder": "Search…",
"noResults": "No results found",
"users": "Users",
"articles": "Articles",
"rooms": "Rooms",
"guilds": "Guilds",
"shop": "Shop",
"hint": "Start typing to search across users, articles, rooms, guilds and shop items"
},
"peopleSupport": "Users and support",
"catalogFurniture": "Catalog and furniture",
"communityContent": "Community and content",
"staffPermissions": "Staff and access",
"cmsErrors": "CMS errors",
"themeBuilder": "Theme builder",
"openSidebar": "Open menu",
"closeSidebar": "Close menu",
"referrals": "Suositukset",
"dailyRewards": "Päivittäiset palkinnot"
},
"logs": {
"audit": {
"filtersTitle": "Filter audit records",
"filterActor": "Actor (exact username or ID)",
"filterAction": "Exact action",
"filterFrom": "From date (UTC)",
"filterTo": "Through date (UTC)",
"filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.",
"applyFilters": "Apply filters",
"resetFilters": "Reset filters",
"invalidDetails": "These legacy details cannot be displayed.",
"beforeValue": "Before",
"afterValue": "After",
"exportHint": "CSV exports the current filtered page, up to 100 records.",
"colTargetId": "Target ID",
"colDetails": "Details",
"colDate": "Date",
"searchPlaceholder": "Search by action or target…",
"changesCount": "{count} changes",
"notAvailable": "N/A",
"operation": "Operation"
},
"history": {
"preview": "Preview restore",
"title": "Restore a recorded edit",
"description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.",
"loading": "Loading…",
"unavailable": "This revision is unavailable or you do not have permission to restore it.",
"conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.",
"failed": "The restore could not be completed. Please reload and try again.",
"field": "Field",
"current": "Current value",
"restore": "Value to restore",
"confirm": "Confirm restore",
"restoring": "Restoring…",
"fields": {
"caption": "Category name",
"captionSave": "Internal category name",
"pageLayout": "Category layout",
"enabled": "Enabled",
"visible": "Visible",
"clubOnly": "Club members only",
"vipOnly": "VIP members only",
"minRank": "Minimum rank",
"iconImage": "Category icon",
"iconColor": "Icon colour",
"pageHeadline": "Header image",
"pageTeaser": "Preview image",
"pageSpecial": "Special image",
"pageText1": "Primary text",
"pageText2": "Secondary text",
"pageTextDetails": "Details text",
"pageTextTeaser": "Preview text",
"includes": "Included categories",
"costCredits": "Credit price",
"costPoints": "Points price",
"pointsType": "Points currency",
"title": "News title",
"slug": "News address",
"image": "News image",
"shortStory": "Summary",
"fullStory": "Article content",
"status": "Publication status",
"publishAt": "Scheduled publication",
"publishedAt": "Publication date",
"pageId": "Category"
}
},
"title": "Staff Activities",
"subtitle": "Audit trail of staff actions in the admin panel",
"noLogs": "No staff activity logged yet",
"noResults": "No matching activities",
"colId": "ID",
"colUser": "User",
"colStaff": "Staff",
"colAction": "Action",
"colTarget": "Target",
"colDescription": "Description",
"colIp": "IP",
"colWhen": "When",
"colTimestamp": "Timestamp",
"filterByUser": "Filter by user…",
"filterByAction": "Filter by action…",
"clearFilters": "Clear filters",
"searchPlaceholder": "Search action, description or IP…",
"totalActivities": "Total activities",
"onThisPage": "On this page",
"recent": "Last minute",
"authorizationErrors": "Authorization errors",
"authorizationOnly": "Auth errors only",
"allActivities": "All activities",
"staffId": "Staff ID",
"actionType": "Action type",
"filter": "Filter",
"activities": "{count} activities",
"staffWithId": "#{id} {name}",
"userPrefix": "user",
"pagination": "Page {page} of {pages} · {total} total",
"next": "Next",
"prev": "Previous",
"unknownUser": "unknown",
"emptyValue": "-",
"colTime": "Time",
"chat": {
"colMessage": "Message",
"colRoomId": "Room ID",
"searchPlaceholder": "Search by username or message…"
},
"commands": {
"colCommand": "Command",
"colParams": "Params",
"searchPlaceholder": "Search by username, command, or params…"
},
"trades": {
"colUserOne": "User one",
"colUserTwo": "User two",
"colStatus": "Status",
"statusUnknown": "unknown",
"searchPlaceholder": "Search by username…"
}
},
"cmsErrors": {
"firstSeen": "First occurrence in retained records",
"lastSeen": "Latest occurrence",
"affectedUsers": "Distinct identified users",
"unidentifiedEvents": "Events without a verified user ID",
"metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.",
"assignedStaff": "Assigned to staff #{id}",
"unassigned": "Unassigned",
"assignSelf": "Assign to me",
"clearAssignment": "Clear assignment",
"openOperation": "Open related area",
"releaseOccurrences": "Occurrences by release",
"releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.",
"releaseFilter": "Version",
"allReleases": "All versions",
"period": "Period",
"allRetained": "All retained events",
"last24h": "Last 24 hours",
"last7d": "Last 7 days",
"sort": "Order",
"recentFirst": "Most recent first",
"frequentFirst": "Most frequent first",
"filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.",
"title": "CMS error center",
"storageError": "Error storage could not be read. Check the storage volume and permissions.",
"subtitle": "Server and browser errors from the last 7 days. Browser reports are unverified client observations.",
"emulator": "Emulator errors",
"refresh": "Refresh / clear filters",
"search": "Search errors",
"allSources": "All sources",
"empty": "No captured errors match these filters. Older console logs are not imported.",
"resolve": "Mark resolved",
"reopenHint": "A new occurrence reopens the group automatically.",
"references": "Occurrence references",
"stackHint": "Browser stacks may reference compiled chunks. Use the reference to investigate; request bodies are not stored.",
"previous": "Previous",
"next": "Next",
"searchHint": "Reference, digest, message, route or release",
"source": "Error source",
"pages": "Error pages",
"resolved": "Resolved",
"open": "Open",
"occurrences": "{count} occurrences",
"reference": "Reference",
"release": "Release",
"noStack": "No stack supplied. Use the reference or digest to correlate server logs.",
"truncated": "Showing the latest 1,000 events; filters search this retained window.",
"counts": "{count} occurrences · {groups} groups.",
"retention": "Storage is limited to 10 MB per day; excess events remain in server logs where available.",
"status": "Status",
"allStatuses": "All statuses",
"auditTrail": "Related audit records"
},
"installation": {
"title": "Installation diagnostics",
"hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.",
"checked": "Checked at {time} · probes completed in {ms} ms",
"recheck": "Check again",
"ok": "Check passed",
"failed": "Needs attention",
"unknown": "Not verified",
"missing": "Not configured",
"release": "Running release",
"database": "Database",
"redis": "Redis",
"emulator": "Emulator",
"storage": "Writable storage",
"migrations": "Database migrations",
"worker": "Background worker",
"renderer": "Renderer configuration",
"registry": "Container registry",
"releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.",
"databaseHint": "Connection check and measured SELECT 1 response time.",
"redisHint": "Optional for some pages; required for queued import work.",
"emulatorHint": "Response to the configured emulator ping.",
"storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.",
"migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.",
"workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.",
"rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.",
"registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea.",
"guideTitle": "Installation and updates",
"guideHost": "Run these commands in the repository clone on your Linux Docker host. This page only checks status; it does not control Docker.",
"guideAccess": "Source builds need repository access. Private prebuilt images also require registry package access. The wizard preserves existing settings.",
"guidePinned": "For a reviewed version, check out its commit on the host and run bash cms update --skip-pull. Paired application and migrations digests are optional in prebuilt mode; see docs/operations/docker-installation.md.",
"guideWorker": "After startup, check storage, migrations and worker heartbeat below. HTTP health alone does not confirm background jobs are running.",
"guideRecovery": "Back up the database and verify its restore procedure before upgrading. Image rollback does not undo migrations. Database downgrade compatibility is not guaranteed."
},
"importHistory": {
"cancelled": "Cancelled",
"cancelFailed": "Could not request cancellation. Retry or refresh the job history.",
"cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.",
"cancelHint": "Cancellation preserves completed items and allows the current item to finish.",
"cancelRemaining": "Cancel remaining items",
"historyLimit": "Showing up to 30 most recently updated jobs.",
"refreshHistory": "Refresh history",
"showMoreItems": "Show 50 more items",
"uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.",
"reviewLocalData": "Review local data",
"ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.",
"previousPage": "Previous",
"nextPage": "Next",
"page": "Page {page}",
"summary": "Import history · {count} active",
"empty": "No background imports yet.",
"result": "{done}/{total} imported · {failed} failed",
"progress": "Import progress",
"queued": "Queued",
"running": "Running",
"completed": "Completed",
"interrupted": "Interrupted",
"done": "Imported",
"failed": "Failed",
"pending": "Pending",
"retryFailed": "Retry failed items only",
"retryUnfinished": "Retry unfinished items"
},
"articles": {
"form": {
"autosaveLoading": "Loading saved drafts…",
"autosaveReady": "Private draft autosave is ready.",
"autosaveSaving": "Saving private draft…",
"autosaveSaved": "Private draft saved. Publication changes require Save.",
"autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.",
"autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.",
"recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.",
"recoverDraft": "Recover draft",
"discardDraft": "Discard saved draft",
"confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.",
"confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.",
"revisionHistory": "Previous saved versions (latest 20)",
"restoreRevision": "Restore into editor",
"confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.",
"editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.",
"retryRecovery": "Reload recovery without changing this form",
"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",
"status": "Status",
"statusDraft": "Draft",
"statusScheduled": "Scheduled",
"statusPublished": "Published",
"publishAt": "Publish at",
"publishedAt": "Published at",
"titleRequired": "Enter a title.",
"titleTooLong": "The title must be at most 255 characters.",
"summaryTooLong": "The summary must be at most 255 characters.",
"imageTooLong": "The image URL must be at most 255 characters.",
"invalidStatus": "Select a valid publication status.",
"publishDateRequired": "Choose a valid publication date.",
"saveFailedReference": "Could not save the article. Your content is preserved. Error reference: {reference}",
"articleNotFound": "Article not found.",
"summary": "Summary",
"imageNotFound": "Image not found. Enter a valid URL or browse.",
"imagePreview": "Article image preview",
"previewTitle": "Article preview",
"previewDescription": "Content preview. The published page applies the site theme.",
"previewFrame": "Article content preview",
"imageInvalid": "Use a local image path or an HTTP/HTTPS image URL without credentials.",
"linksInvalid": "Review the content links: only local, HTTP/HTTPS and email links are allowed."
},
"listActionError": "The article action could not be completed.",
"listStatus": "Publication status",
"listStatus_all": "All articles",
"listStatus_draft": "Draft",
"listStatus_published": "Published",
"listStatus_scheduled": "Scheduled",
"listSearch": "Search title or summary",
"listApply": "Apply",
"listLoading": "Loading…",
"listReset": "Reset filters",
"listUnavailable": "Articles are temporarily unavailable. Try again.",
"listRetry": "Try again",
"listTotal": "{count, plural, one {# matching article} other {# matching articles}}",
"listNoMatches": "No articles match these filters. Change the search or reset the filters.",
"listPagination": "Article pages",
"listPrevious": "Previous",
"listNext": "Next",
"listPage": "Page {page} of {total}",
"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",
"articlesShown": "Articles shown",
"latest": "Latest article",
"mostRecentPost": "Most recent publication",
"recentArticles": "Recent articles"
},
"operations": {
"title": "Needs attention",
"hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.",
"empty": "No pending items found in the checked records.",
"errors": "Unresolved CMS error groups",
"imports": "Your imports needing review",
"tickets": "Open support tickets",
"publications": "News drafts",
"unavailable": "{source}: data is temporarily unavailable.",
"installation": "Installation diagnostics"
},
"catalog": {
"packages": {
"openPackages": "Catalog packages",
"title": "Catalog packages",
"description": "Prepare category and price changes in a separate draft. Review the catalog before publishing.",
"createPackage": "New package",
"createDraft": "Create draft",
"draftCreated": "Package draft created. The live catalog has not changed.",
"refresh": "Refresh list",
"searchPackages": "Search packages",
"noPackages": "No packages match this search.",
"choosePackage": "Open a package or create a draft from existing categories.",
"name": "Package name",
"mode": "Publication mode",
"update": "Update existing categories",
"copy": "Create copies",
"updateHint": "Publication applies the package to its existing categories and offers.",
"copyHint": "Publication creates new categories and offers under the selected parent. Furniture references are preserved.",
"sourceCategories": "Source categories",
"packageLimits": "Descendant categories are included. Each package supports up to 200 categories and 500 offers.",
"searchCategories": "Search categories",
"selectedCategories": "Selected: {count}",
"targetParent": "Destination parent category",
"rootCategory": "Catalog root",
"draft": "Draft",
"published": "Published",
"editDraft": "Edit draft",
"catalogPreview": "Catalog preview",
"showBaseline": "Show the original saved snapshot",
"changes": "Before and after",
"entry": "Entry",
"field": "Field",
"before": "Before",
"after": "After",
"noChanges": "No edited fields compared with the original snapshot.",
"copyReview": "The entire package will be copied on publication, even if no fields were edited. The table lists edits to the original snapshot.",
"updateReview": "These draft changes will update existing catalog entries after publication.",
"saveDraft": "Save draft",
"saveHint": "Saving keeps the package as a draft. Save all changes before requesting a publication review.",
"draftSaved": "Draft saved. Publication is a separate step.",
"reviewPublication": "Review publication",
"publicationImpact": "Publication affects {pages} categories and {offers} offers.",
"conflicts": "Publication is blocked by conflicts. Resolve them before requesting another review.",
"readyToPublish": "The saved version passed the publication check. Publishing changes the live catalog.",
"publish": "Publish package",
"confirmPublish": "Publish this reviewed package to the live catalog now?",
"publishedSuccess": "Package published: {pages} categories and {offers} offers.",
"staleReview": "This package changed in another session. Reopen it to review the latest saved version.",
"unsaved": "Unsaved changes",
"discardChanges": "Discard unsaved package changes and continue?",
"working": "Working…",
"requestFailed": "The request failed. Try again.",
"invalidFields": "Check required names, layouts and whole-number fields before saving.",
"category": "Category",
"caption": "Category caption",
"iconImage": "Category icon ID",
"minRank": "Minimum rank",
"orderNum": "Display order",
"pageLayout": "Page layout",
"enabled": "Enabled",
"visible": "Visible",
"clubOnly": "Club members only",
"vipOnly": "VIP members only",
"offers": "Offers ({count})",
"offer": "Offer",
"catalogName": "Offer name",
"costCredits": "Credits",
"costPoints": "Points",
"pointsType": "Points currency ID",
"amount": "Amount",
"searchOffers": "Search offers",
"currentCategoryOffers": "Only the selected category",
"selectMatching": "Select all matching offers ({count})",
"clearSelection": "Clear selection",
"selectedOffers": "Selected offers: {count}",
"select": "Select",
"selectOffer": "Select offer #{id}",
"noOffers": "No offers match these filters.",
"bulkPrices": "Bulk draft prices ({count} selected)",
"bulkHint": "Preview the selected price changes, then accept them into this draft. The live catalog remains unchanged until publication.",
"operation": "Operation",
"set": "Set value",
"add": "Add or subtract",
"percent": "Adjust by percent",
"value": "Value",
"reviewBulk": "Preview prices",
"invalidBulk": "Choose valid numbers and at least one offer. Resulting prices must be nonnegative and within the supported range.",
"acceptBulk": "Accept prices into draft",
"previous": "Previous",
"next": "Next"
},
"integrity": {
"title": "Catalog integrity",
"description": "Check references, category paths, identifiers and furniture icons. Scanning does not change records.",
"catalog": "Catalog",
"normal": "Normal catalog",
"bc": "Builders Club",
"refresh": "Scan again",
"working": "Checking…",
"failed": "The operation could not be completed. Try again.",
"stalePreview": "The catalog changed after the preview. Create a new preview before applying repairs.",
"applied": "{count} categories reattached to the catalog root.",
"iconsUnavailable": "The icon folder could not be read. Icon availability has not been verified.",
"healthy": "No issues found in the completed checks.",
"total": "{count} issues found. Showing {shown}.",
"open": "Open",
"reference": "Reference: {value}",
"repairHint": "Preview categories whose parent no longer exists. Applying moves only these categories to the root and preserves every record. Cycles, missing furniture, icons and identifier conflicts require individual review.",
"preview": "Preview safe repairs",
"planned": "{count} categories will be moved:",
"parentChange": "parent #{from} → catalog root",
"apply": "Apply previewed repairs",
"legacyTitle": "Advanced maintenance actions",
"legacyHint": "These existing maintenance tools can rewrite identifiers and merge or remove duplicate records. They are separate from the non-destructive integrity check and its previewed parent repair.",
"issues": {
"missing_furniture": "Offer references missing furniture",
"invalid_item_ids": "Invalid furniture identifiers",
"missing_page": "Offer references a missing category",
"unreachable_page": "Unreachable category",
"category_cycle": "Category path contains a cycle",
"missing_icon": "Missing furniture icon",
"invalid_offer_id": "Invalid offer identifier",
"duplicate_offer_id": "Repeated offer identifier"
}
},
"bulk": {
"undo": "Undo",
"undoHint": "You can also restore individual offers from audit history.",
"undoSuccess": "Restored {count} offers.",
"previewCount": "{count} of {total} offers will change.",
"success": "Updated {count} offers.",
"selectOffer": "Select offer {name} (#{id})",
"pageEmpty": "No category found.",
"clearSelection": "Clear selection",
"disabledReason": "Save or reset pending edits and wait for current operations before bulk editing.",
"operation": "Operation",
"loadingDestinations": "Loading categories…",
"cancel": "Cancel",
"pagePlaceholder": "Select destination category…",
"noChanges": "The selected values already match. No changes to save.",
"costPoints": "Points price",
"chooseFields": "Check at least one field to change.",
"pageAll": "All categories",
"offer": "Offer",
"costCredits": "Credits",
"invalidPrice": "Enter a valid number. Set and add operations require whole numbers.",
"modes": {
"set": "Set to value",
"add": "Add or subtract",
"percent": "Change by percentage"
},
"fieldHint": "Only checked fields will change.",
"currencies": {
"0": "Duckets",
"5": "Diamonds",
"101": "Snowflakes",
"103": "Hearts",
"104": "Stars",
"105": "Shells"
},
"currency": "Points currency",
"button": "Bulk edit ({count})",
"description": "{count} selected offers. Preview changes before saving.",
"confirm": "Confirm and save {count} offers",
"beforeAfter": "Each cell shows the current value → the new value.",
"requestFailed": "The request failed. Refresh the preview before trying again.",
"priceHint": "Use negative additions or percentages to reduce prices. Percentage results round to the nearest integer; final prices cannot be negative.",
"selectedCount": "{count} offers selected across categories",
"value": "Value",
"unknownCurrency": "Type {type}",
"becomes": "becomes",
"title": "Edit selected offers",
"preview": "Preview changes",
"retryDestinations": "Retry loading categories",
"chooseDestination": "Select a destination category.",
"pageSuggested": "Suggested",
"previewTitle": "Review bulk changes",
"visibilityHint": "Visibility is controlled by the category. Moving offers makes them follow the destination category's visibility.",
"percentage": "Percentage (%)",
"destination": "Destination category",
"pageSearch": "Search categories…",
"back": "Edit changes",
"selectionLimit": "Select at most 500 offers for one operation.",
"refreshing": "Refreshing updated offers…"
},
"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"
},
"workspace": {
"diagnostics": "Diagnostics",
"editor": "Editor",
"normal": "Catalog",
"tree": "Tree",
"table": "Table",
"manager": "Catalog manager",
"backToCategories": "Back to categories",
"retryPage": "Retry loading page",
"retryItems": "Retry loading items",
"hotel": "Hotel",
"sent": "Update request sent",
"sendFailed": "Update request failed",
"unknown": "No status yet",
"disabled": "Not configured",
"exportFailed": "Export failed",
"queued": "Export pending",
"exported": "Export completed",
"retryHotel": "Retry hotel update",
"retryStatus": "Status unavailable — retry",
"saved": "Saved",
"globalSearch": "Search catalog",
"searchPlaceholder": "Category, offer, classname or ID",
"searchNoResults": "No results found",
"searchFailed": "Search failed. Try again.",
"searching": "Searching...",
"category": "Category",
"offer": "Offer",
"duplicate": {
"title": "Duplicate category",
"description": "Copy this category, every descendant and all their offers.",
"name": "New category name",
"destination": "Destination category",
"disabled": "The copied root starts disabled and hidden. Descendants keep their settings; furniture definitions and assets are shared.",
"counts": "{pages} categories and {offers} offers",
"summary": "“{name}” under {destination}",
"cancel": "Cancel",
"working": "Working…",
"confirm": "Confirm duplication",
"preview": "Preview copy",
"saved": "Category and offers duplicated",
"savedPending": "Copy saved; hotel update pending",
"failed": "Duplication failed",
"root": "Catalog root",
"search": "Search categories…",
"empty": "No category found",
"suggested": "Suggested",
"all": "All categories",
"draftBlocked": "Save or discard category edits before duplicating."
},
"unsaved": "Unsaved changes",
"fullEditor": "Full editor",
"saveHint": "Category changes are not saved. Use Save or Ctrl+S.",
"access": {
"enabled": "Enabled",
"enabledHint": "Makes this category available in the catalog.",
"visible": "Visible in navigation",
"visibleHint": "Shows this category in the catalog menu.",
"club": "HC only",
"clubHint": "Restricts access to users with an HC subscription.",
"yes": "Yes",
"no": "No"
},
"preview": {
"label": "Live catalog preview",
"title": "Live preview",
"on": "On",
"off": "Off",
"untitled": "Untitled page",
"noItems": "No offers on this page yet",
"items": "offer(s)",
"disabledHint": "This page is disabled — players cannot see it.",
"suggestedLayout": "Better layout suggested",
"suggestedLayoutReason": "This page {reason}. Switch to “{layout}” to match players’ expectations.",
"applyLayout": "Apply layout"
},
"autoCategory": {
"title": "Auto-Category",
"itemsBadge": "{count} items",
"fromFurni": "From furni",
"emptyPage": "Empty page",
"searchPlaceholder": "Search furni by name or classname…",
"noResults": "No results",
"added": "Added",
"price": "Price",
"free": "Free",
"setPrice": "Set a price",
"credits": "Credits",
"points": "Points",
"pointsType": "Type",
"parent": "Parent",
"root": "Catalog root",
"caption": "Caption",
"captionPlaceholder": "e.g. Chairs, Wallpapers…",
"icon": "Icon",
"pickIcon": "Pick icon",
"layout": "Layout",
"suggestedLayout": "Suggested: {layout}",
"enabled": "Enabled",
"visible": "Visible",
"cancel": "Cancel",
"create": "Create",
"createWithItems": "Create ({count} items)"
},
"organizeImports": {
"title": "Järjestä tuonnit",
"itemsBadge": "{count} kohdetta",
"loading": "Ladataan tuotuja huonekaluja…",
"empty": "Tuotuja huonekaluja ei löytynyt. Tuo ensin huonekaluja.",
"loadError": "Tuonteja ei voitu ladata. Yritä uudelleen.",
"refresh": "Päivitä",
"desc": "Tuoitut huonekalut ryhmitellään ehdotettuihin sivuihin. Tarkista jokainen ryhmä ja luo sitten sivut, jotka hyväksyt.",
"selectAll": "Valitse kaikki",
"deselectAll": "Poista kaikki valinnat",
"mode": "Tila",
"modeCreate": "Luo uusia sivuja",
"modeMove": "Siirrä olemassa olevaan sivuun",
"destination": "Kohdesivu",
"destinationChosen": "valittu",
"destinationSearchPlaceholder": "Hae sivuja nimen mukaan…",
"noDestResults": "Sivuja ei löytynyt",
"destinationHint": "Kaikki hyväksytyt ryhmät siirretään tälle sivulle — uutta sivua ei luoda.",
"chooseDestination": "Valitse ensin kohdesivu",
"move": "Siirrä {count} kohdetta",
"name": "Nimi",
"icon": "Kuvake",
"layout": "Asettelu",
"resetSuggestion": "Ehdotettu",
"suggestedLayout": "Ehdotettu: {layout}",
"movedLabel": "{count} siirretty",
"newLabel": "{count} uutta",
"isNew": "uusi",
"price": "Hinta",
"free": "Ilmainen",
"setPrice": "Aseta hinta",
"credits": "Credits",
"points": "Pisteet",
"pointsType": "Tyyppi",
"newPriceHint": "Koskee vain uusia tarjouksia; siirretyt tarjoukset säilyttävät nykyisen hintansa.",
"parent": "Sijoita sivut alle",
"root": "Luettelon juuri",
"importedRoot": "Tuoitut huonekalut",
"cancel": "Peruuta",
"create": "Luo {count} sivua",
"batchLayout": "Aseta asettelu kaikille",
"batchPrefix": "Lisää etuliite kaikkiin otsikoihin",
"applyBatch": "Käytä kaikkiin",
"searchGroups": "Suodata tuontiryhmiä...",
"visualPreview": "Esikatselu",
"resetAll": "Palauta muutokset",
"onlyUnplaced": "Näytä vain sijoittamattomat kohteet",
"errorMaxItems": "Enintään 500 kohdetta ajokohtaisesti. Vähennä valintaa.",
"errorMaxGroups": "Enintään {count} ryhmää ajokohtaisesti. Vähennä valintaa.",
"errorNoName": "Jokaisella hyväksytyllä sivulla on oltava nimi",
"tipMove": "Vinkki: valitse kohdesivu alta siirtääksesi huonekaluja.",
"tipCreate": "Vinkki: valitse tämä tila luodaksesi uusia sivuja.",
"limitHint": "Enintään 500 kohdetta ja 50 ryhmää ajokohtaisesti.",
"errorFailed": "Tuonteja ei voitu järjestää",
"successMove": "{moved, plural, one {1 tarjous} other {# tarjousta}} siirretty sivulle \"{destination}\"{added, plural, =0 {} other {, {added} uutta lisätty}}",
"successCreate": "Luotu {count} sivua, joissa on {moved} siirrettyä ja {added} uutta huonekalua",
"batchLabel": "Erä:",
"layoutFallbackDefault3x3": "3x3",
"itemsUnit": "kohdetta",
"impPrefix": "Imp ",
"isMoved": "siirretty",
"showAll": "Näytä kaikki ({count})",
"showLess": "Näytä vähemmän",
"moveItemTo": "Siirrä kohteeseen…",
"batchMoveTo": "Siirrä valitut kohteeseen…",
"selectedCount": "{count} valittu",
"clearSelection": "Tyhjennä valinta",
"undo": "Kumoa",
"daysLabel": "Päivät",
"daysValue": "{days} päivää",
"dupeSummary": "Kohdesivulla jo: {count} kohdetta",
"layoutPreview": "Asettelun esikatselu",
"emptyCategory": "Ei kohteita tässä luokassa",
"dupeOnDest": "On jo kohdesivulla",
"dupeOnDestShort": "kopio",
"errorPartial": "{failed}/{total} ajosta epäonnistui. Tarkista ja yritä uudelleen.",
"successCreateRuns": "Luotu {count} sivua {runs} ajossa, joissa on {moved} siirrettyä ja {added} uutta huonekalua"
}
},
"discovery": {
"searchPlaceholder": "Name, classname, furniture ID or #offer ID…",
"filterLabel": "Filter offers",
"filters": {
"all": "All offers",
"free": "Free",
"paid": "Paid",
"bundles": "Bundles",
"limited": "Limited editions",
"club_only_yes": "HC Only",
"club_only_no": "Not HC Only",
"have_offer_yes": "Has Offer",
"have_offer_no": "No Offer"
},
"shown": "({count} shown)",
"selected": "{count} selected",
"reset": "Reset filters",
"results": "Showing {count} of {total} offers.",
"selectionHint": "Changing the search or filter clears the selection.",
"noResults": "No offers match the current search and filter.",
"selectVisible": "Select all visible offers",
"clubOnlyFilterLabel": "HC Only Filter",
"haveOfferFilterLabel": "Has Offer Filter"
},
"catalogItemsTable": {
"catalogItemsTable": {
"Items": "Items (",
"Table": "Table",
"Preview": "Preview",
"Move": "Move (",
"Delete": "Delete (",
"BulkPrice": "Bulk Price",
"ResetOrder": "Reset Order",
"SaveOrder": "Save Order",
"Reset": "Reset",
"SaveAll": "Save All (",
"AddItem": "Add Item",
"AddCatalogItem": "Add Catalog Item",
"Youhaveunsavedchanges": "You have unsaved changes (",
"Press": "). Press",
"CtrlS": "Ctrl+S",
"tosave": "to save.",
"Noitemsinthispage": "No items in this page.",
"AddFirstItem": "Add First Item",
"Name": "Name",
"ItemIDs": "Item IDs",
"ItemName": "Item Name",
"Price": "Price",
"Amt": "Amt",
"Status": "Status",
"Actions": "Actions",
"unnamed": "unnamed",
"Free": "Free",
"LTD": "LTD",
"EditItem": "Edit Item #",
"CatalogName": "Catalog Name",
"CatalogSettings": "Catalog Settings",
"FurnitureSettings": "Furniture Settings",
"Credits": "Credits",
"Points": "Points",
"PointsType": "Points Type",
"Amount": "Amount",
"Order": "Order",
"OfferID": "Offer ID",
"LimitedSells": "Limited Sells",
"LimitedStack": "Limited Stack",
"HaveOffer": "Have Offer",
"Yes": "Yes",
"ClubOnly": "Club Only",
"ExtraData": "Extra Data",
"SongDisk": "Song Disk",
"SelectasoundtracktoplaywhenthisitemisusedingameUploadedfrom": "Select a soundtrack to play when this item is used in-game. Uploaded from",
"adminsounds": "/admin/sounds",
"Identity": "Identity",
"BaseID": "Base ID",
"SpriteID": "Sprite ID",
"Type": "Type",
"sFloor": "s (Floor)",
"iWall": "i (Wall)",
"eEffect": "e (Effect)",
"bBadge": "b (Badge)",
"rRobot": "r (Robot)",
"hHabboClub": "h (Habbo Club)",
"pPet": "p (Pet)",
"Dimensions": "Dimensions",
"Width": "Width",
"Length": "Length",
"StackHeight": "Stack Height",
"Interaction": "Interaction",
"InteractionType": "Interaction Type",
"InteractionModes": "Interaction Modes",
"Permissions": "Permissions",
"Extra": "Extra",
"VendingIDs": "Vending IDs",
"CustomParams": "Custom Params",
"EffectIDMale": "Effect ID Male",
"EffectIDFemale": "Effect ID Female",
"ClothingOnWalk": "Clothing On Walk",
"Save": "Save",
"Cancel": "Cancel",
"Move`": "Move",
"itemstoanotherpage": "item(s) to another page",
"TargetPage": "Target Page",
"MoveItems": "Move Items",
"MoveItemtoanotherpage": "Move Item to another page",
"Suggestionsbasedonpreviousmovesforsimilaritems": "Suggestions based on previous moves for similar items.",
"MoveItem": "Move Item",
"BulkPriceUpdate": "Bulk Price Update",
"Field": "Field",
"Operation": "Operation",
"Settovalue": "Set to value",
"Addvalue": "Add value",
"Changebypercentage": "Change by percentage",
"Usenegativevaluestodecreaseeg20for20": "Use negative values to decrease (e.g. -20 for -20%)",
"Usenegativevaluestosubtract": "Use negative values to subtract",
"Apply": "Apply",
"ItemIDssemicolonseparated": "Item IDs (semicolon-separated)",
"itemsCount": "Items ({count})"
}
},
"catalogTranslateTab": {
"TranslateItemNames": "Translate Item Names",
"EditthepublicnameanddescriptionoffurnitureitemsSavingwillupdate": "Edit the public name and description of furniture items. Saving will update:",
"items_basename": "items_base (name)",
"catalogNameauto": "catalogName (auto)",
"FurnitureDatajsonnamedesc": "FurnitureData.json (name + desc)",
"itemsmissingfromFurnitureDatajsonwillbeautoinsertedonsave": "item(s) missing from FurnitureData.json — will be auto-inserted on save",
"Suggest": "Suggest",
"Reset": "Reset",
"SaveAll": "Save All (",
"All": "All (",
"Missing": "Missing (",
"Modified": "Modified (",
"Noitemstotranslateinthispage": "No items to translate in this page.",
"Noitemsmatchthecurrentfilter": "No items match the current filter.",
"Type": "Type",
"ItemName": "Item Name",
"PublicName": "Public Name",
"Description": "Description",
"Status": "Status",
"catalog": "catalog:",
"Modified`": "Modified",
"MissingfromFurnitureDatajson": "Missing from FurnitureData.json",
"Willbeautoinsertedonsave": "Will be auto-inserted on save",
"InFurnitureDatajson": "In FurnitureData.json",
"Catalogmaintenance": "Catalog maintenance",
"Forcethefurnituretablesto100consistencywithFurnitureDatajsonEveryactionrunsinsideadatabasetransactionandrollsbackonerror": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.",
"Refresh": "Refresh",
"Currenthealth": "Current health",
"Fixsprite_id": "Fix sprite_id",
"Fixcatalogoffer_id": "Fix catalog offer_id",
"Removeduplicatesitemscatalog": "Remove duplicates (items + catalog)",
"ReconcileFurnitureDataDB": "Reconcile FurnitureData ↔ DB",
"Fixemulatorconstraints": "Fix emulator constraints",
"Alignitems_baseIDstoFurnitureData": "Align items_base IDs to FurnitureData",
"Moveseveryitems_baseidtotheFurnitureDataspriteidsourceoftruthRewritesallreferencingtablesPreviewfirst": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables. Preview first.",
"Previewchanges": "Preview changes",
"PlannedIDmoves": "Planned ID moves:",
"Newitemstoinsert": "New items to insert:",
"Skippedidoccupied": "Skipped (id occupied):",
"Applyalignment": "Apply alignment",
"Fixeverything": "Fix everything",
"RunsspritefixofferfixreconcilededupandIDalignmentinorderHeavyoperationmakeabackupfirst": "Runs sprite fix, offer fix, reconcile, dedup and ID alignment in order. Heavy operation — make a backup first.",
"Alsomergeduplicatecatalogpagesdoublelinks": "Also merge duplicate catalog pages (double links)",
"Fixeverythingnow": "Fix everything now",
"BulkImport": "Bulk Import",
"BulkImportItems": "Bulk Import Items",
"Itemlist": "Item list",
"Format": "Format:",
"base_idcreditspointspoints_type": "base_id, credits, points, points_type",
"Only": ". Only",
"base_id": "base_id",
"isrequiredotherfieldsdefaultto0Separatorscommaspaceorsemicolon": "is required; other fields default to 0. Separators: comma, space, or semicolon.",
"valid": "valid",
"invalid": "invalid",
"Line": "Line",
"BaseID": "Base ID",
"Credits": "Credits",
"Points": "Points",
"Cancel": "Cancel",
"Import": "Import",
"item": "item"
}
},
"catalogPackages": {
"backend": {
"sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.",
"saveConflict": "Package changed. Reload it before saving",
"publishConflict": "Package changed. Refresh the publication preview",
"catalogChanged": "Catalog changed. Refresh the publication preview",
"missing": "Catalog package not found",
"pageLimit": "A package supports at most 200 categories including descendants",
"offerLimit": "A package supports at most 500 offers",
"payloadLimit": "Package data exceeds 8 MB safety limit",
"membership": "Package membership cannot change",
"hierarchy": "Package hierarchy cannot change",
"references": "Package furniture references cannot change",
"furnitureMissing": "Package furniture reference no longer exists",
"auditWarning": "Package published, but audit logging failed.",
"hotelWarning": "Package published, but the hotel update was not delivered.",
"exportWarning": "Package published, but export scheduling failed.",
"refreshWarning": "Package published. Refresh the page to see the latest catalog."
}
},
"catalogPackagePreview": {
"title": "Catalog preview",
"hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.",
"search": "Search categories or offers",
"playerMode": "Player access",
"rank": "Rank",
"club": "Club",
"vip": "VIP",
"externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.",
"invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.",
"snapshotLimit": "Preview limited to 200 pages and 500 offers.",
"restricted": "{count} pages are hidden by the selected player access settings.",
"categories": "Catalog categories",
"noPages": "This snapshot contains no categories.",
"inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.",
"noMatches": "No matches for this search.",
"offerCount": "{count} offers",
"layout": "Layout: {layout}",
"missingLayout": "Not specified",
"unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.",
"loadingIcons": "Loading furniture icons…",
"assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.",
"assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.",
"emptyPage": "This category has no direct offers. Browse its subcategories.",
"missingIcon": "Icon unavailable",
"amount": "Quantity: {count}",
"bundle": "{count} furniture types",
"changed": "Changed from the saved baseline",
"previous": "Previous",
"next": "Next",
"page": "Page {page} of {total}",
"offerId": "Offer #{id}",
"unknownFurniture": "Furniture name unavailable",
"selectOffer": "Select an offer to inspect its price and furniture references.",
"credits": "Credits",
"duckets": "Duckets",
"diamonds": "Diamonds",
"pointsType": "Points (type {type}):",
"free": "Free",
"specialPricing": "Special pricing: {credits} credits, {points} points (type {type})",
"restrictedOffers": "{count} offers in this category require Club membership.",
"clubOffer": "Club offer"
},
"users": {
"presentation": {
"users": "Users",
"edit": "Edit",
"view": "View",
"rank": "Rank {rank}",
"online": "Online",
"offline": "Offline",
"banned": "Banned",
"credits": "credits",
"diamonds": "diamonds",
"duckets": "duckets",
"pixels": "pixels",
"rooms": "Rooms",
"messages": "Messages",
"trades": "Trades",
"accountDetails": "Account details",
"registered": "Registered",
"lastLogin": "Last login",
"ipRegister": "Registration IP",
"ipCurrent": "Current IP",
"machineId": "Device ID",
"email": "Email",
"gender": "Gender",
"never": "Never",
"findIp": "Find users with this IP",
"enabled": "Enabled",
"disabled": "Disabled",
"unavailable": "Not available",
"noBadges": "No badges assigned"
},
"create": {
"newUser": "New user",
"title": "Create user",
"description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.",
"username": "Username",
"email": "Email",
"password": "Password",
"rank": "Rank",
"rankOption": "Rank {rank}",
"motto": "Motto (optional)",
"usernamePlaceholder": "NewHabbo",
"passwordPlaceholder": "At least 6 characters",
"mottoPlaceholder": "I'm new here!",
"generate": "Generate",
"passwordGenerated": "Password generated in the password field.",
"required": "Username, email and password are required.",
"invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.",
"passwordLength": "The password must contain at least 6 characters.",
"created": "User {username} created."
},
"overview": {
"title": "Overview",
"hint": "Up to 5 recent records per source. Only sections you can access are shown.",
"restricted": "You do not have permission to view operational records.",
"sanctions": "Recent bans",
"mute": "Active mute",
"tickets": "Support tickets",
"help": "Help center requests",
"reports": "In-game reports",
"transactions": "Payments",
"purchases": "Catalog purchases",
"activity": "Recorded staff actions",
"openModule": "Open management",
"purchaseHint": "Recorded quantities and currency costs.",
"purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})",
"activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.",
"muteUntil": "Muted until {date}",
"error": "This source could not be loaded. Refresh the page to try again.",
"empty": "No records found.",
"status": {
"active": "Active",
"expired": "Expired",
"open": "Open",
"closed": "Closed",
"reported": "Reported user",
"reporter": "Reporter"
}
},
"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",
"tabInfo": "Account Info",
"tabBadges": "Badges ({count})",
"tabRooms": "Rooms ({count})",
"tabSanctions": "Sanctions ({count})",
"tabActivity": "Activity",
"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"
},
"usersTable": {
"Online": "Online",
"Offline": "Offline",
"Ban": "Ban",
"users": "users",
"Permanentbanleavedurationat1": "Permanent ban: leave duration at -1.",
"Reason": "Reason",
"Durationseconds1permanent": "Duration (seconds, -1 = permanent)",
"Cancel": "Cancel",
"Adjustcurrencyfor": "Adjust currency for",
"Type": "Type",
"Credits": "Credits",
"PixelsDuckets": "Pixels (Duckets)",
"PointsDiamonds": "Points (Diamonds)",
"Amountpositivegivenegativetake": "Amount (positive = give, negative = take)",
"Apply": "Apply",
"Givebadgeto": "Give badge to",
"Badgecode": "Badge code",
"Give": "Give",
"userstotal": "users total",
"accountssharethisidentifier": "accounts share this identifier",
"staff": "staff",
"and": "… and",
"more": "more",
"EditProfile": "Edit Profile",
"Bans": "Bans",
"Badges": "Badges (",
"Rooms": "Rooms (",
"Activity": "Activity",
"AccountInfo": "Account Info",
"EditUser": "Edit User",
"Username": "Username",
"Email": "Email",
"Rank": "Rank",
"Motto": "Motto",
"Pixels": "Pixels",
"Diamonds": "Diamonds",
"Duckets": "Duckets",
"RecentMessages": "Recent Messages (",
"Norecentmessages": "No recent messages.",
"Room": "Room #",
"RecentCommands": "Recent Commands (",
"Norecentcommands": "No recent commands.",
"Nobadges": "No badges",
"Thisuserdoesntownanyrooms": "This user doesn't own any rooms.",
"Sanctionstimeline": "Sanctions timeline",
"Muteduntil": "Muted until",
"NobansmutesCFHorstaffactionsrecordedforthisuser": "No bans, mutes, CFH, or staff actions recorded for this user."
}
},
"search": {
"furniture": "Furniture",
"catalog": "Catalog categories",
"tickets": "Support tickets",
"loading": "Searching…",
"hint": "Enter a numeric ID or at least 2 characters, or choose a page.",
"retry": "Retry",
"description": "Search pages, users, furniture, catalog categories, articles and support tickets.",
"partialError": "Some results could not be loaded. Try again.",
"pages": "Pages and tools",
"loadError": "Records could not be loaded. You can still open the pages above.",
"placeholder": "Search pages, users, rooms…",
"users": "Users",
"articles": "Articles",
"rooms": "Rooms",
"guilds": "Groups",
"shop": "Shop",
"rareValues": "Rare values",
"noResults": "No results found."
},
"permissionPreview": {
"title": "Role access preview",
"description": "Inspect CMS access without changing a session or impersonating a user.",
"back": "Back to permissions",
"role": "Role",
"show": "Show access",
"missing": "Select an existing role.",
"entryAllowed": "Housekeeping entry allowed",
"entryDenied": "Housekeeping entry denied: dashboard permission missing",
"superAdmin": "This rank currently receives the highest-rank override.",
"scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.",
"sections": "Sections",
"allowed": "Allowed",
"denied": "Denied",
"actions": "CMS permissions",
"actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.",
"granted": "Granted",
"notGranted": "Not granted"
},
"operationsCenter": {
"title": "Operations center",
"hint": "Track your durable imports and repairs, and the shared catalog export queue.",
"syncTitle": "Source synchronization",
"syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.",
"openSync": "Open synchronization and export",
"openImports": "Open furniture imports"
},
"operationsExport": {
"title": "Catalog repository export",
"hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.",
"loadError": "Unable to load export status",
"queueError": "Unable to queue export",
"loading": "Loading…",
"disabled": "Export is disabled. Open synchronization to review its configuration.",
"active": "Waiting for {count} operation(s) to finish.",
"running": "Export in progress…",
"pending": "{count} update(s) queued for export.",
"idle": "No pending updates.",
"lastCommit": "Last published commit:",
"lastAttempt": "Last attempt: {date}",
"queuing": "Queuing…",
"queue": "Export now / retry"
},
"performance": {
"title": "Request performance",
"scope": "Server measurements for authenticated HK APIs and selected public page components. Choose a group below.",
"refresh": "Refresh",
"shared": "Shared diagnostics via Redis.",
"local": "Local diagnostics for this instance only; cleared on restart.",
"retention": "Up to 200 recent samples per group, retained for one hour. Collection is best effort.",
"search": "Route or operation ID",
"sort": "Order",
"slowest": "Slowest first",
"recent": "Most recent first",
"threshold": "Duration filter",
"all": "All durations",
"slow": "At least 1 second",
"explanation": "Database time includes completed queries and pool waits. External time covers monitored curl downloads only. Concurrent calls can add up to more than the request duration; these values are not exclusive parts of the total.",
"empty": "No matching requests yet. Use the HK, then refresh this page.",
"database": "Database",
"external": "Monitored downloads",
"calls": "{count} calls",
"failures": "{count} failures",
"streaming": "Streaming response: timing stops at response creation, not at the end of the operation.",
"operation": "Operation ID",
"kind": "Measurement group",
"adminApi": "HK APIs",
"publicPage": "Public pages",
"applyFilters": "Apply filters",
"publicBoundary": "Public measurements cover the root server page component on /me, news, profiles, events and search. They exclude metadata, separately rendered children, network transfer and browser rendering. Component outcomes are not HTTP response codes. Static build invocations are excluded.",
"outcomes": {
"completed": "Component completed",
"failed": "Component failed",
"redirect": "Redirect",
"not-found": "Page not found"
}
},
"importProgress": {
"validating": "Checking local data",
"downloading": "Downloading files",
"converting": "Converting to Nitro",
"checking_sources": "Searching configured sources",
"writing_db": "Saving SQL and catalog",
"writing_furnidata": "Updating furnidata",
"translating": "Updating translations",
"current": "Current phase: {phase}",
"last": "Last phase: {phase}",
"elapsed": "{seconds}s in this phase",
"recovered": "Bundle recovered from {source} · revision {revision}. Classname, type and revision matched; bundle identity validated.",
"recoveryHint": "You can continue. If the original files fail, the importer will search enabled sources for a matching classname, type and revision, then validate the Nitro bundle. Unavailable files can still be attached manually."
},
"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",
"totalAccounts": "{count} total accounts"
},
"events": {
"newEvent": "+ New event",
"createTitle": "Create event",
"createSubtitle": "Schedule a new hotel event",
"searchPlaceholder": "Search events…",
"colId": "ID",
"colTitle": "Title",
"colType": "Type",
"colStarts": "Starts",
"colStatus": "Status",
"colActions": "Actions",
"statusPublished": "Published",
"statusDraft": "Draft",
"statusCancelled": "Cancelled",
"statusCompleted": "Completed",
"statRegistrations": "Registrations",
"statPrizes": "Prizes",
"statWinners": "Winners",
"statTime": "Time",
"maxPlayers": "Max: {count}",
"timeUpcoming": "Upcoming",
"timePast": "Past",
"endsAt": "Ends: {date}",
"userFallback": "User #{id}",
"registrationsTitle": "Registrations ({count})",
"noRegistrations": "No registrations yet.",
"noPrizes": "No prizes configured yet.",
"noWinners": "No winners yet.",
"addPrize": "Add prize",
"addWinner": "Add winner",
"formEditTitle": "Edit event",
"formDetailsTitle": "Event details",
"formTitle": "Title",
"formEventType": "Event type",
"formSelectType": "Select type",
"formDescription": "Description",
"formStartsAt": "Starts at",
"formEndsAt": "Ends at",
"formSelectStart": "Select start date",
"formSelectEnd": "Select end date",
"formMaxPlayers": "Max players",
"formUnlimited": "Unlimited",
"formRoomId": "Room ID",
"formOptional": "Optional",
"formImageUrl": "Image URL",
"formSaving": "Saving…",
"formUpdate": "Update event",
"formCreate": "Create event",
"toastUpdated": "Event updated!",
"toastCreated": "Event created!"
},
"polls": {
"newPoll": "+ New poll",
"createTitle": "Create poll",
"createSubtitle": "Create a new community poll or survey",
"searchPlaceholder": "Search polls…",
"colId": "ID",
"colTitle": "Title",
"colStatus": "Status",
"colType": "Type",
"colCreated": "Created",
"colActions": "Actions",
"statusActive": "Active",
"statusDraft": "Draft",
"statusClosed": "Closed",
"typeMultiple": "Multiple choice",
"typeSingle": "Single choice",
"statVoters": "Total voters",
"statQuestions": "Questions",
"statVotes": "Total votes",
"questionsTitle": "Questions ({count})",
"addQuestion": "Add question",
"noQuestions": "No questions yet. Add your first question above.",
"resultsTitle": "Results",
"formEditTitle": "Edit poll",
"formDetailsTitle": "Poll details",
"formTitle": "Title",
"formDescription": "Description",
"formStartsAt": "Starts at",
"formEndsAt": "Ends at",
"formSelectStart": "Select start date",
"formSelectEnd": "Select end date",
"formShowResults": "Show results to voters",
"formAllowMultiple": "Allow multiple answers",
"formSaving": "Saving…",
"formUpdate": "Update poll",
"formCreate": "Create poll",
"toastUpdated": "Poll updated!",
"toastCreated": "Poll created!",
"id": {
"pollQuestions": {
"Question": "Question",
"Type": "Type",
"SingleChoice": "Single Choice",
"MultipleChoice": "Multiple Choice",
"FreeText": "Free Text",
"SortOrder": "Sort Order",
"Optionsoneperline": "Options (one per line)",
"Cancel": "Cancel",
"votes": "votes (",
"freetextresponses": "free-text responses",
"totalvote": "total vote",
"CtrlEntertosendYourreplywillbemarkedasstaff": "Ctrl+Enter to send. Your reply will be marked as staff.",
"Ticketclosed": "Ticket closed",
"Actions": "Actions",
"Status": "Status",
"Priority": "Priority",
"Assignto": "Assign to",
"Unassigned": "Unassigned",
"Assigntome": "Assign to me",
"Requester": "Requester",
"Rank": "Rank",
"Registered": "Registered",
"Details": "Details",
"Created": "Created",
"Closed": "Closed",
"Messages": "Messages",
"NewTemplate": "New Template",
"Title": "Title",
"Category": "Category",
"Content": "Content",
"Notemplatesyet": "No templates yet."
}
}
},
"multiAccounts": {
"minAccounts": "Min accounts per cluster",
"resultLimit": "Result limit",
"refresh": "Refresh",
"noClusters": "No clusters found at the current thresholds."
},
"devops": {
"noEmulatorErrors": "No emulator errors found",
"noRecentErrors": "No recent errors",
"cmsErrors": "CMS error center",
"page": {
"Database": "Database",
"Latency": "Latency:",
"Redis": "Redis",
"Cacheratelimitssessions": "Cache / rate limits / sessions",
"Emulator": "Emulator",
"Version": "Version:",
"OnlineUsers": "Online Users",
"LiverosterinCommandoCentrum": "Live roster in CommandoCentrum",
"Errors24h": "Errors (24h)",
"Emulatorerrorstoday": "Emulator errors today",
"RecentEmulatorErrors": "Recent Emulator Errors",
"CMSerrorcenter": "CMS error center",
"totalerrorsshowingpage": "total errors — showing page",
"Previous": "Previous",
"Page": "Page",
"Next": "Next",
"DevOps": "DevOps",
"Server": "Server",
"Browser": "Browser",
"bashcmsinstall": "bash cms install",
"bashcmsupdate": "bash cms update",
"ExportCSV": "Export CSV",
"ExportJSON": "Export JSON",
"Advancedkeyvalue": "Advanced key / value",
"Rawwebsite_settingsrowsPreferthegroupedformaboveforcommonkeys": "Raw website_settings rows. Prefer the grouped form above for common keys.",
"Showkeysalreadyintheform": "Show keys already in the form",
"Addoverwrite": "Add / overwrite",
"Nomatchingsettings": "No matching settings",
"Save": "Save",
"Export": "Export",
"keys": "keys",
"readonly": "read-only",
"commentspreserved": "comments preserved",
"Thisfileisreadonly": "This file is read-only.",
"CommentsarepreservedsavingonlypatcheschangedvaluelinesIfakeyusesanonstandardformatandcannotbepatchedinplacethefileisreserializedcommentslostandyouwillbewarned": "Comments are preserved: saving only patches changed value lines. If a key uses a non-standard format and cannot be patched in-place, the file is reserialized (comments lost) and you will be warned.",
"Parseerror": "Parse error:",
"Noentries": "No entries.",
"Prev": "Prev"
}
},
"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",
"databaseError": "Tags could not be loaded. Please try again.",
"totalTags": "Total tags",
"inUse": "In use",
"attachedToContent": "Attached to content",
"unused": "Unused",
"allTags": "All tags"
},
"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",
"publicFlatcats": "Public room categories",
"markedPublic": "Categories marked as public",
"visibleRooms": "Visible rooms",
"rows": "rows",
"unnamed": "Unnamed room"
},
"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"
},
"withButton": "With a button",
"smallBoxes": "Small boxes"
},
"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?",
"deleteSuccess": "Advertisement deleted!",
"deleteError": "Failed to delete advertisement.",
"adsCount": "Total ads",
"latest": "Latest",
"mostRecentAd": "Most recent ad",
"allAds": "All advertisements",
"colPreview": "Preview",
"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"
},
"colId": "ID"
},
"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",
"iconEmoji": "Icon or emoji"
},
"totalBoxes": "Total boxes",
"active": "Active",
"shownOnHomePage": "Shown on the home page",
"position": "Position",
"boxes": "Content boxes",
"hidden": "Hidden",
"hide": "Hide",
"activate": "Activate"
},
"photos": {
"title": "Photo Moderation",
"subtitle": "Recent in-game camera photos",
"purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged.",
"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}",
"photosShown": "Shown",
"rooms": "Rooms",
"users": "Users",
"distinctRooms": "Distinct rooms on this page",
"distinctPhotographers": "Distinct photographers on this page",
"total": "Total photos",
"recentPhotos": "Recent photos",
"pageOf": "Page {page} of {last} · {total} total"
},
"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"
},
"activeBans": "Active bans",
"permanent": "Permanent bans",
"accountBans": "Account bans",
"userIdPlaceholder": "User ID",
"typeAccount": "Account",
"typeIp": "IP address",
"typeMachine": "Device",
"typeSuper": "Account, IP and device",
"hoursPlaceholder": "Duration in hours",
"reasonPlaceholder": "Reason for the ban",
"ban": "Ban user",
"colUserId": "User ID",
"lift": "Lift ban"
},
"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",
"whitelisted": "Allowed IP addresses",
"blacklisted": "Blocked IP addresses",
"asnPlaceholder": "ASN (optional)",
"colAsn": "ASN"
},
"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",
"protection": "VPN protection",
"on": "Enabled",
"off": "Disabled",
"providerLabel": "Provider: {provider}",
"notScreened": "Connections are not checked for VPN use.",
"settings": "VPN settings",
"provider": "Provider",
"providerHint": "Choose the service used to check incoming connections.",
"blockMessage": "Blocked connection message",
"blockMessagePlaceholder": "Please disable your VPN and try again.",
"blockMessageHint": "Shown when a connection is blocked by VPN protection.",
"rawIpTitle": "IP address lists",
"rawIpDescription": "Manage individual addresses in hotelalert to online users.",
"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",
"colWhen": "When",
"colSeverity": "Severity",
"colMessage": "Message",
"colActions": "Actions"
},
"hubs": {
"newsMedia": "News & media",
"newsMediaSubtitle": "Articles, photos, banners, ads and media library",
"siteContent": "Site content",
"siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes",
"engagement": "Engagement",
"engagementSubtitle": "Events, polls and support tickets",
"users": "Users",
"usersSubtitle": "Directory, online players, applications and teams",
"access": "Access & security",
"accessSubtitle": "Bans, IP, VPN, permissions and word filter",
"moderation": "Moderation",
"moderationSubtitle": "Reports, actions and moderation team",
"catalog": "Catalog & rares",
"catalogSubtitle": "Catalog, rares, badges, achievements and sounds",
"shop": "Shop & payments",
"shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar",
"radio": "Radio",
"radioSubtitle": "Stream, DJ tools, embed and monitoring",
"settings": "Settings",
"settingsSubtitle": "CMS config, theme, maintenance and related tools",
"tools": "Tools",
"toolsSubtitle": "RCON, rooms, import and translations",
"observability": "Observability",
"observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts",
"tabs": {
"articles": "Articles",
"photos": "Photos",
"banners": "Banners",
"ads": "Ads",
"media": "Media",
"navigator": "Navigator",
"help": "Help",
"boxes": "Boxes",
"tags": "Tags",
"prefixes": "Prefixes",
"events": "Events",
"eventTypes": "Event types",
"polls": "Polls",
"tickets": "Support desk",
"ticketInbox": "Inbox",
"helpTickets": "Help center",
"templates": "Templates",
"directory": "Directory",
"multiAccounts": "Multi-accounts",
"online": "Online",
"applications": "Applications",
"teams": "Teams",
"bans": "Bans",
"ip": "IP",
"vpn": "VPN",
"permissions": "Permissions",
"wordFilter": "Word filter",
"overview": "Overview",
"actions": "Actions",
"cfh": "CFH",
"team": "Team",
"catalogTab": "Catalog",
"rares": "Rares",
"badges": "Badges",
"achievements": "Achievements",
"sounds": "Sounds",
"shopTab": "Shop",
"transactions": "Transactions",
"vouchers": "Vouchers",
"subscriptions": "Subscriptions",
"calendar": "Calendar",
"history": "History",
"moderationTab": "Moderation",
"monitoring": "Monitoring",
"settingsTab": "Settings",
"embed": "Embed",
"apiKeys": "API keys",
"points": "Points",
"ranks": "Ranks",
"autoDj": "Auto DJ",
"cms": "CMS",
"theme": "Theme",
"themeBuilder": "Theme Builder",
"maintenance": "Maintenance",
"favicon": "Favicon",
"emulator": "Emulator",
"email": "Email",
"housekeeping": "Permission archive",
"commando": "Commando",
"rooms": "Rooms",
"import": "Import",
"studio": "Studio",
"importOverview": "Overview",
"importBadges": "Badges",
"importFurni": "Furni",
"importUpload": "Upload",
"importClothing": "Clothing",
"importEffects": "Effects",
"importPets": "Pets",
"importClone": "Clone",
"importSync": "Sync",
"importRepairIcons": "Repair icons",
"importAudit": "Audit",
"translations": "Translations",
"logs": "Logs",
"audit": "Audit",
"chat": "Chat",
"commands": "Commands",
"trades": "Trades",
"analytics": "Analytics",
"activity": "Activity",
"economy": "Economy",
"devops": "DevOps",
"errors": "Errors",
"alerts": "Alerts",
"toolsGroup": "Tools",
"cmsErrors": "CMS errors",
"referrals": "Suositukset",
"dailyRewards": "Päivittäiset palkinnot"
},
"events": "Events",
"eventsSubtitle": "Hotel events and event types",
"tickets": "Tickets",
"ticketsSubtitle": "Unified inbox over CMS support desk and help-center queues",
"staffAccess": "Ranks & permissions",
"staffAccessSubtitle": "Staff ranks and live access. Archive is compare/export only.",
"analytics": "Analytics",
"analyticsSubtitle": "Hotel activity, retention and economy",
"devops": "DevOps",
"devopsSubtitle": "Service health and emulator errors",
"import": "Import",
"importSubtitle": "Furni, badges, clothing and asset tools"
},
"wordfilter": {
"title": "Word Filter",
"subtitle": "Manage filtered words and phrases in the hotel",
"filteredWords": "Filtered words",
"addWord": "Add word",
"addWords": "Add words",
"words": "Words",
"noWords": "No filtered words yet",
"delete": "Delete",
"confirmDeleteTitle": "Remove word",
"confirmDelete": "Remove \"{word}\" from the filter?",
"added": "Word added to filter",
"deleted": "Word removed from filter",
"addError": "Could not add word (it may already exist)",
"deleteError": "Could not remove word",
"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?",
"maintenance": "Maintenance",
"hotelLockedDown": "Access to the hotel is restricted.",
"hotelOpen": "The hotel is open.",
"minLoginRank": "Minimum login rank",
"duringMaintenance": "During maintenance",
"splashMessage": "Maintenance message",
"set": "Configured",
"empty": "Empty",
"currentState": "Current status",
"maintenanceCurrently": "Maintenance: {status}",
"onlyRankCanLogin": "Only users with rank {rank} or higher can log in.",
"hotelOpenToEveryone": "All eligible users can log in.",
"settings": "Settings",
"enableMaintenance": "Enable maintenance mode",
"minLoginRankLabel": "Minimum rank allowed during maintenance",
"maintenanceMessageLabel": "Message shown to visitors",
"maintenanceMessagePlaceholder": "Explain why the hotel is unavailable.",
"saveChanges": "Save changes"
},
"housekeeping": {
"title": "Permission archive",
"subtitle": "Old backup table. Real access is managed under Permissions — this page is compare + export only.",
"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!",
"confirmClearAllDesc": "This will remove every permission entry from the database. Are you sure?",
"confirmDeletePermission": "Delete this permission permanently?",
"confirmBulkDelete": "Delete {count} selected permissions?",
"deleteSelected": "Delete {count} selected",
"selectAllMatching": "Select all {count} matching",
"cancel": "Cancel",
"confirm": "Confirm",
"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 with the fields permission, minRank, description, groupName and 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",
"auditTime": "Time",
"auditUser": "User",
"auditAction": "Action",
"auditTarget": "Target",
"save": "Save",
"importTitle": "Import permissions",
"legacyBannerTitle": "Use Permissions to change who can do what",
"legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.",
"legacyBannerCta": "Open Permissions",
"writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.",
"tabCompare": "ACL compare",
"tabExportOnly": "Export archive",
"compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).",
"compareAligned": "{count} aligned",
"compareMissingAcl": "{count} missing in ACL",
"compareMismatch": "{count} rank mismatch",
"colAclPresent": "In ACL",
"colAclMinRank": "ACL min rank",
"colStatus": "Status",
"statusAligned": "Aligned",
"statusMissingAcl": "Missing in ACL",
"statusMismatch": "Rank differs",
"exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival."
},
"rooms": {
"title": "Rooms",
"subtitle": "Search and manage hotel rooms",
"search": "Search",
"searchPlaceholder": "Search by name, owner or ID…",
"searchResults": "{count, plural, one {# room} other {# rooms}} found for \"{query}\"",
"noResults": "No rooms found",
"colId": "ID",
"colName": "Name",
"colOwner": "Owner",
"colUsers": "Users",
"colState": "State",
"colCategory": "Category",
"colCreated": "Created",
"colActions": "Actions",
"stateOpen": "Open",
"stateClosed": "Closed",
"stateLocked": "Locked",
"stateInvisible": "Invisible",
"detail": {
"title": "Room: {name}",
"subtitle": "Owned by {owner}",
"overview": "Overview",
"actions": "Actions",
"description": "Description",
"noDescription": "No description",
"owner": "Owner",
"users": "Users online",
"maxUsers": "Max users",
"category": "Category",
"state": "State",
"tags": "Tags",
"noTags": "No tags",
"created": "Created",
"deleteRoom": "Delete room",
"confirmDelete": "Delete room \"{name}\"? This cannot be undone.",
"enterRoom": "Enter room",
"changeOwner": "Change owner",
"changeOwnerPlaceholder": "New owner username"
},
"id": {
"roomEditForm": {
"RoomDetails": "Room Details",
"Name": "Name",
"Description": "Description",
"State": "State",
"Open": "Open",
"Locked": "Locked",
"Password": "Password",
"Invisible": "Invisible",
"MaxUsers": "Max Users",
"SaveChanges": "Save Changes",
"DeleteRoom": "Delete Room",
"QuickActions": "Quick Actions",
"Owner": "Owner",
"CurrentUsers": "Current Users",
"RCONCommands": "RCON Commands",
"KickAll": "Kick All",
"Lock": "Lock",
"Unlock": "Unlock",
"Reload": "Reload",
"users": "users",
"Owner`": "Owner:",
"Furniture": "Furniture",
"Edit": "Edit",
"AccessState": "Access State",
"Score": "Score",
"Category": "Category",
"roomstotal": "rooms total",
"Edit`": "Edit:",
"View": "View",
"Refresh": "Refresh",
"AutorefreshON": "Auto-refresh ON",
"AutorefreshOFF": "Auto-refresh OFF",
"Every": "Every",
"Lastupdated": "Last updated:",
"Search": "Search",
"settings": "settings",
"changed": "changed",
"SaveSync": "Save & Sync",
"clear": "clear",
"Nosettingsfound": "No settings found.",
"Perpage": "Per page"
}
}
},
"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": "
Dear {username},
", "variables": "Available variables", "variablesHint": "{username}, {email}, {hotel_name}", "save": "Save template", "saving": "Saving…", "cancel": "Cancel", "variablesPlaceholder": "Variables, separated by commas", "active": "Active" }, "create": "Create template", "save": "Save template", "updated": "Updated: {date}" }, "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?", "saved": "Theme settings saved.", "presetApplied": "Preset applied: {preset}", "typographyLayout": "Typography and layout", "font": "Font", "borderRadius": "Corner radius", "page": { "Themesavedaspreset": "Theme saved as preset.", "Appliedtheme": "Applied theme “", "Themerenamed": "Theme renamed.", "Themedeleted": "Theme deleted.", "Yoursavedthemes": "Your saved themes", "SavethecurrentconfigurationasanamedpresetthenloaditanytimePerfectforkeepingmultiplebrandthemesreadytoswitch": "Save the current configuration as a named preset, then load it anytime. Perfect for keeping multiple brand themes ready to switch.", "Savecurrenttheme": "Save current theme", "Nosavedthemesyetsaveoneabove": "No saved themes yet — save one above.", "Load": "Load", "Delete": "Delete", "Lightmode": "☀ Light mode", "ThesecolorsareusedwhenvisitorsviewyoursiteinlightmodedefaultMakesurebodytextcontrastswellwithboththepagebackgroundandcardsurface": "These colors are used when visitors view your site in light mode (default). Make sure body text contrasts well with both the page background and card surface.", "Pagetextcolors": "Page & text colors", "BackgroundssurfacesandtextcolorsTextcolorsmustcontrastwiththeirbackgroundsforreadability": "Backgrounds, surfaces, and text colors. Text colors must contrast with their backgrounds for readability.", "Buttonslinks": "Buttons & links", "ButtonbackgroundstextonbuttonsandlinkcolorsButtontextmustcontrastwithitsbuttonbackground": "Button backgrounds, text on buttons, and link colors. Button text must contrast with its button background.", "Gradients": "Gradients", "CardheaderandherosectiongradientTheseblendfromstartendacrossheadingsandbanners": "Card header and hero section gradient. These blend from start → end across headings and banners.", "AdminpanelHK": "🛠 Admin panel (HK)", "OverridecolorsfortheHousekeepingadminpanelTheseapplyacrossbothlightanddarkmodesLeaveemptytouseautoderiveddefaults": "Override colors for the Housekeeping admin panel. These apply across both light and dark modes. Leave empty to use auto-derived defaults.", "Darkmode": "🌙 Dark mode", "ThesecolorsareusedwhenvisitorsswitchtodarkmodeDarkbackgroundsneedlightertextforgoodcontrast": "These colors are used when visitors switch to dark mode. Dark backgrounds need lighter text for good contrast.", "Duplicate": "Duplicate", "Editing": "Editing:", "Light": "☀ Light", "Dark": "☾ Dark", "SaveThemeValues": "Save Theme Values", "Colors": "Colors (", "mode": "mode)", "OnlyvaluesyousethereoverridetheparentscopeLeaveemptytoinherit": "Only values you set here override the parent scope. Leave empty to inherit.", "TogglevisibilityofblocksinthisscopeHiddenblocksuse": "Toggle visibility of blocks in this scope. Hidden blocks use", "displaynone": "display: none", "LayoutSettings": "Layout Settings", "ControlspacingwidthandgridsettingsforthisscopeValuesareappliedasCSScustomproperties": "Control spacing, width, and grid settings for this scope. Values are applied as CSS custom properties.", "EffectsTransitions": "Effects & Transitions", "Controlshadowsbordersandanimationtimingforthisscope": "Control shadows, borders, and animation timing for this scope.", "MediaBackgrounds": "Media & Backgrounds", "Setcustomlogosbackgroundimagesandbackgroundpropertiesforthisscope": "Set custom logos, background images, and background properties for this scope.", "CustomCSS": "Custom CSS", "AddcustomCSSthatapplieswithinthisscopeUse": "Add custom CSS that applies within this scope. Use", "asaplaceholderforthescopeselectoreg": "as a placeholder for the scope selector (e.g.", "contentcard": "& .content-card", "border2pxsolidred": "border: 2px solid red;", "CustomHTML": "Custom HTML", "AddcustomHTMLthatinjectsintothepageforthisscopeUseforcustombannersscriptsorcontentblocks": "Add custom HTML that injects into the page for this scope. Use for custom banners, scripts, or content blocks." } }, "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 or ICO. Max 2 MB.", "upload": "Upload", "uploading": "Uploading…", "delete": "Remove", "deleting": "Removing…", "cancel": "Cancel", "saved": "Favicon saved successfully!", "deleted": "Favicon removed successfully!", "error": "Something went wrong", "confirmDelete": "Remove the favicon? The site will no longer show a custom favicon.", "generator": { "title": "Generate favicon", "text": "Text", "bgColor": "Background color", "textColor": "Text color", "rounded": "Rounded corners", "save": "Save as favicon" } }, "import": { "title": "Import", "subtitle": "Import assets from external sources into your hotel.", "badges": "Badges", "badgesDescription": "Import and manage badge assets from external sources.", "furni": { "nitroEditorDialog": { "EditNitro": "Edit Nitro", "dir": "dir", "layers": "layers", "colors": "colors", "anim": "anim", "Visual": "Visual", "JSON": "JSON", "Dimensions": "Dimensions", "Xwidth": "X (width)", "Ydepth": "Y (depth)", "Zheight": "Z (height)", "Directions": "Directions", "8active": "/ 8 active", "ChoosetheavailablerotationsKeepatleastonedirectionactive": "Choose the available rotations. Keep at least one direction active.", "Interaction": "Interaction", "CanStandOn": "Can Stand On", "CanSitOn": "Can Sit On", "CanLayOn": "Can Lay On", "Autodetectfromname": "Auto-detect from name", "Clicklimit": "Click limit:", "Modes": "Modes:", "Types": "Types", "VisualizationType": "Visualization Type", "LogicType": "Logic Type", "Layer": "Layer", "ZIndex": "Z-Index", "Alpha": "Alpha", "Ink": "Ink", "Colori": "Colori", "ColorVariant": "Color Variant #", "Unsavedchanges": "Unsaved changes", "Reset": "Reset", "Cancel": "Cancel", "Save": "Save", "Editfurniture": "Edit furniture", "Wallposition": "Wall position", "Format": "Format:", "Rotation07": "Rotation (0-7)", "Extradata": "Extra data", "Itemstatedataegdicevaluestickynotetextcolor": "Item state/data (e.g. dice value, sticky note text, color)", "autoDetected": "Auto-detected", "loadFailed": "Failed to load furniture data", "networkErrorLoad": "Network error loading furniture data", "invalidJsonSwitchTabs": "Invalid JSON; please fix errors before switching tabs.", "resetToOriginal": "Reset to original", "invalidJson": "Invalid JSON format", "saveFailed": "Failed to save furniture data" }, "upload": { "uploadFurniClient": { "FurnitureDetails": "Furniture Details", "Classname": "Classname *", "Name": "Name *", "Description": "Description", "Type": "Type *", "Floors": "Floor (s)", "Walli": "Wall (i)", "Widthx": "Width (x)", "Lengthy": "Length (y)", "Interaction": "Interaction", "Canstandon": "Can stand on", "Cansiton": "Can sit on", "Canlayon": "Can lay on", "GenerateSQL": "Generate SQL", "Customparams": "Custom params", "Files": "Files", "nitrofile": ".nitro file *", "Thenitrobundlefilemax50MB": "The .nitro bundle file (max 50MB)", "IconPNG": "Icon (PNG)", "Optional64x64PNGiconmax2MBLeaveemptytoskip": "Optional 64x64 PNG icon (max 2MB). Leave empty to skip.", "ImportSuccessful": "Import Successful", "Classname`": "Classname:", "ItemID": "Item ID:", "CatalogID": "Catalog ID:", "SQLfile": "SQL file:", "Warnings": "Warnings:", "ImportAnother": "Import Another", "Back": "Back", "Room": "Room #", "Owner": "· Owner:", "Reload": "Reload", "KickAll": "Kick All", "Alltypes": "All types", "Flooronly": "Floor only", "Wallonly": "Wall only", "Allowners": "All owners", "Flat": "Flat", "Grouped": "Grouped", "selected": "selected", "Clear": "Clear", "Deleteselected": "Delete selected", "Name`": "Name", "Type`": "Type", "Position": "Position", "Rot": "Rot", "Owner`": "Owner", "Actions": "Actions", "Thisroomhasnofurniture": "This room has no furniture.", "Noitemsmatchyourfilters": "No items match your filters.", "Showing": "Showing", "Furniture": "Furniture", "Count": "Count", "Action": "Action", "Noitems": "No items.", "Deleteall": "Delete all", "errorClassname": "Classname required", "errorNitroRequired": ".nitro file required", "errorNitroSize": ".nitro file must be under 50MB" } } }, "furniDescription": "Import furniture definitions, SWF files, and icons.", "upload": "Upload .nitro", "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", "clothing": { "importClothingClient": { "libraries": "libraries", "onthispage": "on this page", "missinghere": "missing here", "Import": "Import", "selected": "selected", "Nolibrariesfound": "No libraries found", "Imported": "Imported", "Page": "Page", "Prev": "← Prev", "Next": "Next →", "sets": "sets", "Nosetsfound": "No sets found", "Libraries": "Libraries", "Sets": "Sets", "None": "None", "Enabledretiredsourcesareexcludedfromcountsandimports": "Enabled (retired sources are excluded from counts and imports)", "Save": "Save", "Cancel": "Cancel", "CloneSources": "Clone Sources", "AddSource": "Add Source", "NosourcesyetAddonetostartcloningfurnifromanotherhotel": "No sources yet. Add one to start cloning furni from another hotel.", "total": "total", "present": "present", "clonable": "clonable", "Clone": "Clone", "Cloneallclonable": "Clone all clonable (", "Nofurnifound": "No furni found", "Rev": "Rev:", "Present": "Present", "Loadingsources": "Loading sources…", "Selectasourceabovetobrowseandclonefurni": "Select a source above to browse and clone furni.", "effects": "effects", "imported": "imported", "available": "available", "Noeffectsfound": "No effects found", "pets": "pets", "missing": "missing", "Nopetsfound": "No pets found" } }, "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.", "sync": "Auto Sync", "syncDescription": "Automatically import missing furniture from all configured sources.", "repairIcons": "Repair Icons", "repairIconsDescription": "Download any missing icon files for furniture already in the database.", "audit": { "auditClient": { "Repairmissingicons": "Repair missing icons", "Repairmissingnitro": "Repair missing .nitro", "GeneratecatalogSQL": "Generate catalog SQL", "ApplySQLtodatabase": "Apply SQL to database", "RepairFurnitureDatajsonaddmissingdedupe": "Repair FurnitureData.json (add missing + dedupe)", "CheckFurnitureDatajsonforspriteIdconflicts": "Check FurnitureData.json for spriteId conflicts", "Repairstructuralissuesorphanedrefsduplicates": "Repair structural issues (orphaned refs + duplicates)", "Cancel": "Cancel", "items_baseentries": "items_base entries", "catalog_itemsentries": "catalog_items entries", "Errors": "Errors", "Warnings": "Warnings", "itemswithoutcatalogentry": "items without catalog entry", "orphanedcatalogreferences": "orphaned catalog references", "itemswithoutnitro": "items without .nitro", "itemswithouticon": "items without icon", "duplicateclassnames": "duplicate classnames", "itemsmissingfromclonesources": "items missing from clone sources", "itemscantberepairedlegacybroken": "item(s) can't be repaired (legacy/broken)", "Iconrepair": "Icon repair:", "fixed": "fixed", "failed": "failed", "skipped": "skipped", "stillmissing": "still missing", "Nitrorepair": "Nitro repair:", "CatalogSQL": "Catalog SQL:", "statementsgenerated": "statement(s) generated", "applied": "applied", "Downloadsql": "Download .sql", "FurnitureDatarepair": "FurnitureData repair:", "added": "added", "duplicatesremoved": "duplicates removed", "spriteIdconflictsfixed": "spriteId conflicts fixed", "Structuralrepair": "Structural repair:", "orphanedrowsremoved": "orphaned rows removed", "cleaned": "cleaned", "classnamesmerged": "classname(s) merged", "duplicaterowsremoved": "duplicate rows removed", "referencesremapped": "reference(s) remapped", "Issues": "Issues (", "Missingfromsources": "Missing from sources (", "Unrepairablelegacy": "Unrepairable (legacy) (", "source": "source:", "missing": "missing", "Noissuesfound": "No issues found", "Yourcatalogisclean": "Your catalog is clean!", "RunAgain": "Run Again", "Runafullaudittocheckformissingcatalogentriesbrokenreferencesmissingfilesanditemsavailablefromclonesources": "Run a full audit to check for missing catalog entries, broken references, missing files, and items available from clone sources.", "results": "results", "imported": "imported", "available": "available", "Import": "Import", "selected": "selected", "Nobadgesfound": "No badges found", "Trysearchingbybadgenameorcode": "Try searching by badge name or code", "Imported": "Imported", "Page": "Page", "Prev": "← Prev", "Next": "Next →", "EditBadge": "Edit Badge —", "Name": "Name", "Description": "Description", "Save": "Save", "Processed": "Processed", "items": "items", "RepairComplete": "Repair Complete", "Downloads": "Downloads:", "Skippedalreadyhadicon": "Skipped (already had icon):", "Failed": "Failed:", "ScansallfurnitureinthedatabaseanddownloadsanymissingiconfilesIconsareextractedfromlocalnitrobundlesordownloadedfromconfiguredclonesources": "Scans all furniture in the database and downloads any missing icon files. Icons are extracted from local .nitro bundles or downloaded from configured clone sources." } }, "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." }, "translations": { "title": "Translations", "subtitle": "Translate your hotel into multiple languages.", "tabs": { "cms": "CMS", "client": "Client (Nitro)", "emulator": "Emulator" }, "emulator": { "title": "Emulator", "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", "fullSettings": "Full settings" }, "cms": { "title": "CMS translations", "description": "Edit the text shown on the website and in housekeeping. Saved changes are applied on the next page load and survive deployments.", "export": "Export JSON", "saving": "Saving…", "saveLocale": "Save {locale}", "saved": "Translations saved and applied.", "readOnly": "You can review and export translations. Editing requires permission to change settings.", "language": "Language", "coverage": "{total} keys · {missing} missing · {identical} identical to English", "search": "Search", "searchPlaceholder": "Key, translation or English source…", "group": "Group", "allGroups": "All groups", "status": "Show", "all": "All texts", "missing": "Missing translations", "identical": "Identical to English", "modified": "Unsaved changes", "fallbackHint": "Missing translations use English. Identical text may be intentional. Keep variable names inside braces unchanged.", "unsaved": "{count} unsaved changes in this language", "discard": "Discard changes", "discardConfirm": "Discard unsaved changes in this language?", "fixErrors": "Fix {count} invalid messages before saving.", "noResults": "No texts match these filters.", "source": "English reference", "missingPlaceholder": "Translation missing; English is used.", "page": "Page {page} of {total} · {count} keys", "previous": "Previous", "next": "Next", "leaveWarning": "You have unsaved translations. Leave this page?", "conflict": "These translations changed since you opened the editor. Export your changes, then reload before saving.", "unknownKey": "Unknown translation key: {key}", "empty": "Enter a translation for {key}, or discard this change.", "invalid": "Invalid message syntax in {key}. Check braces and rich-text tags.", "variables": "Keep the same variable names and rich-text tags as the English source in {key}." } }, "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}\"?", "keysInDatabase": "{count} keys in database", "managedInForm": "{count} managed in form", "documented": "{count} documented", "saved": "Settings saved.", "saveFailed": "Could not save settings.", "saveSettings": "Save settings", "viewOnly": "You can view settings but need edit permission to change them.", "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" } }, "menu": { "title": "Admin menu", "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", "save": "Save menu", "saving": "Saving…", "saved": "Admin menu saved.", "saveFailed": "Could not save admin menu.", "reset": "Reset to default", "viewOnly": "You can view the menu layout but need settings edit permission to change it.", "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", "moveUp": "Move up", "moveDown": "Move down", "hideGroup": "Hide group", "showGroup": "Show group", "hideItem": "Hide item", "showItem": "Show item", "pinned": "Pinned" }, "analytics": { "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", "totalUsers": "Total users", "onlineNow": "{count} online now", "weekRegistrations": "Week registrations", "thisMonth": "{count} this month", "activeRooms": "Active rooms", "totalRooms": "{count} total rooms", "weeklyActivity": "Weekly activity", "tradesAndBans": "{trades} trades, {bans} bans", "registrationsChartTitle": "Registrations (30 days)", "registrationsChartDescription": "New user registrations over the last 30 days", "chatActivity": "Chat activity", "messagesLast7Days": "Messages in the last 7 days", "trades": "Trades", "tradesLast7Days": "Trades in the last 7 days", "retention": "Retention", "usersOnlineOverTotal": "Users online / total", "activity": { "chatMessages": "Chat messages", "commands": "Commands", "bans": "Bans", "registrations": "Registrations", "last7Days": "Last 7 days", "dailyBreakdownTitle": "Daily breakdown (7 days)", "colDay": "Day", "colChats": "Chats", "colCmds": "Cmds", "colBans": "Bans", "colRegs": "Regs", "mostActiveUsersTitle": "Most active users (7 days)", "noChatActivity": "No chat activity", "msgCount": "{count} msgs", "userFallback": "User #{id}" }, "economy": { "creditsInCirculation": "Credits in circulation", "creditsDescription": "Total credits across all users", "pixelsInCirculation": "Pixels in circulation", "pixelsDescription": "Total pixels across all users", "pointsInCirculation": "Points in circulation", "pointsDescription": "Total points across all users", "weeklyTrades": "Weekly trades", "marketplaceListings": "{count} marketplace listings", "shopRevenueTitle": "Shop revenue (7d)", "purchases": "Purchases", "creditsSpent": "Credits spent", "pointsSpent": "Points spent", "marketplaceTitle": "Marketplace", "activeListings": "Active listings", "sold7d": "Sold (7d)", "currencyDistributionTitle": "Currency distribution", "credits": "Credits", "pixels": "Pixels", "points": "Points", "catalogSpendingTitle": "Catalog spending", "creditsTooltip": "{count} credits", "pointsTooltip": "{count} points" }, "peakHours": { "title": "Peak hours", "description": "User activity by day & hour (last 7 days)", "days": { "mon": "Mon", "tue": "Tue", "wed": "Wed", "thu": "Thu", "fri": "Fri", "sat": "Sat", "sun": "Sun" }, "tooltip": "{day} {hour}:00 — {count} users", "less": "Less", "more": "More" } }, "table": { "search": "Search…", "clearSearch": "Clear search", "filters": "Filters", "clearAll": "Clear all", "all": "All", "columns": "Columns", "perPage": "{count} / page", "selected": "{count} selected", "results": "{count} results", "empty": "No results match your search or filters.", "selectAll": "Select all rows on this page", "selectRow": "Select row {id}", "removeFilter": "Remove filter: {name}", "previous": "Previous page", "next": "Next page", "page": "Page {page}", "pageOf": "Page {page} of {last}", "bulkError": "The operation failed. Your selection has been kept; check the result before retrying.", "confirmBulk": "{action} on {count} selected rows?", "views": { "title": "Saved views", "hint": "Save filters, sorting and visible columns to your account. Up to 20 views per table.", "saved": "View saved", "error": "Saved views are temporarily unavailable. Try again.", "retry": "Retry", "loading": "Loading views...", "empty": "No saved views yet.", "deleteNamed": "Delete {name}", "delete": "Delete", "name": "View name", "replace": "Replace this view", "save": "Save current view" } }, "actions": { "saved": "Saved successfully.", "error": "The operation could not be completed.", "saving": "Saving…", "saveError": "Save failed. Your changes are still here; please try again.", "unsaved": "Unsaved changes", "leaveUnsaved": "You have unsaved changes. Leave this page?", "preview": "Preview" }, "workQueue": { "title": "Work to review", "tickets": "Open tickets", "ticketsHint": "CMS and help-center queues", "imports": "Imports to review", "importsHint": "Your interrupted jobs or jobs with failed items", "errors": "Open CMS error groups", "errorsHint": "From the retained diagnostic history", "unavailable": "Status unavailable — open to inspect" }, "syncQueue": { "preparing": "Preparing synchronization...", "queued": "Synchronization saved. Follow its progress in the history below.", "start": "Start synchronization", "description": "Synchronization runs in the background. Progress and safe retries remain in your import history after you leave this page.", "failed": "Could not queue synchronization" }, "publicationPreflight": { "affectedPages": "Affected public pages", "scheduleInvalid": "Choose a valid start or publication date. An event end must follow its start.", "description": "Checks use the current form values. Remote image and link availability is not tested.", "slugNormalized": "The public address will use the normalized slug shown below.", "imageInvalid": "Use a local image path or an HTTP/HTTPS image URL without credentials.", "imageMissing": "No cover image selected. The page will use its fallback.", "title": "Publication checks", "ready": "Image, links and schedule passed the local checks.", "linksInvalid": "Review the content links: only local, HTTP/HTTPS and email links are allowed.", "schedulePast": "The selected date is in the past. Review it before publishing.", "previewHint": "These links show the current public pages. Use Preview to check unsaved content. The final article slug may receive a suffix if already in use." }, "deliveries": { "title": "Background updates", "scope": "Latest 100 background updates for news and bulk catalog changes. Saved content and background delivery are tracked separately. Import progress is available in Import history.", "refresh": "Refresh", "empty": "No delivery records.", "retry": "Retry delivery", "retried": "Delivery queued again.", "retryError": "Delivery failed. Check service diagnostics before retrying.", "hotel": "Hotel catalog update", "export": "Catalog Git export request", "actor": "Staff #{id}", "attempts": "{count} attempts", "states": { "pending": "Waiting", "running": "Delivering", "done": "Delivered", "failed": "Needs attention", "unknown": "Unknown status" }, "news": "News cache refresh", "unknown": "Other background update", "contextUnavailable": "Content details unavailable", "changedOffers": "{count} catalog offers", "system": "System", "unknownTime": "Time unavailable", "savedAlready": "The content is saved. This update runs in the background.", "nextAttempt": "Next automatic attempt: {time}", "attemptsExhausted": "Automatic attempts are exhausted. Retry here after checking the service.", "openContent": "Open content", "diagnostics": "Service diagnostics", "technicalDetails": "Technical references", "operationReference": "Operation: {id}", "deliveryReference": "Delivery: {id}", "openImports": "Import history", "unavailable": "Background updates could not be loaded. Try refreshing this page.", "completed": { "news": "News cache refresh completed.", "hotel": "The catalog update request was sent to the hotel. This does not confirm that every client has refreshed.", "export": "The export request was processed. Check the Git export history for the final result; disabled export does not publish files.", "unknown": "Background processing completed." }, "issues": { "news": "The news cache could not be refreshed. Check Redis and the background worker.", "hotel": "The catalog update could not be delivered to the hotel. Check the emulator connection.", "export": "The Git export request could not be queued. Check the export configuration and background worker.", "unknown": "The background update failed. Check the service diagnostics." } }, "studio": { "studioClient": { "Studio": "Studio", "furnidata": "furnidata", "results": "results", "incatalog": "in catalog", "missingnitro": "missing nitro", "total": "total", "present": "present", "teimporteren": "te importeren", "Catalog": "Catalog", "official": "(official)", "Alltypes": "All types", "Flooritems": "Floor items", "Wallitems": "Wall items", "Allstatuses": "All statuses", "Notimported": "Not imported", "Imported": "Imported", "Incatalog": "In catalog", "Missingnitro": "Missing nitro", "Missingfurnidata": "Missing furnidata", "Missingcatalogentry": "Missing catalog entry", "Defaultorder": "Default order", "NameAZ": "Name A–Z", "ClassnameAZ": "Classname A–Z", "Category": "Category", "Importedfirst": "Imported first", "Notimportedfirst": "Not imported first", "Resetfilters": "Reset filters", "nonitro": "no nitro", "Importoptions": "Import options", "Translation": "· Translation", "Speed": "Speed", "1gentle": "1 (gentle)", "4recommended": "4 (recommended)", "12turbo": "12 (turbo)", "Translate": "Translate", "Languages": "Languages", "All": "All", "None": "None", "Translateentirecatalog": "Translate entire catalog", "Defaultforfutureimports": "Default for future imports", "selectedinthisview": "selected in this view", "Clear": "Clear", "Importselected": "Import selected (", "RebuildNitro": "Rebuild Nitro (", "Delete": "Delete (", "SomeselectedfurnitureishiddenbyyourfiltersActionsapplytothevisibleselection": "Some selected furniture is hidden by your filters. Actions apply to the visible selection.", "Tryagain": "Try again", "Nonitro": "No nitro", "Nofurnidata": "No furnidata", "Nocatalog": "No catalog", "New": "New", "Name": "Name", "Classname": "Classname", "Type": "Type", "Status": "Status", "Actions": "Actions", "Loadingmore": "Loading more…", "Scrollformore": "Scroll for more", "Endofresults": "End of results", "Deleteimportedfurni": "Delete imported furni", "Thispermanentlyremoves": "This permanently removes", "fromitems_baseandthecatalogplusitsassetfiles": "from items_base and the catalog, plus its asset files.", "Cancel": "Cancel", "Delete`": "Delete", "imported": "imported", "failed": "failed", "Retryfailed": "Retry failed (", "Closesummary": "Close summary", "Stopimport": "Stop import", "Viewitemdetails": "View item details (", "Showing": "Showing", "items": "items", "Categories": "Categories", "Allcategories": "All categories", "Nomatchingcategories": "No matching categories.", "Duckets": "Duckets", "Diamonds": "Diamonds", "Organizeimports": "Organize imports", "1Select2Review3Import": "1. Select → 2. Review → 3. Import", "Source": "Source:", "Destination": "Destination:", "localcatalogfurnidatanitroandicons": "local catalog, furnidata, .nitro and icons", "Translation`": "Translation:", "Selection": "Selection:", "furnitureitems": "furniture items", "Checkingsourcefiles": "Checking source files…", "checked": "checked", "Retrysourcecheck": "Retry source check", "SomesourcescouldnotbeverifiedTheimportwillstilltrytodownloadtheirfiles": "Some sources could not be verified. The import will still try to download their files.", "Sourcefilesnotfoundbypreliminarycheck": "Source files not found by preliminary check:", "Checkinglocaldataandassets": "Checking local data and assets…", "Retryinspection": "Retry inspection", "InspectionisincompleteCloseandretrybeforeimporting": "Inspection is incomplete. Close and retry before importing.", "readytoimport": "ready to import ·", "alreadyinSQLcompletemissingdata": "already in SQL (complete missing data) ·", "conflicts": "conflicts ·", "sourcefilewarnings": "source file warnings", "SomelocalfilescouldnotbeverifiedReviewtheitemdetailsbeforecontinuing": "Some local files could not be verified. Review the item details before continuing.", "Validatingfile": "Validating file…", "Onlythe": "Only the", "eligibleitemsbelowwillbesubmittedExistingfurniturekeepsitslocalIDsSQLsettingsandcatalogoffersMissingassetsandcatalogentriesarecompletedfurnidataisrefreshedConflictsareexcluded": "eligible items below will be submitted. Existing furniture keeps its local IDs, SQL settings and catalog offers. Missing assets and catalog entries are completed; furnidata is refreshed. Conflicts are excluded.", "AutomaticcategoriesandpricesbelowareestimatesSourcerulesmayoverridethemfinalresultsappearintheimportsummary": "Automatic categories and prices below are estimates. Source rules may override them; final results appear in the import summary.", "credits": "credits +", "points": "points", "Previousitems": "Previous items", "Page": "Page", "Nextitems": "Next items" }, "sync": { "catalogGitConfiguration": { "Giteaconnectionsettings": "Gitea connection settings", "ConnectyourselfhostedGitearepositoryoverHTTPSTheCMSmanagesitsowncheckoutnoGitspecificenvsettingsareneeded": "Connect your self-hosted Gitea repository over HTTPS. The CMS manages its own checkout; no Git-specific .env settings are needed.", "Provider": "Provider:", "Giteaselfhosted": "Gitea self-hosted", "RepositoryURL": "Repository URL", "Branch": "Branch", "Giteausername": "Gitea username", "Giteaaccesstoken": "Gitea access token", "ThetokenisstoredencryptedandisneverreturnedtothebrowserChangingrepositoryorusernamerequiresenteringthetokenagain": "The token is stored encrypted and is never returned to the browser. Changing repository or username requires entering the token again.", "Automaticallyexportcatalogchanges": "Automatically export catalog changes", "Testconnection": "Test connection", "SyncAllSources": "Sync All Sources", "Scanconfiguredsourcesandautomaticallyimportanyfurniturethatisnotyetpresentinyourhotel": "Scan configured sources and automatically import any furniture that is not yet present in your hotel.", "CloneSources": "Clone Sources", "Scanallconfiguredclonesourcesandautomaticallyimportanyfurniturethatisnotyetpresentinyourhotel": "Scan all configured clone sources and automatically import any furniture that is not yet present in your hotel.", "OfficialFurnidata": "Official Furnidata", "ScantheofficialHabbofurnidataandautomaticallyimportanyfurniturethatyourhoteldoesnthaveyet": "Scan the official Habbo furnidata and automatically import any furniture that your hotel doesn't have yet.", "CatalogAudit": "Catalog Audit", "Scanyourentirefurniturecatalogformissingentriesbrokenreferencesmissingfilesanditemsavailablefromclonesources": "Scan your entire furniture catalog for missing entries, broken references, missing files, and items available from clone sources.", "Nitrocleanup": "Nitro cleanup", "Scanthenitrodirectoriesforfakebundlesnomatchingfurnitureandbrokenbundlesunparseableandremovethem": "Scan the nitro directories for fake bundles (no matching furniture) and broken bundles (unparseable) and remove them.", "RepairMissingIcons": "Repair Missing Icons", "ScanallexistingfurnitureanddownloadanymissingiconfilesIconsareextractedfromlocalnitrobundlesorfetchedfromconfiguredclonesources": "Scan all existing furniture and download any missing icon files. Icons are extracted from local .nitro bundles or fetched from configured clone sources.", "UploadnitroFurniture": "Upload .nitro Furniture", "UploadanitrobundleandoptionalicontoimportfurnitureintothehotelThedatabaseentrycatalogitemandFurnitureDatajsonwillbeupdatedautomatically": "Upload a .nitro bundle and optional icon to import furniture into the hotel. The database entry, catalog item, and FurnitureData.json will be updated automatically.", "NewBanner": "New Banner", "Title": "Title", "Subtitle": "Subtitle", "ImageURL": "Image URL", "LinkURL": "Link URL", "Color": "Color", "StartDate": "Start Date", "EndDate": "End Date", "Active": "Active", "Order": "Order", "Cancel": "Cancel", "Nobannersyet": "No banners yet.", "Scheduled": "Scheduled" } }, "nitroQualityPanel": { "Scale": "Scale", "sprites": "sprites ·", "animationdefinitionsdirections": "animation definitions · directions", "ThisbundlecontainsnospritesatthisscaleMissingscale32doesnotbyitselfmeanthefurnitureisunusable": "This bundle contains no sprites at this scale. Missing scale 32 does not by itself mean the furniture is unusable.", "Sprite": "Sprite", "Thisspritecouldnotberendered": "This sprite could not be rendered.", "InspectthesavedbundleatbothscalesPreviewsshowindividualspritesnottheassembledfurnitureoranimationplayback": "Inspect the saved bundle at both scales. Previews show individual sprites, not the assembled furniture or animation playback.", "Recheck": "Recheck", "Checkingscalesandtexturereferences": "Checking scales and texture references…", "Generatescale32from64": "Generate scale 32 from 64", "AddsderivedartworkusingnearestneighborreductionExistingscale32ispreservedPreviewusesthesavedbundleandshowsonespriteatitsoriginalpixelsize": "Adds derived artwork using nearest-neighbor reduction. Existing scale 32 is preserved. Preview uses the saved bundle and shows one sprite at its original pixel size.", "Saveorresetyourpendingeditsfirst": "Save or reset your pending edits first.", "spriteentrieswillbeaddedCheckpositioningandanimationsintheclientaftersaving": "sprite entries will be added. Check positioning and animations in the client after saving.", "spriteswereskippedbecausethesourcebundlehasnousableartworkforthem": "sprite(s) were skipped because the source bundle has no usable artwork for them.", "Savewithbackup": "Save with backup", "Discardpreview": "Discard preview", "SavedAcopyoftheoriginalbundleispreserved": "Saved. A copy of the original bundle is preserved.", "Restoreoriginalbundle": "Restore original bundle", "LocalfurnidatacouldnotbereadItsvaluesarenotverified": "Local furnidata could not be read. Its values are not verified.", "Field": "Field", "Localnow": "Local now", "Source": "Source", "SourcevaluesarecomparedwithlocaldataImportmayremapIDsandtranslatenamesExistingfurniturekeepsitslocalIDsandSQLsettingsnewfurniturereceivesafreelocalIDwhenthesourceIDisoccupied": "Source values are compared with local data. Import may remap IDs and translate names. Existing furniture keeps its local IDs and SQL settings; new furniture receives a free local ID when the source ID is occupied.", "SQLrecordsandcatalogoffers": "SQL records and catalog offers", "Item": "Item #", "Sprite`": "· Sprite #", "NolocalSQLitem": "No local SQL item.", "Offer": "Offer #", "Page": "· Page #", "credits": "credits +", "points": "points", "Checkinglocaldataandassets": "Checking local data and assets…", "Retryinspection": "Retry inspection", "Missing": "Missing:", "DuplicaterecordsormismatchedIDstypesrequirereviewbeforerepair": "Duplicate records or mismatched IDs/types require review before repair.", "SomelocaldatacouldnotbecheckedRetryverificationbeforerepair": "Some local data could not be checked. Retry verification before repair.", "RepairaddsmissingpartsandpreservesexistingIDssettingsfurnidataandcatalogoffersMissingoffersusetheautomaticcategoryandpriceshownbelow": "Repair adds missing parts and preserves existing IDs, settings, furnidata and catalog offers. Missing offers use the automatic category and price shown below.", "Rechecklocalstate": "Recheck local state", "Localinspectionunavailable": "Local inspection unavailable.", "Furnidetail": "Furni detail", "rev": "rev", "Autoimportready": "Auto-import ready", "Automaticplacement": "Automatic placement", "Category": "Category", "Price": "Price", "credits`": "credits", "Importaddtocatalog": "Import & add to catalog", "ThisfurniisintheDBbutthenitrofileismissing": "This furni is in the DB but the .nitro file is missing.", "Regeneratenitro": "Regenerate .nitro", "Editnitro": "Edit nitro", "Deleteimportedfurni": "Delete imported furni", "selected": "selected", "found": "found", "copies": "copies", "days": "days", "Exportmanifest": "Export manifest", "Onlyshowfilesolderthan": "Only show files older than", "Hiderecentfiles": "Hide recent files", "assetfilesscanned": "asset files scanned", "Fakenitrosnomatchingitem": "Fake nitros (no matching item)", "Brokennitrosunparseable": "Broken nitros (unparseable)", "DeletingabrokennitroleavesitsiteminthedatabasewithoutabundlepreferredownloadingitorletthecatalogauditreobtainitlaterDatabaserowsareneverremovedbythistool": "Deleting a broken .nitro leaves its item in the database without a bundle — prefer re-downloading it, or let the catalog audit re-obtain it later. Database rows are never removed by this tool.", "OnlyassetfilesaretouchedFurnitureDatajsonanddatabaserowsstayintact": "Only asset files are touched — FurnitureData.json and database rows stay intact.", "ScaneveryfurniassetdirectorytofindfakeandbrokennitrobundlesplusorphanedSWFsandiconsDeletethemredownloadthebrokenonesorautocleanoldleftovers": "Scan every furni asset directory to find fake and broken nitro bundles plus orphaned SWFs and icons. Delete them, re-download the broken ones, or auto-clean old leftovers." } }, "sounds": { "soundsClient": { "All": "All (", "SingleMP3s": "Single MP3s (", "Composition": "Composition (", "UploadMP3": "Upload MP3", "Type": "Type", "Code": "Code", "Name": "Name", "Author": "Author", "Length": "Length", "Used": "Used", "PreviewSamples": "Preview / Samples", "Actions": "Actions", "Nosongdisksuploadedyet": "No song disks uploaded yet.", "ClickUploadMP3togetstarted": "Click “Upload MP3” to get started.", "Noresultsfortheactivefilters": "No results for the active filters.", "Trax": "Trax", "sample": "sample:", "Play": "▶ Play", "Delete": "Delete “", "Thissongdiskiscurrentlyusedby": "This song disk is currently used by", "catalogitem": "catalog item", "Deletingitwillresetthosecatalogitemstonosongdisk": ". Deleting it will reset those catalog items to “no song disk”.", "TheMP3filewillberemovedfromdisk": "The MP3 file will be removed from disk.", "Thisactioncannotbeundone": "This action cannot be undone.", "Cancel": "Cancel", "Delete`": "Delete", "UploadSongDisk": "Upload Song Disk", "UploadanMP3fileMaxsize10MBThecodewillbegeneratedautomaticallyas": "Upload an MP3 file. Max size 10 MB. The code will be generated automatically as", "song_id": "song_{id}", "MP3file": "MP3 file", "Upload": "Upload", "Edit": "Edit", "compositionof": "— composition of", "samplesEditthe": "samples. Edit the", "track": "track", "fieldonlyifyouknowwhatyouaredoing": "field only if you know what you are doing.", "theMP3filecannotbereplaceddeleteandreuploadifyouneedtochangetheaudio": "— the MP3 file cannot be replaced: delete and re-upload if you need to change the audio.", "Lengthseconds": "Length (seconds)", "TrackTraxcomposition": "Track (Trax composition)", "Format": "Format:", "channelsample_idlengthsample_idlength": "channel:sample_id,length;sample_id,length;…", "silenceDetectedsampleIDs": "= silence. Detected sample IDs:", "Save": "Save", "Filesareservedfrom": "Files are served from", "configurablein": "(configurable in", "Settings": "Settings", "Stop": "Stop", "PlayTrax": "Play Trax", "deleteSuccess": "Song disk deleted", "deleteError": "Failed to delete song disk", "searchPlaceholder": "Search by title or code...", "filterAll": "All", "filterSingle": "Single MP3s", "filterComposition": "Compositions" } }, "moderation": { "cfh": { "id": { "cfhDetail": { "CFH": "CFH #", "Type": "Type", "Category": "· Category", "CallForHelpReport": "Call For Help Report", "Room": "· Room #", "ReportMessage": "Report Message", "Reporter": "Reporter", "Rank": "Rank", "Unknownuser": "Unknown user", "ReportedUser": "Reported User", "bans": "bans", "Kick": "Kick", "Mute": "Mute", "Alert": "Alert", "BanHistory": "Ban History (", "Actions": "Actions", "Status": "Status", "Open": "Open", "Picked": "Picked", "Closed": "Closed", "Assigntome": "Assign to me", "CloseTicket": "Close Ticket", "AssignedModerator": "Assigned Moderator", "Unassigned": "Unassigned", "Details": "Details", "Created": "Created", "Room`": "Room", "Category`": "Category", "Score": "Score", "QuickActions": "Quick Actions", "ResetPassword": "Reset Password", "Disconnect": "Disconnect", "Online": "Online", "SendInGameAlert": "Send In-Game Alert", "MuteUnmute": "Mute / Unmute", "Unmute": "Unmute", "SendCreditsRCON": "Send Credits (RCON)", "SendCredits": "Send Credits", "TradelockCMSDB": "Trade lock (CMS DB)", "Lock7d": "Lock 7d", "Clearlock": "Clear lock", "PasswordReset": "Password Reset", "Newpasswordgeneratedfor": "New password generated for", "Copyitnowitwontbeshownagain": ". Copy it now — it won't be shown again.", "Bans": "Bans", "Unban": "Unban", "Ban": "Ban", "ActiveBan": "Active Ban", "Reason": "Reason", "Durationhours": "Duration (hours)", "Account": "Account", "Machine": "Machine", "History": "History", "cfhId": "CFH #{id}", "typeCategory": "Category: {category}", "title": "Call for Help #{id}", "roomMeta": "Room #{id}", "reportMessage": "Report Message", "noDescription": "No description provided" } } }, "team": { "page": { "OnlineNow": "Online Now", "TotalStaff": "Total Staff", "Aboveminrank": "Above min rank", "Name": "Name", "Rank": "Rank", "CFH": "CFH", "Tickets": "Tickets", "Actions": "Actions", "LastSeen": "Last Seen", "Web": "Web", "Mod": "Mod", "UserActions": "User Actions", "UserID": "User ID", "KickDisconnect": "Kick / Disconnect", "Unmute": "Unmute", "Mute": "Mute", "RoomActions": "Room Actions", "RoomID": "Room ID", "KickAllFromRoom": "Kick All From Room", "BroadcastAlert": "Broadcast Alert", "HotelAlert": "Hotel Alert", "StaffAlert": "Staff Alert", "RecentCFHTickets": "Recent CFH Tickets", "Viewall": "View all", "NoCFHtickets": "No CFH tickets", "RecentModActions": "Recent Mod Actions", "Norecentactions": "No recent actions", "Online": "Online", "Offline": "Offline", "Modview": "Mod view", "Public": "Public", "Motto": "Motto", "ReadonlybanlistformoderatorsCreateliftbansrequiresthefulladminpanel": "Read-only ban list for moderators. Create/lift bans requires the full admin panel.", "rank": "· rank" } } }, "prefixes": { "prefixesClient": { "UserPrefixes": "User Prefixes", "Blacklist": "Blacklist", "Settings": "Settings", "Search": "Search", "Add": "Add", "User": "User", "Prefix": "Prefix", "Color": "Color", "Icon": "Icon", "Effect": "Effect", "Active": "Active", "Date": "Date", "Actions": "Actions", "Noprefixesfound": "No prefixes found", "Previous": "Previous", "Page": "Page", "Next": "Next", "ForbiddenWords": "Forbidden Words", "Noblacklistwords": "No blacklist words", "PrefixSettings": "Prefix Settings", "MaxLength": "Max Length", "MinimumRank": "Minimum Rank", "PriceCredits": "Price (Credits)", "PricePoints": "Price (Points)", "PointsType": "Points Type", "0Duckets5Diamondsetc": "0 = Duckets, 5 = Diamonds, etc.", "SaveSettings": "Save Settings", "Closeprefixeditor": "Close prefix editor", "Username": "Username", "Text": "Text", "ColorHEXormultiFF000000FF00": "Color (HEX or multi: #FF0000,#00FF00)", "Cancel": "Cancel", "confirmDeleteTitle": "Delete Prefix", "confirmDeleteDesc": "Are you sure you want to delete this user prefix?", "confirmDelete": "Delete", "cancel": "Cancel", "successPrefixDeleted": "Prefix deleted successfully", "successPrefixUpdated": "Prefix updated successfully", "successPrefixCreated": "Prefix created successfully", "successWordAdded": "Blacklist word added", "successWordRemoved": "Blacklist word removed", "successSettingsSaved": "Prefix settings saved", "tabUserPrefixes": "User Prefixes", "tabBlacklist": "Blacklist", "tabSettings": "Settings" } }, "catalogTree": { "CatalogStructure": "Catalog Structure", "pages": "pages", "All": "All", "Showallpages": "Show all pages", "Showenabledonly": "Show enabled only", "Off": "Off", "Showdisabledonly": "Show disabled only", "Expandall": "Expand all", "Collapseall": "Collapse all", "result": "result", "for": "for \"", "Createsubpage": "Create subpage", "OFF": "OFF", "Layout": "Layout", "Items": "Items", "Subpages": "Subpages", "Icon": "Icon", "Visible": "Visible", "Enabled": "Enabled", "RightclickforactionsDoubleclicktoopen": "Right-click for actions · Double-click to open", "EditPage": "Edit Page", "CopyID": "Copy ID", "CreateSubpage": "Create Subpage", "Delete": "Delete", "QuickAdd": "Quick Add", "CtrlK": "Ctrl+K", "QuickAddFurni": "Quick Add Furni", "Typeatleast2characterstosearch": "Type at least 2 characters to search", "Nofurnifoundfor": "No furni found for \"", "Add": "Add →", "SelectCatalogIcon": "Select Catalog Icon", "icons": "icons", "None": "None", "Noiconsfound": "No icons found", "images": "images", "Clear": "Clear", "Noimagesfound": "No images found", "Noitemsinthispageyet": "No items in this page yet", "Shoppreview": "Shop preview ·", "items": "items", "OFFER": "OFFER", "LTD": "LTD", "Free": "Free", "Loading": "Loading…", "Nosong": "— No song —", "Use": "Use \"" }, "catalogManager": { "inlineEditor": { "Selectapagefromthetreetoedit": "Select a page from the tree to edit", "Parent": "· Parent:", "Save": "Save", "Settings": "Settings", "Items": "Items", "Translate": "Translate", "Caption": "Caption", "Layout": "Layout", "Order": "Order", "MinRank": "Min Rank", "Icon": "Icon", "Headline": "Headline", "Teaser": "Teaser", "Textfields": "Text fields", "hascontent": "has content", "Text1": "Text 1", "Text2": "Text 2", "TextDetails": "Text Details", "TextTeaser": "Text Teaser", "Special": "Special", "Translatetoolsareavailablefortheshopcatalogonly": "Translate tools are available for the shop catalog only.", "BCItems": "BC Items (", "AddItem": "Add Item", "Retry": "Retry", "Noitemsinthispage": "No items in this page.", "Name": "Name", "ItemIDs": "Item IDs", "ExtraData": "Extra Data", "Actions": "Actions", "CatalogName": "Catalog Name", "ItemIDssemicolonseparated": "Item IDs (semicolon-separated)", "Cancel": "Cancel", "Expandall": "Expand all", "Collapseall": "Collapse all", "Newsubpage": "New subpage", "pages": "pages", "Sortmode": "Sort mode", "result": "result", "Nopagesinthiscategory": "No pages in this category", "Createapagewiththebuttonorswitchtosortmodetoreorderexistingones": "Create a page with the + button, or switch to sort mode to reorder existing ones.", "NosubpagesClicktocreateone": "No subpages. Click + to create one.", "selected": "selected", "Enable": "Enable", "Disable": "Disable", "Delete": "Delete", "Clear": "Clear", "root": "root", "enabled": "enabled", "items": "items", "CtrlS": "Ctrl+S", "save": "save", "search": "search", "CtrlK": "Ctrl+K", "quickadd": "quick add", "OFF": "OFF", "Edit": "Edit", "CopyID": "Copy ID", "Addsubpage": "Add subpage", "Duplicatepage": "Duplicate page", "Auto": "Auto", "Sort": "Sort", "Use": "Use", "layout": "layout", "Duckets": "Duckets", "Diamonds": "Diamonds", "Editpage": "Edit page", "CtrlShiftF": "Ctrl Shift F" } }, "helpQuestions": { "id": { "page": { "Edithelpcenterentry": "Edit help-center entry", "HelpCenter": "← Help Center", "Error": "Error:", "Buttoncolor": "Button color", "Buttonbordercolor": "Button border color", "Smallbox": "Small box", "Save": "Save", "Deleteentry": "Delete entry", "Newhelpcenterentry": "New help-center entry", "Create": "Create", "Pos": "Pos.", "Button": "Button", "Newadvertisement": "New advertisement", "Advertisements": "← Advertisements", "navigator_flatcats": "navigator_flatcats", "Caption": "Caption", "Captionsave": "Caption (save)", "Minrank": "Min rank", "Maxusers": "Max users", "Cantrade": "Can trade", "Public": "Public", "Listtype": "List type", "navigator_publics": "navigator_publics", "Publiccat": "Public cat", "Visible": "Visible" } } }, "themeBuilder": { "scopeForm": { "AddScope": "+ Add Scope", "NewScope": "New Scope", "Cancel": "Cancel", "Name": "Name", "Type": "Type", "Domain": "Domain", "Module": "Module", "Selectmodule": "Select module...", "RoutePath": "Route Path", "ParentScope": "Parent Scope", "Noneinheritsfromglobal": "None (inherits from global)", "CreateScope": "Create Scope", "ThemeBuilder": "Theme Builder", "CreateandmanagescopedthemesfordifferentpartsofyoursiteThemesinheritfromparentscopesonlyoverridewhatyouneed": "Create and manage scoped themes for different parts of your site. Themes inherit from parent scopes — only override what you need.", "Scopecreated": "Scope created.", "Scopeupdated": "Scope updated.", "Scopedeleted": "Scope deleted.", "Themevaluessaved": "Theme values saved.", "Scopeduplicated": "Scope duplicated.", "Selectorcreateascopetostartediting": "Select or create a scope to start editing.", "OFF": "OFF", "ThemeScopes": "Theme Scopes", "NoscopescreatedyetAddonebelow": "No scopes created yet. Add one below.", "Rename": "Rename" } }, "referrals": { "title": "Suositukset", "subtitle": "Kutsujärjestelmä", "referralsToday": "Suositukset tänään", "referralsTotal": "Suositukset yhteensä", "invitedTotal": "Kutsut laskettu", "claims": "Palkinnot nostettu", "settings": "Palkkioasetukset", "needed": "Tarvittavat suositukset", "rewardAmount": "Palkkiosumma", "rewardCurrency": "Palkkioraha", "blockSameIp": "Hylkää suositukset, jotka jakavat kutsujan nykyisen IP-osoitteen", "save": "Tallenna asetukset", "saving": "Tallennetaan…", "saved": "Suositusasetukset tallennettu.", "saveError": "Suositusasetuksia ei voitu tallentaa.", "recent": "Viimeisimmät suositukset", "unavailable": "Suositustiedot ovat tilapäisesti saatavilla.", "empty": "Ei suosituksia vielä.", "inviter": "Kutsuja", "invitee": "Kutsuttu käyttäjä", "ip": "IP", "date": "Päivämäärä" }, "dailyRewards": { "title": "Päivittäiset kirjautumispalkinnot", "subtitle": "Päivittäinen kirjautumispalkkioaikataulu", "enabled": "Ominaisuuden tila", "yes": "Käytössä", "no": "Ei käytössä", "scheduleDays": "Aikataulun päivät", "claimsToday": "Nostot tänään", "claimsTotal": "Nostot yhteensä", "status": "Ominaisuuden tila", "statusHint": "Kun pois käytöstä, palkkio kortti piilotetaan ja uudet nostot hylätään.", "disable": "Poista käytöstä", "enable": "Ota käyttöön", "schedule": "Palkkioaikataulu", "day": "Päivä {day}", "reward": "Palkkio", "amount": "Summa", "actions": "Toiminnot", "addDay": "Päivä", "add": "Lisää päivä", "save": "Tallenna", "saving": "Tallennetaan…", "saved": "Palkkioaikataulu tallennettu.", "cancel": "Peruuta", "edit": "Muokkaa", "delete": "Poista", "created": "Palkkiopäivä lisätty.", "updated": "Palkkiopäivä päivitetty.", "deleted": "Palkkiopäivä poistettu.", "saveError": "Palkkiopäivää ei voitu tallentaa.", "deleteError": "Palkkiopäivää ei voitu poistaa.", "confirmDeleteTitle": "Poista palkkiopäivä", "confirmDeleteBody": "Tätä palkkiopäivää ei enää myönnetä. Aikaisemmat nostot säilyvät kirjattuina." } }, "myDashboard": { "messagesCaughtUp": "No unread messages", "messagesUnavailable": "Open your inbox to check", "eventTitle": "On the calendar", "allEvents": "All events", "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", "eventOngoing": "Happening now", "eventUpcoming": "Coming up", "eventDetails": "View event", "noUpcomingEvents": "No upcoming events have been announced yet.", "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", "title": "My dashboard", "loadError": "We could not load your dashboard. Please try again.", "retry": "Try again", "login": "Sign in", "never": "Never", "claimed": "Reward claimed successfully!", "welcome": "Your space on {hotel}", "noMotto": "No motto yet", "registered": "Registered: {date}", "lastOnline": "Last online: {date}", "enter": "Enter {hotel}", "quickLinks": "Quick links", "messages": "Messages", "profile": "My profile", "settings": "Settings", "shop": "Shop", "unread": "{count} unread messages", "wallet": "Your wallet", "currencies": { "credits": "Credits", "duckets": "Duckets", "diamonds": "Diamonds", "points": "Points" }, "onlineFriends": "Online friends", "allFriends": "All friends", "noOnlineFriends": "None of your friends are online right now.", "recentRooms": "New rooms", "community": "Community", "roomsHint": "The newest rooms created in the hotel.", "noRooms": "No rooms available yet.", "activity": "Your activity", "achievements": "Achievement score", "respects": "Respects received", "friends": "Friends", "lastLogin": "Last login", "referrals": "Invite your friends", "referralHint": "Share your link and earn rewards when new players register.", "referralProgress": "Progress towards your reward", "reward": "{amount} {currency} for every {count} new players.", "rewardHint": "Invite {count} players to unlock your reward.", "referralLink": "Your invitation link", "claim": "Claim reward", "remaining": "{count, plural, one {Invite # more player to unlock your reward.} other {Invite # more players to unlock your reward.}}", "rules": "Invitation rules", "rulesText": "Creating extra accounts to increase invitations can lead to removal of progress, currency and inventory, and a ban.", "badges": "Equipped badges", "noBadges": "You are not wearing any badges yet.", "copy": "Copy link", "copied": "Copied!", "copyFailed": "Copy failed. Select the link and copy it manually.", "errors": { "not_enough": "You need more invitations to claim the reward.", "no_referrals": "Share your link to invite your first friend.", "bad_config": "The reward is not configured correctly. Contact the staff.", "ratelimit": "Too many attempts. Wait a moment and try again.", "error": "The reward could not be claimed. Please try again." }, "tasks": { "title": "To do", "support": "{count, plural, one {# ticket with a support reply} other {# tickets with support replies}}", "friends": "{count, plural, one {# friend request to review} other {# friend requests to review}}", "event": "Your next registered event: {title} · {date}", "reward": "Your referral reward is ready to claim", "empty": "You're all caught up. No actions waiting.", "unavailable": "Some actions could not be checked. Available actions are shown above.", "retry": "Try again", "rewardUnavailable": "Referral progress is temporarily unavailable. Please try again.", "dailyReward": "Päivittäinen palkkiosi on valmis nostettavaksi" }, "dailyClaimed": "Päivittäinen palkkio nostettu — nähdään huomenna!", "dailyErrors": { "already_claimed": "Olet jo nostanut tämän päivän palkkion.", "disabled": "Päivittäiset palkinnot ovat pois käytöstä tällä hetkellä.", "bad_config": "Päivittäinen palkkioaikataulu ei ole määritetty oikein. Ota yhteyttä henkilökuntaan.", "ratelimit": "Liian monta yritystä. Odota hetki ja yritä uudelleen.", "error": "Päivittäistä palkkio ei voitu nostaa. Yritä uudelleen." }, "dailyRewardTitle": "Päivittäiset palkinnot", "dailyRewardHint": "Kirjaudu sisään joka päivä ja nosta palkkiosi — putket kasvavat isoihin päiviin asti.", "dailyRewardDay": "Päivä {day}", "dailyRewardStreak": "{count, plural, one {Putki: # päivä} other {Putki: # päivää}}", "dailyRewardNextClaim": "Seuraava nosto: {amount} {currency}", "dailyRewardTomorrow": "Huomenna: {amount} {currency}", "dailyRewardClaim": "Nosta päivittäinen palkkio", "dailyRewardClaimedToday": "Nostettu tänään — tule huomenna seuraavaa palkkiota varten.", "dailyRewardDisabled": "Päivittäiset palkinnot ovat pois käytöstä tällä hetkellä. Voit tutkia hotellia.", "dailyRewardUnavailable": "Päivittäistä palkkioaikataulua ei voitu ladata. Yritä uudelleen." }, "error": { "code": "Error", "title": "Something went wrong", "subtitle": "The hotel hit an unexpected snag.", "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", "tryAgain": "Try again", "backHome": "Back home", "reference": "Reference: {digest}" }, "notFound": { "code": "404", "title": "Page not found", "subtitle": "This room doesn’t exist — or the furniture was moved.", "body": "Check the link, or head back to the lobby.", "backHome": "Back home", "latestNews": "Latest news" }, "staff": { "title": "Staff", "subtitle": "The team behind the hotel", "ranksTitle": "Our teams", "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", "viewProfile": "View profile", "noMotto": "No motto set", "loadError": "Unable to load staff members. Please try again shortly.", "retry": "Try again" }, "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", "remove": "Remove", "success": { "removed": "Friend removed." }, "errors": { "notFound": "That friendship was not found.", "invalid": "Invalid friend.", "error": "Something went wrong. Please try again." } }, "messages": { "title": "Messages", "subtitle": "Friend requests, offline inbox, and messages to friends", "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", "decline": "Decline", "offlineTitle": "Offline messages", "offlineEmptySubtitle": "Your inbox is empty", "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", "offlineEmptyState": "You have no offline messages.", "composeTitle": "Send offline message", "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", "composeEmptyFriends": "Add friends in the hotel to send offline messages.", "composeFriendLabel": "Friend", "composeFriendPlaceholder": "Choose a friend", "composeMessageLabel": "Message", "composeMessagePlaceholder": "Write your message (max 500 characters)…", "composeSend": "Send message", "unknownUser": "User #{id}", "success": { "accepted": "Friend request accepted.", "declined": "Friend request declined.", "sent": "Offline message sent." }, "errors": { "notFound": "That friend request was not found.", "unauthorized": "You can't act on this friend request.", "invalid": "Invalid friend request.", "error": "Something went wrong. Please try again.", "notFriend": "You can only message friends.", "emptyMessage": "Please write a message.", "rateLimited": "Too many messages. Wait a moment and try again." } }, "sessions": { "title": "Login activity", "subtitle": "Recent sign-ins and failed attempts on your account", "recentTitle": "Recent sign-ins", "recentEmpty": "No sign-ins recorded yet.", "colWhen": "When", "colIp": "IP", "colDevice": "Device", "failedTitle": "Failed attempts", "failedSubtitle": "Wrong password on your username", "unknownDevice": "Unknown device", "signOutEverywhereTitle": "Sign out everywhere", "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", "signOutEverywhereButton": "Sign out all sessions", "successSignedOutAll": "All sessions have been signed out." }, "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", "addFriend": "Add friend", "alreadyFriends": "You're friends", "requestPending": "Request pending", "respondInMessages": "Respond in Messages", "success": { "sent": "Friend request sent.", "guestbook": "Guestbook message posted." }, "errors": { "self": "You can't send a friend request to yourself.", "alreadyFriends": "You're already friends with this user.", "alreadyPending": "You already sent a friend request to this user.", "incomingPending": "This user already sent you a request — accept or decline it in Messages.", "empty": "Please write a message before posting.", "moderated": "That message was blocked by moderation.", "ratelimit": "You're posting too fast. Please wait a moment and try again.", "invalid": "That request was invalid.", "error": "Something went wrong. Please try again." }, "noRoomPreview": "Preview unavailable", "viewRoom": "View room", "roomStates": { "open": "Open", "locked": "Doorbell", "password": "Password", "invisible": "Hidden" }, "privacy": { "title": "Profile visibility", "hint": "Choose what visitors can see on your public profile. Your email is never shown here. Your own view still shows your information. These controls apply to the profile page.", "wallet": "Show my wallet", "online": "Show my online status", "friends": "Show my friends", "photos": "Show my photos", "registered": "Show my registration date", "save": "Save visibility", "saved": "Profile visibility saved.", "error": "Profile visibility could not be loaded or saved. Please try again.", "ownerHint": "You are viewing your own information, including hidden sections." }, "morePhotos": "Show more photos (up to 24 recent photos)", "openPhoto": "Open full photo in a new tab", "photosUnavailable": "Photos could not be loaded. Please try again later." }, "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 →", "allUsers": "Community →", "noArticles": "No articles yet.", "noPhotos": "No photos yet.", "noUsers": "No users online", "latestUsers": "Newest citizens ({count} total)", "latestArticle": "Latest Article", "statsOnline": "Online", "statsCitizens": "Citizens", "statsRooms": "Rooms", "statsArticles": "Articles", "featuresAvatar": "Avatar", "featuresAvatarDesc": "Create your unique look", "featuresFurniture": "Furniture", "featuresFurnitureDesc": "Decorate rooms with items", "featuresCommunity": "Community", "featuresCommunityDesc": "Make friends and chat", "featuresGames": "Games", "featuresGamesDesc": "Compete and have fun", "sectionFeaturesLabel": "Features", "sectionFeaturesTitle": "Everything a great hotel needs", "sectionStatsLabel": "Live stats", "sectionStatsTitle": "A community that keeps growing", "sectionCommunityLabel": "Community", "sectionCommunityTitle": "Make yourself at home", "statsPhotos": "Photos", "onlineNow": "Online now", "exploreLabel": "Explore the hotel", "liveUpdates": "Live updates", "joinCtaTitle": "Ready to make yourself at home?", "joinCtaBody": "Create your avatar, grab some furni and meet new friends — your hotel adventure starts here.", "ctaJoin": "Join the hotel", "browseCommunity": "Browse the community" }, "news": { "title": "News", "subtitle": "The latest announcements, events and updates from the hotel", "noArticles": "No articles yet.", "searchLabel": "Search news", "orderLabel": "Order", "newest": "Newest first", "oldest": "Oldest first", "apply": "Apply", "loadError": "News could not be loaded. Please try again.", "pagination": "News pages", "previous": "Previous", "next": "Next", "pageSummary": "Page {page} of {pages} · {total} articles" }, "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.", "success": { "posted": "Comment posted.", "reaction": "Reaction updated." }, "errors": { "empty": "Please write a comment before posting.", "moderated": "That comment was blocked by moderation.", "ratelimit": "You're commenting too fast. Please wait a moment and try again.", "invalid": "Invalid comment.", "notFound": "That article was not found.", "error": "Something went wrong. Please try again." }, "loadError": "This article is temporarily unavailable.", "retry": "Try again", "commentsUnavailable": "Comments are temporarily unavailable.", "reactionsUnavailable": "Reactions are temporarily unavailable.", "commentsPagination": "Comment pages", "previous": "Previous", "next": "Next", "commentsPageSummary": "Page {page} of {pages} · {total} comments" }, "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", "success": { "posted": "Thread posted." } }, "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", "errors": { "invalid": "Subject and message are required.", "notFound": "That guild was not found.", "ratelimit": "You're posting too fast. Please wait a moment and try again.", "error": "Something went wrong. Please try again." } }, "guildForumThread": { "backToForum": "← Back to forum", "unnamedGuild": "Unnamed guild", "noSubject": "(no subject)", "inGuildForum": "{guild} forum", "pinned": "Pinned", "locked": "Locked", "postsTitle": "Posts", "postsSubtitle": "{count, plural, one {# post} other {# posts}}", "postsEmpty": "No posts in this thread.", "userNumber": "User #{id}", "replyTitle": "Reply", "replySubtitle": "Add your message to this thread", "replyPlaceholder": "Write your reply…", "replySubmit": "Post reply", "lockedHint": "This thread is locked — new replies are disabled.", "loginToReply": "Sign in to reply.", "loginLink": "Log in", "success": { "replied": "Reply posted." }, "errors": { "invalid": "Please enter a message.", "notFound": "That thread was not found.", "locked": "This thread is locked.", "ratelimit": "You're posting too fast. Please wait a moment and try again.", "error": "Something went wrong. Please try again." } }, "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", "loginToBuy": "Log in to buy", "creditsHint": "Packages are paid with in-game credits. Top up first if you need more.", "topUpLink": "Top up credits", "priceCredits": "{credits} credits (≈ {usd})", "priceCreditsShort": "{credits} cr", "success": { "bought": "Package purchased — rewards have been added to your account.", "boughtNamed": "You purchased \"{name}\" — rewards have been added to your account." }, "errors": { "invalid": "That package is no longer available.", "credits": "You don't have enough credits for this package.", "ratelimit": "You're purchasing too fast. Please wait a moment and try again.", "error": "Something went wrong. Please try again." } }, "topup": { "title": "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", "banAppealLabel": "This is a ban appeal", "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", "success": { "created": "Ticket submitted." }, "errors": { "invalid": "Please fill in a subject and description.", "moderated": "That ticket was blocked by moderation.", "ratelimit": "You're submitting too fast. Please wait a moment and try again.", "error": "Something went wrong. Please try again." } }, "helpTicketDetail": { "backToList": "← Your tickets", "ticketId": "Ticket #{id}", "statusOpen": "Open", "statusClosed": "Closed", "messagesTitle": "Conversation", "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", "you": "You", "userNumber": "User #{id}", "replyTitle": "Reply", "replySubtitle": "Send a follow-up to staff", "replyPlaceholder": "Write your message…", "replySubmit": "Send reply", "closeTitle": "Close ticket", "closeSubtitle": "Mark this request as resolved when you no longer need help", "closeSubmit": "Close ticket", "closedHint": "This ticket is closed. Open a new ticket if you need more help.", "success": { "replied": "Reply sent.", "closed": "Ticket closed." }, "errors": { "invalid": "Please enter a message.", "notFound": "That ticket was not found.", "closedTicket": "This ticket is closed.", "moderated": "That message was blocked by moderation.", "ratelimit": "You're submitting too fast. Please wait a moment and try again.", "error": "Something went wrong. Please try again." } }, "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}", "success": { "submitted": "Application submitted — staff will review it soon." }, "errors": { "empty": "Please write at least 10 characters about yourself.", "invalid": "Invalid application.", "duplicate": "You have already applied for this position.", "ratelimit": "You're submitting too fast. Please wait a moment and try again.", "error": "Something went wrong. Please try again." } }, "applyTeam": { "title": "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}", "success": { "submitted": "Application submitted — staff will review it soon." }, "errors": { "empty": "Please write at least 10 characters about yourself.", "invalid": "Invalid application.", "duplicate": "You have already applied for this team.", "ratelimit": "You're submitting too fast. Please wait a moment and try again.", "error": "Something went wrong. Please try again." } }, "radio": { "title": "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}", "contests": { "id": { "page": { "Backtocontests": "← Back to contests", "Description": "Description", "Prize": "Prize", "Period": "Period", "Created": "Created", "Updated": "Updated", "Backtogiveaways": "← Back to giveaways", "Prize`": "Prize:", "Radio": "Radio", "Amount": "Amount (", "Youllreceive": "You'll receive", "credits": "credits.", "PAYPAL_CLIENT_ID": "PAYPAL_CLIENT_ID", "PAYPAL_SECRET": "PAYPAL_SECRET", "PAYPAL_API": "PAYPAL_API", "RecoveryCodes": "Recovery Codes", "StoretheseonetimeusecodesinasafeplaceEachcanbeusedonceifyouloseaccesstoyourauthenticatorapp": "Store these one-time use codes in a safe place. Each can be used once if you lose access to your authenticator app.", "APP_KEY": "APP_KEY", "SessionManagement": "Session Management", "Viewactivesessionsandsignouteverywhere": "View active sessions and sign out everywhere", "Backtothehotel": "← Back to the hotel", "Ownedby": "Owned by", "Thisroomhasnodescription": "This room has no description.", "Enterthehoteltovisit": "Enter the hotel to visit", "NobadgeshavebeenpublishedyetCheckbacksoon": "No badges have been published yet. Check back soon!" } } } }, "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!", "success": { "posted": "Shout posted." }, "errors": { "invalid": "Please write a message before shouting.", "moderated": "That shout was blocked by moderation.", "ratelimit": "You're shouting too fast. Please wait a moment and try again.", "error": "Something went wrong. Please try again." } }, "events": { "title": "Events", "subtitle": "Upcoming and recent hotel events you can join", "empty": "No events yet.", "back": "← Events", "when": "When", "status": "Status", "statusPublished": "Open", "statusCompleted": "Completed", "registrations": "Registrations", "registered": "{count} registered", "spots": "{count} / {max} spots", "registerTitle": "Register", "registerSubtitle": "Save your spot for this event", "register": "Register for event", "registering": "Registering…", "registerSuccess": "You are registered!", "registerError": "Could not register for this event.", "loginToRegister": "Log in to register for this event.", "alreadyRegistered": "You are already registered.", "eventEnded": "This event has ended.", "eventFull": "This event is full.", "cannotRegister": "Registration is not available.", "prizesTitle": "Prizes", "winnersTitle": "Winners", "unknownUser": "User #{id}", "filterStatus": "Status", "allEvents": "All events", "statusOngoing": "In progress", "statusUpcoming": "Upcoming", "weekStarting": "Week starting (UTC)", "myRegistrations": "My registrations", "apply": "Apply", "reset": "Reset", "timeZoneHint": "Times are shown in your local time zone. The seven-day filter uses UTC dates.", "loginForRegistrations": "Sign in to view your registrations.", "loadError": "Events could not be loaded. Please try again.", "youRegistered": "You are registered", "pagination": "Event pages", "previous": "Previous", "next": "Next", "pageSummary": "Page {page} of {pages} · {total} events", "weeklyView": "Weekly view", "previousWeek": "Previous week", "nextWeek": "Next week" }, "polls": { "title": "Polls", "subtitle": "Share your opinion in community polls", "empty": "No polls yet.", "back": "← Polls", "statusActive": "Open", "statusClosed": "Closed", "questionsCount": "{count} questions", "ends": "Ends {date}", "voteTitle": "Cast your vote", "voteSubtitle": "Answer each question below", "submitVote": "Submit vote", "voting": "Submitting…", "voteSuccess": "Thanks for voting!", "voteError": "Could not submit your vote.", "loginToVote": "Log in to vote in this poll.", "alreadyVoted": "You have already voted.", "pollClosed": "This poll is closed.", "cannotVote": "Voting is not available.", "textPlaceholder": "Your answer…", "resultsTitle": "Results", "voteCount": "{count} ({pct}%)", "totalVotes": "{count} total votes", "textResponses": "{count} free-text responses" }, "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", "success": { "posted": "Request submitted." }, "errors": { "empty": "Please enter a song title or artist.", "invalid": "Invalid request.", "ratelimit": "You're submitting too fast. Please wait a moment and try again.", "error": "Something went wrong. Please try again." } }, "radioApply": { "title": "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", "success": { "submitted": "Application submitted — we will get back to you soon." }, "errors": { "invalid": "Please fill in all required fields.", "ratelimit": "You're submitting too fast. Please wait a moment and try again.", "error": "Something went wrong. Please try again." } }, "settings": { "accountSettings": "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" }, "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", "rateLimit": "Too many attempts. Please wait before trying again." }, "login": { "title": "Kirjaudu sisään", "subtitle": "Kirjaudu sisään jatkaaksesi seuraavaan hotelliin.", "subtitle2fa": "Syötä 6-numeroinen koodi tunnistussovelluksestasi.", "welcomeBack": "Tervetuloa takaisin", "welcomeBackSub": "Kirjaudu sisään liittyäksesi hotelliin {hotelName}", "usernamePlaceholder": "Käyttäjätunnus", "passwordPlaceholder": "Salasana", "codePlaceholder": "Syötä 2FA-koodisi", "pleaseWait": "Odota hetki...", "verify": "Varmenna", "signIn": "Kirjaudu sisään", "or": "tai", "noAccount": "Nie vielä tiliä?", "createOne": "Luo tili", "forgotPassword": "Unohditko salasanasi?", "errorInvalidCredentials": "Väärä käyttäjätunnus tai salasana", "errorInvalid2fa": "Virheellinen 2FA-koodi", "errorUnverified": "Vahvista sähköpostiosoitteesi ennen kirjautumista.", "errorCaptcha": "Captcha-varmennus epäonnistui. Yritä uudelleen.", "whoIsOnline": "Ketkä ovat paikalla", "newestCitizens": "Uusimmat asukkaat", "usersOnline": "{count} paikalla", "username": "Käyttäjätunnus", "password": "Salasana", "showPassword": "Näytä", "hidePassword": "Piilota" }, "register": { "title": "Luo tili", "subtitle": "Liity hotelliin — se kestää vain hetken.", "username": "Käyttäjätunnus", "email": "Sähköposti", "password": "Salasana", "confirmPassword": "Toista salasana", "usernamePlaceholder": "Käyttäjätunnus", "emailPlaceholder": "Sähköposti", "passwordPlaceholder": "Salasana (vähintään 12 merkkiä)", "confirmPasswordPlaceholder": "Toista salasana", "selectOutfit": "Valitse asustesi", "termsAccept": "Olen 18-vuotias ja hyväksyn {hotel} säännöt.", "accepted": "Hyväksytty ja hyväksyn", "showPassword": "Näytä", "hidePassword": "Piilota", "accountDetails": "Tilitiedot", "credentials": "Kirjautumistiedot ja turvallisuus", "createAccount": "Luo tili", "creatingAccount": "Luodaan tiliä...", "redirecting": "Siirrytään tilillesi...", "alreadyHaveAccount": "Onko sinulla jo tili? Kirjaudu sisään!", "alreadyHaveAccountPre": "Onko sinulla jo tili?", "alreadyHaveAccountLink": "Kirjaudu sisään", "register": "Rekisteröidy", "whoIsOnline": "Ketkä ovat paikalla", "usersOnline": "{count} paikalla", "termsError": "Sinun on hyväksyttävä säännöt rekisteröityäksesi.", "usernameError": "Käyttäjätunnus on pakollinen.", "emailError": "Kelvollinen sähköpostiosoite on pakollinen.", "passwordError": "Salasanassa on oltava vähintään 12 merkkiä", "confirmPasswordError": "Salasanat eivät täsmää.", "termsRequired": "Sinun on hyväksyttävä säännöt.", "usernameRequired": "Käyttäjätunnus on pakollinen.", "emailRequired": "Sähköpostiosoite on pakollinen.", "passwordRequired": "Salasana on pakollinen.", "passwordsDontMatch": "Salasanat eivät täsmää.", "newestCitizens": "Uusimmat asukkaat", "ageVerified": "Olen 18-vuotias ja hyväksyn ikärajan.", "invitedBy": "Kutsuja: {username}", "strengthWeak": "Heikko", "strengthFair": "Tyydyttävä", "strengthGood": "Hyvä", "strengthStrong": "Vahva", "passwordMinLength": "Salasanassa on oltava vähintään 12 merkkiä", "passwordUpper": "Salasanassa on oltava vähintään yksi iso kirjain", "passwordLower": "Salasanassa on oltava vähintään yksi pieni kirjain", "passwordDigit": "Salasanassa on oltava vähintään yksi numero", "passwordSpecial": "Salasanassa on oltava vähintään yksi erikoismerkki", "passwordMaxLength": "Salasana on liian pitkä", "usernameMinLength": "Käyttäjätunnus on oltava vähintään 3 merkkiä", "usernameMaxLength": "Käyttäjätunnus saa olla korkeintaan 25 merkkiä", "usernamePattern": "Käyttäjätunnus voi sisältää vain kirjaimia, numeroita, alaviivan ja viivan", "usernameReserved": "Tämä käyttäjätunnus on varattu", "emailValid": "Anna kelvollinen sähköpostiosoite", "emailDisposable": "Väliaikaisia sähköpostiosoitteita ei sallita", "passwordsMatch": "Passwords do not match.", "captchaFailed": "Captcha-varmennus epäonnistui. Yritä uudelleen.", "usernameTaken": "Tämä käyttäjätunnus on jo käytössä", "rateLimited": "Liikaa rekisteröintiyrityksiä. Odota muutama minuutti ja yritä uudelleen.", "vpnBlocked": "Rekisteröityminen VPN/proxy-yhteyksien kautta ei ole sallittua.", "maxAccountsPerIp": "Olet saavuttanut yhteytesi enimmäismäärän tilejä.", "unavailable": "Rekisteröityminen ei ole väliaikaisesti käytettävissä.", "createFailed": "Tiliä ei voitu luoda. Yritä uudelleen tai ota yhteyttä henkilökuntaan.", "invalidInput": "Tarkista korostetut kentät ja yritä uudelleen." }, "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", "errorCaptcha": "Captcha verification failed. Please try again." }, "reset": { "title": "Set a new password", "subtitle": "Choose a strong password you don't use elsewhere.", "passwordPlaceholder": "New password (min 12 chars)", "resetPassword": "Reset password", "backToLogin": "Back to login", "passwordMinLength": "Salasanassa on oltava vähintään 12 merkkiä", "tooManyAttempts": "Liikaa yrityksiä — yritä myöhemmin uudelleen" }, "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." }, "mod": { "title": "Moderation panel", "badge": "Mod", "overviewTitle": "Moderator overview", "overviewSubtitle": "CFH, quick actions and bans without full admin access.", "shortcutsTitle": "Shortcuts", "nav": { "overview": "Overview", "cfh": "Call for Help", "actions": "Quick actions", "bans": "Bans", "fullAdmin": "Full admin", "backToSite": "Back to site", "tickets": "Tickets", "helpTickets": "Help-center tickets", "users": "Users", "team": "Team" }, "usersTitle": "Players", "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", "usersEmpty": "No players found", "usersSearchPlaceholder": "Search username, motto or ID…", "usersRank": "rank", "usersPublicProfile": "Public profile", "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online", "stats": { "openCfh": "Open CFH", "bansToday": "Bans today", "modsOnline": "Mods online", "quickActions": "Quick actions", "quickActionsHint": "Kick, mute, alert", "openTickets": "Open CMS tickets", "openHelpTickets": "Open help tickets", "team": "Mod team", "teamHint": "Online staff & workload" } }, "studio": { "title": "Studio", "sourceFurnidata": "{source} furnidata", "searchPlaceholder": "Search furni, classnames, keywords… (/)", "results": "{count} results", "inDb": "in DB", "inCatalog": "in catalog", "missingNitro": "missing nitro", "globalTranslation": "Translation (global)", "catalogTree": "Catalog", "source": "Furni source", "officialSource": "(official)", "type": "Type", "allTypes": "All types", "floorItems": "Floor items", "wallItems": "Wall items", "category": "Category", "allCategories": "All categories", "status": "Status", "allStatuses": "All statuses", "imported": "Imported", "inCatalogStatus": "In catalog", "missingNitroStatus": "Missing nitro", "sort": "Sort", "defaultOrder": "Default order", "nameAZ": "Name A–Z", "classnameAZ": "Classname A–Z", "categorySort": "Category", "importedFirst": "Imported first", "notImportedFirst": "Not imported first", "noNitro": "{count} no nitro", "gridView": "Grid view", "listView": "List view", "selectAll": "Select all", "selectedCount": "{count} selected", "clear": "Clear", "translate": "Translate", "noLanguages": "No languages", "allLanguages": "All languages", "languagesCount": "{count} languages", "languages": "Languages", "all": "All", "none": "None", "languageLabel": "Language {lang}", "translateAll": "Translate all", "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", "importAuto": "Import {count} auto", "maintenance": { "title": "Catalog maintenance", "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", "refresh": "Refresh", "currentHealth": "Current health", "itemsInBase": "{count} items in items_base", "loading": "Loading…", "statSpriteId": "sprite_id ≠ id", "hintSpriteId": "items_base sprite drift", "statOfferId": "offer_id ≠ id", "hintOfferId": "catalog offer drift", "statDuplicateClassnames": "Duplicate classnames", "hintDuplicateClassnames": "items_base item_name repeats", "statDuplicateCatalogRows": "Duplicate catalog rows", "hintDuplicateCatalogRows": "same product listed twice on a page", "statIdMismatch": "ID ≠ FurnitureData", "hintIdMismatch": "items_base id differs from furnidata", "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", "hintDuplicateBcCatalogRows": "same product listed twice in builder club", "statDuplicateCatalogPages": "Duplicate catalog pages", "hintDuplicateCatalogPages": "same caption under the same parent (double links)", "optionSpriteId": "Fix sprite_id", "optionOfferId": "Fix catalog offer_id", "optionRemoveDuplicates": "Remove duplicates (items + catalog)", "optionReconcile": "Reconcile FurnitureData ↔ DB", "optionAlignIds": "Align items_base IDs to FurnitureData", "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", "previewChanges": "Preview changes", "plannedIdMoves": "Planned ID moves: {moves}", "newItemsInsert": "New items to insert: {inserted}", "skipped": "Skipped (id occupied): {list}", "applyAlignment": "Apply alignment", "fixEverythingTitle": "Fix everything", "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", "runSelected": "Run selected", "selectAtLeastOne": "Select at least one repair to run", "previewReady": "Preview ready", "previewFailed": "Preview failed", "toast": { "spriteFixed": "sprite_id fixed", "offerFixed": "catalog offer_id fixed", "duplicatesRemoved": "Duplicates removed (items + catalog)", "reconciled": "FurnitureData reconciled", "aligned": "items_base IDs aligned to FurnitureData", "allApplied": "All selected repairs applied", "failed": "Failed" } } }, "housekeeping": { "preview": { "badge": "Foundation preview", "commandDisabled": "Search and commands are enabled in a later subproject.", "backToSite": "Back to site" }, "navigation": { "skipToContent": "Skip to content", "primary": "Housekeeping domains", "contextual": "Domain navigation" }, "domains": { "operations": { "title": "Operations", "description": "Operational overview and daily queues" }, "people": { "title": "People", "description": "Users, moderation, and support" }, "content": { "title": "Content", "description": "Editorial content and community engagement" }, "economy": { "title": "Economy", "description": "Catalog and shop operations" }, "hotel": { "title": "Hotel", "description": "Rooms, radio, and asset tools", "routes": { "themeManager": { "title": "Theme manager", "description": "Save, switch, import, export, and publish custom hotel themes (survive updates)", "currentThemeTitle": "Current theme", "currentThemeHint": "The palette and background being served to your visitors right now.", "saveLabel": "Save theme", "savePlaceholder": "Theme name (e.g. Summer Gold)", "exportCurrent": "Export", "savedThemesTitle": "Saved themes", "savedThemesHint": "Apply any saved theme anytime. Saved themes are stored in the database, so they keep working after CMS updates.", "noThemes": "No saved themes yet — save one above.", "active": "Active", "apply": "Apply", "export": "Export", "rename": "Rename", "renameSave": "OK", "delete": "Delete", "deleteConfirm": "Delete theme \"{name}\"?", "importTitle": "Import a theme", "importHint": "Upload a `.atom-theme.json` file exported here, or a theme exported from the Theme Builder.", "importNameLabel": "Name", "importNamePlaceholder": "Optional override", "importFileLabel": "Theme file", "importApplyLabel": "Apply after import", "importButton": "Import", "invalidFile": "That file isn't a valid JSON theme.", "presetsTitle": "Quick start presets", "backgroundTitle": "Background", "backgroundHint": "Set a custom background image for the public site using any image URL, or upload one.", "backgroundPreviewLabel": "Preview", "backgroundUrlLabel": "Image URL", "backgroundPositionLabel": "Position", "backgroundSizeLabel": "Size", "backgroundRepeatLabel": "Repeat", "applyBackground": "Apply background", "uploadButton": "Upload image…", "clearBackground": "Remove background", "backgroundEffectLabel": "Effect", "backgroundEffectHint": "Animate the public background with a gentle, theme-matched layer (aurora uses your primary/accent colors).", "backgroundEffect_none": "None (plain background)", "backgroundEffect_aurora": "Aurora glow", "backgroundEffect_particles": "Floating particles", "backgroundEffect_aurora-particles": "Aurora + particles", "backgroundEffectPreview": "Effect: {effect} — shown behind the public site.", "backgroundOverlayLabel": "Overlay tint", "backgroundOverlayOpacityLabel": "Overlay strength", "notice": { "saved": "Theme saved.", "applied": "Theme applied.", "renamed": "Theme renamed.", "deleted": "Theme deleted.", "imported": "Theme imported.", "preset": "Preset applied.", "background": "Background updated.", "importError": "That file couldn't be imported. It may be too large or not a theme export.", "backgroundError": "The image couldn't be uploaded. Use a PNG, JPEG, GIF, or WebP up to 10MB." } }, "nitroCleanup": { "title": "Nitro cleanup", "description": "Scan and remove fake, broken, and orphaned furni asset files" } } }, "system": { "title": "System", "description": "Configuration, observability, and access" } }, "states": { "loading": { "title": "Loading housekeeping", "description": "Preparing the available housekeeping tools." }, "empty": { "title": "Nothing available", "description": "No housekeeping content is available for this domain." }, "partial": { "label": "Partial data", "title": "Some information is unavailable", "description": "Review the available information and try again later." }, "error": { "title": "Unable to load housekeeping", "description": "Try again later or contact an administrator." } } }, "search": { "title": "Search", "subtitle": "Find users, open rooms, news and events.", "queryLabel": "Search term", "submit": "Search", "enterQuery": "Enter a search term to find users, rooms, news and events.", "resultsFor": "Results for “{query}”", "users": "Users", "rooms": "Open rooms", "news": "News", "events": "Events", "loadError": "These results could not be loaded. Please try again.", "empty": "No matches found.", "online": "Online", "offline": "Offline", "pagination": "{category} pages", "previous": "Previous", "next": "Next", "pageSummary": "Page {page} of {pages} · {total} results" }, "notifications": { "title": "Notifications", "subtitle": "Your support replies, friend requests and registered events.", "scope": "This inbox shows up to 100 recent support replies, 100 pending friend requests and 100 upcoming registered events.", "loading": "Loading notifications…", "error": "Notifications are temporarily unavailable.", "retry": "Try again", "preferences": "Notification preferences", "preferencesHint": "Choose which categories appear here. These settings do not send emails or change your registrations.", "support": "Support replies", "friends": "Friend requests", "events": "Upcoming events", "unreadCount": "{count, plural, =0 {No unread notifications} one {# unread notification} other {# unread notifications}}", "saveError": "The change could not be saved. Please try again.", "saved": "Change saved.", "empty": "No notifications in your enabled categories.", "read": "Read", "unread": "Unread", "markRead": "Mark as read", "pagination": "Notification pages", "previous": "Previous", "next": "Next", "page": "Page {page} of {pages}" }, "developers": { "page": { "Bearer": "🔒 Bearer", "Session": "🔒 Session", "Public": "Public", "Allendpointsliveunder": "All endpoints live under", "api": "/api", "andreturnJSONMostreadendpointsareopenahandfulthattouchyouraccountneedatokenBrowsethegroupsbeloweachrowshowsthemethodpathwhatitdoesandwhetheritneedsauthentication": "and return JSON. Most read endpoints are open; a handful that touch your account need a token. Browse the groups below — each row shows the method, path, what it does and whether it needs authentication.", "Mostreadsare": "Most reads are", "open": "open", "andneednocredentialsEndpointsmarked": "and need no credentials. Endpoints marked", "requireapersonalaccesstokensentintherequestheader": "require a personal access token sent in the request header:", "AuthorizationBeareryourtoken": "Authorization: Bearer '