From 91008d84fe45c1f009f55d87f56fe34b352f02aa Mon Sep 17 00:00:00 2001 From: openhands Date: Sat, 12 Sep 2026 19:30:16 +0200 Subject: [PATCH] feat(i18n): synchronize all translation keys across all supported locales (25 languages) --- scripts/sync-translations.mjs | 37 + src/messages/ar.json | 5578 ++++++++++++++++--- src/messages/bg.json | 8827 +++++++++++++++++------------- src/messages/cs.json | 8827 +++++++++++++++++------------- src/messages/da.json | 8827 +++++++++++++++++------------- src/messages/de.json | 8828 +++++++++++++++++------------- src/messages/el.json | 8827 +++++++++++++++++------------- src/messages/es.json | 8828 +++++++++++++++++------------- src/messages/fi.json | 5578 ++++++++++++++++--- src/messages/fr.json | 8828 +++++++++++++++++------------- src/messages/hr.json | 8827 +++++++++++++++++------------- src/messages/hu.json | 8827 +++++++++++++++++------------- src/messages/it.json | 9713 +++++++++++++++++---------------- src/messages/ja.json | 5578 ++++++++++++++++--- src/messages/nl.json | 9288 ++++++++++++++++--------------- src/messages/no.json | 8827 +++++++++++++++++------------- src/messages/pl.json | 8828 +++++++++++++++++------------- src/messages/pt.json | 8828 +++++++++++++++++------------- src/messages/ro.json | 8827 +++++++++++++++++------------- src/messages/ru.json | 8824 +++++++++++++++++------------- src/messages/sk.json | 8827 +++++++++++++++++------------- src/messages/sr.json | 8827 +++++++++++++++++------------- src/messages/sv.json | 8827 +++++++++++++++++------------- src/messages/tr.json | 8828 +++++++++++++++++------------- src/messages/uk.json | 8827 +++++++++++++++++------------- 25 files changed, 117885 insertions(+), 85603 deletions(-) create mode 100644 scripts/sync-translations.mjs diff --git a/scripts/sync-translations.mjs b/scripts/sync-translations.mjs new file mode 100644 index 00000000..1e05cd67 --- /dev/null +++ b/scripts/sync-translations.mjs @@ -0,0 +1,37 @@ +import fs from "node:fs"; +import path from "node:path"; + +const messagesDir = "/var/www/atom-nexst/src/messages"; +const enPath = path.join(messagesDir, "en.json"); +const enData = JSON.parse(fs.readFileSync(enPath, "utf8")); + +function deepMerge(target, source) { + for (const key of Object.keys(source)) { + if (source[key] && typeof source[key] === "object" && !Array.isArray(source[key])) { + if (!target[key] || typeof target[key] !== "object" || Array.isArray(target[key])) { + target[key] = {}; + } + deepMerge(target[key], source[key]); + } else { + if (!(key in target)) { + target[key] = source[key]; + } + } + } + return target; +} + +const files = fs.readdirSync(messagesDir).filter((f) => f.endsWith(".json") && f !== "en.json"); + +for (const file of files) { + const filePath = path.join(messagesDir, file); + try { + const data = JSON.parse(fs.readFileSync(filePath, "utf8")); + deepMerge(data, enData); + fs.writeFileSync(filePath, JSON.stringify(data, null, 2) + "\n", "utf8"); + console.log(`Synced ${file}`); + } catch (err) { + console.error(`Error syncing ${file}:`, err); + } +} +console.log("Translation sync complete!"); diff --git a/src/messages/ar.json b/src/messages/ar.json index 956e8152..45ba73be 100644 --- a/src/messages/ar.json +++ b/src/messages/ar.json @@ -1,674 +1,4908 @@ { - "draftRecovery": { - "ready": "ستُحفظ نسخة للاستعادة في هذا المتصفح لمدة 7 أيام.", - "saved": "تم حفظ نسخة للاستعادة في هذا المتصفح لمدة 7 أيام.", - "unavailable": "الاستعادة في المتصفح غير متاحة. أبقِ هذه الصفحة مفتوحة حتى يتم حفظ تغييراتك.", - "found": "توجد نسخة للاستعادة في هذا المتصفح، تم حفظها في", - "restore": "استعادة نسخة المتصفح", - "discard": "حذف نسخة المتصفح", - "confirmRestore": "هل تريد استبدال النموذج الحالي بنسخة الاستعادة من المتصفح؟ راجع المحتوى قبل الحفظ.", - "confirmDiscard": "هل تريد حذف نسخة الاستعادة هذه من المتصفح؟ سيبقى النموذج الحالي دون تغيير." - }, - "nav": {}, - "header": {}, - "footer": {}, - "emails": {}, - "pages": { - "admin": { - "nav": { - "studio": "Studio", - "operationsCenter": "Operations center" - }, - "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." - }, - "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" - } - } - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "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" - }, - "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}" - }, - "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." - } - }, - "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" - } - } - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "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." - } - }, - "toolbar": { - "home": "الرئيسية", - "reload": "إعادة تحميل", - "fullscreen": "ملء الشاشة", - "logout": "تسجيل الخروج", - "onlineUsers": "المستخدمون المتواجدون", - "emulatorOnline": "المحاكي متصل", - "emulatorOffline": "المحاكي غير متصل", - "dragToMove": "اسحب للتحريك", - "hide": "إخفاء الشريط", - "fullscreenExit": "الخروج من ملء الشاشة", - "show": "إظهار الشريط", - "emulatorUnknown": "حالة المحاكي غير معروفة" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "تشخيص الملفات", - "preliminary": "فحص أولي للعناوين؛ سيتم التحقق من المحتوى عند الاستيراد.", - "http": "HTTP {status}", - "network": "تعذر الاتصال", - "timeout": "انتهت مهلة المصدر", - "invalidResponse": "أعاد المصدر صفحة ويب بدلاً من ملف", - "available": "تم العثور على الملف؛ ينتظر التحقق", - "recover": "إرفاق الأصل والاستئناف", - "recoveryHint": "اختر {file} (حتى 50 MB). تُفحص هويته. تُعاد العناصر الفاشلة فقط وتُحفظ الواردات المكتملة.", - "attach": "اختر ملف .nitro الأصلي", - "working": "جارٍ التحقق أو الاستئناف...", - "attached": "أُرفق الملف المطابق", - "resume": "استئناف العناصر الفاشلة بهذا الملف", - "invalidFile": "اختر ملف .nitro أصلياً مطابقاً، حتى 50 MB، ثم أعد المحاولة.", - "resumeError": "حدّث السجل واستخدم أحدث محاولة؛ تحقق من الملف وأعد المحاولة.", - "mismatchedFile": "هذا الملف يخص أثاثاً مختلفاً.", - "alreadyStarted": "بدأ الاستئناف بالفعل. حدّث السجل واستخدم أحدث محاولة.", - "notEligible": "هذا العنصر غير مؤهل للاسترداد بالمرفقات." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "ستُحفظ نسخة للاستعادة في هذا المتصفح لمدة 7 أيام.", + "saved": "تم حفظ نسخة للاستعادة في هذا المتصفح لمدة 7 أيام.", + "unavailable": "الاستعادة في المتصفح غير متاحة. أبقِ هذه الصفحة مفتوحة حتى يتم حفظ تغييراتك.", + "found": "توجد نسخة للاستعادة في هذا المتصفح، تم حفظها في", + "restore": "استعادة نسخة المتصفح", + "discard": "حذف نسخة المتصفح", + "confirmRestore": "هل تريد استبدال النموذج الحالي بنسخة الاستعادة من المتصفح؟ راجع المحتوى قبل الحفظ.", + "confirmDiscard": "هل تريد حذف نسخة الاستعادة هذه من المتصفح؟ سيبقى النموذج الحالي دون تغيير." + }, + "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" + }, + "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." + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "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" + } + }, + "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!" + }, + "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" + }, + "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" + } + }, + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "tickets": { + "title": "CMS support desk", + "subtitle": "Internal CMS tickets (assignee, priority, staff workflow). Not the same as help-center tickets from /help.", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab. Use Inbox for both queues.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product’s own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Tickets players open at /help/tickets. Separate from the CMS support desk.", + "queueHint": "This queue is the public help center. Use Inbox for both queues, or Support desk for CMS-only.", + "queueOtherCta": "Open unified inbox", + "queueCounts": "Open here: {here} · Support desk: {other}", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + } + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "applications": { + "title": "Staff Applications", + "subtitle": "Pending and reviewed staff applications", + "pending": "Pending", + "approved": "Approved", + "rejected": "Rejected", + "noApplications": "No applications yet", + "colId": "ID", + "colApplicant": "Applicant", + "colPosition": "Position", + "colStatus": "Status", + "colSubmitted": "Submitted", + "colActions": "Actions", + "review": "Review", + "approve": "Approve", + "reject": "Reject", + "confirmApprove": "Approve {username} for {position}?", + "confirmReject": "Reject {username}'s application for {position}?", + "detail": { + "title": "Application by {username}", + "subtitle": "For {position}", + "about": "About the applicant", + "message": "Application message", + "status": "Status", + "submitted": "Submitted", + "noMessage": "No message provided" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Teams", + "subtitle": "Define staff rank names and descriptions", + "addRank": "Add rank", + "editRank": "Edit rank", + "deleteRank": "Delete rank", + "noTeams": "No rank definitions yet", + "confirmDelete": "Delete rank {id} definition?", + "colId": "ID", + "colRank": "Rank", + "colName": "Name", + "colBadge": "Badge", + "colColour": "Colour", + "colActions": "Actions", + "form": { + "rankId": "Rank ID", + "rankIdPlaceholder": "Numeric rank ID", + "name": "Name", + "namePlaceholder": "e.g. Administrator", + "badge": "Badge code", + "badgePlaceholder": "e.g. ADM001", + "colour": "Colour", + "colourPlaceholder": "e.g. #ff0000", + "save": "Save team definition", + "saving": "Saving…", + "cancel": "Cancel" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Permissions", + "subtitle": "This is the live access control for admin and mod panels", + "addPermission": "Add permission", + "editPermission": "Edit permission", + "deletePermission": "Delete permission", + "noPermissions": "No permissions configured yet", + "confirmDelete": "Delete this permission?", + "colId": "ID", + "colRank": "Rank", + "colPermission": "Permission", + "colCreated": "Created", + "colActions": "Actions", + "form": { + "rankId": "Rank ID", + "rankIdPlaceholder": "Minimum rank required", + "permission": "Permission key", + "permissionPlaceholder": "e.g. admin.articles.manage", + "save": "Save permission", + "saving": "Saving…", + "cancel": "Cancel" + } + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "shop": { + "title": "Shop", + "subtitle": "Manage packages and orders", + "packages": "Packages", + "orders": "Orders", + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions (most recent 25)", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackage": "+ New package", + "edit": "Edit", + "delete": "Delete", + "viewOrder": "View", + "noPackages": "No shop packages yet", + "noOrders": "No orders yet", + "confirmDelete": "Delete this package?", + "colId": "ID", + "colName": "Name", + "colPrice": "Price", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colCurrency": "Currency", + "colType": "Type", + "colSold": "Sold", + "colEnabled": "Enabled", + "colActions": "Actions", + "colOrderId": "Order ID", + "colCustomer": "Customer", + "colPackage": "Package", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "colAmount": "Amount", + "colStatus": "Status", + "colDate": "Date", + "statusPending": "Pending", + "statusCompleted": "Completed", + "statusRefunded": "Refunded", + "form": { + "name": "Name", + "namePlaceholder": "Package name", + "description": "Description", + "descriptionPlaceholder": "Package description", + "price": "Price", + "currency": "Currency", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Type", + "typeCredits": "Credits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamonds", + "typeBadge": "Badge", + "typeFurni": "Furniture", + "typeRank": "Rank", + "amount": "Amount", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "e.g. VIP001", + "rankId": "Rank ID", + "furniItems": "Furniture items", + "enabled": "Enabled", + "save": "Save package", + "saving": "Saving…", + "cancel": "Cancel", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "listHeading": "Guilds ({count})", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "transactions": { + "title": "Transactions", + "subtitle": "PayPal payment log", + "noTransactions": "No transactions yet", + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colId": "ID", + "colUser": "User", + "colPayer": "Payer", + "colAmount": "Amount", + "colCurrency": "Currency", + "colPackage": "Package", + "colStatus": "Status", + "colTransaction": "Transaction ID", + "colDate": "Date", + "colActions": "Actions", + "statusCompleted": "Completed", + "statusPending": "Pending", + "statusFailed": "Failed", + "statusRefunded": "Refunded", + "detail": { + "title": "Transaction #{id}", + "paypalId": "PayPal ID", + "payerEmail": "Payer email", + "grossAmount": "Gross amount", + "fee": "Fee", + "netAmount": "Net amount" + } + }, + "vouchers": { + "title": "Shop Vouchers", + "subtitle": "Manage redeemable voucher codes", + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "newVoucher": "+ New voucher", + "edit": "Edit", + "delete": "Delete", + "noVouchers": "No vouchers yet", + "confirmDeleteTitle": "Delete voucher", + "confirmDelete": "Delete voucher \"{code}\"?", + "created": "Voucher created", + "deleted": "Voucher deleted", + "updated": "Voucher updated", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "updateError": "Could not update voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colId": "ID", + "colCode": "Code", + "colValue": "Value", + "colAmount": "Amount", + "colType": "Type", + "colUses": "Uses / Max", + "colStatus": "Status", + "colExpires": "Expires", + "colCreated": "Created", + "colActions": "Actions", + "form": { + "code": "Code", + "codePlaceholder": "e.g. SUMMER2025", + "value": "Value", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "type": "Type", + "typeCredits": "Credits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamonds", + "typeBadge": "Badge", + "typeFurni": "Furniture", + "typeRank": "Rank", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "e.g. VIP001", + "rankId": "Rank ID", + "maxUses": "Max uses", + "maxUsesPlaceholder": "0 = unlimited", + "expiresAt": "Expires at", + "enabled": "Enabled", + "create": "Create voucher", + "save": "Save voucher", + "saving": "Saving…", + "cancel": "Cancel" + } + }, + "subscriptions": { + "title": "Subscriptions", + "subtitle": "Active recurring subscriptions", + "noSubscriptions": "No active subscriptions", + "cancel": "Cancel", + "confirmCancel": "Cancel subscription for {username}?", + "colId": "ID", + "colUser": "User", + "colPackage": "Package", + "colAmount": "Amount", + "colInterval": "Interval", + "colStarted": "Started", + "colNextBilling": "Next billing", + "colStatus": "Status", + "colActions": "Actions", + "statusActive": "Active", + "statusCancelled": "Cancelled", + "statusExpired": "Expired", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Rare Values", + "subtitle": "Manage rare value categories and item prices", + "categories": "Categories", + "items": "Items", + "addCategory": "Add category", + "editCategory": "Edit category", + "editValue": "Edit value", + "deleteCategory": "Delete category", + "noCategories": "No rare value categories yet", + "confirmDeleteCategory": "Delete category \"{name}\" and all its items?", + "colId": "ID", + "colName": "Name", + "colItems": "Items", + "colUpdated": "Updated", + "colActions": "Actions", + "colItemName": "Item name", + "colCredits": "Credits", + "colPoints": "Points", + "colPointType": "Point type", + "categoryForm": { + "name": "Name", + "namePlaceholder": "Category name", + "save": "Save category", + "saving": "Saving…", + "cancel": "Cancel" + }, + "itemForm": { + "itemName": "Item name", + "itemNamePlaceholder": "e.g. Throne", + "credits": "Credits value", + "points": "Points value", + "pointType": "Point type", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Diamonds", + "save": "Save item", + "saving": "Saving…", + "cancel": "Cancel", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Badges", + "subtitle": "Upload, give and manage badge catalogue", + "upload": "Upload", + "giveBadge": "Give badge", + "catalogue": "Catalogue", + "uploadTitle": "Upload a new badge", + "uploadSubtitle": "Upload a badge image file", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "e.g. VIP001", + "badgeFile": "Badge file", + "badgeFileHint": "PNG or GIF, recommended 40x40", + "uploadButton": "Upload", + "uploading": "Uploading…", + "giveTitle": "Give badge to user", + "giveSubtitle": "Grant a badge to a specific user", + "username": "Username", + "usernamePlaceholder": "Target username", + "giveButton": "Give badge", + "giving": "Giving…", + "catalogueTitle": "Badge catalogue", + "catalogueSubtitle": "All available badges in the hotel", + "noBadges": "No badges in the catalogue", + "search": "Search badges", + "searchPlaceholder": "Search by code or name…", + "colCode": "Code", + "colImage": "Image", + "colName": "Name", + "colDescription": "Description", + "colActions": "Actions", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Achievements", + "subtitle": "Read-only list of in-game achievements", + "noAchievements": "No achievements configured", + "colId": "ID", + "colName": "Name", + "colCategory": "Category", + "colLevels": "Levels", + "colReward": "Reward", + "colProgress": "Progress", + "levelLabel": "Level {level}", + "rewardCredits": "{count} credits", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Calendar campaigns", + "subtitle": "Read-only list of calendar campaigns and events", + "noCampaigns": "No calendar campaigns yet", + "colId": "ID", + "colName": "Name", + "colStart": "Start", + "colEnd": "End", + "colType": "Type", + "colReward": "Reward", + "colActions": "Actions", + "detail": { + "title": "Campaign: {name}", + "subtitle": "Calendar event details", + "days": "Days", + "dayLabel": "Day {day}", + "reward": "Reward", + "noDays": "No days configured for this campaign", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Radio Moderation", + "subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).", + "moderation": "Moderation", + "shouts": "Shouts", + "applications": "Applications", + "schedules": "Schedules", + "settings": "Settings", + "embed": "Embed", + "ranks": "Ranks", + "history": "History", + "apiKeys": "API Keys", + "points": "Points", + "autoDj": "AutoDJ", + "user": "User", + "message": "Message", + "posted": "Posted", + "realName": "Real Name", + "age": "Age", + "style": "Style", + "applied": "Applied", + "day": "Day", + "start": "Start", + "end": "End", + "show": "Show", + "status": "Status", + "active": "active", + "inactive": "inactive", + "hidden": "hidden", + "activeSchedules": "Active schedules", + "noShouts": "No shouts to moderate", + "noApplications": "No applications submitted.", + "noSchedules": "No schedules configured.", + "deleteShout": "Delete", + "confirmDeleteShout": "Delete this shout?", + "pendingApplications": "Pending applications", + "settingsForm": { + "title": "Radio Settings", + "subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "enabled": "Enabled", + "disabled": "Disabled", + "totalKeys": "Total keys", + "configured": "Configured", + "curatedHint": "curated keys with a value", + "customKeys": "Custom keys", + "saveAll": "Save all", + "singleKey": "Add / overwrite a single key", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "value", + "commentPlaceholder": "comment (optional)", + "saveSingle": "Save", + "otherSettings": "Other radio settings", + "dbError": "Could not load settings (database unavailable). Defaults will be created on save." + }, + "embedPage": { + "title": "Radio Embed", + "subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).", + "streamUrl": "Stream URL", + "configured": "Configured", + "missing": "Missing", + "radioName": "Radio name", + "nowPlayingApi": "Now-playing API", + "set": "Set", + "notSet": "Not set", + "noStreamUrl": "No stream URL configured", + "noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.", + "goToSettings": "Go to Radio Settings", + "livePreview": "Live preview", + "livePreviewText": "This is the bare audio player as visitors will see it. Press play to confirm the stream is reachable.", + "source": "Source", + "audioSnippet": "Audio player snippet", + "audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.", + "iframeSnippet": "Iframe wrapper snippet", + "iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.", + "audioUnsupported": "Your browser does not support the audio element." + }, + "banners": { + "title": "Banners", + "heading": "Radio Banners", + "description": "Promotional banners shown on the radio page, ordered by sort order.", + "addBanner": "Add banner", + "createBanner": "Create banner", + "deleteBanner": "Delete banner", + "noBanners": "No banners yet — add one above.", + "existing": "Existing banners ({count})", + "save": "Save", + "delete": "Delete", + "byUser": "by user {id}", + "active": "active", + "hidden": "hidden", + "bannerAlt": "Radio banner", + "statusActive": "Active", + "statusHidden": "Hidden", + "dbError": "Could not load banners (database unavailable).", + "form": { + "imagePath": "Image path / URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Title", + "description": "Description", + "sortOrder": "Sort order", + "active": "Active" + } + }, + "ranksForm": { + "title": "Radio Ranks", + "subtitle": "DJ / staff ranks assignable on radio applications.", + "dbError": "Could not load ranks (database unavailable).", + "active": "Active", + "addRank": "Add rank", + "name": "Name", + "badgeCode": "Badge code", + "description": "Description", + "createRank": "Create rank", + "existing": "Existing ranks ({count})", + "noRanks": "No ranks yet — add one above.", + "activeLabel": "active", + "inactiveLabel": "inactive", + "save": "Save", + "deleteRank": "Delete rank #{id}" + }, + "historyPage": { + "title": "Radio Play History", + "subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.", + "dbError": "Could not load radio history (database unavailable).", + "showsLogged": "Shows logged", + "onAirNow": "On air now", + "uniqueDjs": "Unique DJs", + "peakListeners": "Peak listeners", + "empty": "No radio history recorded yet.", + "showLog": "Show log ({count})", + "colDj": "DJ", + "colShow": "Show", + "colStarted": "Started", + "colEnded": "Ended", + "colAirtime": "Airtime", + "colListeners": "Listeners", + "colNotes": "Notes", + "onAir": "on air" + }, + "apiKeysForm": { + "title": "Radio API Keys", + "subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.", + "dbError": "Could not load API keys (database unavailable).", + "totalKeys": "Total keys", + "active": "Active", + "inactive": "Inactive", + "generateKey": "Generate key", + "generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.", + "name": "Name", + "namePlaceholder": "AzureCast bridge", + "rateLimit": "Rate limit (requests/min)", + "allowedIps": "Allowed IPs (optional)", + "allowedIpsPlaceholder": "comma-separated, blank = any", + "generate": "Generate key", + "existingKeys": "Existing keys ({count})", + "noKeys": "No API keys yet — generate one above.", + "colName": "Name", + "colKey": "Key", + "colAllowedIps": "Allowed IPs", + "colRateLimit": "Rate limit", + "colLastUsed": "Last used", + "colExpires": "Expires", + "colStatus": "Status", + "colActions": "Actions", + "maskedHint": "Only the first 8 characters are shown", + "any": "any", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete" + }, + "pointsForm": { + "title": "Radio Listener Points", + "subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "points": "Points", + "enabled": "Enabled", + "disabled": "Disabled", + "perMinute": "Per minute", + "paidIn": "paid in {currency}", + "maxPerDay": "Max / day", + "unlimited": "Unlimited", + "minListeners": "Min listeners", + "settings": "Settings", + "pointsEnabled": "Points enabled", + "pointsEnabledHint": "Master switch for awarding listener points.", + "currency": "Currency", + "currencyHint": "Which wallet the points are paid into.", + "pointsPerMinute": "Points per minute", + "pointsPerMinuteHint": "Amount awarded for each full minute of listening.", + "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", + "minListenersHint": "Points are only awarded when at least this many people are tuned in.", + "save": "Save points settings", + "saved": "Settings saved." + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.", + "dbError": "Could not load the AutoDJ playlist (database unavailable).", + "tracks": "Tracks", + "active": "Active", + "inactive": "Inactive", + "addTrack": "Add track", + "trackTitle": "Title", + "titlePlaceholder": "Track title", + "artist": "Artist", + "album": "Album", + "artworkUrl": "Artwork URL", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Duration (seconds)", + "durationPlaceholder": "e.g. 215", + "sortOrder": "Sort order", + "playlist": "Playlist ({count})", + "noTracks": "No AutoDJ tracks yet — add one above.", + "colOrder": "Order", + "colTitle": "Title", + "colArtist": "Artist", + "colAlbum": "Album", + "colDuration": "Duration", + "colPlays": "Plays", + "colLastPlayed": "Last played", + "colStatus": "Status", + "colActions": "Actions", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete" + }, + "monitoring": { + "title": "Radio Monitoring", + "subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.", + "stream": "Stream", + "online": "Online", + "offline": "Offline", + "notConfigured": "Not configured", + "nowPlaying": "Now playing", + "nowPlayingApi": "Now-playing API", + "listenersApi": "Listeners API", + "listeners": "Listeners", + "currentSong": "Current song", + "bitrate": "Bitrate", + "status": "Status", + "noNowPlayingHint": "no now-playing API set", + "noListenersHint": "no listeners API set", + "endpointDiagnostics": "Endpoint diagnostics", + "diagnosticsLegend": "OK: reachable · WARN: not configured · ERROR: request failed or timed out.", + "streamUrl": "Stream URL", + "unreachable": "unreachable", + "refresh": "Refresh" + }, + "moderationPage": { + "title": "DJ Moderation", + "subtitle": "Review and remove radio shouts (50 most recent).", + "recentShouts": "Recent Shouts ({count})" + } + }, + "commandocentrum": { + "title": "Commandocentrum", + "subtitle": "Diagnostics, RCON controls and user management", + "diagnostics": "Diagnostics", + "rcon": "RCON", + "userActions": "User actions", + "diagnosticsTitle": "Emulator diagnostics", + "memoryUsage": "Memory usage", + "uptime": "Uptime", + "onlineUsers": "Online users", + "roomsLoaded": "Rooms loaded", + "refresh": "Refresh", + "rconTitle": "RCON commands", + "rconPlaceholder": "Enter RCON command…", + "rconSend": "Send", + "rconSending": "Sending…", + "rconResponse": "Response", + "userActionsTitle": "User actions", + "username": "Username", + "usernamePlaceholder": "Target username", + "action": "Action", + "execute": "Execute", + "actions": { + "disconnect": "Disconnect", + "alert": "Send alert", + "giveCredits": "Give credits", + "giveBadge": "Give badge", + "givePoints": "Give points", + "ban": "Ban", + "kick": "Kick" + }, + "messagePlaceholder": "Message (for alerts)…", + "amountPlaceholder": "Amount…", + "badgePlaceholder": "Badge code…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Emulator Config", + "subtitle": "View and edit emulator settings and locale texts", + "settings": "Settings", + "texts": "Texts", + "search": "Search", + "searchPlaceholder": "Search keys…", + "noSettings": "No settings found", + "noTexts": "No texts found", + "edit": "Edit", + "save": "Save", + "saving": "Saving…", + "cancel": "Cancel", + "colKey": "Key", + "colValue": "Value", + "colType": "Type", + "colActions": "Actions", + "editDialog": { + "title": "Edit: {key}", + "value": "Value", + "valuePlaceholder": "Enter value…", + "save": "Save changes", + "cancel": "Cancel" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Alerts", + "subtitle": "Send hotel-wide alerts and view recent ops alerts", + "sendAlert": "Send hotel alert", + "recentAlerts": "Recent alerts ({count})", + "noAlerts": "No recent alerts", + "noRecentAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "form": { + "title": "Alert title", + "titlePlaceholder": "e.g. Server maintenance in 10 minutes", + "message": "Alert message", + "messagePlaceholder": "Write the alert message…", + "description": "Broadcasts via RCON 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" + }, + "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" + } + }, + "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" + }, + "media": { + "title": "Media Library", + "subtitle": "Upload and manage media files", + "upload": "Upload", + "uploadTitle": "Upload a file", + "uploadSubtitle": "Drag and drop or click to upload", + "uploadButton": "Choose file", + "uploading": "Uploading…", + "noFiles": "No media files yet", + "delete": "Delete", + "confirmDelete": "Delete this file permanently?", + "search": "Search", + "searchPlaceholder": "Search by filename…", + "colPreview": "Preview", + "colName": "Name", + "colSize": "Size", + "colType": "Type", + "colUploaded": "Uploaded", + "colActions": "Actions", + "copyUrl": "Copy URL", + "urlCopied": "URL copied to clipboard" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Upload and manage the site favicon", + "current": "Current favicon", + "uploadLabel": "Upload favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.", + "upload": "Upload", + "uploading": "Uploading…", + "delete": "Remove", + "deleting": "Removing…", + "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": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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." + } + }, + "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." + } + }, + "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" + }, + "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." + } + }, + "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}" + }, + "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": "Sign in", + "subtitle": "Welcome back — log in to enter the hotel.", + "subtitle2fa": "Enter the 6-digit code from your authenticator.", + "welcomeBack": "Welcome back", + "welcomeBackSub": "Sign in to continue to {hotelName}", + "usernamePlaceholder": "Username", + "passwordPlaceholder": "Password", + "codePlaceholder": "2FA code", + "pleaseWait": "Please wait…", + "verify": "Verify", + "signIn": "Sign in", + "or": "or", + "noAccount": "No account?", + "createOne": "Create one", + "forgotPassword": "Forgot password?", + "errorInvalidCredentials": "Invalid username or password", + "errorInvalid2fa": "Invalid 2FA code", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Create account", + "subtitle": "Join the hotel — it only takes a moment.", + "username": "Username", + "email": "Email", + "password": "Password", + "confirmPassword": "Repeat password", + "usernamePlaceholder": "Username", + "emailPlaceholder": "Email", + "passwordPlaceholder": "Password (min 8 chars)", + "confirmPasswordPlaceholder": "Repeat password", + "selectOutfit": "Select your outfit", + "termsAccept": "I am 18+ and accept the {hotel} terms & rules.", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security", + "createAccount": "Create account", + "creatingAccount": "Creating account...", + "redirecting": "Redirecting to your account...", + "alreadyHaveAccount": "Already have an account? Login!", + "alreadyHaveAccountPre": "Already have an account?", + "alreadyHaveAccountLink": "Sign in", + "register": "Register", + "whoIsOnline": "Who's online", + "usersOnline": "{count} online", + "termsError": "You must accept the terms & rules to register.", + "usernameError": "Username is required.", + "emailError": "Valid email is required.", + "passwordError": "Password must be at least 6 characters.", + "confirmPasswordError": "Passwords do not match.", + "termsRequired": "You must accept the terms & rules.", + "usernameRequired": "Username is required.", + "emailRequired": "Email is required.", + "passwordRequired": "Password is required.", + "passwordsDontMatch": "Passwords do not match." + }, + "forgot": { + "title": "Reset password", + "subtitle": "We'll email you a secure link to set a new password.", + "sentNotice": "If that email is registered, a reset link has been sent. Check your inbox.", + "emailPlaceholder": "Your email", + "sendResetLink": "Send reset link", + "backToLogin": "Back to login", + "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 6 chars)", + "resetPassword": "Reset password", + "backToLogin": "Back to login" + }, + "verify": { + "verifiedTitle": "You're all set", + "verifiedSubtitle": "Email verified", + "verifiedBody": "Your email address has been verified. You can now log in and play.", + "goToLogin": "Go to login", + "alreadyTitle": "Already verified", + "alreadySubtitle": "Nothing left to do", + "alreadyBody": "This email address has already been confirmed.", + "unavailableTitle": "Try again shortly", + "unavailableSubtitle": "Server unreachable", + "unavailableBody": "We couldn't reach the server to verify your email. Please retry the link in a moment.", + "invalidTitle": "Email verification", + "invalidSubtitle": "Invalid or expired link", + "invalidBody": "This verification link is not valid. Make sure you opened the full link from your email, or request a new one.", + "backToLogin": "Back to login" + }, + "banned": { + "title": "You are banned", + "subtitle": "Account suspended", + "body": "Your account has been suspended from the hotel.", + "reasonLabel": "Reason:", + "permanent": "This ban is permanent.", + "expires": "Expires {date}.", + "contactStaff": "If you believe this is a mistake, contact the staff team." + }, + "maintenance": { + "title": "{hotel} is under maintenance", + "subtitle": "We'll be back shortly", + "staffCanLogIn": "Staff can still log in." + }, + "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" + }, + "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" + } + }, + "toolbar": { + "home": "الرئيسية", + "reload": "إعادة تحميل", + "fullscreen": "ملء الشاشة", + "logout": "تسجيل الخروج", + "onlineUsers": "المستخدمون المتواجدون", + "emulatorOnline": "المحاكي متصل", + "emulatorOffline": "المحاكي غير متصل", + "dragToMove": "اسحب للتحريك", + "hide": "إخفاء الشريط", + "fullscreenExit": "الخروج من ملء الشاشة", + "show": "إظهار الشريط", + "emulatorUnknown": "حالة المحاكي غير معروفة" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "تشخيص الملفات", + "preliminary": "فحص أولي للعناوين؛ سيتم التحقق من المحتوى عند الاستيراد.", + "http": "HTTP {status}", + "network": "تعذر الاتصال", + "timeout": "انتهت مهلة المصدر", + "invalidResponse": "أعاد المصدر صفحة ويب بدلاً من ملف", + "available": "تم العثور على الملف؛ ينتظر التحقق", + "recover": "إرفاق الأصل والاستئناف", + "recoveryHint": "اختر {file} (حتى 50 MB). تُفحص هويته. تُعاد العناصر الفاشلة فقط وتُحفظ الواردات المكتملة.", + "attach": "اختر ملف .nitro الأصلي", + "working": "جارٍ التحقق أو الاستئناف...", + "attached": "أُرفق الملف المطابق", + "resume": "استئناف العناصر الفاشلة بهذا الملف", + "invalidFile": "اختر ملف .nitro أصلياً مطابقاً، حتى 50 MB، ثم أعد المحاولة.", + "resumeError": "حدّث السجل واستخدم أحدث محاولة؛ تحقق من الملف وأعد المحاولة.", + "mismatchedFile": "هذا الملف يخص أثاثاً مختلفاً.", + "alreadyStarted": "بدأ الاستئناف بالفعل. حدّث السجل واستخدم أحدث محاولة.", + "notEligible": "هذا العنصر غير مؤهل للاسترداد بالمرفقات." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/bg.json b/src/messages/bg.json index a3decd37..536d7d05 100644 --- a/src/messages/bg.json +++ b/src/messages/bg.json @@ -1,3918 +1,4913 @@ { - "draftRecovery": { - "ready": "Копие за възстановяване ще се пази в този браузър 7 дни.", - "saved": "Копие за възстановяване е запазено в този браузър за 7 дни.", - "unavailable": "Възстановяването в браузъра не е достъпно. Остави тази страница отворена, докато промените бъдат запазени.", - "found": "В този браузър има копие за възстановяване, запазено на", - "restore": "Възстанови копието от браузъра", - "discard": "Изтрий копието от браузъра", - "confirmRestore": "Да се замени ли текущият формуляр с копието от браузъра? Провери съдържанието, преди да запазиш.", - "confirmDiscard": "Да се изтрие ли това копие от браузъра? Текущият формуляр ще остане непроменен." - }, - "nav": { - "home": "Начало", - "community": "Общност", - "articles": "Статии", - "photos": "Снимки", - "staff": "Персонал", - "rankings": "Класации", - "guilds": "Гилдии", - "leaderboards": "Класации", - "rareValues": "Редки ценности", - "shop": "Магазин", - "market": "пазар", - "assistance": "Помощ", - "helpCenter": "Помощен център", - "myTickets": "Моите билети", - "badges": "Значки", - "radio": "Радио", - "friends": "приятели", - "messages": "Съобщения", - "admin": "Админ", - "openMenu": "Отворете менюто", - "closeMenu": "Затваряне на менюто", - "drawBadge": "Начертайте значка", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} онлайн", - "nitroClient": "Nitro клиент", - "tagline": "Онлайн виртуален свят, където можете да създадете свой собствен аватар, да се сприятелявате, да чатите, да създавате стаи и много повече!", - "login": "Вход", - "or": "или", - "createAccount": "Създайте акаунт" - }, - "footer": { - "copyright": "© {year} - {hotel} е образователен проект с нестопанска цел" - }, - "pages": { - "staff": { - "title": "Персонал", - "subtitle": "Екипът зад хотела", - "ranksTitle": "рангове", - "ranksSubtitle": "За какво се грижи всяка част от екипа", - "membersTitle": "Членове на екипа", - "membersEmptySubtitle": "Няма кой да покаже в момента", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "Няма служители за показване.", - "colUsername": "Потребителско име", - "colRank": "Ранг", - "colMotto": "Мото" - }, - "leaderboard": { - "title": "класация", - "subtitle": "Топ 20 играчи по {currency}", - "tab_credits": "Кредити", - "tab_diamonds": "Диаманти", - "tab_duckets": "Патета", - "tab_achievement": "постижения", - "tab_respects": "уважение", - "tab_onlinetime": "Онлайн време", - "emptyState": "Все още няма класации за показване.", - "colAvatar": "Аватар", - "colPlayer": "Играч" - }, - "friends": { - "title": "приятели", - "emptySubtitle": "Все още нямате добавени приятели", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Добавете приятели в хотела и те ще се покажат тук.", - "noMotto": "Няма мото", - "remove": "Remove", - "success": { - "removed": "Friend removed." - }, - "errors": { - "notFound": "That friendship was not found.", - "invalid": "Invalid friend.", - "error": "Something went wrong. Please try again." - } - }, - "messages": { - "title": "Съобщения", - "subtitle": "Очакват ви покани за приятелство и офлайн съобщения", - "requestsTitle": "Молби за приятелство", - "requestsEmptySubtitle": "Все още никой не е поискал да бъде ваш приятел", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "Няма чакащи заявки за приятелство.", - "wantsToBeFriend": "иска да ти бъде приятел.", - "accept": "Приеми", - "offlineTitle": "Офлайн съобщения", - "offlineEmptySubtitle": "Вашата входяща кутия е празна", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "Нямате офлайн съобщения.", - "unknownUser": "Потребител #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Няма мото", - "statRank": "Ранг", - "statCredits": "Кредити", - "statRegistered": "Регистриран", - "badgesTitle": "Значки", - "badgesEmpty": "Все още няма значки.", - "photosTitle": "Снимки", - "photosEmpty": "Все още няма снимки.", - "guestbookTitle": "Книга за гости", - "guestbookSubtitle": "Съобщения на стената на {username}", - "leaveMessage": "Оставете съобщение", - "guestbookPlaceholder": "Напишете нещо в книгата за гости на {username}...", - "post": "Публикувай", - "loginToPost": "Влезте, за да оставите съобщение в книгата за гости.", - "guestbookEmpty": "Все още няма записи в книгата за гости.", - "unknownUser": "Потребител #{id}", - "statDuckets": "Патета", - "statDiamonds": "Диаманти", - "walletTitle": "Портфейл", - "friendsTitle": "приятели", - "friendsSubtitle": "Хората в хотела, с които излизат", - "friendsEmpty": "Няма приятели за показване.", - "roomsTitle": "Стаи", - "roomsSubtitle": "Стаи, които притежават", - "roomsEmpty": "Няма стаи за показване.", - "roomUntitled": "Стая без заглавие", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Класации", - "subtitle": "Топ 12 играчи, класирани по кредити", - "emptyState": "Все още няма играчи за класиране." - }, - "home": { - "welcome": "Добре дошли в {hotelName}", - "welcomeSubtitle": "Вашият ретро хотел, сега захранван от Next.js", - "welcomeBody": "Излизайте, събирайте мебели и се срещайте с приятели.", - "enterHotel": "Въведете {hotelName}", - "onlineFriends": "Онлайн приятели", - "noFriendsOnline": "Няма приятели онлайн", - "register": "РЕГИСТРИРАЙТЕ СЕ СЕГА", - "joinNow": "Присъединете се към {hotelName} днес!", - "recentUsers": "Последни потребители", - "recentPhotos": "Последни снимки", - "latestNews": "Последни новини", - "newsTitle": "Последни новини", - "newsSubtitle": "Току що от хотела", - "allNews": "Всички новини →", - "allUsers": "Общност →", - "noArticles": "Все още няма статии.", - "noPhotos": "Все още няма снимки.", - "noUsers": "Няма потребители онлайн", - "latestArticle": "Последна статия", - "latestUsers": "Най-нови граждани ({count} общо)", - "statsOnline": "Онлайн", - "statsCitizens": "Граждани", - "statsRooms": "Стаи", - "statsArticles": "Статии", - "featuresAvatar": "Аватар", - "featuresAvatarDesc": "Създай своя уникален външен вид", - "featuresFurniture": "Мебели", - "featuresFurnitureDesc": "Декорирай стаи с предмети", - "featuresCommunity": "Общност", - "featuresCommunityDesc": "Направи приятели и чати", - "featuresGames": "Игри", - "featuresGamesDesc": "Състезавай се и се забавлявай" - }, - "news": { - "title": "Новини", - "subtitle": "Най-новите съобщения, събития и актуализации от хотела", - "noArticles": "Все още няма статии." - }, - "article": { - "backToNews": "← Новини", - "reactionsTitle": "Реакции", - "reactionsSubtitle": "Кажете ни какво мислите", - "reaction": { - "like": "харесвам", - "love": "любов", - "wow": "уау" - }, - "removeReaction": "Кликнете, за да премахнете реакцията си", - "reactWith": "Реагирайте с {reaction}", - "noReactions": "Все още няма реакции.", - "logIn": "влезте", - "toReact": "да реагират.", - "commentsTitle": "Коментари", - "commentsSubtitle": "Присъединете се към разговора", - "commentsCount": "{count} досега", - "noComments": "Все още няма коментари. Коментирайте първи.", - "userNumber": "Потребител #{id}", - "addComment": "Добавяне на коментар", - "commentPlaceholder": "Напишете своя коментар...", - "postComment": "Публикувайте коментар", - "toComment": "да оставите коментар.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Снимки", - "subtitle": "Последните снимки, направени в хотела", - "noPhotos": "Все още няма снимки.", - "photoAlt": "Снимка от потребител #{id}", - "byUser": "от потребител #{id}" - }, - "badges": { - "title": "Значки", - "subtitle": "Значките, които можете да печелите и да показвате из хотела", - "noBadges": "Все още няма налични значки." - }, - "community": { - "title": "Общност", - "subtitle": "Всичко случващо се около хотела на едно място", - "open": "Отворете →", - "links": { - "rankings": { - "title": "Класации", - "text": "Вижте най-богатите играчи в хотела, класирани по кредити." - }, - "staff": { - "title": "Персонал", - "text": "Запознайте се с екипа, който поддържа хотела работещ всеки ден." - }, - "news": { - "title": "Новини", - "text": "Най-новите съобщения, събития и актуализации." - }, - "photos": { - "title": "Снимки", - "text": "Моментни снимки, споделени от общността от целия хотел." - }, - "guilds": { - "title": "Гилдии", - "text": "Прегледайте групите, които играчите са създали и към които са се присъединили." - }, - "leaderboards": { - "title": "Класации", - "text": "Кой е на върха този сезон в статистиката на хотела." - } - } - }, - "guilds": { - "title": "Гилдии", - "subtitle": "Прегледайте групите, които играчите са създали и към които са се присъединили", - "empty": "Все още няма гилдии.", - "unnamedGuild": "Неназована гилдия", - "noDescription": "Без описание" - }, - "guild": { - "allGuilds": "← Всички гилдии", - "unnamedGuild": "Неназована гилдия", - "noDescription": "Без описание", - "memberSingular": "Член", - "memberPlural": "Членове", - "founded": "Основан", - "forumLink": "Форум →", - "discussion": "Дискусия", - "membersTitle": "Членове", - "memberLowerSingular": "член", - "memberLowerPlural": "членове", - "noMembers": "Няма членове.", - "owner": "Собственик", - "noMotto": "Няма мото" - }, - "guildForum": { - "backToGuild": "← Назад към гилдията", - "unnamedGuild": "Неназована гилдия", - "forumTitle": "{guild} — Форум", - "threadSingular": "резба", - "threadPlural": "нишки", - "newThread": "+ Нова тема", - "empty": "Все още няма теми в този форум.", - "colSubject": "Предмет", - "colAuthor": "Автор", - "colPosts": "Публикации", - "colDate": "Дата", - "noSubject": "(без тема)", - "pinned": "Фиксирано", - "locked": "Заключено", - "userNumber": "Потребител #{id}", - "unknown": "неизвестен", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Назад към форума", - "unnamedGuild": "Неназована гилдия", - "title": "Нова тема", - "subtitle": "във форума на {guild}", - "subjectLabel": "Предмет", - "subjectPlaceholder": "Тема на темата", - "messageLabel": "Съобщение", - "messagePlaceholder": "Напишете началната си публикация...", - "postThread": "Публикуване на тема", - "cancel": "Отказ", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Магазин", - "subtitle": "Допълнете сметката си и вземете ексклузивни пакети, валута и значки.", - "browsingCategory": "Разглеждане на пакетите {category}.", - "all": "Всички", - "allPackages": "Всички пакети", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "В момента няма налични пакети.", - "buy": "Купете", - "loginToBuy": "Log in to buy", - "creditsHint": "Packages are paid with in-game credits. Top up first if you need more.", - "topUpLink": "Top up credits", - "priceCredits": "{credits} credits (≈ {usd})", - "priceCreditsShort": "{credits} cr", - "success": { - "bought": "Package purchased — rewards have been added to your account.", - "boughtNamed": "You purchased \"{name}\" — rewards have been added to your account." - }, - "errors": { - "invalid": "That package is no longer available.", - "credits": "You don't have enough credits for this package.", - "ratelimit": "You're purchasing too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "topup": { - "title": "Допълнете с PayPal", - "subtitle": "Плащайте сигурно с PayPal и вашите кредити се добавят в момента, в който плащането се изчисти.", - "cancelled": "Плащането беше отменено — не беше извършено плащане.", - "chooseAmount": "Изберете сума", - "notConfiguredPre": "PayPal все още не е конфигуриран. Администраторът трябва да зададе", - "notConfiguredAnd": "и", - "notConfiguredOptional": "(и по избор", - "notConfiguredPost": "за пясъчник срещу живо).", - "balanceTitle": "Вашият баланс", - "signedInAs": "Влезли сте като {username}", - "credits": "Кредити", - "creditsPerUnit": "Кредити на 1,00 {currency}", - "rateLine": "Получавате {amount} кредити на 1,00 {currency}. Кредити се появяват в играта следващия път, когато влезете." - }, - "marketplace": { - "title": "Пазар", - "subtitle": "Разгледайте мебелите и редките предмети, изброени от играчите. Офертите се поставят в играта и се актуализират на живо — отидете в хотела, за да направите оферта.", - "activeOffers": "Активни оферти", - "sellers": "Продавачи", - "totalValue": "Обща стойност", - "activeListings": "Активни обяви", - "mostRecentFirst": "Най-скоро в списъка първи", - "empty": "В момента няма активни оферти на пазара. Проверете отново по-късно.", - "colOffer": "Оферта", - "colItem": "Артикул", - "colSeller": "Продавач", - "colPrice": "Цена", - "colListed": "В списъка", - "itemLabel": "Артикул #{id}", - "userLabel": "Потребител #{id}", - "justNow": "точно сега", - "minutesAgo": "преди {count} мин", - "hoursAgo": "преди {count} ч", - "daysAgo": "преди {count} дни" - }, - "rares": { - "title": "Редки ценности", - "subtitle": "Получете преглед на всички редки предмети в хотела, групирани по категории.", - "empty": "В момента нямаме изброени тук редки предмети.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Преглед на редки →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Всички редки", - "empty": "Все още няма редки изброени в тази категория.", - "colRare": "рядко", - "colCredits": "Кредити", - "colCurrency": "Валута", - "creditsValue": "{value} кредита", - "duckets": "Патета", - "diamonds": "Диаманти", - "credits": "Кредити" - }, - "redeem": { - "title": "Осребрете ваучер", - "subtitle": "Имате код на ваучер? Въведете го по-долу, за да добавите наградата към вашия акаунт.", - "enterCode": "Въведете своя код", - "oncePerAccount": "Всеки ваучер може да бъде осребрен само веднъж за сметка.", - "balanceTitle": "Вашият баланс", - "signedInAs": "Влезли сте като {username}", - "credits": "Кредити", - "instantCredit": "Осребрените награди се кредитират незабавно и се появяват в играта следващия път, когато влезете." - }, - "help": { - "title": "Помощен център", - "subtitle": "Намерете ръководства, теми за поддръжка и правилата на хотела - всичко, от което се нуждаете, за да получите помощ.", - "myTickets": "Моите билети →", - "topicsTitle": "Теми за поддръжка", - "topicsSubtitle": "Разгледайте ръководства и отговори на често задавани въпроси", - "topicsEmpty": "Все още няма помощни теми.", - "rulesTitle": "Правила на хотела", - "rulesSubtitle": "Моля, прочетете ги, преди да се мотаете в хотела", - "rulesEmpty": "Все още няма публикувани правила.", - "categoryEmpty": "Няма правила в тази категория." - }, - "helpCategory": { - "back": "← Помощен център", - "topicSubtitle": "Тема в Помощния център", - "moreTitle": "Още теми за помощ", - "moreSubtitle": "Преминете към друга тема за поддръжка" - }, - "helpTickets": { - "title": "Помощ Билети", - "subtitle": "Изпратете билет на персонала и проследете вашите отворени заявки.", - "statTotal": "Общо билети", - "statOpen": "Отворете", - "statClosed": "Затворено", - "newTitle": "Нов билет", - "newSubtitle": "Опишете проблема си и персоналът ще се свърже с вас", - "subjectPlaceholder": "Предмет", - "contentPlaceholder": "Опишете проблема си...", - "submit": "Изпратете билет", - "listTitle": "Вашите билети", - "listSubtitle": "Всяка заявка, която сте изпратили до персонала", - "listEmpty": "Все още нямате билети.", - "colId": "ID", - "colSubject": "Предмет", - "colStatus": "Статус", - "colCreated": "Създаден", - "statusOpen": "Отворете", - "statusClosed": "Затворено", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Кандидатствайте за персонал на {hotel}", - "subtitle": "От време на време отваряме кандидатури за служители. Ако попаднете на позиция, която смятате, че ще се впишете идеално, не се колебайте да кандидатствате за нея.", - "noPositionsTitle": "Няма отворени позиции", - "noPositionsBody": "В момента няма отворени позиции. Моля, заповядайте по-късно, за да проверите дали имаме свободни места дотогава. Благодарим ви за интереса.", - "noDeadline": "Не е определен краен срок", - "deadline": "Краен срок за кандидатстване: {date}", - "alreadyApplied": "Вече сте кандидатствали за {rank}", - "aboutYou": "За вас", - "aboutPlaceholder": "Кажете ни защо бихте били страхотен {rank}...", - "applyFor": "Кандидатствайте за {rank}", - "success": { - "submitted": "Application submitted — staff will review it soon." - }, - "errors": { - "empty": "Please write at least 10 characters about yourself.", - "invalid": "Invalid application.", - "duplicate": "You have already applied for this position.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "applyTeam": { - "title": "Кандидатствайте за екипа на {hotel}", - "subtitle": "Периодично отваряме екипни заявки. Ако видите екип, който ви подхожда, не се колебайте да кандидатствате!", - "noPositionsTitle": "Няма отворени позиции за отбори", - "noPositionsBody": "В момента няма отворени екипни позиции. Моля, върнете се по-късно, за да проверите за нови свободни места. благодаря ви", - "pending": "Вашата кандидатура е в процес на разглеждане", - "aboutYou": "За вас", - "aboutPlaceholder": "Кажете ни защо бихте били чудесен избор за {rank}...", - "applyFor": "Кандидатствайте за {rank}", - "success": { - "submitted": "Application submitted — staff will review it soon." - }, - "errors": { - "empty": "Please write at least 10 characters about yourself.", - "invalid": "Invalid application.", - "duplicate": "You have already applied for this team.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radio": { - "title": "Радио", - "subtitle": "Включете радиото на хотела — DJ сетове на живо, заявки и възгласи.", - "nowPlaying": "Сега се играе", - "nothingPlaying": "Нищо не се играе в момента.", - "onAir": "В ефир: {dj}", - "noDj": "Няма DJ в ефир.", - "audioUnsupported": "Вашият браузър не поддържа аудио елемента.", - "streamOffline": "В момента потокът е офлайн.", - "exploreTitle": "Разгледайте радиото", - "exploreSubtitle": "График, викове, заявки и други", - "linkSchedule": "График", - "linkScheduleText": "Нашата седмична гама от диджеи и шоута.", - "linkShouts": "Викове", - "linkShoutsText": "Поздрави и молби от общността.", - "linkRequests": "Заявки", - "linkRequestsText": "Помолете диджея да завърти любимата ви песен.", - "linkApply": "Кандидатствайте като DJ", - "linkApplyText": "Присъединете се към екипа и се вдигнете в ефира.", - "linkLeaderboard": "класация", - "linkLeaderboardText": "Най-добрите слушатели, класирани по спечелени точки.", - "todayTitle": "Графикът за днес", - "todayTitleWithDay": "График за днес · {day}", - "todaySubtitle": "Какво е в ефира днес", - "fullWeek": "Пълна седмица →", - "noShowsToday": "Няма насрочени представления за днес.", - "colTime": "време", - "colShow": "Покажи", - "colDj": "DJ", - "untitledShow": "Безименно предаване", - "userNumber": "Потребител #{id}" - }, - "radioSchedule": { - "title": "График на радиото", - "subtitle": "Нашата седмична гама от диджеи и шоута", - "empty": "Все още няма планирани представления.", - "colDay": "ден", - "colTime": "време", - "colDj": "DJ", - "colShow": "Покажи", - "noShows": "Няма предавания" - }, - "radioShouts": { - "title": "Радио викове", - "subtitle": "Поздрави и молби от общността", - "postTitle": "Публикувайте вик", - "postSubtitle": "Изпратете съобщение до диджея в ефир", - "messageLabel": "Вашето съобщение", - "messagePlaceholder": "Изпратете вик до DJ...", - "shoutButton": "Викайте", - "loginToPost": "Влезте, за да публикувате вик.", - "latestTitle": "Последни викове", - "latestSubtitle": "Най-новите съобщения от слушатели", - "empty": "Все още няма викове. Бъдете първи!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Радио състезания", - "subtitle": "Включете се и участвайте в най-новите ни състезания в ефир", - "empty": "Все още няма конкурси.", - "contestLabel": "Конкурс #{id}", - "dateUnknown": "Дата неизвестна" - }, - "radioGiveaways": { - "title": "Радио подаръци", - "subtitle": "Слушайте за вашия шанс да спечелите в нашите радио подаръци", - "empty": "Все още няма подаръци.", - "giveawayLabel": "Подарък #{id}", - "dateUnknown": "Дата неизвестна" - }, - "radioLeaderboard": { - "title": "Класация на радиослушателите", - "subtitle": "Топ 50 на слушателите по точки, спечелени при слушане на радиото", - "empty": "Все още няма слушателски точки за показване.", - "colRank": "Ранг", - "colAvatar": "Аватар", - "colListener": "Слушател", - "colPoints": "Точки" - }, - "radioRequests": { - "formTitle": "Изпратете заявка", - "formSubtitle": "Помолете диджея да пусне любимата ви песен", - "songLabel": "Песен", - "songPlaceholder": "Заглавие на песента", - "artistLabel": "Художник", - "artistPlaceholder": "Име на художника (по избор)", - "submitButton": "Изпратете заявка", - "loginToRequest": "Влезте, за да изпратите заявка.", - "latestTitle": "Последни заявки", - "latestSubtitle": "Най-скоро поисканите песни", - "empty": "Все още няма заявки.", - "colSong": "Песен", - "colArtist": "Художник", - "colRequester": "Заявител", - "colDate": "Дата", - "colStatus": "Статус", - "statusPending": "В очакване", - "statusApproved": "Одобрено", - "statusPlayed": "Играна", - "success": { - "posted": "Request submitted." - }, - "errors": { - "empty": "Please enter a song title or artist.", - "invalid": "Invalid request.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioApply": { - "title": "Кандидатствайте за радио DJ", - "subtitle": "Разкажете ни за себе си и защо бихте се вписали чудесно в ефира", - "latestTitle": "Най-новото ви приложение", - "statusLabel": "Статус:", - "submittedOn": "· изпратено {date}", - "submitAgain": "Можете да изпратите отново по-долу, ако вашите данни са се променили.", - "formTitle": "Формуляр за кандидатстване", - "formSubtitle": "Всички полета, отбелязани като задължителни, трябва да бъдат попълнени", - "realNameLabel": "Истинско име", - "realNamePlaceholder": "Вашето пълно име", - "ageLabel": "Възраст", - "availabilityLabel": "Наличност", - "availabilityPlaceholder": "Кои дни и часове можете да излъчвате?", - "musicStyleLabel": "Музикален стил", - "musicStylePlaceholder": "напр. Хаус, поп, хип-хоп", - "experienceLabel": "опит", - "optional": "(по избор)", - "experiencePlaceholder": "Някакъв предишен DJ или хостинг опит?", - "motivationLabel": "Мотивация", - "motivationPlaceholder": "Защо искаш да се присъединиш към екипа на радиото?", - "submitButton": "Изпратете заявление", - "success": { - "submitted": "Application submitted — we will get back to you soon." - }, - "errors": { - "invalid": "Please fill in all required fields.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "settings": { - "accountSettings": "Настройки на акаунта", - "accountSettingsSubtitle": "Управлявайте своя профил, сигурност и свързани акаунти", - "publicProfile": "Вашият обществен профил", - "noMotto": "Няма мото", - "noEmail": "Няма регистриран имейл", - "changeMotto": "Променете мотото", - "changeMottoSubtitle": "Актуализира незабавно в играта, ако сте онлайн", - "mottoPlaceholder": "Вашето мото", - "saveMotto": "Запазете мотото", - "securityTitle": "сигурност", - "securitySubtitle": "Двуфакторна автентификация", - "securityDescription": "Добавете втори слой на защита към вашия акаунт.", - "twoFactorLink": "Двуфакторна автентификация" - }, - "settings2fa": { - "backToSettings": "← Настройки", - "title": "Двуфакторна автентификация", - "subtitle": "Добавете втори слой на сигурност с приложение за удостоверяване", - "nowEnabled": "2FA вече е активиран. 🔒", - "disabledNotice": "2FA е деактивиран.", - "badCode": "Този код не е валиден — опитайте отново.", - "noAppKeyPrefix": "2FA не е наличен до", - "noAppKeyMiddle": "е конфигуриран (същият Laravel", - "noAppKeySuffix": "докато инсталирате AtomCMS, така че съществуващите тайни да останат четливи).", - "isEnabled": "2FA е активиран", - "onYourAccount": "на вашия акаунт.", - "disable": "Деактивирайте 2FA", - "scanOrEnter": "Сканирайте или въведете този ключ", - "scanInstructions": "Добавете това към Google Authenticator / Authy, след което въведете 6-цифрения код, за да потвърдите.", - "manualKey": "Ръчен ключ:", - "codePlaceholder": "6-цифрен код", - "confirm": "Потвърдете", - "enableIntro": "Добавете втори слой на сигурност с приложение за удостоверяване.", - "enable": "Активирайте 2FA" - }, - "title": "Свързани акаунти", - "subtitle": "Свържете социален акаунт, за да можете да влезете с едно щракване", - "connected": "Свързан", - "unavailable": "Недостъпен", - "login": { - "title": "влезте", - "subtitle": "Добре дошли отново — влезте, за да влезете в хотела.", - "subtitle2fa": "Въведете 6-цифрения код от вашия удостоверител.", - "usernamePlaceholder": "Потребителско име", - "passwordPlaceholder": "Парола", - "codePlaceholder": "2FA код", - "pleaseWait": "моля изчакайте...", - "verify": "Проверете", - "signIn": "влезте", - "or": "или", - "noAccount": "Нямате акаунт?", - "createOne": "Създайте такъв", - "forgotPassword": "Забравена парола?", - "errorInvalidCredentials": "Невалидно потребителско име или парола", - "errorInvalid2fa": "Невалиден 2FA код", - "welcomeBack": "Добре дошли отново", - "welcomeBackSub": "Влезте, за да продължите към {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Създаване на акаунт", - "subtitle": "Присъединете се към хотела - отнема само момент.", - "username": "Потребителско име", - "email": "Имейл", - "password": "Парола", - "confirmPassword": "Повторете паролата", - "usernamePlaceholder": "Потребителско име", - "emailPlaceholder": "Имейл", - "passwordPlaceholder": "Парола (мин. 6 знака)", - "confirmPasswordPlaceholder": "Повторете паролата", - "selectOutfit": "Изберете вашето облекло", - "termsAccept": "Аз съм на 18+ и приемам условията и правилата на {hotel}.", - "createAccount": "Създаване на акаунт", - "creatingAccount": "Създаване на акаунт...", - "redirecting": "Прехвърляне към вашия акаунт...", - "alreadyHaveAccount": "Вече имате акаунт? Вход!", - "register": "Регистрирайте се", - "termsError": "Трябва да приемете условията и правилата, за да се регистрирате.", - "usernameError": "Изисква се потребителско име.", - "emailError": "Изисква се валиден имейл.", - "passwordError": "Паролата трябва да е поне 6 знака.", - "confirmPasswordError": "Паролите не съвпадат.", - "termsRequired": "Трябва да приемете условията и правилата.", - "usernameRequired": "Изисква се потребителско име.", - "emailRequired": "Изисква се имейл.", - "passwordRequired": "Изисква се парола.", - "passwordsDontMatch": "Паролите не съвпадат.", - "alreadyHaveAccountPre": "Вече имаш акаунт?", - "alreadyHaveAccountLink": "Вход", - "whoIsOnline": "Кой е онлайн", - "usersOnline": "{count} онлайн" - }, - "forgot": { - "title": "Нулирайте паролата", - "subtitle": "Ще ви изпратим по имейл защитена връзка за задаване на нова парола.", - "sentNotice": "Ако този имейл е регистриран, е изпратена връзка за нулиране. Проверете входящата си кутия.", - "emailPlaceholder": "Вашият имейл", - "sendResetLink": "Изпратете връзка за нулиране", - "backToLogin": "Назад към входа", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Задайте нова парола", - "subtitle": "Изберете силна парола, която не използвате другаде.", - "passwordPlaceholder": "Нова парола (мин. 6 знака)", - "resetPassword": "Нулирайте паролата", - "backToLogin": "Назад към входа" - }, - "verify": { - "verifiedTitle": "Всичко е готово", - "verifiedSubtitle": "Имейл потвърден", - "verifiedBody": "Вашият имейл адрес е потвърден. Вече можете да влезете и да играете.", - "goToLogin": "Отидете на вход", - "alreadyTitle": "Вече е проверено", - "alreadySubtitle": "Не остана нищо за правене", - "alreadyBody": "Този имейл адрес вече е потвърден.", - "unavailableTitle": "Опитайте отново след малко", - "unavailableSubtitle": "Сървърът е недостъпен", - "unavailableBody": "Не успяхме да се свържем със сървъра, за да потвърдим вашия имейл. Моля, опитайте отново връзката след малко.", - "invalidTitle": "Проверка на имейл", - "invalidSubtitle": "Невалидна или изтекла връзка", - "invalidBody": "Тази връзка за потвърждение не е валидна. Уверете се, че сте отворили пълната връзка от имейла си или поискайте нова.", - "backToLogin": "Назад към входа" - }, - "banned": { - "title": "Вие сте забранени", - "subtitle": "Акаунтът е спрян", - "body": "Вашият акаунт е спрян от хотела.", - "reasonLabel": "причина:", - "permanent": "Тази забрана е постоянна.", - "expires": "Изтича на {date}.", - "contactStaff": "Ако смятате, че това е грешка, свържете се с екипа на персонала." - }, - "maintenance": { - "title": "{hotel} е в процес на поддръжка", - "subtitle": "Ще се върнем след малко", - "staffCanLogIn": "Служителите все още могат да влизат." - }, - "admin": { - "nav": { - "overview": "Преглед", - "dashboard": "Табло за управление", - "content": "Съдържание", - "articles": "Статии", - "tags": "Етикети", - "navigator": "Навигатор", - "helpCenter": "Помощен център", - "advertisements": "Реклами", - "writeableBoxes": "Кутии за писане", - "photos": "Снимки", - "tickets": "Билети", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Потребители и достъп", - "users": "Потребители", - "bans": "забрани", - "ipManagement": "IP управление", - "vpn": "VPN", - "applications": "Приложения", - "teams": "Екипи", - "permissions": "Разрешения", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "икономичност", - "catalog": "Каталог", - "shop": "Магазин", - "transactions": "Транзакции", - "vouchers": "Ваучери", - "subscriptions": "Абонаменти", - "rareValues": "Редки ценности", - "badges": "Значки", - "achievements": "постижения", - "calendar": "Календар", - "radio": "Радио", - "radioHistory": "История на радиото", - "radioBanners": "Банери", - "radioEmbed": "Вграждане", - "radioApiKeys": "API ключове", - "radioModeration": "Умереност", - "radioSettings": "Настройки", - "radioMonitoring": "Мониторинг", - "radioPoints": "Точки", - "radioRanks": "рангове", - "radioAutodj": "Авто диджей", - "system": "система", - "commandocentrum": "Командоцентър", - "emulator": "Емулатор", - "alerts": "Сигнали", - "logs": "трупи", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Филтър за думи", - "maintenance": "Поддръжка", - "rooms": "Стаи", - "emailTemplates": "Шаблони за имейли", - "theme": "Тема", - "media": "Медия", - "favicon": "Favicon", - "sounds": "Звуци", - "translations": "Преводи", - "import": "Импортиране", - "settings": "Настройки", - "backToSite": "Обратно към сайта", - "housekeeping": "Домакинство", - "hotelManagementPanel": "Панел за управление на хотел", - "rankLabel": "Ранг {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Табло за управление", - "subtitle": "Общ преглед на хотела и състояние на живо", - "playersOnline": "Играчи онлайн", - "articles": "Статии", - "activeBans": "Активни забрани", - "database": "База данни", - "databaseConnected": "Свързан", - "databaseDown": "Надолу", - "usersByRank": "Потребители по ранг", - "noAccountsToBreakDown": "Все още няма акаунти за разбивка", - "rankLabel": "Ранг {rank}", - "rankWithCount": "Ранг {rank}: {count} акаунта", - "recentStaffActivity": "Скорошна дейност на персонала", - "viewAll": "Вижте всички", - "noStaffActivityLogged": "Все още няма регистрирана дейност на персонала" - }, - "articles": { - "title": "Статии", - "subtitle": "Новинарски статии — 50 най-нови", - "newArticle": "+ Нова статия", - "edit": "Редактиране", - "delete": "Изтриване", - "noArticles": "Все още няма статии", - "confirmDelete": "Сигурни ли сте, че искате да изтриете „{title}“?", - "colTitle": "Заглавие", - "colSlug": "охлюв", - "colAuthor": "Автор", - "colCreated": "Създаден", - "colActions": "Действия", - "form": { - "title": "Заглавие", - "titlePlaceholder": "Заглавие на статията", - "slug": "охлюв", - "slugPlaceholder": "URL-адрес на статията", - "category": "Категория", - "categoryPlaceholder": "Изберете категория", - "body": "Тяло", - "bodyPlaceholder": "Напишете съдържанието на вашата статия...", - "image": "Изображение", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Миниатюра", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Публикувано", - "featured": "Представено", - "save": "Запазете статията", - "saving": "Запазва се...", - "deleteArticle": "Изтриване на статия", - "deleteConfirm": "Това действие не може да бъде отменено. Статията ще бъде окончателно премахната.", - "cancel": "Отказ", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Етикети", - "subtitle": "Етикети/категории на статии", - "addTag": "Добавете етикет", - "name": "Име", - "namePlaceholder": "Име на етикет", - "backgroundColour": "Цвят на фона", - "createTag": "Създаване на етикет", - "editTag": "Редактиране на етикет", - "updateTag": "Актуализирайте етикета", - "deleteTag": "Изтриване на етикет", - "confirmDelete": "Изтриване на „{name}“?", - "noTags": "Все още няма етикети", - "colId": "ID", - "colTag": "Етикет", - "colColour": "Цвят", - "colUsedBy": "Използва се от", - "colCreated": "Създаден", - "colActions": "Действия" - }, - "navigation": { - "title": "Навигатор", - "flatCategories": "Плоски категории", - "publicRooms": "Обществени стаи", - "addCategory": "Добавете категория", - "editCategory": "Редактиране на категория", - "deleteCategory": "Изтриване на категория", - "categoryName": "Име на категория", - "categoryNamePlaceholder": "напр. Разслабване и чат", - "categoryOrder": "ред", - "roomName": "Име на стаята", - "roomNamePlaceholder": "напр. Салон за добре дошли", - "roomId": "ID на стаята", - "roomIdPlaceholder": "Числов номер на стая", - "save": "Запазване", - "cancel": "Отказ", - "noCategories": "Все още няма категории", - "noPublicRooms": "Все още няма обществени стаи", - "colId": "ID", - "colName": "Име", - "colOrder": "ред", - "colRooms": "Стаи", - "colActions": "Действия" - }, - "helpCenter": { - "title": "Помощен център", - "subtitle": "Записи за поддръжка и управление на ЧЗВ", - "entries": "Вписвания", - "newEntry": "+ Нов запис", - "edit": "Редактиране", - "delete": "Изтриване", - "noEntries": "Все още няма записи", - "confirmDelete": "Изтриване на „{title}“?", - "colId": "ID", - "colTitle": "Заглавие", - "colCategory": "Категория", - "colCreated": "Създаден", - "colActions": "Действия", - "form": { - "title": "Заглавие", - "titlePlaceholder": "Заглавие на записа", - "category": "Категория", - "categoryPlaceholder": "Изберете категория", - "body": "Тяло", - "bodyPlaceholder": "Напишете отговора...", - "save": "Запазване на записа", - "saving": "Запазва се...", - "deleteEntry": "Изтриване на запис", - "cancel": "Отказ" - } - }, - "ads": { - "title": "Реклами", - "subtitle": "Управлявайте хотелски реклами и промоционални банери", - "newAd": "+ Нова обява", - "edit": "Редактиране", - "delete": "Изтриване", - "noAds": "Все още няма реклами", - "confirmDelete": "Изтриване на тази реклама?", - "colId": "ID", - "colName": "Име", - "colImage": "Изображение", - "colUrl": "URL адрес", - "colViews": "Изгледи", - "colStatus": "Статус", - "colCreated": "Създаден", - "colActions": "Действия", - "form": { - "name": "Име", - "namePlaceholder": "Име на рекламата", - "image": "URL адрес на изображението", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Целеви URL адрес", - "urlPlaceholder": "https://example.com", - "enabled": "Активирано", - "save": "Запазване на обява", - "saving": "Запазва се...", - "deleteAd": "Изтрий рекламата", - "cancel": "Отказ" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Кутии за писане", - "subtitle": "Панели със съдържание, показани в хотела и CMS", - "newBox": "Нова кутия", - "edit": "Редактиране", - "delete": "Изтриване", - "noBoxes": "Все още няма кутии за писане", - "confirmDelete": "Изтриване на това поле?", - "colId": "ID", - "colName": "Име", - "colLocation": "Местоположение", - "colUpdated": "Актуализиран", - "colActions": "Действия", - "form": { - "name": "Име", - "namePlaceholder": "Име на кутията", - "location": "Местоположение", - "locationPlaceholder": "напр. начална страница, странична лента", - "content": "Съдържание", - "contentPlaceholder": "Напишете съдържанието на кутията...", - "enabled": "Активирано", - "save": "Кутия за запазване", - "saving": "Запазва се...", - "deleteBox": "Изтриване на кутия", - "cancel": "Отказ" - } - }, - "photos": { - "title": "Модериране на снимки", - "subtitle": "Скорошни снимки от камерата в играта", - "delete": "Изтриване", - "approve": "Одобряване", - "noPhotos": "Няма снимки за модериране", - "confirmDelete": "Изтриване на тази снимка за постоянно?", - "colId": "ID", - "colPreview": "Преглед", - "colUser": "Потребител", - "colRoom": "стая", - "colTimestamp": "Времево клеймо", - "colActions": "Действия", - "photoAlt": "Снимка на потребител #{id}", - "byUser": "от {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Потребители", - "subtitle": "Преглеждайте, търсете и управлявайте хотелски сметки", - "search": "Търсене", - "searchPlaceholder": "Търсете по потребителско име, имейл или ID...", - "searchResults": "{count, plural, one {# result} other {# results}} for \"{query}\"", - "noResults": "Няма намерени потребители", - "colId": "ID", - "colUsername": "Потребителско име", - "colEmail": "Имейл", - "colRank": "Ранг", - "colOnline": "Онлайн", - "colRegistered": "Регистриран", - "colLastOnline": "Последно онлайн", - "colActions": "Действия", - "yes": "да", - "no": "не", - "edit": "Редактиране", - "setRank": "Задайте ранг", - "disconnect": "Прекъснете връзката", - "alert": "Предупреждение", - "ban": "забрана", - "detail": { - "title": "Потребител: {username}", - "subtitle": "Подробности за акаунта и управление", - "overview": "Преглед", - "actions": "Действия", - "username": "Потребителско име", - "email": "Имейл", - "motto": "Мото", - "rank": "Ранг", - "credits": "Кредити", - "duckets": "Патета", - "diamonds": "Диаманти", - "online": "Онлайн", - "registered": "Регистриран", - "lastOnline": "Последно онлайн", - "ipAddress": "IP адрес", - "machineId": "ID на машината", - "sendAlert": "Изпратете предупреждение", - "sendMessage": "Изпратете съобщение", - "disconnectUser": "Прекъснете връзката с потребителя", - "banUser": "Бан потребител", - "resetPassword": "Нулирайте паролата", - "deleteUser": "Изтриване на потребител", - "confirmDelete": "Сигурни ли сте, че искате да изтриете {username}? Това не може да бъде отменено.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Редактиране на потребител: {username}", - "subtitle": "Промяна на данните за акаунта", - "username": "Потребителско име", - "usernamePlaceholder": "Потребителско име", - "email": "Имейл", - "emailPlaceholder": "user@example.com", - "motto": "Мото", - "mottoPlaceholder": "Потребителско мото", - "rank": "Ранг", - "credits": "Кредити", - "duckets": "Патета", - "diamonds": "Диаманти", - "save": "Запазете промените", - "saving": "Запазва се...", - "cancel": "Отказ" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "забрани", - "subtitle": "Управлявайте забраните на акаунти, IP и машини", - "newBan": "Нова забрана", - "edit": "Редактиране", - "delete": "Изтриване", - "noBans": "Все още няма забрани", - "confirmDelete": "Премахване на тази забрана?", - "colId": "ID", - "colValue": "Стойност", - "colType": "Тип", - "colReason": "Причина", - "colBannedBy": "Забранен от", - "colExpires": "Изтича", - "colCreated": "Създаден", - "colActions": "Действия", - "form": { - "value": "Стойност", - "valuePlaceholder": "Потребителско име, IP или ID на машина", - "type": "Тип", - "typeUser": "Потребител", - "typeIp": "IP", - "typeMachine": "машина", - "reason": "Причина", - "reasonPlaceholder": "Причина за забрана", - "expiresAt": "Изтича на", - "permanent": "Постоянно", - "save": "Запазете забраната", - "saving": "Запазва се...", - "cancel": "Отказ" - } - }, - "ip": { - "title": "IP управление", - "subtitle": "Управление на белия и черния списък с IP адреси", - "whitelist": "Бял списък", - "blacklist": "Черен списък", - "addIp": "Добавете IP", - "ipAddress": "IP адрес", - "ipAddressPlaceholder": "напр. 127.0.0.1", - "reason": "Причина", - "reasonPlaceholder": "Причина за включване", - "add": "Добавете", - "remove": "Премахнете", - "confirmRemove": "Да се премахне ли този IP от {list}?", - "noWhitelistedIps": "Няма IP адреси в белия списък", - "noBlacklistedIps": "Няма IP адреси в черен списък", - "colIp": "IP", - "colReason": "Причина", - "colAdded": "Добавено", - "colActions": "Действия" - }, - "vpn": { - "title": "Откриване на VPN / прокси", - "subtitle": "Конфигурирайте настройките за откриване на VPN и прокси", - "enabled": "Активирано", - "apiKey": "API ключ", - "apiKeyPlaceholder": "Вашият API ключ за откриване на VPN", - "apiKeyHint": "Оставете празно, за да деактивирате", - "blockOnDetect": "Блокиране при откриване", - "blockOnDetectHint": "Автоматично блокирайте потребители, открити зад VPN или прокси", - "save": "Запазете настройките", - "saving": "Запазва се...", - "settingsSaved": "VPN настройките са запазени успешно" - }, - "applications": { - "title": "Приложения за персонал", - "subtitle": "Чакащи и прегледани заявления за персонал", - "pending": "В очакване", - "approved": "Одобрено", - "rejected": "Отхвърлено", - "noApplications": "Все още няма приложения", - "colId": "ID", - "colApplicant": "Заявител", - "colPosition": "Позиция", - "colStatus": "Статус", - "colSubmitted": "Изпратено", - "colActions": "Действия", - "review": "Преглед", - "approve": "Одобряване", - "reject": "Отхвърляне", - "confirmApprove": "Да одобря ли {username} за {position}?", - "confirmReject": "Да се отхвърли ли кандидатурата на {username} за {position}?", - "detail": { - "title": "Приложение от {username}", - "subtitle": "За {position}", - "about": "Относно кандидата", - "message": "Съобщение на приложението", - "status": "Статус", - "submitted": "Изпратено", - "noMessage": "Няма предоставено съобщение" - } - }, - "teams": { - "title": "Екипи", - "subtitle": "Определете имена и описания на рангове на персонала", - "addRank": "Добавете ранг", - "editRank": "Редактиране на ранга", - "deleteRank": "Изтриване на ранга", - "noTeams": "Все още няма определения за ранг", - "confirmDelete": "Изтриване на определението за ранг {id}?", - "colId": "ID", - "colRank": "Ранг", - "colName": "Име", - "colBadge": "Значка", - "colColour": "Цвят", - "colActions": "Действия", - "form": { - "rankId": "ID на ранга", - "rankIdPlaceholder": "Числен идентификатор на ранг", - "name": "Име", - "namePlaceholder": "напр. Администратор", - "badge": "Код на значката", - "badgePlaceholder": "напр. ADM001", - "colour": "Цвят", - "colourPlaceholder": "напр. #ff0000", - "save": "Запазете дефиницията на екипа", - "saving": "Запазва се...", - "cancel": "Отказ" - } - }, - "permissions": { - "title": "Разрешения", - "subtitle": "Управлявайте базирани на ранг разрешения за администраторския панел", - "addPermission": "Добавете разрешение", - "editPermission": "Разрешение за редактиране", - "deletePermission": "Изтриване на разрешение", - "noPermissions": "Все още няма конфигурирани разрешения", - "confirmDelete": "Да се изтрие ли това разрешение?", - "colId": "ID", - "colRank": "Ранг", - "colPermission": "разрешение", - "colCreated": "Създаден", - "colActions": "Действия", - "form": { - "rankId": "ID на ранга", - "rankIdPlaceholder": "Изисква се минимален ранг", - "permission": "Ключ за разрешение", - "permissionPlaceholder": "напр. admin.articles.manage", - "save": "Разрешение за запазване", - "saving": "Запазва се...", - "cancel": "Отказ" - } - }, - "catalog": { - "title": "Каталог", - "subtitle": "Преглеждайте и управлявайте каталожни страници и елементи", - "pages": "Страници", - "items": "Предмети", - "addPage": "Добавяне на страница", - "editPage": "Редактиране на страница", - "deletePage": "Изтриване на страница", - "addItem": "Добавете елемент", - "editItem": "Редактиране на елемент", - "deleteItem": "Изтриване на елемент", - "noPages": "Все още няма каталожни страници", - "noItems": "Няма елементи в тази страница", - "confirmDeletePage": "Да се изтрие ли каталожната страница „{name}“?", - "confirmDeleteItem": "Изтриване на този елемент?", - "colId": "ID", - "colName": "Име", - "colIcon": "Икона", - "colOrder": "ред", - "colItems": "Предмети", - "colEnabled": "Активирано", - "colActions": "Действия", - "colItemId": "ID на артикул", - "colItemName": "Име на артикул", - "colCostCredits": "Цена (кредити)", - "colCostPoints": "Цена (точки)", - "colLimited": "Ограничен", - "pageForm": { - "name": "Име", - "namePlaceholder": "Име на страницата", - "icon": "ID на икона", - "iconPlaceholder": "ID на цифровата икона", - "order": "ред", - "enabled": "Активирано", - "parent": "Родителска страница", - "parentNone": "Няма (корен)", - "save": "Запазване на страницата", - "saving": "Запазва се...", - "cancel": "Отказ" - }, - "itemForm": { - "itemId": "ID на артикул", - "itemName": "Име на артикул", - "costCredits": "Разходи в кредити", - "costDuckets": "Цена в патета", - "costDiamonds": "Цена в диаманти", - "limitedStack": "Ограничен размер на стека", - "limitedSold": "Ограничено продаден", - "save": "Запазете елемента", - "saving": "Запазва се...", - "cancel": "Отказ" - }, - "packages": { - "openPackages": "Catalog packages", - "title": "Catalog packages", - "description": "Prepare category and price changes in a separate draft. Review the catalog before publishing.", - "createPackage": "New package", - "createDraft": "Create draft", - "draftCreated": "Package draft created. The live catalog has not changed.", - "refresh": "Refresh list", - "searchPackages": "Search packages", - "noPackages": "No packages match this search.", - "choosePackage": "Open a package or create a draft from existing categories.", - "name": "Package name", - "mode": "Publication mode", - "update": "Update existing categories", - "copy": "Create copies", - "updateHint": "Publication applies the package to its existing categories and offers.", - "copyHint": "Publication creates new categories and offers under the selected parent. Furniture references are preserved.", - "sourceCategories": "Source categories", - "packageLimits": "Descendant categories are included. Each package supports up to 200 categories and 500 offers.", - "searchCategories": "Search categories", - "selectedCategories": "Selected: {count}", - "targetParent": "Destination parent category", - "rootCategory": "Catalog root", - "draft": "Draft", - "published": "Published", - "editDraft": "Edit draft", - "catalogPreview": "Catalog preview", - "showBaseline": "Show the original saved snapshot", - "changes": "Before and after", - "entry": "Entry", - "field": "Field", - "before": "Before", - "after": "After", - "noChanges": "No edited fields compared with the original snapshot.", - "copyReview": "The entire package will be copied on publication, even if no fields were edited. The table lists edits to the original snapshot.", - "updateReview": "These draft changes will update existing catalog entries after publication.", - "saveDraft": "Save draft", - "saveHint": "Saving keeps the package as a draft. Save all changes before requesting a publication review.", - "draftSaved": "Draft saved. Publication is a separate step.", - "reviewPublication": "Review publication", - "publicationImpact": "Publication affects {pages} categories and {offers} offers.", - "conflicts": "Publication is blocked by conflicts. Resolve them before requesting another review.", - "readyToPublish": "The saved version passed the publication check. Publishing changes the live catalog.", - "publish": "Publish package", - "confirmPublish": "Publish this reviewed package to the live catalog now?", - "publishedSuccess": "Package published: {pages} categories and {offers} offers.", - "staleReview": "This package changed in another session. Reopen it to review the latest saved version.", - "unsaved": "Unsaved changes", - "discardChanges": "Discard unsaved package changes and continue?", - "working": "Working…", - "requestFailed": "The request failed. Try again.", - "invalidFields": "Check required names, layouts and whole-number fields before saving.", - "category": "Category", - "caption": "Category caption", - "iconImage": "Category icon ID", - "minRank": "Minimum rank", - "orderNum": "Display order", - "pageLayout": "Page layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "offers": "Offers ({count})", - "offer": "Offer", - "catalogName": "Offer name", - "costCredits": "Credits", - "costPoints": "Points", - "pointsType": "Points currency ID", - "amount": "Amount", - "searchOffers": "Search offers", - "currentCategoryOffers": "Only the selected category", - "selectMatching": "Select all matching offers ({count})", - "clearSelection": "Clear selection", - "selectedOffers": "Selected offers: {count}", - "select": "Select", - "selectOffer": "Select offer #{id}", - "noOffers": "No offers match these filters.", - "bulkPrices": "Bulk draft prices ({count} selected)", - "bulkHint": "Preview the selected price changes, then accept them into this draft. The live catalog remains unchanged until publication.", - "operation": "Operation", - "set": "Set value", - "add": "Add or subtract", - "percent": "Adjust by percent", - "value": "Value", - "reviewBulk": "Preview prices", - "invalidBulk": "Choose valid numbers and at least one offer. Resulting prices must be nonnegative and within the supported range.", - "acceptBulk": "Accept prices into draft", - "previous": "Previous", - "next": "Next" - }, - "integrity": { - "title": "Catalog integrity", - "description": "Check references, category paths, identifiers and furniture icons. Scanning does not change records.", - "catalog": "Catalog", - "normal": "Normal catalog", - "bc": "Builders Club", - "refresh": "Scan again", - "working": "Checking…", - "failed": "The operation could not be completed. Try again.", - "stalePreview": "The catalog changed after the preview. Create a new preview before applying repairs.", - "applied": "{count} categories reattached to the catalog root.", - "iconsUnavailable": "The icon folder could not be read. Icon availability has not been verified.", - "healthy": "No issues found in the completed checks.", - "total": "{count} issues found. Showing {shown}.", - "open": "Open", - "reference": "Reference: {value}", - "repairHint": "Preview categories whose parent no longer exists. Applying moves only these categories to the root and preserves every record. Cycles, missing furniture, icons and identifier conflicts require individual review.", - "preview": "Preview safe repairs", - "planned": "{count} categories will be moved:", - "parentChange": "parent #{from} → catalog root", - "apply": "Apply previewed repairs", - "legacyTitle": "Advanced maintenance actions", - "legacyHint": "These existing maintenance tools can rewrite identifiers and merge or remove duplicate records. They are separate from the non-destructive integrity check and its previewed parent repair.", - "issues": { - "missing_furniture": "Offer references missing furniture", - "invalid_item_ids": "Invalid furniture identifiers", - "missing_page": "Offer references a missing category", - "unreachable_page": "Unreachable category", - "category_cycle": "Category path contains a cycle", - "missing_icon": "Missing furniture icon", - "invalid_offer_id": "Invalid offer identifier", - "duplicate_offer_id": "Repeated offer identifier" - } - }, - "bulk": { - "undo": "Undo", - "undoHint": "You can also restore individual offers from audit history.", - "undoSuccess": "Restored {count} offers." - } - }, - "shop": { - "title": "Магазин", - "subtitle": "Управление на пакети и поръчки", - "packages": "Пакети", - "orders": "Поръчки", - "newPackage": "+ Нов пакет", - "edit": "Редактиране", - "delete": "Изтриване", - "viewOrder": "Преглед", - "noPackages": "Все още няма пакети за магазин", - "noOrders": "Все още няма поръчки", - "confirmDelete": "Изтриване на този пакет?", - "colId": "ID", - "colName": "Име", - "colPrice": "Цена", - "colCurrency": "Валута", - "colType": "Тип", - "colSold": "Продаден", - "colEnabled": "Активирано", - "colActions": "Действия", - "colOrderId": "ID на поръчката", - "colCustomer": "Клиент", - "colPackage": "Пакет", - "colAmount": "Сума", - "colStatus": "Статус", - "colDate": "Дата", - "statusPending": "В очакване", - "statusCompleted": "Завършено", - "statusRefunded": "Възстановена сума", - "form": { - "name": "Име", - "namePlaceholder": "Име на пакета", - "description": "Описание", - "descriptionPlaceholder": "Описание на опаковката", - "price": "Цена", - "currency": "Валута", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Тип", - "typeCredits": "Кредити", - "typeDuckets": "Патета", - "typeDiamonds": "Диаманти", - "typeBadge": "Значка", - "typeFurni": "Мебели", - "typeRank": "Ранг", - "amount": "Сума", - "badgeCode": "Код на значката", - "badgeCodePlaceholder": "напр. VIP001", - "rankId": "ID на ранга", - "furniItems": "Мебели", - "enabled": "Активирано", - "save": "Запазване на пакета", - "saving": "Запазва се...", - "cancel": "Отказ" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Транзакции", - "subtitle": "Дневник на плащанията в PayPal", - "noTransactions": "Все още няма транзакции", - "colId": "ID", - "colUser": "Потребител", - "colAmount": "Сума", - "colCurrency": "Валута", - "colPackage": "Пакет", - "colStatus": "Статус", - "colDate": "Дата", - "colActions": "Действия", - "statusCompleted": "Завършено", - "statusPending": "В очакване", - "statusFailed": "Неуспешно", - "statusRefunded": "Възстановена сума", - "detail": { - "title": "Транзакция #{id}", - "paypalId": "PayPal ID", - "payerEmail": "Имейл на платеца", - "grossAmount": "Брутна сума", - "fee": "Такса", - "netAmount": "Нетна сума" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Пазарувайте ваучери", - "subtitle": "Управлявайте кодовете на ваучери за осребряване", - "newVoucher": "+ Нов ваучер", - "edit": "Редактиране", - "delete": "Изтриване", - "noVouchers": "Все още няма ваучери", - "confirmDelete": "Изтриване на ваучер „{code}“?", - "colId": "ID", - "colCode": "Код", - "colValue": "Стойност", - "colType": "Тип", - "colUses": "Употреби / Макс", - "colExpires": "Изтича", - "colCreated": "Създаден", - "colActions": "Действия", - "form": { - "code": "Код", - "codePlaceholder": "напр. ЛЯТО2025", - "value": "Стойност", - "type": "Тип", - "typeCredits": "Кредити", - "typeDuckets": "Патета", - "typeDiamonds": "Диаманти", - "typeBadge": "Значка", - "typeFurni": "Мебели", - "typeRank": "Ранг", - "badgeCode": "Код на значката", - "badgeCodePlaceholder": "напр. VIP001", - "rankId": "ID на ранга", - "maxUses": "Макс използва", - "maxUsesPlaceholder": "0 = неограничен", - "expiresAt": "Изтича на", - "enabled": "Активирано", - "save": "Запази ваучер", - "saving": "Запазва се...", - "cancel": "Отказ", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Абонаменти", - "subtitle": "Активни повтарящи се абонаменти", - "noSubscriptions": "Няма активни абонаменти", - "cancel": "Отказ", - "confirmCancel": "Анулиране на абонамента за {username}?", - "colId": "ID", - "colUser": "Потребител", - "colPackage": "Пакет", - "colAmount": "Сума", - "colInterval": "Интервал", - "colStarted": "започна", - "colNextBilling": "Следващо фактуриране", - "colStatus": "Статус", - "colActions": "Действия", - "statusActive": "Активен", - "statusCancelled": "Отменено", - "statusExpired": "Изтекъл" - }, - "rareValues": { - "title": "Редки ценности", - "subtitle": "Управлявайте редки стойностни категории и цени на артикули", - "categories": "Категории", - "items": "Предмети", - "addCategory": "Добавете категория", - "editCategory": "Редактиране на категория", - "deleteCategory": "Изтриване на категория", - "noCategories": "Все още няма редки ценностни категории", - "confirmDeleteCategory": "Да се изтрие ли категорията „{name}“ и всички нейни елементи?", - "colId": "ID", - "colName": "Име", - "colItems": "Предмети", - "colUpdated": "Актуализиран", - "colActions": "Действия", - "colItemName": "Име на артикул", - "colCredits": "Кредити", - "colPoints": "Точки", - "colPointType": "Тип точка", - "categoryForm": { - "name": "Име", - "namePlaceholder": "Име на категория", - "save": "Запазване на категория", - "saving": "Запазва се...", - "cancel": "Отказ" - }, - "itemForm": { - "itemName": "Име на артикул", - "itemNamePlaceholder": "напр. трон", - "credits": "Стойност на кредитите", - "points": "Стойност на точките", - "pointType": "Тип точка", - "pointTypeDuckets": "Патета", - "pointTypeDiamonds": "Диаманти", - "save": "Запазете елемента", - "saving": "Запазва се...", - "cancel": "Отказ" - } - }, - "badges": { - "title": "Значки", - "subtitle": "Качвайте, давайте и управлявайте каталог с значки", - "upload": "Качване", - "giveBadge": "Дайте значка", - "catalogue": "Каталог", - "uploadTitle": "Качете нова значка", - "uploadSubtitle": "Качете файл с изображение на значка", - "badgeCode": "Код на значката", - "badgeCodePlaceholder": "напр. VIP001", - "badgeFile": "Бадж файл", - "badgeFileHint": "PNG или GIF, препоръчително 40x40", - "uploadButton": "Качване", - "uploading": "Качване...", - "giveTitle": "Дайте значка на потребителя", - "giveSubtitle": "Дайте значка на конкретен потребител", - "username": "Потребителско име", - "usernamePlaceholder": "Целево потребителско име", - "giveButton": "Дайте значка", - "giving": "Давам...", - "catalogueTitle": "Каталог за значки", - "catalogueSubtitle": "Всички налични значки в хотела", - "noBadges": "Няма значки в каталога", - "search": "Значки за търсене", - "searchPlaceholder": "Търсене по код или име...", - "colCode": "Код", - "colImage": "Изображение", - "colName": "Име", - "colDescription": "Описание", - "colActions": "Действия" - }, - "achievements": { - "title": "постижения", - "subtitle": "Списък само за четене с постижения в играта", - "noAchievements": "Няма конфигурирани постижения", - "colId": "ID", - "colName": "Име", - "colCategory": "Категория", - "colLevels": "Нива", - "colReward": "Награда", - "colProgress": "Напредък", - "levelLabel": "Ниво {level}", - "rewardCredits": "{count} кредита", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Календарни кампании", - "subtitle": "Списък само за четене на календарни кампании и събития", - "noCampaigns": "Все още няма календарни кампании", - "colId": "ID", - "colName": "Име", - "colStart": "Започнете", - "colEnd": "Край", - "colType": "Тип", - "colReward": "Награда", - "colActions": "Действия", - "detail": { - "title": "Кампания: {name}", - "subtitle": "Подробности за събитието в календара", - "days": "Дни", - "dayLabel": "Ден {day}", - "reward": "Награда", - "noDays": "Няма конфигурирани дни за тази кампания" - } - }, - "radio": { - "title": "Радио модериране", - "subtitle": "Най-новите викове, DJ приложения и графици в ефир (25 най-нови от всяко).", - "moderation": "Умереност", - "shouts": "Викове", - "applications": "Приложения", - "schedules": "Графици", - "settings": "Настройки", - "embed": "Вграждане", - "ranks": "рангове", - "history": "История", - "apiKeys": "API ключове", - "points": "Точки", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Радио мониторинг", - "subtitle": "Проба на живо само за четене на конфигурираните крайни точки на радиото (radio_now_playing_api_url, radio_listeners_api_url). Всяка заявка се проваля меко с време за изчакване {timeout} — не се записват данни. Конфигурирайте URL адреси в Настройки.", - "stream": "Поток", - "online": "Онлайн", - "offline": "Офлайн", - "notConfigured": "Не е конфигуриран", - "nowPlaying": "Сега се играе", - "nowPlayingApi": "API за игра в момента", - "listenersApi": "API за слушатели", - "listeners": "Слушатели", - "currentSong": "Актуална песен", - "bitrate": "Скорост на предаване", - "status": "Статус", - "noNowPlayingHint": "няма зададен API за игра в момента", - "noListenersHint": "няма зададен API за слушатели", - "endpointDiagnostics": "Диагностика на крайна точка", - "diagnosticsLegend": "OK: достъпно · WARN: не е конфигурирано · ERROR: неуспешна заявка или изтекло време.", - "streamUrl": "URL адрес на потока", - "unreachable": "недостижим", - "refresh": "Опресняване" - }, - "user": "Потребител", - "message": "Съобщение", - "posted": "Публикувано", - "realName": "Истинско име", - "age": "Възраст", - "style": "стил", - "applied": "Приложено", - "day": "ден", - "start": "Започнете", - "end": "Край", - "show": "Покажи", - "status": "Статус", - "active": "активен", - "inactive": "неактивен", - "hidden": "скрит", - "activeSchedules": "Активни графици", - "noShouts": "Без викове за модериране", - "noApplications": "Няма подадени заявления.", - "noSchedules": "Няма конфигурирани графици.", - "deleteShout": "Изтриване", - "confirmDeleteShout": "Изтриване на този вик?", - "pendingApplications": "Чакащи заявления", - "settingsForm": { - "title": "Настройки на радиото", - "subtitle": "Редакциите записват в website_settings (радио_* клавиши) и разбиват кеша на настройките по време на изпълнение. Булевите стойности използват 0/1.", - "enabled": "Активирано", - "disabled": "Забранено", - "totalKeys": "Общо ключове", - "configured": "Конфигуриран", - "curatedHint": "подбрани ключове със стойност", - "customKeys": "Персонализирани ключове", - "saveAll": "Запазете всички", - "singleKey": "Добавете / презапишете един ключ", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "стойност", - "commentPlaceholder": "коментар (по избор)", - "saveSingle": "Запазване", - "otherSettings": "Други настройки на радиото", - "dbError": "Настройките не можаха да се заредят (няма налична база данни). Настройките по подразбиране ще бъдат създадени при запазване." - }, - "embedPage": { - "title": "Вграждане на радио", - "subtitle": "Готов за копиране код за вграждане за потока на живо. Само за четене — тук нищо не записва в базата данни. Конфигурирайте URL адреса на потока в настройките на радиото (radio_stream_url).", - "streamUrl": "URL адрес на потока", - "configured": "Конфигуриран", - "missing": "Липсва", - "radioName": "Име на радиото", - "nowPlayingApi": "API за игра в момента", - "set": "Комплект", - "notSet": "Не е зададено", - "noStreamUrl": "Няма конфигуриран URL адрес на поток", - "noStreamUrlText": "Няма зададен radio_stream_url, така че все още няма нищо за вграждане.", - "goToSettings": "Отидете на Радио настройки", - "livePreview": "Преглед на живо", - "livePreviewText": "Това е голият audio плейър, както ще го видят посетителите. Натиснете възпроизвеждане, за да потвърдите, че потокът е достъпен.", - "source": "Източник", - "audioSnippet": "Фрагмент от аудио плейър", - "audioSnippetDesc": "Вмъкващ се HTML5 аудио плейър, насочен право към потока. Работи навсякъде, където е разрешен обикновен HTML.", - "iframeSnippet": "Фрагмент за обвивка на iframe", - "iframeSnippetDesc": "Вгражда собствената страница на радиоплейъра на сайта във вградена рамка — запазва вашия стил и информация за възпроизвеждане в момента. Регулирайте ширината/височината на вкус.", - "audioUnsupported": "Вашият браузър не поддържа аудио елемента." - }, - "banners": { - "title": "Банери", - "heading": "Радио банери", - "description": "Промоционални банери, показани на страницата на радиото, подредени по ред на сортиране.", - "addBanner": "Добавете банер", - "createBanner": "Създаване на банер", - "deleteBanner": "Изтриване на банер", - "noBanners": "Все още няма банери — добавете един по-горе.", - "existing": "Съществуващи банери ({count})", - "save": "Запазване", - "delete": "Изтриване", - "byUser": "от потребител {id}", - "active": "активен", - "hidden": "скрит", - "bannerAlt": "Радио банер", - "statusActive": "Активен", - "statusHidden": "Скрити", - "dbError": "Банерите не можаха да се заредят (няма налична база данни).", - "form": { - "imagePath": "Път / URL на изображението", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Заглавие", - "description": "Описание", - "sortOrder": "Ред на сортиране", - "active": "Активен" - } - }, - "ranksForm": { - "title": "Радио рангове", - "subtitle": "DJ / служители се класира за присвояване на радио приложения.", - "dbError": "Не може да се заредят ранговете (няма налична база данни).", - "active": "Активен", - "addRank": "Добавете ранг", - "name": "Име", - "badgeCode": "Код на значката", - "description": "Описание", - "createRank": "Създайте ранг", - "existing": "Съществуващи рангове ({count})", - "noRanks": "Все още няма класации — добавете една по-горе.", - "activeLabel": "активен", - "inactiveLabel": "неактивен", - "save": "Запазване", - "deleteRank": "Изтриване на ранг #{id}" - }, - "historyPage": { - "title": "История на радиоиграта", - "subtitle": "Минали DJ предавания и ефирно време (radio_history), най-новите първи. Дневник само за четене на това кой е бил в ефир, кога и колко слушатели са се включили.", - "dbError": "Историята на радиото не можа да се зареди (няма налична база данни).", - "showsLogged": "Показва регистрирани", - "onAirNow": "В ефир сега", - "uniqueDjs": "Уникални диджеи", - "peakListeners": "Пикови слушатели", - "empty": "Все още няма записана история на радиото.", - "showLog": "Показване на регистрационния файл ({count})", - "colDj": "DJ", - "colShow": "Покажи", - "colStarted": "започна", - "colEnded": "Приключи", - "colAirtime": "Ефирно време", - "colListeners": "Слушатели", - "colNotes": "Бележки", - "onAir": "в ефир" - }, - "apiKeysForm": { - "title": "Радио API ключове", - "subtitle": "API ключове за външни радио интеграции (radio_api_keys). Ключовете се генерират от страна на сървъра и се показват маскирани — копирайте пълната стойност от базата данни при първото издаване.", - "dbError": "Неуспешно зареждане на API ключове (недостъпна база данни).", - "totalKeys": "Общо ключове", - "active": "Активен", - "inactive": "Неактивен", - "generateKey": "Генериране на ключ", - "generateHint": "Тайният ключ се генерира автоматично с криптографска произволност - не го въвеждате.", - "name": "Име", - "namePlaceholder": "AzureCast мост", - "rateLimit": "Ограничение на скоростта (заявки/мин)", - "allowedIps": "Разрешени IP (по избор)", - "allowedIpsPlaceholder": "разделени със запетая, празно = всяко", - "generate": "Генериране на ключ", - "existingKeys": "Съществуващи ключове ({count})", - "noKeys": "Все още няма API ключове — генерирайте един по-горе.", - "colName": "Име", - "colKey": "Ключ", - "colAllowedIps": "Разрешени IP адреси", - "colRateLimit": "Ограничение на скоростта", - "colLastUsed": "Последно използван", - "colExpires": "Изтича", - "colStatus": "Статус", - "colActions": "Действия", - "maskedHint": "Показват се само първите 8 знака", - "any": "всякакви", - "activeLabel": "активен", - "inactiveLabel": "неактивен", - "deactivate": "Деактивирайте", - "activate": "Активирайте", - "delete": "Изтриване" - }, - "pointsForm": { - "title": "Радио слушателски точки", - "subtitle": "Наградете слушателите с валута за времето, прекарано в радиото. Редакциите записват в website_settings (radio_points_* keys) и разбиват кеша на настройките по време на изпълнение. Булевите стойности използват 0/1.", - "saved": "Запазено", - "points": "Точки", - "enabled": "Активирано", - "disabled": "Забранено", - "perMinute": "На минута", - "paidIn": "платено в {currency}", - "maxPerDay": "Макс./ден", - "unlimited": "Неограничен", - "minListeners": "Мин. слушатели", - "settings": "Настройки", - "pointsEnabled": "Точките са активирани", - "pointsEnabledHint": "Главен превключвател за присъждане на слушателски точки.", - "currency": "Валута", - "currencyHint": "В кой портфейл се плащат точките.", - "pointsPerMinute": "Точки в минута", - "pointsPerMinuteHint": "Сума, присъждана за всяка пълна минута слушане.", - "maxPerDayHint": "Дневна граница на потребител. Използвайте 0 за неограничен брой.", - "minListenersHint": "Точки се присъждат само когато поне толкова хора са включени.", - "save": "Запазване на настройките за точки" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Резервен плейлист (radio_auto_dj_playlist), през който радиото се върти, когато няма DJ на живо. Подредени по ред на сортиране и след това по заглавие.", - "dbError": "Плейлистът на AutoDJ не можа да се зареди (няма налична база данни).", - "tracks": "Писти", - "active": "Активен", - "inactive": "Неактивен", - "addTrack": "Добавете песен", - "titlePlaceholder": "Заглавие на песента", - "artist": "Художник", - "album": "Албум", - "artworkUrl": "URL адрес на произведение на изкуството", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Продължителност (секунди)", - "durationPlaceholder": "напр. 215", - "sortOrder": "Ред на сортиране", - "playlist": "Плейлист ({count})", - "noTracks": "Все още няма песни на AutoDJ — добавете една по-горе.", - "colOrder": "ред", - "colTitle": "Заглавие", - "colArtist": "Художник", - "colAlbum": "Албум", - "colDuration": "Продължителност", - "colPlays": "Пиеси", - "colLastPlayed": "Последно играно", - "colStatus": "Статус", - "colActions": "Действия", - "activeLabel": "активен", - "inactiveLabel": "неактивен", - "deactivate": "Деактивирайте", - "activate": "Активирайте", - "delete": "Изтриване", - "trackTitle": "Заглавие" - }, - "moderationPage": { - "title": "DJ модериране", - "subtitle": "Прегледайте и премахнете радио викове (50 най-нови).", - "recentShouts": "Скорошни викове ({count})" - } - }, - "commandocentrum": { - "title": "Командоцентър", - "subtitle": "Диагностика, RCON контроли и управление на потребителите", - "diagnostics": "Диагностика", - "rcon": "RCON", - "userActions": "Действия на потребителя", - "diagnosticsTitle": "Емулаторна диагностика", - "memoryUsage": "Използване на паметта", - "uptime": "Работно време", - "onlineUsers": "Онлайн потребители", - "roomsLoaded": "Стаите са заредени", - "refresh": "Опресняване", - "rconTitle": "RCON команди", - "rconPlaceholder": "Въведете RCON команда...", - "rconSend": "Изпратете", - "rconSending": "Изпращане...", - "rconResponse": "Отговор", - "userActionsTitle": "Действия на потребителя", - "username": "Потребителско име", - "usernamePlaceholder": "Целево потребителско име", - "action": "Действие", - "execute": "Изпълнение", - "actions": { - "disconnect": "Прекъснете връзката", - "alert": "Изпратете предупреждение", - "giveCredits": "Дайте кредити", - "giveBadge": "Дайте значка", - "givePoints": "Дайте точки", - "ban": "забрана", - "kick": "Ритник" - }, - "messagePlaceholder": "Съобщение (за сигнали)…", - "amountPlaceholder": "Сума…", - "badgePlaceholder": "Код на значката…" - }, - "emulator": { - "title": "Конфиг. на емулатора", - "subtitle": "Преглеждайте и редактирайте настройките на емулатора и текстовете на локала", - "settings": "Настройки", - "texts": "Текстове", - "search": "Търсене", - "searchPlaceholder": "Ключове за търсене...", - "noSettings": "Няма намерени настройки", - "noTexts": "Няма намерени текстове", - "edit": "Редактиране", - "save": "Запазване", - "saving": "Запазва се...", - "cancel": "Отказ", - "colKey": "Ключ", - "colValue": "Стойност", - "colType": "Тип", - "colActions": "Действия", - "editDialog": { - "title": "Редактиране: {key}", - "value": "Стойност", - "valuePlaceholder": "Въведете стойност...", - "save": "Запазете промените", - "cancel": "Отказ" - } - }, - "alerts": { - "title": "Сигнали", - "subtitle": "Изпращайте сигнали за целия хотел и вижте последните сигнали", - "sendAlert": "Изпратете сигнал за хотел", - "recentAlerts": "Последни сигнали ({count})", - "noRecentAlerts": "Няма скорошни сигнали", - "form": { - "title": "Заглавие на предупреждение", - "titlePlaceholder": "напр. Поддръжка на сървъра за 10 минути", - "message": "Предупредително съобщение", - "messagePlaceholder": "Напишете предупредителното съобщение...", - "type": "Тип", - "typeHotel": "Сигнал за целия хотел", - "typeStaff": "Само персонал", - "urgent": "Спешно", - "send": "Изпратете предупреждение", - "sending": "Изпращане...", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Заглавие", - "colSentBy": "Изпратено от", - "colType": "Тип", - "colDate": "Дата", - "colActions": "Действия", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Дейности на персонала", - "subtitle": "Одитна пътека на действията на персонала в админ панела", - "noLogs": "Все още няма регистрирана дейност на персонала", - "colId": "ID", - "colUser": "Потребител", - "colAction": "Действие", - "colTarget": "Цел", - "colDescription": "Описание", - "colIp": "IP", - "colTimestamp": "Времево клеймо", - "filterByUser": "Филтриране по потребител...", - "filterByAction": "Филтриране по действие...", - "clearFilters": "Изчистване на филтрите", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Филтър за думи", - "subtitle": "Управлявайте филтрирани думи и фрази в хотела", - "addWord": "Добавете дума", - "addWords": "Добавете думи", - "noWords": "Все още няма филтрирани думи", - "confirmDelete": "Да се премахне ли „{word}“ от филтъра?", - "colId": "ID", - "colWord": "Слово", - "colAddedBy": "Добавено от", - "colCreated": "Създаден", - "colActions": "Действия", - "form": { - "word": "Слово", - "wordPlaceholder": "напр. лоша дума", - "addMore": "Добавете няколко думи (по една на ред)", - "save": "Добавяне към филтъра", - "saving": "Запазва се...", - "cancel": "Отказ" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Режим на поддръжка", - "subtitle": "Активирайте или деактивирайте поддръжката в целия хотел", - "enabled": "Режимът на поддръжка е активиран", - "disabled": "Режимът на поддръжка е деактивиран", - "enable": "Разрешете поддръжката", - "disable": "Деактивирайте поддръжката", - "message": "Съобщение за поддръжка", - "messagePlaceholder": "Ще се върнем след малко!", - "staffAccess": "Разрешете достъп на персонала по време на поддръжката", - "save": "Запазете настройките", - "saving": "Запазва се...", - "confirmEnable": "Активирането на поддръжката ще попречи на всички потребители, които не са от персонала, да имат достъп до хотела. Продължаване?", - "confirmDisable": "Деактивиране на режима на поддръжка и възстановяване на достъпа за всички потребители?" - }, - "housekeeping": { - "title": "Разрешения за домакинство", - "subtitle": "Конфигурирайте кои рангове имат достъп до кои администраторски секции", - "addPermission": "Добавете разрешение", - "editPermission": "Разрешение за редактиране", - "deletePermission": "Изтриване на разрешение", - "noPermissions": "Няма конфигурирани разрешения за поддръжка", - "confirmDelete": "Да се изтрие ли това разрешение?", - "colId": "ID", - "colRank": "Ранг", - "colSection": "Раздел", - "colActions": "Действия", - "form": { - "rankId": "ID на ранга", - "rankIdPlaceholder": "Минимален ранг", - "section": "Ключ на раздела", - "sectionPlaceholder": "напр. админ.табло", - "save": "Разрешение за запазване", - "saving": "Запазва се...", - "cancel": "Отказ" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset Приложено!", - "cleared": "All Разрешения cleared!", - "invalidRank": "Invalid Ранг", - "testDone": "Test done: {count} Разрешения found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Изтриване ALL Разрешения? This Действие cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "разрешение", - "colDescription": "Описание", - "colMinRank": "Min. Ранг", - "permissionKey": "Ключ за разрешение", - "minRank": "Min. Ранг", - "description": "Описание", - "permissions": "Разрешения", - "permissionsCount": "{count} Разрешения", - "permission": "разрешение", - "highestMinRank": "Highest min. Ранг: {rank}", - "totalMinRank": "Total min. Ранг sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} рангове", - "missingDeps": "{count} Липсва dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Липсва)", - "rank": "Ранг", - "count": "Count", - "searchPermission": "Търсене Разрешения…", - "search": "Търсене", - "manage": "Manage", - "importSelection": "Импортиране selection", - "noGroup": "Не group", - "allGroups": "All groups", - "perGroup": "Разрешения per group", - "perRank": "Разрешения per Ранг", - "rankOverviewHint": "All Разрешения grouped by the Ранг they are assigned to.", - "tabOverview": "Преглед", - "tabManage": "Manage", - "tabImport": "Импортиране / Export", - "tabRanks": "Ранг Преглед", - "tabPresets": "Предварителни настройки", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Импортиране Разрешения", - "importHint": "Paste a JSON array of разрешение objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Импортиране", - "exportTitle": "Export Разрешения", - "exportHint": "Export all Разрешения as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Разрешение Предварителни настройки", - "presetsHint": "Кандидатствайте a predefined Комплект of Разрешения for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Умереност tools: Потребител lookup, забрани, CFH handling, chat трупи.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Потребители, Стаи, news, Настройки, Магазин, events, Радио & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including разрешение management and asset Импортиране.", - "applyPreset": "Кандидатствайте preset", - "clearAll": "Clear all Разрешения", - "testTitle": "Test Ранг access", - "testHint": "Enter a Ранг number to see which Разрешения would be granted.", - "test": "Test", - "auditTitle": "Разрешение audit log", - "auditHint": "All changes to Домакинство Разрешения are logged.", - "auditLogsAt": "Audit трупи are available on the Audit log page.", - "viewAuditLogs": "Преглед audit трупи", - "importedWithErrors": "Imported {count} Разрешения with {errors} errors", - "confirmClearAllDesc": "This will Премахнете every разрешение entry from the База данни. Are you sure?", - "confirmDeletePermission": "Изтриване this разрешение permanently?", - "confirmBulkDelete": "Изтриване {count} selected Разрешения?", - "deleteSelected": "Изтриване {count} selected", - "cancel": "Отказ", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Потребител", - "auditAction": "Действие", - "auditTarget": "Цел", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Стаи", - "subtitle": "Търсете и управлявайте хотелски стаи", - "search": "Търсене", - "searchPlaceholder": "Търсете по име, собственик или ID...", - "searchResults": "{count, plural, one {# room} other {# rooms}} намерено за „{query}“", - "noResults": "Няма намерени стаи", - "colId": "ID", - "colName": "Име", - "colOwner": "Собственик", - "colUsers": "Потребители", - "colState": "състояние", - "colCategory": "Категория", - "colCreated": "Създаден", - "colActions": "Действия", - "stateOpen": "Отворете", - "stateClosed": "Затворено", - "stateLocked": "Заключено", - "stateInvisible": "Невидим", - "detail": { - "title": "Стая: {name}", - "subtitle": "Притежаван от {owner}", - "overview": "Преглед", - "actions": "Действия", - "description": "Описание", - "noDescription": "Без описание", - "owner": "Собственик", - "users": "Потребители онлайн", - "maxUsers": "Макс потребители", - "category": "Категория", - "state": "състояние", - "tags": "Етикети", - "noTags": "Без етикети", - "created": "Създаден", - "deleteRoom": "Изтриване на стая", - "confirmDelete": "Да се изтрие ли стаята „{name}“? Това не може да бъде отменено.", - "enterRoom": "Влез в стаята", - "changeOwner": "Смени собственика", - "changeOwnerPlaceholder": "Ново потребителско име на собственик" - } - }, - "emailTemplates": { - "title": "Шаблони за имейли", - "subtitle": "Управлявайте транзакционни имейл шаблони", - "newTemplate": "+ Нов шаблон", - "edit": "Редактиране", - "delete": "Изтриване", - "noTemplates": "Все още няма имейл шаблони", - "confirmDelete": "Изтриване на шаблона „{name}“?", - "colId": "ID", - "colName": "Име", - "colSubject": "Предмет", - "colKey": "Ключ", - "colUpdated": "Актуализиран", - "colActions": "Действия", - "form": { - "name": "Име", - "namePlaceholder": "напр. Имейл за добре дошли", - "key": "Ключ", - "keyPlaceholder": "напр. добре дошъл_имейл", - "subject": "Предмет", - "subjectPlaceholder": "Тема на имейл", - "body": "Основен текст (HTML)", - "bodyPlaceholder": "

Здравейте, {username},

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

Здравейте, {username},

", + "variables": "Налични променливи", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Запазване на шаблон", + "saving": "Запазва се...", + "cancel": "Отказ", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Тема", + "subtitle": "Персонализирайте външния вид на CMS", + "presets": "Предварителни настройки", + "colours": "Цветове", + "css": "CSS", + "presetsTitle": "Предварително зададени теми", + "presetsSubtitle": "Изберете предварително изградена цветова схема", + "applyPreset": "Кандидатствайте", + "presetApplied": "Предварителната настройка е приложена: {preset}", + "customiseTitle": "Персонализирани цветове", + "primary": "Първичен", + "secondary": "Вторичен", + "accent": "Акцент", + "background": "Фон", + "surface": "Повърхност", + "text": "Текст", + "saveColours": "Запазете цветовете", + "savingColours": "Запазва се...", + "cssTitle": "Персонализиран CSS", + "cssSubtitle": "Добавете персонализиран CSS, за да замените стиловете на темата", + "cssPlaceholder": "/* Вашият персонализиран CSS тук */", + "saveCss": "Запазете CSS", + "savingCss": "Запазва се...", + "reset": "Възстановяване на настройките по подразбиране", + "confirmReset": "Нулиране на темата до стойностите по подразбиране?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Медийна библиотека", + "subtitle": "Качвайте и управлявайте медийни файлове", + "upload": "Качване", + "uploadTitle": "Качете файл", + "uploadSubtitle": "Плъзнете и пуснете или щракнете, за да качите", + "uploadButton": "Изберете файл", + "uploading": "Качване...", + "noFiles": "Все още няма медийни файлове", + "delete": "Изтриване", + "confirmDelete": "Изтриване на този файл за постоянно?", + "search": "Търсене", + "searchPlaceholder": "Търсене по име на файл...", + "colPreview": "Преглед", + "colName": "Име", + "colSize": "Размер", + "colType": "Тип", + "colUploaded": "Качено", + "colActions": "Действия", + "copyUrl": "Копиране на URL", + "urlCopied": "URL адресът е копиран в клипборда" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Качете и управлявайте favicon на сайта", + "current": "Текущ favicon", + "uploadLabel": "Качване на фавикон", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO или SVG. Макс 2MB.", + "upload": "Качване", + "uploading": "Качване...", + "delete": "Премахнете", + "deleting": "Премахване...", + "saved": "Favicon е запазен успешно!", + "deleted": "Favicon премахнат успешно!", + "error": "Нещо се обърка", + "confirmDelete": "Да се премахне фавиконата? Сайтът вече няма да показва персонализирана фавикона.", + "generator": { + "title": "Генериране на favicon", + "text": "Текст", + "bgColor": "Цвят на фона", + "textColor": "Цвят на текста", + "rounded": "Заоблени ъгли", + "save": "Запазване като фавикон" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "Настройки на CMS", + "subtitle": "Управление на CMS конфигурацията на ключ/стойност", + "addSetting": "Добавете настройка", + "edit": "Редактиране", + "delete": "Изтриване", + "noSettings": "Няма намерени настройки", + "confirmDelete": "Да се изтрие ли настройката „{key}“?", + "colKey": "Ключ", + "colValue": "Стойност", + "colUpdated": "Актуализиран", + "colActions": "Действия", + "form": { + "key": "Ключ", + "keyPlaceholder": "напр. hotel_name", + "value": "Стойност", + "valuePlaceholder": "Стойност на настройката", + "save": "Запазване на настройката", + "saving": "Запазва се...", + "cancel": "Отказ" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Начало", + "reload": "Презареждане", + "fullscreen": "Цял екран", + "logout": "Изход", + "onlineUsers": "Потребители онлайн", + "emulatorOnline": "Емулаторът е онлайн", + "emulatorOffline": "Емулаторът е офлайн", + "dragToMove": "Влачете за преместване", + "hide": "Скрий лентата", + "fullscreenExit": "Изход от цял екран", + "show": "Покажи лентата", + "emulatorUnknown": "Състоянието на емулатора е неизвестно" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Диагностика на файловете", + "preliminary": "Предварителна проверка на адресите; съдържанието се проверява при импортиране.", + "http": "HTTP {status}", + "network": "Неуспешна връзка", + "timeout": "Изтекло време за отговор", + "invalidResponse": "Източникът върна уеб страница вместо файл", + "available": "Файлът е намерен; предстои проверка", + "recover": "Прикачване на оригинала и продължаване", + "recoveryHint": "Изберете {file} (до 50 MB). Проверява се самоличността му. Повтарят се неуспешните елементи; завършените се запазват.", + "attach": "Изберете оригиналния .nitro файл", + "working": "Проверка или продължаване...", + "attached": "Съответстващият файл е прикачен", + "resume": "Повторете неуспешните импортирания с файла", + "invalidFile": "Изберете съответстващ оригинален .nitro файл до 50 MB и опитайте отново.", + "resumeError": "Обновете историята и използвайте последния опит; проверете файла и опитайте отново.", + "mismatchedFile": "Този файл принадлежи на друга мебел.", + "alreadyStarted": "Възстановяването вече е започнало. Обновете историята и използвайте последния опит.", + "notEligible": "Този елемент не допуска възстановяване с прикачен файл." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/cs.json b/src/messages/cs.json index b04855ed..3318079d 100644 --- a/src/messages/cs.json +++ b/src/messages/cs.json @@ -1,3918 +1,4913 @@ { - "draftRecovery": { - "ready": "Kopie pro obnovení bude v tomto prohlížeči uchována po dobu 7 dnů.", - "saved": "Kopie pro obnovení byla v tomto prohlížeči uložena na 7 dnů.", - "unavailable": "Obnovení v prohlížeči není dostupné. Nech tuto stránku otevřenou, dokud se změny neuloží.", - "found": "V tomto prohlížeči je dostupná kopie pro obnovení, uložená", - "restore": "Obnovit kopii z prohlížeče", - "discard": "Smazat kopii z prohlížeče", - "confirmRestore": "Nahradit aktuální formulář kopií z prohlížeče? Před uložením zkontroluj obsah.", - "confirmDiscard": "Smazat tuto kopii z prohlížeče? Aktuální formulář zůstane beze změn." - }, - "nav": { - "home": "Domů", - "community": "Společenství", - "articles": "články", - "photos": "Fotografie", - "staff": "Zaměstnanci", - "rankings": "Žebříčky", - "guilds": "cechy", - "leaderboards": "Žebříčky", - "rareValues": "Vzácné hodnoty", - "shop": "Obchod", - "market": "trh", - "assistance": "Pomoc", - "helpCenter": "Centrum nápovědy", - "myTickets": "Moje vstupenky", - "badges": "Odznaky", - "radio": "Rádio", - "friends": "Přátelé", - "messages": "Zprávy", - "admin": "Admin", - "openMenu": "Otevřít nabídku", - "closeMenu": "Zavřít nabídku", - "drawBadge": "Nakreslete odznak", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} online", - "nitroClient": "Nitro klient", - "tagline": "Online virtuální svět, kde si můžete vytvořit svého vlastního avatara, spřátelit se, chatovat, vytvářet místnosti a mnoho dalšího!", - "login": "Přihlášení", - "or": "Nebo", - "createAccount": "Vytvořte si účet" - }, - "footer": { - "copyright": "© {year} - {hotel} je neziskový vzdělávací projekt" - }, - "pages": { - "staff": { - "title": "Zaměstnanci", - "subtitle": "Tým za hotelem", - "ranksTitle": "Hodnosti", - "ranksSubtitle": "O co se stará každá část týmu", - "membersTitle": "Členové týmu", - "membersEmptySubtitle": "Nikdo se teď nemůže ukázat", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "Žádní zaměstnanci k zobrazení.", - "colUsername": "Uživatelské jméno", - "colRank": "Hodnost", - "colMotto": "Motto" - }, - "leaderboard": { - "title": "Žebříček", - "subtitle": "20 nejlepších hráčů podle {currency}", - "tab_credits": "Kredity", - "tab_diamonds": "Diamanty", - "tab_duckets": "Kachny", - "tab_achievement": "Úspěchy", - "tab_respects": "respekt", - "tab_onlinetime": "Online čas", - "emptyState": "Zatím žádné hodnocení k zobrazení.", - "colAvatar": "Avatar", - "colPlayer": "Přehrávač" - }, - "friends": { - "title": "Přátelé", - "emptySubtitle": "Zatím jste nepřidali žádné přátele", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Přidejte přátele v hotelu a oni se zde zobrazí.", - "noMotto": "Žádné 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": "Zprávy", - "subtitle": "Čekají na vás žádosti o přátelství a offline zprávy", - "requestsTitle": "Žádosti o přátelství", - "requestsEmptySubtitle": "Nikdo ještě nepožádal, aby se stal vaším přítelem", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "Žádné nevyřízené žádosti o přátelství.", - "wantsToBeFriend": "chce být tvůj přítel.", - "accept": "Přijmout", - "offlineTitle": "Offline zprávy", - "offlineEmptySubtitle": "Vaše doručená pošta je prázdná", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "Nemáte žádné offline zprávy.", - "unknownUser": "Uživatel #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Žádné motto", - "statRank": "Hodnost", - "statCredits": "Kredity", - "statRegistered": "Registrováno", - "badgesTitle": "Odznaky", - "badgesEmpty": "Zatím žádné odznaky.", - "photosTitle": "Fotografie", - "photosEmpty": "Zatím žádné fotky.", - "guestbookTitle": "Kniha návštěv", - "guestbookSubtitle": "Zprávy na zdi uživatele {username}", - "leaveMessage": "Zanechte zprávu", - "guestbookPlaceholder": "Napište něco do návštěvní knihy uživatele {username}…", - "post": "Příspěvek", - "loginToPost": "Chcete-li zanechat zprávu v knize návštěv, přihlaste se.", - "guestbookEmpty": "Zatím žádné záznamy v návštěvní knize.", - "unknownUser": "Uživatel #{id}", - "statDuckets": "Kachny", - "statDiamonds": "Diamanty", - "walletTitle": "Peněženka", - "friendsTitle": "Přátelé", - "friendsSubtitle": "Lidé v hotelu, se kterými se scházejí", - "friendsEmpty": "Žádní přátelé k zobrazení.", - "roomsTitle": "Pokoje", - "roomsSubtitle": "Pokoje, které vlastní", - "roomsEmpty": "Žádné místnosti k zobrazení.", - "roomUntitled": "Pokoj bez názvu", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Žebříčky", - "subtitle": "12 nejlepších hráčů seřazených podle kreditů", - "emptyState": "Zatím žádní hráči k hodnocení." - }, - "home": { - "welcome": "Vítejte v {hotelName}", - "welcomeSubtitle": "Váš retro hotel, nyní poháněný Next.js", - "welcomeBody": "Setkejte se, sbírejte nábytek a setkejte se s přáteli.", - "enterHotel": "Zadejte {hotelName}", - "onlineFriends": "Online přátelé", - "noFriendsOnline": "Žádní přátelé online", - "register": "ZAREGISTRUJTE SE HNED", - "joinNow": "Připojte se k {hotelName} ještě dnes!", - "recentUsers": "Nedávní uživatelé", - "recentPhotos": "Nedávné fotografie", - "latestNews": "Nejnovější zprávy", - "newsTitle": "Nejnovější zprávy", - "newsSubtitle": "Čerstvé z hotelu", - "allNews": "Všechny novinky →", - "allUsers": "Komunita →", - "noArticles": "Zatím žádné články.", - "noPhotos": "Zatím žádné fotky.", - "noUsers": "Žádní uživatelé online", - "latestArticle": "Nejnovější článek", - "latestUsers": "Nejnovější občané ({count} celkem)", - "statsOnline": "Online", - "statsCitizens": "Občané", - "statsRooms": "Pokoje", - "statsArticles": "Články", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Vytvoř si svůj jedinečný vzhled", - "featuresFurniture": "Nábytek", - "featuresFurnitureDesc": "Vyzdob si pokoje předměty", - "featuresCommunity": "Komunita", - "featuresCommunityDesc": "Najdi si přátele a chatuj", - "featuresGames": "Hry", - "featuresGamesDesc": "Soutěž a bav se" - }, - "news": { - "title": "Novinky", - "subtitle": "Nejnovější oznámení, události a aktualizace z hotelu", - "noArticles": "Zatím žádné články." - }, - "article": { - "backToNews": "← Novinky", - "reactionsTitle": "Reakce", - "reactionsSubtitle": "Řekněte nám, co si myslíte", - "reaction": { - "like": "Jako", - "love": "Láska", - "wow": "Páni" - }, - "removeReaction": "Kliknutím odeberete svou reakci", - "reactWith": "Reagovat pomocí {reaction}", - "noReactions": "Zatím žádné reakce.", - "logIn": "Přihlaste se", - "toReact": "reagovat.", - "commentsTitle": "Komentáře", - "commentsSubtitle": "Připojte se ke konverzaci", - "commentsCount": "zatím {count}", - "noComments": "Zatím žádné komentáře. Buďte první, kdo okomentuje.", - "userNumber": "Uživatel #{id}", - "addComment": "Přidejte komentář", - "commentPlaceholder": "Napište svůj komentář…", - "postComment": "Přidat komentář", - "toComment": "zanechat komentář.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Fotografie", - "subtitle": "Nejnovější snímky pořízené v hotelu", - "noPhotos": "Zatím žádné fotky.", - "photoAlt": "Fotka uživatele #{id}", - "byUser": "od uživatele #{id}" - }, - "badges": { - "title": "Odznaky", - "subtitle": "Odznaky, které můžete získat a chlubit se v hotelu", - "noBadges": "Zatím nejsou k dispozici žádné odznaky." - }, - "community": { - "title": "Společenství", - "subtitle": "Vše se děje kolem hotelu na jednom místě", - "open": "Otevřít →", - "links": { - "rankings": { - "title": "Žebříčky", - "text": "Podívejte se na nejbohatší hráče v hotelu seřazené podle kreditů." - }, - "staff": { - "title": "Zaměstnanci", - "text": "Seznamte se s týmem, který zajišťuje chod hotelu každý den." - }, - "news": { - "title": "Novinky", - "text": "Nejnovější oznámení, události a aktualizace." - }, - "photos": { - "title": "Fotografie", - "text": "Snímky sdílené komunitou z celého hotelu." - }, - "guilds": { - "title": "cechy", - "text": "Procházejte skupiny, které hráči vytvořili a ke kterým se připojili." - }, - "leaderboards": { - "title": "Žebříčky", - "text": "Kdo je v této sezóně na vrcholu ve statistikách hotelu." - } - } - }, - "guilds": { - "title": "cechy", - "subtitle": "Procházejte skupiny, které hráči vytvořili a ke kterým se připojili", - "empty": "Zatím žádné cechy.", - "unnamedGuild": "Nejmenovaný cech", - "noDescription": "Žádný popis" - }, - "guild": { - "allGuilds": "← Všechny cechy", - "unnamedGuild": "Nejmenovaný cech", - "noDescription": "Žádný popis", - "memberSingular": "člen", - "memberPlural": "členové", - "founded": "Založeno", - "forumLink": "Fórum →", - "discussion": "Diskuse", - "membersTitle": "členové", - "memberLowerSingular": "člen", - "memberLowerPlural": "členů", - "noMembers": "Žádní členové.", - "owner": "vlastník", - "noMotto": "Žádné motto" - }, - "guildForum": { - "backToGuild": "← Zpět do cechu", - "unnamedGuild": "Nejmenovaný cech", - "forumTitle": "{guild} — Fórum", - "threadSingular": "vlákno", - "threadPlural": "vlákna", - "newThread": "+ Nové vlákno", - "empty": "V tomto fóru zatím nejsou žádná vlákna.", - "colSubject": "Předmět", - "colAuthor": "Autor", - "colPosts": "Příspěvky", - "colDate": "Datum", - "noSubject": "(bez předmětu)", - "pinned": "Připnuto", - "locked": "Zamčeno", - "userNumber": "Uživatel #{id}", - "unknown": "Neznámý", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Zpět na fórum", - "unnamedGuild": "Nejmenovaný cech", - "title": "Nové vlákno", - "subtitle": "ve fóru {guild}", - "subjectLabel": "Předmět", - "subjectPlaceholder": "Předmět vlákna", - "messageLabel": "Zpráva", - "messagePlaceholder": "Napište svůj úvodní příspěvek…", - "postThread": "Odeslat vlákno", - "cancel": "Zrušit", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Obchod", - "subtitle": "Doplňte svůj účet a získejte exkluzivní balíčky, měnu a odznaky.", - "browsingCategory": "Procházení balíčků {category}.", - "all": "všechny", - "allPackages": "Všechny balíčky", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "Momentálně nejsou k dispozici žádné balíčky.", - "buy": "Koupit", - "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": "Doplňte přes PayPal", - "subtitle": "Plaťte bezpečně pomocí PayPal a vaše kredity se přičtou v okamžiku, kdy bude platba zúčtována.", - "cancelled": "Pokladna byla zrušena – platba nebyla přijata.", - "chooseAmount": "Vyberte částku", - "notConfiguredPre": "PayPal ještě není nakonfigurován. Musí nastavit správce", - "notConfiguredAnd": "a", - "notConfiguredOptional": "(a volitelně", - "notConfiguredPost": "pro sandbox vs. live).", - "balanceTitle": "Vaše bilance", - "signedInAs": "Jste přihlášeni jako {username}", - "credits": "Kredity", - "creditsPerUnit": "Kredity za 1,00 {currency}", - "rateLine": "Za 1,00 {currency} obdržíte kredity {amount}. Kredity se objeví ve hře při příštím přihlášení." - }, - "marketplace": { - "title": "Tržiště", - "subtitle": "Procházejte nábytek a vzácné předměty uvedené hráči. Výpisy se umisťují do hry a aktualizují se živě – zamiřte do hotelu a udělejte nabídku.", - "activeOffers": "Aktivní nabídky", - "sellers": "Prodejci", - "totalValue": "Celková hodnota", - "activeListings": "Aktivní výpisy", - "mostRecentFirst": "Naposledy uvedené jako první", - "empty": "Momentálně nejsou na trhu žádné aktivní nabídky. Vraťte se později.", - "colOffer": "Nabídka", - "colItem": "Položka", - "colSeller": "Prodejce", - "colPrice": "Cena", - "colListed": "Uvedeno", - "itemLabel": "Položka č. {id}", - "userLabel": "Uživatel #{id}", - "justNow": "právě teď", - "minutesAgo": "před {count}m", - "hoursAgo": "před {count}h", - "daysAgo": "před {count}d" - }, - "rares": { - "title": "Vzácné hodnoty", - "subtitle": "Získejte přehled o všech vzácných v hotelu, seskupených podle kategorií.", - "empty": "V současné době zde nemáme žádné vzácné.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Zobrazit vzácné →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Všechny vzácné", - "empty": "V této kategorii zatím nejsou uvedeny žádné vzácné.", - "colRare": "Vzácné", - "colCredits": "Kredity", - "colCurrency": "Měna", - "creditsValue": "{value} kreditů", - "duckets": "Kachny", - "diamonds": "Diamanty", - "credits": "Kredity" - }, - "redeem": { - "title": "Uplatněte voucher", - "subtitle": "Máte kód voucheru? Zadejte jej níže a přidejte odměnu na svůj účet.", - "enterCode": "Zadejte svůj kód", - "oncePerAccount": "Každý voucher lze na účet uplatnit pouze jednou.", - "balanceTitle": "Vaše bilance", - "signedInAs": "Jste přihlášeni jako {username}", - "credits": "Kredity", - "instantCredit": "Uplatněné odměny jsou připsány okamžitě a objeví se ve hře při příštím přihlášení." - }, - "help": { - "title": "Centrum nápovědy", - "subtitle": "Najděte průvodce, témata podpory a pravidla hotelu – vše, co potřebujete k získání pomoci.", - "myTickets": "Moje vstupenky →", - "topicsTitle": "Témata podpory", - "topicsSubtitle": "Procházejte průvodce a odpovědi na běžné otázky", - "topicsEmpty": "Zatím žádná témata nápovědy.", - "rulesTitle": "Pravidla hotelu", - "rulesSubtitle": "Před pobytem v hotelu si je přečtěte", - "rulesEmpty": "Dosud nebyla zveřejněna žádná pravidla.", - "categoryEmpty": "V této kategorii nejsou žádná pravidla." - }, - "helpCategory": { - "back": "← Centrum nápovědy", - "topicSubtitle": "Téma centra nápovědy", - "moreTitle": "Další témata nápovědy", - "moreSubtitle": "Přejít na jiné téma podpory" - }, - "helpTickets": { - "title": "Pomoc vstupenky", - "subtitle": "Odešlete lístek personálu a sledujte své otevřené požadavky.", - "statTotal": "Celkem vstupenek", - "statOpen": "Otevřít", - "statClosed": "Zavřeno", - "newTitle": "Nový lístek", - "newSubtitle": "Popište svůj problém a personál vás bude sledovat", - "subjectPlaceholder": "Předmět", - "contentPlaceholder": "Popište svůj problém…", - "submit": "Odeslat lístek", - "listTitle": "Vaše vstupenky", - "listSubtitle": "Každá žádost, kterou zašlete personálu", - "listEmpty": "Ještě nemáte žádné vstupenky.", - "colId": "ID", - "colSubject": "Předmět", - "colStatus": "Stav", - "colCreated": "Vytvořeno", - "statusOpen": "Otevřít", - "statusClosed": "Zavřeno", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Požádejte o zaměstnance {hotel}", - "subtitle": "Každou chvíli otevíráme aplikace pro zaměstnance. Pokud narazíte na pozici, o které máte pocit, že byste se na ni perfektně hodili, neváhejte se o ni přihlásit.", - "noPositionsTitle": "Žádné otevřené pozice", - "noPositionsBody": "Momentálně nejsou otevřené žádné pozice. Vraťte se prosím později a zkontrolujte, zda do té doby máme nějaká volná místa. děkujeme za váš zájem.", - "noDeadline": "Není stanovena žádná lhůta", - "deadline": "Uzávěrka přihlášek: {date}", - "alreadyApplied": "Již jste požádali o {rank}", - "aboutYou": "O vás", - "aboutPlaceholder": "Řekni nám, proč bys byl skvělý {rank}…", - "applyFor": "Zažádat o {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": "Přihlaste se do týmu {hotel}", - "subtitle": "Týmové aplikace otevíráme pravidelně. Pokud vidíte tým, který se vám hodí, neváhejte se přihlásit!", - "noPositionsTitle": "Nejsou otevřeny žádné týmové pozice", - "noPositionsBody": "V současné době nejsou žádné volné týmové pozice. Vraťte se prosím později a zkontrolujte nová místa. Děkuju!", - "pending": "Vaše přihláška čeká na vyřízení", - "aboutYou": "O vás", - "aboutPlaceholder": "Řekněte nám, proč byste se skvěle hodil pro {rank}…", - "applyFor": "Zažádat o {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": "Rádio", - "subtitle": "Nalaďte si hotelové rádio — živé DJ sety, žádosti a výkřiky.", - "nowPlaying": "Nyní se hraje", - "nothingPlaying": "Momentálně nic nehraje.", - "onAir": "Ve vysílání: {dj}", - "noDj": "Žádný DJ ve vysílání.", - "audioUnsupported": "Váš prohlížeč nepodporuje zvukový prvek.", - "streamOffline": "Stream je momentálně offline.", - "exploreTitle": "Prozkoumejte rádio", - "exploreSubtitle": "Plán, výkřiky, žádosti a další", - "linkSchedule": "Rozvrh", - "linkScheduleText": "Náš týdenní line-up DJs a show.", - "linkShouts": "Výkřiky", - "linkShoutsText": "Výkřiky a žádosti komunity.", - "linkRequests": "Žádosti", - "linkRequestsText": "Požádejte DJe, aby natočil vaši oblíbenou skladbu.", - "linkApply": "Přihlaste se jako DJ", - "linkApplyText": "Připojte se k týmu a vydejte se do éteru.", - "linkLeaderboard": "Žebříček", - "linkLeaderboardText": "Nejlepší posluchači seřazení podle získaných bodů.", - "todayTitle": "Dnešní rozvrh", - "todayTitleWithDay": "Dnešní rozvrh · {day}", - "todaySubtitle": "Co je dnes v éteru", - "fullWeek": "Celý týden →", - "noShowsToday": "Na dnešek nejsou naplánovány žádné pořady.", - "colTime": "Čas", - "colShow": "Zobrazit", - "colDj": "DJ", - "untitledShow": "Pořad bez názvu", - "userNumber": "Uživatel #{id}" - }, - "radioSchedule": { - "title": "Rozpis rádia", - "subtitle": "Náš týdenní line-up DJs a show", - "empty": "Zatím nejsou naplánována žádná představení.", - "colDay": "den", - "colTime": "Čas", - "colDj": "DJ", - "colShow": "Zobrazit", - "noShows": "Žádné pořady" - }, - "radioShouts": { - "title": "Rádiové výkřiky", - "subtitle": "Výkřiky a žádosti komunity", - "postTitle": "Zveřejněte výkřik", - "postSubtitle": "Pošlete zprávu DJovi do vysílání", - "messageLabel": "Vaše zpráva", - "messagePlaceholder": "Pošlete výkřik DJovi…", - "shoutButton": "Křičet", - "loginToPost": "Chcete-li zveřejnit výkřik, přihlaste se.", - "latestTitle": "Nejnovější výkřiky", - "latestSubtitle": "Nejnovější zprávy od posluchačů", - "empty": "Zatím žádné výkřiky. Buďte první!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Rádiové soutěže", - "subtitle": "Nalaďte se a zúčastněte se našich nejnovějších on-air soutěží", - "empty": "Zatím žádné soutěže.", - "contestLabel": "Soutěž č. {id}", - "dateUnknown": "Datum neznámé" - }, - "radioGiveaways": { - "title": "Rádio dárky", - "subtitle": "Poslouchejte svou šanci vyhrát v našich rádiových dárcích", - "empty": "Zatím žádné dárky.", - "giveawayLabel": "Dar č. {id}", - "dateUnknown": "Datum neznámé" - }, - "radioLeaderboard": { - "title": "Žebříček posluchačů rádia", - "subtitle": "50 nejlepších posluchačů podle bodů získaných naladěním rádia", - "empty": "Zatím žádné body posluchače k zobrazení.", - "colRank": "Hodnost", - "colAvatar": "Avatar", - "colListener": "Posluchač", - "colPoints": "Body" - }, - "radioRequests": { - "formTitle": "Odeslat žádost", - "formSubtitle": "Požádejte DJe, aby přehrál vaši oblíbenou skladbu", - "songLabel": "Píseň", - "songPlaceholder": "Název písně", - "artistLabel": "Umělec", - "artistPlaceholder": "Jméno umělce (nepovinné)", - "submitButton": "Odeslat žádost", - "loginToRequest": "Chcete-li odeslat žádost, přihlaste se.", - "latestTitle": "Nedávné žádosti", - "latestSubtitle": "Nejnovější požadované skladby", - "empty": "Zatím žádné žádosti.", - "colSong": "Píseň", - "colArtist": "Umělec", - "colRequester": "Žadatel", - "colDate": "Datum", - "colStatus": "Stav", - "statusPending": "Čeká na vyřízení", - "statusApproved": "Schváleno", - "statusPlayed": "Hráno", - "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": "Přihlaste se jako DJ rádia", - "subtitle": "Řekněte nám o sobě a o tom, proč byste se skvěle hodil do éteru", - "latestTitle": "Vaše nejnovější aplikace", - "statusLabel": "Stav:", - "submittedOn": "· odesláno {date}", - "submitAgain": "Pokud se vaše údaje změnily, můžete níže odeslat znovu.", - "formTitle": "Formulář žádosti", - "formSubtitle": "Všechna pole označená jako povinná musí být vyplněna", - "realNameLabel": "Skutečné jméno", - "realNamePlaceholder": "Vaše celé jméno", - "ageLabel": "Věk", - "availabilityLabel": "Dostupnost", - "availabilityPlaceholder": "Které dny a časy můžete vysílat?", - "musicStyleLabel": "Hudební styl", - "musicStylePlaceholder": "např. House, Pop, Hip-Hop", - "experienceLabel": "Zkušenosti", - "optional": "(volitelné)", - "experiencePlaceholder": "Máte nějaké předchozí zkušenosti s DJ nebo hostováním?", - "motivationLabel": "Motivace", - "motivationPlaceholder": "Proč se chcete připojit k týmu rádia?", - "submitButton": "Odešlete přihlášku", - "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": "Nastavení účtu", - "accountSettingsSubtitle": "Spravujte svůj profil, zabezpečení a propojené účty", - "publicProfile": "Váš veřejný profil", - "noMotto": "Žádné motto", - "noEmail": "Žádný e-mail v souboru", - "changeMotto": "Změnit motto", - "changeMottoSubtitle": "Aktualizuje se okamžitě ve hře, pokud jste online", - "mottoPlaceholder": "Vaše motto", - "saveMotto": "Uložit motto", - "securityTitle": "Bezpečnost", - "securitySubtitle": "Dvoufaktorová autentizace", - "securityDescription": "Přidejte do svého účtu druhou vrstvu ochrany.", - "twoFactorLink": "Dvoufaktorová autentizace" - }, - "settings2fa": { - "backToSettings": "← Nastavení", - "title": "Dvoufaktorová autentizace", - "subtitle": "Přidejte druhou vrstvu zabezpečení pomocí ověřovací aplikace", - "nowEnabled": "2FA je nyní povolena. 🔒", - "disabledNotice": "2FA byla deaktivována.", - "badCode": "Tento kód nebyl platný – zkuste to znovu.", - "noAppKeyPrefix": "2FA není k dispozici do", - "noAppKeyMiddle": "je nakonfigurován (stejný Laravel", - "noAppKeySuffix": "jak si nainstalujete AtomCMS, takže existující tajné informace zůstanou čitelné).", - "isEnabled": "2FA je povoleno", - "onYourAccount": "na vašem účtu.", - "disable": "Zakázat 2FA", - "scanOrEnter": "Naskenujte nebo zadejte tento klíč", - "scanInstructions": "Přidejte to do aplikace Google Authenticator / Authy a potvrďte zadáním 6místného kódu.", - "manualKey": "Manuální klíč:", - "codePlaceholder": "6místný kód", - "confirm": "Potvrďte", - "enableIntro": "Přidejte druhou vrstvu zabezpečení pomocí ověřovací aplikace.", - "enable": "Povolit 2FA" - }, - "title": "Propojené účty", - "subtitle": "Propojte sociální účet, abyste se mohli přihlásit jedním kliknutím", - "connected": "Připojeno", - "unavailable": "Není k dispozici", - "login": { - "title": "Přihlaste se", - "subtitle": "Vítejte zpět – přihlaste se pro vstup do hotelu.", - "subtitle2fa": "Zadejte 6místný kód z vašeho autentizátoru.", - "usernamePlaceholder": "Uživatelské jméno", - "passwordPlaceholder": "Heslo", - "codePlaceholder": "2FA kód", - "pleaseWait": "Čekejte prosím…", - "verify": "Ověřte", - "signIn": "Přihlaste se", - "or": "nebo", - "noAccount": "Žádný účet?", - "createOne": "Vytvořte jeden", - "forgotPassword": "Zapomněli jste heslo?", - "errorInvalidCredentials": "Neplatné uživatelské jméno nebo heslo", - "errorInvalid2fa": "Neplatný kód 2FA", - "welcomeBack": "Vítej zpět", - "welcomeBackSub": "Přihlas se pro pokračování do {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Vytvořit účet", - "subtitle": "Připojte se k hotelu – trvá to jen chvíli.", - "username": "Uživatelské jméno", - "email": "Email", - "password": "Heslo", - "confirmPassword": "Opakujte heslo", - "usernamePlaceholder": "Uživatelské jméno", - "emailPlaceholder": "Email", - "passwordPlaceholder": "Heslo (min. 6 znaků)", - "confirmPasswordPlaceholder": "Opakujte heslo", - "selectOutfit": "Vyberte si oblečení", - "termsAccept": "Je mi 18+ a souhlasím s podmínkami a pravidly {hotel}.", - "createAccount": "Vytvořit účet", - "creatingAccount": "Vytváření účtu...", - "redirecting": "Přesměrovávám na váš účet...", - "alreadyHaveAccount": "Už máte účet? Přihlášení!", - "register": "Zaregistrujte se", - "termsError": "Chcete-li se zaregistrovat, musíte přijmout podmínky a pravidla.", - "usernameError": "Uživatelské jméno je povinné.", - "emailError": "Je vyžadován platný e-mail.", - "passwordError": "Heslo musí mít alespoň 6 znaků.", - "confirmPasswordError": "Hesla se neshodují.", - "termsRequired": "Musíte přijmout podmínky a pravidla.", - "usernameRequired": "Uživatelské jméno je povinné.", - "emailRequired": "E-mail je povinný.", - "passwordRequired": "Je vyžadováno heslo.", - "passwordsDontMatch": "Hesla se neshodují.", - "alreadyHaveAccountPre": "Už máš účet?", - "alreadyHaveAccountLink": "Přihlásit se", - "whoIsOnline": "Kdo je online", - "usersOnline": "{count} online" - }, - "forgot": { - "title": "Obnovit heslo", - "subtitle": "Zašleme vám e-mailem zabezpečený odkaz pro nastavení nového hesla.", - "sentNotice": "Pokud je tento e-mail zaregistrován, byl odeslán odkaz pro obnovení. Zkontrolujte si doručenou poštu.", - "emailPlaceholder": "Váš email", - "sendResetLink": "Odeslat odkaz na reset", - "backToLogin": "Zpět k přihlášení", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Nastavte nové heslo", - "subtitle": "Vyberte si silné heslo, které jinde nepoužíváte.", - "passwordPlaceholder": "Nové heslo (min. 6 znaků)", - "resetPassword": "Obnovit heslo", - "backToLogin": "Zpět k přihlášení" - }, - "verify": { - "verifiedTitle": "Vše je připraveno", - "verifiedSubtitle": "E-mail ověřen", - "verifiedBody": "Vaše e-mailová adresa byla ověřena. Nyní se můžete přihlásit a hrát.", - "goToLogin": "Přejít na přihlášení", - "alreadyTitle": "Již ověřeno", - "alreadySubtitle": "Nezbývá nic dělat", - "alreadyBody": "Tato e-mailová adresa již byla potvrzena.", - "unavailableTitle": "Zkuste to za chvíli znovu", - "unavailableSubtitle": "Server nedostupný", - "unavailableBody": "Nepodařilo se nám spojit se serverem a ověřit váš e-mail. Zkuste odkaz za chvíli znovu.", - "invalidTitle": "Ověření e-mailem", - "invalidSubtitle": "Neplatný odkaz nebo odkaz, jehož platnost vypršela", - "invalidBody": "Tento ověřovací odkaz není platný. Ujistěte se, že jste otevřeli celý odkaz ze svého e-mailu, nebo požádejte o nový.", - "backToLogin": "Zpět k přihlášení" - }, - "banned": { - "title": "Máte zákaz", - "subtitle": "Účet pozastaven", - "body": "Váš účet byl v hotelu pozastaven.", - "reasonLabel": "důvod:", - "permanent": "Tento zákaz je trvalý.", - "expires": "Platnost vyprší {date}.", - "contactStaff": "Pokud se domníváte, že jde o omyl, kontaktujte tým zaměstnanců." - }, - "maintenance": { - "title": "{hotel} je v údržbě", - "subtitle": "Brzy se vrátíme", - "staffCanLogIn": "Zaměstnanci se stále mohou přihlásit." - }, - "admin": { - "nav": { - "overview": "Přehled", - "dashboard": "Dashboard", - "content": "Obsah", - "articles": "články", - "tags": "Tagy", - "navigator": "Navigátor", - "helpCenter": "Centrum nápovědy", - "advertisements": "Reklamy", - "writeableBoxes": "Popsatelné krabice", - "photos": "Fotografie", - "tickets": "Vstupenky", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Uživatelé a přístup", - "users": "Uživatelé", - "bans": "Zákazy", - "ipManagement": "Správa IP", - "vpn": "VPN", - "applications": "Aplikace", - "teams": "Týmy", - "permissions": "Oprávnění", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Ekonomika", - "catalog": "Katalog", - "shop": "Obchod", - "transactions": "Transakce", - "vouchers": "Poukazy", - "subscriptions": "Předplatné", - "rareValues": "Vzácné hodnoty", - "badges": "Odznaky", - "achievements": "Úspěchy", - "calendar": "Kalendář", - "radio": "Rádio", - "radioHistory": "Historie rádia", - "radioBanners": "Bannery", - "radioEmbed": "Vložit", - "radioApiKeys": "API klíče", - "radioModeration": "Moderování", - "radioSettings": "Nastavení", - "radioMonitoring": "Sledování", - "radioPoints": "Body", - "radioRanks": "Hodnosti", - "radioAutodj": "Auto DJ", - "system": "Systém", - "commandocentrum": "Komandocentrum", - "emulator": "Emulátor", - "alerts": "Upozornění", - "logs": "Protokoly", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Filtr slov", - "maintenance": "Údržba", - "rooms": "Pokoje", - "emailTemplates": "Šablony e-mailů", - "theme": "téma", - "media": "Média", - "favicon": "Favicon", - "sounds": "Zvuky", - "translations": "Překlady", - "import": "Importovat", - "settings": "Nastavení", - "backToSite": "Zpět na stránku", - "housekeeping": "Úklid", - "hotelManagementPanel": "Panel správy hotelu", - "rankLabel": "Hodnost {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Dashboard", - "subtitle": "Přehled hotelu a aktuální stav", - "playersOnline": "Hráči online", - "articles": "články", - "activeBans": "Aktivní zákazy", - "database": "databáze", - "databaseConnected": "Připojeno", - "databaseDown": "Dolů", - "usersByRank": "Uživatelé podle hodnosti", - "noAccountsToBreakDown": "Zatím žádné účty k rozdělení", - "rankLabel": "Hodnost {rank}", - "rankWithCount": "Hodnost {rank}: {count} účtů", - "recentStaffActivity": "Nedávná činnost zaměstnanců", - "viewAll": "Zobrazit vše", - "noStaffActivityLogged": "Dosud nebyla zaznamenána žádná aktivita zaměstnanců" - }, - "articles": { - "title": "články", - "subtitle": "Zpravodajské články — 50 nejnovějších", - "newArticle": "+ Nový článek", - "edit": "Upravit", - "delete": "Smazat", - "noArticles": "Zatím žádné články", - "confirmDelete": "Opravdu chcete smazat „{title}“?", - "colTitle": "Název", - "colSlug": "Slimák", - "colAuthor": "Autor", - "colCreated": "Vytvořeno", - "colActions": "Akce", - "form": { - "title": "Název", - "titlePlaceholder": "Název článku", - "slug": "Slimák", - "slugPlaceholder": "article-url-slug", - "category": "Kategorie", - "categoryPlaceholder": "Vyberte kategorii", - "body": "Tělo", - "bodyPlaceholder": "Napište obsah článku…", - "image": "Obrázek", - "imagePlaceholder": "https://example.com/obrazek.png", - "thumbnail": "Náhled", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Publikováno", - "featured": "Nejlepší", - "save": "Uložit článek", - "saving": "Ukládání…", - "deleteArticle": "Smazat článek", - "deleteConfirm": "Tuto akci nelze vrátit zpět. Článek bude trvale odstraněn.", - "cancel": "Zrušit", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Tagy", - "subtitle": "Štítky / kategorie článků", - "addTag": "Přidat značku", - "name": "Jméno", - "namePlaceholder": "Název značky", - "backgroundColour": "Barva pozadí", - "createTag": "Vytvořte značku", - "editTag": "Upravit značku", - "updateTag": "Aktualizovat značku", - "deleteTag": "Smazat značku", - "confirmDelete": "Smazat „{name}“?", - "noTags": "Zatím žádné značky", - "colId": "ID", - "colTag": "Tag", - "colColour": "Barva", - "colUsedBy": "Použito uživatelem", - "colCreated": "Vytvořeno", - "colActions": "Akce" - }, - "navigation": { - "title": "Navigátor", - "flatCategories": "Byt kategorie", - "publicRooms": "Veřejné místnosti", - "addCategory": "Přidat kategorii", - "editCategory": "Upravit kategorii", - "deleteCategory": "Smazat kategorii", - "categoryName": "Název kategorie", - "categoryNamePlaceholder": "např. Chill & Chat", - "categoryOrder": "Objednat", - "roomName": "Název místnosti", - "roomNamePlaceholder": "např. Vítejte salonek", - "roomId": "ID pokoje", - "roomIdPlaceholder": "Číselné ID místnosti", - "save": "Uložit", - "cancel": "Zrušit", - "noCategories": "Zatím žádné kategorie", - "noPublicRooms": "Zatím žádné veřejné místnosti", - "colId": "ID", - "colName": "Jméno", - "colOrder": "Objednat", - "colRooms": "Pokoje", - "colActions": "Akce" - }, - "helpCenter": { - "title": "Centrum nápovědy", - "subtitle": "Podpora záznamů a správa FAQ", - "entries": "Příspěvky", - "newEntry": "+ Nový záznam", - "edit": "Upravit", - "delete": "Smazat", - "noEntries": "Zatím žádné záznamy", - "confirmDelete": "Smazat „{title}“?", - "colId": "ID", - "colTitle": "Název", - "colCategory": "Kategorie", - "colCreated": "Vytvořeno", - "colActions": "Akce", - "form": { - "title": "Název", - "titlePlaceholder": "Název příspěvku", - "category": "Kategorie", - "categoryPlaceholder": "Vyberte kategorii", - "body": "Tělo", - "bodyPlaceholder": "Napište odpověď…", - "save": "Uložit záznam", - "saving": "Ukládání…", - "deleteEntry": "Smazat záznam", - "cancel": "Zrušit" - } - }, - "ads": { - "title": "Reklamy", - "subtitle": "Správa hotelových reklam a propagačních bannerů", - "newAd": "+ Nová reklama", - "edit": "Upravit", - "delete": "Smazat", - "noAds": "Zatím žádné reklamy", - "confirmDelete": "Smazat tuto reklamu?", - "colId": "ID", - "colName": "Jméno", - "colImage": "Obrázek", - "colUrl": "URL", - "colViews": "Pohledy", - "colStatus": "Stav", - "colCreated": "Vytvořeno", - "colActions": "Akce", - "form": { - "name": "Jméno", - "namePlaceholder": "Název reklamy", - "image": "Adresa URL obrázku", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Cílová adresa URL", - "urlPlaceholder": "https://example.com", - "enabled": "Povoleno", - "save": "Uložit reklamu", - "saving": "Ukládání…", - "deleteAd": "Smazat inzerát", - "cancel": "Zrušit" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Zapisovatelné krabičky", - "subtitle": "Panely obsahu zobrazené v hotelu a CMS", - "newBox": "Nová krabice", - "edit": "Upravit", - "delete": "Smazat", - "noBoxes": "Zatím žádné zapisovatelné boxy", - "confirmDelete": "Smazat toto pole?", - "colId": "ID", - "colName": "Jméno", - "colLocation": "Umístění", - "colUpdated": "Aktualizováno", - "colActions": "Akce", - "form": { - "name": "Jméno", - "namePlaceholder": "Název krabice", - "location": "Umístění", - "locationPlaceholder": "např. domovská stránka, postranní panel", - "content": "Obsah", - "contentPlaceholder": "Napište obsah krabice…", - "enabled": "Povoleno", - "save": "Uložit pole", - "saving": "Ukládání…", - "deleteBox": "Smazat pole", - "cancel": "Zrušit" - } - }, - "photos": { - "title": "Moderování fotografií", - "subtitle": "Nedávné fotografie z fotoaparátu ve hře", - "delete": "Smazat", - "approve": "Schválit", - "noPhotos": "Žádné fotky k moderování", - "confirmDelete": "Smazat tuto fotku trvale?", - "colId": "ID", - "colPreview": "Náhled", - "colUser": "Uživatel", - "colRoom": "Místnost", - "colTimestamp": "Časové razítko", - "colActions": "Akce", - "photoAlt": "Uživatelská fotka č. {id}", - "byUser": "od {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Uživatelé", - "subtitle": "Procházejte, prohledávejte a spravujte hotelové účty", - "search": "Hledat", - "searchPlaceholder": "Vyhledávání podle uživatelského jména, e-mailu nebo ID…", - "searchResults": "{count, plural, one {# result} other {# results}} for \"{query}\"", - "noResults": "Nebyli nalezeni žádní uživatelé", - "colId": "ID", - "colUsername": "Uživatelské jméno", - "colEmail": "Email", - "colRank": "Hodnost", - "colOnline": "Online", - "colRegistered": "Registrováno", - "colLastOnline": "Naposledy online", - "colActions": "Akce", - "yes": "Ano", - "no": "Ne", - "edit": "Upravit", - "setRank": "Nastavit hodnost", - "disconnect": "Odpojit", - "alert": "Upozornění", - "ban": "Zákaz", - "detail": { - "title": "Uživatel: {username}", - "subtitle": "Podrobnosti o účtu a správa", - "overview": "Přehled", - "actions": "Akce", - "username": "Uživatelské jméno", - "email": "Email", - "motto": "Motto", - "rank": "Hodnost", - "credits": "Kredity", - "duckets": "Kachny", - "diamonds": "Diamanty", - "online": "Online", - "registered": "Registrováno", - "lastOnline": "Naposledy online", - "ipAddress": "IP adresa", - "machineId": "ID stroje", - "sendAlert": "Odeslat upozornění", - "sendMessage": "Odeslat zprávu", - "disconnectUser": "Odpojit uživatele", - "banUser": "Zakázat uživatele", - "resetPassword": "Obnovit heslo", - "deleteUser": "Smazat uživatele", - "confirmDelete": "Opravdu chcete smazat uživatele {username}? Toto nelze vrátit zpět.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Upravit uživatele: {username}", - "subtitle": "Upravte podrobnosti účtu", - "username": "Uživatelské jméno", - "usernamePlaceholder": "Uživatelské jméno", - "email": "Email", - "emailPlaceholder": "uživatel@example.com", - "motto": "Motto", - "mottoPlaceholder": "Uživatelské motto", - "rank": "Hodnost", - "credits": "Kredity", - "duckets": "Kachny", - "diamonds": "Diamanty", - "save": "Uložte změny", - "saving": "Ukládání…", - "cancel": "Zrušit" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Zákazy", - "subtitle": "Správa zákazů účtů, IP a strojů", - "newBan": "Nový zákaz", - "edit": "Upravit", - "delete": "Smazat", - "noBans": "Zatím žádné zákazy", - "confirmDelete": "Odstranit tento zákaz?", - "colId": "ID", - "colValue": "Hodnota", - "colType": "Typ", - "colReason": "Důvod", - "colBannedBy": "Zakázáno uživatelem", - "colExpires": "Platnost vyprší", - "colCreated": "Vytvořeno", - "colActions": "Akce", - "form": { - "value": "Hodnota", - "valuePlaceholder": "Uživatelské jméno, IP nebo ID stroje", - "type": "Typ", - "typeUser": "Uživatel", - "typeIp": "IP", - "typeMachine": "Stroj", - "reason": "Důvod", - "reasonPlaceholder": "Důvod zákazu", - "expiresAt": "Platnost vyprší v", - "permanent": "Trvalé", - "save": "Uložit zákaz", - "saving": "Ukládání…", - "cancel": "Zrušit" - } - }, - "ip": { - "title": "Správa IP", - "subtitle": "Spravujte seznam povolených a zakázaných IP adres", - "whitelist": "Seznam povolených", - "blacklist": "Černá listina", - "addIp": "Přidat IP", - "ipAddress": "IP adresa", - "ipAddressPlaceholder": "např. 127.0.0.1", - "reason": "Důvod", - "reasonPlaceholder": "Důvod zařazení", - "add": "Přidat", - "remove": "Odebrat", - "confirmRemove": "Odebrat tuto IP adresu ze {list}?", - "noWhitelistedIps": "Žádné adresy IP na seznamu povolených", - "noBlacklistedIps": "Žádné IP adresy na černé listině", - "colIp": "IP", - "colReason": "Důvod", - "colAdded": "Přidáno", - "colActions": "Akce" - }, - "vpn": { - "title": "VPN / detekce proxy", - "subtitle": "Nakonfigurujte nastavení detekce VPN a proxy", - "enabled": "Povoleno", - "apiKey": "API klíč", - "apiKeyPlaceholder": "Váš klíč API pro detekci VPN", - "apiKeyHint": "Pro deaktivaci ponechejte prázdné", - "blockOnDetect": "Blokovat při detekci", - "blockOnDetectHint": "Automaticky blokovat uživatele zjištěné za VPN nebo proxy", - "save": "Uložte nastavení", - "saving": "Ukládání…", - "settingsSaved": "Nastavení VPN byla úspěšně uložena" - }, - "applications": { - "title": "Aplikace pro zaměstnance", - "subtitle": "Nevyřízené a zkontrolované žádosti zaměstnanců", - "pending": "Čeká na vyřízení", - "approved": "Schváleno", - "rejected": "Odmítnuto", - "noApplications": "Zatím žádné aplikace", - "colId": "ID", - "colApplicant": "Žadatel", - "colPosition": "Pozice", - "colStatus": "Stav", - "colSubmitted": "Odesláno", - "colActions": "Akce", - "review": "Recenze", - "approve": "Schválit", - "reject": "Odmítnout", - "confirmApprove": "Schválit uživatele {username} na pozici {position}?", - "confirmReject": "Odmítnout žádost uživatele {username} o pozici {position}?", - "detail": { - "title": "Přihláška od uživatele {username}", - "subtitle": "Pro {position}", - "about": "O žadateli", - "message": "Zpráva aplikace", - "status": "Stav", - "submitted": "Odesláno", - "noMessage": "Nebyla poskytnuta žádná zpráva" - } - }, - "teams": { - "title": "Týmy", - "subtitle": "Definujte názvy a popisy hodností zaměstnanců", - "addRank": "Přidat hodnost", - "editRank": "Upravit hodnost", - "deleteRank": "Smazat hodnost", - "noTeams": "Zatím žádné definice pořadí", - "confirmDelete": "Smazat definici hodnosti {id}?", - "colId": "ID", - "colRank": "Hodnost", - "colName": "Jméno", - "colBadge": "Odznak", - "colColour": "Barva", - "colActions": "Akce", - "form": { - "rankId": "ID hodnosti", - "rankIdPlaceholder": "Číselné ID hodnosti", - "name": "Jméno", - "namePlaceholder": "např. Správce", - "badge": "Kód odznaku", - "badgePlaceholder": "např. ADM001", - "colour": "Barva", - "colourPlaceholder": "např. #ff0000", - "save": "Uložit definici týmu", - "saving": "Ukládání…", - "cancel": "Zrušit" - } - }, - "permissions": { - "title": "Oprávnění", - "subtitle": "Správa oprávnění na základě hodnocení pro panel správce", - "addPermission": "Přidat oprávnění", - "editPermission": "Oprávnění k úpravám", - "deletePermission": "Smazat oprávnění", - "noPermissions": "Zatím nejsou nakonfigurována žádná oprávnění", - "confirmDelete": "Smazat toto oprávnění?", - "colId": "ID", - "colRank": "Hodnost", - "colPermission": "Povolení", - "colCreated": "Vytvořeno", - "colActions": "Akce", - "form": { - "rankId": "ID hodnosti", - "rankIdPlaceholder": "Vyžaduje se minimální hodnost", - "permission": "Povolovací klíč", - "permissionPlaceholder": "např. admin.články.spravovat", - "save": "Uložit oprávnění", - "saving": "Ukládání…", - "cancel": "Zrušit" - } - }, - "catalog": { - "title": "Katalog", - "subtitle": "Procházejte a spravujte katalogové stránky a položky", - "pages": "Stránky", - "items": "Položky", - "addPage": "Přidat stránku", - "editPage": "Upravit stránku", - "deletePage": "Smazat stránku", - "addItem": "Přidat položku", - "editItem": "Upravit položku", - "deleteItem": "Smazat položku", - "noPages": "Zatím žádné stránky katalogu", - "noItems": "Na této stránce nejsou žádné položky", - "confirmDeletePage": "Smazat stránku katalogu \"{name}\"?", - "confirmDeleteItem": "Smazat tuto položku?", - "colId": "ID", - "colName": "Jméno", - "colIcon": "ikona", - "colOrder": "Objednat", - "colItems": "Položky", - "colEnabled": "Povoleno", - "colActions": "Akce", - "colItemId": "ID položky", - "colItemName": "Název položky", - "colCostCredits": "Cena (kredity)", - "colCostPoints": "Cena (body)", - "colLimited": "Omezené", - "pageForm": { - "name": "Jméno", - "namePlaceholder": "Název stránky", - "icon": "ID ikony", - "iconPlaceholder": "Číselné ID ikony", - "order": "Objednat", - "enabled": "Povoleno", - "parent": "Nadřazená stránka", - "parentNone": "Žádný (kořen)", - "save": "Uložit stránku", - "saving": "Ukládání…", - "cancel": "Zrušit" - }, - "itemForm": { - "itemId": "ID položky", - "itemName": "Název položky", - "costCredits": "Cena v kreditech", - "costDuckets": "Cena v penízkách", - "costDiamonds": "Cena v diamantech", - "limitedStack": "Omezená velikost zásobníku", - "limitedSold": "Prodáno omezeně", - "save": "Uložit položku", - "saving": "Ukládání…", - "cancel": "Zrušit" - }, - "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." - } - }, - "shop": { - "title": "Obchod", - "subtitle": "Spravujte balíčky a objednávky", - "packages": "Balíčky", - "orders": "Objednávky", - "newPackage": "+ Nové balení", - "edit": "Upravit", - "delete": "Smazat", - "viewOrder": "Zobrazit", - "noPackages": "Zatím žádné obchodní balíčky", - "noOrders": "Zatím žádné objednávky", - "confirmDelete": "Smazat tento balíček?", - "colId": "ID", - "colName": "Jméno", - "colPrice": "Cena", - "colCurrency": "Měna", - "colType": "Typ", - "colSold": "Prodáno", - "colEnabled": "Povoleno", - "colActions": "Akce", - "colOrderId": "ID objednávky", - "colCustomer": "Zákazník", - "colPackage": "Balíček", - "colAmount": "Částka", - "colStatus": "Stav", - "colDate": "Datum", - "statusPending": "Čeká na vyřízení", - "statusCompleted": "Dokončeno", - "statusRefunded": "Vráceno", - "form": { - "name": "Jméno", - "namePlaceholder": "Název balíčku", - "description": "Popis", - "descriptionPlaceholder": "Popis balíčku", - "price": "Cena", - "currency": "Měna", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Typ", - "typeCredits": "Kredity", - "typeDuckets": "Kachny", - "typeDiamonds": "Diamanty", - "typeBadge": "Odznak", - "typeFurni": "Nábytek", - "typeRank": "Hodnost", - "amount": "Částka", - "badgeCode": "Kód odznaku", - "badgeCodePlaceholder": "např. VIP001", - "rankId": "ID hodnosti", - "furniItems": "Nábytkové předměty", - "enabled": "Povoleno", - "save": "Uložit balíček", - "saving": "Ukládání…", - "cancel": "Zrušit" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Transakce", - "subtitle": "Protokol plateb přes PayPal", - "noTransactions": "Zatím žádné transakce", - "colId": "ID", - "colUser": "Uživatel", - "colAmount": "Částka", - "colCurrency": "Měna", - "colPackage": "Balíček", - "colStatus": "Stav", - "colDate": "Datum", - "colActions": "Akce", - "statusCompleted": "Dokončeno", - "statusPending": "Čeká na vyřízení", - "statusFailed": "Nepodařilo se", - "statusRefunded": "Vráceno", - "detail": { - "title": "transakce č. {id}", - "paypalId": "PayPal ID", - "payerEmail": "E-mail plátce", - "grossAmount": "Hrubá částka", - "fee": "Poplatek", - "netAmount": "Čistá částka" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Nakupujte poukázky", - "subtitle": "Spravujte uplatnitelné kódy voucherů", - "newVoucher": "+ Nový voucher", - "edit": "Upravit", - "delete": "Smazat", - "noVouchers": "Zatím žádné vouchery", - "confirmDelete": "Smazat voucher „{code}“?", - "colId": "ID", - "colCode": "kód", - "colValue": "Hodnota", - "colType": "Typ", - "colUses": "Použití / Max", - "colExpires": "Platnost vyprší", - "colCreated": "Vytvořeno", - "colActions": "Akce", - "form": { - "code": "kód", - "codePlaceholder": "např. LÉTO 2025", - "value": "Hodnota", - "type": "Typ", - "typeCredits": "Kredity", - "typeDuckets": "Kachny", - "typeDiamonds": "Diamanty", - "typeBadge": "Odznak", - "typeFurni": "Nábytek", - "typeRank": "Hodnost", - "badgeCode": "Kód odznaku", - "badgeCodePlaceholder": "např. VIP001", - "rankId": "ID hodnosti", - "maxUses": "Max používá", - "maxUsesPlaceholder": "0 = neomezeně", - "expiresAt": "Platnost vyprší v", - "enabled": "Povoleno", - "save": "Uložit voucher", - "saving": "Ukládání…", - "cancel": "Zrušit", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Předplatné", - "subtitle": "Aktivní opakované odběry", - "noSubscriptions": "Žádné aktivní odběry", - "cancel": "Zrušit", - "confirmCancel": "Zrušit předplatné pro uživatele {username}?", - "colId": "ID", - "colUser": "Uživatel", - "colPackage": "Balíček", - "colAmount": "Částka", - "colInterval": "Interval", - "colStarted": "Zahájeno", - "colNextBilling": "Další vyúčtování", - "colStatus": "Stav", - "colActions": "Akce", - "statusActive": "Aktivní", - "statusCancelled": "Zrušeno", - "statusExpired": "Platnost vypršela" - }, - "rareValues": { - "title": "Vzácné hodnoty", - "subtitle": "Správa vzácných hodnotových kategorií a cen položek", - "categories": "Kategorie", - "items": "Položky", - "addCategory": "Přidat kategorii", - "editCategory": "Upravit kategorii", - "deleteCategory": "Smazat kategorii", - "noCategories": "Zatím žádné vzácné hodnotové kategorie", - "confirmDeleteCategory": "Smazat kategorii „{name}“ a všechny její položky?", - "colId": "ID", - "colName": "Jméno", - "colItems": "Položky", - "colUpdated": "Aktualizováno", - "colActions": "Akce", - "colItemName": "Název položky", - "colCredits": "Kredity", - "colPoints": "Body", - "colPointType": "Typ bodu", - "categoryForm": { - "name": "Jméno", - "namePlaceholder": "Název kategorie", - "save": "Uložit kategorii", - "saving": "Ukládání…", - "cancel": "Zrušit" - }, - "itemForm": { - "itemName": "Název položky", - "itemNamePlaceholder": "např. trůn", - "credits": "Hodnota kreditů", - "points": "Hodnota bodů", - "pointType": "Typ bodu", - "pointTypeDuckets": "Kachny", - "pointTypeDiamonds": "Diamanty", - "save": "Uložit položku", - "saving": "Ukládání…", - "cancel": "Zrušit" - } - }, - "badges": { - "title": "Odznaky", - "subtitle": "Nahrávejte, dávejte a spravujte katalog odznaků", - "upload": "Nahrát", - "giveBadge": "Dejte odznak", - "catalogue": "Katalog", - "uploadTitle": "Nahrajte nový odznak", - "uploadSubtitle": "Nahrajte soubor obrázku odznaku", - "badgeCode": "Kód odznaku", - "badgeCodePlaceholder": "např. VIP001", - "badgeFile": "Soubor odznaku", - "badgeFileHint": "PNG nebo GIF, doporučeno 40x40", - "uploadButton": "Nahrát", - "uploading": "Nahrávání…", - "giveTitle": "Dejte uživateli odznak", - "giveSubtitle": "Udělte odznak konkrétnímu uživateli", - "username": "Uživatelské jméno", - "usernamePlaceholder": "Cílové uživatelské jméno", - "giveButton": "Dejte odznak", - "giving": "Dávat…", - "catalogueTitle": "Katalog odznaků", - "catalogueSubtitle": "Všechny dostupné odznaky v hotelu", - "noBadges": "V katalogu nejsou žádné odznaky", - "search": "Hledat odznaky", - "searchPlaceholder": "Hledat podle kódu nebo názvu…", - "colCode": "kód", - "colImage": "Obrázek", - "colName": "Jméno", - "colDescription": "Popis", - "colActions": "Akce" - }, - "achievements": { - "title": "Úspěchy", - "subtitle": "Seznam herních úspěchů pouze pro čtení", - "noAchievements": "Nejsou nakonfigurovány žádné úspěchy", - "colId": "ID", - "colName": "Jméno", - "colCategory": "Kategorie", - "colLevels": "úrovně", - "colReward": "Odměna", - "colProgress": "Pokrok", - "levelLabel": "Úroveň {level}", - "rewardCredits": "{count} kreditů", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Kalendářní kampaně", - "subtitle": "Seznam kampaní a událostí kalendáře pouze pro čtení", - "noCampaigns": "Zatím žádné kampaně v kalendáři", - "colId": "ID", - "colName": "Jméno", - "colStart": "Začněte", - "colEnd": "Konec", - "colType": "Typ", - "colReward": "Odměna", - "colActions": "Akce", - "detail": { - "title": "Kampaň: {name}", - "subtitle": "Podrobnosti události kalendáře", - "days": "Dny", - "dayLabel": "den {day}", - "reward": "Odměna", - "noDays": "Pro tuto kampaň nejsou nakonfigurovány žádné dny" - } - }, - "radio": { - "title": "Moderování rádia", - "subtitle": "Nejnovější výkřiky, DJ aplikace a on-air plány (25 nejnovějších od každého).", - "moderation": "Moderování", - "shouts": "Výkřiky", - "applications": "Aplikace", - "schedules": "Jízdní řády", - "settings": "Nastavení", - "embed": "Vložit", - "ranks": "Hodnosti", - "history": "Historie", - "apiKeys": "Klíče API", - "points": "Body", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Rádiové monitorování", - "subtitle": "Živá sonda konfigurovaných rádiových koncových bodů pouze pro čtení (radio_now_playing_api_url, radio_listeners_api_url). Každý požadavek selže s časovým limitem {timeout}s – nezapisují se žádná data. Nakonfigurujte adresy URL v části Nastavení.", - "stream": "Stream", - "online": "Online", - "offline": "Offline", - "notConfigured": "Není nakonfigurováno", - "nowPlaying": "Nyní se hraje", - "nowPlayingApi": "Právě hrající API", - "listenersApi": "Rozhraní API pro posluchače", - "listeners": "Posluchači", - "currentSong": "Aktuální skladba", - "bitrate": "Bitová rychlost", - "status": "Stav", - "noNowPlayingHint": "žádná nyní přehrávající sada API", - "noListenersHint": "není nastaveno žádné rozhraní API pro posluchače", - "endpointDiagnostics": "Diagnostika koncových bodů", - "diagnosticsLegend": "OK: dostupné · WARN: nenastaveno · ERROR: požadavek selhal nebo vypršel časový limit.", - "streamUrl": "Adresa URL streamu", - "unreachable": "nedosažitelný", - "refresh": "Obnovit" - }, - "user": "Uživatel", - "message": "Zpráva", - "posted": "Zveřejněno", - "realName": "Skutečné jméno", - "age": "Věk", - "style": "styl", - "applied": "Aplikováno", - "day": "den", - "start": "Začněte", - "end": "Konec", - "show": "Zobrazit", - "status": "Stav", - "active": "aktivní", - "inactive": "neaktivní", - "hidden": "skryté", - "activeSchedules": "Aktivní rozvrhy", - "noShouts": "Žádné výkřiky k moderování", - "noApplications": "Nebyly předloženy žádné přihlášky.", - "noSchedules": "Nejsou nakonfigurovány žádné plány.", - "deleteShout": "Smazat", - "confirmDeleteShout": "Smazat tento výkřik?", - "pendingApplications": "Přihlášky čekající na vyřízení", - "settingsForm": { - "title": "Nastavení rádia", - "subtitle": "Úpravy zapisují do website_settings (radio_* klíče) a vyřazují mezipaměť nastavení běhového prostředí. Booleany používají 0/1.", - "enabled": "Povoleno", - "disabled": "Zakázáno", - "totalKeys": "Celkem klíčů", - "configured": "Nakonfigurováno", - "curatedHint": "spravované klíče s hodnotou", - "customKeys": "Vlastní klíče", - "saveAll": "Uložit vše", - "singleKey": "Přidat/přepsat jeden klíč", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "hodnotu", - "commentPlaceholder": "komentář (volitelné)", - "saveSingle": "Uložit", - "otherSettings": "Další nastavení rádia", - "dbError": "Nastavení nelze načíst (databáze není k dispozici). Výchozí nastavení se vytvoří při uložení." - }, - "embedPage": { - "title": "Rádio Embed", - "subtitle": "Kopírovat připravený kód pro vložení pro živý přenos. Pouze pro čtení — nic zde nezapisuje do databáze. Nakonfigurujte adresu URL streamu v nastavení rádia (radio_stream_url).", - "streamUrl": "Adresa URL streamu", - "configured": "Nakonfigurováno", - "missing": "Chybí", - "radioName": "Název rádia", - "nowPlayingApi": "Právě hrající API", - "set": "Set", - "notSet": "Nenastaveno", - "noStreamUrl": "Není nakonfigurována žádná adresa URL streamu", - "noStreamUrlText": "Neexistuje žádná sada radio_stream_url, takže zatím není co vkládat.", - "goToSettings": "Přejděte do Nastavení rádia", - "livePreview": "Živý náhled", - "livePreviewText": "Toto je holý audio přehrávač, jak jej uvidí návštěvníci. Stisknutím tlačítka Přehrát potvrďte, že je stream dosažitelný.", - "source": "Zdroj", - "audioSnippet": "Úryvek audio přehrávače", - "audioSnippetDesc": "Zvukový přehrávač HTML5 namířil přímo na stream. Funguje všude, kde je povoleno prosté HTML.", - "iframeSnippet": "Fragment obálky iframe", - "iframeSnippetDesc": "Vloží vlastní stránku rádiového přehrávače do prvku iframe – zachová váš styl a informace o právě přehrávaném obsahu. Upravte šířku/výšku podle chuti.", - "audioUnsupported": "Váš prohlížeč nepodporuje zvukový prvek." - }, - "banners": { - "title": "Bannery", - "heading": "Rádiové bannery", - "description": "Propagační bannery zobrazené na stránce rádia, seřazené podle pořadí řazení.", - "addBanner": "Přidat banner", - "createBanner": "Vytvořte banner", - "deleteBanner": "Smazat banner", - "noBanners": "Zatím žádné bannery – přidejte jeden výše.", - "existing": "Stávající bannery ({count})", - "save": "Uložit", - "delete": "Smazat", - "byUser": "od uživatele {id}", - "active": "aktivní", - "hidden": "skryté", - "bannerAlt": "Rádio banner", - "statusActive": "Aktivní", - "statusHidden": "Skrytá", - "dbError": "Nelze načíst bannery (databáze není k dispozici).", - "form": { - "imagePath": "Cesta k obrázku / URL", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Název", - "description": "Popis", - "sortOrder": "Řadit pořadí", - "active": "Aktivní" - } - }, - "ranksForm": { - "title": "Pořadí rádia", - "subtitle": "Pořadí DJ / zaměstnanců lze přiřadit k aplikacím rádia.", - "dbError": "Nepodařilo se načíst hodnocení (databáze není k dispozici).", - "active": "Aktivní", - "addRank": "Přidat hodnost", - "name": "Jméno", - "badgeCode": "Kód odznaku", - "description": "Popis", - "createRank": "Vytvořte hodnost", - "existing": "Stávající hodnosti ({count})", - "noRanks": "Zatím žádné pozice – přidejte jednu výše.", - "activeLabel": "aktivní", - "inactiveLabel": "neaktivní", - "save": "Uložit", - "deleteRank": "Smazat pořadí #{id}" - }, - "historyPage": { - "title": "Historie přehrávání rádia", - "subtitle": "Minulé DJ show a vysílací čas (radio_history), nejnovější první. Záznam pouze pro čtení o tom, kdo, kdy a kolik posluchačů vysílal.", - "dbError": "Nelze načíst historii rádia (databáze není k dispozici).", - "showsLogged": "Zobrazuje přihlášené", - "onAirNow": "Nyní ve vysílání", - "uniqueDjs": "Unikátní DJs", - "peakListeners": "Špičkoví posluchači", - "empty": "Dosud nebyla zaznamenána žádná historie rádia.", - "showLog": "Zobrazit protokol ({count})", - "colDj": "DJ", - "colShow": "Zobrazit", - "colStarted": "Zahájeno", - "colEnded": "Skončilo", - "colAirtime": "Vysílací čas", - "colListeners": "Posluchači", - "colNotes": "Poznámky", - "onAir": "ve vzduchu" - }, - "apiKeysForm": { - "title": "Rádiové klíče API", - "subtitle": "Klíče API pro externí rádiové integrace (radio_api_keys). Klíče se generují na straně serveru a zobrazují se maskované – při prvním vydání zkopírujte plnou hodnotu z databáze.", - "dbError": "Klíče API nelze načíst (databáze není k dispozici).", - "totalKeys": "Celkem klíčů", - "active": "Aktivní", - "inactive": "Neaktivní", - "generateKey": "Vygenerovat klíč", - "generateHint": "Tajný klíč je generován automaticky s kryptografickou náhodností — nezadáváte jej.", - "name": "Jméno", - "namePlaceholder": "Most AzureCast", - "rateLimit": "Limit sazby (požadavky/min)", - "allowedIps": "Povolené adresy IP (volitelné)", - "allowedIpsPlaceholder": "oddělené čárkou, prázdné = libovolné", - "generate": "Vygenerovat klíč", - "existingKeys": "Stávající klíče ({count})", - "noKeys": "Zatím žádné klíče API – vygenerujte si jeden výše.", - "colName": "Jméno", - "colKey": "klíč", - "colAllowedIps": "Povolené IP adresy", - "colRateLimit": "Limit sazby", - "colLastUsed": "Naposledy použité", - "colExpires": "Platnost vyprší", - "colStatus": "Stav", - "colActions": "Akce", - "maskedHint": "Zobrazí se pouze prvních 8 znaků", - "any": "jakýkoli", - "activeLabel": "aktivní", - "inactiveLabel": "neaktivní", - "deactivate": "Deaktivovat", - "activate": "Aktivovat", - "delete": "Smazat" - }, - "pointsForm": { - "title": "Body posluchače rádia", - "subtitle": "Odměňte posluchače měnou za čas strávený v rádiu. Úpravy zapisují do website_settings (klíče radio_points_*) a ničí mezipaměť nastavení běhového prostředí. Booleany používají 0/1.", - "saved": "Uloženo", - "points": "Body", - "enabled": "Povoleno", - "disabled": "Zakázáno", - "perMinute": "Za minutu", - "paidIn": "zaplaceno v {currency}", - "maxPerDay": "Max / den", - "unlimited": "Neomezené", - "minListeners": "Min. posluchači", - "settings": "Nastavení", - "pointsEnabled": "Body povoleny", - "pointsEnabledHint": "Hlavní přepínač pro udělování bodů posluchače.", - "currency": "Měna", - "currencyHint": "Do které peněženky se body vyplácejí.", - "pointsPerMinute": "Body za minutu", - "pointsPerMinuteHint": "Udělovaná částka za každou celou minutu poslechu.", - "maxPerDayHint": "Denní limit na uživatele. Použijte 0 pro neomezené.", - "minListenersHint": "Body se udělují pouze tehdy, když je naladěno alespoň tolik lidí.", - "save": "Uložte nastavení bodů" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Záložní seznam skladeb (radio_auto_dj_playlist) rádio rotuje, když nevysílá žádný živý DJ. Seřazeno podle pořadí řazení a poté názvu.", - "dbError": "Nelze načíst seznam stop AutoDJ (databáze není k dispozici).", - "tracks": "Skladby", - "active": "Aktivní", - "inactive": "Neaktivní", - "addTrack": "Přidat stopu", - "titlePlaceholder": "Název stopy", - "artist": "Umělec", - "album": "Album", - "artworkUrl": "URL uměleckého díla", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Doba trvání (sekundy)", - "durationPlaceholder": "např. 215", - "sortOrder": "Řadit pořadí", - "playlist": "Playlist ({count})", - "noTracks": "Zatím žádné stopy AutoDJ – přidejte jednu výše.", - "colOrder": "Objednat", - "colTitle": "Název", - "colArtist": "Umělec", - "colAlbum": "Album", - "colDuration": "Doba trvání", - "colPlays": "Hraje", - "colLastPlayed": "Naposledy hrané", - "colStatus": "Stav", - "colActions": "Akce", - "activeLabel": "aktivní", - "inactiveLabel": "neaktivní", - "deactivate": "Deaktivovat", - "activate": "Aktivovat", - "delete": "Smazat", - "trackTitle": "Název" - }, - "moderationPage": { - "title": "DJ moderování", - "subtitle": "Zkontrolujte a odstraňte rádiové výkřiky (50 nejnovějších).", - "recentShouts": "Nedávné výkřiky ({count})" - } - }, - "commandocentrum": { - "title": "Komandocentrum", - "subtitle": "Diagnostika, ovládání RCON a správa uživatelů", - "diagnostics": "Diagnostika", - "rcon": "RCON", - "userActions": "Akce uživatele", - "diagnosticsTitle": "Diagnostika emulátoru", - "memoryUsage": "Využití paměti", - "uptime": "Doba provozuschopnosti", - "onlineUsers": "Online uživatelé", - "roomsLoaded": "Místnosti nabité", - "refresh": "Obnovit", - "rconTitle": "RCON příkazy", - "rconPlaceholder": "Zadejte příkaz RCON…", - "rconSend": "Odeslat", - "rconSending": "Odesílání…", - "rconResponse": "Odezva", - "userActionsTitle": "Akce uživatele", - "username": "Uživatelské jméno", - "usernamePlaceholder": "Cílové uživatelské jméno", - "action": "Akce", - "execute": "Provést", - "actions": { - "disconnect": "Odpojit", - "alert": "Odeslat upozornění", - "giveCredits": "Dávejte kredity", - "giveBadge": "Dejte odznak", - "givePoints": "Dávejte body", - "ban": "Zákaz", - "kick": "Kopni" - }, - "messagePlaceholder": "Zpráva (pro upozornění)…", - "amountPlaceholder": "Částka…", - "badgePlaceholder": "Kód odznaku…" - }, - "emulator": { - "title": "Konfigurace emulátoru", - "subtitle": "Zobrazení a úprava nastavení emulátoru a textů národního prostředí", - "settings": "Nastavení", - "texts": "Texty", - "search": "Hledat", - "searchPlaceholder": "Vyhledávací klávesy…", - "noSettings": "Nebyla nalezena žádná nastavení", - "noTexts": "Nebyly nalezeny žádné texty", - "edit": "Upravit", - "save": "Uložit", - "saving": "Ukládání…", - "cancel": "Zrušit", - "colKey": "klíč", - "colValue": "Hodnota", - "colType": "Typ", - "colActions": "Akce", - "editDialog": { - "title": "Edit: {key}", - "value": "Hodnota", - "valuePlaceholder": "Zadejte hodnotu…", - "save": "Uložte změny", - "cancel": "Zrušit" - } - }, - "alerts": { - "title": "Upozornění", - "subtitle": "Odesílejte upozornění pro celý hotel a prohlížejte si nedávná upozornění", - "sendAlert": "Odeslat upozornění na hotel", - "recentAlerts": "Nedávná upozornění ({count})", - "noRecentAlerts": "Žádná nedávná upozornění", - "form": { - "title": "Název upozornění", - "titlePlaceholder": "např. Údržba serveru do 10 minut", - "message": "Výstražná zpráva", - "messagePlaceholder": "Napište výstražnou zprávu…", - "type": "Typ", - "typeHotel": "Upozornění na celý hotel", - "typeStaff": "Pouze personál", - "urgent": "Naléhavé", - "send": "Odeslat upozornění", - "sending": "Odesílání…", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Název", - "colSentBy": "Odeslal", - "colType": "Typ", - "colDate": "Datum", - "colActions": "Akce", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Aktivity zaměstnanců", - "subtitle": "Auditní záznam akcí zaměstnanců na panelu administrátora", - "noLogs": "Dosud nebyla zaznamenána žádná aktivita zaměstnanců", - "colId": "ID", - "colUser": "Uživatel", - "colAction": "Akce", - "colTarget": "Cíl", - "colDescription": "Popis", - "colIp": "IP", - "colTimestamp": "Časové razítko", - "filterByUser": "Filtrovat podle uživatele…", - "filterByAction": "Filtrovat podle akce…", - "clearFilters": "Vymazat filtry", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Filtr slov", - "subtitle": "Spravujte filtrovaná slova a fráze v hotelu", - "addWord": "Přidat slovo", - "addWords": "Přidejte slova", - "noWords": "Zatím žádná filtrovaná slova", - "confirmDelete": "Odebrat slovo „{word}“ z filtru?", - "colId": "ID", - "colWord": "Slovo", - "colAddedBy": "Přidáno uživatelem", - "colCreated": "Vytvořeno", - "colActions": "Akce", - "form": { - "word": "Slovo", - "wordPlaceholder": "např. špatné slovo", - "addMore": "Přidat více slov (jedno na řádek)", - "save": "Přidat do filtru", - "saving": "Ukládání…", - "cancel": "Zrušit" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Režim údržby", - "subtitle": "Povolit nebo zakázat údržbu v celém hotelu", - "enabled": "Režim údržby je povolen", - "disabled": "Režim údržby je deaktivován", - "enable": "Povolit údržbu", - "disable": "Zakázat údržbu", - "message": "Hlášení o údržbě", - "messagePlaceholder": "Brzy se vrátíme!", - "staffAccess": "Umožněte personálu přístup během údržby", - "save": "Uložte nastavení", - "saving": "Ukládání…", - "confirmEnable": "Povolení údržby zabrání všem uživatelům, kteří nejsou zaměstnanci, v přístupu do hotelu. Pokračovat?", - "confirmDisable": "Zakázat režim údržby a obnovit přístup pro všechny uživatele?" - }, - "housekeeping": { - "title": "Oprávnění k úklidu", - "subtitle": "Nakonfigurujte, které hodnosti mají přístup ke kterým administrátorským sekcím", - "addPermission": "Přidat oprávnění", - "editPermission": "Oprávnění k úpravám", - "deletePermission": "Smazat oprávnění", - "noPermissions": "Nejsou nakonfigurována žádná oprávnění pro úklid", - "confirmDelete": "Smazat toto oprávnění?", - "colId": "ID", - "colRank": "Hodnost", - "colSection": "sekce", - "colActions": "Akce", - "form": { - "rankId": "ID hodnosti", - "rankIdPlaceholder": "Minimální hodnost", - "section": "Klíč sekce", - "sectionPlaceholder": "např. admin.dashboard", - "save": "Uložit oprávnění", - "saving": "Ukládání…", - "cancel": "Zrušit" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset Aplikováno!", - "cleared": "All Oprávnění cleared!", - "invalidRank": "Invalid Hodnost", - "testDone": "Test done: {count} Oprávnění found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Smazat ALL Oprávnění? This Akce cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Povolení", - "colDescription": "Popis", - "colMinRank": "Min. Hodnost", - "permissionKey": "Povolovací klíč", - "minRank": "Min. Hodnost", - "description": "Popis", - "permissions": "Oprávnění", - "permissionsCount": "{count} Oprávnění", - "permission": "Povolení", - "highestMinRank": "Highest min. Hodnost: {rank}", - "totalMinRank": "Total min. Hodnost sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Hodnosti", - "missingDeps": "{count} Chybí dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Chybí)", - "rank": "Hodnost", - "count": "Count", - "searchPermission": "Hledat Oprávnění…", - "search": "Hledat", - "manage": "Manage", - "importSelection": "Importovat selection", - "noGroup": "Ne group", - "allGroups": "All groups", - "perGroup": "Oprávnění per group", - "perRank": "Oprávnění per Hodnost", - "rankOverviewHint": "All Oprávnění grouped by the Hodnost they are assigned to.", - "tabOverview": "Přehled", - "tabManage": "Manage", - "tabImport": "Importovat / Export", - "tabRanks": "Hodnost Přehled", - "tabPresets": "Předvolby", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Importovat Oprávnění", - "importHint": "Paste a JSON array of Povolení objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Importovat", - "exportTitle": "Export Oprávnění", - "exportHint": "Export all Oprávnění as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Povolení Předvolby", - "presetsHint": "Použít a predefined set of Oprávnění for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Moderování tools: Uživatel lookup, Zákazy, CFH handling, chat Protokoly.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Uživatelé, Pokoje, news, Nastavení, Obchod, events, Rádio & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Povolení management and asset Importovat.", - "applyPreset": "Použít preset", - "clearAll": "Clear all Oprávnění", - "testTitle": "Test Hodnost access", - "testHint": "Enter a Hodnost number to see which Oprávnění would be granted.", - "test": "Test", - "auditTitle": "Povolení audit log", - "auditHint": "All changes to Úklid Oprávnění are logged.", - "auditLogsAt": "Audit Protokoly are available on the Audit log page.", - "viewAuditLogs": "Zobrazit audit Protokoly", - "importedWithErrors": "Imported {count} Oprávnění with {errors} errors", - "confirmClearAllDesc": "This will Odebrat every Povolení entry from the databáze. Are you sure?", - "confirmDeletePermission": "Smazat this Povolení permanently?", - "confirmBulkDelete": "Smazat {count} selected Oprávnění?", - "deleteSelected": "Smazat {count} selected", - "cancel": "Zrušit", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Uživatel", - "auditAction": "Akce", - "auditTarget": "Cíl", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Pokoje", - "subtitle": "Vyhledávejte a spravujte hotelové pokoje", - "search": "Hledat", - "searchPlaceholder": "Hledat podle jména, vlastníka nebo ID…", - "searchResults": "Pro dotaz „{query}“ bylo nalezeno {count, plural, one {# room} other {# rooms}}", - "noResults": "Nebyly nalezeny žádné pokoje", - "colId": "ID", - "colName": "Jméno", - "colOwner": "vlastník", - "colUsers": "Uživatelé", - "colState": "stát", - "colCategory": "Kategorie", - "colCreated": "Vytvořeno", - "colActions": "Akce", - "stateOpen": "Otevřít", - "stateClosed": "Zavřeno", - "stateLocked": "Zamčeno", - "stateInvisible": "Neviditelný", - "detail": { - "title": "Místnost: {name}", - "subtitle": "Vlastní: {owner}", - "overview": "Přehled", - "actions": "Akce", - "description": "Popis", - "noDescription": "Žádný popis", - "owner": "vlastník", - "users": "Uživatelé online", - "maxUsers": "Maximální počet uživatelů", - "category": "Kategorie", - "state": "stát", - "tags": "Tagy", - "noTags": "Žádné značky", - "created": "Vytvořeno", - "deleteRoom": "Smazat místnost", - "confirmDelete": "Smazat místnost „{name}“? Toto nelze vrátit zpět.", - "enterRoom": "Vstupte do místnosti", - "changeOwner": "Změnit vlastníka", - "changeOwnerPlaceholder": "Uživatelské jméno nového vlastníka" - } - }, - "emailTemplates": { - "title": "Šablony e-mailů", - "subtitle": "Správa šablon transakčních e-mailů", - "newTemplate": "+ Nová šablona", - "edit": "Upravit", - "delete": "Smazat", - "noTemplates": "Zatím žádné šablony e-mailů", - "confirmDelete": "Smazat šablonu „{name}“?", - "colId": "ID", - "colName": "Jméno", - "colSubject": "Předmět", - "colKey": "klíč", - "colUpdated": "Aktualizováno", - "colActions": "Akce", - "form": { - "name": "Jméno", - "namePlaceholder": "např. Uvítací e-mail", - "key": "klíč", - "keyPlaceholder": "např. uvítací_e-mail", - "subject": "Předmět", - "subjectPlaceholder": "Předmět e-mailu", - "body": "Text (HTML)", - "bodyPlaceholder": "

Vážený {username},

", - "variables": "Dostupné proměnné", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Uložit šablonu", - "saving": "Ukládání…", - "cancel": "Zrušit" - } - }, - "theme": { - "title": "téma", - "subtitle": "Přizpůsobte vzhled CMS", - "presets": "Předvolby", - "colours": "Barvy", - "css": "CSS", - "presetsTitle": "Předvolby motivu", - "presetsSubtitle": "Vyberte předem připravené barevné schéma", - "applyPreset": "Použít", - "presetApplied": "Předvolba použita: {preset}", - "customiseTitle": "Vlastní barvy", - "primary": "Primární", - "secondary": "Sekundární", - "accent": "Přízvuk", - "background": "Pozadí", - "surface": "Povrch", - "text": "Text", - "saveColours": "Uložit barvy", - "savingColours": "Ukládání…", - "cssTitle": "Vlastní CSS", - "cssSubtitle": "Chcete-li přepsat styly motivů, přidejte vlastní CSS", - "cssPlaceholder": "/* Vaše vlastní CSS zde */", - "saveCss": "Uložit CSS", - "savingCss": "Ukládání…", - "reset": "Obnovit výchozí nastavení", - "confirmReset": "Resetovat motiv na výchozí hodnoty?" - }, - "media": { - "title": "Knihovna médií", - "subtitle": "Nahrávejte a spravujte mediální soubory", - "upload": "Nahrát", - "uploadTitle": "Nahrajte soubor", - "uploadSubtitle": "Přetažením nebo kliknutím nahrajte", - "uploadButton": "Vyberte soubor", - "uploading": "Nahrávání…", - "noFiles": "Zatím žádné mediální soubory", - "delete": "Smazat", - "confirmDelete": "Smazat tento soubor trvale?", - "search": "Hledat", - "searchPlaceholder": "Hledat podle názvu souboru…", - "colPreview": "Náhled", - "colName": "Jméno", - "colSize": "Velikost", - "colType": "Typ", - "colUploaded": "Nahráno", - "colActions": "Akce", - "copyUrl": "Kopírovat URL", - "urlCopied": "Adresa URL zkopírována do schránky" - }, - "favicon": { - "title": "Favicon", - "subtitle": "Nahrajte a spravujte favicon webu", - "current": "Aktuální favicon", - "uploadLabel": "Nahrát favicon", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO nebo SVG. Maximálně 2 MB.", - "upload": "Nahrát", - "uploading": "Nahrávání…", - "delete": "Odebrat", - "deleting": "Odebírání…", - "saved": "Favicon úspěšně uložen!", - "deleted": "Favicon úspěšně odstraněn!", - "error": "Něco se pokazilo", - "confirmDelete": "Odebrat favicon? Web již nebude zobrazovat vlastní favicon.", - "generator": { - "title": "Vygenerovat favicon", - "text": "Text", - "bgColor": "Barva pozadí", - "textColor": "Barva textu", - "rounded": "Zaoblené rohy", - "save": "Uložit jako favicon" - }, - "cancel": "Cancel" - }, - "settings": { - "title": "Nastavení CMS", - "subtitle": "Správa konfigurace CMS párů klíč/hodnota", - "addSetting": "Přidat nastavení", - "edit": "Upravit", - "delete": "Smazat", - "noSettings": "Nebyla nalezena žádná nastavení", - "confirmDelete": "Smazat nastavení „{key}“?", - "colKey": "klíč", - "colValue": "Hodnota", - "colUpdated": "Aktualizováno", - "colActions": "Akce", - "form": { - "key": "klíč", - "keyPlaceholder": "např. hotel_name", - "value": "Hodnota", - "valuePlaceholder": "Nastavení hodnoty", - "save": "Uložit nastavení", - "saving": "Ukládání…", - "cancel": "Zrušit" - }, - "keysInDatabase": "{count} keys in database", - "managedInForm": "{count} managed in form", - "documented": "{count} documented", - "saved": "Settings saved.", - "saveFailed": "Could not save settings.", - "saveSettings": "Save settings", - "viewOnly": "You can view settings but need edit permission to change them." - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Domů", - "reload": "Obnovit", - "fullscreen": "Celá obrazovka", - "logout": "Odhlásit", - "onlineUsers": "Uživatelé online", - "emulatorOnline": "Emulátor online", - "emulatorOffline": "Emulátor offline", - "dragToMove": "Přetažením přesunete", - "hide": "Skrýt lištu", - "fullscreenExit": "Ukončit celou obrazovku", - "show": "Zobrazit lištu", - "emulatorUnknown": "Stav emulátoru neznámý" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Diagnostika souborů", - "preliminary": "Předběžná kontrola adres; obsah se ověří při importu.", - "http": "HTTP {status}", - "network": "Připojení selhalo", - "timeout": "Zdroj neodpověděl včas", - "invalidResponse": "Zdroj vrátil webovou stránku místo souboru", - "available": "Soubor nalezen; čeká na ověření", - "recover": "Přiložit originál a pokračovat", - "recoveryHint": "Vyberte {file} (do 50 MB). Ověří se jeho identita. Opakují se neúspěšné položky; dokončené importy zůstanou zachovány.", - "attach": "Vyberte původní soubor .nitro", - "working": "Ověřování nebo pokračování...", - "attached": "Odpovídající soubor přiložen", - "resume": "Opakovat neúspěšné importy s tímto souborem", - "invalidFile": "Vyberte odpovídající původní .nitro do 50 MB a zkuste to znovu.", - "resumeError": "Obnovte historii a použijte poslední pokus; zkontrolujte soubor a zkuste to znovu.", - "mismatchedFile": "Tento soubor patří jinému nábytku.", - "alreadyStarted": "Obnova již začala. Obnovte historii a použijte poslední pokus.", - "notEligible": "Tuto položku nelze obnovit přílohou." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "Kopie pro obnovení bude v tomto prohlížeči uchována po dobu 7 dnů.", + "saved": "Kopie pro obnovení byla v tomto prohlížeči uložena na 7 dnů.", + "unavailable": "Obnovení v prohlížeči není dostupné. Nech tuto stránku otevřenou, dokud se změny neuloží.", + "found": "V tomto prohlížeči je dostupná kopie pro obnovení, uložená", + "restore": "Obnovit kopii z prohlížeče", + "discard": "Smazat kopii z prohlížeče", + "confirmRestore": "Nahradit aktuální formulář kopií z prohlížeče? Před uložením zkontroluj obsah.", + "confirmDiscard": "Smazat tuto kopii z prohlížeče? Aktuální formulář zůstane beze změn." + }, + "nav": { + "home": "Domů", + "community": "Společenství", + "articles": "články", + "photos": "Fotografie", + "staff": "Zaměstnanci", + "rankings": "Žebříčky", + "guilds": "cechy", + "leaderboards": "Žebříčky", + "rareValues": "Vzácné hodnoty", + "shop": "Obchod", + "market": "trh", + "assistance": "Pomoc", + "helpCenter": "Centrum nápovědy", + "myTickets": "Moje vstupenky", + "badges": "Odznaky", + "radio": "Rádio", + "friends": "Přátelé", + "messages": "Zprávy", + "admin": "Admin", + "openMenu": "Otevřít nabídku", + "closeMenu": "Zavřít nabídku", + "drawBadge": "Nakreslete odznak", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} online", + "nitroClient": "Nitro klient", + "tagline": "Online virtuální svět, kde si můžete vytvořit svého vlastního avatara, spřátelit se, chatovat, vytvářet místnosti a mnoho dalšího!", + "login": "Přihlášení", + "or": "Nebo", + "createAccount": "Vytvořte si účet" + }, + "footer": { + "copyright": "© {year} - {hotel} je neziskový vzdělávací projekt" + }, + "pages": { + "staff": { + "title": "Zaměstnanci", + "subtitle": "Tým za hotelem", + "ranksTitle": "Hodnosti", + "ranksSubtitle": "O co se stará každá část týmu", + "membersTitle": "Členové týmu", + "membersEmptySubtitle": "Nikdo se teď nemůže ukázat", + "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", + "emptyState": "Žádní zaměstnanci k zobrazení.", + "colUsername": "Uživatelské jméno", + "colRank": "Hodnost", + "colMotto": "Motto", + "viewProfile": "View profile", + "noMotto": "No motto set", + "loadError": "Unable to load staff members. Please try again shortly.", + "retry": "Try again" + }, + "leaderboard": { + "title": "Žebříček", + "subtitle": "20 nejlepších hráčů podle {currency}", + "tab_credits": "Kredity", + "tab_diamonds": "Diamanty", + "tab_duckets": "Kachny", + "tab_achievement": "Úspěchy", + "tab_respects": "respekt", + "tab_onlinetime": "Online čas", + "emptyState": "Zatím žádné hodnocení k zobrazení.", + "colAvatar": "Avatar", + "colPlayer": "Přehrávač" + }, + "friends": { + "title": "Přátelé", + "emptySubtitle": "Zatím jste nepřidali žádné přátele", + "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", + "emptyState": "Přidejte přátele v hotelu a oni se zde zobrazí.", + "noMotto": "Žádné 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": "Zprávy", + "subtitle": "Čekají na vás žádosti o přátelství a offline zprávy", + "requestsTitle": "Žádosti o přátelství", + "requestsEmptySubtitle": "Nikdo ještě nepožádal, aby se stal vaším přítelem", + "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", + "requestsEmptyState": "Žádné nevyřízené žádosti o přátelství.", + "wantsToBeFriend": "chce být tvůj přítel.", + "accept": "Přijmout", + "offlineTitle": "Offline zprávy", + "offlineEmptySubtitle": "Vaše doručená pošta je prázdná", + "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", + "offlineEmptyState": "Nemáte žádné offline zprávy.", + "unknownUser": "Uživatel #{id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Žádné motto", + "statRank": "Hodnost", + "statCredits": "Kredity", + "statRegistered": "Registrováno", + "badgesTitle": "Odznaky", + "badgesEmpty": "Zatím žádné odznaky.", + "photosTitle": "Fotografie", + "photosEmpty": "Zatím žádné fotky.", + "guestbookTitle": "Kniha návštěv", + "guestbookSubtitle": "Zprávy na zdi uživatele {username}", + "leaveMessage": "Zanechte zprávu", + "guestbookPlaceholder": "Napište něco do návštěvní knihy uživatele {username}…", + "post": "Příspěvek", + "loginToPost": "Chcete-li zanechat zprávu v knize návštěv, přihlaste se.", + "guestbookEmpty": "Zatím žádné záznamy v návštěvní knize.", + "unknownUser": "Uživatel #{id}", + "statDuckets": "Kachny", + "statDiamonds": "Diamanty", + "walletTitle": "Peněženka", + "friendsTitle": "Přátelé", + "friendsSubtitle": "Lidé v hotelu, se kterými se scházejí", + "friendsEmpty": "Žádní přátelé k zobrazení.", + "roomsTitle": "Pokoje", + "roomsSubtitle": "Pokoje, které vlastní", + "roomsEmpty": "Žádné místnosti k zobrazení.", + "roomUntitled": "Pokoj bez názvu", + "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": "Žebříčky", + "subtitle": "12 nejlepších hráčů seřazených podle kreditů", + "emptyState": "Zatím žádní hráči k hodnocení." + }, + "home": { + "welcome": "Vítejte v {hotelName}", + "welcomeSubtitle": "Váš retro hotel, nyní poháněný Next.js", + "welcomeBody": "Setkejte se, sbírejte nábytek a setkejte se s přáteli.", + "enterHotel": "Zadejte {hotelName}", + "onlineFriends": "Online přátelé", + "noFriendsOnline": "Žádní přátelé online", + "register": "ZAREGISTRUJTE SE HNED", + "joinNow": "Připojte se k {hotelName} ještě dnes!", + "recentUsers": "Nedávní uživatelé", + "recentPhotos": "Nedávné fotografie", + "latestNews": "Nejnovější zprávy", + "newsTitle": "Nejnovější zprávy", + "newsSubtitle": "Čerstvé z hotelu", + "allNews": "Všechny novinky →", + "allUsers": "Komunita →", + "noArticles": "Zatím žádné články.", + "noPhotos": "Zatím žádné fotky.", + "noUsers": "Žádní uživatelé online", + "latestArticle": "Nejnovější článek", + "latestUsers": "Nejnovější občané ({count} celkem)", + "statsOnline": "Online", + "statsCitizens": "Občané", + "statsRooms": "Pokoje", + "statsArticles": "Články", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Vytvoř si svůj jedinečný vzhled", + "featuresFurniture": "Nábytek", + "featuresFurnitureDesc": "Vyzdob si pokoje předměty", + "featuresCommunity": "Komunita", + "featuresCommunityDesc": "Najdi si přátele a chatuj", + "featuresGames": "Hry", + "featuresGamesDesc": "Soutěž a bav se", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Novinky", + "subtitle": "Nejnovější oznámení, události a aktualizace z hotelu", + "noArticles": "Zatím žádné články.", + "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": "← Novinky", + "reactionsTitle": "Reakce", + "reactionsSubtitle": "Řekněte nám, co si myslíte", + "reaction": { + "like": "Jako", + "love": "Láska", + "wow": "Páni" + }, + "removeReaction": "Kliknutím odeberete svou reakci", + "reactWith": "Reagovat pomocí {reaction}", + "noReactions": "Zatím žádné reakce.", + "logIn": "Přihlaste se", + "toReact": "reagovat.", + "commentsTitle": "Komentáře", + "commentsSubtitle": "Připojte se ke konverzaci", + "commentsCount": "zatím {count}", + "noComments": "Zatím žádné komentáře. Buďte první, kdo okomentuje.", + "userNumber": "Uživatel #{id}", + "addComment": "Přidejte komentář", + "commentPlaceholder": "Napište svůj komentář…", + "postComment": "Přidat komentář", + "toComment": "zanechat komentář.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Fotografie", + "subtitle": "Nejnovější snímky pořízené v hotelu", + "noPhotos": "Zatím žádné fotky.", + "photoAlt": "Fotka uživatele #{id}", + "byUser": "od uživatele #{id}" + }, + "badges": { + "title": "Odznaky", + "subtitle": "Odznaky, které můžete získat a chlubit se v hotelu", + "noBadges": "Zatím nejsou k dispozici žádné odznaky." + }, + "community": { + "title": "Společenství", + "subtitle": "Vše se děje kolem hotelu na jednom místě", + "open": "Otevřít →", + "links": { + "rankings": { + "title": "Žebříčky", + "text": "Podívejte se na nejbohatší hráče v hotelu seřazené podle kreditů." + }, + "staff": { + "title": "Zaměstnanci", + "text": "Seznamte se s týmem, který zajišťuje chod hotelu každý den." + }, + "news": { + "title": "Novinky", + "text": "Nejnovější oznámení, události a aktualizace." + }, + "photos": { + "title": "Fotografie", + "text": "Snímky sdílené komunitou z celého hotelu." + }, + "guilds": { + "title": "cechy", + "text": "Procházejte skupiny, které hráči vytvořili a ke kterým se připojili." + }, + "leaderboards": { + "title": "Žebříčky", + "text": "Kdo je v této sezóně na vrcholu ve statistikách hotelu." + } + } + }, + "guilds": { + "title": "cechy", + "subtitle": "Procházejte skupiny, které hráči vytvořili a ke kterým se připojili", + "empty": "Zatím žádné cechy.", + "unnamedGuild": "Nejmenovaný cech", + "noDescription": "Žádný popis" + }, + "guild": { + "allGuilds": "← Všechny cechy", + "unnamedGuild": "Nejmenovaný cech", + "noDescription": "Žádný popis", + "memberSingular": "člen", + "memberPlural": "členové", + "founded": "Založeno", + "forumLink": "Fórum →", + "discussion": "Diskuse", + "membersTitle": "členové", + "memberLowerSingular": "člen", + "memberLowerPlural": "členů", + "noMembers": "Žádní členové.", + "owner": "vlastník", + "noMotto": "Žádné motto" + }, + "guildForum": { + "backToGuild": "← Zpět do cechu", + "unnamedGuild": "Nejmenovaný cech", + "forumTitle": "{guild} — Fórum", + "threadSingular": "vlákno", + "threadPlural": "vlákna", + "newThread": "+ Nové vlákno", + "empty": "V tomto fóru zatím nejsou žádná vlákna.", + "colSubject": "Předmět", + "colAuthor": "Autor", + "colPosts": "Příspěvky", + "colDate": "Datum", + "noSubject": "(bez předmětu)", + "pinned": "Připnuto", + "locked": "Zamčeno", + "userNumber": "Uživatel #{id}", + "unknown": "Neznámý", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Zpět na fórum", + "unnamedGuild": "Nejmenovaný cech", + "title": "Nové vlákno", + "subtitle": "ve fóru {guild}", + "subjectLabel": "Předmět", + "subjectPlaceholder": "Předmět vlákna", + "messageLabel": "Zpráva", + "messagePlaceholder": "Napište svůj úvodní příspěvek…", + "postThread": "Odeslat vlákno", + "cancel": "Zrušit", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Obchod", + "subtitle": "Doplňte svůj účet a získejte exkluzivní balíčky, měnu a odznaky.", + "browsingCategory": "Procházení balíčků {category}.", + "all": "všechny", + "allPackages": "Všechny balíčky", + "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", + "empty": "Momentálně nejsou k dispozici žádné balíčky.", + "buy": "Koupit", + "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": "Doplňte přes PayPal", + "subtitle": "Plaťte bezpečně pomocí PayPal a vaše kredity se přičtou v okamžiku, kdy bude platba zúčtována.", + "cancelled": "Pokladna byla zrušena – platba nebyla přijata.", + "chooseAmount": "Vyberte částku", + "notConfiguredPre": "PayPal ještě není nakonfigurován. Musí nastavit správce", + "notConfiguredAnd": "a", + "notConfiguredOptional": "(a volitelně", + "notConfiguredPost": "pro sandbox vs. live).", + "balanceTitle": "Vaše bilance", + "signedInAs": "Jste přihlášeni jako {username}", + "credits": "Kredity", + "creditsPerUnit": "Kredity za 1,00 {currency}", + "rateLine": "Za 1,00 {currency} obdržíte kredity {amount}. Kredity se objeví ve hře při příštím přihlášení." + }, + "marketplace": { + "title": "Tržiště", + "subtitle": "Procházejte nábytek a vzácné předměty uvedené hráči. Výpisy se umisťují do hry a aktualizují se živě – zamiřte do hotelu a udělejte nabídku.", + "activeOffers": "Aktivní nabídky", + "sellers": "Prodejci", + "totalValue": "Celková hodnota", + "activeListings": "Aktivní výpisy", + "mostRecentFirst": "Naposledy uvedené jako první", + "empty": "Momentálně nejsou na trhu žádné aktivní nabídky. Vraťte se později.", + "colOffer": "Nabídka", + "colItem": "Položka", + "colSeller": "Prodejce", + "colPrice": "Cena", + "colListed": "Uvedeno", + "itemLabel": "Položka č. {id}", + "userLabel": "Uživatel #{id}", + "justNow": "právě teď", + "minutesAgo": "před {count}m", + "hoursAgo": "před {count}h", + "daysAgo": "před {count}d" + }, + "rares": { + "title": "Vzácné hodnoty", + "subtitle": "Získejte přehled o všech vzácných v hotelu, seskupených podle kategorií.", + "empty": "V současné době zde nemáme žádné vzácné.", + "rareCount": "{count, plural, one {# rare} other {# rares}}", + "viewRares": "Zobrazit vzácné →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", + "allRares": "← Všechny vzácné", + "empty": "V této kategorii zatím nejsou uvedeny žádné vzácné.", + "colRare": "Vzácné", + "colCredits": "Kredity", + "colCurrency": "Měna", + "creditsValue": "{value} kreditů", + "duckets": "Kachny", + "diamonds": "Diamanty", + "credits": "Kredity" + }, + "redeem": { + "title": "Uplatněte voucher", + "subtitle": "Máte kód voucheru? Zadejte jej níže a přidejte odměnu na svůj účet.", + "enterCode": "Zadejte svůj kód", + "oncePerAccount": "Každý voucher lze na účet uplatnit pouze jednou.", + "balanceTitle": "Vaše bilance", + "signedInAs": "Jste přihlášeni jako {username}", + "credits": "Kredity", + "instantCredit": "Uplatněné odměny jsou připsány okamžitě a objeví se ve hře při příštím přihlášení." + }, + "help": { + "title": "Centrum nápovědy", + "subtitle": "Najděte průvodce, témata podpory a pravidla hotelu – vše, co potřebujete k získání pomoci.", + "myTickets": "Moje vstupenky →", + "topicsTitle": "Témata podpory", + "topicsSubtitle": "Procházejte průvodce a odpovědi na běžné otázky", + "topicsEmpty": "Zatím žádná témata nápovědy.", + "rulesTitle": "Pravidla hotelu", + "rulesSubtitle": "Před pobytem v hotelu si je přečtěte", + "rulesEmpty": "Dosud nebyla zveřejněna žádná pravidla.", + "categoryEmpty": "V této kategorii nejsou žádná pravidla." + }, + "helpCategory": { + "back": "← Centrum nápovědy", + "topicSubtitle": "Téma centra nápovědy", + "moreTitle": "Další témata nápovědy", + "moreSubtitle": "Přejít na jiné téma podpory" + }, + "helpTickets": { + "title": "Pomoc vstupenky", + "subtitle": "Odešlete lístek personálu a sledujte své otevřené požadavky.", + "statTotal": "Celkem vstupenek", + "statOpen": "Otevřít", + "statClosed": "Zavřeno", + "newTitle": "Nový lístek", + "newSubtitle": "Popište svůj problém a personál vás bude sledovat", + "subjectPlaceholder": "Předmět", + "contentPlaceholder": "Popište svůj problém…", + "submit": "Odeslat lístek", + "listTitle": "Vaše vstupenky", + "listSubtitle": "Každá žádost, kterou zašlete personálu", + "listEmpty": "Ještě nemáte žádné vstupenky.", + "colId": "ID", + "colSubject": "Předmět", + "colStatus": "Stav", + "colCreated": "Vytvořeno", + "statusOpen": "Otevřít", + "statusClosed": "Zavřeno", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "Požádejte o zaměstnance {hotel}", + "subtitle": "Každou chvíli otevíráme aplikace pro zaměstnance. Pokud narazíte na pozici, o které máte pocit, že byste se na ni perfektně hodili, neváhejte se o ni přihlásit.", + "noPositionsTitle": "Žádné otevřené pozice", + "noPositionsBody": "Momentálně nejsou otevřené žádné pozice. Vraťte se prosím později a zkontrolujte, zda do té doby máme nějaká volná místa. děkujeme za váš zájem.", + "noDeadline": "Není stanovena žádná lhůta", + "deadline": "Uzávěrka přihlášek: {date}", + "alreadyApplied": "Již jste požádali o {rank}", + "aboutYou": "O vás", + "aboutPlaceholder": "Řekni nám, proč bys byl skvělý {rank}…", + "applyFor": "Zažádat o {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": "Přihlaste se do týmu {hotel}", + "subtitle": "Týmové aplikace otevíráme pravidelně. Pokud vidíte tým, který se vám hodí, neváhejte se přihlásit!", + "noPositionsTitle": "Nejsou otevřeny žádné týmové pozice", + "noPositionsBody": "V současné době nejsou žádné volné týmové pozice. Vraťte se prosím později a zkontrolujte nová místa. Děkuju!", + "pending": "Vaše přihláška čeká na vyřízení", + "aboutYou": "O vás", + "aboutPlaceholder": "Řekněte nám, proč byste se skvěle hodil pro {rank}…", + "applyFor": "Zažádat o {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": "Rádio", + "subtitle": "Nalaďte si hotelové rádio — živé DJ sety, žádosti a výkřiky.", + "nowPlaying": "Nyní se hraje", + "nothingPlaying": "Momentálně nic nehraje.", + "onAir": "Ve vysílání: {dj}", + "noDj": "Žádný DJ ve vysílání.", + "audioUnsupported": "Váš prohlížeč nepodporuje zvukový prvek.", + "streamOffline": "Stream je momentálně offline.", + "exploreTitle": "Prozkoumejte rádio", + "exploreSubtitle": "Plán, výkřiky, žádosti a další", + "linkSchedule": "Rozvrh", + "linkScheduleText": "Náš týdenní line-up DJs a show.", + "linkShouts": "Výkřiky", + "linkShoutsText": "Výkřiky a žádosti komunity.", + "linkRequests": "Žádosti", + "linkRequestsText": "Požádejte DJe, aby natočil vaši oblíbenou skladbu.", + "linkApply": "Přihlaste se jako DJ", + "linkApplyText": "Připojte se k týmu a vydejte se do éteru.", + "linkLeaderboard": "Žebříček", + "linkLeaderboardText": "Nejlepší posluchači seřazení podle získaných bodů.", + "todayTitle": "Dnešní rozvrh", + "todayTitleWithDay": "Dnešní rozvrh · {day}", + "todaySubtitle": "Co je dnes v éteru", + "fullWeek": "Celý týden →", + "noShowsToday": "Na dnešek nejsou naplánovány žádné pořady.", + "colTime": "Čas", + "colShow": "Zobrazit", + "colDj": "DJ", + "untitledShow": "Pořad bez názvu", + "userNumber": "Uživatel #{id}" + }, + "radioSchedule": { + "title": "Rozpis rádia", + "subtitle": "Náš týdenní line-up DJs a show", + "empty": "Zatím nejsou naplánována žádná představení.", + "colDay": "den", + "colTime": "Čas", + "colDj": "DJ", + "colShow": "Zobrazit", + "noShows": "Žádné pořady" + }, + "radioShouts": { + "title": "Rádiové výkřiky", + "subtitle": "Výkřiky a žádosti komunity", + "postTitle": "Zveřejněte výkřik", + "postSubtitle": "Pošlete zprávu DJovi do vysílání", + "messageLabel": "Vaše zpráva", + "messagePlaceholder": "Pošlete výkřik DJovi…", + "shoutButton": "Křičet", + "loginToPost": "Chcete-li zveřejnit výkřik, přihlaste se.", + "latestTitle": "Nejnovější výkřiky", + "latestSubtitle": "Nejnovější zprávy od posluchačů", + "empty": "Zatím žádné výkřiky. Buďte první!", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Rádiové soutěže", + "subtitle": "Nalaďte se a zúčastněte se našich nejnovějších on-air soutěží", + "empty": "Zatím žádné soutěže.", + "contestLabel": "Soutěž č. {id}", + "dateUnknown": "Datum neznámé" + }, + "radioGiveaways": { + "title": "Rádio dárky", + "subtitle": "Poslouchejte svou šanci vyhrát v našich rádiových dárcích", + "empty": "Zatím žádné dárky.", + "giveawayLabel": "Dar č. {id}", + "dateUnknown": "Datum neznámé" + }, + "radioLeaderboard": { + "title": "Žebříček posluchačů rádia", + "subtitle": "50 nejlepších posluchačů podle bodů získaných naladěním rádia", + "empty": "Zatím žádné body posluchače k zobrazení.", + "colRank": "Hodnost", + "colAvatar": "Avatar", + "colListener": "Posluchač", + "colPoints": "Body" + }, + "radioRequests": { + "formTitle": "Odeslat žádost", + "formSubtitle": "Požádejte DJe, aby přehrál vaši oblíbenou skladbu", + "songLabel": "Píseň", + "songPlaceholder": "Název písně", + "artistLabel": "Umělec", + "artistPlaceholder": "Jméno umělce (nepovinné)", + "submitButton": "Odeslat žádost", + "loginToRequest": "Chcete-li odeslat žádost, přihlaste se.", + "latestTitle": "Nedávné žádosti", + "latestSubtitle": "Nejnovější požadované skladby", + "empty": "Zatím žádné žádosti.", + "colSong": "Píseň", + "colArtist": "Umělec", + "colRequester": "Žadatel", + "colDate": "Datum", + "colStatus": "Stav", + "statusPending": "Čeká na vyřízení", + "statusApproved": "Schváleno", + "statusPlayed": "Hráno", + "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": "Přihlaste se jako DJ rádia", + "subtitle": "Řekněte nám o sobě a o tom, proč byste se skvěle hodil do éteru", + "latestTitle": "Vaše nejnovější aplikace", + "statusLabel": "Stav:", + "submittedOn": "· odesláno {date}", + "submitAgain": "Pokud se vaše údaje změnily, můžete níže odeslat znovu.", + "formTitle": "Formulář žádosti", + "formSubtitle": "Všechna pole označená jako povinná musí být vyplněna", + "realNameLabel": "Skutečné jméno", + "realNamePlaceholder": "Vaše celé jméno", + "ageLabel": "Věk", + "availabilityLabel": "Dostupnost", + "availabilityPlaceholder": "Které dny a časy můžete vysílat?", + "musicStyleLabel": "Hudební styl", + "musicStylePlaceholder": "např. House, Pop, Hip-Hop", + "experienceLabel": "Zkušenosti", + "optional": "(volitelné)", + "experiencePlaceholder": "Máte nějaké předchozí zkušenosti s DJ nebo hostováním?", + "motivationLabel": "Motivace", + "motivationPlaceholder": "Proč se chcete připojit k týmu rádia?", + "submitButton": "Odešlete přihlášku", + "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": "Nastavení účtu", + "accountSettingsSubtitle": "Spravujte svůj profil, zabezpečení a propojené účty", + "publicProfile": "Váš veřejný profil", + "noMotto": "Žádné motto", + "noEmail": "Žádný e-mail v souboru", + "changeMotto": "Změnit motto", + "changeMottoSubtitle": "Aktualizuje se okamžitě ve hře, pokud jste online", + "mottoPlaceholder": "Vaše motto", + "saveMotto": "Uložit motto", + "securityTitle": "Bezpečnost", + "securitySubtitle": "Dvoufaktorová autentizace", + "securityDescription": "Přidejte do svého účtu druhou vrstvu ochrany.", + "twoFactorLink": "Dvoufaktorová autentizace" + }, + "settings2fa": { + "backToSettings": "← Nastavení", + "title": "Dvoufaktorová autentizace", + "subtitle": "Přidejte druhou vrstvu zabezpečení pomocí ověřovací aplikace", + "nowEnabled": "2FA je nyní povolena. 🔒", + "disabledNotice": "2FA byla deaktivována.", + "badCode": "Tento kód nebyl platný – zkuste to znovu.", + "noAppKeyPrefix": "2FA není k dispozici do", + "noAppKeyMiddle": "je nakonfigurován (stejný Laravel", + "noAppKeySuffix": "jak si nainstalujete AtomCMS, takže existující tajné informace zůstanou čitelné).", + "isEnabled": "2FA je povoleno", + "onYourAccount": "na vašem účtu.", + "disable": "Zakázat 2FA", + "scanOrEnter": "Naskenujte nebo zadejte tento klíč", + "scanInstructions": "Přidejte to do aplikace Google Authenticator / Authy a potvrďte zadáním 6místného kódu.", + "manualKey": "Manuální klíč:", + "codePlaceholder": "6místný kód", + "confirm": "Potvrďte", + "enableIntro": "Přidejte druhou vrstvu zabezpečení pomocí ověřovací aplikace.", + "enable": "Povolit 2FA", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Propojené účty", + "subtitle": "Propojte sociální účet, abyste se mohli přihlásit jedním kliknutím", + "connected": "Připojeno", + "unavailable": "Není k dispozici", + "login": { + "title": "Přihlaste se", + "subtitle": "Vítejte zpět – přihlaste se pro vstup do hotelu.", + "subtitle2fa": "Zadejte 6místný kód z vašeho autentizátoru.", + "usernamePlaceholder": "Uživatelské jméno", + "passwordPlaceholder": "Heslo", + "codePlaceholder": "2FA kód", + "pleaseWait": "Čekejte prosím…", + "verify": "Ověřte", + "signIn": "Přihlaste se", + "or": "nebo", + "noAccount": "Žádný účet?", + "createOne": "Vytvořte jeden", + "forgotPassword": "Zapomněli jste heslo?", + "errorInvalidCredentials": "Neplatné uživatelské jméno nebo heslo", + "errorInvalid2fa": "Neplatný kód 2FA", + "welcomeBack": "Vítej zpět", + "welcomeBackSub": "Přihlas se pro pokračování do {hotelName}", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Vytvořit účet", + "subtitle": "Připojte se k hotelu – trvá to jen chvíli.", + "username": "Uživatelské jméno", + "email": "Email", + "password": "Heslo", + "confirmPassword": "Opakujte heslo", + "usernamePlaceholder": "Uživatelské jméno", + "emailPlaceholder": "Email", + "passwordPlaceholder": "Heslo (min. 6 znaků)", + "confirmPasswordPlaceholder": "Opakujte heslo", + "selectOutfit": "Vyberte si oblečení", + "termsAccept": "Je mi 18+ a souhlasím s podmínkami a pravidly {hotel}.", + "createAccount": "Vytvořit účet", + "creatingAccount": "Vytváření účtu...", + "redirecting": "Přesměrovávám na váš účet...", + "alreadyHaveAccount": "Už máte účet? Přihlášení!", + "register": "Zaregistrujte se", + "termsError": "Chcete-li se zaregistrovat, musíte přijmout podmínky a pravidla.", + "usernameError": "Uživatelské jméno je povinné.", + "emailError": "Je vyžadován platný e-mail.", + "passwordError": "Heslo musí mít alespoň 6 znaků.", + "confirmPasswordError": "Hesla se neshodují.", + "termsRequired": "Musíte přijmout podmínky a pravidla.", + "usernameRequired": "Uživatelské jméno je povinné.", + "emailRequired": "E-mail je povinný.", + "passwordRequired": "Je vyžadováno heslo.", + "passwordsDontMatch": "Hesla se neshodují.", + "alreadyHaveAccountPre": "Už máš účet?", + "alreadyHaveAccountLink": "Přihlásit se", + "whoIsOnline": "Kdo je online", + "usersOnline": "{count} online", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Obnovit heslo", + "subtitle": "Zašleme vám e-mailem zabezpečený odkaz pro nastavení nového hesla.", + "sentNotice": "Pokud je tento e-mail zaregistrován, byl odeslán odkaz pro obnovení. Zkontrolujte si doručenou poštu.", + "emailPlaceholder": "Váš email", + "sendResetLink": "Odeslat odkaz na reset", + "backToLogin": "Zpět k přihlášení", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Nastavte nové heslo", + "subtitle": "Vyberte si silné heslo, které jinde nepoužíváte.", + "passwordPlaceholder": "Nové heslo (min. 6 znaků)", + "resetPassword": "Obnovit heslo", + "backToLogin": "Zpět k přihlášení" + }, + "verify": { + "verifiedTitle": "Vše je připraveno", + "verifiedSubtitle": "E-mail ověřen", + "verifiedBody": "Vaše e-mailová adresa byla ověřena. Nyní se můžete přihlásit a hrát.", + "goToLogin": "Přejít na přihlášení", + "alreadyTitle": "Již ověřeno", + "alreadySubtitle": "Nezbývá nic dělat", + "alreadyBody": "Tato e-mailová adresa již byla potvrzena.", + "unavailableTitle": "Zkuste to za chvíli znovu", + "unavailableSubtitle": "Server nedostupný", + "unavailableBody": "Nepodařilo se nám spojit se serverem a ověřit váš e-mail. Zkuste odkaz za chvíli znovu.", + "invalidTitle": "Ověření e-mailem", + "invalidSubtitle": "Neplatný odkaz nebo odkaz, jehož platnost vypršela", + "invalidBody": "Tento ověřovací odkaz není platný. Ujistěte se, že jste otevřeli celý odkaz ze svého e-mailu, nebo požádejte o nový.", + "backToLogin": "Zpět k přihlášení" + }, + "banned": { + "title": "Máte zákaz", + "subtitle": "Účet pozastaven", + "body": "Váš účet byl v hotelu pozastaven.", + "reasonLabel": "důvod:", + "permanent": "Tento zákaz je trvalý.", + "expires": "Platnost vyprší {date}.", + "contactStaff": "Pokud se domníváte, že jde o omyl, kontaktujte tým zaměstnanců." + }, + "maintenance": { + "title": "{hotel} je v údržbě", + "subtitle": "Brzy se vrátíme", + "staffCanLogIn": "Zaměstnanci se stále mohou přihlásit." + }, + "admin": { + "nav": { + "overview": "Přehled", + "dashboard": "Dashboard", + "content": "Obsah", + "articles": "články", + "tags": "Tagy", + "navigator": "Navigátor", + "helpCenter": "Centrum nápovědy", + "advertisements": "Reklamy", + "writeableBoxes": "Popsatelné krabice", + "photos": "Fotografie", + "tickets": "Vstupenky", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Uživatelé a přístup", + "users": "Uživatelé", + "bans": "Zákazy", + "ipManagement": "Správa IP", + "vpn": "VPN", + "applications": "Aplikace", + "teams": "Týmy", + "permissions": "Oprávnění", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "Ekonomika", + "catalog": "Katalog", + "shop": "Obchod", + "transactions": "Transakce", + "vouchers": "Poukazy", + "subscriptions": "Předplatné", + "rareValues": "Vzácné hodnoty", + "badges": "Odznaky", + "achievements": "Úspěchy", + "calendar": "Kalendář", + "radio": "Rádio", + "radioHistory": "Historie rádia", + "radioBanners": "Bannery", + "radioEmbed": "Vložit", + "radioApiKeys": "API klíče", + "radioModeration": "Moderování", + "radioSettings": "Nastavení", + "radioMonitoring": "Sledování", + "radioPoints": "Body", + "radioRanks": "Hodnosti", + "radioAutodj": "Auto DJ", + "system": "Systém", + "commandocentrum": "Komandocentrum", + "emulator": "Emulátor", + "alerts": "Upozornění", + "logs": "Protokoly", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Filtr slov", + "maintenance": "Údržba", + "rooms": "Pokoje", + "emailTemplates": "Šablony e-mailů", + "theme": "téma", + "media": "Média", + "favicon": "Favicon", + "sounds": "Zvuky", + "translations": "Překlady", + "import": "Importovat", + "settings": "Nastavení", + "backToSite": "Zpět na stránku", + "housekeeping": "Úklid", + "hotelManagementPanel": "Panel správy hotelu", + "rankLabel": "Hodnost {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Search menu…", + "clearMenuSearch": "Clear menu search", + "noMenuResults": "No matching pages.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "studio": "Studio", + "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" + }, + "dashboard": { + "title": "Dashboard", + "subtitle": "Přehled hotelu a aktuální stav", + "playersOnline": "Hráči online", + "articles": "články", + "activeBans": "Aktivní zákazy", + "database": "databáze", + "databaseConnected": "Připojeno", + "databaseDown": "Dolů", + "usersByRank": "Uživatelé podle hodnosti", + "noAccountsToBreakDown": "Zatím žádné účty k rozdělení", + "rankLabel": "Hodnost {rank}", + "rankWithCount": "Hodnost {rank}: {count} účtů", + "recentStaffActivity": "Nedávná činnost zaměstnanců", + "viewAll": "Zobrazit vše", + "noStaffActivityLogged": "Dosud nebyla zaznamenána žádná aktivita zaměstnanců", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "články", + "subtitle": "Zpravodajské články — 50 nejnovějších", + "newArticle": "+ Nový článek", + "edit": "Upravit", + "delete": "Smazat", + "noArticles": "Zatím žádné články", + "confirmDelete": "Opravdu chcete smazat „{title}“?", + "colTitle": "Název", + "colSlug": "Slimák", + "colAuthor": "Autor", + "colCreated": "Vytvořeno", + "colActions": "Akce", + "form": { + "title": "Název", + "titlePlaceholder": "Název článku", + "slug": "Slimák", + "slugPlaceholder": "article-url-slug", + "category": "Kategorie", + "categoryPlaceholder": "Vyberte kategorii", + "body": "Tělo", + "bodyPlaceholder": "Napište obsah článku…", + "image": "Obrázek", + "imagePlaceholder": "https://example.com/obrazek.png", + "thumbnail": "Náhled", + "thumbnailPlaceholder": "https://example.com/thumb.png", + "published": "Publikováno", + "featured": "Nejlepší", + "save": "Uložit článek", + "saving": "Ukládání…", + "deleteArticle": "Smazat článek", + "deleteConfirm": "Tuto akci nelze vrátit zpět. Článek bude trvale odstraněn.", + "cancel": "Zrušit", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "Tagy", + "subtitle": "Štítky / kategorie článků", + "addTag": "Přidat značku", + "name": "Jméno", + "namePlaceholder": "Název značky", + "backgroundColour": "Barva pozadí", + "createTag": "Vytvořte značku", + "editTag": "Upravit značku", + "updateTag": "Aktualizovat značku", + "deleteTag": "Smazat značku", + "confirmDelete": "Smazat „{name}“?", + "noTags": "Zatím žádné značky", + "colId": "ID", + "colTag": "Tag", + "colColour": "Barva", + "colUsedBy": "Použito uživatelem", + "colCreated": "Vytvořeno", + "colActions": "Akce", + "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": "Navigátor", + "flatCategories": "Byt kategorie", + "publicRooms": "Veřejné místnosti", + "addCategory": "Přidat kategorii", + "editCategory": "Upravit kategorii", + "deleteCategory": "Smazat kategorii", + "categoryName": "Název kategorie", + "categoryNamePlaceholder": "např. Chill & Chat", + "categoryOrder": "Objednat", + "roomName": "Název místnosti", + "roomNamePlaceholder": "např. Vítejte salonek", + "roomId": "ID pokoje", + "roomIdPlaceholder": "Číselné ID místnosti", + "save": "Uložit", + "cancel": "Zrušit", + "noCategories": "Zatím žádné kategorie", + "noPublicRooms": "Zatím žádné veřejné místnosti", + "colId": "ID", + "colName": "Jméno", + "colOrder": "Objednat", + "colRooms": "Pokoje", + "colActions": "Akce", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Centrum nápovědy", + "subtitle": "Podpora záznamů a správa FAQ", + "entries": "Příspěvky", + "newEntry": "+ Nový záznam", + "edit": "Upravit", + "delete": "Smazat", + "noEntries": "Zatím žádné záznamy", + "confirmDelete": "Smazat „{title}“?", + "colId": "ID", + "colTitle": "Název", + "colCategory": "Kategorie", + "colCreated": "Vytvořeno", + "colActions": "Akce", + "form": { + "title": "Název", + "titlePlaceholder": "Název příspěvku", + "category": "Kategorie", + "categoryPlaceholder": "Vyberte kategorii", + "body": "Tělo", + "bodyPlaceholder": "Napište odpověď…", + "save": "Uložit záznam", + "saving": "Ukládání…", + "deleteEntry": "Smazat záznam", + "cancel": "Zrušit" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Reklamy", + "subtitle": "Správa hotelových reklam a propagačních bannerů", + "newAd": "+ Nová reklama", + "edit": "Upravit", + "delete": "Smazat", + "noAds": "Zatím žádné reklamy", + "confirmDelete": "Smazat tuto reklamu?", + "colId": "ID", + "colName": "Jméno", + "colImage": "Obrázek", + "colUrl": "URL", + "colViews": "Pohledy", + "colStatus": "Stav", + "colCreated": "Vytvořeno", + "colActions": "Akce", + "form": { + "name": "Jméno", + "namePlaceholder": "Název reklamy", + "image": "Adresa URL obrázku", + "imagePlaceholder": "https://example.com/banner.png", + "url": "Cílová adresa URL", + "urlPlaceholder": "https://example.com", + "enabled": "Povoleno", + "save": "Uložit reklamu", + "saving": "Ukládání…", + "deleteAd": "Smazat inzerát", + "cancel": "Zrušit" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Zapisovatelné krabičky", + "subtitle": "Panely obsahu zobrazené v hotelu a CMS", + "newBox": "Nová krabice", + "edit": "Upravit", + "delete": "Smazat", + "noBoxes": "Zatím žádné zapisovatelné boxy", + "confirmDelete": "Smazat toto pole?", + "colId": "ID", + "colName": "Jméno", + "colLocation": "Umístění", + "colUpdated": "Aktualizováno", + "colActions": "Akce", + "form": { + "name": "Jméno", + "namePlaceholder": "Název krabice", + "location": "Umístění", + "locationPlaceholder": "např. domovská stránka, postranní panel", + "content": "Obsah", + "contentPlaceholder": "Napište obsah krabice…", + "enabled": "Povoleno", + "save": "Uložit pole", + "saving": "Ukládání…", + "deleteBox": "Smazat pole", + "cancel": "Zrušit", + "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": "Moderování fotografií", + "subtitle": "Nedávné fotografie z fotoaparátu ve hře", + "delete": "Smazat", + "approve": "Schválit", + "noPhotos": "Žádné fotky k moderování", + "confirmDelete": "Smazat tuto fotku trvale?", + "colId": "ID", + "colPreview": "Náhled", + "colUser": "Uživatel", + "colRoom": "Místnost", + "colTimestamp": "Časové razítko", + "colActions": "Akce", + "photoAlt": "Uživatelská fotka č. {id}", + "byUser": "od {username}", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Uživatelé", + "subtitle": "Procházejte, prohledávejte a spravujte hotelové účty", + "search": "Hledat", + "searchPlaceholder": "Vyhledávání podle uživatelského jména, e-mailu nebo ID…", + "searchResults": "{count, plural, one {# result} other {# results}} for \"{query}\"", + "noResults": "Nebyli nalezeni žádní uživatelé", + "colId": "ID", + "colUsername": "Uživatelské jméno", + "colEmail": "Email", + "colRank": "Hodnost", + "colOnline": "Online", + "colRegistered": "Registrováno", + "colLastOnline": "Naposledy online", + "colActions": "Akce", + "yes": "Ano", + "no": "Ne", + "edit": "Upravit", + "setRank": "Nastavit hodnost", + "disconnect": "Odpojit", + "alert": "Upozornění", + "ban": "Zákaz", + "detail": { + "title": "Uživatel: {username}", + "subtitle": "Podrobnosti o účtu a správa", + "overview": "Přehled", + "actions": "Akce", + "username": "Uživatelské jméno", + "email": "Email", + "motto": "Motto", + "rank": "Hodnost", + "credits": "Kredity", + "duckets": "Kachny", + "diamonds": "Diamanty", + "online": "Online", + "registered": "Registrováno", + "lastOnline": "Naposledy online", + "ipAddress": "IP adresa", + "machineId": "ID stroje", + "sendAlert": "Odeslat upozornění", + "sendMessage": "Odeslat zprávu", + "disconnectUser": "Odpojit uživatele", + "banUser": "Zakázat uživatele", + "resetPassword": "Obnovit heslo", + "deleteUser": "Smazat uživatele", + "confirmDelete": "Opravdu chcete smazat uživatele {username}? Toto nelze vrátit zpět.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Upravit uživatele: {username}", + "subtitle": "Upravte podrobnosti účtu", + "username": "Uživatelské jméno", + "usernamePlaceholder": "Uživatelské jméno", + "email": "Email", + "emailPlaceholder": "uživatel@example.com", + "motto": "Motto", + "mottoPlaceholder": "Uživatelské motto", + "rank": "Hodnost", + "credits": "Kredity", + "duckets": "Kachny", + "diamonds": "Diamanty", + "save": "Uložte změny", + "saving": "Ukládání…", + "cancel": "Zrušit" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Zákazy", + "subtitle": "Správa zákazů účtů, IP a strojů", + "newBan": "Nový zákaz", + "edit": "Upravit", + "delete": "Smazat", + "noBans": "Zatím žádné zákazy", + "confirmDelete": "Odstranit tento zákaz?", + "colId": "ID", + "colValue": "Hodnota", + "colType": "Typ", + "colReason": "Důvod", + "colBannedBy": "Zakázáno uživatelem", + "colExpires": "Platnost vyprší", + "colCreated": "Vytvořeno", + "colActions": "Akce", + "form": { + "value": "Hodnota", + "valuePlaceholder": "Uživatelské jméno, IP nebo ID stroje", + "type": "Typ", + "typeUser": "Uživatel", + "typeIp": "IP", + "typeMachine": "Stroj", + "reason": "Důvod", + "reasonPlaceholder": "Důvod zákazu", + "expiresAt": "Platnost vyprší v", + "permanent": "Trvalé", + "save": "Uložit zákaz", + "saving": "Ukládání…", + "cancel": "Zrušit" + }, + "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": "Správa IP", + "subtitle": "Spravujte seznam povolených a zakázaných IP adres", + "whitelist": "Seznam povolených", + "blacklist": "Černá listina", + "addIp": "Přidat IP", + "ipAddress": "IP adresa", + "ipAddressPlaceholder": "např. 127.0.0.1", + "reason": "Důvod", + "reasonPlaceholder": "Důvod zařazení", + "add": "Přidat", + "remove": "Odebrat", + "confirmRemove": "Odebrat tuto IP adresu ze {list}?", + "noWhitelistedIps": "Žádné adresy IP na seznamu povolených", + "noBlacklistedIps": "Žádné IP adresy na černé listině", + "colIp": "IP", + "colReason": "Důvod", + "colAdded": "Přidáno", + "colActions": "Akce", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "VPN / detekce proxy", + "subtitle": "Nakonfigurujte nastavení detekce VPN a proxy", + "enabled": "Povoleno", + "apiKey": "API klíč", + "apiKeyPlaceholder": "Váš klíč API pro detekci VPN", + "apiKeyHint": "Pro deaktivaci ponechejte prázdné", + "blockOnDetect": "Blokovat při detekci", + "blockOnDetectHint": "Automaticky blokovat uživatele zjištěné za VPN nebo proxy", + "save": "Uložte nastavení", + "saving": "Ukládání…", + "settingsSaved": "Nastavení VPN byla úspěšně uložena", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Aplikace pro zaměstnance", + "subtitle": "Nevyřízené a zkontrolované žádosti zaměstnanců", + "pending": "Čeká na vyřízení", + "approved": "Schváleno", + "rejected": "Odmítnuto", + "noApplications": "Zatím žádné aplikace", + "colId": "ID", + "colApplicant": "Žadatel", + "colPosition": "Pozice", + "colStatus": "Stav", + "colSubmitted": "Odesláno", + "colActions": "Akce", + "review": "Recenze", + "approve": "Schválit", + "reject": "Odmítnout", + "confirmApprove": "Schválit uživatele {username} na pozici {position}?", + "confirmReject": "Odmítnout žádost uživatele {username} o pozici {position}?", + "detail": { + "title": "Přihláška od uživatele {username}", + "subtitle": "Pro {position}", + "about": "O žadateli", + "message": "Zpráva aplikace", + "status": "Stav", + "submitted": "Odesláno", + "noMessage": "Nebyla poskytnuta žádná zpráva" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Týmy", + "subtitle": "Definujte názvy a popisy hodností zaměstnanců", + "addRank": "Přidat hodnost", + "editRank": "Upravit hodnost", + "deleteRank": "Smazat hodnost", + "noTeams": "Zatím žádné definice pořadí", + "confirmDelete": "Smazat definici hodnosti {id}?", + "colId": "ID", + "colRank": "Hodnost", + "colName": "Jméno", + "colBadge": "Odznak", + "colColour": "Barva", + "colActions": "Akce", + "form": { + "rankId": "ID hodnosti", + "rankIdPlaceholder": "Číselné ID hodnosti", + "name": "Jméno", + "namePlaceholder": "např. Správce", + "badge": "Kód odznaku", + "badgePlaceholder": "např. ADM001", + "colour": "Barva", + "colourPlaceholder": "např. #ff0000", + "save": "Uložit definici týmu", + "saving": "Ukládání…", + "cancel": "Zrušit" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Oprávnění", + "subtitle": "Správa oprávnění na základě hodnocení pro panel správce", + "addPermission": "Přidat oprávnění", + "editPermission": "Oprávnění k úpravám", + "deletePermission": "Smazat oprávnění", + "noPermissions": "Zatím nejsou nakonfigurována žádná oprávnění", + "confirmDelete": "Smazat toto oprávnění?", + "colId": "ID", + "colRank": "Hodnost", + "colPermission": "Povolení", + "colCreated": "Vytvořeno", + "colActions": "Akce", + "form": { + "rankId": "ID hodnosti", + "rankIdPlaceholder": "Vyžaduje se minimální hodnost", + "permission": "Povolovací klíč", + "permissionPlaceholder": "např. admin.články.spravovat", + "save": "Uložit oprávnění", + "saving": "Ukládání…", + "cancel": "Zrušit" + } + }, + "catalog": { + "title": "Katalog", + "subtitle": "Procházejte a spravujte katalogové stránky a položky", + "pages": "Stránky", + "items": "Položky", + "addPage": "Přidat stránku", + "editPage": "Upravit stránku", + "deletePage": "Smazat stránku", + "addItem": "Přidat položku", + "editItem": "Upravit položku", + "deleteItem": "Smazat položku", + "noPages": "Zatím žádné stránky katalogu", + "noItems": "Na této stránce nejsou žádné položky", + "confirmDeletePage": "Smazat stránku katalogu \"{name}\"?", + "confirmDeleteItem": "Smazat tuto položku?", + "colId": "ID", + "colName": "Jméno", + "colIcon": "ikona", + "colOrder": "Objednat", + "colItems": "Položky", + "colEnabled": "Povoleno", + "colActions": "Akce", + "colItemId": "ID položky", + "colItemName": "Název položky", + "colCostCredits": "Cena (kredity)", + "colCostPoints": "Cena (body)", + "colLimited": "Omezené", + "pageForm": { + "name": "Jméno", + "namePlaceholder": "Název stránky", + "icon": "ID ikony", + "iconPlaceholder": "Číselné ID ikony", + "order": "Objednat", + "enabled": "Povoleno", + "parent": "Nadřazená stránka", + "parentNone": "Žádný (kořen)", + "save": "Uložit stránku", + "saving": "Ukládání…", + "cancel": "Zrušit" + }, + "itemForm": { + "itemId": "ID položky", + "itemName": "Název položky", + "costCredits": "Cena v kreditech", + "costDuckets": "Cena v penízkách", + "costDiamonds": "Cena v diamantech", + "limitedStack": "Omezená velikost zásobníku", + "limitedSold": "Prodáno omezeně", + "save": "Uložit položku", + "saving": "Ukládání…", + "cancel": "Zrušit" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Obchod", + "subtitle": "Spravujte balíčky a objednávky", + "packages": "Balíčky", + "orders": "Objednávky", + "newPackage": "+ Nové balení", + "edit": "Upravit", + "delete": "Smazat", + "viewOrder": "Zobrazit", + "noPackages": "Zatím žádné obchodní balíčky", + "noOrders": "Zatím žádné objednávky", + "confirmDelete": "Smazat tento balíček?", + "colId": "ID", + "colName": "Jméno", + "colPrice": "Cena", + "colCurrency": "Měna", + "colType": "Typ", + "colSold": "Prodáno", + "colEnabled": "Povoleno", + "colActions": "Akce", + "colOrderId": "ID objednávky", + "colCustomer": "Zákazník", + "colPackage": "Balíček", + "colAmount": "Částka", + "colStatus": "Stav", + "colDate": "Datum", + "statusPending": "Čeká na vyřízení", + "statusCompleted": "Dokončeno", + "statusRefunded": "Vráceno", + "form": { + "name": "Jméno", + "namePlaceholder": "Název balíčku", + "description": "Popis", + "descriptionPlaceholder": "Popis balíčku", + "price": "Cena", + "currency": "Měna", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Typ", + "typeCredits": "Kredity", + "typeDuckets": "Kachny", + "typeDiamonds": "Diamanty", + "typeBadge": "Odznak", + "typeFurni": "Nábytek", + "typeRank": "Hodnost", + "amount": "Částka", + "badgeCode": "Kód odznaku", + "badgeCodePlaceholder": "např. VIP001", + "rankId": "ID hodnosti", + "furniItems": "Nábytkové předměty", + "enabled": "Povoleno", + "save": "Uložit balíček", + "saving": "Ukládání…", + "cancel": "Zrušit", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "Transakce", + "subtitle": "Protokol plateb přes PayPal", + "noTransactions": "Zatím žádné transakce", + "colId": "ID", + "colUser": "Uživatel", + "colAmount": "Částka", + "colCurrency": "Měna", + "colPackage": "Balíček", + "colStatus": "Stav", + "colDate": "Datum", + "colActions": "Akce", + "statusCompleted": "Dokončeno", + "statusPending": "Čeká na vyřízení", + "statusFailed": "Nepodařilo se", + "statusRefunded": "Vráceno", + "detail": { + "title": "transakce č. {id}", + "paypalId": "PayPal ID", + "payerEmail": "E-mail plátce", + "grossAmount": "Hrubá částka", + "fee": "Poplatek", + "netAmount": "Čistá částka" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Nakupujte poukázky", + "subtitle": "Spravujte uplatnitelné kódy voucherů", + "newVoucher": "+ Nový voucher", + "edit": "Upravit", + "delete": "Smazat", + "noVouchers": "Zatím žádné vouchery", + "confirmDelete": "Smazat voucher „{code}“?", + "colId": "ID", + "colCode": "kód", + "colValue": "Hodnota", + "colType": "Typ", + "colUses": "Použití / Max", + "colExpires": "Platnost vyprší", + "colCreated": "Vytvořeno", + "colActions": "Akce", + "form": { + "code": "kód", + "codePlaceholder": "např. LÉTO 2025", + "value": "Hodnota", + "type": "Typ", + "typeCredits": "Kredity", + "typeDuckets": "Kachny", + "typeDiamonds": "Diamanty", + "typeBadge": "Odznak", + "typeFurni": "Nábytek", + "typeRank": "Hodnost", + "badgeCode": "Kód odznaku", + "badgeCodePlaceholder": "např. VIP001", + "rankId": "ID hodnosti", + "maxUses": "Max používá", + "maxUsesPlaceholder": "0 = neomezeně", + "expiresAt": "Platnost vyprší v", + "enabled": "Povoleno", + "save": "Uložit voucher", + "saving": "Ukládání…", + "cancel": "Zrušit", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Předplatné", + "subtitle": "Aktivní opakované odběry", + "noSubscriptions": "Žádné aktivní odběry", + "cancel": "Zrušit", + "confirmCancel": "Zrušit předplatné pro uživatele {username}?", + "colId": "ID", + "colUser": "Uživatel", + "colPackage": "Balíček", + "colAmount": "Částka", + "colInterval": "Interval", + "colStarted": "Zahájeno", + "colNextBilling": "Další vyúčtování", + "colStatus": "Stav", + "colActions": "Akce", + "statusActive": "Aktivní", + "statusCancelled": "Zrušeno", + "statusExpired": "Platnost vypršela", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Vzácné hodnoty", + "subtitle": "Správa vzácných hodnotových kategorií a cen položek", + "categories": "Kategorie", + "items": "Položky", + "addCategory": "Přidat kategorii", + "editCategory": "Upravit kategorii", + "deleteCategory": "Smazat kategorii", + "noCategories": "Zatím žádné vzácné hodnotové kategorie", + "confirmDeleteCategory": "Smazat kategorii „{name}“ a všechny její položky?", + "colId": "ID", + "colName": "Jméno", + "colItems": "Položky", + "colUpdated": "Aktualizováno", + "colActions": "Akce", + "colItemName": "Název položky", + "colCredits": "Kredity", + "colPoints": "Body", + "colPointType": "Typ bodu", + "categoryForm": { + "name": "Jméno", + "namePlaceholder": "Název kategorie", + "save": "Uložit kategorii", + "saving": "Ukládání…", + "cancel": "Zrušit" + }, + "itemForm": { + "itemName": "Název položky", + "itemNamePlaceholder": "např. trůn", + "credits": "Hodnota kreditů", + "points": "Hodnota bodů", + "pointType": "Typ bodu", + "pointTypeDuckets": "Kachny", + "pointTypeDiamonds": "Diamanty", + "save": "Uložit položku", + "saving": "Ukládání…", + "cancel": "Zrušit", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Odznaky", + "subtitle": "Nahrávejte, dávejte a spravujte katalog odznaků", + "upload": "Nahrát", + "giveBadge": "Dejte odznak", + "catalogue": "Katalog", + "uploadTitle": "Nahrajte nový odznak", + "uploadSubtitle": "Nahrajte soubor obrázku odznaku", + "badgeCode": "Kód odznaku", + "badgeCodePlaceholder": "např. VIP001", + "badgeFile": "Soubor odznaku", + "badgeFileHint": "PNG nebo GIF, doporučeno 40x40", + "uploadButton": "Nahrát", + "uploading": "Nahrávání…", + "giveTitle": "Dejte uživateli odznak", + "giveSubtitle": "Udělte odznak konkrétnímu uživateli", + "username": "Uživatelské jméno", + "usernamePlaceholder": "Cílové uživatelské jméno", + "giveButton": "Dejte odznak", + "giving": "Dávat…", + "catalogueTitle": "Katalog odznaků", + "catalogueSubtitle": "Všechny dostupné odznaky v hotelu", + "noBadges": "V katalogu nejsou žádné odznaky", + "search": "Hledat odznaky", + "searchPlaceholder": "Hledat podle kódu nebo názvu…", + "colCode": "kód", + "colImage": "Obrázek", + "colName": "Jméno", + "colDescription": "Popis", + "colActions": "Akce", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Úspěchy", + "subtitle": "Seznam herních úspěchů pouze pro čtení", + "noAchievements": "Nejsou nakonfigurovány žádné úspěchy", + "colId": "ID", + "colName": "Jméno", + "colCategory": "Kategorie", + "colLevels": "úrovně", + "colReward": "Odměna", + "colProgress": "Pokrok", + "levelLabel": "Úroveň {level}", + "rewardCredits": "{count} kreditů", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Kalendářní kampaně", + "subtitle": "Seznam kampaní a událostí kalendáře pouze pro čtení", + "noCampaigns": "Zatím žádné kampaně v kalendáři", + "colId": "ID", + "colName": "Jméno", + "colStart": "Začněte", + "colEnd": "Konec", + "colType": "Typ", + "colReward": "Odměna", + "colActions": "Akce", + "detail": { + "title": "Kampaň: {name}", + "subtitle": "Podrobnosti události kalendáře", + "days": "Dny", + "dayLabel": "den {day}", + "reward": "Odměna", + "noDays": "Pro tuto kampaň nejsou nakonfigurovány žádné dny", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Moderování rádia", + "subtitle": "Nejnovější výkřiky, DJ aplikace a on-air plány (25 nejnovějších od každého).", + "moderation": "Moderování", + "shouts": "Výkřiky", + "applications": "Aplikace", + "schedules": "Jízdní řády", + "settings": "Nastavení", + "embed": "Vložit", + "ranks": "Hodnosti", + "history": "Historie", + "apiKeys": "Klíče API", + "points": "Body", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Rádiové monitorování", + "subtitle": "Živá sonda konfigurovaných rádiových koncových bodů pouze pro čtení (radio_now_playing_api_url, radio_listeners_api_url). Každý požadavek selže s časovým limitem {timeout}s – nezapisují se žádná data. Nakonfigurujte adresy URL v části Nastavení.", + "stream": "Stream", + "online": "Online", + "offline": "Offline", + "notConfigured": "Není nakonfigurováno", + "nowPlaying": "Nyní se hraje", + "nowPlayingApi": "Právě hrající API", + "listenersApi": "Rozhraní API pro posluchače", + "listeners": "Posluchači", + "currentSong": "Aktuální skladba", + "bitrate": "Bitová rychlost", + "status": "Stav", + "noNowPlayingHint": "žádná nyní přehrávající sada API", + "noListenersHint": "není nastaveno žádné rozhraní API pro posluchače", + "endpointDiagnostics": "Diagnostika koncových bodů", + "diagnosticsLegend": "OK: dostupné · WARN: nenastaveno · ERROR: požadavek selhal nebo vypršel časový limit.", + "streamUrl": "Adresa URL streamu", + "unreachable": "nedosažitelný", + "refresh": "Obnovit" + }, + "user": "Uživatel", + "message": "Zpráva", + "posted": "Zveřejněno", + "realName": "Skutečné jméno", + "age": "Věk", + "style": "styl", + "applied": "Aplikováno", + "day": "den", + "start": "Začněte", + "end": "Konec", + "show": "Zobrazit", + "status": "Stav", + "active": "aktivní", + "inactive": "neaktivní", + "hidden": "skryté", + "activeSchedules": "Aktivní rozvrhy", + "noShouts": "Žádné výkřiky k moderování", + "noApplications": "Nebyly předloženy žádné přihlášky.", + "noSchedules": "Nejsou nakonfigurovány žádné plány.", + "deleteShout": "Smazat", + "confirmDeleteShout": "Smazat tento výkřik?", + "pendingApplications": "Přihlášky čekající na vyřízení", + "settingsForm": { + "title": "Nastavení rádia", + "subtitle": "Úpravy zapisují do website_settings (radio_* klíče) a vyřazují mezipaměť nastavení běhového prostředí. Booleany používají 0/1.", + "enabled": "Povoleno", + "disabled": "Zakázáno", + "totalKeys": "Celkem klíčů", + "configured": "Nakonfigurováno", + "curatedHint": "spravované klíče s hodnotou", + "customKeys": "Vlastní klíče", + "saveAll": "Uložit vše", + "singleKey": "Přidat/přepsat jeden klíč", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "hodnotu", + "commentPlaceholder": "komentář (volitelné)", + "saveSingle": "Uložit", + "otherSettings": "Další nastavení rádia", + "dbError": "Nastavení nelze načíst (databáze není k dispozici). Výchozí nastavení se vytvoří při uložení." + }, + "embedPage": { + "title": "Rádio Embed", + "subtitle": "Kopírovat připravený kód pro vložení pro živý přenos. Pouze pro čtení — nic zde nezapisuje do databáze. Nakonfigurujte adresu URL streamu v nastavení rádia (radio_stream_url).", + "streamUrl": "Adresa URL streamu", + "configured": "Nakonfigurováno", + "missing": "Chybí", + "radioName": "Název rádia", + "nowPlayingApi": "Právě hrající API", + "set": "Set", + "notSet": "Nenastaveno", + "noStreamUrl": "Není nakonfigurována žádná adresa URL streamu", + "noStreamUrlText": "Neexistuje žádná sada radio_stream_url, takže zatím není co vkládat.", + "goToSettings": "Přejděte do Nastavení rádia", + "livePreview": "Živý náhled", + "livePreviewText": "Toto je holý audio přehrávač, jak jej uvidí návštěvníci. Stisknutím tlačítka Přehrát potvrďte, že je stream dosažitelný.", + "source": "Zdroj", + "audioSnippet": "Úryvek audio přehrávače", + "audioSnippetDesc": "Zvukový přehrávač HTML5 namířil přímo na stream. Funguje všude, kde je povoleno prosté HTML.", + "iframeSnippet": "Fragment obálky iframe", + "iframeSnippetDesc": "Vloží vlastní stránku rádiového přehrávače do prvku iframe – zachová váš styl a informace o právě přehrávaném obsahu. Upravte šířku/výšku podle chuti.", + "audioUnsupported": "Váš prohlížeč nepodporuje zvukový prvek." + }, + "banners": { + "title": "Bannery", + "heading": "Rádiové bannery", + "description": "Propagační bannery zobrazené na stránce rádia, seřazené podle pořadí řazení.", + "addBanner": "Přidat banner", + "createBanner": "Vytvořte banner", + "deleteBanner": "Smazat banner", + "noBanners": "Zatím žádné bannery – přidejte jeden výše.", + "existing": "Stávající bannery ({count})", + "save": "Uložit", + "delete": "Smazat", + "byUser": "od uživatele {id}", + "active": "aktivní", + "hidden": "skryté", + "bannerAlt": "Rádio banner", + "statusActive": "Aktivní", + "statusHidden": "Skrytá", + "dbError": "Nelze načíst bannery (databáze není k dispozici).", + "form": { + "imagePath": "Cesta k obrázku / URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Název", + "description": "Popis", + "sortOrder": "Řadit pořadí", + "active": "Aktivní" + } + }, + "ranksForm": { + "title": "Pořadí rádia", + "subtitle": "Pořadí DJ / zaměstnanců lze přiřadit k aplikacím rádia.", + "dbError": "Nepodařilo se načíst hodnocení (databáze není k dispozici).", + "active": "Aktivní", + "addRank": "Přidat hodnost", + "name": "Jméno", + "badgeCode": "Kód odznaku", + "description": "Popis", + "createRank": "Vytvořte hodnost", + "existing": "Stávající hodnosti ({count})", + "noRanks": "Zatím žádné pozice – přidejte jednu výše.", + "activeLabel": "aktivní", + "inactiveLabel": "neaktivní", + "save": "Uložit", + "deleteRank": "Smazat pořadí #{id}" + }, + "historyPage": { + "title": "Historie přehrávání rádia", + "subtitle": "Minulé DJ show a vysílací čas (radio_history), nejnovější první. Záznam pouze pro čtení o tom, kdo, kdy a kolik posluchačů vysílal.", + "dbError": "Nelze načíst historii rádia (databáze není k dispozici).", + "showsLogged": "Zobrazuje přihlášené", + "onAirNow": "Nyní ve vysílání", + "uniqueDjs": "Unikátní DJs", + "peakListeners": "Špičkoví posluchači", + "empty": "Dosud nebyla zaznamenána žádná historie rádia.", + "showLog": "Zobrazit protokol ({count})", + "colDj": "DJ", + "colShow": "Zobrazit", + "colStarted": "Zahájeno", + "colEnded": "Skončilo", + "colAirtime": "Vysílací čas", + "colListeners": "Posluchači", + "colNotes": "Poznámky", + "onAir": "ve vzduchu" + }, + "apiKeysForm": { + "title": "Rádiové klíče API", + "subtitle": "Klíče API pro externí rádiové integrace (radio_api_keys). Klíče se generují na straně serveru a zobrazují se maskované – při prvním vydání zkopírujte plnou hodnotu z databáze.", + "dbError": "Klíče API nelze načíst (databáze není k dispozici).", + "totalKeys": "Celkem klíčů", + "active": "Aktivní", + "inactive": "Neaktivní", + "generateKey": "Vygenerovat klíč", + "generateHint": "Tajný klíč je generován automaticky s kryptografickou náhodností — nezadáváte jej.", + "name": "Jméno", + "namePlaceholder": "Most AzureCast", + "rateLimit": "Limit sazby (požadavky/min)", + "allowedIps": "Povolené adresy IP (volitelné)", + "allowedIpsPlaceholder": "oddělené čárkou, prázdné = libovolné", + "generate": "Vygenerovat klíč", + "existingKeys": "Stávající klíče ({count})", + "noKeys": "Zatím žádné klíče API – vygenerujte si jeden výše.", + "colName": "Jméno", + "colKey": "klíč", + "colAllowedIps": "Povolené IP adresy", + "colRateLimit": "Limit sazby", + "colLastUsed": "Naposledy použité", + "colExpires": "Platnost vyprší", + "colStatus": "Stav", + "colActions": "Akce", + "maskedHint": "Zobrazí se pouze prvních 8 znaků", + "any": "jakýkoli", + "activeLabel": "aktivní", + "inactiveLabel": "neaktivní", + "deactivate": "Deaktivovat", + "activate": "Aktivovat", + "delete": "Smazat" + }, + "pointsForm": { + "title": "Body posluchače rádia", + "subtitle": "Odměňte posluchače měnou za čas strávený v rádiu. Úpravy zapisují do website_settings (klíče radio_points_*) a ničí mezipaměť nastavení běhového prostředí. Booleany používají 0/1.", + "saved": "Uloženo", + "points": "Body", + "enabled": "Povoleno", + "disabled": "Zakázáno", + "perMinute": "Za minutu", + "paidIn": "zaplaceno v {currency}", + "maxPerDay": "Max / den", + "unlimited": "Neomezené", + "minListeners": "Min. posluchači", + "settings": "Nastavení", + "pointsEnabled": "Body povoleny", + "pointsEnabledHint": "Hlavní přepínač pro udělování bodů posluchače.", + "currency": "Měna", + "currencyHint": "Do které peněženky se body vyplácejí.", + "pointsPerMinute": "Body za minutu", + "pointsPerMinuteHint": "Udělovaná částka za každou celou minutu poslechu.", + "maxPerDayHint": "Denní limit na uživatele. Použijte 0 pro neomezené.", + "minListenersHint": "Body se udělují pouze tehdy, když je naladěno alespoň tolik lidí.", + "save": "Uložte nastavení bodů" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Záložní seznam skladeb (radio_auto_dj_playlist) rádio rotuje, když nevysílá žádný živý DJ. Seřazeno podle pořadí řazení a poté názvu.", + "dbError": "Nelze načíst seznam stop AutoDJ (databáze není k dispozici).", + "tracks": "Skladby", + "active": "Aktivní", + "inactive": "Neaktivní", + "addTrack": "Přidat stopu", + "titlePlaceholder": "Název stopy", + "artist": "Umělec", + "album": "Album", + "artworkUrl": "URL uměleckého díla", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Doba trvání (sekundy)", + "durationPlaceholder": "např. 215", + "sortOrder": "Řadit pořadí", + "playlist": "Playlist ({count})", + "noTracks": "Zatím žádné stopy AutoDJ – přidejte jednu výše.", + "colOrder": "Objednat", + "colTitle": "Název", + "colArtist": "Umělec", + "colAlbum": "Album", + "colDuration": "Doba trvání", + "colPlays": "Hraje", + "colLastPlayed": "Naposledy hrané", + "colStatus": "Stav", + "colActions": "Akce", + "activeLabel": "aktivní", + "inactiveLabel": "neaktivní", + "deactivate": "Deaktivovat", + "activate": "Aktivovat", + "delete": "Smazat", + "trackTitle": "Název" + }, + "moderationPage": { + "title": "DJ moderování", + "subtitle": "Zkontrolujte a odstraňte rádiové výkřiky (50 nejnovějších).", + "recentShouts": "Nedávné výkřiky ({count})" + } + }, + "commandocentrum": { + "title": "Komandocentrum", + "subtitle": "Diagnostika, ovládání RCON a správa uživatelů", + "diagnostics": "Diagnostika", + "rcon": "RCON", + "userActions": "Akce uživatele", + "diagnosticsTitle": "Diagnostika emulátoru", + "memoryUsage": "Využití paměti", + "uptime": "Doba provozuschopnosti", + "onlineUsers": "Online uživatelé", + "roomsLoaded": "Místnosti nabité", + "refresh": "Obnovit", + "rconTitle": "RCON příkazy", + "rconPlaceholder": "Zadejte příkaz RCON…", + "rconSend": "Odeslat", + "rconSending": "Odesílání…", + "rconResponse": "Odezva", + "userActionsTitle": "Akce uživatele", + "username": "Uživatelské jméno", + "usernamePlaceholder": "Cílové uživatelské jméno", + "action": "Akce", + "execute": "Provést", + "actions": { + "disconnect": "Odpojit", + "alert": "Odeslat upozornění", + "giveCredits": "Dávejte kredity", + "giveBadge": "Dejte odznak", + "givePoints": "Dávejte body", + "ban": "Zákaz", + "kick": "Kopni" + }, + "messagePlaceholder": "Zpráva (pro upozornění)…", + "amountPlaceholder": "Částka…", + "badgePlaceholder": "Kód odznaku…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Konfigurace emulátoru", + "subtitle": "Zobrazení a úprava nastavení emulátoru a textů národního prostředí", + "settings": "Nastavení", + "texts": "Texty", + "search": "Hledat", + "searchPlaceholder": "Vyhledávací klávesy…", + "noSettings": "Nebyla nalezena žádná nastavení", + "noTexts": "Nebyly nalezeny žádné texty", + "edit": "Upravit", + "save": "Uložit", + "saving": "Ukládání…", + "cancel": "Zrušit", + "colKey": "klíč", + "colValue": "Hodnota", + "colType": "Typ", + "colActions": "Akce", + "editDialog": { + "title": "Edit: {key}", + "value": "Hodnota", + "valuePlaceholder": "Zadejte hodnotu…", + "save": "Uložte změny", + "cancel": "Zrušit" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Upozornění", + "subtitle": "Odesílejte upozornění pro celý hotel a prohlížejte si nedávná upozornění", + "sendAlert": "Odeslat upozornění na hotel", + "recentAlerts": "Nedávná upozornění ({count})", + "noRecentAlerts": "Žádná nedávná upozornění", + "form": { + "title": "Název upozornění", + "titlePlaceholder": "např. Údržba serveru do 10 minut", + "message": "Výstražná zpráva", + "messagePlaceholder": "Napište výstražnou zprávu…", + "type": "Typ", + "typeHotel": "Upozornění na celý hotel", + "typeStaff": "Pouze personál", + "urgent": "Naléhavé", + "send": "Odeslat upozornění", + "sending": "Odesílání…", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "ID", + "colTitle": "Název", + "colSentBy": "Odeslal", + "colType": "Typ", + "colDate": "Datum", + "colActions": "Akce", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Aktivity zaměstnanců", + "subtitle": "Auditní záznam akcí zaměstnanců na panelu administrátora", + "noLogs": "Dosud nebyla zaznamenána žádná aktivita zaměstnanců", + "colId": "ID", + "colUser": "Uživatel", + "colAction": "Akce", + "colTarget": "Cíl", + "colDescription": "Popis", + "colIp": "IP", + "colTimestamp": "Časové razítko", + "filterByUser": "Filtrovat podle uživatele…", + "filterByAction": "Filtrovat podle akce…", + "clearFilters": "Vymazat filtry", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Filtr slov", + "subtitle": "Spravujte filtrovaná slova a fráze v hotelu", + "addWord": "Přidat slovo", + "addWords": "Přidejte slova", + "noWords": "Zatím žádná filtrovaná slova", + "confirmDelete": "Odebrat slovo „{word}“ z filtru?", + "colId": "ID", + "colWord": "Slovo", + "colAddedBy": "Přidáno uživatelem", + "colCreated": "Vytvořeno", + "colActions": "Akce", + "form": { + "word": "Slovo", + "wordPlaceholder": "např. špatné slovo", + "addMore": "Přidat více slov (jedno na řádek)", + "save": "Přidat do filtru", + "saving": "Ukládání…", + "cancel": "Zrušit" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Režim údržby", + "subtitle": "Povolit nebo zakázat údržbu v celém hotelu", + "enabled": "Režim údržby je povolen", + "disabled": "Režim údržby je deaktivován", + "enable": "Povolit údržbu", + "disable": "Zakázat údržbu", + "message": "Hlášení o údržbě", + "messagePlaceholder": "Brzy se vrátíme!", + "staffAccess": "Umožněte personálu přístup během údržby", + "save": "Uložte nastavení", + "saving": "Ukládání…", + "confirmEnable": "Povolení údržby zabrání všem uživatelům, kteří nejsou zaměstnanci, v přístupu do hotelu. Pokračovat?", + "confirmDisable": "Zakázat režim údržby a obnovit přístup pro všechny uživatele?", + "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": "Oprávnění k úklidu", + "subtitle": "Nakonfigurujte, které hodnosti mají přístup ke kterým administrátorským sekcím", + "addPermission": "Přidat oprávnění", + "editPermission": "Oprávnění k úpravám", + "deletePermission": "Smazat oprávnění", + "noPermissions": "Nejsou nakonfigurována žádná oprávnění pro úklid", + "confirmDelete": "Smazat toto oprávnění?", + "colId": "ID", + "colRank": "Hodnost", + "colSection": "sekce", + "colActions": "Akce", + "form": { + "rankId": "ID hodnosti", + "rankIdPlaceholder": "Minimální hodnost", + "section": "Klíč sekce", + "sectionPlaceholder": "např. admin.dashboard", + "save": "Uložit oprávnění", + "saving": "Ukládání…", + "cancel": "Zrušit" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset Aplikováno!", + "cleared": "All Oprávnění cleared!", + "invalidRank": "Invalid Hodnost", + "testDone": "Test done: {count} Oprávnění found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Smazat ALL Oprávnění? This Akce cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Povolení", + "colDescription": "Popis", + "colMinRank": "Min. Hodnost", + "permissionKey": "Povolovací klíč", + "minRank": "Min. Hodnost", + "description": "Popis", + "permissions": "Oprávnění", + "permissionsCount": "{count} Oprávnění", + "permission": "Povolení", + "highestMinRank": "Highest min. Hodnost: {rank}", + "totalMinRank": "Total min. Hodnost sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Hodnosti", + "missingDeps": "{count} Chybí dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(Chybí)", + "rank": "Hodnost", + "count": "Count", + "searchPermission": "Hledat Oprávnění…", + "search": "Hledat", + "manage": "Manage", + "importSelection": "Importovat selection", + "noGroup": "Ne group", + "allGroups": "All groups", + "perGroup": "Oprávnění per group", + "perRank": "Oprávnění per Hodnost", + "rankOverviewHint": "All Oprávnění grouped by the Hodnost they are assigned to.", + "tabOverview": "Přehled", + "tabManage": "Manage", + "tabImport": "Importovat / Export", + "tabRanks": "Hodnost Přehled", + "tabPresets": "Předvolby", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "Importovat Oprávnění", + "importHint": "Paste a JSON array of Povolení objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "Importovat", + "exportTitle": "Export Oprávnění", + "exportHint": "Export all Oprávnění as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Povolení Předvolby", + "presetsHint": "Použít a predefined set of Oprávnění for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Moderování tools: Uživatel lookup, Zákazy, CFH handling, chat Protokoly.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Uživatelé, Pokoje, news, Nastavení, Obchod, events, Rádio & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including Povolení management and asset Importovat.", + "applyPreset": "Použít preset", + "clearAll": "Clear all Oprávnění", + "testTitle": "Test Hodnost access", + "testHint": "Enter a Hodnost number to see which Oprávnění would be granted.", + "test": "Test", + "auditTitle": "Povolení audit log", + "auditHint": "All changes to Úklid Oprávnění are logged.", + "auditLogsAt": "Audit Protokoly are available on the Audit log page.", + "viewAuditLogs": "Zobrazit audit Protokoly", + "importedWithErrors": "Imported {count} Oprávnění with {errors} errors", + "confirmClearAllDesc": "This will Odebrat every Povolení entry from the databáze. Are you sure?", + "confirmDeletePermission": "Smazat this Povolení permanently?", + "confirmBulkDelete": "Smazat {count} selected Oprávnění?", + "deleteSelected": "Smazat {count} selected", + "cancel": "Zrušit", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Uživatel", + "auditAction": "Akce", + "auditTarget": "Cíl", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Pokoje", + "subtitle": "Vyhledávejte a spravujte hotelové pokoje", + "search": "Hledat", + "searchPlaceholder": "Hledat podle jména, vlastníka nebo ID…", + "searchResults": "Pro dotaz „{query}“ bylo nalezeno {count, plural, one {# room} other {# rooms}}", + "noResults": "Nebyly nalezeny žádné pokoje", + "colId": "ID", + "colName": "Jméno", + "colOwner": "vlastník", + "colUsers": "Uživatelé", + "colState": "stát", + "colCategory": "Kategorie", + "colCreated": "Vytvořeno", + "colActions": "Akce", + "stateOpen": "Otevřít", + "stateClosed": "Zavřeno", + "stateLocked": "Zamčeno", + "stateInvisible": "Neviditelný", + "detail": { + "title": "Místnost: {name}", + "subtitle": "Vlastní: {owner}", + "overview": "Přehled", + "actions": "Akce", + "description": "Popis", + "noDescription": "Žádný popis", + "owner": "vlastník", + "users": "Uživatelé online", + "maxUsers": "Maximální počet uživatelů", + "category": "Kategorie", + "state": "stát", + "tags": "Tagy", + "noTags": "Žádné značky", + "created": "Vytvořeno", + "deleteRoom": "Smazat místnost", + "confirmDelete": "Smazat místnost „{name}“? Toto nelze vrátit zpět.", + "enterRoom": "Vstupte do místnosti", + "changeOwner": "Změnit vlastníka", + "changeOwnerPlaceholder": "Uživatelské jméno nového vlastníka" + } + }, + "emailTemplates": { + "title": "Šablony e-mailů", + "subtitle": "Správa šablon transakčních e-mailů", + "newTemplate": "+ Nová šablona", + "edit": "Upravit", + "delete": "Smazat", + "noTemplates": "Zatím žádné šablony e-mailů", + "confirmDelete": "Smazat šablonu „{name}“?", + "colId": "ID", + "colName": "Jméno", + "colSubject": "Předmět", + "colKey": "klíč", + "colUpdated": "Aktualizováno", + "colActions": "Akce", + "form": { + "name": "Jméno", + "namePlaceholder": "např. Uvítací e-mail", + "key": "klíč", + "keyPlaceholder": "např. uvítací_e-mail", + "subject": "Předmět", + "subjectPlaceholder": "Předmět e-mailu", + "body": "Text (HTML)", + "bodyPlaceholder": "

Vážený {username},

", + "variables": "Dostupné proměnné", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Uložit šablonu", + "saving": "Ukládání…", + "cancel": "Zrušit", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "téma", + "subtitle": "Přizpůsobte vzhled CMS", + "presets": "Předvolby", + "colours": "Barvy", + "css": "CSS", + "presetsTitle": "Předvolby motivu", + "presetsSubtitle": "Vyberte předem připravené barevné schéma", + "applyPreset": "Použít", + "presetApplied": "Předvolba použita: {preset}", + "customiseTitle": "Vlastní barvy", + "primary": "Primární", + "secondary": "Sekundární", + "accent": "Přízvuk", + "background": "Pozadí", + "surface": "Povrch", + "text": "Text", + "saveColours": "Uložit barvy", + "savingColours": "Ukládání…", + "cssTitle": "Vlastní CSS", + "cssSubtitle": "Chcete-li přepsat styly motivů, přidejte vlastní CSS", + "cssPlaceholder": "/* Vaše vlastní CSS zde */", + "saveCss": "Uložit CSS", + "savingCss": "Ukládání…", + "reset": "Obnovit výchozí nastavení", + "confirmReset": "Resetovat motiv na výchozí hodnoty?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Knihovna médií", + "subtitle": "Nahrávejte a spravujte mediální soubory", + "upload": "Nahrát", + "uploadTitle": "Nahrajte soubor", + "uploadSubtitle": "Přetažením nebo kliknutím nahrajte", + "uploadButton": "Vyberte soubor", + "uploading": "Nahrávání…", + "noFiles": "Zatím žádné mediální soubory", + "delete": "Smazat", + "confirmDelete": "Smazat tento soubor trvale?", + "search": "Hledat", + "searchPlaceholder": "Hledat podle názvu souboru…", + "colPreview": "Náhled", + "colName": "Jméno", + "colSize": "Velikost", + "colType": "Typ", + "colUploaded": "Nahráno", + "colActions": "Akce", + "copyUrl": "Kopírovat URL", + "urlCopied": "Adresa URL zkopírována do schránky" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Nahrajte a spravujte favicon webu", + "current": "Aktuální favicon", + "uploadLabel": "Nahrát favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO nebo SVG. Maximálně 2 MB.", + "upload": "Nahrát", + "uploading": "Nahrávání…", + "delete": "Odebrat", + "deleting": "Odebírání…", + "saved": "Favicon úspěšně uložen!", + "deleted": "Favicon úspěšně odstraněn!", + "error": "Něco se pokazilo", + "confirmDelete": "Odebrat favicon? Web již nebude zobrazovat vlastní favicon.", + "generator": { + "title": "Vygenerovat favicon", + "text": "Text", + "bgColor": "Barva pozadí", + "textColor": "Barva textu", + "rounded": "Zaoblené rohy", + "save": "Uložit jako favicon" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "Nastavení CMS", + "subtitle": "Správa konfigurace CMS párů klíč/hodnota", + "addSetting": "Přidat nastavení", + "edit": "Upravit", + "delete": "Smazat", + "noSettings": "Nebyla nalezena žádná nastavení", + "confirmDelete": "Smazat nastavení „{key}“?", + "colKey": "klíč", + "colValue": "Hodnota", + "colUpdated": "Aktualizováno", + "colActions": "Akce", + "form": { + "key": "klíč", + "keyPlaceholder": "např. hotel_name", + "value": "Hodnota", + "valuePlaceholder": "Nastavení hodnoty", + "save": "Uložit nastavení", + "saving": "Ukládání…", + "cancel": "Zrušit" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Domů", + "reload": "Obnovit", + "fullscreen": "Celá obrazovka", + "logout": "Odhlásit", + "onlineUsers": "Uživatelé online", + "emulatorOnline": "Emulátor online", + "emulatorOffline": "Emulátor offline", + "dragToMove": "Přetažením přesunete", + "hide": "Skrýt lištu", + "fullscreenExit": "Ukončit celou obrazovku", + "show": "Zobrazit lištu", + "emulatorUnknown": "Stav emulátoru neznámý" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Diagnostika souborů", + "preliminary": "Předběžná kontrola adres; obsah se ověří při importu.", + "http": "HTTP {status}", + "network": "Připojení selhalo", + "timeout": "Zdroj neodpověděl včas", + "invalidResponse": "Zdroj vrátil webovou stránku místo souboru", + "available": "Soubor nalezen; čeká na ověření", + "recover": "Přiložit originál a pokračovat", + "recoveryHint": "Vyberte {file} (do 50 MB). Ověří se jeho identita. Opakují se neúspěšné položky; dokončené importy zůstanou zachovány.", + "attach": "Vyberte původní soubor .nitro", + "working": "Ověřování nebo pokračování...", + "attached": "Odpovídající soubor přiložen", + "resume": "Opakovat neúspěšné importy s tímto souborem", + "invalidFile": "Vyberte odpovídající původní .nitro do 50 MB a zkuste to znovu.", + "resumeError": "Obnovte historii a použijte poslední pokus; zkontrolujte soubor a zkuste to znovu.", + "mismatchedFile": "Tento soubor patří jinému nábytku.", + "alreadyStarted": "Obnova již začala. Obnovte historii a použijte poslední pokus.", + "notEligible": "Tuto položku nelze obnovit přílohou." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/da.json b/src/messages/da.json index 6936eb67..42918c3a 100644 --- a/src/messages/da.json +++ b/src/messages/da.json @@ -1,3918 +1,4913 @@ { - "draftRecovery": { - "ready": "En gendannelseskopi gemmes i denne browser i 7 dage.", - "saved": "En gendannelseskopi er gemt i denne browser i 7 dage.", - "unavailable": "Gendannelse i browseren er ikke tilgængelig. Hold denne side åben, indtil dine ændringer er gemt.", - "found": "Der er en gendannelseskopi i denne browser, gemt den", - "restore": "Gendan browserkopi", - "discard": "Slet browserkopi", - "confirmRestore": "Erstat den aktuelle formular med browserens gendannelseskopi? Kontrollér indholdet, før du gemmer.", - "confirmDiscard": "Slet denne gendannelseskopi fra browseren? Den aktuelle formular forbliver uændret." - }, - "nav": { - "home": "Hjem", - "community": "Fællesskab", - "articles": "Artikler", - "photos": "Fotos", - "staff": "Personale", - "rankings": "Placeringer", - "guilds": "Gilder", - "leaderboards": "Leaderboards", - "rareValues": "Sjældne værdier", - "shop": "Butik", - "market": "Marked", - "assistance": "Assistance", - "helpCenter": "Hjælpecenter", - "myTickets": "Mine billetter", - "badges": "Badges", - "radio": "Radio", - "friends": "Venner", - "messages": "Beskeder", - "admin": "Admin", - "openMenu": "Åbn menuen", - "closeMenu": "Luk menuen", - "drawBadge": "Tegn badge", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} online", - "nitroClient": "Nitro klient", - "tagline": "En online virtuel verden, hvor du kan oprette din egen avatar, få venner, chatte, skabe rum og meget mere!", - "login": "Log ind", - "or": "Eller", - "createAccount": "Opret en konto" - }, - "footer": { - "copyright": "© {year} - {hotel} er et undervisningsprojekt uden fortjeneste" - }, - "pages": { - "staff": { - "title": "Personale", - "subtitle": "Holdet bag hotellet", - "ranksTitle": "Rangerer", - "ranksSubtitle": "Hvad hver del af teamet tager sig af", - "membersTitle": "Teammedlemmer", - "membersEmptySubtitle": "Ingen at vise lige nu", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "Ingen ansatte at vise.", - "colUsername": "Brugernavn", - "colRank": "Rang", - "colMotto": "Motto" - }, - "leaderboard": { - "title": "Leaderboard", - "subtitle": "Top 20 spillere efter {currency}", - "tab_credits": "Credits", - "tab_diamonds": "Diamanter", - "tab_duckets": "Ænder", - "tab_achievement": "Præstationer", - "tab_respects": "Respekter", - "tab_onlinetime": "Online tid", - "emptyState": "Ingen placeringer at vise endnu.", - "colAvatar": "Avatar", - "colPlayer": "Spiller" - }, - "friends": { - "title": "Venner", - "emptySubtitle": "Du har ingen tilføjet venner endnu", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Tilføj venner på hotellet, så dukker de op her.", - "noMotto": "Intet 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": "Beskeder", - "subtitle": "Venneanmodninger og offlinebeskeder venter på dig", - "requestsTitle": "Venneanmodninger", - "requestsEmptySubtitle": "Ingen har bedt om at være din ven endnu", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "Ingen afventende venneanmodninger.", - "wantsToBeFriend": "ønsker at være din ven.", - "accept": "Accepter", - "offlineTitle": "Offline beskeder", - "offlineEmptySubtitle": "Din indbakke er tom", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "Du har ingen offline beskeder.", - "unknownUser": "Bruger #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Intet motto", - "statRank": "Rang", - "statCredits": "Credits", - "statRegistered": "Registreret", - "badgesTitle": "Badges", - "badgesEmpty": "Ingen badges endnu.", - "photosTitle": "Fotos", - "photosEmpty": "Ingen billeder endnu.", - "guestbookTitle": "Gæstebog", - "guestbookSubtitle": "Beskeder på {username}s væg", - "leaveMessage": "Efterlad en besked", - "guestbookPlaceholder": "Skriv noget i {username}s gæstebog...", - "post": "Indlæg", - "loginToPost": "Log ind for at efterlade en gæstebogsbesked.", - "guestbookEmpty": "Ingen gæstebogsindlæg endnu.", - "unknownUser": "Bruger #{id}", - "statDuckets": "Ænder", - "statDiamonds": "Diamanter", - "walletTitle": "Tegnebog", - "friendsTitle": "Venner", - "friendsSubtitle": "Folk på hotellet, de hænger ud med", - "friendsEmpty": "Ingen venner at vise.", - "roomsTitle": "Værelser", - "roomsSubtitle": "Værelser de ejer", - "roomsEmpty": "Ingen lokaler at vise.", - "roomUntitled": "Unavngivet værelse", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Placeringer", - "subtitle": "De 12 bedste spillere rangeret efter kreditter", - "emptyState": "Ingen spillere at rangere endnu." - }, - "home": { - "welcome": "Velkommen til {hotelName}", - "welcomeSubtitle": "Dit retrohotel, nu drevet af Next.js", - "welcomeBody": "Hæng ud, saml møbler og mød venner.", - "enterHotel": "Indtast {hotelName}", - "onlineFriends": "Online venner", - "noFriendsOnline": "Ingen venner online", - "register": "TILMELD DIG NU", - "joinNow": "Tilmeld dig {hotelName} i dag!", - "recentUsers": "Seneste brugere", - "recentPhotos": "Seneste fotos", - "latestNews": "Seneste nyt", - "newsTitle": "Seneste nyt", - "newsSubtitle": "Frisk fra hotellet", - "allNews": "Alle nyheder →", - "allUsers": "Fællesskab →", - "noArticles": "Ingen artikler endnu.", - "noPhotos": "Ingen billeder endnu.", - "noUsers": "Ingen brugere online", - "latestArticle": "Seneste artikel", - "latestUsers": "Nyeste borgere ({count} i alt)", - "statsOnline": "Online", - "statsCitizens": "Borgere", - "statsRooms": "Værelser", - "statsArticles": "Artikler", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Skab dit unikke look", - "featuresFurniture": "Møbler", - "featuresFurnitureDesc": "Dekorér værelser med genstande", - "featuresCommunity": "Fællesskab", - "featuresCommunityDesc": "Få venner og chat", - "featuresGames": "Spil", - "featuresGamesDesc": "Konkurrér og hav det sjovt" - }, - "news": { - "title": "Nyheder", - "subtitle": "De seneste meddelelser, begivenheder og opdateringer fra hotellet", - "noArticles": "Ingen artikler endnu." - }, - "article": { - "backToNews": "← Nyheder", - "reactionsTitle": "Reaktioner", - "reactionsSubtitle": "Fortæl os, hvad du synes", - "reaction": { - "like": "Ligesom", - "love": "Kærlighed", - "wow": "Wow" - }, - "removeReaction": "Klik for at fjerne din reaktion", - "reactWith": "Reager med {reaction}", - "noReactions": "Ingen reaktioner endnu.", - "logIn": "Log ind", - "toReact": "at reagere.", - "commentsTitle": "Kommentarer", - "commentsSubtitle": "Deltag i samtalen", - "commentsCount": "{count} indtil videre", - "noComments": "Ingen kommentarer endnu. Vær den første til at kommentere.", - "userNumber": "Bruger #{id}", - "addComment": "Tilføj en kommentar", - "commentPlaceholder": "Skriv din kommentar...", - "postComment": "Skriv kommentar", - "toComment": "at efterlade en kommentar.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Fotos", - "subtitle": "De seneste snapshots taget på hotellet", - "noPhotos": "Ingen billeder endnu.", - "photoAlt": "Foto af bruger #{id}", - "byUser": "af bruger #{id}" - }, - "badges": { - "title": "Badges", - "subtitle": "Badges kan du tjene og vise frem rundt omkring på hotellet", - "noBadges": "Ingen tilgængelige badges endnu." - }, - "community": { - "title": "Fællesskab", - "subtitle": "Alt sker omkring hotellet på ét sted", - "open": "Åbn →", - "links": { - "rankings": { - "title": "Placeringer", - "text": "Se de rigeste spillere på hotellet, rangeret efter kreditter." - }, - "staff": { - "title": "Personale", - "text": "Mød holdet, der holder hotellet kørende hver dag." - }, - "news": { - "title": "Nyheder", - "text": "De seneste meddelelser, begivenheder og opdateringer." - }, - "photos": { - "title": "Fotos", - "text": "Snapshots deles af fællesskabet fra omkring hotellet." - }, - "guilds": { - "title": "Gilder", - "text": "Gennemse de grupper, spillere har oprettet og sluttet sig til." - }, - "leaderboards": { - "title": "Leaderboards", - "text": "Hvem er på toppen i denne sæson på tværs af hotellets statistik." - } - } - }, - "guilds": { - "title": "Gilder", - "subtitle": "Gennemse de grupper, spillere har oprettet og sluttet sig til", - "empty": "Ingen guilds endnu.", - "unnamedGuild": "Unavngiven laug", - "noDescription": "Ingen beskrivelse" - }, - "guild": { - "allGuilds": "← Alle laug", - "unnamedGuild": "Unavngiven laug", - "noDescription": "Ingen beskrivelse", - "memberSingular": "Medlem", - "memberPlural": "Medlemmer", - "founded": "Grundlagt", - "forumLink": "Forum →", - "discussion": "Diskussion", - "membersTitle": "Medlemmer", - "memberLowerSingular": "medlem", - "memberLowerPlural": "medlemmer", - "noMembers": "Ingen medlemmer.", - "owner": "Ejer", - "noMotto": "Intet motto" - }, - "guildForum": { - "backToGuild": "← Tilbage til guild", - "unnamedGuild": "Unavngiven laug", - "forumTitle": "{guild} – Forum", - "threadSingular": "tråd", - "threadPlural": "tråde", - "newThread": "+ Ny tråd", - "empty": "Ingen tråde i dette forum endnu.", - "colSubject": "Emne", - "colAuthor": "Forfatter", - "colPosts": "Indlæg", - "colDate": "Dato", - "noSubject": "(intet emne)", - "pinned": "Fastgjort", - "locked": "Låst", - "userNumber": "Bruger #{id}", - "unknown": "Ukendt", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Tilbage til forum", - "unnamedGuild": "Unavngiven laug", - "title": "Ny tråd", - "subtitle": "i {guild} forum", - "subjectLabel": "Emne", - "subjectPlaceholder": "Tråd emne", - "messageLabel": "Besked", - "messagePlaceholder": "Skriv dit åbningsindlæg...", - "postThread": "Post tråd", - "cancel": "Annuller", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Butik", - "subtitle": "Fyld op på din konto og få fat i eksklusive pakker, valuta og badges.", - "browsingCategory": "Gennemse {category}-pakkerne.", - "all": "Alle", - "allPackages": "Alle pakker", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "Ingen tilgængelige pakker lige nu.", - "buy": "Køb", - "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": "Fyld op med PayPal", - "subtitle": "Betal sikkert med PayPal, og dine kreditter tilføjes i det øjeblik, betalingen slettes.", - "cancelled": "Checkout blev annulleret - ingen betaling blev taget.", - "chooseAmount": "Vælg et beløb", - "notConfiguredPre": "PayPal er ikke konfigureret endnu. En administrator skal indstille", - "notConfiguredAnd": "og", - "notConfiguredOptional": "(og eventuelt", - "notConfiguredPost": "for sandkasse vs. live).", - "balanceTitle": "Din balance", - "signedInAs": "Logget ind som {username}", - "credits": "Credits", - "creditsPerUnit": "Kreditter pr. 1,00 {currency}", - "rateLine": "Du modtager {amount}-kreditter pr. 1,00 {currency}. Credits vises i spillet, næste gang du logger ind." - }, - "marketplace": { - "title": "Markedsplads", - "subtitle": "Gennemse møbler og sjældne varer opført af spillere. Opslag placeres i spillet og opdateres live - gå ind på hotellet for at give et tilbud.", - "activeOffers": "Aktive tilbud", - "sellers": "Sælgere", - "totalValue": "Samlet værdi", - "activeListings": "Aktive opslag", - "mostRecentFirst": "Senest opført først", - "empty": "Der er ingen aktive markedspladstilbud lige nu. Kom tilbage senere.", - "colOffer": "Tilbud", - "colItem": "Vare", - "colSeller": "Sælger", - "colPrice": "Pris", - "colListed": "Opført", - "itemLabel": "Vare nr. {id}", - "userLabel": "Bruger #{id}", - "justNow": "lige nu", - "minutesAgo": "for {count} m siden", - "hoursAgo": "for {count} t siden", - "daysAgo": "for {count}d siden" - }, - "rares": { - "title": "Sjældne værdier", - "subtitle": "Få et overblik over alle de sjældne på hotellet, grupperet efter kategori.", - "empty": "Vi har i øjeblikket ingen sjældne opført her.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Se sjældne →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Alle sjældne", - "empty": "Der er endnu ingen sjældne i denne kategori.", - "colRare": "Sjælden", - "colCredits": "Credits", - "colCurrency": "Valuta", - "creditsValue": "{value} kreditter", - "duckets": "Ænder", - "diamonds": "Diamanter", - "credits": "Credits" - }, - "redeem": { - "title": "Indløs en voucher", - "subtitle": "Har du en rabatkode? Indtast den nedenfor for at tilføje belønningen til din konto.", - "enterCode": "Indtast din kode", - "oncePerAccount": "Hver voucher kan kun indløses én gang pr. konto.", - "balanceTitle": "Din balance", - "signedInAs": "Logget ind som {username}", - "credits": "Credits", - "instantCredit": "Indløste belønninger krediteres øjeblikkeligt og vises i spillet, næste gang du logger ind." - }, - "help": { - "title": "Hjælpecenter", - "subtitle": "Find guider, supportemner og hotelreglerne – alt hvad du behøver for at få hjælp.", - "myTickets": "Mine billetter →", - "topicsTitle": "Support emner", - "topicsSubtitle": "Gennemse guider og svar på almindelige spørgsmål", - "topicsEmpty": "Ingen hjælpeemner endnu.", - "rulesTitle": "Hotel regler", - "rulesSubtitle": "Læs venligst disse før du hænger ud på hotellet", - "rulesEmpty": "Ingen regler offentliggjort endnu.", - "categoryEmpty": "Ingen regler i denne kategori." - }, - "helpCategory": { - "back": "← Hjælpecenter", - "topicSubtitle": "Emne i Hjælp", - "moreTitle": "Flere hjælpeemner", - "moreSubtitle": "Hop til et andet supportemne" - }, - "helpTickets": { - "title": "Hjælp billetter", - "subtitle": "Indsend en billet til personalet og spor dine åbne anmodninger.", - "statTotal": "Samlet antal billetter", - "statOpen": "Åbn", - "statClosed": "Lukket", - "newTitle": "Ny billet", - "newSubtitle": "Beskriv dit problem, og personalet vil følge op", - "subjectPlaceholder": "Emne", - "contentPlaceholder": "Beskriv dit problem...", - "submit": "Indsend billet", - "listTitle": "Dine billetter", - "listSubtitle": "Hver anmodning, du har sendt til personalet", - "listEmpty": "Du har ingen billetter endnu.", - "colId": "ID", - "colSubject": "Emne", - "colStatus": "Status", - "colCreated": "Oprettet", - "statusOpen": "Åbn", - "statusClosed": "Lukket", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Ansøg om {hotel} personale", - "subtitle": "Vi åbner personaleansøgninger i ny og næ. Hvis du støder på en stilling, du føler, at du ville passe perfekt ind i, så tøv ikke med at søge den.", - "noPositionsTitle": "Ingen ledige stillinger", - "noPositionsBody": "Der er i øjeblikket ingen ledige stillinger. Venligst vend tilbage på et senere tidspunkt for at tjekke, om vi har åbninger inden da. Tak for din interesse.", - "noDeadline": "Ingen deadline fastsat", - "deadline": "Ansøgningsfrist: {date}", - "alreadyApplied": "Du har allerede ansøgt om {rank}", - "aboutYou": "Om dig", - "aboutPlaceholder": "Fortæl os, hvorfor du ville være en stor {rank}...", - "applyFor": "Ansøg om {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": "Ansøg om {hotel}-teamet", - "subtitle": "Vi åbner teamansøgninger med jævne mellemrum. Hvis du ser et hold du passer, så tøv ikke med at ansøge!", - "noPositionsTitle": "Ingen holdstillinger åbne", - "noPositionsBody": "Der er i øjeblikket ingen ledige holdstillinger. Venligst vend tilbage senere for at se efter nye åbninger. Tak!", - "pending": "Din ansøgning afventer", - "aboutYou": "Om dig", - "aboutPlaceholder": "Fortæl os, hvorfor du ville passe godt til {rank}...", - "applyFor": "Ansøg om {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": "Stil ind på hotellets radio — live DJ-sæt, anmodninger og shoutouts.", - "nowPlaying": "Spiller nu", - "nothingPlaying": "Intet spiller lige nu.", - "onAir": "I luften: {dj}", - "noDj": "Ingen DJ i luften.", - "audioUnsupported": "Din browser understøtter ikke lydelementet.", - "streamOffline": "Streamen er i øjeblikket offline.", - "exploreTitle": "Udforsk radioen", - "exploreSubtitle": "Tidsplan, råb, anmodninger og mere", - "linkSchedule": "Tidsplan", - "linkScheduleText": "Vores ugentlige line-up af DJs og shows.", - "linkShouts": "Råber", - "linkShoutsText": "Råb og anmodninger fra fællesskabet.", - "linkRequests": "Forespørgsler", - "linkRequestsText": "Bed DJ'en om at spinne dit yndlingsnummer.", - "linkApply": "Ansøg som DJ", - "linkApplyText": "Slut dig til holdet og gå i æteren.", - "linkLeaderboard": "Leaderboard", - "linkLeaderboardText": "Toplyttere rangeret efter optjente point.", - "todayTitle": "Dagens tidsplan", - "todayTitleWithDay": "Dagens tidsplan · {day}", - "todaySubtitle": "Hvad er der i æteren i dag", - "fullWeek": "Hel uge →", - "noShowsToday": "Ingen forestillinger planlagt i dag.", - "colTime": "Tid", - "colShow": "Vis", - "colDj": "DJ", - "untitledShow": "Udsendelse uden titel", - "userNumber": "Bruger #{id}" - }, - "radioSchedule": { - "title": "Radioskema", - "subtitle": "Vores ugentlige line-up af DJs og shows", - "empty": "Ingen forestillinger planlagt endnu.", - "colDay": "dag", - "colTime": "Tid", - "colDj": "DJ", - "colShow": "Vis", - "noShows": "Ingen shows" - }, - "radioShouts": { - "title": "Radio råb", - "subtitle": "Råb og anmodninger fra fællesskabet", - "postTitle": "Send et råb", - "postSubtitle": "Send en besked til DJ on air", - "messageLabel": "Din besked", - "messagePlaceholder": "Send et råb til DJ'en...", - "shoutButton": "Råb", - "loginToPost": "Log ind for at sende et råb.", - "latestTitle": "Seneste råb", - "latestSubtitle": "De seneste beskeder fra lyttere", - "empty": "Ingen råb endnu. Vær den første!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Radiokonkurrencer", - "subtitle": "Stil ind og deltag i vores seneste on-air konkurrencer", - "empty": "Ingen konkurrencer endnu.", - "contestLabel": "Konkurrence #{id}", - "dateUnknown": "Dato ukendt" - }, - "radioGiveaways": { - "title": "Radio Giveaways", - "subtitle": "Lyt med for at få din chance for at vinde i vores radio giveaways", - "empty": "Ingen giveaways endnu.", - "giveawayLabel": "Giveaway #{id}", - "dateUnknown": "Dato ukendt" - }, - "radioLeaderboard": { - "title": "Radiolytter Leaderboard", - "subtitle": "Top 50 lyttere efter optjente point ved at stille ind på radioen", - "empty": "Ingen lytterpoint at vise endnu.", - "colRank": "Rang", - "colAvatar": "Avatar", - "colListener": "Lytter", - "colPoints": "Points" - }, - "radioRequests": { - "formTitle": "Send en anmodning", - "formSubtitle": "Bed DJ'en om at spille dit yndlingsnummer", - "songLabel": "Sang", - "songPlaceholder": "Titel på sangen", - "artistLabel": "Kunstner", - "artistPlaceholder": "Kunstnerens navn (valgfrit)", - "submitButton": "Indsend anmodning", - "loginToRequest": "Log ind for at indsende en anmodning.", - "latestTitle": "Seneste anmodninger", - "latestSubtitle": "De senest efterspurgte sange", - "empty": "Ingen anmodninger endnu.", - "colSong": "Sang", - "colArtist": "Kunstner", - "colRequester": "Anmoder", - "colDate": "Dato", - "colStatus": "Status", - "statusPending": "Afventer", - "statusApproved": "Godkendt", - "statusPlayed": "Spillede", - "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": "Ansøg om at blive Radio DJ", - "subtitle": "Fortæl os om dig selv, og hvorfor du ville passe godt til æteren", - "latestTitle": "Din seneste ansøgning", - "statusLabel": "Status:", - "submittedOn": "· indsendt {date}", - "submitAgain": "Du kan indsende igen nedenfor, hvis dine oplysninger er ændret.", - "formTitle": "Ansøgningsskema", - "formSubtitle": "Alle felter markeret som obligatoriske skal udfyldes", - "realNameLabel": "Rigtigt navn", - "realNamePlaceholder": "Dit fulde navn", - "ageLabel": "Alder", - "availabilityLabel": "Tilgængelighed", - "availabilityPlaceholder": "Hvilke dage og tidspunkter kan du sende?", - "musicStyleLabel": "Musik stil", - "musicStylePlaceholder": "f.eks. House, Pop, Hip-Hop", - "experienceLabel": "Erfaring", - "optional": "(valgfrit)", - "experiencePlaceholder": "Har du tidligere erfaring med DJ eller vært?", - "motivationLabel": "Motivation", - "motivationPlaceholder": "Hvorfor vil du være med på radioholdet?", - "submitButton": "Indsend ansøgning", - "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": "Kontoindstillinger", - "accountSettingsSubtitle": "Administrer din profil, sikkerhed og tilknyttede konti", - "publicProfile": "Din offentlige profil", - "noMotto": "Intet motto", - "noEmail": "Ingen e-mail på filen", - "changeMotto": "Skift motto", - "changeMottoSubtitle": "Opdateres øjeblikkeligt i spillet, hvis du er online", - "mottoPlaceholder": "Dit motto", - "saveMotto": "Gem motto", - "securityTitle": "Sikkerhed", - "securitySubtitle": "To-faktor autentificering", - "securityDescription": "Tilføj et ekstra beskyttelseslag til din konto.", - "twoFactorLink": "To-faktor autentificering" - }, - "settings2fa": { - "backToSettings": "← Indstillinger", - "title": "To-faktor autentificering", - "subtitle": "Tilføj et ekstra sikkerhedslag med en godkendelsesapp", - "nowEnabled": "2FA er nu aktiveret. 🔒", - "disabledNotice": "2FA er blevet deaktiveret.", - "badCode": "Den kode var ikke gyldig – prøv igen.", - "noAppKeyPrefix": "2FA er ikke tilgængelig indtil", - "noAppKeyMiddle": "er konfigureret (den samme Laravel", - "noAppKeySuffix": "som din AtomCMS installerer, så eksisterende hemmeligheder forbliver læsbare).", - "isEnabled": "2FA er aktiveret", - "onYourAccount": "på din konto.", - "disable": "Deaktiver 2FA", - "scanOrEnter": "Scan eller indtast denne tast", - "scanInstructions": "Føj dette til Google Authenticator / Authy, og indtast derefter den 6-cifrede kode for at bekræfte.", - "manualKey": "Manuel nøgle:", - "codePlaceholder": "6-cifret kode", - "confirm": "Bekræft", - "enableIntro": "Tilføj et ekstra sikkerhedslag med en godkendelsesapp.", - "enable": "Aktiver 2FA" - }, - "title": "Tilknyttede konti", - "subtitle": "Link en social konto, så du kan logge ind med et enkelt klik", - "connected": "Forbundet", - "unavailable": "Ikke tilgængelig", - "login": { - "title": "Log ind", - "subtitle": "Velkommen tilbage - log ind for at komme ind på hotellet.", - "subtitle2fa": "Indtast den 6-cifrede kode fra din autentificering.", - "usernamePlaceholder": "Brugernavn", - "passwordPlaceholder": "Adgangskode", - "codePlaceholder": "2FA kode", - "pleaseWait": "Vent venligst...", - "verify": "Bekræft", - "signIn": "Log ind", - "or": "eller", - "noAccount": "Ingen konto?", - "createOne": "Opret en", - "forgotPassword": "Glemt adgangskode?", - "errorInvalidCredentials": "Ugyldigt brugernavn eller adgangskode", - "errorInvalid2fa": "Ugyldig 2FA-kode", - "welcomeBack": "Velkommen tilbage", - "welcomeBackSub": "Log ind for at fortsætte til {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Opret konto", - "subtitle": "Kom med på hotellet - det tager kun et øjeblik.", - "username": "Brugernavn", - "email": "E-mail", - "password": "Adgangskode", - "confirmPassword": "Gentag adgangskoden", - "usernamePlaceholder": "Brugernavn", - "emailPlaceholder": "E-mail", - "passwordPlaceholder": "Adgangskode (min. 6 tegn)", - "confirmPasswordPlaceholder": "Gentag adgangskoden", - "selectOutfit": "Vælg dit outfit", - "termsAccept": "Jeg er 18+ og accepterer vilkårene og reglerne for {hotel}.", - "createAccount": "Opret konto", - "creatingAccount": "Opretter konto...", - "redirecting": "Omdirigerer til din konto...", - "alreadyHaveAccount": "Har du allerede en konto? Log ind!", - "register": "Tilmeld dig", - "termsError": "Du skal acceptere vilkårene og reglerne for at registrere dig.", - "usernameError": "Brugernavn er påkrævet.", - "emailError": "Gyldig e-mail er påkrævet.", - "passwordError": "Adgangskoden skal være på mindst 6 tegn.", - "confirmPasswordError": "Adgangskoder stemmer ikke overens.", - "termsRequired": "Du skal acceptere vilkårene og reglerne.", - "usernameRequired": "Brugernavn er påkrævet.", - "emailRequired": "E-mail er påkrævet.", - "passwordRequired": "Adgangskode er påkrævet.", - "passwordsDontMatch": "Adgangskoder stemmer ikke overens.", - "alreadyHaveAccountPre": "Har du allerede en konto?", - "alreadyHaveAccountLink": "Log ind", - "whoIsOnline": "Hvem er online", - "usersOnline": "{count} online" - }, - "forgot": { - "title": "Nulstil adgangskode", - "subtitle": "Vi sender dig en e-mail med et sikkert link for at angive en ny adgangskode.", - "sentNotice": "Hvis denne e-mail er registreret, er et nulstillingslink blevet sendt. Tjek din indbakke.", - "emailPlaceholder": "Din e-mail", - "sendResetLink": "Send nulstillingslink", - "backToLogin": "Tilbage til login", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Indstil en ny adgangskode", - "subtitle": "Vælg en stærk adgangskode, du ikke bruger andre steder.", - "passwordPlaceholder": "Ny adgangskode (min. 6 tegn)", - "resetPassword": "Nulstil adgangskode", - "backToLogin": "Tilbage til login" - }, - "verify": { - "verifiedTitle": "Du er klar", - "verifiedSubtitle": "E-mail bekræftet", - "verifiedBody": "Din e-mailadresse er blevet bekræftet. Du kan nu logge ind og spille.", - "goToLogin": "Gå til login", - "alreadyTitle": "Allerede bekræftet", - "alreadySubtitle": "Intet tilbage at gøre", - "alreadyBody": "Denne e-mailadresse er allerede blevet bekræftet.", - "unavailableTitle": "Prøv igen om lidt", - "unavailableSubtitle": "Server utilgængelig", - "unavailableBody": "Vi kunne ikke nå serveren for at bekræfte din e-mail. Prøv venligst linket igen om et øjeblik.", - "invalidTitle": "E-mailbekræftelse", - "invalidSubtitle": "Ugyldigt eller udløbet link", - "invalidBody": "Dette bekræftelseslink er ikke gyldigt. Sørg for, at du har åbnet hele linket fra din e-mail, eller anmod om et nyt.", - "backToLogin": "Tilbage til login" - }, - "banned": { - "title": "Du er bandlyst", - "subtitle": "Konto suspenderet", - "body": "Din konto er blevet suspenderet fra hotellet.", - "reasonLabel": "Årsag:", - "permanent": "Dette forbud er permanent.", - "expires": "Udløber {date}.", - "contactStaff": "Hvis du mener, at dette er en fejl, skal du kontakte personaleteamet." - }, - "maintenance": { - "title": "{hotel} er under vedligeholdelse", - "subtitle": "Vi vender snart tilbage", - "staffCanLogIn": "Personalet kan stadig logge ind." - }, - "admin": { - "nav": { - "overview": "Oversigt", - "dashboard": "Dashboard", - "content": "Indhold", - "articles": "Artikler", - "tags": "Tags", - "navigator": "Navigator", - "helpCenter": "Hjælpecenter", - "advertisements": "Annoncer", - "writeableBoxes": "Skrivbare kasser", - "photos": "Fotos", - "tickets": "Billetter", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Brugere og adgang", - "users": "Brugere", - "bans": "Forbud", - "ipManagement": "IP-håndtering", - "vpn": "VPN", - "applications": "Ansøgninger", - "teams": "Hold", - "permissions": "Tilladelser", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Økonomi", - "catalog": "Katalog", - "shop": "Butik", - "transactions": "Transaktioner", - "vouchers": "Kuponer", - "subscriptions": "Abonnementer", - "rareValues": "Sjældne værdier", - "badges": "Badges", - "achievements": "Præstationer", - "calendar": "Kalender", - "radio": "Radio", - "radioHistory": "Radiohistorie", - "radioBanners": "Bannere", - "radioEmbed": "Integrer", - "radioApiKeys": "API nøgler", - "radioModeration": "Moderering", - "radioSettings": "Indstillinger", - "radioMonitoring": "Overvågning", - "radioPoints": "Points", - "radioRanks": "Rangerer", - "radioAutodj": "Auto DJ", - "system": "System", - "commandocentrum": "Kommandocentrum", - "emulator": "Emulator", - "alerts": "Advarsler", - "logs": "Logs", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Ord filter", - "maintenance": "Vedligeholdelse", - "rooms": "Værelser", - "emailTemplates": "Email skabeloner", - "theme": "Tema", - "media": "Medier", - "favicon": "Favicon", - "sounds": "Lyde", - "translations": "Oversættelser", - "import": "Importer", - "settings": "Indstillinger", - "backToSite": "Tilbage til webstedet", - "housekeeping": "Husholdning", - "hotelManagementPanel": "Hotel management panel", - "rankLabel": "Rangering {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Dashboard", - "subtitle": "Hotel oversigt & live status", - "playersOnline": "Spillere online", - "articles": "Artikler", - "activeBans": "Aktive forbud", - "database": "Database", - "databaseConnected": "Forbundet", - "databaseDown": "Ned", - "usersByRank": "Brugere efter rang", - "noAccountsToBreakDown": "Ingen konti at opdele endnu", - "rankLabel": "Rangering {rank}", - "rankWithCount": "Ranger {rank}: {count} konti", - "recentStaffActivity": "Seneste personaleaktivitet", - "viewAll": "Se alle", - "noStaffActivityLogged": "Ingen personaleaktivitet logget endnu" - }, - "articles": { - "title": "Artikler", - "subtitle": "Nyhedsartikler — 50 seneste", - "newArticle": "+ Ny artikel", - "edit": "Rediger", - "delete": "Slet", - "noArticles": "Ingen artikler endnu", - "confirmDelete": "Er du sikker på, at du vil slette \"{title}\"?", - "colTitle": "Titel", - "colSlug": "Snegl", - "colAuthor": "Forfatter", - "colCreated": "Oprettet", - "colActions": "Handlinger", - "form": { - "title": "Titel", - "titlePlaceholder": "Artiklens titel", - "slug": "Snegl", - "slugPlaceholder": "artikel-url-slug", - "category": "Kategori", - "categoryPlaceholder": "Vælg en kategori", - "body": "Krop", - "bodyPlaceholder": "Skriv dit artikelindhold...", - "image": "Billede", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Miniaturebillede", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Udgivet", - "featured": "Udvalgte", - "save": "Gem artiklen", - "saving": "Gemmer...", - "deleteArticle": "Slet artikel", - "deleteConfirm": "Denne handling kan ikke fortrydes. Artiklen fjernes permanent.", - "cancel": "Annuller", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Tags", - "subtitle": "Artikel tags / kategorier", - "addTag": "Tilføj tag", - "name": "Navn", - "namePlaceholder": "Tag navn", - "backgroundColour": "Baggrundsfarve", - "createTag": "Opret tag", - "editTag": "Rediger tag", - "updateTag": "Opdater tag", - "deleteTag": "Slet tag", - "confirmDelete": "Vil du slette \"{name}\"?", - "noTags": "Ingen tags endnu", - "colId": "ID", - "colTag": "Tag", - "colColour": "Farve", - "colUsedBy": "Brugt af", - "colCreated": "Oprettet", - "colActions": "Handlinger" - }, - "navigation": { - "title": "Navigator", - "flatCategories": "Flade kategorier", - "publicRooms": "Offentlige lokaler", - "addCategory": "Tilføj kategori", - "editCategory": "Rediger kategori", - "deleteCategory": "Slet kategori", - "categoryName": "Kategorinavn", - "categoryNamePlaceholder": "f.eks. Chill & Chat", - "categoryOrder": "Bestil", - "roomName": "Værelsesnavn", - "roomNamePlaceholder": "f.eks. Velkommen Lounge", - "roomId": "Rum ID", - "roomIdPlaceholder": "Numerisk rum-id", - "save": "Gem", - "cancel": "Annuller", - "noCategories": "No categories yet", - "noPublicRooms": "Ingen offentlige lokaler endnu", - "colId": "ID", - "colName": "Navn", - "colOrder": "Bestil", - "colRooms": "Værelser", - "colActions": "Handlinger" - }, - "helpCenter": { - "title": "Hjælpecenter", - "subtitle": "Supportindlæg og FAQ-håndtering", - "entries": "Indgange", - "newEntry": "+ Ny post", - "edit": "Rediger", - "delete": "Slet", - "noEntries": "Ingen poster endnu", - "confirmDelete": "Vil du slette \"{title}\"?", - "colId": "ID", - "colTitle": "Titel", - "colCategory": "Kategori", - "colCreated": "Oprettet", - "colActions": "Handlinger", - "form": { - "title": "Titel", - "titlePlaceholder": "Indgangstitel", - "category": "Kategori", - "categoryPlaceholder": "Vælg kategori", - "body": "Krop", - "bodyPlaceholder": "Skriv svaret...", - "save": "Gem post", - "saving": "Gemmer...", - "deleteEntry": "Slet post", - "cancel": "Annuller" - } - }, - "ads": { - "title": "Annoncer", - "subtitle": "Administrer hotelannoncer og reklamebannere", - "newAd": "+ Ny annonce", - "edit": "Rediger", - "delete": "Slet", - "noAds": "Ingen annoncer endnu", - "confirmDelete": "Vil du slette denne annonce?", - "colId": "ID", - "colName": "Navn", - "colImage": "Billede", - "colUrl": "URL", - "colViews": "Visninger", - "colStatus": "Status", - "colCreated": "Oprettet", - "colActions": "Handlinger", - "form": { - "name": "Navn", - "namePlaceholder": "Annoncenavn", - "image": "Billed-URL", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Mål-URL", - "urlPlaceholder": "https://example.com", - "enabled": "Aktiveret", - "save": "Gem annonce", - "saving": "Gemmer...", - "deleteAd": "Slet annonce", - "cancel": "Annuller" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Skrivbare æsker", - "subtitle": "Indholdspaneler vist på tværs af hotellet og CMS", - "newBox": "Ny æske", - "edit": "Rediger", - "delete": "Slet", - "noBoxes": "Ingen skrivbare bokse endnu", - "confirmDelete": "Vil du slette denne boks?", - "colId": "ID", - "colName": "Navn", - "colLocation": "Beliggenhed", - "colUpdated": "Opdateret", - "colActions": "Handlinger", - "form": { - "name": "Navn", - "namePlaceholder": "Æskenavn", - "location": "Beliggenhed", - "locationPlaceholder": "f.eks. hjemmeside, sidebjælke", - "content": "Indhold", - "contentPlaceholder": "Skriv boksens indhold...", - "enabled": "Aktiveret", - "save": "Gem boks", - "saving": "Gemmer...", - "deleteBox": "Slet boks", - "cancel": "Annuller" - } - }, - "photos": { - "title": "Photo Moderation", - "subtitle": "Seneste kamerabilleder i spillet", - "delete": "Slet", - "approve": "Godkend", - "noPhotos": "Ingen billeder at moderere", - "confirmDelete": "Vil du slette dette billede permanent?", - "colId": "ID", - "colPreview": "Forhåndsvisning", - "colUser": "Bruger", - "colRoom": "Værelse", - "colTimestamp": "Tidsstempel", - "colActions": "Handlinger", - "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", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Brugere", - "subtitle": "Gennemse, søg og administrer hotelkonti", - "search": "Søg", - "searchPlaceholder": "Søg efter brugernavn, e-mail eller id...", - "searchResults": "{count, plural, one {# result} other {# results}} for \"{query}\"", - "noResults": "Ingen brugere fundet", - "colId": "ID", - "colUsername": "Brugernavn", - "colEmail": "E-mail", - "colRank": "Rang", - "colOnline": "Online", - "colRegistered": "Registreret", - "colLastOnline": "Sidst online", - "colActions": "Handlinger", - "yes": "Ja", - "no": "Nej", - "edit": "Rediger", - "setRank": "Sæt rang", - "disconnect": "Afbryd forbindelsen", - "alert": "Advarsel", - "ban": "Forbud", - "detail": { - "title": "User: {username}", - "subtitle": "Kontooplysninger og administration", - "overview": "Oversigt", - "actions": "Handlinger", - "username": "Brugernavn", - "email": "E-mail", - "motto": "Motto", - "rank": "Rang", - "credits": "Credits", - "duckets": "Ænder", - "diamonds": "Diamonds", - "online": "Online", - "registered": "Registered", - "lastOnline": "Sidst online", - "ipAddress": "IP-adresse", - "machineId": "Maskin-id", - "sendAlert": "Send alert", - "sendMessage": "Send besked", - "disconnectUser": "Disconnect user", - "banUser": "Forbyd bruger", - "resetPassword": "Nulstil adgangskode", - "deleteUser": "Slet bruger", - "confirmDelete": "Er du sikker på, at du vil slette {username}? Dette kan ikke fortrydes.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Rediger bruger: {username}", - "subtitle": "Rediger kontooplysninger", - "username": "Brugernavn", - "usernamePlaceholder": "Brugernavn", - "email": "E-mail", - "emailPlaceholder": "bruger@eksempel.com", - "motto": "Motto", - "mottoPlaceholder": "Bruger motto", - "rank": "Rang", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamanter", - "save": "Save changes", - "saving": "Gemmer...", - "cancel": "Annuller" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Bans", - "subtitle": "Administrer konto-, IP- og maskinforbud", - "newBan": "Nyt forbud", - "edit": "Rediger", - "delete": "Slet", - "noBans": "Ingen forbud endnu", - "confirmDelete": "Vil du fjerne dette forbud?", - "colId": "ID", - "colValue": "Værdi", - "colType": "Type", - "colReason": "Årsag", - "colBannedBy": "Banned by", - "colExpires": "Udløber", - "colCreated": "Created", - "colActions": "Handlinger", - "form": { - "value": "Værdi", - "valuePlaceholder": "Brugernavn, IP eller maskin-id", - "type": "Type", - "typeUser": "Bruger", - "typeIp": "IP", - "typeMachine": "Maskine", - "reason": "Årsag", - "reasonPlaceholder": "Ban grund", - "expiresAt": "Udløber kl", - "permanent": "Permanent", - "save": "Gem forbud", - "saving": "Gemmer...", - "cancel": "Annuller" - } - }, - "ip": { - "title": "IP Management", - "subtitle": "Administrer IP-hvidliste og sortliste", - "whitelist": "Hvidliste", - "blacklist": "Sortliste", - "addIp": "Tilføj IP", - "ipAddress": "IP-adresse", - "ipAddressPlaceholder": "f.eks. 127.0.0.1", - "reason": "Årsag", - "reasonPlaceholder": "Reason for listing", - "add": "Tilføj", - "remove": "Fjern", - "confirmRemove": "Vil du fjerne denne IP fra {list}?", - "noWhitelistedIps": "Ingen hvidlistede IP'er", - "noBlacklistedIps": "No blacklisted IPs", - "colIp": "IP", - "colReason": "Årsag", - "colAdded": "Tilføjet", - "colActions": "Handlinger" - }, - "vpn": { - "title": "VPN / proxy-detektion", - "subtitle": "Konfigurer VPN- og proxyregistreringsindstillinger", - "enabled": "Aktiveret", - "apiKey": "API nøgle", - "apiKeyPlaceholder": "Din VPN-detekterings-API-nøgle", - "apiKeyHint": "Leave empty to disable", - "blockOnDetect": "Bloker ved detektion", - "blockOnDetectHint": "Bloker automatisk brugere, der er fundet bag en VPN eller proxy", - "save": "Gem indstillinger", - "saving": "Gemmer...", - "settingsSaved": "VPN-indstillinger blev gemt" - }, - "applications": { - "title": "Personale ansøgninger", - "subtitle": "Afventende og gennemgået personaleansøgninger", - "pending": "Afventer", - "approved": "Godkendt", - "rejected": "Afvist", - "noApplications": "Ingen ansøgninger endnu", - "colId": "ID", - "colApplicant": "Applicant", - "colPosition": "Stilling", - "colStatus": "Status", - "colSubmitted": "Submitted", - "colActions": "Handlinger", - "review": "Gennemgå", - "approve": "Godkend", - "reject": "Afvis", - "confirmApprove": "Vil du godkende {username} for {position}?", - "confirmReject": "Vil du afvise {username}s ansøgning om {position}?", - "detail": { - "title": "Ansøgning af {username}", - "subtitle": "Til {position}", - "about": "Om ansøgeren", - "message": "Ansøgningsmeddelelse", - "status": "Status", - "submitted": "Indsendt", - "noMessage": "No message provided" - } - }, - "teams": { - "title": "Hold", - "subtitle": "Definer medarbejdernes rangnavne og beskrivelser", - "addRank": "Tilføj rang", - "editRank": "Rediger rang", - "deleteRank": "Slet rang", - "noTeams": "Ingen rangdefinitioner endnu", - "confirmDelete": "Vil du slette definitionen af rang {id}?", - "colId": "ID", - "colRank": "Rang", - "colName": "Navn", - "colBadge": "Badge", - "colColour": "Colour", - "colActions": "Handlinger", - "form": { - "rankId": "Rang ID", - "rankIdPlaceholder": "Numerisk rang-id", - "name": "Navn", - "namePlaceholder": "f.eks. Administrator", - "badge": "Badge code", - "badgePlaceholder": "f.eks. ADM001", - "colour": "Colour", - "colourPlaceholder": "f.eks. #ff0000", - "save": "Save team definition", - "saving": "Gemmer...", - "cancel": "Annuller" - } - }, - "permissions": { - "title": "Tilladelser", - "subtitle": "Administrer rangbaserede tilladelser til administrationspanelet", - "addPermission": "Tilføj tilladelse", - "editPermission": "Rediger tilladelse", - "deletePermission": "Slet tilladelse", - "noPermissions": "Ingen tilladelser er konfigureret endnu", - "confirmDelete": "Vil du slette denne tilladelse?", - "colId": "ID", - "colRank": "Rang", - "colPermission": "Tilladelse", - "colCreated": "Oprettet", - "colActions": "Handlinger", - "form": { - "rankId": "Rang ID", - "rankIdPlaceholder": "Minimum rang påkrævet", - "permission": "Tilladelsesnøgle", - "permissionPlaceholder": "f.eks. admin.articles.manage", - "save": "Gem tilladelse", - "saving": "Gemmer...", - "cancel": "Annuller" - } - }, - "catalog": { - "title": "Katalog", - "subtitle": "Gennemse og administrer katalogsider og elementer", - "pages": "Sider", - "items": "genstande", - "addPage": "Add page", - "editPage": "Edit page", - "deletePage": "Slet side", - "addItem": "Tilføj element", - "editItem": "Rediger element", - "deleteItem": "Slet element", - "noPages": "No catalog pages yet", - "noItems": "Ingen varer på denne side", - "confirmDeletePage": "Vil du slette katalogsiden \"{name}\"?", - "confirmDeleteItem": "Vil du slette dette element?", - "colId": "ID", - "colName": "Navn", - "colIcon": "Ikon", - "colOrder": "Bestil", - "colItems": "genstande", - "colEnabled": "Aktiveret", - "colActions": "Handlinger", - "colItemId": "Vare-id", - "colItemName": "Varens navn", - "colCostCredits": "Omkostninger (kreditter)", - "colCostPoints": "Pris (point)", - "colLimited": "Begrænset", - "pageForm": { - "name": "Navn", - "namePlaceholder": "Sidenavn", - "icon": "Ikon ID", - "iconPlaceholder": "Numerisk ikon-id", - "order": "Bestil", - "enabled": "Aktiveret", - "parent": "Forældre side", - "parentNone": "Ingen (rod)", - "save": "Save page", - "saving": "Gemmer...", - "cancel": "Annuller" - }, - "itemForm": { - "itemId": "Vare-id", - "itemName": "Varens navn", - "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": "Annuller" - }, - "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." - } - }, - "shop": { - "title": "Butik", - "subtitle": "Håndtere pakker og ordrer", - "packages": "Packages", - "orders": "Ordrer", - "newPackage": "+ Ny pakke", - "edit": "Rediger", - "delete": "Slet", - "viewOrder": "Visning", - "noPackages": "Ingen butikspakker endnu", - "noOrders": "No orders yet", - "confirmDelete": "Vil du slette denne pakke?", - "colId": "ID", - "colName": "Navn", - "colPrice": "Pris", - "colCurrency": "Valuta", - "colType": "Type", - "colSold": "Sold", - "colEnabled": "Aktiveret", - "colActions": "Handlinger", - "colOrderId": "Ordre-id", - "colCustomer": "Kunde", - "colPackage": "Pakke", - "colAmount": "Beløb", - "colStatus": "Status", - "colDate": "Dato", - "statusPending": "Afventer", - "statusCompleted": "Afsluttet", - "statusRefunded": "Refunderet", - "form": { - "name": "Navn", - "namePlaceholder": "Package name", - "description": "Description", - "descriptionPlaceholder": "Pakkebeskrivelse", - "price": "Pris", - "currency": "Valuta", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Type", - "typeCredits": "Credits", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamanter", - "typeBadge": "Badge", - "typeFurni": "Furniture", - "typeRank": "Rang", - "amount": "Beløb", - "badgeCode": "Badge kode", - "badgeCodePlaceholder": "f.eks. VIP001", - "rankId": "Rank ID", - "furniItems": "Møbelartikler", - "enabled": "Aktiveret", - "save": "Gem pakken", - "saving": "Gemmer...", - "cancel": "Annuller" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Transaktioner", - "subtitle": "PayPal betalingslog", - "noTransactions": "No transactions yet", - "colId": "ID", - "colUser": "Bruger", - "colAmount": "Beløb", - "colCurrency": "Valuta", - "colPackage": "Pakke", - "colStatus": "Status", - "colDate": "Dato", - "colActions": "Handlinger", - "statusCompleted": "Afsluttet", - "statusPending": "Afventer", - "statusFailed": "Mislykkedes", - "statusRefunded": "Refunderet", - "detail": { - "title": "Transaktion nr. {id}", - "paypalId": "PayPal ID", - "payerEmail": "Betaler e-mail", - "grossAmount": "Bruttobeløb", - "fee": "Gebyr", - "netAmount": "Netto beløb" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Shop vouchers", - "subtitle": "Administrer indløselige værdibeviskoder", - "newVoucher": "+ Ny voucher", - "edit": "Rediger", - "delete": "Slet", - "noVouchers": "Ingen værdikuponer endnu", - "confirmDelete": "Vil du slette voucher \"{code}\"?", - "colId": "ID", - "colCode": "Kode", - "colValue": "Værdi", - "colType": "Type", - "colUses": "Uses / Max", - "colExpires": "Udløber", - "colCreated": "Oprettet", - "colActions": "Handlinger", - "form": { - "code": "Code", - "codePlaceholder": "f.eks. SOMMER 2025", - "value": "Værdi", - "type": "Type", - "typeCredits": "Credits", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamonds", - "typeBadge": "Badge", - "typeFurni": "Møbler", - "typeRank": "Rank", - "badgeCode": "Badge kode", - "badgeCodePlaceholder": "f.eks. VIP001", - "rankId": "Rank ID", - "maxUses": "Max bruger", - "maxUsesPlaceholder": "0 = ubegrænset", - "expiresAt": "Udløber kl", - "enabled": "Aktiveret", - "save": "Gem voucher", - "saving": "Gemmer...", - "cancel": "Annuller", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Abonnementer", - "subtitle": "Aktive tilbagevendende abonnementer", - "noSubscriptions": "Ingen aktive abonnementer", - "cancel": "Annuller", - "confirmCancel": "Vil du annullere abonnementet på {username}?", - "colId": "ID", - "colUser": "Bruger", - "colPackage": "Pakke", - "colAmount": "Beløb", - "colInterval": "Interval", - "colStarted": "Startede", - "colNextBilling": "Næste fakturering", - "colStatus": "Status", - "colActions": "Handlinger", - "statusActive": "Aktiv", - "statusCancelled": "Annulleret", - "statusExpired": "Udløbet" - }, - "rareValues": { - "title": "Rare Values", - "subtitle": "Administrer sjældne værdikategorier og varepriser", - "categories": "Kategorier", - "items": "genstande", - "addCategory": "Add category", - "editCategory": "Rediger kategori", - "deleteCategory": "Slet kategori", - "noCategories": "Ingen sjældne værdikategorier endnu", - "confirmDeleteCategory": "Vil du slette kategorien \"{name}\" og alle dens elementer?", - "colId": "ID", - "colName": "Navn", - "colItems": "genstande", - "colUpdated": "Opdateret", - "colActions": "Handlinger", - "colItemName": "Varens navn", - "colCredits": "Credits", - "colPoints": "Points", - "colPointType": "Punkttype", - "categoryForm": { - "name": "Navn", - "namePlaceholder": "Kategorinavn", - "save": "Gem kategori", - "saving": "Gemmer...", - "cancel": "Annuller" - }, - "itemForm": { - "itemName": "Varens navn", - "itemNamePlaceholder": "f.eks. Throne", - "credits": "Credits værdi", - "points": "Pointværdi", - "pointType": "Punkttype", - "pointTypeDuckets": "Ænder", - "pointTypeDiamonds": "Diamonds", - "save": "Save item", - "saving": "Saving…", - "cancel": "Annuller" - } - }, - "badges": { - "title": "Badges", - "subtitle": "Upload, giv og administrer badgekatalog", - "upload": "Upload", - "giveBadge": "Giv badge", - "catalogue": "Catalogue", - "uploadTitle": "Upload a new badge", - "uploadSubtitle": "Upload en badge-billedfil", - "badgeCode": "Badge code", - "badgeCodePlaceholder": "f.eks. VIP001", - "badgeFile": "Badge-fil", - "badgeFileHint": "PNG eller GIF, anbefales 40x40", - "uploadButton": "Upload", - "uploading": "Uploader...", - "giveTitle": "Give badge to user", - "giveSubtitle": "Giv et badge til en bestemt bruger", - "username": "Brugernavn", - "usernamePlaceholder": "Target username", - "giveButton": "Giv badge", - "giving": "Giver…", - "catalogueTitle": "Badge katalog", - "catalogueSubtitle": "Alle tilgængelige badges på hotellet", - "noBadges": "Ingen badges i kataloget", - "search": "Søg badges", - "searchPlaceholder": "Søg efter kode eller navn...", - "colCode": "Kode", - "colImage": "Billede", - "colName": "Navn", - "colDescription": "Beskrivelse", - "colActions": "Handlinger" - }, - "achievements": { - "title": "Præstationer", - "subtitle": "Skrivebeskyttet liste over præstationer i spillet", - "noAchievements": "Ingen præstationer konfigureret", - "colId": "ID", - "colName": "Navn", - "colCategory": "Kategori", - "colLevels": "Niveauer", - "colReward": "Belønning", - "colProgress": "Fremskridt", - "levelLabel": "Niveau {level}", - "rewardCredits": "{count} kreditter", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Kalender kampagner", - "subtitle": "Skrivebeskyttet liste over kalenderkampagner og begivenheder", - "noCampaigns": "Ingen kalenderkampagner endnu", - "colId": "ID", - "colName": "Navn", - "colStart": "Start", - "colEnd": "Slut", - "colType": "Type", - "colReward": "Belønning", - "colActions": "Handlinger", - "detail": { - "title": "Kampagne: {name}", - "subtitle": "Kalender begivenhed detaljer", - "days": "dage", - "dayLabel": "Dag {day}", - "reward": "Belønning", - "noDays": "Der er ikke konfigureret dage for denne kampagne" - } - }, - "radio": { - "title": "Radio Moderation", - "subtitle": "Seneste råb, DJ-applikationer og on-air tidsplaner (25 seneste af hver).", - "moderation": "Moderering", - "shouts": "Råber", - "applications": "Ansøgninger", - "schedules": "Tidsplaner", - "settings": "Indstillinger", - "embed": "Integrer", - "ranks": "Rangerer", - "history": "Historie", - "apiKeys": "API nøgler", - "points": "Points", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Radioovervågning", - "subtitle": "Skrivebeskyttet live-probe af de konfigurerede radioendepunkter (radio_now_playing_api_url, radio_listeners_api_url). Hver anmodning fejler blødt med en {timeout}s timeout — ingen data skrives. Konfigurer URL'er under Indstillinger.", - "stream": "Stream", - "online": "Online", - "offline": "Offline", - "notConfigured": "Ikke konfigureret", - "nowPlaying": "Spiller nu", - "nowPlayingApi": "Now-playing API", - "listenersApi": "Lytters API", - "listeners": "Lyttere", - "currentSong": "Aktuel sang", - "bitrate": "Bitrate", - "status": "Status", - "noNowPlayingHint": "intet API-sæt, der nu spiller", - "noListenersHint": "no listeners API set", - "endpointDiagnostics": "Slutpunktsdiagnostik", - "diagnosticsLegend": "OK: tilgængelig · WARN: ikke konfigureret · ERROR: anmodningen mislykkedes eller fik timeout.", - "streamUrl": "Stream URL", - "unreachable": "unreachable", - "refresh": "Opdater" - }, - "user": "Bruger", - "message": "Besked", - "posted": "Posted", - "realName": "Real Name", - "age": "Age", - "style": "Style", - "applied": "Applied", - "day": "Day", - "start": "Start", - "end": "Slut", - "show": "Show", - "status": "Status", - "active": "active", - "inactive": "inactive", - "hidden": "skjult", - "activeSchedules": "Active schedules", - "noShouts": "Ingen råb at moderere", - "noApplications": "Ingen ansøgninger indsendt.", - "noSchedules": "Ingen tidsplaner konfigureret.", - "deleteShout": "Slet", - "confirmDeleteShout": "Vil du slette dette råb?", - "pendingApplications": "Afventende ansøgninger", - "settingsForm": { - "title": "Radioindstillinger", - "subtitle": "Redigeringer skriver til website_settings (radio_*-taster) og buster runtime-indstillingernes cache. Booleans bruger 0/1.", - "enabled": "Aktiveret", - "disabled": "Deaktiveret", - "totalKeys": "Samlede nøgler", - "configured": "Configured", - "curatedHint": "kurerede nøgler med en værdi", - "customKeys": "Brugerdefinerede nøgler", - "saveAll": "Gem alle", - "singleKey": "Tilføj/overskriv en enkelt nøgle", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "værdi", - "commentPlaceholder": "kommentar (valgfrit)", - "saveSingle": "Gem", - "otherSettings": "Andre radioindstillinger", - "dbError": "Kunne ikke indlæse indstillinger (databasen er ikke tilgængelig). Standarder oprettes ved gem." - }, - "embedPage": { - "title": "Radioindlejring", - "subtitle": "Kopiklar indlejringskode til livestreamen. Skrivebeskyttet - intet her skriver til databasen. Konfigurer stream-URL'en i Radioindstillinger (radio_stream_url).", - "streamUrl": "Stream URL", - "configured": "Konfigureret", - "missing": "Mangler", - "radioName": "Radio navn", - "nowPlayingApi": "Nu-spiller API", - "set": "Sæt", - "notSet": "Ikke indstillet", - "noStreamUrl": "Ingen stream-URL konfigureret", - "noStreamUrlText": "Der er ingen radio_stream_url sat, så der er intet at indlejre endnu.", - "goToSettings": "Gå til Radioindstillinger", - "livePreview": "Live preview", - "livePreviewText": "Dette er den blottede audio-afspiller, som besøgende vil se den. Tryk på afspil for at bekræfte, at streamen er tilgængelig.", - "source": "Kilde", - "audioSnippet": "Uddrag af lydafspiller", - "audioSnippetDesc": "Drop-in HTML5-lydafspiller pegede direkte mod strømmen. Virker overalt, hvor almindelig HTML er tilladt.", - "iframeSnippet": "Iframe-indpakningsstykke", - "iframeSnippetDesc": "Indlejrer webstedets egen radioafspillerside i en iframe - bevarer din styling og oplysninger om nu-afspiller. Juster bredde/højde efter smag.", - "audioUnsupported": "Din browser understøtter ikke lydelementet." - }, - "banners": { - "title": "Bannere", - "heading": "Radio Bannere", - "description": "Salgsfremmende bannere vist på radiosiden, sorteret efter sorteringsrækkefølge.", - "addBanner": "Tilføj banner", - "createBanner": "Opret banner", - "deleteBanner": "Slet banner", - "noBanners": "Ingen bannere endnu - tilføj et ovenfor.", - "existing": "Eksisterende bannere ({count})", - "save": "Gem", - "delete": "Slet", - "byUser": "af bruger {id}", - "active": "aktiv", - "hidden": "skjult", - "bannerAlt": "Radio banner", - "statusActive": "Aktiv", - "statusHidden": "Skjult", - "dbError": "Kunne ikke indlæse bannere (databasen er ikke tilgængelig).", - "form": { - "imagePath": "Billedsti/URL", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Titel", - "description": "Beskrivelse", - "sortOrder": "Sorteringsrækkefølge", - "active": "Aktiv" - } - }, - "ranksForm": { - "title": "Radio rangerer", - "subtitle": "DJ / personale rangerer tildeles på radioapplikationer.", - "dbError": "Kunne ikke indlæse rækker (databasen er ikke tilgængelig).", - "active": "Aktiv", - "addRank": "Tilføj rang", - "name": "Navn", - "badgeCode": "Badge kode", - "description": "Beskrivelse", - "createRank": "Opret rang", - "existing": "Eksisterende rækker ({count})", - "noRanks": "Ingen rækker endnu - tilføj en ovenfor.", - "activeLabel": "aktiv", - "inactiveLabel": "inaktiv", - "save": "Gem", - "deleteRank": "Slet rang #{id}" - }, - "historyPage": { - "title": "Radioafspilningshistorie", - "subtitle": "Tidligere DJ-shows og sendetid (radio_historie), seneste først. Skrivebeskyttet log over, hvem der var i luften, hvornår og hvor mange lyttere, der stillede ind.", - "dbError": "Kunne ikke indlæse radiohistorik (databasen er ikke tilgængelig).", - "showsLogged": "Viser logget", - "onAirNow": "I luften nu", - "uniqueDjs": "Unikke DJs", - "peakListeners": "Peak lyttere", - "empty": "Ingen radiohistorik registreret endnu.", - "showLog": "Vis log ({count})", - "colDj": "DJ", - "colShow": "Vis", - "colStarted": "Startede", - "colEnded": "Afsluttet", - "colAirtime": "Sendetid", - "colListeners": "Lyttere", - "colNotes": "Noter", - "onAir": "i luften" - }, - "apiKeysForm": { - "title": "Radio API nøgler", - "subtitle": "API-nøgler til eksterne radiointegrationer (radio_api_keys). Nøgler genereres på serversiden og vises maskerede - kopier den fulde værdi fra databasen, når de først udstedes.", - "dbError": "Kunne ikke indlæse API-nøgler (databasen er ikke tilgængelig).", - "totalKeys": "Samlede nøgler", - "active": "Aktiv", - "inactive": "Inaktiv", - "generateKey": "Generer nøgle", - "generateHint": "Den hemmelige nøgle genereres automatisk med kryptografisk tilfældighed - du indtaster den ikke.", - "name": "Navn", - "namePlaceholder": "AzureCast-broen", - "rateLimit": "Takstgrænse (anmodninger/min.)", - "allowedIps": "Tilladte IP'er (valgfrit)", - "allowedIpsPlaceholder": "kommasepareret, blank = enhver", - "generate": "Generer nøgle", - "existingKeys": "Eksisterende nøgler ({count})", - "noKeys": "Ingen API-nøgler endnu - generer en ovenfor.", - "colName": "Navn", - "colKey": "Nøgle", - "colAllowedIps": "Tilladte IP'er", - "colRateLimit": "Satsgrænse", - "colLastUsed": "Sidst brugt", - "colExpires": "Udløber", - "colStatus": "Status", - "colActions": "Handlinger", - "maskedHint": "Kun de første 8 tegn vises", - "any": "nogen", - "activeLabel": "aktiv", - "inactiveLabel": "inaktiv", - "deactivate": "Deaktiver", - "activate": "Aktiver", - "delete": "Slet" - }, - "pointsForm": { - "title": "Radiolytterpunkter", - "subtitle": "Beløn lyttere med valuta for tid brugt på radioen. Redigeringer skriver til website_settings (radio_points_*-taster) og buster cachen til runtime-indstillinger. Booleans bruger 0/1.", - "saved": "Gemt", - "points": "Points", - "enabled": "Aktiveret", - "disabled": "Deaktiveret", - "perMinute": "Per minut", - "paidIn": "betalt i {currency}", - "maxPerDay": "Max / dag", - "unlimited": "Ubegrænset", - "minListeners": "Min lyttere", - "settings": "Indstillinger", - "pointsEnabled": "Point aktiveret", - "pointsEnabledHint": "Hovedafbryder til tildeling af lytterpoint.", - "currency": "Valuta", - "currencyHint": "Hvilken pengepung pointene indbetales til.", - "pointsPerMinute": "Point i minuttet", - "pointsPerMinuteHint": "Beløb tildelt for hvert hele minuts lytning.", - "maxPerDayHint": "Dagligt loft pr. bruger. Brug 0 for ubegrænset.", - "minListenersHint": "Der gives kun point, når mindst så mange mennesker er indstillet.", - "save": "Gem pointindstillinger" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Fallback-afspilningsliste (radio_auto_dj_playlist), som radioen roterer igennem, når ingen live-dj streamer. Bestilles efter sorteringsrækkefølge og derefter titel.", - "dbError": "Kunne ikke indlæse AutoDJ-afspilningslisten (databasen er ikke tilgængelig).", - "tracks": "Spor", - "active": "Aktiv", - "inactive": "Inaktiv", - "addTrack": "Tilføj spor", - "titlePlaceholder": "Sportitel", - "artist": "Kunstner", - "album": "Album", - "artworkUrl": "Artwork URL", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Varighed (sekunder)", - "durationPlaceholder": "f.eks. 215", - "sortOrder": "Sorteringsrækkefølge", - "playlist": "Playliste ({count})", - "noTracks": "Ingen AutoDJ-numre endnu - tilføj et ovenfor.", - "colOrder": "Bestil", - "colTitle": "Titel", - "colArtist": "Kunstner", - "colAlbum": "Album", - "colDuration": "Varighed", - "colPlays": "Skuespil", - "colLastPlayed": "Last played", - "colStatus": "Status", - "colActions": "Handlinger", - "activeLabel": "aktiv", - "inactiveLabel": "inaktiv", - "deactivate": "Deaktiver", - "activate": "Aktiver", - "delete": "Slet", - "trackTitle": "Titel" - }, - "moderationPage": { - "title": "DJ moderation", - "subtitle": "Gennemgå og fjern radioråb (50 seneste).", - "recentShouts": "Seneste råb ({count})" - } - }, - "commandocentrum": { - "title": "Kommandocentrum", - "subtitle": "Diagnostik, RCON kontroller og brugerstyring", - "diagnostics": "Diagnostik", - "rcon": "RCON", - "userActions": "Brugerhandlinger", - "diagnosticsTitle": "Emulator diagnostik", - "memoryUsage": "Hukommelsesbrug", - "uptime": "Oppetid", - "onlineUsers": "Online brugere", - "roomsLoaded": "Værelser indlæst", - "refresh": "Opdater", - "rconTitle": "RCON kommandoer", - "rconPlaceholder": "Indtast RCON kommando...", - "rconSend": "Send", - "rconSending": "Sender...", - "rconResponse": "Svar", - "userActionsTitle": "Brugerhandlinger", - "username": "Brugernavn", - "usernamePlaceholder": "Målbrugernavn", - "action": "Handling", - "execute": "Udfør", - "actions": { - "disconnect": "Afbryd forbindelsen", - "alert": "Send advarsel", - "giveCredits": "Giv kreditter", - "giveBadge": "Giv badge", - "givePoints": "Giv point", - "ban": "Forbud", - "kick": "Spark" - }, - "messagePlaceholder": "Besked (for advarsler)...", - "amountPlaceholder": "Beløb…", - "badgePlaceholder": "Badgekode..." - }, - "emulator": { - "title": "Emulator Konfig", - "subtitle": "Se og rediger emulatorindstillinger og lokalitetstekster", - "settings": "Indstillinger", - "texts": "Tekster", - "search": "Søg", - "searchPlaceholder": "Søg nøgler...", - "noSettings": "Ingen indstillinger fundet", - "noTexts": "Ingen tekster fundet", - "edit": "Rediger", - "save": "Gem", - "saving": "Gemmer...", - "cancel": "Annuller", - "colKey": "Nøgle", - "colValue": "Værdi", - "colType": "Type", - "colActions": "Handlinger", - "editDialog": { - "title": "Rediger: {key}", - "value": "Værdi", - "valuePlaceholder": "Indtast værdi...", - "save": "Save changes", - "cancel": "Annuller" - } - }, - "alerts": { - "title": "Advarsler", - "subtitle": "Send underretninger for hele hotellet, og se de seneste underretninger", - "sendAlert": "Send hotelalarm", - "recentAlerts": "Seneste underretninger ({count})", - "noRecentAlerts": "No recent alerts", - "form": { - "title": "Alert title", - "titlePlaceholder": "f.eks. Servervedligeholdelse på 10 minutter", - "message": "Alert message", - "messagePlaceholder": "Skriv advarslen...", - "type": "Type", - "typeHotel": "Hotel-wide alert", - "typeStaff": "Kun personale", - "urgent": "Haster", - "send": "Send alert", - "sending": "Sender...", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Titel", - "colSentBy": "Sent by", - "colType": "Type", - "colDate": "Dato", - "colActions": "Handlinger", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Staff Activities", - "subtitle": "Revisionsspor for personalehandlinger i administrationspanelet", - "noLogs": "Ingen personaleaktivitet logget endnu", - "colId": "ID", - "colUser": "Bruger", - "colAction": "Handling", - "colTarget": "Mål", - "colDescription": "Description", - "colIp": "IP", - "colTimestamp": "Tidsstempel", - "filterByUser": "Filter by user…", - "filterByAction": "Filter by action…", - "clearFilters": "Ryd filtre", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Ord filter", - "subtitle": "Administrer filtrerede ord og sætninger på hotellet", - "addWord": "Add word", - "addWords": "Tilføj ord", - "noWords": "Ingen filtrerede ord endnu", - "confirmDelete": "Vil du fjerne \"{word}\" fra filteret?", - "colId": "ID", - "colWord": "Word", - "colAddedBy": "Tilføjet af", - "colCreated": "Created", - "colActions": "Handlinger", - "form": { - "word": "Ord", - "wordPlaceholder": "f.eks. badword", - "addMore": "Tilføj flere ord (et pr. linje)", - "save": "Tilføj til filter", - "saving": "Gemmer...", - "cancel": "Annuller" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Vedligeholdelsestilstand", - "subtitle": "Aktiver eller deaktiver vedligeholdelse for hele hotellet", - "enabled": "Vedligeholdelsestilstand er aktiveret", - "disabled": "Vedligeholdelsestilstand er deaktiveret", - "enable": "Aktiver vedligeholdelse", - "disable": "Deaktiver vedligeholdelse", - "message": "Vedligeholdelsesmeddelelse", - "messagePlaceholder": "Vi kommer snart tilbage!", - "staffAccess": "Tillad personale adgang under vedligeholdelse", - "save": "Gem indstillinger", - "saving": "Gemmer...", - "confirmEnable": "Aktivering af vedligeholdelse forhindrer alle ikke-ansatte brugere i at få adgang til hotellet. Fortsætte?", - "confirmDisable": "Deaktiver vedligeholdelsestilstand og gendanne adgang for alle brugere?" - }, - "housekeeping": { - "title": "Husholdningstilladelser", - "subtitle": "Konfigurer hvilke rækker der kan få adgang til hvilke administratorsektioner", - "addPermission": "Tilføj tilladelse", - "editPermission": "Rediger tilladelse", - "deletePermission": "Slet tilladelse", - "noPermissions": "Ingen husholdningstilladelser er konfigureret", - "confirmDelete": "Vil du slette denne tilladelse?", - "colId": "ID", - "colRank": "Rang", - "colSection": "Sektion", - "colActions": "Handlinger", - "form": { - "rankId": "Rang ID", - "rankIdPlaceholder": "Minimum rang", - "section": "Sektionsnøgle", - "sectionPlaceholder": "f.eks. admin.dashboard", - "save": "Gem tilladelse", - "saving": "Gemmer...", - "cancel": "Annuller" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset applied!", - "cleared": "All Tilladelser cleared!", - "invalidRank": "Invalid Rang", - "testDone": "Test done: {count} Tilladelser found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Slet ALL Tilladelser? This Handling cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Tilladelse", - "colDescription": "Beskrivelse", - "colMinRank": "Min. Rang", - "permissionKey": "Tilladelsesnøgle", - "minRank": "Min. Rang", - "description": "Beskrivelse", - "permissions": "Tilladelser", - "permissionsCount": "{count} Tilladelser", - "permission": "Tilladelse", - "highestMinRank": "Highest min. Rang: {rank}", - "totalMinRank": "Total min. Rang sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Rangerer", - "missingDeps": "{count} Mangler dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Mangler)", - "rank": "Rang", - "count": "Count", - "searchPermission": "Søg Tilladelser…", - "search": "Søg", - "manage": "Manage", - "importSelection": "Importer selection", - "noGroup": "Nej group", - "allGroups": "All groups", - "perGroup": "Tilladelser per group", - "perRank": "Tilladelser per Rang", - "rankOverviewHint": "All Tilladelser grouped by the Rang they are assigned to.", - "tabOverview": "Oversigt", - "tabManage": "Manage", - "tabImport": "Importer / Export", - "tabRanks": "Rang Oversigt", - "tabPresets": "Forudindstillinger", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Importer Tilladelser", - "importHint": "Paste a JSON array of Tilladelse objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Importer", - "exportTitle": "Export Tilladelser", - "exportHint": "Export all Tilladelser as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Tilladelse Forudindstillinger", - "presetsHint": "Ansøg a predefined Sæt of Tilladelser for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Moderering tools: Bruger lookup, Forbud, CFH handling, chat logs.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Brugere, Værelser, news, Indstillinger, Butik, events, radio & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Tilladelse management and asset Importer.", - "applyPreset": "Ansøg preset", - "clearAll": "Clear all Tilladelser", - "testTitle": "Test Rang access", - "testHint": "Enter a Rang number to see which Tilladelser would be granted.", - "test": "Test", - "auditTitle": "Tilladelse audit log", - "auditHint": "All changes to Husholdning Tilladelser are logged.", - "auditLogsAt": "Audit logs are available on the Audit log page.", - "viewAuditLogs": "Visning audit logs", - "importedWithErrors": "Imported {count} Tilladelser with {errors} errors", - "confirmClearAllDesc": "This will Fjern every Tilladelse entry from the database. Are you sure?", - "confirmDeletePermission": "Slet this Tilladelse permanently?", - "confirmBulkDelete": "Slet {count} selected Tilladelser?", - "deleteSelected": "Slet {count} selected", - "cancel": "Annuller", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Bruger", - "auditAction": "Handling", - "auditTarget": "Mål", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Værelser", - "subtitle": "Søg og administrer hotelværelser", - "search": "Søg", - "searchPlaceholder": "Søg efter navn, ejer eller id...", - "searchResults": "{count, plural, one {# room} other {# rooms}} fundet for \"{query}\"", - "noResults": "Ingen værelser fundet", - "colId": "ID", - "colName": "Navn", - "colOwner": "Ejer", - "colUsers": "Brugere", - "colState": "stat", - "colCategory": "Kategori", - "colCreated": "Oprettet", - "colActions": "Handlinger", - "stateOpen": "Åbn", - "stateClosed": "Lukket", - "stateLocked": "Låst", - "stateInvisible": "Usynlig", - "detail": { - "title": "Værelse: {name}", - "subtitle": "Ejes af {owner}", - "overview": "Oversigt", - "actions": "Handlinger", - "description": "Beskrivelse", - "noDescription": "Ingen beskrivelse", - "owner": "Ejer", - "users": "Brugere online", - "maxUsers": "Max brugere", - "category": "Kategori", - "state": "stat", - "tags": "Tags", - "noTags": "Ingen tags", - "created": "Oprettet", - "deleteRoom": "Slet rum", - "confirmDelete": "Vil du slette rummet \"{name}\"? Dette kan ikke fortrydes.", - "enterRoom": "Gå ind i værelset", - "changeOwner": "Skift ejer", - "changeOwnerPlaceholder": "Nyt ejerbrugernavn" - } - }, - "emailTemplates": { - "title": "Email skabeloner", - "subtitle": "Administrer transaktionelle e-mailskabeloner", - "newTemplate": "+ Ny skabelon", - "edit": "Rediger", - "delete": "Slet", - "noTemplates": "Ingen e-mail-skabeloner endnu", - "confirmDelete": "Vil du slette skabelonen \"{name}\"?", - "colId": "ID", - "colName": "Navn", - "colSubject": "Emne", - "colKey": "Nøgle", - "colUpdated": "Opdateret", - "colActions": "Handlinger", - "form": { - "name": "Navn", - "namePlaceholder": "f.eks. Velkomstmail", - "key": "Nøgle", - "keyPlaceholder": "f.eks. velkomste-mail", - "subject": "Emne", - "subjectPlaceholder": "E-mail emnelinje", - "body": "Brødtekst (HTML)", - "bodyPlaceholder": "

Kære {username},

", - "variables": "Tilgængelige variabler", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Gem skabelon", - "saving": "Gemmer...", - "cancel": "Annuller" - } - }, - "theme": { - "title": "Tema", - "subtitle": "Tilpas CMS-udseendet", - "presets": "Forudindstillinger", - "colours": "Farver", - "css": "CSS", - "presetsTitle": "Forudindstillinger af tema", - "presetsSubtitle": "Vælg et forudbygget farveskema", - "applyPreset": "Ansøg", - "presetApplied": "Forudindstilling anvendt: {preset}", - "customiseTitle": "Brugerdefinerede farver", - "primary": "Primær", - "secondary": "Sekundær", - "accent": "Accent", - "background": "Baggrund", - "surface": "Overflade", - "text": "Tekst", - "saveColours": "Gem farver", - "savingColours": "Gemmer...", - "cssTitle": "Brugerdefineret CSS", - "cssSubtitle": "Tilføj tilpasset CSS for at tilsidesætte temastile", - "cssPlaceholder": "/* Din tilpassede CSS her */", - "saveCss": "Gem CSS", - "savingCss": "Gemmer...", - "reset": "Nulstil til standardindstillinger", - "confirmReset": "Vil du nulstille temaet til standardværdierne?" - }, - "media": { - "title": "Mediebibliotek", - "subtitle": "Upload og administrer mediefiler", - "upload": "Upload", - "uploadTitle": "Upload en fil", - "uploadSubtitle": "Træk og slip eller klik for at uploade", - "uploadButton": "Vælg fil", - "uploading": "Uploader...", - "noFiles": "Ingen mediefiler endnu", - "delete": "Slet", - "confirmDelete": "Vil du slette denne fil permanent?", - "search": "Søg", - "searchPlaceholder": "Søg efter filnavn...", - "colPreview": "Forhåndsvisning", - "colName": "Navn", - "colSize": "Størrelse", - "colType": "Type", - "colUploaded": "Uploadet", - "colActions": "Handlinger", - "copyUrl": "Kopiér URL", - "urlCopied": "URL kopieret til udklipsholder" - }, - "favicon": { - "title": "Favicon", - "subtitle": "Upload og administrer webstedets favicon", - "current": "Nuværende favicon", - "uploadLabel": "Upload favicon", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO eller SVG. Max 2 MB.", - "upload": "Upload", - "uploading": "Uploader...", - "delete": "Fjern", - "deleting": "Fjerner...", - "saved": "Favicon blev gemt!", - "deleted": "Favicon blev fjernet!", - "error": "Noget gik galt", - "confirmDelete": "Fjern favicon? Siden vil ikke længere vise et brugerdefineret favicon.", - "generator": { - "title": "Generer favicon", - "text": "Tekst", - "bgColor": "Baggrundsfarve", - "textColor": "Tekstfarve", - "rounded": "Afrundede hjørner", - "save": "Gem som favicon" - }, - "cancel": "Cancel" - }, - "settings": { - "title": "CMS-indstillinger", - "subtitle": "Administrer nøgle/værdi CMS-konfiguration", - "addSetting": "Tilføj indstilling", - "edit": "Rediger", - "delete": "Slet", - "noSettings": "Ingen indstillinger fundet", - "confirmDelete": "Vil du slette indstillingen \"{key}\"?", - "colKey": "Nøgle", - "colValue": "Værdi", - "colUpdated": "Opdateret", - "colActions": "Handlinger", - "form": { - "key": "Nøgle", - "keyPlaceholder": "f.eks. hotel_name", - "value": "Værdi", - "valuePlaceholder": "Indstillingsværdi", - "save": "Gem indstilling", - "saving": "Gemmer...", - "cancel": "Annuller" - }, - "keysInDatabase": "{count} keys in database", - "managedInForm": "{count} managed in form", - "documented": "{count} documented", - "saved": "Settings saved.", - "saveFailed": "Could not save settings.", - "saveSettings": "Save settings", - "viewOnly": "You can view settings but need edit permission to change them." - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Hjem", - "reload": "Genindlæs", - "fullscreen": "Fuldskærm", - "logout": "Log ud", - "onlineUsers": "Brugere online", - "emulatorOnline": "Emulator online", - "emulatorOffline": "Emulator offline", - "dragToMove": "Træk for at flytte", - "hide": "Skjul værktøjslinje", - "fullscreenExit": "Afslut fuldskærm", - "show": "Vis værktøjslinje", - "emulatorUnknown": "Emulatorstatus ukendt" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Fildiagnostik", - "preliminary": "Foreløbig kontrol af adresser; indholdet valideres under import.", - "http": "HTTP {status}", - "network": "Forbindelsen mislykkedes", - "timeout": "Kilden svarede ikke i tide", - "invalidResponse": "Kilden returnerede en webside i stedet for en fil", - "available": "Fil fundet; afventer validering", - "recover": "Vedhæft originalen og fortsæt", - "recoveryHint": "Vælg {file} (højst 50 MB). Identiteten kontrolleres. Mislykkede elementer prøves igen; færdige importer bevares.", - "attach": "Vælg den originale .nitro-fil", - "working": "Validerer eller genoptager...", - "attached": "Matchende fil vedhæftet", - "resume": "Genoptag mislykkede importer med filen", - "invalidFile": "Vælg en matchende original .nitro-fil på højst 50 MB og prøv igen.", - "resumeError": "Opdater historikken og brug seneste forsøg; kontroller filen og prøv igen.", - "mismatchedFile": "Denne fil tilhører et andet møbel.", - "alreadyStarted": "Genoptagelsen er startet. Opdater historikken og brug seneste forsøg.", - "notEligible": "Dette element kan ikke gendannes med en vedhæftet fil." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "En gendannelseskopi gemmes i denne browser i 7 dage.", + "saved": "En gendannelseskopi er gemt i denne browser i 7 dage.", + "unavailable": "Gendannelse i browseren er ikke tilgængelig. Hold denne side åben, indtil dine ændringer er gemt.", + "found": "Der er en gendannelseskopi i denne browser, gemt den", + "restore": "Gendan browserkopi", + "discard": "Slet browserkopi", + "confirmRestore": "Erstat den aktuelle formular med browserens gendannelseskopi? Kontrollér indholdet, før du gemmer.", + "confirmDiscard": "Slet denne gendannelseskopi fra browseren? Den aktuelle formular forbliver uændret." + }, + "nav": { + "home": "Hjem", + "community": "Fællesskab", + "articles": "Artikler", + "photos": "Fotos", + "staff": "Personale", + "rankings": "Placeringer", + "guilds": "Gilder", + "leaderboards": "Leaderboards", + "rareValues": "Sjældne værdier", + "shop": "Butik", + "market": "Marked", + "assistance": "Assistance", + "helpCenter": "Hjælpecenter", + "myTickets": "Mine billetter", + "badges": "Badges", + "radio": "Radio", + "friends": "Venner", + "messages": "Beskeder", + "admin": "Admin", + "openMenu": "Åbn menuen", + "closeMenu": "Luk menuen", + "drawBadge": "Tegn badge", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} online", + "nitroClient": "Nitro klient", + "tagline": "En online virtuel verden, hvor du kan oprette din egen avatar, få venner, chatte, skabe rum og meget mere!", + "login": "Log ind", + "or": "Eller", + "createAccount": "Opret en konto" + }, + "footer": { + "copyright": "© {year} - {hotel} er et undervisningsprojekt uden fortjeneste" + }, + "pages": { + "staff": { + "title": "Personale", + "subtitle": "Holdet bag hotellet", + "ranksTitle": "Rangerer", + "ranksSubtitle": "Hvad hver del af teamet tager sig af", + "membersTitle": "Teammedlemmer", + "membersEmptySubtitle": "Ingen at vise lige nu", + "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", + "emptyState": "Ingen ansatte at vise.", + "colUsername": "Brugernavn", + "colRank": "Rang", + "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 spillere efter {currency}", + "tab_credits": "Credits", + "tab_diamonds": "Diamanter", + "tab_duckets": "Ænder", + "tab_achievement": "Præstationer", + "tab_respects": "Respekter", + "tab_onlinetime": "Online tid", + "emptyState": "Ingen placeringer at vise endnu.", + "colAvatar": "Avatar", + "colPlayer": "Spiller" + }, + "friends": { + "title": "Venner", + "emptySubtitle": "Du har ingen tilføjet venner endnu", + "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", + "emptyState": "Tilføj venner på hotellet, så dukker de op her.", + "noMotto": "Intet 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": "Beskeder", + "subtitle": "Venneanmodninger og offlinebeskeder venter på dig", + "requestsTitle": "Venneanmodninger", + "requestsEmptySubtitle": "Ingen har bedt om at være din ven endnu", + "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", + "requestsEmptyState": "Ingen afventende venneanmodninger.", + "wantsToBeFriend": "ønsker at være din ven.", + "accept": "Accepter", + "offlineTitle": "Offline beskeder", + "offlineEmptySubtitle": "Din indbakke er tom", + "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", + "offlineEmptyState": "Du har ingen offline beskeder.", + "unknownUser": "Bruger #{id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Intet motto", + "statRank": "Rang", + "statCredits": "Credits", + "statRegistered": "Registreret", + "badgesTitle": "Badges", + "badgesEmpty": "Ingen badges endnu.", + "photosTitle": "Fotos", + "photosEmpty": "Ingen billeder endnu.", + "guestbookTitle": "Gæstebog", + "guestbookSubtitle": "Beskeder på {username}s væg", + "leaveMessage": "Efterlad en besked", + "guestbookPlaceholder": "Skriv noget i {username}s gæstebog...", + "post": "Indlæg", + "loginToPost": "Log ind for at efterlade en gæstebogsbesked.", + "guestbookEmpty": "Ingen gæstebogsindlæg endnu.", + "unknownUser": "Bruger #{id}", + "statDuckets": "Ænder", + "statDiamonds": "Diamanter", + "walletTitle": "Tegnebog", + "friendsTitle": "Venner", + "friendsSubtitle": "Folk på hotellet, de hænger ud med", + "friendsEmpty": "Ingen venner at vise.", + "roomsTitle": "Værelser", + "roomsSubtitle": "Værelser de ejer", + "roomsEmpty": "Ingen lokaler at vise.", + "roomUntitled": "Unavngivet værelse", + "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": "Placeringer", + "subtitle": "De 12 bedste spillere rangeret efter kreditter", + "emptyState": "Ingen spillere at rangere endnu." + }, + "home": { + "welcome": "Velkommen til {hotelName}", + "welcomeSubtitle": "Dit retrohotel, nu drevet af Next.js", + "welcomeBody": "Hæng ud, saml møbler og mød venner.", + "enterHotel": "Indtast {hotelName}", + "onlineFriends": "Online venner", + "noFriendsOnline": "Ingen venner online", + "register": "TILMELD DIG NU", + "joinNow": "Tilmeld dig {hotelName} i dag!", + "recentUsers": "Seneste brugere", + "recentPhotos": "Seneste fotos", + "latestNews": "Seneste nyt", + "newsTitle": "Seneste nyt", + "newsSubtitle": "Frisk fra hotellet", + "allNews": "Alle nyheder →", + "allUsers": "Fællesskab →", + "noArticles": "Ingen artikler endnu.", + "noPhotos": "Ingen billeder endnu.", + "noUsers": "Ingen brugere online", + "latestArticle": "Seneste artikel", + "latestUsers": "Nyeste borgere ({count} i alt)", + "statsOnline": "Online", + "statsCitizens": "Borgere", + "statsRooms": "Værelser", + "statsArticles": "Artikler", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Skab dit unikke look", + "featuresFurniture": "Møbler", + "featuresFurnitureDesc": "Dekorér værelser med genstande", + "featuresCommunity": "Fællesskab", + "featuresCommunityDesc": "Få venner og chat", + "featuresGames": "Spil", + "featuresGamesDesc": "Konkurrér og hav det sjovt", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Nyheder", + "subtitle": "De seneste meddelelser, begivenheder og opdateringer fra hotellet", + "noArticles": "Ingen artikler endnu.", + "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": "← Nyheder", + "reactionsTitle": "Reaktioner", + "reactionsSubtitle": "Fortæl os, hvad du synes", + "reaction": { + "like": "Ligesom", + "love": "Kærlighed", + "wow": "Wow" + }, + "removeReaction": "Klik for at fjerne din reaktion", + "reactWith": "Reager med {reaction}", + "noReactions": "Ingen reaktioner endnu.", + "logIn": "Log ind", + "toReact": "at reagere.", + "commentsTitle": "Kommentarer", + "commentsSubtitle": "Deltag i samtalen", + "commentsCount": "{count} indtil videre", + "noComments": "Ingen kommentarer endnu. Vær den første til at kommentere.", + "userNumber": "Bruger #{id}", + "addComment": "Tilføj en kommentar", + "commentPlaceholder": "Skriv din kommentar...", + "postComment": "Skriv kommentar", + "toComment": "at efterlade en kommentar.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Fotos", + "subtitle": "De seneste snapshots taget på hotellet", + "noPhotos": "Ingen billeder endnu.", + "photoAlt": "Foto af bruger #{id}", + "byUser": "af bruger #{id}" + }, + "badges": { + "title": "Badges", + "subtitle": "Badges kan du tjene og vise frem rundt omkring på hotellet", + "noBadges": "Ingen tilgængelige badges endnu." + }, + "community": { + "title": "Fællesskab", + "subtitle": "Alt sker omkring hotellet på ét sted", + "open": "Åbn →", + "links": { + "rankings": { + "title": "Placeringer", + "text": "Se de rigeste spillere på hotellet, rangeret efter kreditter." + }, + "staff": { + "title": "Personale", + "text": "Mød holdet, der holder hotellet kørende hver dag." + }, + "news": { + "title": "Nyheder", + "text": "De seneste meddelelser, begivenheder og opdateringer." + }, + "photos": { + "title": "Fotos", + "text": "Snapshots deles af fællesskabet fra omkring hotellet." + }, + "guilds": { + "title": "Gilder", + "text": "Gennemse de grupper, spillere har oprettet og sluttet sig til." + }, + "leaderboards": { + "title": "Leaderboards", + "text": "Hvem er på toppen i denne sæson på tværs af hotellets statistik." + } + } + }, + "guilds": { + "title": "Gilder", + "subtitle": "Gennemse de grupper, spillere har oprettet og sluttet sig til", + "empty": "Ingen guilds endnu.", + "unnamedGuild": "Unavngiven laug", + "noDescription": "Ingen beskrivelse" + }, + "guild": { + "allGuilds": "← Alle laug", + "unnamedGuild": "Unavngiven laug", + "noDescription": "Ingen beskrivelse", + "memberSingular": "Medlem", + "memberPlural": "Medlemmer", + "founded": "Grundlagt", + "forumLink": "Forum →", + "discussion": "Diskussion", + "membersTitle": "Medlemmer", + "memberLowerSingular": "medlem", + "memberLowerPlural": "medlemmer", + "noMembers": "Ingen medlemmer.", + "owner": "Ejer", + "noMotto": "Intet motto" + }, + "guildForum": { + "backToGuild": "← Tilbage til guild", + "unnamedGuild": "Unavngiven laug", + "forumTitle": "{guild} – Forum", + "threadSingular": "tråd", + "threadPlural": "tråde", + "newThread": "+ Ny tråd", + "empty": "Ingen tråde i dette forum endnu.", + "colSubject": "Emne", + "colAuthor": "Forfatter", + "colPosts": "Indlæg", + "colDate": "Dato", + "noSubject": "(intet emne)", + "pinned": "Fastgjort", + "locked": "Låst", + "userNumber": "Bruger #{id}", + "unknown": "Ukendt", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Tilbage til forum", + "unnamedGuild": "Unavngiven laug", + "title": "Ny tråd", + "subtitle": "i {guild} forum", + "subjectLabel": "Emne", + "subjectPlaceholder": "Tråd emne", + "messageLabel": "Besked", + "messagePlaceholder": "Skriv dit åbningsindlæg...", + "postThread": "Post tråd", + "cancel": "Annuller", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Butik", + "subtitle": "Fyld op på din konto og få fat i eksklusive pakker, valuta og badges.", + "browsingCategory": "Gennemse {category}-pakkerne.", + "all": "Alle", + "allPackages": "Alle pakker", + "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", + "empty": "Ingen tilgængelige pakker lige nu.", + "buy": "Køb", + "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": "Fyld op med PayPal", + "subtitle": "Betal sikkert med PayPal, og dine kreditter tilføjes i det øjeblik, betalingen slettes.", + "cancelled": "Checkout blev annulleret - ingen betaling blev taget.", + "chooseAmount": "Vælg et beløb", + "notConfiguredPre": "PayPal er ikke konfigureret endnu. En administrator skal indstille", + "notConfiguredAnd": "og", + "notConfiguredOptional": "(og eventuelt", + "notConfiguredPost": "for sandkasse vs. live).", + "balanceTitle": "Din balance", + "signedInAs": "Logget ind som {username}", + "credits": "Credits", + "creditsPerUnit": "Kreditter pr. 1,00 {currency}", + "rateLine": "Du modtager {amount}-kreditter pr. 1,00 {currency}. Credits vises i spillet, næste gang du logger ind." + }, + "marketplace": { + "title": "Markedsplads", + "subtitle": "Gennemse møbler og sjældne varer opført af spillere. Opslag placeres i spillet og opdateres live - gå ind på hotellet for at give et tilbud.", + "activeOffers": "Aktive tilbud", + "sellers": "Sælgere", + "totalValue": "Samlet værdi", + "activeListings": "Aktive opslag", + "mostRecentFirst": "Senest opført først", + "empty": "Der er ingen aktive markedspladstilbud lige nu. Kom tilbage senere.", + "colOffer": "Tilbud", + "colItem": "Vare", + "colSeller": "Sælger", + "colPrice": "Pris", + "colListed": "Opført", + "itemLabel": "Vare nr. {id}", + "userLabel": "Bruger #{id}", + "justNow": "lige nu", + "minutesAgo": "for {count} m siden", + "hoursAgo": "for {count} t siden", + "daysAgo": "for {count}d siden" + }, + "rares": { + "title": "Sjældne værdier", + "subtitle": "Få et overblik over alle de sjældne på hotellet, grupperet efter kategori.", + "empty": "Vi har i øjeblikket ingen sjældne opført her.", + "rareCount": "{count, plural, one {# rare} other {# rares}}", + "viewRares": "Se sjældne →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", + "allRares": "← Alle sjældne", + "empty": "Der er endnu ingen sjældne i denne kategori.", + "colRare": "Sjælden", + "colCredits": "Credits", + "colCurrency": "Valuta", + "creditsValue": "{value} kreditter", + "duckets": "Ænder", + "diamonds": "Diamanter", + "credits": "Credits" + }, + "redeem": { + "title": "Indløs en voucher", + "subtitle": "Har du en rabatkode? Indtast den nedenfor for at tilføje belønningen til din konto.", + "enterCode": "Indtast din kode", + "oncePerAccount": "Hver voucher kan kun indløses én gang pr. konto.", + "balanceTitle": "Din balance", + "signedInAs": "Logget ind som {username}", + "credits": "Credits", + "instantCredit": "Indløste belønninger krediteres øjeblikkeligt og vises i spillet, næste gang du logger ind." + }, + "help": { + "title": "Hjælpecenter", + "subtitle": "Find guider, supportemner og hotelreglerne – alt hvad du behøver for at få hjælp.", + "myTickets": "Mine billetter →", + "topicsTitle": "Support emner", + "topicsSubtitle": "Gennemse guider og svar på almindelige spørgsmål", + "topicsEmpty": "Ingen hjælpeemner endnu.", + "rulesTitle": "Hotel regler", + "rulesSubtitle": "Læs venligst disse før du hænger ud på hotellet", + "rulesEmpty": "Ingen regler offentliggjort endnu.", + "categoryEmpty": "Ingen regler i denne kategori." + }, + "helpCategory": { + "back": "← Hjælpecenter", + "topicSubtitle": "Emne i Hjælp", + "moreTitle": "Flere hjælpeemner", + "moreSubtitle": "Hop til et andet supportemne" + }, + "helpTickets": { + "title": "Hjælp billetter", + "subtitle": "Indsend en billet til personalet og spor dine åbne anmodninger.", + "statTotal": "Samlet antal billetter", + "statOpen": "Åbn", + "statClosed": "Lukket", + "newTitle": "Ny billet", + "newSubtitle": "Beskriv dit problem, og personalet vil følge op", + "subjectPlaceholder": "Emne", + "contentPlaceholder": "Beskriv dit problem...", + "submit": "Indsend billet", + "listTitle": "Dine billetter", + "listSubtitle": "Hver anmodning, du har sendt til personalet", + "listEmpty": "Du har ingen billetter endnu.", + "colId": "ID", + "colSubject": "Emne", + "colStatus": "Status", + "colCreated": "Oprettet", + "statusOpen": "Åbn", + "statusClosed": "Lukket", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "Ansøg om {hotel} personale", + "subtitle": "Vi åbner personaleansøgninger i ny og næ. Hvis du støder på en stilling, du føler, at du ville passe perfekt ind i, så tøv ikke med at søge den.", + "noPositionsTitle": "Ingen ledige stillinger", + "noPositionsBody": "Der er i øjeblikket ingen ledige stillinger. Venligst vend tilbage på et senere tidspunkt for at tjekke, om vi har åbninger inden da. Tak for din interesse.", + "noDeadline": "Ingen deadline fastsat", + "deadline": "Ansøgningsfrist: {date}", + "alreadyApplied": "Du har allerede ansøgt om {rank}", + "aboutYou": "Om dig", + "aboutPlaceholder": "Fortæl os, hvorfor du ville være en stor {rank}...", + "applyFor": "Ansøg om {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": "Ansøg om {hotel}-teamet", + "subtitle": "Vi åbner teamansøgninger med jævne mellemrum. Hvis du ser et hold du passer, så tøv ikke med at ansøge!", + "noPositionsTitle": "Ingen holdstillinger åbne", + "noPositionsBody": "Der er i øjeblikket ingen ledige holdstillinger. Venligst vend tilbage senere for at se efter nye åbninger. Tak!", + "pending": "Din ansøgning afventer", + "aboutYou": "Om dig", + "aboutPlaceholder": "Fortæl os, hvorfor du ville passe godt til {rank}...", + "applyFor": "Ansøg om {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": "Stil ind på hotellets radio — live DJ-sæt, anmodninger og shoutouts.", + "nowPlaying": "Spiller nu", + "nothingPlaying": "Intet spiller lige nu.", + "onAir": "I luften: {dj}", + "noDj": "Ingen DJ i luften.", + "audioUnsupported": "Din browser understøtter ikke lydelementet.", + "streamOffline": "Streamen er i øjeblikket offline.", + "exploreTitle": "Udforsk radioen", + "exploreSubtitle": "Tidsplan, råb, anmodninger og mere", + "linkSchedule": "Tidsplan", + "linkScheduleText": "Vores ugentlige line-up af DJs og shows.", + "linkShouts": "Råber", + "linkShoutsText": "Råb og anmodninger fra fællesskabet.", + "linkRequests": "Forespørgsler", + "linkRequestsText": "Bed DJ'en om at spinne dit yndlingsnummer.", + "linkApply": "Ansøg som DJ", + "linkApplyText": "Slut dig til holdet og gå i æteren.", + "linkLeaderboard": "Leaderboard", + "linkLeaderboardText": "Toplyttere rangeret efter optjente point.", + "todayTitle": "Dagens tidsplan", + "todayTitleWithDay": "Dagens tidsplan · {day}", + "todaySubtitle": "Hvad er der i æteren i dag", + "fullWeek": "Hel uge →", + "noShowsToday": "Ingen forestillinger planlagt i dag.", + "colTime": "Tid", + "colShow": "Vis", + "colDj": "DJ", + "untitledShow": "Udsendelse uden titel", + "userNumber": "Bruger #{id}" + }, + "radioSchedule": { + "title": "Radioskema", + "subtitle": "Vores ugentlige line-up af DJs og shows", + "empty": "Ingen forestillinger planlagt endnu.", + "colDay": "dag", + "colTime": "Tid", + "colDj": "DJ", + "colShow": "Vis", + "noShows": "Ingen shows" + }, + "radioShouts": { + "title": "Radio råb", + "subtitle": "Råb og anmodninger fra fællesskabet", + "postTitle": "Send et råb", + "postSubtitle": "Send en besked til DJ on air", + "messageLabel": "Din besked", + "messagePlaceholder": "Send et råb til DJ'en...", + "shoutButton": "Råb", + "loginToPost": "Log ind for at sende et råb.", + "latestTitle": "Seneste råb", + "latestSubtitle": "De seneste beskeder fra lyttere", + "empty": "Ingen råb endnu. Vær den første!", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Radiokonkurrencer", + "subtitle": "Stil ind og deltag i vores seneste on-air konkurrencer", + "empty": "Ingen konkurrencer endnu.", + "contestLabel": "Konkurrence #{id}", + "dateUnknown": "Dato ukendt" + }, + "radioGiveaways": { + "title": "Radio Giveaways", + "subtitle": "Lyt med for at få din chance for at vinde i vores radio giveaways", + "empty": "Ingen giveaways endnu.", + "giveawayLabel": "Giveaway #{id}", + "dateUnknown": "Dato ukendt" + }, + "radioLeaderboard": { + "title": "Radiolytter Leaderboard", + "subtitle": "Top 50 lyttere efter optjente point ved at stille ind på radioen", + "empty": "Ingen lytterpoint at vise endnu.", + "colRank": "Rang", + "colAvatar": "Avatar", + "colListener": "Lytter", + "colPoints": "Points" + }, + "radioRequests": { + "formTitle": "Send en anmodning", + "formSubtitle": "Bed DJ'en om at spille dit yndlingsnummer", + "songLabel": "Sang", + "songPlaceholder": "Titel på sangen", + "artistLabel": "Kunstner", + "artistPlaceholder": "Kunstnerens navn (valgfrit)", + "submitButton": "Indsend anmodning", + "loginToRequest": "Log ind for at indsende en anmodning.", + "latestTitle": "Seneste anmodninger", + "latestSubtitle": "De senest efterspurgte sange", + "empty": "Ingen anmodninger endnu.", + "colSong": "Sang", + "colArtist": "Kunstner", + "colRequester": "Anmoder", + "colDate": "Dato", + "colStatus": "Status", + "statusPending": "Afventer", + "statusApproved": "Godkendt", + "statusPlayed": "Spillede", + "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": "Ansøg om at blive Radio DJ", + "subtitle": "Fortæl os om dig selv, og hvorfor du ville passe godt til æteren", + "latestTitle": "Din seneste ansøgning", + "statusLabel": "Status:", + "submittedOn": "· indsendt {date}", + "submitAgain": "Du kan indsende igen nedenfor, hvis dine oplysninger er ændret.", + "formTitle": "Ansøgningsskema", + "formSubtitle": "Alle felter markeret som obligatoriske skal udfyldes", + "realNameLabel": "Rigtigt navn", + "realNamePlaceholder": "Dit fulde navn", + "ageLabel": "Alder", + "availabilityLabel": "Tilgængelighed", + "availabilityPlaceholder": "Hvilke dage og tidspunkter kan du sende?", + "musicStyleLabel": "Musik stil", + "musicStylePlaceholder": "f.eks. House, Pop, Hip-Hop", + "experienceLabel": "Erfaring", + "optional": "(valgfrit)", + "experiencePlaceholder": "Har du tidligere erfaring med DJ eller vært?", + "motivationLabel": "Motivation", + "motivationPlaceholder": "Hvorfor vil du være med på radioholdet?", + "submitButton": "Indsend ansøgning", + "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": "Kontoindstillinger", + "accountSettingsSubtitle": "Administrer din profil, sikkerhed og tilknyttede konti", + "publicProfile": "Din offentlige profil", + "noMotto": "Intet motto", + "noEmail": "Ingen e-mail på filen", + "changeMotto": "Skift motto", + "changeMottoSubtitle": "Opdateres øjeblikkeligt i spillet, hvis du er online", + "mottoPlaceholder": "Dit motto", + "saveMotto": "Gem motto", + "securityTitle": "Sikkerhed", + "securitySubtitle": "To-faktor autentificering", + "securityDescription": "Tilføj et ekstra beskyttelseslag til din konto.", + "twoFactorLink": "To-faktor autentificering" + }, + "settings2fa": { + "backToSettings": "← Indstillinger", + "title": "To-faktor autentificering", + "subtitle": "Tilføj et ekstra sikkerhedslag med en godkendelsesapp", + "nowEnabled": "2FA er nu aktiveret. 🔒", + "disabledNotice": "2FA er blevet deaktiveret.", + "badCode": "Den kode var ikke gyldig – prøv igen.", + "noAppKeyPrefix": "2FA er ikke tilgængelig indtil", + "noAppKeyMiddle": "er konfigureret (den samme Laravel", + "noAppKeySuffix": "som din AtomCMS installerer, så eksisterende hemmeligheder forbliver læsbare).", + "isEnabled": "2FA er aktiveret", + "onYourAccount": "på din konto.", + "disable": "Deaktiver 2FA", + "scanOrEnter": "Scan eller indtast denne tast", + "scanInstructions": "Føj dette til Google Authenticator / Authy, og indtast derefter den 6-cifrede kode for at bekræfte.", + "manualKey": "Manuel nøgle:", + "codePlaceholder": "6-cifret kode", + "confirm": "Bekræft", + "enableIntro": "Tilføj et ekstra sikkerhedslag med en godkendelsesapp.", + "enable": "Aktiver 2FA", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Tilknyttede konti", + "subtitle": "Link en social konto, så du kan logge ind med et enkelt klik", + "connected": "Forbundet", + "unavailable": "Ikke tilgængelig", + "login": { + "title": "Log ind", + "subtitle": "Velkommen tilbage - log ind for at komme ind på hotellet.", + "subtitle2fa": "Indtast den 6-cifrede kode fra din autentificering.", + "usernamePlaceholder": "Brugernavn", + "passwordPlaceholder": "Adgangskode", + "codePlaceholder": "2FA kode", + "pleaseWait": "Vent venligst...", + "verify": "Bekræft", + "signIn": "Log ind", + "or": "eller", + "noAccount": "Ingen konto?", + "createOne": "Opret en", + "forgotPassword": "Glemt adgangskode?", + "errorInvalidCredentials": "Ugyldigt brugernavn eller adgangskode", + "errorInvalid2fa": "Ugyldig 2FA-kode", + "welcomeBack": "Velkommen tilbage", + "welcomeBackSub": "Log ind for at fortsætte til {hotelName}", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Opret konto", + "subtitle": "Kom med på hotellet - det tager kun et øjeblik.", + "username": "Brugernavn", + "email": "E-mail", + "password": "Adgangskode", + "confirmPassword": "Gentag adgangskoden", + "usernamePlaceholder": "Brugernavn", + "emailPlaceholder": "E-mail", + "passwordPlaceholder": "Adgangskode (min. 6 tegn)", + "confirmPasswordPlaceholder": "Gentag adgangskoden", + "selectOutfit": "Vælg dit outfit", + "termsAccept": "Jeg er 18+ og accepterer vilkårene og reglerne for {hotel}.", + "createAccount": "Opret konto", + "creatingAccount": "Opretter konto...", + "redirecting": "Omdirigerer til din konto...", + "alreadyHaveAccount": "Har du allerede en konto? Log ind!", + "register": "Tilmeld dig", + "termsError": "Du skal acceptere vilkårene og reglerne for at registrere dig.", + "usernameError": "Brugernavn er påkrævet.", + "emailError": "Gyldig e-mail er påkrævet.", + "passwordError": "Adgangskoden skal være på mindst 6 tegn.", + "confirmPasswordError": "Adgangskoder stemmer ikke overens.", + "termsRequired": "Du skal acceptere vilkårene og reglerne.", + "usernameRequired": "Brugernavn er påkrævet.", + "emailRequired": "E-mail er påkrævet.", + "passwordRequired": "Adgangskode er påkrævet.", + "passwordsDontMatch": "Adgangskoder stemmer ikke overens.", + "alreadyHaveAccountPre": "Har du allerede en konto?", + "alreadyHaveAccountLink": "Log ind", + "whoIsOnline": "Hvem er online", + "usersOnline": "{count} online", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Nulstil adgangskode", + "subtitle": "Vi sender dig en e-mail med et sikkert link for at angive en ny adgangskode.", + "sentNotice": "Hvis denne e-mail er registreret, er et nulstillingslink blevet sendt. Tjek din indbakke.", + "emailPlaceholder": "Din e-mail", + "sendResetLink": "Send nulstillingslink", + "backToLogin": "Tilbage til login", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Indstil en ny adgangskode", + "subtitle": "Vælg en stærk adgangskode, du ikke bruger andre steder.", + "passwordPlaceholder": "Ny adgangskode (min. 6 tegn)", + "resetPassword": "Nulstil adgangskode", + "backToLogin": "Tilbage til login" + }, + "verify": { + "verifiedTitle": "Du er klar", + "verifiedSubtitle": "E-mail bekræftet", + "verifiedBody": "Din e-mailadresse er blevet bekræftet. Du kan nu logge ind og spille.", + "goToLogin": "Gå til login", + "alreadyTitle": "Allerede bekræftet", + "alreadySubtitle": "Intet tilbage at gøre", + "alreadyBody": "Denne e-mailadresse er allerede blevet bekræftet.", + "unavailableTitle": "Prøv igen om lidt", + "unavailableSubtitle": "Server utilgængelig", + "unavailableBody": "Vi kunne ikke nå serveren for at bekræfte din e-mail. Prøv venligst linket igen om et øjeblik.", + "invalidTitle": "E-mailbekræftelse", + "invalidSubtitle": "Ugyldigt eller udløbet link", + "invalidBody": "Dette bekræftelseslink er ikke gyldigt. Sørg for, at du har åbnet hele linket fra din e-mail, eller anmod om et nyt.", + "backToLogin": "Tilbage til login" + }, + "banned": { + "title": "Du er bandlyst", + "subtitle": "Konto suspenderet", + "body": "Din konto er blevet suspenderet fra hotellet.", + "reasonLabel": "Årsag:", + "permanent": "Dette forbud er permanent.", + "expires": "Udløber {date}.", + "contactStaff": "Hvis du mener, at dette er en fejl, skal du kontakte personaleteamet." + }, + "maintenance": { + "title": "{hotel} er under vedligeholdelse", + "subtitle": "Vi vender snart tilbage", + "staffCanLogIn": "Personalet kan stadig logge ind." + }, + "admin": { + "nav": { + "overview": "Oversigt", + "dashboard": "Dashboard", + "content": "Indhold", + "articles": "Artikler", + "tags": "Tags", + "navigator": "Navigator", + "helpCenter": "Hjælpecenter", + "advertisements": "Annoncer", + "writeableBoxes": "Skrivbare kasser", + "photos": "Fotos", + "tickets": "Billetter", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Brugere og adgang", + "users": "Brugere", + "bans": "Forbud", + "ipManagement": "IP-håndtering", + "vpn": "VPN", + "applications": "Ansøgninger", + "teams": "Hold", + "permissions": "Tilladelser", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "Økonomi", + "catalog": "Katalog", + "shop": "Butik", + "transactions": "Transaktioner", + "vouchers": "Kuponer", + "subscriptions": "Abonnementer", + "rareValues": "Sjældne værdier", + "badges": "Badges", + "achievements": "Præstationer", + "calendar": "Kalender", + "radio": "Radio", + "radioHistory": "Radiohistorie", + "radioBanners": "Bannere", + "radioEmbed": "Integrer", + "radioApiKeys": "API nøgler", + "radioModeration": "Moderering", + "radioSettings": "Indstillinger", + "radioMonitoring": "Overvågning", + "radioPoints": "Points", + "radioRanks": "Rangerer", + "radioAutodj": "Auto DJ", + "system": "System", + "commandocentrum": "Kommandocentrum", + "emulator": "Emulator", + "alerts": "Advarsler", + "logs": "Logs", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Ord filter", + "maintenance": "Vedligeholdelse", + "rooms": "Værelser", + "emailTemplates": "Email skabeloner", + "theme": "Tema", + "media": "Medier", + "favicon": "Favicon", + "sounds": "Lyde", + "translations": "Oversættelser", + "import": "Importer", + "settings": "Indstillinger", + "backToSite": "Tilbage til webstedet", + "housekeeping": "Husholdning", + "hotelManagementPanel": "Hotel management panel", + "rankLabel": "Rangering {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Search menu…", + "clearMenuSearch": "Clear menu search", + "noMenuResults": "No matching pages.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "studio": "Studio", + "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" + }, + "dashboard": { + "title": "Dashboard", + "subtitle": "Hotel oversigt & live status", + "playersOnline": "Spillere online", + "articles": "Artikler", + "activeBans": "Aktive forbud", + "database": "Database", + "databaseConnected": "Forbundet", + "databaseDown": "Ned", + "usersByRank": "Brugere efter rang", + "noAccountsToBreakDown": "Ingen konti at opdele endnu", + "rankLabel": "Rangering {rank}", + "rankWithCount": "Ranger {rank}: {count} konti", + "recentStaffActivity": "Seneste personaleaktivitet", + "viewAll": "Se alle", + "noStaffActivityLogged": "Ingen personaleaktivitet logget endnu", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "Artikler", + "subtitle": "Nyhedsartikler — 50 seneste", + "newArticle": "+ Ny artikel", + "edit": "Rediger", + "delete": "Slet", + "noArticles": "Ingen artikler endnu", + "confirmDelete": "Er du sikker på, at du vil slette \"{title}\"?", + "colTitle": "Titel", + "colSlug": "Snegl", + "colAuthor": "Forfatter", + "colCreated": "Oprettet", + "colActions": "Handlinger", + "form": { + "title": "Titel", + "titlePlaceholder": "Artiklens titel", + "slug": "Snegl", + "slugPlaceholder": "artikel-url-slug", + "category": "Kategori", + "categoryPlaceholder": "Vælg en kategori", + "body": "Krop", + "bodyPlaceholder": "Skriv dit artikelindhold...", + "image": "Billede", + "imagePlaceholder": "https://example.com/image.png", + "thumbnail": "Miniaturebillede", + "thumbnailPlaceholder": "https://example.com/thumb.png", + "published": "Udgivet", + "featured": "Udvalgte", + "save": "Gem artiklen", + "saving": "Gemmer...", + "deleteArticle": "Slet artikel", + "deleteConfirm": "Denne handling kan ikke fortrydes. Artiklen fjernes permanent.", + "cancel": "Annuller", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "Tags", + "subtitle": "Artikel tags / kategorier", + "addTag": "Tilføj tag", + "name": "Navn", + "namePlaceholder": "Tag navn", + "backgroundColour": "Baggrundsfarve", + "createTag": "Opret tag", + "editTag": "Rediger tag", + "updateTag": "Opdater tag", + "deleteTag": "Slet tag", + "confirmDelete": "Vil du slette \"{name}\"?", + "noTags": "Ingen tags endnu", + "colId": "ID", + "colTag": "Tag", + "colColour": "Farve", + "colUsedBy": "Brugt af", + "colCreated": "Oprettet", + "colActions": "Handlinger", + "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": "Flade kategorier", + "publicRooms": "Offentlige lokaler", + "addCategory": "Tilføj kategori", + "editCategory": "Rediger kategori", + "deleteCategory": "Slet kategori", + "categoryName": "Kategorinavn", + "categoryNamePlaceholder": "f.eks. Chill & Chat", + "categoryOrder": "Bestil", + "roomName": "Værelsesnavn", + "roomNamePlaceholder": "f.eks. Velkommen Lounge", + "roomId": "Rum ID", + "roomIdPlaceholder": "Numerisk rum-id", + "save": "Gem", + "cancel": "Annuller", + "noCategories": "No categories yet", + "noPublicRooms": "Ingen offentlige lokaler endnu", + "colId": "ID", + "colName": "Navn", + "colOrder": "Bestil", + "colRooms": "Værelser", + "colActions": "Handlinger", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Hjælpecenter", + "subtitle": "Supportindlæg og FAQ-håndtering", + "entries": "Indgange", + "newEntry": "+ Ny post", + "edit": "Rediger", + "delete": "Slet", + "noEntries": "Ingen poster endnu", + "confirmDelete": "Vil du slette \"{title}\"?", + "colId": "ID", + "colTitle": "Titel", + "colCategory": "Kategori", + "colCreated": "Oprettet", + "colActions": "Handlinger", + "form": { + "title": "Titel", + "titlePlaceholder": "Indgangstitel", + "category": "Kategori", + "categoryPlaceholder": "Vælg kategori", + "body": "Krop", + "bodyPlaceholder": "Skriv svaret...", + "save": "Gem post", + "saving": "Gemmer...", + "deleteEntry": "Slet post", + "cancel": "Annuller" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Annoncer", + "subtitle": "Administrer hotelannoncer og reklamebannere", + "newAd": "+ Ny annonce", + "edit": "Rediger", + "delete": "Slet", + "noAds": "Ingen annoncer endnu", + "confirmDelete": "Vil du slette denne annonce?", + "colId": "ID", + "colName": "Navn", + "colImage": "Billede", + "colUrl": "URL", + "colViews": "Visninger", + "colStatus": "Status", + "colCreated": "Oprettet", + "colActions": "Handlinger", + "form": { + "name": "Navn", + "namePlaceholder": "Annoncenavn", + "image": "Billed-URL", + "imagePlaceholder": "https://example.com/banner.png", + "url": "Mål-URL", + "urlPlaceholder": "https://example.com", + "enabled": "Aktiveret", + "save": "Gem annonce", + "saving": "Gemmer...", + "deleteAd": "Slet annonce", + "cancel": "Annuller" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Skrivbare æsker", + "subtitle": "Indholdspaneler vist på tværs af hotellet og CMS", + "newBox": "Ny æske", + "edit": "Rediger", + "delete": "Slet", + "noBoxes": "Ingen skrivbare bokse endnu", + "confirmDelete": "Vil du slette denne boks?", + "colId": "ID", + "colName": "Navn", + "colLocation": "Beliggenhed", + "colUpdated": "Opdateret", + "colActions": "Handlinger", + "form": { + "name": "Navn", + "namePlaceholder": "Æskenavn", + "location": "Beliggenhed", + "locationPlaceholder": "f.eks. hjemmeside, sidebjælke", + "content": "Indhold", + "contentPlaceholder": "Skriv boksens indhold...", + "enabled": "Aktiveret", + "save": "Gem boks", + "saving": "Gemmer...", + "deleteBox": "Slet boks", + "cancel": "Annuller", + "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": "Seneste kamerabilleder i spillet", + "delete": "Slet", + "approve": "Godkend", + "noPhotos": "Ingen billeder at moderere", + "confirmDelete": "Vil du slette dette billede permanent?", + "colId": "ID", + "colPreview": "Forhåndsvisning", + "colUser": "Bruger", + "colRoom": "Værelse", + "colTimestamp": "Tidsstempel", + "colActions": "Handlinger", + "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", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Brugere", + "subtitle": "Gennemse, søg og administrer hotelkonti", + "search": "Søg", + "searchPlaceholder": "Søg efter brugernavn, e-mail eller id...", + "searchResults": "{count, plural, one {# result} other {# results}} for \"{query}\"", + "noResults": "Ingen brugere fundet", + "colId": "ID", + "colUsername": "Brugernavn", + "colEmail": "E-mail", + "colRank": "Rang", + "colOnline": "Online", + "colRegistered": "Registreret", + "colLastOnline": "Sidst online", + "colActions": "Handlinger", + "yes": "Ja", + "no": "Nej", + "edit": "Rediger", + "setRank": "Sæt rang", + "disconnect": "Afbryd forbindelsen", + "alert": "Advarsel", + "ban": "Forbud", + "detail": { + "title": "User: {username}", + "subtitle": "Kontooplysninger og administration", + "overview": "Oversigt", + "actions": "Handlinger", + "username": "Brugernavn", + "email": "E-mail", + "motto": "Motto", + "rank": "Rang", + "credits": "Credits", + "duckets": "Ænder", + "diamonds": "Diamonds", + "online": "Online", + "registered": "Registered", + "lastOnline": "Sidst online", + "ipAddress": "IP-adresse", + "machineId": "Maskin-id", + "sendAlert": "Send alert", + "sendMessage": "Send besked", + "disconnectUser": "Disconnect user", + "banUser": "Forbyd bruger", + "resetPassword": "Nulstil adgangskode", + "deleteUser": "Slet bruger", + "confirmDelete": "Er du sikker på, at du vil slette {username}? Dette kan ikke fortrydes.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Rediger bruger: {username}", + "subtitle": "Rediger kontooplysninger", + "username": "Brugernavn", + "usernamePlaceholder": "Brugernavn", + "email": "E-mail", + "emailPlaceholder": "bruger@eksempel.com", + "motto": "Motto", + "mottoPlaceholder": "Bruger motto", + "rank": "Rang", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamanter", + "save": "Save changes", + "saving": "Gemmer...", + "cancel": "Annuller" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Bans", + "subtitle": "Administrer konto-, IP- og maskinforbud", + "newBan": "Nyt forbud", + "edit": "Rediger", + "delete": "Slet", + "noBans": "Ingen forbud endnu", + "confirmDelete": "Vil du fjerne dette forbud?", + "colId": "ID", + "colValue": "Værdi", + "colType": "Type", + "colReason": "Årsag", + "colBannedBy": "Banned by", + "colExpires": "Udløber", + "colCreated": "Created", + "colActions": "Handlinger", + "form": { + "value": "Værdi", + "valuePlaceholder": "Brugernavn, IP eller maskin-id", + "type": "Type", + "typeUser": "Bruger", + "typeIp": "IP", + "typeMachine": "Maskine", + "reason": "Årsag", + "reasonPlaceholder": "Ban grund", + "expiresAt": "Udløber kl", + "permanent": "Permanent", + "save": "Gem forbud", + "saving": "Gemmer...", + "cancel": "Annuller" + }, + "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": "Administrer IP-hvidliste og sortliste", + "whitelist": "Hvidliste", + "blacklist": "Sortliste", + "addIp": "Tilføj IP", + "ipAddress": "IP-adresse", + "ipAddressPlaceholder": "f.eks. 127.0.0.1", + "reason": "Årsag", + "reasonPlaceholder": "Reason for listing", + "add": "Tilføj", + "remove": "Fjern", + "confirmRemove": "Vil du fjerne denne IP fra {list}?", + "noWhitelistedIps": "Ingen hvidlistede IP'er", + "noBlacklistedIps": "No blacklisted IPs", + "colIp": "IP", + "colReason": "Årsag", + "colAdded": "Tilføjet", + "colActions": "Handlinger", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "VPN / proxy-detektion", + "subtitle": "Konfigurer VPN- og proxyregistreringsindstillinger", + "enabled": "Aktiveret", + "apiKey": "API nøgle", + "apiKeyPlaceholder": "Din VPN-detekterings-API-nøgle", + "apiKeyHint": "Leave empty to disable", + "blockOnDetect": "Bloker ved detektion", + "blockOnDetectHint": "Bloker automatisk brugere, der er fundet bag en VPN eller proxy", + "save": "Gem indstillinger", + "saving": "Gemmer...", + "settingsSaved": "VPN-indstillinger blev gemt", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Personale ansøgninger", + "subtitle": "Afventende og gennemgået personaleansøgninger", + "pending": "Afventer", + "approved": "Godkendt", + "rejected": "Afvist", + "noApplications": "Ingen ansøgninger endnu", + "colId": "ID", + "colApplicant": "Applicant", + "colPosition": "Stilling", + "colStatus": "Status", + "colSubmitted": "Submitted", + "colActions": "Handlinger", + "review": "Gennemgå", + "approve": "Godkend", + "reject": "Afvis", + "confirmApprove": "Vil du godkende {username} for {position}?", + "confirmReject": "Vil du afvise {username}s ansøgning om {position}?", + "detail": { + "title": "Ansøgning af {username}", + "subtitle": "Til {position}", + "about": "Om ansøgeren", + "message": "Ansøgningsmeddelelse", + "status": "Status", + "submitted": "Indsendt", + "noMessage": "No message provided" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Hold", + "subtitle": "Definer medarbejdernes rangnavne og beskrivelser", + "addRank": "Tilføj rang", + "editRank": "Rediger rang", + "deleteRank": "Slet rang", + "noTeams": "Ingen rangdefinitioner endnu", + "confirmDelete": "Vil du slette definitionen af rang {id}?", + "colId": "ID", + "colRank": "Rang", + "colName": "Navn", + "colBadge": "Badge", + "colColour": "Colour", + "colActions": "Handlinger", + "form": { + "rankId": "Rang ID", + "rankIdPlaceholder": "Numerisk rang-id", + "name": "Navn", + "namePlaceholder": "f.eks. Administrator", + "badge": "Badge code", + "badgePlaceholder": "f.eks. ADM001", + "colour": "Colour", + "colourPlaceholder": "f.eks. #ff0000", + "save": "Save team definition", + "saving": "Gemmer...", + "cancel": "Annuller" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Tilladelser", + "subtitle": "Administrer rangbaserede tilladelser til administrationspanelet", + "addPermission": "Tilføj tilladelse", + "editPermission": "Rediger tilladelse", + "deletePermission": "Slet tilladelse", + "noPermissions": "Ingen tilladelser er konfigureret endnu", + "confirmDelete": "Vil du slette denne tilladelse?", + "colId": "ID", + "colRank": "Rang", + "colPermission": "Tilladelse", + "colCreated": "Oprettet", + "colActions": "Handlinger", + "form": { + "rankId": "Rang ID", + "rankIdPlaceholder": "Minimum rang påkrævet", + "permission": "Tilladelsesnøgle", + "permissionPlaceholder": "f.eks. admin.articles.manage", + "save": "Gem tilladelse", + "saving": "Gemmer...", + "cancel": "Annuller" + } + }, + "catalog": { + "title": "Katalog", + "subtitle": "Gennemse og administrer katalogsider og elementer", + "pages": "Sider", + "items": "genstande", + "addPage": "Add page", + "editPage": "Edit page", + "deletePage": "Slet side", + "addItem": "Tilføj element", + "editItem": "Rediger element", + "deleteItem": "Slet element", + "noPages": "No catalog pages yet", + "noItems": "Ingen varer på denne side", + "confirmDeletePage": "Vil du slette katalogsiden \"{name}\"?", + "confirmDeleteItem": "Vil du slette dette element?", + "colId": "ID", + "colName": "Navn", + "colIcon": "Ikon", + "colOrder": "Bestil", + "colItems": "genstande", + "colEnabled": "Aktiveret", + "colActions": "Handlinger", + "colItemId": "Vare-id", + "colItemName": "Varens navn", + "colCostCredits": "Omkostninger (kreditter)", + "colCostPoints": "Pris (point)", + "colLimited": "Begrænset", + "pageForm": { + "name": "Navn", + "namePlaceholder": "Sidenavn", + "icon": "Ikon ID", + "iconPlaceholder": "Numerisk ikon-id", + "order": "Bestil", + "enabled": "Aktiveret", + "parent": "Forældre side", + "parentNone": "Ingen (rod)", + "save": "Save page", + "saving": "Gemmer...", + "cancel": "Annuller" + }, + "itemForm": { + "itemId": "Vare-id", + "itemName": "Varens navn", + "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": "Annuller" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Butik", + "subtitle": "Håndtere pakker og ordrer", + "packages": "Packages", + "orders": "Ordrer", + "newPackage": "+ Ny pakke", + "edit": "Rediger", + "delete": "Slet", + "viewOrder": "Visning", + "noPackages": "Ingen butikspakker endnu", + "noOrders": "No orders yet", + "confirmDelete": "Vil du slette denne pakke?", + "colId": "ID", + "colName": "Navn", + "colPrice": "Pris", + "colCurrency": "Valuta", + "colType": "Type", + "colSold": "Sold", + "colEnabled": "Aktiveret", + "colActions": "Handlinger", + "colOrderId": "Ordre-id", + "colCustomer": "Kunde", + "colPackage": "Pakke", + "colAmount": "Beløb", + "colStatus": "Status", + "colDate": "Dato", + "statusPending": "Afventer", + "statusCompleted": "Afsluttet", + "statusRefunded": "Refunderet", + "form": { + "name": "Navn", + "namePlaceholder": "Package name", + "description": "Description", + "descriptionPlaceholder": "Pakkebeskrivelse", + "price": "Pris", + "currency": "Valuta", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Type", + "typeCredits": "Credits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamanter", + "typeBadge": "Badge", + "typeFurni": "Furniture", + "typeRank": "Rang", + "amount": "Beløb", + "badgeCode": "Badge kode", + "badgeCodePlaceholder": "f.eks. VIP001", + "rankId": "Rank ID", + "furniItems": "Møbelartikler", + "enabled": "Aktiveret", + "save": "Gem pakken", + "saving": "Gemmer...", + "cancel": "Annuller", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "Transaktioner", + "subtitle": "PayPal betalingslog", + "noTransactions": "No transactions yet", + "colId": "ID", + "colUser": "Bruger", + "colAmount": "Beløb", + "colCurrency": "Valuta", + "colPackage": "Pakke", + "colStatus": "Status", + "colDate": "Dato", + "colActions": "Handlinger", + "statusCompleted": "Afsluttet", + "statusPending": "Afventer", + "statusFailed": "Mislykkedes", + "statusRefunded": "Refunderet", + "detail": { + "title": "Transaktion nr. {id}", + "paypalId": "PayPal ID", + "payerEmail": "Betaler e-mail", + "grossAmount": "Bruttobeløb", + "fee": "Gebyr", + "netAmount": "Netto beløb" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Shop vouchers", + "subtitle": "Administrer indløselige værdibeviskoder", + "newVoucher": "+ Ny voucher", + "edit": "Rediger", + "delete": "Slet", + "noVouchers": "Ingen værdikuponer endnu", + "confirmDelete": "Vil du slette voucher \"{code}\"?", + "colId": "ID", + "colCode": "Kode", + "colValue": "Værdi", + "colType": "Type", + "colUses": "Uses / Max", + "colExpires": "Udløber", + "colCreated": "Oprettet", + "colActions": "Handlinger", + "form": { + "code": "Code", + "codePlaceholder": "f.eks. SOMMER 2025", + "value": "Værdi", + "type": "Type", + "typeCredits": "Credits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamonds", + "typeBadge": "Badge", + "typeFurni": "Møbler", + "typeRank": "Rank", + "badgeCode": "Badge kode", + "badgeCodePlaceholder": "f.eks. VIP001", + "rankId": "Rank ID", + "maxUses": "Max bruger", + "maxUsesPlaceholder": "0 = ubegrænset", + "expiresAt": "Udløber kl", + "enabled": "Aktiveret", + "save": "Gem voucher", + "saving": "Gemmer...", + "cancel": "Annuller", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Abonnementer", + "subtitle": "Aktive tilbagevendende abonnementer", + "noSubscriptions": "Ingen aktive abonnementer", + "cancel": "Annuller", + "confirmCancel": "Vil du annullere abonnementet på {username}?", + "colId": "ID", + "colUser": "Bruger", + "colPackage": "Pakke", + "colAmount": "Beløb", + "colInterval": "Interval", + "colStarted": "Startede", + "colNextBilling": "Næste fakturering", + "colStatus": "Status", + "colActions": "Handlinger", + "statusActive": "Aktiv", + "statusCancelled": "Annulleret", + "statusExpired": "Udløbet", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Rare Values", + "subtitle": "Administrer sjældne værdikategorier og varepriser", + "categories": "Kategorier", + "items": "genstande", + "addCategory": "Add category", + "editCategory": "Rediger kategori", + "deleteCategory": "Slet kategori", + "noCategories": "Ingen sjældne værdikategorier endnu", + "confirmDeleteCategory": "Vil du slette kategorien \"{name}\" og alle dens elementer?", + "colId": "ID", + "colName": "Navn", + "colItems": "genstande", + "colUpdated": "Opdateret", + "colActions": "Handlinger", + "colItemName": "Varens navn", + "colCredits": "Credits", + "colPoints": "Points", + "colPointType": "Punkttype", + "categoryForm": { + "name": "Navn", + "namePlaceholder": "Kategorinavn", + "save": "Gem kategori", + "saving": "Gemmer...", + "cancel": "Annuller" + }, + "itemForm": { + "itemName": "Varens navn", + "itemNamePlaceholder": "f.eks. Throne", + "credits": "Credits værdi", + "points": "Pointværdi", + "pointType": "Punkttype", + "pointTypeDuckets": "Ænder", + "pointTypeDiamonds": "Diamonds", + "save": "Save item", + "saving": "Saving…", + "cancel": "Annuller", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Badges", + "subtitle": "Upload, giv og administrer badgekatalog", + "upload": "Upload", + "giveBadge": "Giv badge", + "catalogue": "Catalogue", + "uploadTitle": "Upload a new badge", + "uploadSubtitle": "Upload en badge-billedfil", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "f.eks. VIP001", + "badgeFile": "Badge-fil", + "badgeFileHint": "PNG eller GIF, anbefales 40x40", + "uploadButton": "Upload", + "uploading": "Uploader...", + "giveTitle": "Give badge to user", + "giveSubtitle": "Giv et badge til en bestemt bruger", + "username": "Brugernavn", + "usernamePlaceholder": "Target username", + "giveButton": "Giv badge", + "giving": "Giver…", + "catalogueTitle": "Badge katalog", + "catalogueSubtitle": "Alle tilgængelige badges på hotellet", + "noBadges": "Ingen badges i kataloget", + "search": "Søg badges", + "searchPlaceholder": "Søg efter kode eller navn...", + "colCode": "Kode", + "colImage": "Billede", + "colName": "Navn", + "colDescription": "Beskrivelse", + "colActions": "Handlinger", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Præstationer", + "subtitle": "Skrivebeskyttet liste over præstationer i spillet", + "noAchievements": "Ingen præstationer konfigureret", + "colId": "ID", + "colName": "Navn", + "colCategory": "Kategori", + "colLevels": "Niveauer", + "colReward": "Belønning", + "colProgress": "Fremskridt", + "levelLabel": "Niveau {level}", + "rewardCredits": "{count} kreditter", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Kalender kampagner", + "subtitle": "Skrivebeskyttet liste over kalenderkampagner og begivenheder", + "noCampaigns": "Ingen kalenderkampagner endnu", + "colId": "ID", + "colName": "Navn", + "colStart": "Start", + "colEnd": "Slut", + "colType": "Type", + "colReward": "Belønning", + "colActions": "Handlinger", + "detail": { + "title": "Kampagne: {name}", + "subtitle": "Kalender begivenhed detaljer", + "days": "dage", + "dayLabel": "Dag {day}", + "reward": "Belønning", + "noDays": "Der er ikke konfigureret dage for denne kampagne", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Radio Moderation", + "subtitle": "Seneste råb, DJ-applikationer og on-air tidsplaner (25 seneste af hver).", + "moderation": "Moderering", + "shouts": "Råber", + "applications": "Ansøgninger", + "schedules": "Tidsplaner", + "settings": "Indstillinger", + "embed": "Integrer", + "ranks": "Rangerer", + "history": "Historie", + "apiKeys": "API nøgler", + "points": "Points", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Radioovervågning", + "subtitle": "Skrivebeskyttet live-probe af de konfigurerede radioendepunkter (radio_now_playing_api_url, radio_listeners_api_url). Hver anmodning fejler blødt med en {timeout}s timeout — ingen data skrives. Konfigurer URL'er under Indstillinger.", + "stream": "Stream", + "online": "Online", + "offline": "Offline", + "notConfigured": "Ikke konfigureret", + "nowPlaying": "Spiller nu", + "nowPlayingApi": "Now-playing API", + "listenersApi": "Lytters API", + "listeners": "Lyttere", + "currentSong": "Aktuel sang", + "bitrate": "Bitrate", + "status": "Status", + "noNowPlayingHint": "intet API-sæt, der nu spiller", + "noListenersHint": "no listeners API set", + "endpointDiagnostics": "Slutpunktsdiagnostik", + "diagnosticsLegend": "OK: tilgængelig · WARN: ikke konfigureret · ERROR: anmodningen mislykkedes eller fik timeout.", + "streamUrl": "Stream URL", + "unreachable": "unreachable", + "refresh": "Opdater" + }, + "user": "Bruger", + "message": "Besked", + "posted": "Posted", + "realName": "Real Name", + "age": "Age", + "style": "Style", + "applied": "Applied", + "day": "Day", + "start": "Start", + "end": "Slut", + "show": "Show", + "status": "Status", + "active": "active", + "inactive": "inactive", + "hidden": "skjult", + "activeSchedules": "Active schedules", + "noShouts": "Ingen råb at moderere", + "noApplications": "Ingen ansøgninger indsendt.", + "noSchedules": "Ingen tidsplaner konfigureret.", + "deleteShout": "Slet", + "confirmDeleteShout": "Vil du slette dette råb?", + "pendingApplications": "Afventende ansøgninger", + "settingsForm": { + "title": "Radioindstillinger", + "subtitle": "Redigeringer skriver til website_settings (radio_*-taster) og buster runtime-indstillingernes cache. Booleans bruger 0/1.", + "enabled": "Aktiveret", + "disabled": "Deaktiveret", + "totalKeys": "Samlede nøgler", + "configured": "Configured", + "curatedHint": "kurerede nøgler med en værdi", + "customKeys": "Brugerdefinerede nøgler", + "saveAll": "Gem alle", + "singleKey": "Tilføj/overskriv en enkelt nøgle", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "værdi", + "commentPlaceholder": "kommentar (valgfrit)", + "saveSingle": "Gem", + "otherSettings": "Andre radioindstillinger", + "dbError": "Kunne ikke indlæse indstillinger (databasen er ikke tilgængelig). Standarder oprettes ved gem." + }, + "embedPage": { + "title": "Radioindlejring", + "subtitle": "Kopiklar indlejringskode til livestreamen. Skrivebeskyttet - intet her skriver til databasen. Konfigurer stream-URL'en i Radioindstillinger (radio_stream_url).", + "streamUrl": "Stream URL", + "configured": "Konfigureret", + "missing": "Mangler", + "radioName": "Radio navn", + "nowPlayingApi": "Nu-spiller API", + "set": "Sæt", + "notSet": "Ikke indstillet", + "noStreamUrl": "Ingen stream-URL konfigureret", + "noStreamUrlText": "Der er ingen radio_stream_url sat, så der er intet at indlejre endnu.", + "goToSettings": "Gå til Radioindstillinger", + "livePreview": "Live preview", + "livePreviewText": "Dette er den blottede audio-afspiller, som besøgende vil se den. Tryk på afspil for at bekræfte, at streamen er tilgængelig.", + "source": "Kilde", + "audioSnippet": "Uddrag af lydafspiller", + "audioSnippetDesc": "Drop-in HTML5-lydafspiller pegede direkte mod strømmen. Virker overalt, hvor almindelig HTML er tilladt.", + "iframeSnippet": "Iframe-indpakningsstykke", + "iframeSnippetDesc": "Indlejrer webstedets egen radioafspillerside i en iframe - bevarer din styling og oplysninger om nu-afspiller. Juster bredde/højde efter smag.", + "audioUnsupported": "Din browser understøtter ikke lydelementet." + }, + "banners": { + "title": "Bannere", + "heading": "Radio Bannere", + "description": "Salgsfremmende bannere vist på radiosiden, sorteret efter sorteringsrækkefølge.", + "addBanner": "Tilføj banner", + "createBanner": "Opret banner", + "deleteBanner": "Slet banner", + "noBanners": "Ingen bannere endnu - tilføj et ovenfor.", + "existing": "Eksisterende bannere ({count})", + "save": "Gem", + "delete": "Slet", + "byUser": "af bruger {id}", + "active": "aktiv", + "hidden": "skjult", + "bannerAlt": "Radio banner", + "statusActive": "Aktiv", + "statusHidden": "Skjult", + "dbError": "Kunne ikke indlæse bannere (databasen er ikke tilgængelig).", + "form": { + "imagePath": "Billedsti/URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Titel", + "description": "Beskrivelse", + "sortOrder": "Sorteringsrækkefølge", + "active": "Aktiv" + } + }, + "ranksForm": { + "title": "Radio rangerer", + "subtitle": "DJ / personale rangerer tildeles på radioapplikationer.", + "dbError": "Kunne ikke indlæse rækker (databasen er ikke tilgængelig).", + "active": "Aktiv", + "addRank": "Tilføj rang", + "name": "Navn", + "badgeCode": "Badge kode", + "description": "Beskrivelse", + "createRank": "Opret rang", + "existing": "Eksisterende rækker ({count})", + "noRanks": "Ingen rækker endnu - tilføj en ovenfor.", + "activeLabel": "aktiv", + "inactiveLabel": "inaktiv", + "save": "Gem", + "deleteRank": "Slet rang #{id}" + }, + "historyPage": { + "title": "Radioafspilningshistorie", + "subtitle": "Tidligere DJ-shows og sendetid (radio_historie), seneste først. Skrivebeskyttet log over, hvem der var i luften, hvornår og hvor mange lyttere, der stillede ind.", + "dbError": "Kunne ikke indlæse radiohistorik (databasen er ikke tilgængelig).", + "showsLogged": "Viser logget", + "onAirNow": "I luften nu", + "uniqueDjs": "Unikke DJs", + "peakListeners": "Peak lyttere", + "empty": "Ingen radiohistorik registreret endnu.", + "showLog": "Vis log ({count})", + "colDj": "DJ", + "colShow": "Vis", + "colStarted": "Startede", + "colEnded": "Afsluttet", + "colAirtime": "Sendetid", + "colListeners": "Lyttere", + "colNotes": "Noter", + "onAir": "i luften" + }, + "apiKeysForm": { + "title": "Radio API nøgler", + "subtitle": "API-nøgler til eksterne radiointegrationer (radio_api_keys). Nøgler genereres på serversiden og vises maskerede - kopier den fulde værdi fra databasen, når de først udstedes.", + "dbError": "Kunne ikke indlæse API-nøgler (databasen er ikke tilgængelig).", + "totalKeys": "Samlede nøgler", + "active": "Aktiv", + "inactive": "Inaktiv", + "generateKey": "Generer nøgle", + "generateHint": "Den hemmelige nøgle genereres automatisk med kryptografisk tilfældighed - du indtaster den ikke.", + "name": "Navn", + "namePlaceholder": "AzureCast-broen", + "rateLimit": "Takstgrænse (anmodninger/min.)", + "allowedIps": "Tilladte IP'er (valgfrit)", + "allowedIpsPlaceholder": "kommasepareret, blank = enhver", + "generate": "Generer nøgle", + "existingKeys": "Eksisterende nøgler ({count})", + "noKeys": "Ingen API-nøgler endnu - generer en ovenfor.", + "colName": "Navn", + "colKey": "Nøgle", + "colAllowedIps": "Tilladte IP'er", + "colRateLimit": "Satsgrænse", + "colLastUsed": "Sidst brugt", + "colExpires": "Udløber", + "colStatus": "Status", + "colActions": "Handlinger", + "maskedHint": "Kun de første 8 tegn vises", + "any": "nogen", + "activeLabel": "aktiv", + "inactiveLabel": "inaktiv", + "deactivate": "Deaktiver", + "activate": "Aktiver", + "delete": "Slet" + }, + "pointsForm": { + "title": "Radiolytterpunkter", + "subtitle": "Beløn lyttere med valuta for tid brugt på radioen. Redigeringer skriver til website_settings (radio_points_*-taster) og buster cachen til runtime-indstillinger. Booleans bruger 0/1.", + "saved": "Gemt", + "points": "Points", + "enabled": "Aktiveret", + "disabled": "Deaktiveret", + "perMinute": "Per minut", + "paidIn": "betalt i {currency}", + "maxPerDay": "Max / dag", + "unlimited": "Ubegrænset", + "minListeners": "Min lyttere", + "settings": "Indstillinger", + "pointsEnabled": "Point aktiveret", + "pointsEnabledHint": "Hovedafbryder til tildeling af lytterpoint.", + "currency": "Valuta", + "currencyHint": "Hvilken pengepung pointene indbetales til.", + "pointsPerMinute": "Point i minuttet", + "pointsPerMinuteHint": "Beløb tildelt for hvert hele minuts lytning.", + "maxPerDayHint": "Dagligt loft pr. bruger. Brug 0 for ubegrænset.", + "minListenersHint": "Der gives kun point, når mindst så mange mennesker er indstillet.", + "save": "Gem pointindstillinger" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Fallback-afspilningsliste (radio_auto_dj_playlist), som radioen roterer igennem, når ingen live-dj streamer. Bestilles efter sorteringsrækkefølge og derefter titel.", + "dbError": "Kunne ikke indlæse AutoDJ-afspilningslisten (databasen er ikke tilgængelig).", + "tracks": "Spor", + "active": "Aktiv", + "inactive": "Inaktiv", + "addTrack": "Tilføj spor", + "titlePlaceholder": "Sportitel", + "artist": "Kunstner", + "album": "Album", + "artworkUrl": "Artwork URL", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Varighed (sekunder)", + "durationPlaceholder": "f.eks. 215", + "sortOrder": "Sorteringsrækkefølge", + "playlist": "Playliste ({count})", + "noTracks": "Ingen AutoDJ-numre endnu - tilføj et ovenfor.", + "colOrder": "Bestil", + "colTitle": "Titel", + "colArtist": "Kunstner", + "colAlbum": "Album", + "colDuration": "Varighed", + "colPlays": "Skuespil", + "colLastPlayed": "Last played", + "colStatus": "Status", + "colActions": "Handlinger", + "activeLabel": "aktiv", + "inactiveLabel": "inaktiv", + "deactivate": "Deaktiver", + "activate": "Aktiver", + "delete": "Slet", + "trackTitle": "Titel" + }, + "moderationPage": { + "title": "DJ moderation", + "subtitle": "Gennemgå og fjern radioråb (50 seneste).", + "recentShouts": "Seneste råb ({count})" + } + }, + "commandocentrum": { + "title": "Kommandocentrum", + "subtitle": "Diagnostik, RCON kontroller og brugerstyring", + "diagnostics": "Diagnostik", + "rcon": "RCON", + "userActions": "Brugerhandlinger", + "diagnosticsTitle": "Emulator diagnostik", + "memoryUsage": "Hukommelsesbrug", + "uptime": "Oppetid", + "onlineUsers": "Online brugere", + "roomsLoaded": "Værelser indlæst", + "refresh": "Opdater", + "rconTitle": "RCON kommandoer", + "rconPlaceholder": "Indtast RCON kommando...", + "rconSend": "Send", + "rconSending": "Sender...", + "rconResponse": "Svar", + "userActionsTitle": "Brugerhandlinger", + "username": "Brugernavn", + "usernamePlaceholder": "Målbrugernavn", + "action": "Handling", + "execute": "Udfør", + "actions": { + "disconnect": "Afbryd forbindelsen", + "alert": "Send advarsel", + "giveCredits": "Giv kreditter", + "giveBadge": "Giv badge", + "givePoints": "Giv point", + "ban": "Forbud", + "kick": "Spark" + }, + "messagePlaceholder": "Besked (for advarsler)...", + "amountPlaceholder": "Beløb…", + "badgePlaceholder": "Badgekode...", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Emulator Konfig", + "subtitle": "Se og rediger emulatorindstillinger og lokalitetstekster", + "settings": "Indstillinger", + "texts": "Tekster", + "search": "Søg", + "searchPlaceholder": "Søg nøgler...", + "noSettings": "Ingen indstillinger fundet", + "noTexts": "Ingen tekster fundet", + "edit": "Rediger", + "save": "Gem", + "saving": "Gemmer...", + "cancel": "Annuller", + "colKey": "Nøgle", + "colValue": "Værdi", + "colType": "Type", + "colActions": "Handlinger", + "editDialog": { + "title": "Rediger: {key}", + "value": "Værdi", + "valuePlaceholder": "Indtast værdi...", + "save": "Save changes", + "cancel": "Annuller" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Advarsler", + "subtitle": "Send underretninger for hele hotellet, og se de seneste underretninger", + "sendAlert": "Send hotelalarm", + "recentAlerts": "Seneste underretninger ({count})", + "noRecentAlerts": "No recent alerts", + "form": { + "title": "Alert title", + "titlePlaceholder": "f.eks. Servervedligeholdelse på 10 minutter", + "message": "Alert message", + "messagePlaceholder": "Skriv advarslen...", + "type": "Type", + "typeHotel": "Hotel-wide alert", + "typeStaff": "Kun personale", + "urgent": "Haster", + "send": "Send alert", + "sending": "Sender...", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "ID", + "colTitle": "Titel", + "colSentBy": "Sent by", + "colType": "Type", + "colDate": "Dato", + "colActions": "Handlinger", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Staff Activities", + "subtitle": "Revisionsspor for personalehandlinger i administrationspanelet", + "noLogs": "Ingen personaleaktivitet logget endnu", + "colId": "ID", + "colUser": "Bruger", + "colAction": "Handling", + "colTarget": "Mål", + "colDescription": "Description", + "colIp": "IP", + "colTimestamp": "Tidsstempel", + "filterByUser": "Filter by user…", + "filterByAction": "Filter by action…", + "clearFilters": "Ryd filtre", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Ord filter", + "subtitle": "Administrer filtrerede ord og sætninger på hotellet", + "addWord": "Add word", + "addWords": "Tilføj ord", + "noWords": "Ingen filtrerede ord endnu", + "confirmDelete": "Vil du fjerne \"{word}\" fra filteret?", + "colId": "ID", + "colWord": "Word", + "colAddedBy": "Tilføjet af", + "colCreated": "Created", + "colActions": "Handlinger", + "form": { + "word": "Ord", + "wordPlaceholder": "f.eks. badword", + "addMore": "Tilføj flere ord (et pr. linje)", + "save": "Tilføj til filter", + "saving": "Gemmer...", + "cancel": "Annuller" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Vedligeholdelsestilstand", + "subtitle": "Aktiver eller deaktiver vedligeholdelse for hele hotellet", + "enabled": "Vedligeholdelsestilstand er aktiveret", + "disabled": "Vedligeholdelsestilstand er deaktiveret", + "enable": "Aktiver vedligeholdelse", + "disable": "Deaktiver vedligeholdelse", + "message": "Vedligeholdelsesmeddelelse", + "messagePlaceholder": "Vi kommer snart tilbage!", + "staffAccess": "Tillad personale adgang under vedligeholdelse", + "save": "Gem indstillinger", + "saving": "Gemmer...", + "confirmEnable": "Aktivering af vedligeholdelse forhindrer alle ikke-ansatte brugere i at få adgang til hotellet. Fortsætte?", + "confirmDisable": "Deaktiver vedligeholdelsestilstand og gendanne adgang for alle brugere?", + "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": "Husholdningstilladelser", + "subtitle": "Konfigurer hvilke rækker der kan få adgang til hvilke administratorsektioner", + "addPermission": "Tilføj tilladelse", + "editPermission": "Rediger tilladelse", + "deletePermission": "Slet tilladelse", + "noPermissions": "Ingen husholdningstilladelser er konfigureret", + "confirmDelete": "Vil du slette denne tilladelse?", + "colId": "ID", + "colRank": "Rang", + "colSection": "Sektion", + "colActions": "Handlinger", + "form": { + "rankId": "Rang ID", + "rankIdPlaceholder": "Minimum rang", + "section": "Sektionsnøgle", + "sectionPlaceholder": "f.eks. admin.dashboard", + "save": "Gem tilladelse", + "saving": "Gemmer...", + "cancel": "Annuller" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset applied!", + "cleared": "All Tilladelser cleared!", + "invalidRank": "Invalid Rang", + "testDone": "Test done: {count} Tilladelser found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Slet ALL Tilladelser? This Handling cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Tilladelse", + "colDescription": "Beskrivelse", + "colMinRank": "Min. Rang", + "permissionKey": "Tilladelsesnøgle", + "minRank": "Min. Rang", + "description": "Beskrivelse", + "permissions": "Tilladelser", + "permissionsCount": "{count} Tilladelser", + "permission": "Tilladelse", + "highestMinRank": "Highest min. Rang: {rank}", + "totalMinRank": "Total min. Rang sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Rangerer", + "missingDeps": "{count} Mangler dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(Mangler)", + "rank": "Rang", + "count": "Count", + "searchPermission": "Søg Tilladelser…", + "search": "Søg", + "manage": "Manage", + "importSelection": "Importer selection", + "noGroup": "Nej group", + "allGroups": "All groups", + "perGroup": "Tilladelser per group", + "perRank": "Tilladelser per Rang", + "rankOverviewHint": "All Tilladelser grouped by the Rang they are assigned to.", + "tabOverview": "Oversigt", + "tabManage": "Manage", + "tabImport": "Importer / Export", + "tabRanks": "Rang Oversigt", + "tabPresets": "Forudindstillinger", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "Importer Tilladelser", + "importHint": "Paste a JSON array of Tilladelse objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "Importer", + "exportTitle": "Export Tilladelser", + "exportHint": "Export all Tilladelser as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Tilladelse Forudindstillinger", + "presetsHint": "Ansøg a predefined Sæt of Tilladelser for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Moderering tools: Bruger lookup, Forbud, CFH handling, chat logs.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Brugere, Værelser, news, Indstillinger, Butik, events, radio & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including Tilladelse management and asset Importer.", + "applyPreset": "Ansøg preset", + "clearAll": "Clear all Tilladelser", + "testTitle": "Test Rang access", + "testHint": "Enter a Rang number to see which Tilladelser would be granted.", + "test": "Test", + "auditTitle": "Tilladelse audit log", + "auditHint": "All changes to Husholdning Tilladelser are logged.", + "auditLogsAt": "Audit logs are available on the Audit log page.", + "viewAuditLogs": "Visning audit logs", + "importedWithErrors": "Imported {count} Tilladelser with {errors} errors", + "confirmClearAllDesc": "This will Fjern every Tilladelse entry from the database. Are you sure?", + "confirmDeletePermission": "Slet this Tilladelse permanently?", + "confirmBulkDelete": "Slet {count} selected Tilladelser?", + "deleteSelected": "Slet {count} selected", + "cancel": "Annuller", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Bruger", + "auditAction": "Handling", + "auditTarget": "Mål", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Værelser", + "subtitle": "Søg og administrer hotelværelser", + "search": "Søg", + "searchPlaceholder": "Søg efter navn, ejer eller id...", + "searchResults": "{count, plural, one {# room} other {# rooms}} fundet for \"{query}\"", + "noResults": "Ingen værelser fundet", + "colId": "ID", + "colName": "Navn", + "colOwner": "Ejer", + "colUsers": "Brugere", + "colState": "stat", + "colCategory": "Kategori", + "colCreated": "Oprettet", + "colActions": "Handlinger", + "stateOpen": "Åbn", + "stateClosed": "Lukket", + "stateLocked": "Låst", + "stateInvisible": "Usynlig", + "detail": { + "title": "Værelse: {name}", + "subtitle": "Ejes af {owner}", + "overview": "Oversigt", + "actions": "Handlinger", + "description": "Beskrivelse", + "noDescription": "Ingen beskrivelse", + "owner": "Ejer", + "users": "Brugere online", + "maxUsers": "Max brugere", + "category": "Kategori", + "state": "stat", + "tags": "Tags", + "noTags": "Ingen tags", + "created": "Oprettet", + "deleteRoom": "Slet rum", + "confirmDelete": "Vil du slette rummet \"{name}\"? Dette kan ikke fortrydes.", + "enterRoom": "Gå ind i værelset", + "changeOwner": "Skift ejer", + "changeOwnerPlaceholder": "Nyt ejerbrugernavn" + } + }, + "emailTemplates": { + "title": "Email skabeloner", + "subtitle": "Administrer transaktionelle e-mailskabeloner", + "newTemplate": "+ Ny skabelon", + "edit": "Rediger", + "delete": "Slet", + "noTemplates": "Ingen e-mail-skabeloner endnu", + "confirmDelete": "Vil du slette skabelonen \"{name}\"?", + "colId": "ID", + "colName": "Navn", + "colSubject": "Emne", + "colKey": "Nøgle", + "colUpdated": "Opdateret", + "colActions": "Handlinger", + "form": { + "name": "Navn", + "namePlaceholder": "f.eks. Velkomstmail", + "key": "Nøgle", + "keyPlaceholder": "f.eks. velkomste-mail", + "subject": "Emne", + "subjectPlaceholder": "E-mail emnelinje", + "body": "Brødtekst (HTML)", + "bodyPlaceholder": "

Kære {username},

", + "variables": "Tilgængelige variabler", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Gem skabelon", + "saving": "Gemmer...", + "cancel": "Annuller", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Tema", + "subtitle": "Tilpas CMS-udseendet", + "presets": "Forudindstillinger", + "colours": "Farver", + "css": "CSS", + "presetsTitle": "Forudindstillinger af tema", + "presetsSubtitle": "Vælg et forudbygget farveskema", + "applyPreset": "Ansøg", + "presetApplied": "Forudindstilling anvendt: {preset}", + "customiseTitle": "Brugerdefinerede farver", + "primary": "Primær", + "secondary": "Sekundær", + "accent": "Accent", + "background": "Baggrund", + "surface": "Overflade", + "text": "Tekst", + "saveColours": "Gem farver", + "savingColours": "Gemmer...", + "cssTitle": "Brugerdefineret CSS", + "cssSubtitle": "Tilføj tilpasset CSS for at tilsidesætte temastile", + "cssPlaceholder": "/* Din tilpassede CSS her */", + "saveCss": "Gem CSS", + "savingCss": "Gemmer...", + "reset": "Nulstil til standardindstillinger", + "confirmReset": "Vil du nulstille temaet til standardværdierne?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Mediebibliotek", + "subtitle": "Upload og administrer mediefiler", + "upload": "Upload", + "uploadTitle": "Upload en fil", + "uploadSubtitle": "Træk og slip eller klik for at uploade", + "uploadButton": "Vælg fil", + "uploading": "Uploader...", + "noFiles": "Ingen mediefiler endnu", + "delete": "Slet", + "confirmDelete": "Vil du slette denne fil permanent?", + "search": "Søg", + "searchPlaceholder": "Søg efter filnavn...", + "colPreview": "Forhåndsvisning", + "colName": "Navn", + "colSize": "Størrelse", + "colType": "Type", + "colUploaded": "Uploadet", + "colActions": "Handlinger", + "copyUrl": "Kopiér URL", + "urlCopied": "URL kopieret til udklipsholder" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Upload og administrer webstedets favicon", + "current": "Nuværende favicon", + "uploadLabel": "Upload favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO eller SVG. Max 2 MB.", + "upload": "Upload", + "uploading": "Uploader...", + "delete": "Fjern", + "deleting": "Fjerner...", + "saved": "Favicon blev gemt!", + "deleted": "Favicon blev fjernet!", + "error": "Noget gik galt", + "confirmDelete": "Fjern favicon? Siden vil ikke længere vise et brugerdefineret favicon.", + "generator": { + "title": "Generer favicon", + "text": "Tekst", + "bgColor": "Baggrundsfarve", + "textColor": "Tekstfarve", + "rounded": "Afrundede hjørner", + "save": "Gem som favicon" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "CMS-indstillinger", + "subtitle": "Administrer nøgle/værdi CMS-konfiguration", + "addSetting": "Tilføj indstilling", + "edit": "Rediger", + "delete": "Slet", + "noSettings": "Ingen indstillinger fundet", + "confirmDelete": "Vil du slette indstillingen \"{key}\"?", + "colKey": "Nøgle", + "colValue": "Værdi", + "colUpdated": "Opdateret", + "colActions": "Handlinger", + "form": { + "key": "Nøgle", + "keyPlaceholder": "f.eks. hotel_name", + "value": "Værdi", + "valuePlaceholder": "Indstillingsværdi", + "save": "Gem indstilling", + "saving": "Gemmer...", + "cancel": "Annuller" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Hjem", + "reload": "Genindlæs", + "fullscreen": "Fuldskærm", + "logout": "Log ud", + "onlineUsers": "Brugere online", + "emulatorOnline": "Emulator online", + "emulatorOffline": "Emulator offline", + "dragToMove": "Træk for at flytte", + "hide": "Skjul værktøjslinje", + "fullscreenExit": "Afslut fuldskærm", + "show": "Vis værktøjslinje", + "emulatorUnknown": "Emulatorstatus ukendt" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Fildiagnostik", + "preliminary": "Foreløbig kontrol af adresser; indholdet valideres under import.", + "http": "HTTP {status}", + "network": "Forbindelsen mislykkedes", + "timeout": "Kilden svarede ikke i tide", + "invalidResponse": "Kilden returnerede en webside i stedet for en fil", + "available": "Fil fundet; afventer validering", + "recover": "Vedhæft originalen og fortsæt", + "recoveryHint": "Vælg {file} (højst 50 MB). Identiteten kontrolleres. Mislykkede elementer prøves igen; færdige importer bevares.", + "attach": "Vælg den originale .nitro-fil", + "working": "Validerer eller genoptager...", + "attached": "Matchende fil vedhæftet", + "resume": "Genoptag mislykkede importer med filen", + "invalidFile": "Vælg en matchende original .nitro-fil på højst 50 MB og prøv igen.", + "resumeError": "Opdater historikken og brug seneste forsøg; kontroller filen og prøv igen.", + "mismatchedFile": "Denne fil tilhører et andet møbel.", + "alreadyStarted": "Genoptagelsen er startet. Opdater historikken og brug seneste forsøg.", + "notEligible": "Dette element kan ikke gendannes med en vedhæftet fil." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/de.json b/src/messages/de.json index dc4cd5e2..4bda5014 100644 --- a/src/messages/de.json +++ b/src/messages/de.json @@ -1,3919 +1,4913 @@ { - "draftRecovery": { - "ready": "Eine Wiederherstellungskopie wird 7 Tage in diesem Browser aufbewahrt.", - "saved": "Die Wiederherstellungskopie wurde für 7 Tage in diesem Browser gespeichert.", - "unavailable": "Die Wiederherstellung im Browser ist nicht verfügbar. Lass diese Seite geöffnet, bis deine Änderungen gespeichert sind.", - "found": "In diesem Browser ist eine Wiederherstellungskopie verfügbar, gespeichert am", - "restore": "Browserkopie wiederherstellen", - "discard": "Browserkopie löschen", - "confirmRestore": "Das aktuelle Formular durch die Wiederherstellungskopie im Browser ersetzen? Prüfe den Inhalt vor dem Speichern.", - "confirmDiscard": "Diese Wiederherstellungskopie im Browser löschen? Das aktuelle Formular bleibt unverändert." - }, - "nav": { - "home": "Start", - "community": "Community", - "articles": "Artikel", - "photos": "Fotos", - "staff": "Team", - "rankings": "Ranglisten", - "guilds": "Gilden", - "leaderboards": "Bestenlisten", - "rareValues": "Seltene Werte", - "shop": "Shop", - "market": "Markt", - "assistance": "Hilfe", - "helpCenter": "Hilfecenter", - "myTickets": "Meine Tickets", - "badges": "Abzeichen", - "radio": "Radio", - "friends": "Freunde", - "messages": "Nachrichten", - "admin": "Admin", - "openMenu": "Open menu", - "closeMenu": "Close menu", - "drawBadge": "Abzeichen zeichnen", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} online", - "nitroClient": "Nitro Client", - "tagline": "Eine Online-Welt, in der du deinen eigenen Avatar erstellen, Freunde finden, chatten, Räume bauen und vieles mehr kannst!", - "login": "Anmelden", - "or": "Oder", - "createAccount": "Konto erstellen" - }, - "footer": { - "copyright": "© {year} - {hotel} ist ein nicht-kommerzielles Bildungsprojekt" - }, - "pages": { - "staff": { - "title": "Team", - "subtitle": "Das Team hinter dem Hotel", - "ranksTitle": "Ränge", - "ranksSubtitle": "Wofür jeder Teil des Teams zuständig ist", - "membersTitle": "Teammitglieder", - "membersEmptySubtitle": "Im Moment gibt es niemanden zu zeigen", - "membersSubtitle": "{count, plural, one {# Mitglied hält den Betrieb aufrecht} other {# Mitglieder halten den Betrieb aufrecht}}", - "emptyState": "Keine Teammitglieder zu sehen.", - "colUsername": "Benutzername", - "colRank": "Rang", - "colMotto": "Motto" - }, - "leaderboard": { - "title": "Bestenliste", - "subtitle": "Top 20 Spieler nach {currency}", - "tab_credits": "Credits", - "tab_diamonds": "Diamanten", - "tab_duckets": "Duckets", - "tab_achievement": "Errungenschaften", - "tab_respects": "Respekt", - "tab_onlinetime": "Online-Zeit", - "emptyState": "Noch keine Ranglisten zu sehen.", - "colAvatar": "Avatar", - "colPlayer": "Spieler" - }, - "friends": { - "title": "Freunde", - "emptySubtitle": "Du hast noch keine Freunde hinzugefügt", - "subtitle": "{count, plural, one {Du hast # Freund} other {Du hast # Freunde}}", - "emptyState": "Füge im Hotel Freunde hinzu und sie werden hier angezeigt.", - "noMotto": "Kein 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": "Nachrichten", - "subtitle": "Freundschaftsanfragen und Offline-Nachrichten warten auf dich", - "requestsTitle": "Freundschaftsanfragen", - "requestsEmptySubtitle": "Niemand hat noch gefragt, ob er dein Freund sein darf", - "requestsSubtitle": "{count, plural, one {# ausstehende Anfrage} other {# ausstehende Anfragen}}", - "requestsEmptyState": "Keine ausstehenden Freundschaftsanfragen.", - "wantsToBeFriend": "möchte dein Freund sein.", - "accept": "Akzeptieren", - "offlineTitle": "Offline-Nachrichten", - "offlineEmptySubtitle": "Dein Posteingang ist leer", - "offlineSubtitle": "{count, plural, one {# Nachricht erhalten} other {# Nachrichten erhalten}}", - "offlineEmptyState": "Du hast keine Offline-Nachrichten.", - "unknownUser": "Benutzer #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Kein Motto", - "statRank": "Rang", - "statCredits": "Credits", - "statRegistered": "Registriert", - "badgesTitle": "Abzeichen", - "badgesEmpty": "Noch keine Abzeichen.", - "photosTitle": "Fotos", - "photosEmpty": "Noch keine Fotos.", - "guestbookTitle": "Gästebuch", - "guestbookSubtitle": "Nachrichten auf {username}s Pinnwand", - "leaveMessage": "Nachricht hinterlassen", - "guestbookPlaceholder": "Schreibe etwas in {username}s Gästebuch…", - "post": "Posten", - "loginToPost": "Melde dich an, um eine Gästebuch-Nachricht zu hinterlassen.", - "guestbookEmpty": "Noch keine Gästebucheinträge.", - "unknownUser": "Benutzer #{id}", - "statDuckets": "Duckets", - "statDiamonds": "Diamanten", - "walletTitle": "Geldbörse", - "friendsTitle": "Freunde", - "friendsSubtitle": "Leute im Hotel, mit denen sie abhängen", - "friendsEmpty": "Keine Freunde zu sehen.", - "roomsTitle": "Räume", - "roomsSubtitle": "Räume, die sie besitzen", - "roomsEmpty": "Keine Räume zu sehen.", - "roomUntitled": "Unbenannter Raum", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Ranglisten", - "subtitle": "Die Top 12 Spieler nach Credits geordnet", - "emptyState": "Noch keine Spieler zu ordnen." - }, - "home": { - "welcome": "Willkommen bei {hotelName}", - "welcomeSubtitle": "Dein Retro-Hotel, jetzt mit Next.js", - "welcomeBody": "Abhängen, Möbel sammeln und Freunde treffen.", - "enterHotel": "{hotelName} betreten", - "onlineFriends": "Online-Freunde", - "noFriendsOnline": "Keine Freunde online", - "register": "JETZT REGISTRIEREN", - "joinNow": "Werde noch heute Mitglied bei {hotelName}!", - "recentUsers": "Aktuelle Benutzer", - "recentPhotos": "Aktuelle Fotos", - "latestNews": "Neueste Nachrichten", - "newsTitle": "Neueste Nachrichten", - "newsSubtitle": "Frisch aus dem Hotel", - "allNews": "Alle Nachrichten →", - "allUsers": "Community →", - "noArticles": "Noch keine Artikel.", - "noPhotos": "Noch keine Fotos.", - "noUsers": "Keine Benutzer online", - "latestArticle": "Neuester Artikel", - "latestUsers": "Neueste Bürger ({count} insgesamt)", - "statsOnline": "Online", - "statsCitizens": "Bürger", - "statsRooms": "Räume", - "statsArticles": "Artikel", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Erstelle deinen einzigartigen Look", - "featuresFurniture": "Möbel", - "featuresFurnitureDesc": "Dekoriere Räume mit Gegenständen", - "featuresCommunity": "Community", - "featuresCommunityDesc": "Freunde finden und chatten", - "featuresGames": "Spiele", - "featuresGamesDesc": "Wettkämpfe und Spaß" - }, - "news": { - "title": "Nachrichten", - "subtitle": "Die neuesten Ankündigungen, Events und Updates aus dem Hotel", - "noArticles": "Noch keine Artikel." - }, - "article": { - "backToNews": "← Nachrichten", - "reactionsTitle": "Reaktionen", - "reactionsSubtitle": "Sag uns, was du denkst", - "reaction": { - "like": "Gefällt mir", - "love": "Liebe es", - "wow": "Wow" - }, - "removeReaction": "Klicke, um deine Reaktion zu entfernen", - "reactWith": "Reagiere mit {reaction}", - "noReactions": "Noch keine Reaktionen.", - "logIn": "Anmelden", - "toReact": "um zu reagieren.", - "commentsTitle": "Kommentare", - "commentsSubtitle": "Mach mit bei der Unterhaltung", - "commentsCount": "{count} bisher", - "noComments": "Noch keine Kommentare. Sei der Erste, der kommentiert.", - "userNumber": "Benutzer #{id}", - "addComment": "Kommentar hinzufügen", - "commentPlaceholder": "Schreibe deinen Kommentar…", - "postComment": "Kommentar posten", - "toComment": "um einen Kommentar zu hinterlassen.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Fotos", - "subtitle": "Die neuesten Schnappschüsse aus dem Hotel", - "noPhotos": "Noch keine Fotos.", - "photoAlt": "Foto von Benutzer #{id}", - "byUser": "von Benutzer #{id}" - }, - "badges": { - "title": "Abzeichen", - "subtitle": "Die Abzeichen, die du verdienen und im Hotel zeigen kannst", - "noBadges": "Noch keine Abzeichen verfügbar." - }, - "community": { - "title": "Community", - "subtitle": "Alles, was rund um das Hotel passiert, an einem Ort", - "open": "Öffnen →", - "links": { - "rankings": { - "title": "Ranglisten", - "text": "Sieh dir die reichsten Spieler im Hotel an, geordnet nach Credits." - }, - "staff": { - "title": "Team", - "text": "Lerne das Team kennen, das das Hotel täglich am Laufen hält." - }, - "news": { - "title": "Nachrichten", - "text": "Die neuesten Ankündigungen, Events und Updates." - }, - "photos": { - "title": "Fotos", - "text": "Schnappschüsse, die von der Community aus dem Hotel geteilt wurden." - }, - "guilds": { - "title": "Gilden", - "text": "Durchstöbere die Gruppen, die Spieler erstellt und denen sie beigetreten sind." - }, - "leaderboards": { - "title": "Bestenlisten", - "text": "Wer ist diese Saison in den Hotel-Statistiken an der Spitze." - } - } - }, - "guilds": { - "title": "Gilden", - "subtitle": "Durchstöbere die Gruppen, die Spieler erstellt und denen sie beigetreten sind", - "empty": "Noch keine Gilden.", - "unnamedGuild": "Unbenannte Gilde", - "noDescription": "Keine Beschreibung" - }, - "guild": { - "allGuilds": "← Alle Gilden", - "unnamedGuild": "Unbenannte Gilde", - "noDescription": "Keine Beschreibung", - "memberSingular": "Mitglied", - "memberPlural": "Mitglieder", - "founded": "Gegründet", - "forumLink": "Forum →", - "discussion": "Diskussion", - "membersTitle": "Mitglieder", - "memberLowerSingular": "Mitglied", - "memberLowerPlural": "Mitglieder", - "noMembers": "Keine Mitglieder.", - "owner": "Besitzer", - "noMotto": "Kein Motto" - }, - "guildForum": { - "backToGuild": "← Zurück zur Gilde", - "unnamedGuild": "Unbenannte Gilde", - "forumTitle": "{guild} — Forum", - "threadSingular": "Thema", - "threadPlural": "Themen", - "newThread": "+ Neues Thema", - "empty": "Noch keine Themen in diesem Forum.", - "colSubject": "Betreff", - "colAuthor": "Autor", - "colPosts": "Beiträge", - "colDate": "Datum", - "noSubject": "(kein Betreff)", - "pinned": "Angepinnt", - "locked": "Gesperrt", - "userNumber": "Benutzer #{id}", - "unknown": "Unbekannt", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Zurück zum Forum", - "unnamedGuild": "Unbenannte Gilde", - "title": "Neues Thema", - "subtitle": "im {guild} Forum", - "subjectLabel": "Betreff", - "subjectPlaceholder": "Thema", - "messageLabel": "Nachricht", - "messagePlaceholder": "Schreibe deinen Eröffnungsbeitrag…", - "postThread": "Thema erstellen", - "cancel": "Abbrechen", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Shop", - "subtitle": "Lade dein Konto auf und sichere dir exklusive Pakete, Währungen und Abzeichen.", - "browsingCategory": "Durchstöbere {category} Pakete.", - "all": "Alle", - "allPackages": "Alle Pakete", - "packagesAvailable": "{count, plural, one {# Paket verfügbar} other {# Pakete verfügbar}}", - "empty": "Derzeit keine Pakete verfügbar.", - "buy": "Kaufen", - "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": "Aufladen mit PayPal", - "subtitle": "Sicher mit PayPal bezahlen und deine Credits werden sofort gutgeschrieben, sobald die Zahlung abgeschlossen ist.", - "cancelled": "Bezahlung abgebrochen — es wurde kein Betrag abgebucht.", - "chooseAmount": "Betrag wählen", - "notConfiguredPre": "PayPal ist noch nicht konfiguriert. Ein Administrator muss", - "notConfiguredAnd": "und", - "notConfiguredOptional": "(und optional", - "notConfiguredPost": "für Sandbox vs. Live).", - "balanceTitle": "Dein Guthaben", - "signedInAs": "Angemeldet als {username}", - "credits": "Credits", - "creditsPerUnit": "Credits pro 1,00 {currency}", - "rateLine": "Du erhältst {amount} Credits pro 1,00 {currency}. Credits erscheinen im Spiel, sobald du dich das nächste Mal einloggst." - }, - "marketplace": { - "title": "Marktplatz", - "subtitle": "Durchstöbere Möbel und Seltenheiten, die von Spielern angeboten werden. Angebote werden im Spiel erstellt und live aktualisiert — geh ins Hotel, um ein Angebot zu machen.", - "activeOffers": "Aktive Angebote", - "sellers": "Verkäufer", - "totalValue": "Gesamtwert", - "activeListings": "Aktive Einträge", - "mostRecentFirst": "Neueste zuerst", - "empty": "Derzeit gibt es keine aktiven Marktplatz-Angebote. Schau später nochmal vorbei.", - "colOffer": "Angebot", - "colItem": "Gegenstand", - "colSeller": "Verkäufer", - "colPrice": "Preis", - "colListed": "Eingestellt", - "itemLabel": "Gegenstand #{id}", - "userLabel": "Benutzer #{id}", - "justNow": "gerade eben", - "minutesAgo": "vor {count}m", - "hoursAgo": "vor {count}h", - "daysAgo": "vor {count}d" - }, - "rares": { - "title": "Seltene Werte", - "subtitle": "Erhalte eine Übersicht aller Seltenheiten im Hotel, gruppiert nach Kategorie.", - "empty": "Wir haben derzeit keine Seltenheiten gelistet.", - "rareCount": "{count, plural, one {# Seltenheit} other {# Seltenheiten}}", - "viewRares": "Seltenheiten ansehen →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# Seltenheit in dieser Kategorie} other {# Seltenheiten in dieser Kategorie}}", - "allRares": "← Alle Seltenheiten", - "empty": "Noch keine Seltenheiten in dieser Kategorie.", - "colRare": "Seltenheit", - "colCredits": "Credits", - "colCurrency": "Währung", - "creditsValue": "{value} Credits", - "duckets": "Duckets", - "diamonds": "Diamanten", - "credits": "Credits" - }, - "redeem": { - "title": "Gutschein einlösen", - "subtitle": "Hast du einen Gutscheincode? Gib ihn unten ein, um die Belohnung deinem Konto hinzuzufügen.", - "enterCode": "Code eingeben", - "oncePerAccount": "Jeder Gutschein kann nur einmal pro Konto eingelöst werden.", - "balanceTitle": "Dein Guthaben", - "signedInAs": "Angemeldet als {username}", - "credits": "Credits", - "instantCredit": "Eingelöste Belohnungen werden sofort gutgeschrieben und erscheinen im Spiel, sobald du dich das nächste Mal einloggst." - }, - "help": { - "title": "Hilfecenter", - "subtitle": "Finde Anleitungen, Support-Themen und die Hotelregeln — alles, was du brauchst, um Hilfe zu bekommen.", - "myTickets": "Meine Tickets →", - "topicsTitle": "Support-Themen", - "topicsSubtitle": "Durchstöbere Anleitungen und Antworten auf häufige Fragen", - "topicsEmpty": "Noch keine Hilfethemen.", - "rulesTitle": "Hotelregeln", - "rulesSubtitle": "Bitte lies diese, bevor du dich im Hotel aufhältst", - "rulesEmpty": "Noch keine Regeln veröffentlicht.", - "categoryEmpty": "Keine Regeln in dieser Kategorie." - }, - "helpCategory": { - "back": "← Hilfecenter", - "topicSubtitle": "Hilfecenter-Thema", - "moreTitle": "Weitere Hilfethemen", - "moreSubtitle": "Zu einem anderen Support-Thema springen" - }, - "helpTickets": { - "title": "Hilfe-Tickets", - "subtitle": "Reiche ein Ticket beim Team ein und verfolge deine offenen Anfragen.", - "statTotal": "Tickets gesamt", - "statOpen": "Offen", - "statClosed": "Geschlossen", - "newTitle": "Neues Ticket", - "newSubtitle": "Beschreibe dein Problem und das Team wird sich darum kümmern", - "subjectPlaceholder": "Betreff", - "contentPlaceholder": "Beschreibe dein Problem…", - "submit": "Ticket einreichen", - "listTitle": "Deine Tickets", - "listSubtitle": "Jede Anfrage, die du an das Team gesendet hast", - "listEmpty": "Du hast noch keine Tickets.", - "colId": "ID", - "colSubject": "Betreff", - "colStatus": "Status", - "colCreated": "Erstellt", - "statusOpen": "Offen", - "statusClosed": "Geschlossen", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Bewirb dich als {hotel} Team", - "subtitle": "Wir öffnen ab und zu Bewerbungen. Wenn du eine Position siehst, die perfekt zu dir passt, zögere nicht, dich zu bewerben.", - "noPositionsTitle": "Keine offenen Positionen", - "noPositionsBody": "Derzeit gibt es keine offenen Positionen. Bitte komm später nochmal vorbei, um zu prüfen, ob es neue Stellen gibt. Vielen Dank für dein Interesse.", - "noDeadline": "Keine Frist gesetzt", - "deadline": "Bewerbungsfrist: {date}", - "alreadyApplied": "Du hast dich bereits für {rank} beworben", - "aboutYou": "Über dich", - "aboutPlaceholder": "Erzähl uns, warum du ein großartiger {rank} wärst…", - "applyFor": "Bewirb dich für {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": "Bewirb dich für das {hotel} Team", - "subtitle": "Wir öffnen regelmäßig Teambewerbungen. Wenn du ein Team siehst, das zu dir passt, zögere nicht, dich zu bewerben!", - "noPositionsTitle": "Keine offenen Team-Positionen", - "noPositionsBody": "Derzeit gibt es keine offenen Team-Positionen. Bitte komm später nochmal vorbei, um nach neuen Stellen zu sehen. Vielen Dank!", - "pending": "Deine Bewerbung ist in Bearbeitung", - "aboutYou": "Über dich", - "aboutPlaceholder": "Erzähl uns, warum du eine großartige Ergänzung für {rank} wärst…", - "applyFor": "Bewirb dich für {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": "Schalte das Hotelradio ein — Live-DJ-Sets, Wünsche und Shoutouts.", - "nowPlaying": "Jetzt läuft", - "nothingPlaying": "Momentan läuft nichts.", - "onAir": "On Air: {dj}", - "noDj": "Kein DJ on Air.", - "audioUnsupported": "Dein Browser unterstützt das Audio-Element nicht.", - "streamOffline": "Der Stream ist derzeit offline.", - "exploreTitle": "Entdecke das Radio", - "exploreSubtitle": "Programm, Shouts, Wünsche und mehr", - "linkSchedule": "Programm", - "linkScheduleText": "Unser wöchentliches Programm mit DJs und Shows.", - "linkShouts": "Shouts", - "linkShoutsText": "Shoutouts und Wünsche aus der Community.", - "linkRequests": "Wünsche", - "linkRequestsText": "Bitte den DJ, deinen Lieblingssong zu spielen.", - "linkApply": "Als DJ bewerben", - "linkApplyText": "Werde Teammitglied und geh auf Sendung.", - "linkLeaderboard": "Bestenliste", - "linkLeaderboardText": "Top-Hörer nach verdienten Punkten.", - "todayTitle": "Heutiges Programm", - "todayTitleWithDay": "Heutiges Programm · {day}", - "todaySubtitle": "Was heute auf Sendung ist", - "fullWeek": "Ganze Woche →", - "noShowsToday": "Heute sind keine Sendungen geplant.", - "colTime": "Zeit", - "colShow": "Sendung", - "colDj": "DJ", - "untitledShow": "Unbenannte Sendung", - "userNumber": "Benutzer #{id}" - }, - "radioSchedule": { - "title": "Radiosendungplan", - "subtitle": "Unser wöchentliches Programm mit DJs und Shows", - "empty": "Noch keine Sendungen geplant.", - "colDay": "Tag", - "colTime": "Zeit", - "colDj": "DJ", - "colShow": "Sendung", - "noShows": "Keine Sendungen" - }, - "radioShouts": { - "title": "Radio Shouts", - "subtitle": "Shoutouts und Wünsche aus der Community", - "postTitle": "Einen Shout posten", - "postSubtitle": "Sende eine Nachricht an den DJ, der on Air ist", - "messageLabel": "Deine Nachricht", - "messagePlaceholder": "Sende einen Shout an den DJ…", - "shoutButton": "Shout", - "loginToPost": "Melde dich an, um einen Shout zu posten.", - "latestTitle": "Neueste Shouts", - "latestSubtitle": "Die aktuellsten Nachrichten von Hörern", - "empty": "Noch keine Shouts. Sei der Erste!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Radio-Wettbewerbe", - "subtitle": "Schalte ein und nimm an unseren neuesten On-Air-Wettbewerben teil", - "empty": "Noch keine Wettbewerbe.", - "contestLabel": "Wettbewerb #{id}", - "dateUnknown": "Datum unbekannt" - }, - "radioGiveaways": { - "title": "Radio-Gewinnspiele", - "subtitle": "Hör zu und gewinne bei unseren Radio-Gewinnspielen", - "empty": "Noch keine Gewinnspiele.", - "giveawayLabel": "Gewinnspiel #{id}", - "dateUnknown": "Datum unbekannt" - }, - "radioLeaderboard": { - "title": "Radio-Hörer-Bestenliste", - "subtitle": "Top 50 Hörer nach Punkten, die sie durchs Radiohören verdient haben", - "empty": "Noch keine Hörerpunkte zu sehen.", - "colRank": "Rang", - "colAvatar": "Avatar", - "colListener": "Hörer", - "colPoints": "Punkte" - }, - "radioApply": { - "title": "Bewirb dich als Radio-DJ", - "subtitle": "Erzähl uns von dir und warum du eine großartige Bereicherung für das Radioteam wärst", - "latestTitle": "Deine letzte Bewerbung", - "statusLabel": "Status:", - "submittedOn": "· eingereicht am {date}", - "submitAgain": "Du kannst unten erneut einreichen, wenn sich deine Angaben geändert haben.", - "formTitle": "Bewerbungsformular", - "formSubtitle": "Alle mit * markierten Felder sind Pflichtfelder", - "realNameLabel": "Vollständiger Name", - "realNamePlaceholder": "Dein vollständiger Name", - "ageLabel": "Alter", - "availabilityLabel": "Verfügbarkeit", - "availabilityPlaceholder": "An welchen Tagen und zu welchen Zeiten kannst du senden?", - "musicStyleLabel": "Musikrichtung", - "musicStylePlaceholder": "z.B. House, Pop, Hip-Hop", - "experienceLabel": "Erfahrung", - "optional": "(optional)", - "experiencePlaceholder": "Frühere DJ- oder Moderationserfahrung?", - "motivationLabel": "Motivation", - "motivationPlaceholder": "Warum möchtest du dem Radioteam beitreten?", - "submitButton": "Bewerbung einreichen", - "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": "Kontoeinstellungen", - "accountSettingsSubtitle": "Verwalte dein Profil, deine Sicherheit und verbundene Konten", - "publicProfile": "Dein öffentliches Profil", - "noMotto": "Kein Motto", - "noEmail": "Keine E-Mail hinterlegt", - "changeMotto": "Motto ändern", - "changeMottoSubtitle": "Aktualisiert sich sofort im Spiel, wenn du online bist", - "mottoPlaceholder": "Dein Motto", - "saveMotto": "Motto speichern", - "securityTitle": "Sicherheit", - "securitySubtitle": "Zwei-Faktor-Authentifizierung", - "securityDescription": "Füge deinem Konto eine zweite Sicherheitsebene hinzu.", - "twoFactorLink": "Zwei-Faktor-Authentifizierung" - }, - "settings2fa": { - "backToSettings": "← Einstellungen", - "title": "Zwei-Faktor-Authentifizierung", - "subtitle": "Füge eine zweite Sicherheitsebene mit einer Authenticator-App hinzu", - "nowEnabled": "2FA ist jetzt aktiviert. 🔒", - "disabledNotice": "2FA wurde deaktiviert.", - "badCode": "Dieser Code war nicht gültig — versuche es erneut.", - "noAppKeyPrefix": "2FA ist nicht verfügbar, bis", - "noAppKeyMiddle": "konfiguriert ist (derselbe Laravel", - "noAppKeySuffix": "wie deine AtomCMS-Installation, damit vorhandene Geheimnisse lesbar bleiben).", - "isEnabled": "2FA ist aktiviert", - "onYourAccount": "auf deinem Konto.", - "disable": "2FA deaktivieren", - "scanOrEnter": "Scanne oder gib diesen Schlüssel ein", - "scanInstructions": "Füge dies zu Google Authenticator / Authy hinzu und gib dann den 6-stelligen Code zur Bestätigung ein.", - "manualKey": "Manueller Schlüssel:", - "codePlaceholder": "6-stelliger Code", - "confirm": "Bestätigen", - "enableIntro": "Füge eine zweite Sicherheitsebene mit einer Authenticator-App hinzu.", - "enable": "2FA aktivieren" - }, - "title": "Verbundene Konten", - "subtitle": "Verknüpfe ein Social-Media-Konto, damit du dich mit einem Klick anmelden kannst", - "connected": "Verbunden", - "unavailable": "Nicht verfügbar", - "login": { - "title": "Anmelden", - "subtitle": "Willkommen zurück — melde dich an, um das Hotel zu betreten.", - "subtitle2fa": "Gib den 6-stelligen Code aus deiner Authenticator-App ein.", - "usernamePlaceholder": "Benutzername", - "passwordPlaceholder": "Passwort", - "codePlaceholder": "2FA-Code", - "pleaseWait": "Bitte warten…", - "verify": "Verifizieren", - "signIn": "Anmelden", - "or": "oder", - "noAccount": "Noch kein Konto?", - "createOne": "Konto erstellen", - "forgotPassword": "Passwort vergessen?", - "errorInvalidCredentials": "Ungültiger Benutzername oder Passwort", - "errorInvalid2fa": "Ungültiger 2FA-Code", - "welcomeBack": "Willkommen zurück", - "welcomeBackSub": "Melde dich an, um zu {hotelName} zu gelangen", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Konto erstellen", - "subtitle": "Werde Mitglied im Hotel — es dauert nur einen Moment.", - "username": "Benutzername", - "email": "E-Mail", - "password": "Passwort", - "confirmPassword": "Passwort wiederholen", - "usernamePlaceholder": "Benutzername", - "emailPlaceholder": "E-Mail", - "passwordPlaceholder": "Passwort (min. 6 Zeichen)", - "confirmPasswordPlaceholder": "Passwort wiederholen", - "selectOutfit": "Wähle dein Outfit", - "termsAccept": "Ich bin 18+ und akzeptiere die {hotel} AGB & Regeln.", - "createAccount": "Konto erstellen", - "creatingAccount": "Konto wird erstellt...", - "redirecting": "Weiterleitung zu deinem Account...", - "alreadyHaveAccount": "Bereits ein Konto? Anmelden!", - "register": "Registrieren", - "termsError": "Du musst die AGB & Regeln akzeptieren, um dich zu registrieren.", - "usernameError": "Benutzername ist erforderlich.", - "emailError": "Eine gültige E-Mail ist erforderlich.", - "passwordError": "Das Passwort muss mindestens 6 Zeichen lang sein.", - "confirmPasswordError": "Passwörter stimmen nicht überein.", - "termsRequired": "Du musst die AGB & Regeln akzeptieren.", - "usernameRequired": "Benutzername ist erforderlich.", - "emailRequired": "E-Mail ist erforderlich.", - "passwordRequired": "Passwort ist erforderlich.", - "passwordsDontMatch": "Passwörter stimmen nicht überein.", - "alreadyHaveAccountPre": "Hast du bereits ein Konto?", - "alreadyHaveAccountLink": "Anmelden", - "whoIsOnline": "Wer ist online", - "usersOnline": "{count} online" - }, - "forgot": { - "title": "Passwort zurücksetzen", - "subtitle": "Wir senden dir einen sicheren Link, um ein neues Passwort zu erstellen.", - "sentNotice": "Wenn diese E-Mail registriert ist, wurde ein Reset-Link gesendet. Überprüfe deinen Posteingang.", - "emailPlaceholder": "Deine E-Mail", - "sendResetLink": "Reset-Link senden", - "backToLogin": "Zurück zur Anmeldung", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Neues Passwort festlegen", - "subtitle": "Wähle ein sicheres Passwort, das du sonst nirgendwo verwendest.", - "passwordPlaceholder": "Neues Passwort (min. 6 Zeichen)", - "resetPassword": "Passwort zurücksetzen", - "backToLogin": "Zurück zur Anmeldung" - }, - "verify": { - "verifiedTitle": "Du bist startklar", - "verifiedSubtitle": "E-Mail verifiziert", - "verifiedBody": "Deine E-Mail-Adresse wurde verifiziert. Du kannst dich jetzt anmelden und spielen.", - "goToLogin": "Zur Anmeldung", - "alreadyTitle": "Bereits verifiziert", - "alreadySubtitle": "Nichts zu tun", - "alreadyBody": "Diese E-Mail-Adresse wurde bereits bestätigt.", - "unavailableTitle": "Später nochmal versuchen", - "unavailableSubtitle": "Server nicht erreichbar", - "unavailableBody": "Wir konnten den Server nicht erreichen, um deine E-Mail zu verifizieren. Bitte versuche den Link später erneut.", - "invalidTitle": "E-Mail-Verifizierung", - "invalidSubtitle": "Ungültiger oder abgelaufener Link", - "invalidBody": "Dieser Verifizierungslink ist nicht gültig. Stelle sicher, dass du den vollständigen Link aus deiner E-Mail geöffnet hast, oder fordere einen neuen an.", - "backToLogin": "Zurück zur Anmeldung" - }, - "banned": { - "title": "Du bist gebannt", - "subtitle": "Konto gesperrt", - "body": "Dein Konto wurde vom Hotel gesperrt.", - "reasonLabel": "Grund:", - "permanent": "Dieser Bann ist permanent.", - "expires": "Läuft ab am {date}.", - "contactStaff": "Wenn du glaubst, dass dies ein Fehler ist, wende dich an das Team." - }, - "maintenance": { - "title": "{hotel} wird gewartet", - "subtitle": "Wir sind bald zurück", - "staffCanLogIn": "Teammitglieder können sich weiterhin anmelden." - }, - "admin": { - "nav": { - "overview": "Übersicht", - "dashboard": "Dashboard", - "content": "Inhalte", - "articles": "Artikel", - "tags": "Tags", - "navigator": "Navigator", - "helpCenter": "Hilfecenter", - "advertisements": "Werbung", - "writeableBoxes": "Editierbare Boxen", - "photos": "Fotos", - "tickets": "Tickets", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Benutzer & Zugang", - "users": "Benutzer", - "bans": "Banns", - "ipManagement": "IP-Verwaltung", - "vpn": "VPN", - "applications": "Bewerbungen", - "teams": "Teams", - "permissions": "Berechtigungen", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Wirtschaft", - "catalog": "Katalog", - "shop": "Shop", - "transactions": "Transaktionen", - "vouchers": "Gutscheine", - "subscriptions": "Abonnements", - "rareValues": "Seltene Werte", - "badges": "Abzeichen", - "achievements": "Errungenschaften", - "calendar": "Kalender", - "radio": "Radio", - "radioHistory": "Radio-Verlauf", - "radioBanners": "Banner", - "radioEmbed": "Einbettung", - "radioApiKeys": "API-Schlüssel", - "radioModeration": "Moderation", - "radioSettings": "Einstellungen", - "radioMonitoring": "Überwachung", - "radioPoints": "Punkte", - "radioRanks": "Ränge", - "radioAutodj": "Auto DJ", - "system": "System", - "commandocentrum": "Commandocentrum", - "emulator": "Emulator", - "alerts": "Alarme", - "logs": "Logs", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Wortfilter", - "maintenance": "Wartung", - "rooms": "Räume", - "emailTemplates": "E-Mail-Vorlagen", - "theme": "Design", - "media": "Medien", - "favicon": "Favicon", - "sounds": "Sounds", - "translations": "Übersetzungen", - "import": "Importieren", - "settings": "Einstellungen", - "backToSite": "Zurück zur Website", - "housekeeping": "Hausverwaltung", - "hotelManagementPanel": "Hotel-Verwaltungsbereich", - "rankLabel": "Rang {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Menü durchsuchen…", - "clearMenuSearch": "Menüsuche löschen", - "noMenuResults": "Keine passenden Seiten.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "studio": "Studio", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Dashboard", - "subtitle": "Hotel-Übersicht & Live-Status", - "playersOnline": "Spieler online", - "articles": "Artikel", - "activeBans": "Aktive Banns", - "database": "Datenbank", - "databaseConnected": "Verbunden", - "databaseDown": "Ausgefallen", - "usersByRank": "Benutzer nach Rang", - "noAccountsToBreakDown": "Noch keine Konten aufzuschlüsseln", - "rankLabel": "Rang {rank}", - "rankWithCount": "Rang {rank}: {count} Konten", - "recentStaffActivity": "Letzte Team-Aktivität", - "viewAll": "Alle anzeigen", - "noStaffActivityLogged": "Noch keine Team-Aktivität protokolliert" - }, - "articles": { - "title": "Artikel", - "subtitle": "Nachrichtenartikel — die 50 neuesten", - "newArticle": "+ Neuer Artikel", - "edit": "Bearbeiten", - "delete": "Löschen", - "noArticles": "Noch keine Artikel", - "confirmDelete": "Bist du sicher, dass du „{title}“ löschen möchtest?", - "colTitle": "Titel", - "colSlug": "Slug", - "colAuthor": "Autor", - "colCreated": "Erstellt", - "colActions": "Aktionen", - "form": { - "title": "Titel", - "titlePlaceholder": "Artikel-Titel", - "slug": "Slug", - "slugPlaceholder": "artikel-url-slug", - "category": "Kategorie", - "categoryPlaceholder": "Wähle eine Kategorie", - "body": "Inhalt", - "bodyPlaceholder": "Schreibe den Artikel-Inhalt…", - "image": "Bild", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Vorschaubild", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Veröffentlicht", - "featured": "Hervorgehoben", - "save": "Artikel speichern", - "saving": "Wird gespeichert…", - "deleteArticle": "Artikel löschen", - "deleteConfirm": "Dieser Vorgang kann nicht rückgängig gemacht werden. Der Artikel wird dauerhaft entfernt.", - "cancel": "Abbrechen", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Tags", - "subtitle": "Artikel-Tags / Kategorien", - "addTag": "Tag hinzufügen", - "name": "Name", - "namePlaceholder": "Tag-Name", - "backgroundColour": "Hintergrundfarbe", - "createTag": "Tag erstellen", - "editTag": "Tag bearbeiten", - "updateTag": "Tag aktualisieren", - "deleteTag": "Tag löschen", - "confirmDelete": "„{name}“ löschen?", - "noTags": "Noch keine Tags", - "colId": "ID", - "colTag": "Tag", - "colColour": "Farbe", - "colUsedBy": "Verwendet von", - "colCreated": "Erstellt", - "colActions": "Aktionen" - }, - "navigation": { - "title": "Navigator", - "flatCategories": "Flache Kategorien", - "publicRooms": "Öffentliche Räume", - "addCategory": "Kategorie hinzufügen", - "editCategory": "Kategorie bearbeiten", - "deleteCategory": "Kategorie löschen", - "categoryName": "Kategoriename", - "categoryNamePlaceholder": "z.B. Chill & Chat", - "categoryOrder": "Reihenfolge", - "roomName": "Raumname", - "roomNamePlaceholder": "z.B. Welcome Lounge", - "roomId": "Raum-ID", - "roomIdPlaceholder": "Numerische Raum-ID", - "save": "Speichern", - "cancel": "Abbrechen", - "noCategories": "Noch keine Kategorien", - "noPublicRooms": "Noch keine öffentlichen Räume", - "colId": "ID", - "colName": "Name", - "colOrder": "Reihenfolge", - "colRooms": "Räume", - "colActions": "Aktionen" - }, - "helpCenter": { - "title": "Hilfecenter", - "subtitle": "Support-Einträge & FAQ-Verwaltung", - "entries": "Einträge", - "newEntry": "+ Neuer Eintrag", - "edit": "Bearbeiten", - "delete": "Löschen", - "noEntries": "Noch keine Einträge", - "confirmDelete": "„{title}“ löschen?", - "colId": "ID", - "colTitle": "Titel", - "colCategory": "Kategorie", - "colCreated": "Erstellt", - "colActions": "Aktionen", - "form": { - "title": "Titel", - "titlePlaceholder": "Eintrag-Titel", - "category": "Kategorie", - "categoryPlaceholder": "Wähle eine Kategorie", - "body": "Inhalt", - "bodyPlaceholder": "Schreibe die Antwort…", - "save": "Eintrag speichern", - "saving": "Wird gespeichert…", - "deleteEntry": "Eintrag löschen", - "cancel": "Abbrechen" - } - }, - "ads": { - "title": "Werbung", - "subtitle": "Hotel-Werbung und Werbebanner verwalten", - "newAd": "+ Neue Anzeige", - "edit": "Bearbeiten", - "delete": "Löschen", - "noAds": "Noch keine Werbung", - "confirmDelete": "Diese Anzeige löschen?", - "colId": "ID", - "colName": "Name", - "colImage": "Bild", - "colUrl": "URL", - "colViews": "Aufrufe", - "colStatus": "Status", - "colCreated": "Erstellt", - "colActions": "Aktionen", - "form": { - "name": "Name", - "namePlaceholder": "Anzeigenname", - "image": "Bild-URL", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Ziel-URL", - "urlPlaceholder": "https://example.com", - "enabled": "Aktiviert", - "save": "Anzeige speichern", - "saving": "Wird gespeichert…", - "deleteAd": "Anzeige löschen", - "cancel": "Abbrechen" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Editierbare Boxen", - "subtitle": "Inhaltsfelder, die im Hotel und CMS angezeigt werden", - "newBox": "Neue Box", - "edit": "Bearbeiten", - "delete": "Löschen", - "noBoxes": "Noch keine editierbaren Boxen", - "confirmDelete": "Diese Box löschen?", - "colId": "ID", - "colName": "Name", - "colLocation": "Position", - "colUpdated": "Aktualisiert", - "colActions": "Aktionen", - "form": { - "name": "Name", - "namePlaceholder": "Box-Name", - "location": "Position", - "locationPlaceholder": "z.B. startseite, sidebar", - "content": "Inhalt", - "contentPlaceholder": "Schreibe den Box-Inhalt…", - "enabled": "Aktiviert", - "save": "Box speichern", - "saving": "Wird gespeichert…", - "deleteBox": "Box löschen", - "cancel": "Abbrechen" - } - }, - "photos": { - "title": "Foto-Moderation", - "subtitle": "Aktuelle In-Game-Fotos", - "delete": "Löschen", - "approve": "Genehmigen", - "noPhotos": "Keine Fotos zu moderieren", - "confirmDelete": "Dieses Foto dauerhaft löschen?", - "colId": "ID", - "colPreview": "Vorschau", - "colUser": "Benutzer", - "colRoom": "Raum", - "colTimestamp": "Zeitstempel", - "colActions": "Aktionen", - "photoAlt": "Benutzerfoto #{id}", - "byUser": "von {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Benutzer", - "subtitle": "Hotel-Konten durchsuchen, suchen und verwalten", - "search": "Suchen", - "searchPlaceholder": "Suche nach Benutzername, E-Mail oder ID…", - "searchResults": "{count, plural, one {# Ergebnis} other {# Ergebnisse}} für „{query}“", - "noResults": "Keine Benutzer gefunden", - "colId": "ID", - "colUsername": "Benutzername", - "colEmail": "E-Mail", - "colRank": "Rang", - "colOnline": "Online", - "colRegistered": "Registriert", - "colLastOnline": "Zuletzt online", - "colActions": "Aktionen", - "yes": "Ja", - "no": "Nein", - "edit": "Bearbeiten", - "setRank": "Rang setzen", - "disconnect": "Trennen", - "alert": "Alarm", - "ban": "Bannen", - "detail": { - "title": "Benutzer: {username}", - "subtitle": "Kontodetails und -verwaltung", - "overview": "Übersicht", - "actions": "Aktionen", - "username": "Benutzername", - "email": "E-Mail", - "motto": "Motto", - "rank": "Rang", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamanten", - "online": "Online", - "registered": "Registriert", - "lastOnline": "Zuletzt online", - "ipAddress": "IP-Adresse", - "machineId": "Maschinen-ID", - "sendAlert": "Alarm senden", - "sendMessage": "Nachricht senden", - "disconnectUser": "Benutzer trennen", - "banUser": "Benutzer bannen", - "resetPassword": "Passwort zurücksetzen", - "deleteUser": "Benutzer löschen", - "confirmDelete": "Bist du sicher, dass du {username} löschen möchtest? Dies kann nicht rückgängig gemacht werden.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Benutzer bearbeiten: {username}", - "subtitle": "Kontodetails ändern", - "username": "Benutzername", - "usernamePlaceholder": "Benutzername", - "email": "E-Mail", - "emailPlaceholder": "user@example.com", - "motto": "Motto", - "mottoPlaceholder": "Benutzer-Motto", - "rank": "Rang", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamanten", - "save": "Änderungen speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Banns", - "subtitle": "Konto-, IP- und Maschinen-Banns verwalten", - "newBan": "Neuer Bann", - "edit": "Bearbeiten", - "delete": "Löschen", - "noBans": "Noch keine Banns", - "confirmDelete": "Diesen Bann entfernen?", - "colId": "ID", - "colValue": "Wert", - "colType": "Typ", - "colReason": "Grund", - "colBannedBy": "Gebannt von", - "colExpires": "Läuft ab", - "colCreated": "Erstellt", - "colActions": "Aktionen", - "form": { - "value": "Wert", - "valuePlaceholder": "Benutzername, IP oder Maschinen-ID", - "type": "Typ", - "typeUser": "Benutzer", - "typeIp": "IP", - "typeMachine": "Maschine", - "reason": "Grund", - "reasonPlaceholder": "Bann-Grund", - "expiresAt": "Läuft ab am", - "permanent": "Permanent", - "save": "Bann speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen" - } - }, - "ip": { - "title": "IP-Verwaltung", - "subtitle": "IP-Whitelist und Blacklist verwalten", - "whitelist": "Whitelist", - "blacklist": "Blacklist", - "addIp": "IP hinzufügen", - "ipAddress": "IP-Adresse", - "ipAddressPlaceholder": "z.B. 127.0.0.1", - "reason": "Grund", - "reasonPlaceholder": "Grund für die Listung", - "add": "Hinzufügen", - "remove": "Entfernen", - "confirmRemove": "Diese IP aus der {list} entfernen?", - "noWhitelistedIps": "Keine IPs auf der Whitelist", - "noBlacklistedIps": "Keine IPs auf der Blacklist", - "colIp": "IP", - "colReason": "Grund", - "colAdded": "Hinzugefügt", - "colActions": "Aktionen" - }, - "vpn": { - "title": "VPN / Proxy-Erkennung", - "subtitle": "VPN- und Proxy-Erkennungseinstellungen konfigurieren", - "enabled": "Aktiviert", - "apiKey": "API-Schlüssel", - "apiKeyPlaceholder": "Dein VPN-Erkennungs-API-Schlüssel", - "apiKeyHint": "Leer lassen zum Deaktivieren", - "blockOnDetect": "Bei Erkennung blockieren", - "blockOnDetectHint": "Benutzer hinter einem VPN oder Proxy automatisch blockieren", - "save": "Einstellungen speichern", - "saving": "Wird gespeichert…", - "settingsSaved": "VPN-Einstellungen erfolgreich gespeichert" - }, - "applications": { - "title": "Team-Bewerbungen", - "subtitle": "Ausstehende und geprüfte Bewerbungen", - "pending": "Ausstehend", - "approved": "Genehmigt", - "rejected": "Abgelehnt", - "noApplications": "Noch keine Bewerbungen", - "colId": "ID", - "colApplicant": "Bewerber", - "colPosition": "Position", - "colStatus": "Status", - "colSubmitted": "Eingereicht", - "colActions": "Aktionen", - "review": "Prüfen", - "approve": "Genehmigen", - "reject": "Ablehnen", - "confirmApprove": "{username} für {position} genehmigen?", - "confirmReject": "{username}s Bewerbung für {position} ablehnen?", - "detail": { - "title": "Bewerbung von {username}", - "subtitle": "Für {position}", - "about": "Über den Bewerber", - "message": "Bewerbungsnachricht", - "status": "Status", - "submitted": "Eingereicht", - "noMessage": "Keine Nachricht angegeben" - } - }, - "teams": { - "title": "Teams", - "subtitle": "Team-Rang-Namen und Beschreibungen festlegen", - "addRank": "Rang hinzufügen", - "editRank": "Rang bearbeiten", - "deleteRank": "Rang löschen", - "noTeams": "Noch keine Rang-Definitionen", - "confirmDelete": "Rang {id}-Definition löschen?", - "colId": "ID", - "colRank": "Rang", - "colName": "Name", - "colBadge": "Abzeichen", - "colColour": "Farbe", - "colActions": "Aktionen", - "form": { - "rankId": "Rang-ID", - "rankIdPlaceholder": "Numerische Rang-ID", - "name": "Name", - "namePlaceholder": "z.B. Administrator", - "badge": "Abzeichen-Code", - "badgePlaceholder": "z.B. ADM001", - "colour": "Farbe", - "colourPlaceholder": "z.B. #ff0000", - "save": "Team-Definition speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen" - } - }, - "permissions": { - "title": "Berechtigungen", - "subtitle": "Rangbasierte Berechtigungen für das Admin-Panel verwalten", - "addPermission": "Berechtigung hinzufügen", - "editPermission": "Berechtigung bearbeiten", - "deletePermission": "Berechtigung löschen", - "noPermissions": "Noch keine Berechtigungen konfiguriert", - "confirmDelete": "Diese Berechtigung löschen?", - "colId": "ID", - "colRank": "Rang", - "colPermission": "Berechtigung", - "colCreated": "Erstellt", - "colActions": "Aktionen", - "form": { - "rankId": "Rang-ID", - "rankIdPlaceholder": "Erforderlicher Mindestrang", - "permission": "Berechtigungsschlüssel", - "permissionPlaceholder": "z.B. admin.articles.manage", - "save": "Berechtigung speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen" - } - }, - "catalog": { - "title": "Katalog", - "subtitle": "Katalogseiten und -artikel durchsuchen und verwalten", - "pages": "Seiten", - "items": "Artikel", - "addPage": "Seite hinzufügen", - "editPage": "Seite bearbeiten", - "deletePage": "Seite löschen", - "addItem": "Artikel hinzufügen", - "editItem": "Artikel bearbeiten", - "deleteItem": "Artikel löschen", - "noPages": "Noch keine Katalogseiten", - "noItems": "Keine Artikel auf dieser Seite", - "confirmDeletePage": "Katalogseite „{name}“ löschen?", - "confirmDeleteItem": "Diesen Artikel löschen?", - "colId": "ID", - "colName": "Name", - "colIcon": "Symbol", - "colOrder": "Reihenfolge", - "colItems": "Artikel", - "colEnabled": "Aktiviert", - "colActions": "Aktionen", - "colItemId": "Artikel-ID", - "colItemName": "Artikelname", - "colCostCredits": "Preis (Credits)", - "colCostPoints": "Preis (Punkte)", - "colLimited": "Limitiert", - "pageForm": { - "name": "Name", - "namePlaceholder": "Seitenname", - "icon": "Symbol-ID", - "iconPlaceholder": "Numerische Symbol-ID", - "order": "Reihenfolge", - "enabled": "Aktiviert", - "parent": "Überseite", - "parentNone": "Keine (Stamm)", - "save": "Seite speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen" - }, - "itemForm": { - "itemId": "Artikel-ID", - "itemName": "Artikelname", - "costCredits": "Preis in Credits", - "costDuckets": "Preis in Duckets", - "costDiamonds": "Preis in Diamanten", - "limitedStack": "Limitierte Stückzahl", - "limitedSold": "Limitierte verkauft", - "save": "Artikel speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen" - }, - "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." - } - }, - "shop": { - "title": "Shop", - "subtitle": "Pakete und Bestellungen verwalten", - "packages": "Pakete", - "orders": "Bestellungen", - "newPackage": "+ Neues Paket", - "edit": "Bearbeiten", - "delete": "Löschen", - "viewOrder": "Ansehen", - "noPackages": "Noch keine Shop-Pakete", - "noOrders": "Noch keine Bestellungen", - "confirmDelete": "Dieses Paket löschen?", - "colId": "ID", - "colName": "Name", - "colPrice": "Preis", - "colCurrency": "Währung", - "colType": "Typ", - "colSold": "Verkauft", - "colEnabled": "Aktiviert", - "colActions": "Aktionen", - "colOrderId": "Bestell-ID", - "colCustomer": "Kunde", - "colPackage": "Paket", - "colAmount": "Betrag", - "colStatus": "Status", - "colDate": "Datum", - "statusPending": "Ausstehend", - "statusCompleted": "Abgeschlossen", - "statusRefunded": "Erstattet", - "form": { - "name": "Name", - "namePlaceholder": "Paketname", - "description": "Beschreibung", - "descriptionPlaceholder": "Paketbeschreibung", - "price": "Preis", - "currency": "Währung", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Typ", - "typeCredits": "Credits", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamanten", - "typeBadge": "Abzeichen", - "typeFurni": "Möbel", - "typeRank": "Rang", - "amount": "Menge", - "badgeCode": "Abzeichen-Code", - "badgeCodePlaceholder": "z.B. VIP001", - "rankId": "Rang-ID", - "furniItems": "Möbel-Artikel", - "enabled": "Aktiviert", - "save": "Paket speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Transaktionen", - "subtitle": "PayPal-Zahlungsprotokoll", - "noTransactions": "Noch keine Transaktionen", - "colId": "ID", - "colUser": "Benutzer", - "colAmount": "Betrag", - "colCurrency": "Währung", - "colPackage": "Paket", - "colStatus": "Status", - "colDate": "Datum", - "colActions": "Aktionen", - "statusCompleted": "Abgeschlossen", - "statusPending": "Ausstehend", - "statusFailed": "Fehlgeschlagen", - "statusRefunded": "Erstattet", - "detail": { - "title": "Transaktion #{id}", - "paypalId": "PayPal-ID", - "payerEmail": "Zahler-E-Mail", - "grossAmount": "Bruttobetrag", - "fee": "Gebühr", - "netAmount": "Nettobetrag" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Shop-Gutscheine", - "subtitle": "Einlösbare Gutscheincodes verwalten", - "newVoucher": "+ Neuer Gutschein", - "edit": "Bearbeiten", - "delete": "Löschen", - "noVouchers": "Noch keine Gutscheine", - "confirmDelete": "Gutschein „{code}“ löschen?", - "colId": "ID", - "colCode": "Code", - "colValue": "Wert", - "colType": "Typ", - "colUses": "Verwendet / Max.", - "colExpires": "Läuft ab", - "colCreated": "Erstellt", - "colActions": "Aktionen", - "form": { - "code": "Code", - "codePlaceholder": "z.B. SOMMER2025", - "value": "Wert", - "type": "Typ", - "typeCredits": "Credits", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamanten", - "typeBadge": "Abzeichen", - "typeFurni": "Möbel", - "typeRank": "Rang", - "badgeCode": "Abzeichen-Code", - "badgeCodePlaceholder": "z.B. VIP001", - "rankId": "Rang-ID", - "maxUses": "Max. Verwendungen", - "maxUsesPlaceholder": "0 = unbegrenzt", - "expiresAt": "Läuft ab am", - "enabled": "Aktiviert", - "save": "Gutschein speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Abonnements", - "subtitle": "Aktive wiederkehrende Abonnements", - "noSubscriptions": "Keine aktiven Abonnements", - "cancel": "Kündigen", - "confirmCancel": "Abonnement für {username} kündigen?", - "colId": "ID", - "colUser": "Benutzer", - "colPackage": "Paket", - "colAmount": "Betrag", - "colInterval": "Intervall", - "colStarted": "Gestartet", - "colNextBilling": "Nächste Abrechnung", - "colStatus": "Status", - "colActions": "Aktionen", - "statusActive": "Aktiv", - "statusCancelled": "Gekündigt", - "statusExpired": "Abgelaufen" - }, - "rareValues": { - "title": "Seltene Werte", - "subtitle": "Kategorien und Artikelpreise für seltene Werte verwalten", - "categories": "Kategorien", - "items": "Artikel", - "addCategory": "Kategorie hinzufügen", - "editCategory": "Kategorie bearbeiten", - "deleteCategory": "Kategorie löschen", - "noCategories": "Noch keine Seltene-Werte-Kategorien", - "confirmDeleteCategory": "Kategorie „{name}“ mit allen Artikeln löschen?", - "colId": "ID", - "colName": "Name", - "colItems": "Artikel", - "colUpdated": "Aktualisiert", - "colActions": "Aktionen", - "colItemName": "Artikelname", - "colCredits": "Credits", - "colPoints": "Punkte", - "colPointType": "Punktetyp", - "categoryForm": { - "name": "Name", - "namePlaceholder": "Kategoriename", - "save": "Kategorie speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen" - }, - "itemForm": { - "itemName": "Artikelname", - "itemNamePlaceholder": "z.B. Thron", - "credits": "Credits-Wert", - "points": "Punkte-Wert", - "pointType": "Punktetyp", - "pointTypeDuckets": "Duckets", - "pointTypeDiamonds": "Diamanten", - "save": "Artikel speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen" - } - }, - "badges": { - "title": "Abzeichen", - "subtitle": "Abzeichen hochladen, vergeben und verwalten", - "upload": "Hochladen", - "giveBadge": "Abzeichen geben", - "catalogue": "Katalog", - "uploadTitle": "Neues Abzeichen hochladen", - "uploadSubtitle": "Eine Abzeichen-Bilddatei hochladen", - "badgeCode": "Abzeichen-Code", - "badgeCodePlaceholder": "z.B. VIP001", - "badgeFile": "Abzeichen-Datei", - "badgeFileHint": "PNG oder GIF, empfohlen 40x40", - "uploadButton": "Hochladen", - "uploading": "Wird hochgeladen…", - "giveTitle": "Abzeichen an Benutzer geben", - "giveSubtitle": "Einem bestimmten Benutzer ein Abzeichen gewähren", - "username": "Benutzername", - "usernamePlaceholder": "Zielbenutzername", - "giveButton": "Abzeichen geben", - "giving": "Wird vergeben…", - "catalogueTitle": "Abzeichen-Katalog", - "catalogueSubtitle": "Alle verfügbaren Abzeichen im Hotel", - "noBadges": "Keine Abzeichen im Katalog", - "search": "Abzeichen suchen", - "searchPlaceholder": "Suche nach Code oder Name…", - "colCode": "Code", - "colImage": "Bild", - "colName": "Name", - "colDescription": "Beschreibung", - "colActions": "Aktionen" - }, - "achievements": { - "title": "Errungenschaften", - "subtitle": "Nur-Lesen-Liste der In-Game-Errungenschaften", - "noAchievements": "Keine Errungenschaften konfiguriert", - "colId": "ID", - "colName": "Name", - "colCategory": "Kategorie", - "colLevels": "Stufen", - "colReward": "Belohnung", - "colProgress": "Fortschritt", - "levelLabel": "Stufe {level}", - "rewardCredits": "{count} Credits", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Kalender-Kampagnen", - "subtitle": "Nur-Lesen-Liste der Kalenderkampagnen und -events", - "noCampaigns": "Noch keine Kalender-Kampagnen", - "colId": "ID", - "colName": "Name", - "colStart": "Start", - "colEnd": "Ende", - "colType": "Typ", - "colReward": "Belohnung", - "colActions": "Aktionen", - "detail": { - "title": "Kampagne: {name}", - "subtitle": "Kalender-Event-Details", - "days": "Tage", - "dayLabel": "Tag {day}", - "reward": "Belohnung", - "noDays": "Keine Tage für diese Kampagne konfiguriert" - } - }, - "radio": { - "title": "Radio-Moderation", - "subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).", - "moderation": "Moderation", - "shouts": "Shouts", - "applications": "Bewerbungen", - "schedules": "Programm", - "settings": "Einstellungen", - "embed": "Einbetten", - "ranks": "Ränge", - "history": "Verlauf", - "apiKeys": "API-Schlüssel", - "points": "Punkte", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Radio-Überwachung", - "subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.", - "stream": "Stream", - "online": "Online", - "offline": "Offline", - "notConfigured": "Not configured", - "nowPlaying": "Now playing", - "nowPlayingApi": "Now-playing API", - "listenersApi": "Listeners API", - "listeners": "Hörer", - "currentSong": "Aktueller Song", - "bitrate": "Bitrate", - "status": "Status", - "noNowPlayingHint": "no now-playing API set", - "noListenersHint": "no listeners API set", - "endpointDiagnostics": "Endpoint diagnostics", - "diagnosticsLegend": "OK: erreichbar · WARN: nicht konfiguriert · ERROR: Anfrage fehlgeschlagen oder Zeitüberschreitung.", - "streamUrl": "Stream URL", - "unreachable": "unreachable", - "refresh": "Aktualisieren" - }, - "user": "User", - "message": "Message", - "posted": "Posted", - "realName": "Real Name", - "age": "Age", - "style": "Style", - "applied": "Applied", - "day": "Day", - "start": "Start", - "end": "End", - "show": "Show", - "status": "Status", - "active": "active", - "inactive": "inactive", - "hidden": "hidden", - "activeSchedules": "Active schedules", - "noShouts": "Keine Shouts zu moderieren", - "noApplications": "No applications submitted.", - "noSchedules": "No schedules configured.", - "deleteShout": "Löschen", - "confirmDeleteShout": "Diesen Shout löschen?", - "pendingApplications": "Ausstehende Bewerbungen", - "settingsForm": { - "title": "Radio Settings", - "subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", - "enabled": "Enabled", - "disabled": "Disabled", - "totalKeys": "Total keys", - "configured": "Configured", - "curatedHint": "curated keys with a value", - "customKeys": "Custom keys", - "saveAll": "Save all", - "singleKey": "Add / overwrite a single key", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "value", - "commentPlaceholder": "comment (optional)", - "saveSingle": "Save", - "otherSettings": "Other radio settings", - "dbError": "Could not load settings (database unavailable). Defaults will be created on save." - }, - "embedPage": { - "title": "Radio Embed", - "subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).", - "streamUrl": "Stream URL", - "configured": "Configured", - "missing": "Missing", - "radioName": "Radio name", - "nowPlayingApi": "Now-playing API", - "set": "Set", - "notSet": "Not set", - "noStreamUrl": "No stream URL configured", - "noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.", - "goToSettings": "Go to Radio Settings", - "livePreview": "Live preview", - "livePreviewText": "This is the bare audio player as visitors will see it. Press play to confirm the stream is reachable.", - "source": "Source", - "audioSnippet": "Audio player snippet", - "audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.", - "iframeSnippet": "Iframe wrapper snippet", - "iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.", - "audioUnsupported": "Your browser does not support the audio element." - }, - "banners": { - "title": "Banner", - "heading": "Radio Banners", - "description": "Promotional banners shown on the radio page, ordered by sort order.", - "addBanner": "Banner hinzufügen", - "createBanner": "Create banner", - "deleteBanner": "Banner löschen", - "noBanners": "No banners yet — add one above.", - "existing": "Existing banners ({count})", - "save": "Save", - "delete": "Delete", - "byUser": "by user {id}", - "active": "active", - "hidden": "hidden", - "bannerAlt": "Radio banner", - "statusActive": "Active", - "statusHidden": "Hidden", - "dbError": "Could not load banners (database unavailable).", - "form": { - "imagePath": "Image path / URL", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Title", - "description": "Description", - "sortOrder": "Sort order", - "active": "Active" - } - }, - "ranksForm": { - "title": "Radio-Ränge", - "subtitle": "DJ / staff ranks assignable on radio applications.", - "dbError": "Could not load ranks (database unavailable).", - "active": "Active", - "addRank": "Add rank", - "name": "Name", - "badgeCode": "Badge code", - "description": "Description", - "createRank": "Create rank", - "existing": "Existing ranks ({count})", - "noRanks": "No ranks yet — add one above.", - "activeLabel": "active", - "inactiveLabel": "inactive", - "save": "Save", - "deleteRank": "Delete rank #{id}" - }, - "historyPage": { - "title": "Radio Play History", - "subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.", - "dbError": "Could not load radio history (database unavailable).", - "showsLogged": "Shows logged", - "onAirNow": "On air now", - "uniqueDjs": "Unique DJs", - "peakListeners": "Peak listeners", - "empty": "No radio history recorded yet.", - "showLog": "Show log ({count})", - "colDj": "DJ", - "colShow": "Show", - "colStarted": "Started", - "colEnded": "Ended", - "colAirtime": "Airtime", - "colListeners": "Listeners", - "colNotes": "Notes", - "onAir": "on air" - }, - "apiKeysForm": { - "title": "API-Schlüssel", - "subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.", - "dbError": "Could not load API keys (database unavailable).", - "totalKeys": "Total keys", - "active": "Active", - "inactive": "Inactive", - "generateKey": "Neuen Schlüssel generieren", - "generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.", - "name": "Name", - "namePlaceholder": "AzureCast bridge", - "rateLimit": "Rate limit (requests/min)", - "allowedIps": "Allowed IPs (optional)", - "allowedIpsPlaceholder": "comma-separated, blank = any", - "generate": "Generieren", - "existingKeys": "Existing keys ({count})", - "noKeys": "No API keys yet — generate one above.", - "colName": "Name", - "colKey": "Schlüssel", - "colAllowedIps": "Allowed IPs", - "colRateLimit": "Rate limit", - "colLastUsed": "Last used", - "colExpires": "Expires", - "colStatus": "Status", - "colActions": "Aktionen", - "maskedHint": "Only the first 8 characters are shown", - "any": "any", - "activeLabel": "active", - "inactiveLabel": "inactive", - "deactivate": "Deactivate", - "activate": "Activate", - "delete": "Delete" - }, - "pointsForm": { - "title": "Hörer-Punkte-Konfiguration", - "subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", - "saved": "Saved", - "points": "Points", - "enabled": "Enabled", - "disabled": "Disabled", - "perMinute": "Per minute", - "paidIn": "paid in {currency}", - "maxPerDay": "Max / day", - "unlimited": "Unlimited", - "minListeners": "Min listeners", - "settings": "Settings", - "pointsEnabled": "Points enabled", - "pointsEnabledHint": "Master switch for awarding listener points.", - "currency": "Currency", - "currencyHint": "Which wallet the points are paid into.", - "pointsPerMinute": "Points per minute", - "pointsPerMinuteHint": "Amount awarded for each full minute of listening.", - "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", - "minListenersHint": "Points are only awarded when at least this many people are tuned in.", - "save": "Punkteeinstellungen speichern" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.", - "dbError": "Could not load the AutoDJ playlist (database unavailable).", - "tracks": "Tracks", - "active": "Active", - "inactive": "Inactive", - "addTrack": "Add track", - "titlePlaceholder": "Track title", - "artist": "Artist", - "album": "Album", - "artworkUrl": "Artwork URL", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Duration (seconds)", - "durationPlaceholder": "e.g. 215", - "sortOrder": "Sort order", - "playlist": "Playlist ({count})", - "noTracks": "No AutoDJ tracks yet — add one above.", - "colOrder": "Order", - "colTitle": "Title", - "colArtist": "Artist", - "colAlbum": "Album", - "colDuration": "Duration", - "colPlays": "Plays", - "colLastPlayed": "Last played", - "colStatus": "Status", - "colActions": "Actions", - "activeLabel": "active", - "inactiveLabel": "inactive", - "deactivate": "Deactivate", - "activate": "Activate", - "delete": "Delete", - "trackTitle": "Title" - }, - "moderationPage": { - "title": "DJ Moderation", - "subtitle": "Review and remove radio shouts (50 most recent).", - "recentShouts": "Recent Shouts ({count})" - } - }, - "commandocentrum": { - "title": "Commandocentrum", - "subtitle": "Diagnose, RCON-Steuerung und Benutzerverwaltung", - "diagnostics": "Diagnose", - "rcon": "RCON", - "userActions": "Benutzeraktionen", - "diagnosticsTitle": "Emulator-Diagnose", - "memoryUsage": "Speichernutzung", - "uptime": "Betriebszeit", - "onlineUsers": "Benutzer online", - "roomsLoaded": "Geladene Räume", - "refresh": "Aktualisieren", - "rconTitle": "RCON-Befehle", - "rconPlaceholder": "RCON-Befehl eingeben…", - "rconSend": "Senden", - "rconSending": "Wird gesendet…", - "rconResponse": "Antwort", - "userActionsTitle": "Benutzeraktionen", - "username": "Benutzername", - "usernamePlaceholder": "Zielbenutzername", - "action": "Aktion", - "execute": "Ausführen", - "actions": { - "disconnect": "Trennen", - "alert": "Alarm senden", - "giveCredits": "Credits geben", - "giveBadge": "Abzeichen geben", - "givePoints": "Punkte geben", - "ban": "Bannen", - "kick": "Kicken" - }, - "messagePlaceholder": "Nachricht (für Alarme)…", - "amountPlaceholder": "Betrag…", - "badgePlaceholder": "Abzeichen-Code…" - }, - "emulator": { - "title": "Emulator-Konfiguration", - "subtitle": "Emulator-Einstellungen und Lokaltexte anzeigen und bearbeiten", - "settings": "Einstellungen", - "texts": "Texte", - "search": "Suchen", - "searchPlaceholder": "Schlüssel suchen…", - "noSettings": "Keine Einstellungen gefunden", - "noTexts": "Keine Texte gefunden", - "edit": "Bearbeiten", - "save": "Speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen", - "colKey": "Schlüssel", - "colValue": "Wert", - "colType": "Typ", - "colActions": "Aktionen", - "editDialog": { - "title": "Bearbeiten: {key}", - "value": "Wert", - "valuePlaceholder": "Wert eingeben…", - "save": "Änderungen speichern", - "cancel": "Abbrechen" - } - }, - "alerts": { - "title": "Alarme", - "subtitle": "Hotelweite Alarme senden und aktuelle anzeigen", - "sendAlert": "Hotel-Alarm senden", - "recentAlerts": "Letzte Alarme ({count})", - "noRecentAlerts": "Keine aktuellen Alarme", - "form": { - "title": "Alarm-Titel", - "titlePlaceholder": "z.B. Serverwartung in 10 Minuten", - "message": "Alarm-Nachricht", - "messagePlaceholder": "Schreibe die Alarm-Nachricht…", - "type": "Typ", - "typeHotel": "Hotelweiter Alarm", - "typeStaff": "Nur Team", - "urgent": "Dringend", - "send": "Alarm senden", - "sending": "Wird gesendet…", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Titel", - "colSentBy": "Gesendet von", - "colType": "Typ", - "colDate": "Datum", - "colActions": "Aktionen", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Team-Aktivitäten", - "subtitle": "Prüfpfad der Team-Aktionen im Admin-Panel", - "noLogs": "Noch keine Team-Aktivität protokolliert", - "colId": "ID", - "colUser": "Benutzer", - "colAction": "Aktion", - "colTarget": "Ziel", - "colDescription": "Beschreibung", - "colIp": "IP", - "colTimestamp": "Zeitstempel", - "filterByUser": "Nach Benutzer filtern…", - "filterByAction": "Nach Aktion filtern…", - "clearFilters": "Filter zurücksetzen", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Wortfilter", - "subtitle": "Gefilterte Wörter und Phrasen im Hotel verwalten", - "addWord": "Wort hinzufügen", - "addWords": "Wörter hinzufügen", - "noWords": "Noch keine gefilterten Wörter", - "confirmDelete": "„{word}“ aus dem Filter entfernen?", - "colId": "ID", - "colWord": "Wort", - "colAddedBy": "Hinzugefügt von", - "colCreated": "Erstellt", - "colActions": "Aktionen", - "form": { - "word": "Wort", - "wordPlaceholder": "z.B. schlechteswort", - "addMore": "Mehrere Wörter hinzufügen (eines pro Zeile)", - "save": "Zum Filter hinzufügen", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Wartungsmodus", - "subtitle": "Hotelweite Wartung aktivieren oder deaktivieren", - "enabled": "Wartungsmodus ist aktiviert", - "disabled": "Wartungsmodus ist deaktiviert", - "enable": "Wartung aktivieren", - "disable": "Wartung deaktivieren", - "message": "Wartungs-Nachricht", - "messagePlaceholder": "Wir sind bald zurück!", - "staffAccess": "Team-Zugriff während der Wartung erlauben", - "save": "Einstellungen speichern", - "saving": "Wird gespeichert…", - "confirmEnable": "Durch Aktivieren der Wartung wird allen Nicht-Team-Benutzern der Zugriff verwehrt. Fortfahren?", - "confirmDisable": "Wartungsmodus deaktivieren und Zugriff für alle Benutzer wiederherstellen?" - }, - "housekeeping": { - "title": "Hausverwaltungs-Berechtigungen", - "subtitle": "Festlegen, welche Ränge auf welche Admin-Bereiche zugreifen können", - "addPermission": "Berechtigung hinzufügen", - "editPermission": "Berechtigung bearbeiten", - "deletePermission": "Berechtigung löschen", - "noPermissions": "Keine Hausverwaltungs-Berechtigungen konfiguriert", - "confirmDelete": "Diese Berechtigung löschen?", - "colId": "ID", - "colRank": "Rang", - "colSection": "Bereich", - "colActions": "Aktionen", - "form": { - "rankId": "Rang-ID", - "rankIdPlaceholder": "Mindestrang", - "section": "Bereichsschlüssel", - "sectionPlaceholder": "z.B. admin.dashboard", - "save": "Berechtigung speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset applied!", - "cleared": "All Berechtigungen cleared!", - "invalidRank": "Invalid Rang", - "testDone": "Test done: {count} Berechtigungen found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Löschen ALL Berechtigungen? This Aktion cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Berechtigung", - "colDescription": "Beschreibung", - "colMinRank": "Min. Rang", - "permissionKey": "Berechtigungsschlüssel", - "minRank": "Min. Rang", - "description": "Beschreibung", - "permissions": "Berechtigungen", - "permissionsCount": "{count} Berechtigungen", - "permission": "Berechtigung", - "highestMinRank": "Highest min. Rang: {rank}", - "totalMinRank": "Total min. Rang sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Ränge", - "missingDeps": "{count} missing dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(missing)", - "rank": "Rang", - "count": "Count", - "searchPermission": "Suchen Berechtigungen…", - "search": "Suchen", - "manage": "Manage", - "importSelection": "Importieren selection", - "noGroup": "Nein group", - "allGroups": "All groups", - "perGroup": "Berechtigungen per group", - "perRank": "Berechtigungen per Rang", - "rankOverviewHint": "All Berechtigungen grouped by the Rang they are assigned to.", - "tabOverview": "Übersicht", - "tabManage": "Manage", - "tabImport": "Importieren / Export", - "tabRanks": "Rang Übersicht", - "tabPresets": "Voreinstellungen", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Importieren Berechtigungen", - "importHint": "Paste a JSON array of Berechtigung objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Importieren", - "exportTitle": "Export Berechtigungen", - "exportHint": "Export all Berechtigungen as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Berechtigung Voreinstellungen", - "presetsHint": "Anwenden a predefined set of Berechtigungen for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic moderation tools: Benutzer lookup, Banns, CFH handling, chat logs.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Benutzer, Räume, news, Einstellungen, shop, events, radio & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Berechtigung management and asset Importieren.", - "applyPreset": "Anwenden preset", - "clearAll": "Clear all Berechtigungen", - "testTitle": "Test Rang access", - "testHint": "Enter a Rang number to see which Berechtigungen would be granted.", - "test": "Test", - "auditTitle": "Berechtigung audit log", - "auditHint": "All changes to Hausverwaltung Berechtigungen are logged.", - "auditLogsAt": "Audit logs are available on the Audit log page.", - "viewAuditLogs": "Ansehen audit logs", - "importedWithErrors": "Imported {count} Berechtigungen with {errors} errors", - "confirmClearAllDesc": "This will Entfernen every Berechtigung entry from the Datenbank. Are you sure?", - "confirmDeletePermission": "Löschen this Berechtigung permanently?", - "confirmBulkDelete": "Löschen {count} selected Berechtigungen?", - "deleteSelected": "Löschen {count} selected", - "cancel": "Abbrechen", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Benutzer", - "auditAction": "Aktion", - "auditTarget": "Ziel", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Räume", - "subtitle": "Hotel-Räume durchsuchen und verwalten", - "search": "Suchen", - "searchPlaceholder": "Suche nach Name, Besitzer oder ID…", - "searchResults": "{count, plural, one {# Raum} other {# Räume}} gefunden für „{query}“", - "noResults": "Keine Räume gefunden", - "colId": "ID", - "colName": "Name", - "colOwner": "Besitzer", - "colUsers": "Benutzer", - "colState": "Status", - "colCategory": "Kategorie", - "colCreated": "Erstellt", - "colActions": "Aktionen", - "stateOpen": "Offen", - "stateClosed": "Geschlossen", - "stateLocked": "Gesperrt", - "stateInvisible": "Unsichtbar", - "detail": { - "title": "Raum: {name}", - "subtitle": "Besitzer: {owner}", - "overview": "Übersicht", - "actions": "Aktionen", - "description": "Beschreibung", - "noDescription": "Keine Beschreibung", - "owner": "Besitzer", - "users": "Benutzer online", - "maxUsers": "Max. Benutzer", - "category": "Kategorie", - "state": "Status", - "tags": "Tags", - "noTags": "Keine Tags", - "created": "Erstellt", - "deleteRoom": "Raum löschen", - "confirmDelete": "Raum „{name}“ löschen? Dies kann nicht rückgängig gemacht werden.", - "enterRoom": "Raum betreten", - "changeOwner": "Besitzer ändern", - "changeOwnerPlaceholder": "Benutzername des neuen Besitzers" - } - }, - "emailTemplates": { - "title": "E-Mail-Vorlagen", - "subtitle": "Transaktions-E-Mail-Vorlagen verwalten", - "newTemplate": "+ Neue Vorlage", - "edit": "Bearbeiten", - "delete": "Löschen", - "noTemplates": "Noch keine E-Mail-Vorlagen", - "confirmDelete": "Vorlage „{name}“ löschen?", - "colId": "ID", - "colName": "Name", - "colSubject": "Betreff", - "colKey": "Schlüssel", - "colUpdated": "Aktualisiert", - "colActions": "Aktionen", - "form": { - "name": "Name", - "namePlaceholder": "z.B. Willkommens-E-Mail", - "key": "Schlüssel", - "keyPlaceholder": "z.B. welcome_email", - "subject": "Betreff", - "subjectPlaceholder": "E-Mail-Betreffzeile", - "body": "Inhalt (HTML)", - "bodyPlaceholder": "

Lieber/Liebe {username},

", - "variables": "Verfügbare Variablen", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Vorlage speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen" - } - }, - "theme": { - "title": "Design", - "subtitle": "Das CMS-Erscheinungsbild anpassen", - "presets": "Voreinstellungen", - "colours": "Farben", - "css": "CSS", - "presetsTitle": "Design-Voreinstellungen", - "presetsSubtitle": "Wähle ein vorgefertigtes Farbschema", - "applyPreset": "Anwenden", - "presetApplied": "Voreinstellung angewendet: {preset}", - "customiseTitle": "Benutzerdefinierte Farben", - "primary": "Primär", - "secondary": "Sekundär", - "accent": "Akzent", - "background": "Hintergrund", - "surface": "Oberfläche", - "text": "Text", - "saveColours": "Farben speichern", - "savingColours": "Wird gespeichert…", - "cssTitle": "Benutzerdefiniertes CSS", - "cssSubtitle": "Füge benutzerdefiniertes CSS hinzu, um Design-Stile zu überschreiben", - "cssPlaceholder": "/* Dein benutzerdefiniertes CSS hier */", - "saveCss": "CSS speichern", - "savingCss": "Wird gespeichert…", - "reset": "Auf Standard zurücksetzen", - "confirmReset": "Design auf Standardwerte zurücksetzen?" - }, - "media": { - "title": "Medienbibliothek", - "subtitle": "Mediendateien hochladen und verwalten", - "upload": "Hochladen", - "uploadTitle": "Datei hochladen", - "uploadSubtitle": "Ziehen und ablegen oder klicken zum Hochladen", - "uploadButton": "Datei auswählen", - "uploading": "Wird hochgeladen…", - "noFiles": "Noch keine Mediendateien", - "delete": "Löschen", - "confirmDelete": "Diese Datei dauerhaft löschen?", - "search": "Suchen", - "searchPlaceholder": "Nach Dateiname suchen…", - "colPreview": "Vorschau", - "colName": "Name", - "colSize": "Größe", - "colType": "Typ", - "colUploaded": "Hochgeladen", - "colActions": "Aktionen", - "copyUrl": "URL kopieren", - "urlCopied": "URL in die Zwischenablage kopiert" - }, - "settings": { - "title": "CMS-Einstellungen", - "subtitle": "Schlüssel/Wert-CMS-Konfiguration verwalten", - "addSetting": "Einstellung hinzufügen", - "edit": "Bearbeiten", - "delete": "Löschen", - "noSettings": "Keine Einstellungen gefunden", - "confirmDelete": "Einstellung „{key}“ löschen?", - "colKey": "Schlüssel", - "colValue": "Wert", - "colUpdated": "Aktualisiert", - "colActions": "Aktionen", - "form": { - "key": "Schlüssel", - "keyPlaceholder": "z.B. hotel_name", - "value": "Wert", - "valuePlaceholder": "Einstellungswert", - "save": "Einstellung speichern", - "saving": "Wird gespeichert…", - "cancel": "Abbrechen" - }, - "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." - }, - "favicon": { - "title": "Favicon", - "subtitle": "Upload and manage the site favicon", - "current": "Current favicon", - "uploadLabel": "Upload favicon", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.", - "upload": "Upload", - "uploading": "Uploading…", - "delete": "Remove", - "deleting": "Removing…", - "saved": "Favicon saved successfully!", - "deleted": "Favicon removed successfully!", - "error": "Something went wrong", - "confirmDelete": "Remove the favicon? The site will no longer show a custom favicon.", - "generator": { - "title": "Generate favicon", - "text": "Text", - "bgColor": "Background color", - "textColor": "Text color", - "rounded": "Rounded corners", - "save": "Save as favicon" - }, - "cancel": "Cancel" - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Startseite", - "reload": "Neu laden", - "fullscreen": "Vollbild", - "logout": "Abmelden", - "onlineUsers": "Nutzer online", - "emulatorOnline": "Emulator online", - "emulatorOffline": "Emulator offline", - "dragToMove": "Ziehen zum Verschieben", - "hide": "Leiste ausblenden", - "fullscreenExit": "Vollbild beenden", - "show": "Leiste anzeigen", - "emulatorUnknown": "Emulatorstatus unbekannt" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Dateidiagnose", - "preliminary": "Vorprüfung der Adressen; der Inhalt wird beim Import geprüft.", - "http": "HTTP {status}", - "network": "Verbindung fehlgeschlagen", - "timeout": "Zeitüberschreitung der Quelle", - "invalidResponse": "Die Quelle lieferte eine Webseite statt einer Datei", - "available": "Datei gefunden; Prüfung steht aus", - "recover": "Original anhängen und fortsetzen", - "recoveryHint": "Wähle {file} (maximal 50 MB). Die Identität wird geprüft. Fehlgeschlagene Einträge werden wiederholt; abgeschlossene Importe bleiben erhalten.", - "attach": "Originale .nitro-Datei wählen", - "working": "Datei wird geprüft oder Import fortgesetzt...", - "attached": "Passende Originaldatei angehängt", - "resume": "Fehlgeschlagene Importe mit dieser Datei fortsetzen", - "invalidFile": "Wähle eine passende originale .nitro-Datei bis 50 MB und versuche es erneut.", - "resumeError": "Aktualisiere den Verlauf und nutze den neuesten Versuch; prüfe die Datei und versuche es erneut.", - "mismatchedFile": "Diese Datei gehört zu einem anderen Möbelstück.", - "alreadyStarted": "Die Wiederherstellung läuft bereits. Aktualisiere den Verlauf und nutze den neuesten Versuch.", - "notEligible": "Dieser Eintrag kann nicht mit einem Anhang wiederhergestellt werden." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "Eine Wiederherstellungskopie wird 7 Tage in diesem Browser aufbewahrt.", + "saved": "Die Wiederherstellungskopie wurde für 7 Tage in diesem Browser gespeichert.", + "unavailable": "Die Wiederherstellung im Browser ist nicht verfügbar. Lass diese Seite geöffnet, bis deine Änderungen gespeichert sind.", + "found": "In diesem Browser ist eine Wiederherstellungskopie verfügbar, gespeichert am", + "restore": "Browserkopie wiederherstellen", + "discard": "Browserkopie löschen", + "confirmRestore": "Das aktuelle Formular durch die Wiederherstellungskopie im Browser ersetzen? Prüfe den Inhalt vor dem Speichern.", + "confirmDiscard": "Diese Wiederherstellungskopie im Browser löschen? Das aktuelle Formular bleibt unverändert." + }, + "nav": { + "home": "Start", + "community": "Community", + "articles": "Artikel", + "photos": "Fotos", + "staff": "Team", + "rankings": "Ranglisten", + "guilds": "Gilden", + "leaderboards": "Bestenlisten", + "rareValues": "Seltene Werte", + "shop": "Shop", + "market": "Markt", + "assistance": "Hilfe", + "helpCenter": "Hilfecenter", + "myTickets": "Meine Tickets", + "badges": "Abzeichen", + "radio": "Radio", + "friends": "Freunde", + "messages": "Nachrichten", + "admin": "Admin", + "openMenu": "Open menu", + "closeMenu": "Close menu", + "drawBadge": "Abzeichen zeichnen", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} online", + "nitroClient": "Nitro Client", + "tagline": "Eine Online-Welt, in der du deinen eigenen Avatar erstellen, Freunde finden, chatten, Räume bauen und vieles mehr kannst!", + "login": "Anmelden", + "or": "Oder", + "createAccount": "Konto erstellen" + }, + "footer": { + "copyright": "© {year} - {hotel} ist ein nicht-kommerzielles Bildungsprojekt" + }, + "pages": { + "staff": { + "title": "Team", + "subtitle": "Das Team hinter dem Hotel", + "ranksTitle": "Ränge", + "ranksSubtitle": "Wofür jeder Teil des Teams zuständig ist", + "membersTitle": "Teammitglieder", + "membersEmptySubtitle": "Im Moment gibt es niemanden zu zeigen", + "membersSubtitle": "{count, plural, one {# Mitglied hält den Betrieb aufrecht} other {# Mitglieder halten den Betrieb aufrecht}}", + "emptyState": "Keine Teammitglieder zu sehen.", + "colUsername": "Benutzername", + "colRank": "Rang", + "colMotto": "Motto", + "viewProfile": "View profile", + "noMotto": "No motto set", + "loadError": "Unable to load staff members. Please try again shortly.", + "retry": "Try again" + }, + "leaderboard": { + "title": "Bestenliste", + "subtitle": "Top 20 Spieler nach {currency}", + "tab_credits": "Credits", + "tab_diamonds": "Diamanten", + "tab_duckets": "Duckets", + "tab_achievement": "Errungenschaften", + "tab_respects": "Respekt", + "tab_onlinetime": "Online-Zeit", + "emptyState": "Noch keine Ranglisten zu sehen.", + "colAvatar": "Avatar", + "colPlayer": "Spieler" + }, + "friends": { + "title": "Freunde", + "emptySubtitle": "Du hast noch keine Freunde hinzugefügt", + "subtitle": "{count, plural, one {Du hast # Freund} other {Du hast # Freunde}}", + "emptyState": "Füge im Hotel Freunde hinzu und sie werden hier angezeigt.", + "noMotto": "Kein 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": "Nachrichten", + "subtitle": "Freundschaftsanfragen und Offline-Nachrichten warten auf dich", + "requestsTitle": "Freundschaftsanfragen", + "requestsEmptySubtitle": "Niemand hat noch gefragt, ob er dein Freund sein darf", + "requestsSubtitle": "{count, plural, one {# ausstehende Anfrage} other {# ausstehende Anfragen}}", + "requestsEmptyState": "Keine ausstehenden Freundschaftsanfragen.", + "wantsToBeFriend": "möchte dein Freund sein.", + "accept": "Akzeptieren", + "offlineTitle": "Offline-Nachrichten", + "offlineEmptySubtitle": "Dein Posteingang ist leer", + "offlineSubtitle": "{count, plural, one {# Nachricht erhalten} other {# Nachrichten erhalten}}", + "offlineEmptyState": "Du hast keine Offline-Nachrichten.", + "unknownUser": "Benutzer #{id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Kein Motto", + "statRank": "Rang", + "statCredits": "Credits", + "statRegistered": "Registriert", + "badgesTitle": "Abzeichen", + "badgesEmpty": "Noch keine Abzeichen.", + "photosTitle": "Fotos", + "photosEmpty": "Noch keine Fotos.", + "guestbookTitle": "Gästebuch", + "guestbookSubtitle": "Nachrichten auf {username}s Pinnwand", + "leaveMessage": "Nachricht hinterlassen", + "guestbookPlaceholder": "Schreibe etwas in {username}s Gästebuch…", + "post": "Posten", + "loginToPost": "Melde dich an, um eine Gästebuch-Nachricht zu hinterlassen.", + "guestbookEmpty": "Noch keine Gästebucheinträge.", + "unknownUser": "Benutzer #{id}", + "statDuckets": "Duckets", + "statDiamonds": "Diamanten", + "walletTitle": "Geldbörse", + "friendsTitle": "Freunde", + "friendsSubtitle": "Leute im Hotel, mit denen sie abhängen", + "friendsEmpty": "Keine Freunde zu sehen.", + "roomsTitle": "Räume", + "roomsSubtitle": "Räume, die sie besitzen", + "roomsEmpty": "Keine Räume zu sehen.", + "roomUntitled": "Unbenannter Raum", + "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": "Ranglisten", + "subtitle": "Die Top 12 Spieler nach Credits geordnet", + "emptyState": "Noch keine Spieler zu ordnen." + }, + "home": { + "welcome": "Willkommen bei {hotelName}", + "welcomeSubtitle": "Dein Retro-Hotel, jetzt mit Next.js", + "welcomeBody": "Abhängen, Möbel sammeln und Freunde treffen.", + "enterHotel": "{hotelName} betreten", + "onlineFriends": "Online-Freunde", + "noFriendsOnline": "Keine Freunde online", + "register": "JETZT REGISTRIEREN", + "joinNow": "Werde noch heute Mitglied bei {hotelName}!", + "recentUsers": "Aktuelle Benutzer", + "recentPhotos": "Aktuelle Fotos", + "latestNews": "Neueste Nachrichten", + "newsTitle": "Neueste Nachrichten", + "newsSubtitle": "Frisch aus dem Hotel", + "allNews": "Alle Nachrichten →", + "allUsers": "Community →", + "noArticles": "Noch keine Artikel.", + "noPhotos": "Noch keine Fotos.", + "noUsers": "Keine Benutzer online", + "latestArticle": "Neuester Artikel", + "latestUsers": "Neueste Bürger ({count} insgesamt)", + "statsOnline": "Online", + "statsCitizens": "Bürger", + "statsRooms": "Räume", + "statsArticles": "Artikel", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Erstelle deinen einzigartigen Look", + "featuresFurniture": "Möbel", + "featuresFurnitureDesc": "Dekoriere Räume mit Gegenständen", + "featuresCommunity": "Community", + "featuresCommunityDesc": "Freunde finden und chatten", + "featuresGames": "Spiele", + "featuresGamesDesc": "Wettkämpfe und Spaß", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Nachrichten", + "subtitle": "Die neuesten Ankündigungen, Events und Updates aus dem Hotel", + "noArticles": "Noch keine Artikel.", + "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": "← Nachrichten", + "reactionsTitle": "Reaktionen", + "reactionsSubtitle": "Sag uns, was du denkst", + "reaction": { + "like": "Gefällt mir", + "love": "Liebe es", + "wow": "Wow" + }, + "removeReaction": "Klicke, um deine Reaktion zu entfernen", + "reactWith": "Reagiere mit {reaction}", + "noReactions": "Noch keine Reaktionen.", + "logIn": "Anmelden", + "toReact": "um zu reagieren.", + "commentsTitle": "Kommentare", + "commentsSubtitle": "Mach mit bei der Unterhaltung", + "commentsCount": "{count} bisher", + "noComments": "Noch keine Kommentare. Sei der Erste, der kommentiert.", + "userNumber": "Benutzer #{id}", + "addComment": "Kommentar hinzufügen", + "commentPlaceholder": "Schreibe deinen Kommentar…", + "postComment": "Kommentar posten", + "toComment": "um einen Kommentar zu hinterlassen.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Fotos", + "subtitle": "Die neuesten Schnappschüsse aus dem Hotel", + "noPhotos": "Noch keine Fotos.", + "photoAlt": "Foto von Benutzer #{id}", + "byUser": "von Benutzer #{id}" + }, + "badges": { + "title": "Abzeichen", + "subtitle": "Die Abzeichen, die du verdienen und im Hotel zeigen kannst", + "noBadges": "Noch keine Abzeichen verfügbar." + }, + "community": { + "title": "Community", + "subtitle": "Alles, was rund um das Hotel passiert, an einem Ort", + "open": "Öffnen →", + "links": { + "rankings": { + "title": "Ranglisten", + "text": "Sieh dir die reichsten Spieler im Hotel an, geordnet nach Credits." + }, + "staff": { + "title": "Team", + "text": "Lerne das Team kennen, das das Hotel täglich am Laufen hält." + }, + "news": { + "title": "Nachrichten", + "text": "Die neuesten Ankündigungen, Events und Updates." + }, + "photos": { + "title": "Fotos", + "text": "Schnappschüsse, die von der Community aus dem Hotel geteilt wurden." + }, + "guilds": { + "title": "Gilden", + "text": "Durchstöbere die Gruppen, die Spieler erstellt und denen sie beigetreten sind." + }, + "leaderboards": { + "title": "Bestenlisten", + "text": "Wer ist diese Saison in den Hotel-Statistiken an der Spitze." + } + } + }, + "guilds": { + "title": "Gilden", + "subtitle": "Durchstöbere die Gruppen, die Spieler erstellt und denen sie beigetreten sind", + "empty": "Noch keine Gilden.", + "unnamedGuild": "Unbenannte Gilde", + "noDescription": "Keine Beschreibung" + }, + "guild": { + "allGuilds": "← Alle Gilden", + "unnamedGuild": "Unbenannte Gilde", + "noDescription": "Keine Beschreibung", + "memberSingular": "Mitglied", + "memberPlural": "Mitglieder", + "founded": "Gegründet", + "forumLink": "Forum →", + "discussion": "Diskussion", + "membersTitle": "Mitglieder", + "memberLowerSingular": "Mitglied", + "memberLowerPlural": "Mitglieder", + "noMembers": "Keine Mitglieder.", + "owner": "Besitzer", + "noMotto": "Kein Motto" + }, + "guildForum": { + "backToGuild": "← Zurück zur Gilde", + "unnamedGuild": "Unbenannte Gilde", + "forumTitle": "{guild} — Forum", + "threadSingular": "Thema", + "threadPlural": "Themen", + "newThread": "+ Neues Thema", + "empty": "Noch keine Themen in diesem Forum.", + "colSubject": "Betreff", + "colAuthor": "Autor", + "colPosts": "Beiträge", + "colDate": "Datum", + "noSubject": "(kein Betreff)", + "pinned": "Angepinnt", + "locked": "Gesperrt", + "userNumber": "Benutzer #{id}", + "unknown": "Unbekannt", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Zurück zum Forum", + "unnamedGuild": "Unbenannte Gilde", + "title": "Neues Thema", + "subtitle": "im {guild} Forum", + "subjectLabel": "Betreff", + "subjectPlaceholder": "Thema", + "messageLabel": "Nachricht", + "messagePlaceholder": "Schreibe deinen Eröffnungsbeitrag…", + "postThread": "Thema erstellen", + "cancel": "Abbrechen", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Shop", + "subtitle": "Lade dein Konto auf und sichere dir exklusive Pakete, Währungen und Abzeichen.", + "browsingCategory": "Durchstöbere {category} Pakete.", + "all": "Alle", + "allPackages": "Alle Pakete", + "packagesAvailable": "{count, plural, one {# Paket verfügbar} other {# Pakete verfügbar}}", + "empty": "Derzeit keine Pakete verfügbar.", + "buy": "Kaufen", + "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": "Aufladen mit PayPal", + "subtitle": "Sicher mit PayPal bezahlen und deine Credits werden sofort gutgeschrieben, sobald die Zahlung abgeschlossen ist.", + "cancelled": "Bezahlung abgebrochen — es wurde kein Betrag abgebucht.", + "chooseAmount": "Betrag wählen", + "notConfiguredPre": "PayPal ist noch nicht konfiguriert. Ein Administrator muss", + "notConfiguredAnd": "und", + "notConfiguredOptional": "(und optional", + "notConfiguredPost": "für Sandbox vs. Live).", + "balanceTitle": "Dein Guthaben", + "signedInAs": "Angemeldet als {username}", + "credits": "Credits", + "creditsPerUnit": "Credits pro 1,00 {currency}", + "rateLine": "Du erhältst {amount} Credits pro 1,00 {currency}. Credits erscheinen im Spiel, sobald du dich das nächste Mal einloggst." + }, + "marketplace": { + "title": "Marktplatz", + "subtitle": "Durchstöbere Möbel und Seltenheiten, die von Spielern angeboten werden. Angebote werden im Spiel erstellt und live aktualisiert — geh ins Hotel, um ein Angebot zu machen.", + "activeOffers": "Aktive Angebote", + "sellers": "Verkäufer", + "totalValue": "Gesamtwert", + "activeListings": "Aktive Einträge", + "mostRecentFirst": "Neueste zuerst", + "empty": "Derzeit gibt es keine aktiven Marktplatz-Angebote. Schau später nochmal vorbei.", + "colOffer": "Angebot", + "colItem": "Gegenstand", + "colSeller": "Verkäufer", + "colPrice": "Preis", + "colListed": "Eingestellt", + "itemLabel": "Gegenstand #{id}", + "userLabel": "Benutzer #{id}", + "justNow": "gerade eben", + "minutesAgo": "vor {count}m", + "hoursAgo": "vor {count}h", + "daysAgo": "vor {count}d" + }, + "rares": { + "title": "Seltene Werte", + "subtitle": "Erhalte eine Übersicht aller Seltenheiten im Hotel, gruppiert nach Kategorie.", + "empty": "Wir haben derzeit keine Seltenheiten gelistet.", + "rareCount": "{count, plural, one {# Seltenheit} other {# Seltenheiten}}", + "viewRares": "Seltenheiten ansehen →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# Seltenheit in dieser Kategorie} other {# Seltenheiten in dieser Kategorie}}", + "allRares": "← Alle Seltenheiten", + "empty": "Noch keine Seltenheiten in dieser Kategorie.", + "colRare": "Seltenheit", + "colCredits": "Credits", + "colCurrency": "Währung", + "creditsValue": "{value} Credits", + "duckets": "Duckets", + "diamonds": "Diamanten", + "credits": "Credits" + }, + "redeem": { + "title": "Gutschein einlösen", + "subtitle": "Hast du einen Gutscheincode? Gib ihn unten ein, um die Belohnung deinem Konto hinzuzufügen.", + "enterCode": "Code eingeben", + "oncePerAccount": "Jeder Gutschein kann nur einmal pro Konto eingelöst werden.", + "balanceTitle": "Dein Guthaben", + "signedInAs": "Angemeldet als {username}", + "credits": "Credits", + "instantCredit": "Eingelöste Belohnungen werden sofort gutgeschrieben und erscheinen im Spiel, sobald du dich das nächste Mal einloggst." + }, + "help": { + "title": "Hilfecenter", + "subtitle": "Finde Anleitungen, Support-Themen und die Hotelregeln — alles, was du brauchst, um Hilfe zu bekommen.", + "myTickets": "Meine Tickets →", + "topicsTitle": "Support-Themen", + "topicsSubtitle": "Durchstöbere Anleitungen und Antworten auf häufige Fragen", + "topicsEmpty": "Noch keine Hilfethemen.", + "rulesTitle": "Hotelregeln", + "rulesSubtitle": "Bitte lies diese, bevor du dich im Hotel aufhältst", + "rulesEmpty": "Noch keine Regeln veröffentlicht.", + "categoryEmpty": "Keine Regeln in dieser Kategorie." + }, + "helpCategory": { + "back": "← Hilfecenter", + "topicSubtitle": "Hilfecenter-Thema", + "moreTitle": "Weitere Hilfethemen", + "moreSubtitle": "Zu einem anderen Support-Thema springen" + }, + "helpTickets": { + "title": "Hilfe-Tickets", + "subtitle": "Reiche ein Ticket beim Team ein und verfolge deine offenen Anfragen.", + "statTotal": "Tickets gesamt", + "statOpen": "Offen", + "statClosed": "Geschlossen", + "newTitle": "Neues Ticket", + "newSubtitle": "Beschreibe dein Problem und das Team wird sich darum kümmern", + "subjectPlaceholder": "Betreff", + "contentPlaceholder": "Beschreibe dein Problem…", + "submit": "Ticket einreichen", + "listTitle": "Deine Tickets", + "listSubtitle": "Jede Anfrage, die du an das Team gesendet hast", + "listEmpty": "Du hast noch keine Tickets.", + "colId": "ID", + "colSubject": "Betreff", + "colStatus": "Status", + "colCreated": "Erstellt", + "statusOpen": "Offen", + "statusClosed": "Geschlossen", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "Bewirb dich als {hotel} Team", + "subtitle": "Wir öffnen ab und zu Bewerbungen. Wenn du eine Position siehst, die perfekt zu dir passt, zögere nicht, dich zu bewerben.", + "noPositionsTitle": "Keine offenen Positionen", + "noPositionsBody": "Derzeit gibt es keine offenen Positionen. Bitte komm später nochmal vorbei, um zu prüfen, ob es neue Stellen gibt. Vielen Dank für dein Interesse.", + "noDeadline": "Keine Frist gesetzt", + "deadline": "Bewerbungsfrist: {date}", + "alreadyApplied": "Du hast dich bereits für {rank} beworben", + "aboutYou": "Über dich", + "aboutPlaceholder": "Erzähl uns, warum du ein großartiger {rank} wärst…", + "applyFor": "Bewirb dich für {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": "Bewirb dich für das {hotel} Team", + "subtitle": "Wir öffnen regelmäßig Teambewerbungen. Wenn du ein Team siehst, das zu dir passt, zögere nicht, dich zu bewerben!", + "noPositionsTitle": "Keine offenen Team-Positionen", + "noPositionsBody": "Derzeit gibt es keine offenen Team-Positionen. Bitte komm später nochmal vorbei, um nach neuen Stellen zu sehen. Vielen Dank!", + "pending": "Deine Bewerbung ist in Bearbeitung", + "aboutYou": "Über dich", + "aboutPlaceholder": "Erzähl uns, warum du eine großartige Ergänzung für {rank} wärst…", + "applyFor": "Bewirb dich für {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": "Schalte das Hotelradio ein — Live-DJ-Sets, Wünsche und Shoutouts.", + "nowPlaying": "Jetzt läuft", + "nothingPlaying": "Momentan läuft nichts.", + "onAir": "On Air: {dj}", + "noDj": "Kein DJ on Air.", + "audioUnsupported": "Dein Browser unterstützt das Audio-Element nicht.", + "streamOffline": "Der Stream ist derzeit offline.", + "exploreTitle": "Entdecke das Radio", + "exploreSubtitle": "Programm, Shouts, Wünsche und mehr", + "linkSchedule": "Programm", + "linkScheduleText": "Unser wöchentliches Programm mit DJs und Shows.", + "linkShouts": "Shouts", + "linkShoutsText": "Shoutouts und Wünsche aus der Community.", + "linkRequests": "Wünsche", + "linkRequestsText": "Bitte den DJ, deinen Lieblingssong zu spielen.", + "linkApply": "Als DJ bewerben", + "linkApplyText": "Werde Teammitglied und geh auf Sendung.", + "linkLeaderboard": "Bestenliste", + "linkLeaderboardText": "Top-Hörer nach verdienten Punkten.", + "todayTitle": "Heutiges Programm", + "todayTitleWithDay": "Heutiges Programm · {day}", + "todaySubtitle": "Was heute auf Sendung ist", + "fullWeek": "Ganze Woche →", + "noShowsToday": "Heute sind keine Sendungen geplant.", + "colTime": "Zeit", + "colShow": "Sendung", + "colDj": "DJ", + "untitledShow": "Unbenannte Sendung", + "userNumber": "Benutzer #{id}" + }, + "radioSchedule": { + "title": "Radiosendungplan", + "subtitle": "Unser wöchentliches Programm mit DJs und Shows", + "empty": "Noch keine Sendungen geplant.", + "colDay": "Tag", + "colTime": "Zeit", + "colDj": "DJ", + "colShow": "Sendung", + "noShows": "Keine Sendungen" + }, + "radioShouts": { + "title": "Radio Shouts", + "subtitle": "Shoutouts und Wünsche aus der Community", + "postTitle": "Einen Shout posten", + "postSubtitle": "Sende eine Nachricht an den DJ, der on Air ist", + "messageLabel": "Deine Nachricht", + "messagePlaceholder": "Sende einen Shout an den DJ…", + "shoutButton": "Shout", + "loginToPost": "Melde dich an, um einen Shout zu posten.", + "latestTitle": "Neueste Shouts", + "latestSubtitle": "Die aktuellsten Nachrichten von Hörern", + "empty": "Noch keine Shouts. Sei der Erste!", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Radio-Wettbewerbe", + "subtitle": "Schalte ein und nimm an unseren neuesten On-Air-Wettbewerben teil", + "empty": "Noch keine Wettbewerbe.", + "contestLabel": "Wettbewerb #{id}", + "dateUnknown": "Datum unbekannt" + }, + "radioGiveaways": { + "title": "Radio-Gewinnspiele", + "subtitle": "Hör zu und gewinne bei unseren Radio-Gewinnspielen", + "empty": "Noch keine Gewinnspiele.", + "giveawayLabel": "Gewinnspiel #{id}", + "dateUnknown": "Datum unbekannt" + }, + "radioLeaderboard": { + "title": "Radio-Hörer-Bestenliste", + "subtitle": "Top 50 Hörer nach Punkten, die sie durchs Radiohören verdient haben", + "empty": "Noch keine Hörerpunkte zu sehen.", + "colRank": "Rang", + "colAvatar": "Avatar", + "colListener": "Hörer", + "colPoints": "Punkte" + }, + "radioApply": { + "title": "Bewirb dich als Radio-DJ", + "subtitle": "Erzähl uns von dir und warum du eine großartige Bereicherung für das Radioteam wärst", + "latestTitle": "Deine letzte Bewerbung", + "statusLabel": "Status:", + "submittedOn": "· eingereicht am {date}", + "submitAgain": "Du kannst unten erneut einreichen, wenn sich deine Angaben geändert haben.", + "formTitle": "Bewerbungsformular", + "formSubtitle": "Alle mit * markierten Felder sind Pflichtfelder", + "realNameLabel": "Vollständiger Name", + "realNamePlaceholder": "Dein vollständiger Name", + "ageLabel": "Alter", + "availabilityLabel": "Verfügbarkeit", + "availabilityPlaceholder": "An welchen Tagen und zu welchen Zeiten kannst du senden?", + "musicStyleLabel": "Musikrichtung", + "musicStylePlaceholder": "z.B. House, Pop, Hip-Hop", + "experienceLabel": "Erfahrung", + "optional": "(optional)", + "experiencePlaceholder": "Frühere DJ- oder Moderationserfahrung?", + "motivationLabel": "Motivation", + "motivationPlaceholder": "Warum möchtest du dem Radioteam beitreten?", + "submitButton": "Bewerbung einreichen", + "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": "Kontoeinstellungen", + "accountSettingsSubtitle": "Verwalte dein Profil, deine Sicherheit und verbundene Konten", + "publicProfile": "Dein öffentliches Profil", + "noMotto": "Kein Motto", + "noEmail": "Keine E-Mail hinterlegt", + "changeMotto": "Motto ändern", + "changeMottoSubtitle": "Aktualisiert sich sofort im Spiel, wenn du online bist", + "mottoPlaceholder": "Dein Motto", + "saveMotto": "Motto speichern", + "securityTitle": "Sicherheit", + "securitySubtitle": "Zwei-Faktor-Authentifizierung", + "securityDescription": "Füge deinem Konto eine zweite Sicherheitsebene hinzu.", + "twoFactorLink": "Zwei-Faktor-Authentifizierung" + }, + "settings2fa": { + "backToSettings": "← Einstellungen", + "title": "Zwei-Faktor-Authentifizierung", + "subtitle": "Füge eine zweite Sicherheitsebene mit einer Authenticator-App hinzu", + "nowEnabled": "2FA ist jetzt aktiviert. 🔒", + "disabledNotice": "2FA wurde deaktiviert.", + "badCode": "Dieser Code war nicht gültig — versuche es erneut.", + "noAppKeyPrefix": "2FA ist nicht verfügbar, bis", + "noAppKeyMiddle": "konfiguriert ist (derselbe Laravel", + "noAppKeySuffix": "wie deine AtomCMS-Installation, damit vorhandene Geheimnisse lesbar bleiben).", + "isEnabled": "2FA ist aktiviert", + "onYourAccount": "auf deinem Konto.", + "disable": "2FA deaktivieren", + "scanOrEnter": "Scanne oder gib diesen Schlüssel ein", + "scanInstructions": "Füge dies zu Google Authenticator / Authy hinzu und gib dann den 6-stelligen Code zur Bestätigung ein.", + "manualKey": "Manueller Schlüssel:", + "codePlaceholder": "6-stelliger Code", + "confirm": "Bestätigen", + "enableIntro": "Füge eine zweite Sicherheitsebene mit einer Authenticator-App hinzu.", + "enable": "2FA aktivieren", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Verbundene Konten", + "subtitle": "Verknüpfe ein Social-Media-Konto, damit du dich mit einem Klick anmelden kannst", + "connected": "Verbunden", + "unavailable": "Nicht verfügbar", + "login": { + "title": "Anmelden", + "subtitle": "Willkommen zurück — melde dich an, um das Hotel zu betreten.", + "subtitle2fa": "Gib den 6-stelligen Code aus deiner Authenticator-App ein.", + "usernamePlaceholder": "Benutzername", + "passwordPlaceholder": "Passwort", + "codePlaceholder": "2FA-Code", + "pleaseWait": "Bitte warten…", + "verify": "Verifizieren", + "signIn": "Anmelden", + "or": "oder", + "noAccount": "Noch kein Konto?", + "createOne": "Konto erstellen", + "forgotPassword": "Passwort vergessen?", + "errorInvalidCredentials": "Ungültiger Benutzername oder Passwort", + "errorInvalid2fa": "Ungültiger 2FA-Code", + "welcomeBack": "Willkommen zurück", + "welcomeBackSub": "Melde dich an, um zu {hotelName} zu gelangen", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Konto erstellen", + "subtitle": "Werde Mitglied im Hotel — es dauert nur einen Moment.", + "username": "Benutzername", + "email": "E-Mail", + "password": "Passwort", + "confirmPassword": "Passwort wiederholen", + "usernamePlaceholder": "Benutzername", + "emailPlaceholder": "E-Mail", + "passwordPlaceholder": "Passwort (min. 6 Zeichen)", + "confirmPasswordPlaceholder": "Passwort wiederholen", + "selectOutfit": "Wähle dein Outfit", + "termsAccept": "Ich bin 18+ und akzeptiere die {hotel} AGB & Regeln.", + "createAccount": "Konto erstellen", + "creatingAccount": "Konto wird erstellt...", + "redirecting": "Weiterleitung zu deinem Account...", + "alreadyHaveAccount": "Bereits ein Konto? Anmelden!", + "register": "Registrieren", + "termsError": "Du musst die AGB & Regeln akzeptieren, um dich zu registrieren.", + "usernameError": "Benutzername ist erforderlich.", + "emailError": "Eine gültige E-Mail ist erforderlich.", + "passwordError": "Das Passwort muss mindestens 6 Zeichen lang sein.", + "confirmPasswordError": "Passwörter stimmen nicht überein.", + "termsRequired": "Du musst die AGB & Regeln akzeptieren.", + "usernameRequired": "Benutzername ist erforderlich.", + "emailRequired": "E-Mail ist erforderlich.", + "passwordRequired": "Passwort ist erforderlich.", + "passwordsDontMatch": "Passwörter stimmen nicht überein.", + "alreadyHaveAccountPre": "Hast du bereits ein Konto?", + "alreadyHaveAccountLink": "Anmelden", + "whoIsOnline": "Wer ist online", + "usersOnline": "{count} online", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Passwort zurücksetzen", + "subtitle": "Wir senden dir einen sicheren Link, um ein neues Passwort zu erstellen.", + "sentNotice": "Wenn diese E-Mail registriert ist, wurde ein Reset-Link gesendet. Überprüfe deinen Posteingang.", + "emailPlaceholder": "Deine E-Mail", + "sendResetLink": "Reset-Link senden", + "backToLogin": "Zurück zur Anmeldung", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Neues Passwort festlegen", + "subtitle": "Wähle ein sicheres Passwort, das du sonst nirgendwo verwendest.", + "passwordPlaceholder": "Neues Passwort (min. 6 Zeichen)", + "resetPassword": "Passwort zurücksetzen", + "backToLogin": "Zurück zur Anmeldung" + }, + "verify": { + "verifiedTitle": "Du bist startklar", + "verifiedSubtitle": "E-Mail verifiziert", + "verifiedBody": "Deine E-Mail-Adresse wurde verifiziert. Du kannst dich jetzt anmelden und spielen.", + "goToLogin": "Zur Anmeldung", + "alreadyTitle": "Bereits verifiziert", + "alreadySubtitle": "Nichts zu tun", + "alreadyBody": "Diese E-Mail-Adresse wurde bereits bestätigt.", + "unavailableTitle": "Später nochmal versuchen", + "unavailableSubtitle": "Server nicht erreichbar", + "unavailableBody": "Wir konnten den Server nicht erreichen, um deine E-Mail zu verifizieren. Bitte versuche den Link später erneut.", + "invalidTitle": "E-Mail-Verifizierung", + "invalidSubtitle": "Ungültiger oder abgelaufener Link", + "invalidBody": "Dieser Verifizierungslink ist nicht gültig. Stelle sicher, dass du den vollständigen Link aus deiner E-Mail geöffnet hast, oder fordere einen neuen an.", + "backToLogin": "Zurück zur Anmeldung" + }, + "banned": { + "title": "Du bist gebannt", + "subtitle": "Konto gesperrt", + "body": "Dein Konto wurde vom Hotel gesperrt.", + "reasonLabel": "Grund:", + "permanent": "Dieser Bann ist permanent.", + "expires": "Läuft ab am {date}.", + "contactStaff": "Wenn du glaubst, dass dies ein Fehler ist, wende dich an das Team." + }, + "maintenance": { + "title": "{hotel} wird gewartet", + "subtitle": "Wir sind bald zurück", + "staffCanLogIn": "Teammitglieder können sich weiterhin anmelden." + }, + "admin": { + "nav": { + "overview": "Übersicht", + "dashboard": "Dashboard", + "content": "Inhalte", + "articles": "Artikel", + "tags": "Tags", + "navigator": "Navigator", + "helpCenter": "Hilfecenter", + "advertisements": "Werbung", + "writeableBoxes": "Editierbare Boxen", + "photos": "Fotos", + "tickets": "Tickets", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Benutzer & Zugang", + "users": "Benutzer", + "bans": "Banns", + "ipManagement": "IP-Verwaltung", + "vpn": "VPN", + "applications": "Bewerbungen", + "teams": "Teams", + "permissions": "Berechtigungen", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "Wirtschaft", + "catalog": "Katalog", + "shop": "Shop", + "transactions": "Transaktionen", + "vouchers": "Gutscheine", + "subscriptions": "Abonnements", + "rareValues": "Seltene Werte", + "badges": "Abzeichen", + "achievements": "Errungenschaften", + "calendar": "Kalender", + "radio": "Radio", + "radioHistory": "Radio-Verlauf", + "radioBanners": "Banner", + "radioEmbed": "Einbettung", + "radioApiKeys": "API-Schlüssel", + "radioModeration": "Moderation", + "radioSettings": "Einstellungen", + "radioMonitoring": "Überwachung", + "radioPoints": "Punkte", + "radioRanks": "Ränge", + "radioAutodj": "Auto DJ", + "system": "System", + "commandocentrum": "Commandocentrum", + "emulator": "Emulator", + "alerts": "Alarme", + "logs": "Logs", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Wortfilter", + "maintenance": "Wartung", + "rooms": "Räume", + "emailTemplates": "E-Mail-Vorlagen", + "theme": "Design", + "media": "Medien", + "favicon": "Favicon", + "sounds": "Sounds", + "translations": "Übersetzungen", + "import": "Importieren", + "settings": "Einstellungen", + "backToSite": "Zurück zur Website", + "housekeeping": "Hausverwaltung", + "hotelManagementPanel": "Hotel-Verwaltungsbereich", + "rankLabel": "Rang {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Menü durchsuchen…", + "clearMenuSearch": "Menüsuche löschen", + "noMenuResults": "Keine passenden Seiten.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "studio": "Studio", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "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" + }, + "dashboard": { + "title": "Dashboard", + "subtitle": "Hotel-Übersicht & Live-Status", + "playersOnline": "Spieler online", + "articles": "Artikel", + "activeBans": "Aktive Banns", + "database": "Datenbank", + "databaseConnected": "Verbunden", + "databaseDown": "Ausgefallen", + "usersByRank": "Benutzer nach Rang", + "noAccountsToBreakDown": "Noch keine Konten aufzuschlüsseln", + "rankLabel": "Rang {rank}", + "rankWithCount": "Rang {rank}: {count} Konten", + "recentStaffActivity": "Letzte Team-Aktivität", + "viewAll": "Alle anzeigen", + "noStaffActivityLogged": "Noch keine Team-Aktivität protokolliert", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "Artikel", + "subtitle": "Nachrichtenartikel — die 50 neuesten", + "newArticle": "+ Neuer Artikel", + "edit": "Bearbeiten", + "delete": "Löschen", + "noArticles": "Noch keine Artikel", + "confirmDelete": "Bist du sicher, dass du „{title}“ löschen möchtest?", + "colTitle": "Titel", + "colSlug": "Slug", + "colAuthor": "Autor", + "colCreated": "Erstellt", + "colActions": "Aktionen", + "form": { + "title": "Titel", + "titlePlaceholder": "Artikel-Titel", + "slug": "Slug", + "slugPlaceholder": "artikel-url-slug", + "category": "Kategorie", + "categoryPlaceholder": "Wähle eine Kategorie", + "body": "Inhalt", + "bodyPlaceholder": "Schreibe den Artikel-Inhalt…", + "image": "Bild", + "imagePlaceholder": "https://example.com/image.png", + "thumbnail": "Vorschaubild", + "thumbnailPlaceholder": "https://example.com/thumb.png", + "published": "Veröffentlicht", + "featured": "Hervorgehoben", + "save": "Artikel speichern", + "saving": "Wird gespeichert…", + "deleteArticle": "Artikel löschen", + "deleteConfirm": "Dieser Vorgang kann nicht rückgängig gemacht werden. Der Artikel wird dauerhaft entfernt.", + "cancel": "Abbrechen", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "Tags", + "subtitle": "Artikel-Tags / Kategorien", + "addTag": "Tag hinzufügen", + "name": "Name", + "namePlaceholder": "Tag-Name", + "backgroundColour": "Hintergrundfarbe", + "createTag": "Tag erstellen", + "editTag": "Tag bearbeiten", + "updateTag": "Tag aktualisieren", + "deleteTag": "Tag löschen", + "confirmDelete": "„{name}“ löschen?", + "noTags": "Noch keine Tags", + "colId": "ID", + "colTag": "Tag", + "colColour": "Farbe", + "colUsedBy": "Verwendet von", + "colCreated": "Erstellt", + "colActions": "Aktionen", + "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": "Flache Kategorien", + "publicRooms": "Öffentliche Räume", + "addCategory": "Kategorie hinzufügen", + "editCategory": "Kategorie bearbeiten", + "deleteCategory": "Kategorie löschen", + "categoryName": "Kategoriename", + "categoryNamePlaceholder": "z.B. Chill & Chat", + "categoryOrder": "Reihenfolge", + "roomName": "Raumname", + "roomNamePlaceholder": "z.B. Welcome Lounge", + "roomId": "Raum-ID", + "roomIdPlaceholder": "Numerische Raum-ID", + "save": "Speichern", + "cancel": "Abbrechen", + "noCategories": "Noch keine Kategorien", + "noPublicRooms": "Noch keine öffentlichen Räume", + "colId": "ID", + "colName": "Name", + "colOrder": "Reihenfolge", + "colRooms": "Räume", + "colActions": "Aktionen", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Hilfecenter", + "subtitle": "Support-Einträge & FAQ-Verwaltung", + "entries": "Einträge", + "newEntry": "+ Neuer Eintrag", + "edit": "Bearbeiten", + "delete": "Löschen", + "noEntries": "Noch keine Einträge", + "confirmDelete": "„{title}“ löschen?", + "colId": "ID", + "colTitle": "Titel", + "colCategory": "Kategorie", + "colCreated": "Erstellt", + "colActions": "Aktionen", + "form": { + "title": "Titel", + "titlePlaceholder": "Eintrag-Titel", + "category": "Kategorie", + "categoryPlaceholder": "Wähle eine Kategorie", + "body": "Inhalt", + "bodyPlaceholder": "Schreibe die Antwort…", + "save": "Eintrag speichern", + "saving": "Wird gespeichert…", + "deleteEntry": "Eintrag löschen", + "cancel": "Abbrechen" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Werbung", + "subtitle": "Hotel-Werbung und Werbebanner verwalten", + "newAd": "+ Neue Anzeige", + "edit": "Bearbeiten", + "delete": "Löschen", + "noAds": "Noch keine Werbung", + "confirmDelete": "Diese Anzeige löschen?", + "colId": "ID", + "colName": "Name", + "colImage": "Bild", + "colUrl": "URL", + "colViews": "Aufrufe", + "colStatus": "Status", + "colCreated": "Erstellt", + "colActions": "Aktionen", + "form": { + "name": "Name", + "namePlaceholder": "Anzeigenname", + "image": "Bild-URL", + "imagePlaceholder": "https://example.com/banner.png", + "url": "Ziel-URL", + "urlPlaceholder": "https://example.com", + "enabled": "Aktiviert", + "save": "Anzeige speichern", + "saving": "Wird gespeichert…", + "deleteAd": "Anzeige löschen", + "cancel": "Abbrechen" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Editierbare Boxen", + "subtitle": "Inhaltsfelder, die im Hotel und CMS angezeigt werden", + "newBox": "Neue Box", + "edit": "Bearbeiten", + "delete": "Löschen", + "noBoxes": "Noch keine editierbaren Boxen", + "confirmDelete": "Diese Box löschen?", + "colId": "ID", + "colName": "Name", + "colLocation": "Position", + "colUpdated": "Aktualisiert", + "colActions": "Aktionen", + "form": { + "name": "Name", + "namePlaceholder": "Box-Name", + "location": "Position", + "locationPlaceholder": "z.B. startseite, sidebar", + "content": "Inhalt", + "contentPlaceholder": "Schreibe den Box-Inhalt…", + "enabled": "Aktiviert", + "save": "Box speichern", + "saving": "Wird gespeichert…", + "deleteBox": "Box löschen", + "cancel": "Abbrechen", + "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": "Foto-Moderation", + "subtitle": "Aktuelle In-Game-Fotos", + "delete": "Löschen", + "approve": "Genehmigen", + "noPhotos": "Keine Fotos zu moderieren", + "confirmDelete": "Dieses Foto dauerhaft löschen?", + "colId": "ID", + "colPreview": "Vorschau", + "colUser": "Benutzer", + "colRoom": "Raum", + "colTimestamp": "Zeitstempel", + "colActions": "Aktionen", + "photoAlt": "Benutzerfoto #{id}", + "byUser": "von {username}", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Benutzer", + "subtitle": "Hotel-Konten durchsuchen, suchen und verwalten", + "search": "Suchen", + "searchPlaceholder": "Suche nach Benutzername, E-Mail oder ID…", + "searchResults": "{count, plural, one {# Ergebnis} other {# Ergebnisse}} für „{query}“", + "noResults": "Keine Benutzer gefunden", + "colId": "ID", + "colUsername": "Benutzername", + "colEmail": "E-Mail", + "colRank": "Rang", + "colOnline": "Online", + "colRegistered": "Registriert", + "colLastOnline": "Zuletzt online", + "colActions": "Aktionen", + "yes": "Ja", + "no": "Nein", + "edit": "Bearbeiten", + "setRank": "Rang setzen", + "disconnect": "Trennen", + "alert": "Alarm", + "ban": "Bannen", + "detail": { + "title": "Benutzer: {username}", + "subtitle": "Kontodetails und -verwaltung", + "overview": "Übersicht", + "actions": "Aktionen", + "username": "Benutzername", + "email": "E-Mail", + "motto": "Motto", + "rank": "Rang", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamanten", + "online": "Online", + "registered": "Registriert", + "lastOnline": "Zuletzt online", + "ipAddress": "IP-Adresse", + "machineId": "Maschinen-ID", + "sendAlert": "Alarm senden", + "sendMessage": "Nachricht senden", + "disconnectUser": "Benutzer trennen", + "banUser": "Benutzer bannen", + "resetPassword": "Passwort zurücksetzen", + "deleteUser": "Benutzer löschen", + "confirmDelete": "Bist du sicher, dass du {username} löschen möchtest? Dies kann nicht rückgängig gemacht werden.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Benutzer bearbeiten: {username}", + "subtitle": "Kontodetails ändern", + "username": "Benutzername", + "usernamePlaceholder": "Benutzername", + "email": "E-Mail", + "emailPlaceholder": "user@example.com", + "motto": "Motto", + "mottoPlaceholder": "Benutzer-Motto", + "rank": "Rang", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamanten", + "save": "Änderungen speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Banns", + "subtitle": "Konto-, IP- und Maschinen-Banns verwalten", + "newBan": "Neuer Bann", + "edit": "Bearbeiten", + "delete": "Löschen", + "noBans": "Noch keine Banns", + "confirmDelete": "Diesen Bann entfernen?", + "colId": "ID", + "colValue": "Wert", + "colType": "Typ", + "colReason": "Grund", + "colBannedBy": "Gebannt von", + "colExpires": "Läuft ab", + "colCreated": "Erstellt", + "colActions": "Aktionen", + "form": { + "value": "Wert", + "valuePlaceholder": "Benutzername, IP oder Maschinen-ID", + "type": "Typ", + "typeUser": "Benutzer", + "typeIp": "IP", + "typeMachine": "Maschine", + "reason": "Grund", + "reasonPlaceholder": "Bann-Grund", + "expiresAt": "Läuft ab am", + "permanent": "Permanent", + "save": "Bann speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen" + }, + "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-Verwaltung", + "subtitle": "IP-Whitelist und Blacklist verwalten", + "whitelist": "Whitelist", + "blacklist": "Blacklist", + "addIp": "IP hinzufügen", + "ipAddress": "IP-Adresse", + "ipAddressPlaceholder": "z.B. 127.0.0.1", + "reason": "Grund", + "reasonPlaceholder": "Grund für die Listung", + "add": "Hinzufügen", + "remove": "Entfernen", + "confirmRemove": "Diese IP aus der {list} entfernen?", + "noWhitelistedIps": "Keine IPs auf der Whitelist", + "noBlacklistedIps": "Keine IPs auf der Blacklist", + "colIp": "IP", + "colReason": "Grund", + "colAdded": "Hinzugefügt", + "colActions": "Aktionen", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "VPN / Proxy-Erkennung", + "subtitle": "VPN- und Proxy-Erkennungseinstellungen konfigurieren", + "enabled": "Aktiviert", + "apiKey": "API-Schlüssel", + "apiKeyPlaceholder": "Dein VPN-Erkennungs-API-Schlüssel", + "apiKeyHint": "Leer lassen zum Deaktivieren", + "blockOnDetect": "Bei Erkennung blockieren", + "blockOnDetectHint": "Benutzer hinter einem VPN oder Proxy automatisch blockieren", + "save": "Einstellungen speichern", + "saving": "Wird gespeichert…", + "settingsSaved": "VPN-Einstellungen erfolgreich gespeichert", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Team-Bewerbungen", + "subtitle": "Ausstehende und geprüfte Bewerbungen", + "pending": "Ausstehend", + "approved": "Genehmigt", + "rejected": "Abgelehnt", + "noApplications": "Noch keine Bewerbungen", + "colId": "ID", + "colApplicant": "Bewerber", + "colPosition": "Position", + "colStatus": "Status", + "colSubmitted": "Eingereicht", + "colActions": "Aktionen", + "review": "Prüfen", + "approve": "Genehmigen", + "reject": "Ablehnen", + "confirmApprove": "{username} für {position} genehmigen?", + "confirmReject": "{username}s Bewerbung für {position} ablehnen?", + "detail": { + "title": "Bewerbung von {username}", + "subtitle": "Für {position}", + "about": "Über den Bewerber", + "message": "Bewerbungsnachricht", + "status": "Status", + "submitted": "Eingereicht", + "noMessage": "Keine Nachricht angegeben" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Teams", + "subtitle": "Team-Rang-Namen und Beschreibungen festlegen", + "addRank": "Rang hinzufügen", + "editRank": "Rang bearbeiten", + "deleteRank": "Rang löschen", + "noTeams": "Noch keine Rang-Definitionen", + "confirmDelete": "Rang {id}-Definition löschen?", + "colId": "ID", + "colRank": "Rang", + "colName": "Name", + "colBadge": "Abzeichen", + "colColour": "Farbe", + "colActions": "Aktionen", + "form": { + "rankId": "Rang-ID", + "rankIdPlaceholder": "Numerische Rang-ID", + "name": "Name", + "namePlaceholder": "z.B. Administrator", + "badge": "Abzeichen-Code", + "badgePlaceholder": "z.B. ADM001", + "colour": "Farbe", + "colourPlaceholder": "z.B. #ff0000", + "save": "Team-Definition speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Berechtigungen", + "subtitle": "Rangbasierte Berechtigungen für das Admin-Panel verwalten", + "addPermission": "Berechtigung hinzufügen", + "editPermission": "Berechtigung bearbeiten", + "deletePermission": "Berechtigung löschen", + "noPermissions": "Noch keine Berechtigungen konfiguriert", + "confirmDelete": "Diese Berechtigung löschen?", + "colId": "ID", + "colRank": "Rang", + "colPermission": "Berechtigung", + "colCreated": "Erstellt", + "colActions": "Aktionen", + "form": { + "rankId": "Rang-ID", + "rankIdPlaceholder": "Erforderlicher Mindestrang", + "permission": "Berechtigungsschlüssel", + "permissionPlaceholder": "z.B. admin.articles.manage", + "save": "Berechtigung speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen" + } + }, + "catalog": { + "title": "Katalog", + "subtitle": "Katalogseiten und -artikel durchsuchen und verwalten", + "pages": "Seiten", + "items": "Artikel", + "addPage": "Seite hinzufügen", + "editPage": "Seite bearbeiten", + "deletePage": "Seite löschen", + "addItem": "Artikel hinzufügen", + "editItem": "Artikel bearbeiten", + "deleteItem": "Artikel löschen", + "noPages": "Noch keine Katalogseiten", + "noItems": "Keine Artikel auf dieser Seite", + "confirmDeletePage": "Katalogseite „{name}“ löschen?", + "confirmDeleteItem": "Diesen Artikel löschen?", + "colId": "ID", + "colName": "Name", + "colIcon": "Symbol", + "colOrder": "Reihenfolge", + "colItems": "Artikel", + "colEnabled": "Aktiviert", + "colActions": "Aktionen", + "colItemId": "Artikel-ID", + "colItemName": "Artikelname", + "colCostCredits": "Preis (Credits)", + "colCostPoints": "Preis (Punkte)", + "colLimited": "Limitiert", + "pageForm": { + "name": "Name", + "namePlaceholder": "Seitenname", + "icon": "Symbol-ID", + "iconPlaceholder": "Numerische Symbol-ID", + "order": "Reihenfolge", + "enabled": "Aktiviert", + "parent": "Überseite", + "parentNone": "Keine (Stamm)", + "save": "Seite speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen" + }, + "itemForm": { + "itemId": "Artikel-ID", + "itemName": "Artikelname", + "costCredits": "Preis in Credits", + "costDuckets": "Preis in Duckets", + "costDiamonds": "Preis in Diamanten", + "limitedStack": "Limitierte Stückzahl", + "limitedSold": "Limitierte verkauft", + "save": "Artikel speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Shop", + "subtitle": "Pakete und Bestellungen verwalten", + "packages": "Pakete", + "orders": "Bestellungen", + "newPackage": "+ Neues Paket", + "edit": "Bearbeiten", + "delete": "Löschen", + "viewOrder": "Ansehen", + "noPackages": "Noch keine Shop-Pakete", + "noOrders": "Noch keine Bestellungen", + "confirmDelete": "Dieses Paket löschen?", + "colId": "ID", + "colName": "Name", + "colPrice": "Preis", + "colCurrency": "Währung", + "colType": "Typ", + "colSold": "Verkauft", + "colEnabled": "Aktiviert", + "colActions": "Aktionen", + "colOrderId": "Bestell-ID", + "colCustomer": "Kunde", + "colPackage": "Paket", + "colAmount": "Betrag", + "colStatus": "Status", + "colDate": "Datum", + "statusPending": "Ausstehend", + "statusCompleted": "Abgeschlossen", + "statusRefunded": "Erstattet", + "form": { + "name": "Name", + "namePlaceholder": "Paketname", + "description": "Beschreibung", + "descriptionPlaceholder": "Paketbeschreibung", + "price": "Preis", + "currency": "Währung", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Typ", + "typeCredits": "Credits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamanten", + "typeBadge": "Abzeichen", + "typeFurni": "Möbel", + "typeRank": "Rang", + "amount": "Menge", + "badgeCode": "Abzeichen-Code", + "badgeCodePlaceholder": "z.B. VIP001", + "rankId": "Rang-ID", + "furniItems": "Möbel-Artikel", + "enabled": "Aktiviert", + "save": "Paket speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "Transaktionen", + "subtitle": "PayPal-Zahlungsprotokoll", + "noTransactions": "Noch keine Transaktionen", + "colId": "ID", + "colUser": "Benutzer", + "colAmount": "Betrag", + "colCurrency": "Währung", + "colPackage": "Paket", + "colStatus": "Status", + "colDate": "Datum", + "colActions": "Aktionen", + "statusCompleted": "Abgeschlossen", + "statusPending": "Ausstehend", + "statusFailed": "Fehlgeschlagen", + "statusRefunded": "Erstattet", + "detail": { + "title": "Transaktion #{id}", + "paypalId": "PayPal-ID", + "payerEmail": "Zahler-E-Mail", + "grossAmount": "Bruttobetrag", + "fee": "Gebühr", + "netAmount": "Nettobetrag" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Shop-Gutscheine", + "subtitle": "Einlösbare Gutscheincodes verwalten", + "newVoucher": "+ Neuer Gutschein", + "edit": "Bearbeiten", + "delete": "Löschen", + "noVouchers": "Noch keine Gutscheine", + "confirmDelete": "Gutschein „{code}“ löschen?", + "colId": "ID", + "colCode": "Code", + "colValue": "Wert", + "colType": "Typ", + "colUses": "Verwendet / Max.", + "colExpires": "Läuft ab", + "colCreated": "Erstellt", + "colActions": "Aktionen", + "form": { + "code": "Code", + "codePlaceholder": "z.B. SOMMER2025", + "value": "Wert", + "type": "Typ", + "typeCredits": "Credits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamanten", + "typeBadge": "Abzeichen", + "typeFurni": "Möbel", + "typeRank": "Rang", + "badgeCode": "Abzeichen-Code", + "badgeCodePlaceholder": "z.B. VIP001", + "rankId": "Rang-ID", + "maxUses": "Max. Verwendungen", + "maxUsesPlaceholder": "0 = unbegrenzt", + "expiresAt": "Läuft ab am", + "enabled": "Aktiviert", + "save": "Gutschein speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Abonnements", + "subtitle": "Aktive wiederkehrende Abonnements", + "noSubscriptions": "Keine aktiven Abonnements", + "cancel": "Kündigen", + "confirmCancel": "Abonnement für {username} kündigen?", + "colId": "ID", + "colUser": "Benutzer", + "colPackage": "Paket", + "colAmount": "Betrag", + "colInterval": "Intervall", + "colStarted": "Gestartet", + "colNextBilling": "Nächste Abrechnung", + "colStatus": "Status", + "colActions": "Aktionen", + "statusActive": "Aktiv", + "statusCancelled": "Gekündigt", + "statusExpired": "Abgelaufen", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Seltene Werte", + "subtitle": "Kategorien und Artikelpreise für seltene Werte verwalten", + "categories": "Kategorien", + "items": "Artikel", + "addCategory": "Kategorie hinzufügen", + "editCategory": "Kategorie bearbeiten", + "deleteCategory": "Kategorie löschen", + "noCategories": "Noch keine Seltene-Werte-Kategorien", + "confirmDeleteCategory": "Kategorie „{name}“ mit allen Artikeln löschen?", + "colId": "ID", + "colName": "Name", + "colItems": "Artikel", + "colUpdated": "Aktualisiert", + "colActions": "Aktionen", + "colItemName": "Artikelname", + "colCredits": "Credits", + "colPoints": "Punkte", + "colPointType": "Punktetyp", + "categoryForm": { + "name": "Name", + "namePlaceholder": "Kategoriename", + "save": "Kategorie speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen" + }, + "itemForm": { + "itemName": "Artikelname", + "itemNamePlaceholder": "z.B. Thron", + "credits": "Credits-Wert", + "points": "Punkte-Wert", + "pointType": "Punktetyp", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Diamanten", + "save": "Artikel speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Abzeichen", + "subtitle": "Abzeichen hochladen, vergeben und verwalten", + "upload": "Hochladen", + "giveBadge": "Abzeichen geben", + "catalogue": "Katalog", + "uploadTitle": "Neues Abzeichen hochladen", + "uploadSubtitle": "Eine Abzeichen-Bilddatei hochladen", + "badgeCode": "Abzeichen-Code", + "badgeCodePlaceholder": "z.B. VIP001", + "badgeFile": "Abzeichen-Datei", + "badgeFileHint": "PNG oder GIF, empfohlen 40x40", + "uploadButton": "Hochladen", + "uploading": "Wird hochgeladen…", + "giveTitle": "Abzeichen an Benutzer geben", + "giveSubtitle": "Einem bestimmten Benutzer ein Abzeichen gewähren", + "username": "Benutzername", + "usernamePlaceholder": "Zielbenutzername", + "giveButton": "Abzeichen geben", + "giving": "Wird vergeben…", + "catalogueTitle": "Abzeichen-Katalog", + "catalogueSubtitle": "Alle verfügbaren Abzeichen im Hotel", + "noBadges": "Keine Abzeichen im Katalog", + "search": "Abzeichen suchen", + "searchPlaceholder": "Suche nach Code oder Name…", + "colCode": "Code", + "colImage": "Bild", + "colName": "Name", + "colDescription": "Beschreibung", + "colActions": "Aktionen", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Errungenschaften", + "subtitle": "Nur-Lesen-Liste der In-Game-Errungenschaften", + "noAchievements": "Keine Errungenschaften konfiguriert", + "colId": "ID", + "colName": "Name", + "colCategory": "Kategorie", + "colLevels": "Stufen", + "colReward": "Belohnung", + "colProgress": "Fortschritt", + "levelLabel": "Stufe {level}", + "rewardCredits": "{count} Credits", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Kalender-Kampagnen", + "subtitle": "Nur-Lesen-Liste der Kalenderkampagnen und -events", + "noCampaigns": "Noch keine Kalender-Kampagnen", + "colId": "ID", + "colName": "Name", + "colStart": "Start", + "colEnd": "Ende", + "colType": "Typ", + "colReward": "Belohnung", + "colActions": "Aktionen", + "detail": { + "title": "Kampagne: {name}", + "subtitle": "Kalender-Event-Details", + "days": "Tage", + "dayLabel": "Tag {day}", + "reward": "Belohnung", + "noDays": "Keine Tage für diese Kampagne konfiguriert", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Radio-Moderation", + "subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).", + "moderation": "Moderation", + "shouts": "Shouts", + "applications": "Bewerbungen", + "schedules": "Programm", + "settings": "Einstellungen", + "embed": "Einbetten", + "ranks": "Ränge", + "history": "Verlauf", + "apiKeys": "API-Schlüssel", + "points": "Punkte", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Radio-Überwachung", + "subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.", + "stream": "Stream", + "online": "Online", + "offline": "Offline", + "notConfigured": "Not configured", + "nowPlaying": "Now playing", + "nowPlayingApi": "Now-playing API", + "listenersApi": "Listeners API", + "listeners": "Hörer", + "currentSong": "Aktueller Song", + "bitrate": "Bitrate", + "status": "Status", + "noNowPlayingHint": "no now-playing API set", + "noListenersHint": "no listeners API set", + "endpointDiagnostics": "Endpoint diagnostics", + "diagnosticsLegend": "OK: erreichbar · WARN: nicht konfiguriert · ERROR: Anfrage fehlgeschlagen oder Zeitüberschreitung.", + "streamUrl": "Stream URL", + "unreachable": "unreachable", + "refresh": "Aktualisieren" + }, + "user": "User", + "message": "Message", + "posted": "Posted", + "realName": "Real Name", + "age": "Age", + "style": "Style", + "applied": "Applied", + "day": "Day", + "start": "Start", + "end": "End", + "show": "Show", + "status": "Status", + "active": "active", + "inactive": "inactive", + "hidden": "hidden", + "activeSchedules": "Active schedules", + "noShouts": "Keine Shouts zu moderieren", + "noApplications": "No applications submitted.", + "noSchedules": "No schedules configured.", + "deleteShout": "Löschen", + "confirmDeleteShout": "Diesen Shout löschen?", + "pendingApplications": "Ausstehende Bewerbungen", + "settingsForm": { + "title": "Radio Settings", + "subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "enabled": "Enabled", + "disabled": "Disabled", + "totalKeys": "Total keys", + "configured": "Configured", + "curatedHint": "curated keys with a value", + "customKeys": "Custom keys", + "saveAll": "Save all", + "singleKey": "Add / overwrite a single key", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "value", + "commentPlaceholder": "comment (optional)", + "saveSingle": "Save", + "otherSettings": "Other radio settings", + "dbError": "Could not load settings (database unavailable). Defaults will be created on save." + }, + "embedPage": { + "title": "Radio Embed", + "subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).", + "streamUrl": "Stream URL", + "configured": "Configured", + "missing": "Missing", + "radioName": "Radio name", + "nowPlayingApi": "Now-playing API", + "set": "Set", + "notSet": "Not set", + "noStreamUrl": "No stream URL configured", + "noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.", + "goToSettings": "Go to Radio Settings", + "livePreview": "Live preview", + "livePreviewText": "This is the bare audio player as visitors will see it. Press play to confirm the stream is reachable.", + "source": "Source", + "audioSnippet": "Audio player snippet", + "audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.", + "iframeSnippet": "Iframe wrapper snippet", + "iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.", + "audioUnsupported": "Your browser does not support the audio element." + }, + "banners": { + "title": "Banner", + "heading": "Radio Banners", + "description": "Promotional banners shown on the radio page, ordered by sort order.", + "addBanner": "Banner hinzufügen", + "createBanner": "Create banner", + "deleteBanner": "Banner löschen", + "noBanners": "No banners yet — add one above.", + "existing": "Existing banners ({count})", + "save": "Save", + "delete": "Delete", + "byUser": "by user {id}", + "active": "active", + "hidden": "hidden", + "bannerAlt": "Radio banner", + "statusActive": "Active", + "statusHidden": "Hidden", + "dbError": "Could not load banners (database unavailable).", + "form": { + "imagePath": "Image path / URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Title", + "description": "Description", + "sortOrder": "Sort order", + "active": "Active" + } + }, + "ranksForm": { + "title": "Radio-Ränge", + "subtitle": "DJ / staff ranks assignable on radio applications.", + "dbError": "Could not load ranks (database unavailable).", + "active": "Active", + "addRank": "Add rank", + "name": "Name", + "badgeCode": "Badge code", + "description": "Description", + "createRank": "Create rank", + "existing": "Existing ranks ({count})", + "noRanks": "No ranks yet — add one above.", + "activeLabel": "active", + "inactiveLabel": "inactive", + "save": "Save", + "deleteRank": "Delete rank #{id}" + }, + "historyPage": { + "title": "Radio Play History", + "subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.", + "dbError": "Could not load radio history (database unavailable).", + "showsLogged": "Shows logged", + "onAirNow": "On air now", + "uniqueDjs": "Unique DJs", + "peakListeners": "Peak listeners", + "empty": "No radio history recorded yet.", + "showLog": "Show log ({count})", + "colDj": "DJ", + "colShow": "Show", + "colStarted": "Started", + "colEnded": "Ended", + "colAirtime": "Airtime", + "colListeners": "Listeners", + "colNotes": "Notes", + "onAir": "on air" + }, + "apiKeysForm": { + "title": "API-Schlüssel", + "subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.", + "dbError": "Could not load API keys (database unavailable).", + "totalKeys": "Total keys", + "active": "Active", + "inactive": "Inactive", + "generateKey": "Neuen Schlüssel generieren", + "generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.", + "name": "Name", + "namePlaceholder": "AzureCast bridge", + "rateLimit": "Rate limit (requests/min)", + "allowedIps": "Allowed IPs (optional)", + "allowedIpsPlaceholder": "comma-separated, blank = any", + "generate": "Generieren", + "existingKeys": "Existing keys ({count})", + "noKeys": "No API keys yet — generate one above.", + "colName": "Name", + "colKey": "Schlüssel", + "colAllowedIps": "Allowed IPs", + "colRateLimit": "Rate limit", + "colLastUsed": "Last used", + "colExpires": "Expires", + "colStatus": "Status", + "colActions": "Aktionen", + "maskedHint": "Only the first 8 characters are shown", + "any": "any", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete" + }, + "pointsForm": { + "title": "Hörer-Punkte-Konfiguration", + "subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "saved": "Saved", + "points": "Points", + "enabled": "Enabled", + "disabled": "Disabled", + "perMinute": "Per minute", + "paidIn": "paid in {currency}", + "maxPerDay": "Max / day", + "unlimited": "Unlimited", + "minListeners": "Min listeners", + "settings": "Settings", + "pointsEnabled": "Points enabled", + "pointsEnabledHint": "Master switch for awarding listener points.", + "currency": "Currency", + "currencyHint": "Which wallet the points are paid into.", + "pointsPerMinute": "Points per minute", + "pointsPerMinuteHint": "Amount awarded for each full minute of listening.", + "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", + "minListenersHint": "Points are only awarded when at least this many people are tuned in.", + "save": "Punkteeinstellungen speichern" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.", + "dbError": "Could not load the AutoDJ playlist (database unavailable).", + "tracks": "Tracks", + "active": "Active", + "inactive": "Inactive", + "addTrack": "Add track", + "titlePlaceholder": "Track title", + "artist": "Artist", + "album": "Album", + "artworkUrl": "Artwork URL", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Duration (seconds)", + "durationPlaceholder": "e.g. 215", + "sortOrder": "Sort order", + "playlist": "Playlist ({count})", + "noTracks": "No AutoDJ tracks yet — add one above.", + "colOrder": "Order", + "colTitle": "Title", + "colArtist": "Artist", + "colAlbum": "Album", + "colDuration": "Duration", + "colPlays": "Plays", + "colLastPlayed": "Last played", + "colStatus": "Status", + "colActions": "Actions", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete", + "trackTitle": "Title" + }, + "moderationPage": { + "title": "DJ Moderation", + "subtitle": "Review and remove radio shouts (50 most recent).", + "recentShouts": "Recent Shouts ({count})" + } + }, + "commandocentrum": { + "title": "Commandocentrum", + "subtitle": "Diagnose, RCON-Steuerung und Benutzerverwaltung", + "diagnostics": "Diagnose", + "rcon": "RCON", + "userActions": "Benutzeraktionen", + "diagnosticsTitle": "Emulator-Diagnose", + "memoryUsage": "Speichernutzung", + "uptime": "Betriebszeit", + "onlineUsers": "Benutzer online", + "roomsLoaded": "Geladene Räume", + "refresh": "Aktualisieren", + "rconTitle": "RCON-Befehle", + "rconPlaceholder": "RCON-Befehl eingeben…", + "rconSend": "Senden", + "rconSending": "Wird gesendet…", + "rconResponse": "Antwort", + "userActionsTitle": "Benutzeraktionen", + "username": "Benutzername", + "usernamePlaceholder": "Zielbenutzername", + "action": "Aktion", + "execute": "Ausführen", + "actions": { + "disconnect": "Trennen", + "alert": "Alarm senden", + "giveCredits": "Credits geben", + "giveBadge": "Abzeichen geben", + "givePoints": "Punkte geben", + "ban": "Bannen", + "kick": "Kicken" + }, + "messagePlaceholder": "Nachricht (für Alarme)…", + "amountPlaceholder": "Betrag…", + "badgePlaceholder": "Abzeichen-Code…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Emulator-Konfiguration", + "subtitle": "Emulator-Einstellungen und Lokaltexte anzeigen und bearbeiten", + "settings": "Einstellungen", + "texts": "Texte", + "search": "Suchen", + "searchPlaceholder": "Schlüssel suchen…", + "noSettings": "Keine Einstellungen gefunden", + "noTexts": "Keine Texte gefunden", + "edit": "Bearbeiten", + "save": "Speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen", + "colKey": "Schlüssel", + "colValue": "Wert", + "colType": "Typ", + "colActions": "Aktionen", + "editDialog": { + "title": "Bearbeiten: {key}", + "value": "Wert", + "valuePlaceholder": "Wert eingeben…", + "save": "Änderungen speichern", + "cancel": "Abbrechen" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Alarme", + "subtitle": "Hotelweite Alarme senden und aktuelle anzeigen", + "sendAlert": "Hotel-Alarm senden", + "recentAlerts": "Letzte Alarme ({count})", + "noRecentAlerts": "Keine aktuellen Alarme", + "form": { + "title": "Alarm-Titel", + "titlePlaceholder": "z.B. Serverwartung in 10 Minuten", + "message": "Alarm-Nachricht", + "messagePlaceholder": "Schreibe die Alarm-Nachricht…", + "type": "Typ", + "typeHotel": "Hotelweiter Alarm", + "typeStaff": "Nur Team", + "urgent": "Dringend", + "send": "Alarm senden", + "sending": "Wird gesendet…", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "ID", + "colTitle": "Titel", + "colSentBy": "Gesendet von", + "colType": "Typ", + "colDate": "Datum", + "colActions": "Aktionen", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Team-Aktivitäten", + "subtitle": "Prüfpfad der Team-Aktionen im Admin-Panel", + "noLogs": "Noch keine Team-Aktivität protokolliert", + "colId": "ID", + "colUser": "Benutzer", + "colAction": "Aktion", + "colTarget": "Ziel", + "colDescription": "Beschreibung", + "colIp": "IP", + "colTimestamp": "Zeitstempel", + "filterByUser": "Nach Benutzer filtern…", + "filterByAction": "Nach Aktion filtern…", + "clearFilters": "Filter zurücksetzen", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Wortfilter", + "subtitle": "Gefilterte Wörter und Phrasen im Hotel verwalten", + "addWord": "Wort hinzufügen", + "addWords": "Wörter hinzufügen", + "noWords": "Noch keine gefilterten Wörter", + "confirmDelete": "„{word}“ aus dem Filter entfernen?", + "colId": "ID", + "colWord": "Wort", + "colAddedBy": "Hinzugefügt von", + "colCreated": "Erstellt", + "colActions": "Aktionen", + "form": { + "word": "Wort", + "wordPlaceholder": "z.B. schlechteswort", + "addMore": "Mehrere Wörter hinzufügen (eines pro Zeile)", + "save": "Zum Filter hinzufügen", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Wartungsmodus", + "subtitle": "Hotelweite Wartung aktivieren oder deaktivieren", + "enabled": "Wartungsmodus ist aktiviert", + "disabled": "Wartungsmodus ist deaktiviert", + "enable": "Wartung aktivieren", + "disable": "Wartung deaktivieren", + "message": "Wartungs-Nachricht", + "messagePlaceholder": "Wir sind bald zurück!", + "staffAccess": "Team-Zugriff während der Wartung erlauben", + "save": "Einstellungen speichern", + "saving": "Wird gespeichert…", + "confirmEnable": "Durch Aktivieren der Wartung wird allen Nicht-Team-Benutzern der Zugriff verwehrt. Fortfahren?", + "confirmDisable": "Wartungsmodus deaktivieren und Zugriff für alle Benutzer wiederherstellen?", + "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": "Hausverwaltungs-Berechtigungen", + "subtitle": "Festlegen, welche Ränge auf welche Admin-Bereiche zugreifen können", + "addPermission": "Berechtigung hinzufügen", + "editPermission": "Berechtigung bearbeiten", + "deletePermission": "Berechtigung löschen", + "noPermissions": "Keine Hausverwaltungs-Berechtigungen konfiguriert", + "confirmDelete": "Diese Berechtigung löschen?", + "colId": "ID", + "colRank": "Rang", + "colSection": "Bereich", + "colActions": "Aktionen", + "form": { + "rankId": "Rang-ID", + "rankIdPlaceholder": "Mindestrang", + "section": "Bereichsschlüssel", + "sectionPlaceholder": "z.B. admin.dashboard", + "save": "Berechtigung speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset applied!", + "cleared": "All Berechtigungen cleared!", + "invalidRank": "Invalid Rang", + "testDone": "Test done: {count} Berechtigungen found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Löschen ALL Berechtigungen? This Aktion cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Berechtigung", + "colDescription": "Beschreibung", + "colMinRank": "Min. Rang", + "permissionKey": "Berechtigungsschlüssel", + "minRank": "Min. Rang", + "description": "Beschreibung", + "permissions": "Berechtigungen", + "permissionsCount": "{count} Berechtigungen", + "permission": "Berechtigung", + "highestMinRank": "Highest min. Rang: {rank}", + "totalMinRank": "Total min. Rang sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Ränge", + "missingDeps": "{count} missing dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(missing)", + "rank": "Rang", + "count": "Count", + "searchPermission": "Suchen Berechtigungen…", + "search": "Suchen", + "manage": "Manage", + "importSelection": "Importieren selection", + "noGroup": "Nein group", + "allGroups": "All groups", + "perGroup": "Berechtigungen per group", + "perRank": "Berechtigungen per Rang", + "rankOverviewHint": "All Berechtigungen grouped by the Rang they are assigned to.", + "tabOverview": "Übersicht", + "tabManage": "Manage", + "tabImport": "Importieren / Export", + "tabRanks": "Rang Übersicht", + "tabPresets": "Voreinstellungen", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "Importieren Berechtigungen", + "importHint": "Paste a JSON array of Berechtigung objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "Importieren", + "exportTitle": "Export Berechtigungen", + "exportHint": "Export all Berechtigungen as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Berechtigung Voreinstellungen", + "presetsHint": "Anwenden a predefined set of Berechtigungen for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic moderation tools: Benutzer lookup, Banns, CFH handling, chat logs.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Benutzer, Räume, news, Einstellungen, shop, events, radio & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including Berechtigung management and asset Importieren.", + "applyPreset": "Anwenden preset", + "clearAll": "Clear all Berechtigungen", + "testTitle": "Test Rang access", + "testHint": "Enter a Rang number to see which Berechtigungen would be granted.", + "test": "Test", + "auditTitle": "Berechtigung audit log", + "auditHint": "All changes to Hausverwaltung Berechtigungen are logged.", + "auditLogsAt": "Audit logs are available on the Audit log page.", + "viewAuditLogs": "Ansehen audit logs", + "importedWithErrors": "Imported {count} Berechtigungen with {errors} errors", + "confirmClearAllDesc": "This will Entfernen every Berechtigung entry from the Datenbank. Are you sure?", + "confirmDeletePermission": "Löschen this Berechtigung permanently?", + "confirmBulkDelete": "Löschen {count} selected Berechtigungen?", + "deleteSelected": "Löschen {count} selected", + "cancel": "Abbrechen", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Benutzer", + "auditAction": "Aktion", + "auditTarget": "Ziel", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Räume", + "subtitle": "Hotel-Räume durchsuchen und verwalten", + "search": "Suchen", + "searchPlaceholder": "Suche nach Name, Besitzer oder ID…", + "searchResults": "{count, plural, one {# Raum} other {# Räume}} gefunden für „{query}“", + "noResults": "Keine Räume gefunden", + "colId": "ID", + "colName": "Name", + "colOwner": "Besitzer", + "colUsers": "Benutzer", + "colState": "Status", + "colCategory": "Kategorie", + "colCreated": "Erstellt", + "colActions": "Aktionen", + "stateOpen": "Offen", + "stateClosed": "Geschlossen", + "stateLocked": "Gesperrt", + "stateInvisible": "Unsichtbar", + "detail": { + "title": "Raum: {name}", + "subtitle": "Besitzer: {owner}", + "overview": "Übersicht", + "actions": "Aktionen", + "description": "Beschreibung", + "noDescription": "Keine Beschreibung", + "owner": "Besitzer", + "users": "Benutzer online", + "maxUsers": "Max. Benutzer", + "category": "Kategorie", + "state": "Status", + "tags": "Tags", + "noTags": "Keine Tags", + "created": "Erstellt", + "deleteRoom": "Raum löschen", + "confirmDelete": "Raum „{name}“ löschen? Dies kann nicht rückgängig gemacht werden.", + "enterRoom": "Raum betreten", + "changeOwner": "Besitzer ändern", + "changeOwnerPlaceholder": "Benutzername des neuen Besitzers" + } + }, + "emailTemplates": { + "title": "E-Mail-Vorlagen", + "subtitle": "Transaktions-E-Mail-Vorlagen verwalten", + "newTemplate": "+ Neue Vorlage", + "edit": "Bearbeiten", + "delete": "Löschen", + "noTemplates": "Noch keine E-Mail-Vorlagen", + "confirmDelete": "Vorlage „{name}“ löschen?", + "colId": "ID", + "colName": "Name", + "colSubject": "Betreff", + "colKey": "Schlüssel", + "colUpdated": "Aktualisiert", + "colActions": "Aktionen", + "form": { + "name": "Name", + "namePlaceholder": "z.B. Willkommens-E-Mail", + "key": "Schlüssel", + "keyPlaceholder": "z.B. welcome_email", + "subject": "Betreff", + "subjectPlaceholder": "E-Mail-Betreffzeile", + "body": "Inhalt (HTML)", + "bodyPlaceholder": "

Lieber/Liebe {username},

", + "variables": "Verfügbare Variablen", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Vorlage speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Design", + "subtitle": "Das CMS-Erscheinungsbild anpassen", + "presets": "Voreinstellungen", + "colours": "Farben", + "css": "CSS", + "presetsTitle": "Design-Voreinstellungen", + "presetsSubtitle": "Wähle ein vorgefertigtes Farbschema", + "applyPreset": "Anwenden", + "presetApplied": "Voreinstellung angewendet: {preset}", + "customiseTitle": "Benutzerdefinierte Farben", + "primary": "Primär", + "secondary": "Sekundär", + "accent": "Akzent", + "background": "Hintergrund", + "surface": "Oberfläche", + "text": "Text", + "saveColours": "Farben speichern", + "savingColours": "Wird gespeichert…", + "cssTitle": "Benutzerdefiniertes CSS", + "cssSubtitle": "Füge benutzerdefiniertes CSS hinzu, um Design-Stile zu überschreiben", + "cssPlaceholder": "/* Dein benutzerdefiniertes CSS hier */", + "saveCss": "CSS speichern", + "savingCss": "Wird gespeichert…", + "reset": "Auf Standard zurücksetzen", + "confirmReset": "Design auf Standardwerte zurücksetzen?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Medienbibliothek", + "subtitle": "Mediendateien hochladen und verwalten", + "upload": "Hochladen", + "uploadTitle": "Datei hochladen", + "uploadSubtitle": "Ziehen und ablegen oder klicken zum Hochladen", + "uploadButton": "Datei auswählen", + "uploading": "Wird hochgeladen…", + "noFiles": "Noch keine Mediendateien", + "delete": "Löschen", + "confirmDelete": "Diese Datei dauerhaft löschen?", + "search": "Suchen", + "searchPlaceholder": "Nach Dateiname suchen…", + "colPreview": "Vorschau", + "colName": "Name", + "colSize": "Größe", + "colType": "Typ", + "colUploaded": "Hochgeladen", + "colActions": "Aktionen", + "copyUrl": "URL kopieren", + "urlCopied": "URL in die Zwischenablage kopiert" + }, + "settings": { + "title": "CMS-Einstellungen", + "subtitle": "Schlüssel/Wert-CMS-Konfiguration verwalten", + "addSetting": "Einstellung hinzufügen", + "edit": "Bearbeiten", + "delete": "Löschen", + "noSettings": "Keine Einstellungen gefunden", + "confirmDelete": "Einstellung „{key}“ löschen?", + "colKey": "Schlüssel", + "colValue": "Wert", + "colUpdated": "Aktualisiert", + "colActions": "Aktionen", + "form": { + "key": "Schlüssel", + "keyPlaceholder": "z.B. hotel_name", + "value": "Wert", + "valuePlaceholder": "Einstellungswert", + "save": "Einstellung speichern", + "saving": "Wird gespeichert…", + "cancel": "Abbrechen" + }, + "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." + }, + "favicon": { + "title": "Favicon", + "subtitle": "Upload and manage the site favicon", + "current": "Current favicon", + "uploadLabel": "Upload favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.", + "upload": "Upload", + "uploading": "Uploading…", + "delete": "Remove", + "deleting": "Removing…", + "saved": "Favicon saved successfully!", + "deleted": "Favicon removed successfully!", + "error": "Something went wrong", + "confirmDelete": "Remove the favicon? The site will no longer show a custom favicon.", + "generator": { + "title": "Generate favicon", + "text": "Text", + "bgColor": "Background color", + "textColor": "Text color", + "rounded": "Rounded corners", + "save": "Save as favicon" + }, + "cancel": "Cancel" + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Startseite", + "reload": "Neu laden", + "fullscreen": "Vollbild", + "logout": "Abmelden", + "onlineUsers": "Nutzer online", + "emulatorOnline": "Emulator online", + "emulatorOffline": "Emulator offline", + "dragToMove": "Ziehen zum Verschieben", + "hide": "Leiste ausblenden", + "fullscreenExit": "Vollbild beenden", + "show": "Leiste anzeigen", + "emulatorUnknown": "Emulatorstatus unbekannt" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Dateidiagnose", + "preliminary": "Vorprüfung der Adressen; der Inhalt wird beim Import geprüft.", + "http": "HTTP {status}", + "network": "Verbindung fehlgeschlagen", + "timeout": "Zeitüberschreitung der Quelle", + "invalidResponse": "Die Quelle lieferte eine Webseite statt einer Datei", + "available": "Datei gefunden; Prüfung steht aus", + "recover": "Original anhängen und fortsetzen", + "recoveryHint": "Wähle {file} (maximal 50 MB). Die Identität wird geprüft. Fehlgeschlagene Einträge werden wiederholt; abgeschlossene Importe bleiben erhalten.", + "attach": "Originale .nitro-Datei wählen", + "working": "Datei wird geprüft oder Import fortgesetzt...", + "attached": "Passende Originaldatei angehängt", + "resume": "Fehlgeschlagene Importe mit dieser Datei fortsetzen", + "invalidFile": "Wähle eine passende originale .nitro-Datei bis 50 MB und versuche es erneut.", + "resumeError": "Aktualisiere den Verlauf und nutze den neuesten Versuch; prüfe die Datei und versuche es erneut.", + "mismatchedFile": "Diese Datei gehört zu einem anderen Möbelstück.", + "alreadyStarted": "Die Wiederherstellung läuft bereits. Aktualisiere den Verlauf und nutze den neuesten Versuch.", + "notEligible": "Dieser Eintrag kann nicht mit einem Anhang wiederhergestellt werden." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/el.json b/src/messages/el.json index 8b558506..2111ef8c 100644 --- a/src/messages/el.json +++ b/src/messages/el.json @@ -1,3918 +1,4913 @@ { - "draftRecovery": { - "ready": "Ένα αντίγραφο ανάκτησης θα διατηρηθεί σε αυτό το πρόγραμμα περιήγησης για 7 ημέρες.", - "saved": "Το αντίγραφο ανάκτησης αποθηκεύτηκε σε αυτό το πρόγραμμα περιήγησης για 7 ημέρες.", - "unavailable": "Η ανάκτηση στο πρόγραμμα περιήγησης δεν είναι διαθέσιμη. Κράτησε αυτή τη σελίδα ανοιχτή μέχρι να αποθηκευτούν οι αλλαγές σου.", - "found": "Υπάρχει αντίγραφο ανάκτησης σε αυτό το πρόγραμμα περιήγησης, αποθηκευμένο στις", - "restore": "Επαναφορά αντιγράφου περιήγησης", - "discard": "Διαγραφή αντιγράφου περιήγησης", - "confirmRestore": "Να αντικατασταθεί η τρέχουσα φόρμα με το αντίγραφο ανάκτησης του προγράμματος περιήγησης; Έλεγξε το περιεχόμενο πριν από την αποθήκευση.", - "confirmDiscard": "Να διαγραφεί αυτό το αντίγραφο ανάκτησης από το πρόγραμμα περιήγησης; Η τρέχουσα φόρμα θα παραμείνει αμετάβλητη." - }, - "nav": { - "home": "Σπίτι", - "community": "Κοινότητα", - "articles": "Άρθρα", - "photos": "Φωτογραφίες", - "staff": "Προσωπικό", - "rankings": "Κατάταξη", - "guilds": "Συντεχνίες", - "leaderboards": "Πίνακες κατάταξης", - "rareValues": "Σπάνιες αξίες", - "shop": "Κατάστημα", - "market": "Αγορά", - "assistance": "Βοήθεια", - "helpCenter": "Κέντρο βοήθειας", - "myTickets": "Τα εισιτήριά μου", - "badges": "Σήματα", - "radio": "Ραδιόφωνο", - "friends": "Φίλοι", - "messages": "Μηνύματα", - "admin": "Διαχειρ", - "openMenu": "Άνοιγμα μενού", - "closeMenu": "Κλείσιμο μενού", - "drawBadge": "Σχεδιάστε το σήμα", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} στο διαδίκτυο", - "nitroClient": "Πελάτης Nitro", - "tagline": "Ένας διαδικτυακός εικονικός κόσμος όπου μπορείτε να δημιουργήσετε το δικό σας avatar, να κάνετε φίλους, να συνομιλήσετε, να δημιουργήσετε δωμάτια και πολλά άλλα!", - "login": "Είσοδος", - "or": "Ή", - "createAccount": "Δημιουργία λογαριασμού" - }, - "footer": { - "copyright": "© {year} - Το {hotel} είναι ένα μη κερδοσκοπικό εκπαιδευτικό έργο" - }, - "pages": { - "staff": { - "title": "Προσωπικό", - "subtitle": "Η ομάδα πίσω από το ξενοδοχείο", - "ranksTitle": "Βαθμοί", - "ranksSubtitle": "Τι φροντίζει το κάθε μέρος της ομάδας", - "membersTitle": "μέλη της ομάδας", - "membersEmptySubtitle": "Κανένας να δείξει αυτή τη στιγμή", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "Δεν υπάρχουν μέλη του προσωπικού για εμφάνιση.", - "colUsername": "Όνομα χρήστη", - "colRank": "Κατάταξη", - "colMotto": "Μότο" - }, - "leaderboard": { - "title": "Leaderboard", - "subtitle": "Οι κορυφαίοι 20 παίκτες κατά {currency}", - "tab_credits": "Πιστώσεις", - "tab_diamonds": "Διαμάντια", - "tab_duckets": "Παπιάκια", - "tab_achievement": "Επιτεύγματα", - "tab_respects": "Σεβασμοί", - "tab_onlinetime": "Διαδικτυακός χρόνος", - "emptyState": "Δεν υπάρχουν ακόμη βαθμολογίες προς εμφάνιση.", - "colAvatar": "Avatar", - "colPlayer": "Παίκτης" - }, - "friends": { - "title": "Φίλοι", - "emptySubtitle": "Δεν έχετε προσθέσει φίλους ακόμα", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Προσθέστε φίλους στο ξενοδοχείο και θα εμφανιστούν εδώ.", - "noMotto": "Χωρίς σύνθημα", - "remove": "Remove", - "success": { - "removed": "Friend removed." - }, - "errors": { - "notFound": "That friendship was not found.", - "invalid": "Invalid friend.", - "error": "Something went wrong. Please try again." - } - }, - "messages": { - "title": "Μηνύματα", - "subtitle": "Σας περιμένουν αιτήματα φιλίας και μηνύματα εκτός σύνδεσης", - "requestsTitle": "Αιτήματα φιλίας", - "requestsEmptySubtitle": "Κανείς δεν έχει ζητήσει να γίνει φίλος σου ακόμα", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "Δεν υπάρχουν εκκρεμή αιτήματα φιλίας.", - "wantsToBeFriend": "θέλει να γίνει φίλος σου.", - "accept": "Αποδοχή", - "offlineTitle": "Μηνύματα εκτός σύνδεσης", - "offlineEmptySubtitle": "Τα εισερχόμενά σας είναι άδεια", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "Δεν έχετε μηνύματα εκτός σύνδεσης.", - "unknownUser": "Χρήστης #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Χωρίς σύνθημα", - "statRank": "Κατάταξη", - "statCredits": "Πιστώσεις", - "statRegistered": "Εγγεγραμμένος", - "badgesTitle": "Σήματα", - "badgesEmpty": "Δεν υπάρχουν ακόμη σήματα.", - "photosTitle": "Φωτογραφίες", - "photosEmpty": "Δεν υπάρχουν ακόμα φωτογραφίες.", - "guestbookTitle": "Βιβλίο επισκεπτών", - "guestbookSubtitle": "Μηνύματα στον τοίχο του χρήστη {username}", - "leaveMessage": "Αφήστε ένα μήνυμα", - "guestbookPlaceholder": "Γράψτε κάτι στο βιβλίο επισκεπτών του χρήστη {username}…", - "post": "Ανάρτηση", - "loginToPost": "Συνδεθείτε για να αφήσετε ένα μήνυμα στο βιβλίο επισκεπτών.", - "guestbookEmpty": "Δεν υπάρχουν ακόμη καταχωρίσεις στο βιβλίο επισκεπτών.", - "unknownUser": "Χρήστης #{id}", - "statDuckets": "Παπιάκια", - "statDiamonds": "Διαμάντια", - "walletTitle": "Πορτοφόλι", - "friendsTitle": "Φίλοι", - "friendsSubtitle": "Άνθρωποι στο ξενοδοχείο με τους οποίους κάνουν παρέα", - "friendsEmpty": "Δεν υπάρχουν φίλοι για εμφάνιση.", - "roomsTitle": "Δωμάτια", - "roomsSubtitle": "Δωμάτια που τους ανήκουν", - "roomsEmpty": "Δεν υπάρχουν δωμάτια για εμφάνιση.", - "roomUntitled": "Δωμάτιο χωρίς τίτλο", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Κατάταξη", - "subtitle": "Οι κορυφαίοι 12 παίκτες που ταξινομούνται ανά μονάδες", - "emptyState": "Δεν υπάρχουν παίκτες για κατάταξη ακόμα." - }, - "home": { - "welcome": "Καλώς ήρθατε στο {hotelName}", - "welcomeSubtitle": "Το ρετρό ξενοδοχείο σας, τώρα με την υποστήριξη του Next.js", - "welcomeBody": "Κάντε παρέα, μαζέψτε έπιπλα και συναντήστε φίλους.", - "enterHotel": "Εισαγάγετε {hotelName}", - "onlineFriends": "Διαδικτυακοί φίλοι", - "noFriendsOnline": "Δεν υπάρχουν φίλοι στο διαδίκτυο", - "register": "ΕΓΓΡΑΦΕΙΤΕ ΤΩΡΑ", - "joinNow": "Εγγραφείτε στο {hotelName} σήμερα!", - "recentUsers": "Πρόσφατοι Χρήστες", - "recentPhotos": "Πρόσφατες Φωτογραφίες", - "latestNews": "Τελευταία νέα", - "newsTitle": "Τελευταία νέα", - "newsSubtitle": "Φρέσκο από το ξενοδοχείο", - "allNews": "Όλα τα νέα →", - "allUsers": "Κοινότητα →", - "noArticles": "Δεν υπάρχουν ακόμη άρθρα.", - "noPhotos": "Δεν υπάρχουν ακόμα φωτογραφίες.", - "noUsers": "Δεν υπάρχουν χρήστες στο διαδίκτυο", - "latestArticle": "Τελευταίο άρθρο", - "latestUsers": "Νεότεροι πολίτες ({count} σύνολο)", - "statsOnline": "Συνδεδεμένοι", - "statsCitizens": "Πολίτες", - "statsRooms": "Δωμάτια", - "statsArticles": "Άρθρα", - "featuresAvatar": "Άβαταρ", - "featuresAvatarDesc": "Δημιούργησε τη μοναδική σου εμφάνιση", - "featuresFurniture": "Έπιπλα", - "featuresFurnitureDesc": "Διακόσμησε δωμάτια με αντικείμενα", - "featuresCommunity": "Κοινότητα", - "featuresCommunityDesc": "Κάνε φίλους και συνομίλησε", - "featuresGames": "Παιχνίδια", - "featuresGamesDesc": "Ανταγωνίσου και διασκέδασε" - }, - "news": { - "title": "Νέα", - "subtitle": "Οι τελευταίες ανακοινώσεις, εκδηλώσεις και ενημερώσεις από το ξενοδοχείο", - "noArticles": "Δεν υπάρχουν ακόμη άρθρα." - }, - "article": { - "backToNews": "← Ειδήσεις", - "reactionsTitle": "Αντιδράσεις", - "reactionsSubtitle": "Πείτε μας τι πιστεύετε", - "reaction": { - "like": "Όπως", - "love": "Αγάπη", - "wow": "Ουάου" - }, - "removeReaction": "Κάντε κλικ για να καταργήσετε την αντίδρασή σας", - "reactWith": "React with {reaction}", - "noReactions": "Καμία αντίδραση ακόμα.", - "logIn": "Συνδεθείτε", - "toReact": "να αντιδράσει.", - "commentsTitle": "Σχόλια", - "commentsSubtitle": "Συμμετάσχετε στη συζήτηση", - "commentsCount": "{count} μέχρι στιγμής", - "noComments": "Δεν υπάρχουν ακόμη σχόλια. Γίνε ο πρώτος που θα σχολιάσει.", - "userNumber": "Χρήστης #{id}", - "addComment": "Προσθέστε ένα σχόλιο", - "commentPlaceholder": "Γράψτε το σχόλιό σας…", - "postComment": "Δημοσίευση σχολίου", - "toComment": "για να αφήσετε ένα σχόλιο.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Φωτογραφίες", - "subtitle": "Τα τελευταία στιγμιότυπα που τραβήχτηκαν στο ξενοδοχείο", - "noPhotos": "Δεν υπάρχουν ακόμα φωτογραφίες.", - "photoAlt": "Φωτογραφία από χρήστη #{id}", - "byUser": "από χρήστη #{id}" - }, - "badges": { - "title": "Σήματα", - "subtitle": "Τα σήματα που μπορείτε να κερδίσετε και να επιδείξετε σε όλο το ξενοδοχείο", - "noBadges": "Δεν υπάρχουν ακόμη διαθέσιμα σήματα." - }, - "community": { - "title": "Κοινότητα", - "subtitle": "Όλα όσα συμβαίνουν γύρω από το ξενοδοχείο σε ένα μέρος", - "open": "Άνοιγμα →", - "links": { - "rankings": { - "title": "Κατάταξη", - "text": "Δείτε τους πλουσιότερους παίκτες του ξενοδοχείου, ταξινομημένους με βάση τις πιστώσεις." - }, - "staff": { - "title": "Προσωπικό", - "text": "Γνωρίστε την ομάδα που διατηρεί το ξενοδοχείο σε λειτουργία κάθε μέρα." - }, - "news": { - "title": "Νέα", - "text": "Οι τελευταίες ανακοινώσεις, εκδηλώσεις και ενημερώσεις." - }, - "photos": { - "title": "Φωτογραφίες", - "text": "Στιγμιότυπα που κοινοποιούνται από την κοινότητα από όλο το ξενοδοχείο." - }, - "guilds": { - "title": "Συντεχνίες", - "text": "Περιηγηθείτε στις ομάδες που έχουν δημιουργήσει και έχουν ενταχθεί οι παίκτες." - }, - "leaderboards": { - "title": "Πίνακες κατάταξης", - "text": "Ποιος είναι στην κορυφή αυτή τη σεζόν στα στατιστικά του ξενοδοχείου." - } - } - }, - "guilds": { - "title": "Συντεχνίες", - "subtitle": "Περιηγηθείτε στις ομάδες που έχουν δημιουργήσει και έχουν ενταχθεί οι παίκτες", - "empty": "Δεν υπάρχουν ακόμη συντεχνίες.", - "unnamedGuild": "Ανώνυμη συντεχνία", - "noDescription": "Καμία περιγραφή" - }, - "guild": { - "allGuilds": "← Όλες οι συντεχνίες", - "unnamedGuild": "Ανώνυμη συντεχνία", - "noDescription": "Καμία περιγραφή", - "memberSingular": "Μέλος", - "memberPlural": "Μέλη", - "founded": "Ιδρύθηκε", - "forumLink": "Φόρουμ →", - "discussion": "Συζήτηση", - "membersTitle": "Μέλη", - "memberLowerSingular": "μέλος", - "memberLowerPlural": "μέλη", - "noMembers": "Κανένα μέλος.", - "owner": "Ιδιοκτήτης", - "noMotto": "Χωρίς σύνθημα" - }, - "guildForum": { - "backToGuild": "← Επιστροφή στη συντεχνία", - "unnamedGuild": "Ανώνυμη συντεχνία", - "forumTitle": "{guild} — Φόρουμ", - "threadSingular": "νήμα", - "threadPlural": "κλωστές", - "newThread": "+ Νέο νήμα", - "empty": "Δεν υπάρχουν ακόμη θέματα σε αυτό το φόρουμ.", - "colSubject": "Θέμα", - "colAuthor": "Συγγραφέας", - "colPosts": "Αναρτήσεις", - "colDate": "Ημερομηνία", - "noSubject": "(χωρίς θέμα)", - "pinned": "Καρφιτσωμένο", - "locked": "Κλειδωμένο", - "userNumber": "Χρήστης #{id}", - "unknown": "Άγνωστο", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Επιστροφή στο φόρουμ", - "unnamedGuild": "Ανώνυμη συντεχνία", - "title": "Νέο νήμα", - "subtitle": "στο φόρουμ {guild}", - "subjectLabel": "Θέμα", - "subjectPlaceholder": "Θέμα νήματος", - "messageLabel": "Μήνυμα", - "messagePlaceholder": "Γράψτε την αρχική σας ανάρτηση…", - "postThread": "Δημοσίευση νήματος", - "cancel": "Ακύρωση", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Κατάστημα", - "subtitle": "Συμπληρώστε τον λογαριασμό σας και αποκτήστε αποκλειστικά πακέτα, νόμισμα και σήματα.", - "browsingCategory": "Περιήγηση στα πακέτα {category}.", - "all": "Όλα", - "allPackages": "Όλα τα πακέτα", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "Δεν υπάρχουν διαθέσιμα πακέτα αυτήν τη στιγμή.", - "buy": "Αγοράστε", - "loginToBuy": "Log in to buy", - "creditsHint": "Packages are paid with in-game credits. Top up first if you need more.", - "topUpLink": "Top up credits", - "priceCredits": "{credits} credits (≈ {usd})", - "priceCreditsShort": "{credits} cr", - "success": { - "bought": "Package purchased — rewards have been added to your account.", - "boughtNamed": "You purchased \"{name}\" — rewards have been added to your account." - }, - "errors": { - "invalid": "That package is no longer available.", - "credits": "You don't have enough credits for this package.", - "ratelimit": "You're purchasing too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "topup": { - "title": "Συμπληρώστε με PayPal", - "subtitle": "Πληρώστε με ασφάλεια με το PayPal και οι πιστώσεις σας προστίθενται τη στιγμή που εκκαθαρίζεται η πληρωμή.", - "cancelled": "Το ταμείο ακυρώθηκε - δεν έγινε πληρωμή.", - "chooseAmount": "Επιλέξτε ένα ποσό", - "notConfiguredPre": "Το PayPal δεν έχει ρυθμιστεί ακόμα. Πρέπει να οριστεί ένας διαχειριστής", - "notConfiguredAnd": "και", - "notConfiguredOptional": "(και προαιρετικά", - "notConfiguredPost": "για sandbox εναντίον live).", - "balanceTitle": "Το υπόλοιπό σας", - "signedInAs": "Συνδεθήκατε ως {username}", - "credits": "Πιστώσεις", - "creditsPerUnit": "Πιστώσεις ανά 1,00 {currency}", - "rateLine": "Λαμβάνετε πιστώσεις {amount} ανά 1,00 {currency}. Οι πιστώσεις εμφανίζονται στο παιχνίδι την επόμενη φορά που θα συνδεθείτε." - }, - "marketplace": { - "title": "Αγορά", - "subtitle": "Περιηγηθείτε σε έπιπλα και σπάνια που αναφέρονται από παίκτες. Οι καταχωρίσεις τοποθετούνται στο παιχνίδι και ενημερώνονται ζωντανά — κατευθυνθείτε στο ξενοδοχείο για να κάνετε μια προσφορά.", - "activeOffers": "Ενεργές προσφορές", - "sellers": "Πωλητές", - "totalValue": "Συνολική αξία", - "activeListings": "Ενεργές καταχωρίσεις", - "mostRecentFirst": "Η πιο πρόσφατη λίστα πρώτη", - "empty": "Δεν υπάρχουν ενεργές προσφορές αγοράς αυτήν τη στιγμή. Ελέγξτε ξανά αργότερα.", - "colOffer": "Προσφορά", - "colItem": "Στοιχείο", - "colSeller": "Πωλητής", - "colPrice": "Τιμή", - "colListed": "Εισηγμένη", - "itemLabel": "Στοιχείο #{id}", - "userLabel": "Χρήστης #{id}", - "justNow": "μόλις τώρα", - "minutesAgo": "πριν από {count}λ", - "hoursAgo": "{count}h πριν", - "daysAgo": "πριν από {count}d" - }, - "rares": { - "title": "Σπάνιες αξίες", - "subtitle": "Πάρτε μια επισκόπηση όλων των σπάνιων στο ξενοδοχείο, ομαδοποιημένα ανά κατηγορία.", - "empty": "Προς το παρόν δεν έχουμε σπάνια που αναφέρονται εδώ.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Προβολή σπάνιων →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Όλα σπάνια", - "empty": "Δεν υπάρχουν ακόμα σπάνια είδη σε αυτήν την κατηγορία.", - "colRare": "Σπάνιο", - "colCredits": "Πιστώσεις", - "colCurrency": "Νόμισμα", - "creditsValue": "{value} πιστώσεις", - "duckets": "Παπιάκια", - "diamonds": "Διαμάντια", - "credits": "Πιστώσεις" - }, - "redeem": { - "title": "Εξαργυρώστε ένα κουπόνι", - "subtitle": "Έχετε κωδικό κουπονιού; Εισαγάγετε το παρακάτω για να προσθέσετε την ανταμοιβή στον λογαριασμό σας.", - "enterCode": "Εισαγάγετε τον κωδικό σας", - "oncePerAccount": "Κάθε κουπόνι μπορεί να εξαργυρωθεί μόνο μία φορά ανά λογαριασμό.", - "balanceTitle": "Το υπόλοιπό σας", - "signedInAs": "Συνδεθήκατε ως {username}", - "credits": "Πιστώσεις", - "instantCredit": "Οι εξαργυρωμένες ανταμοιβές πιστώνονται αμέσως και εμφανίζονται στο παιχνίδι την επόμενη φορά που θα συνδεθείτε." - }, - "help": { - "title": "Κέντρο βοήθειας", - "subtitle": "Βρείτε οδηγούς, θέματα υποστήριξης και τους κανόνες του ξενοδοχείου — όλα όσα χρειάζεστε για να λάβετε βοήθεια.", - "myTickets": "Τα εισιτήριά μου →", - "topicsTitle": "Υποστήριξη θεμάτων", - "topicsSubtitle": "Περιηγηθείτε σε οδηγούς και απαντήσεις σε συνήθεις ερωτήσεις", - "topicsEmpty": "Δεν υπάρχουν ακόμα θέματα βοήθειας.", - "rulesTitle": "Κανόνες ξενοδοχείου", - "rulesSubtitle": "Παρακαλούμε διαβάστε αυτά πριν κάνετε παρέα στο ξενοδοχείο", - "rulesEmpty": "Δεν έχουν δημοσιευθεί ακόμη κανόνες.", - "categoryEmpty": "Δεν υπάρχουν κανόνες σε αυτή την κατηγορία." - }, - "helpCategory": { - "back": "← Κέντρο βοήθειας", - "topicSubtitle": "Θέμα Κέντρου βοήθειας", - "moreTitle": "Περισσότερα θέματα βοήθειας", - "moreSubtitle": "Μετάβαση σε άλλο θέμα υποστήριξης" - }, - "helpTickets": { - "title": "Εισιτήρια βοήθειας", - "subtitle": "Υποβάλετε ένα εισιτήριο στο προσωπικό και παρακολουθήστε τα ανοιχτά αιτήματά σας.", - "statTotal": "Σύνολο εισιτηρίων", - "statOpen": "Ανοίξτε", - "statClosed": "Κλειστό", - "newTitle": "Νέο εισιτήριο", - "newSubtitle": "Περιγράψτε το πρόβλημά σας και το προσωπικό θα σας δώσει συνέχεια", - "subjectPlaceholder": "Θέμα", - "contentPlaceholder": "Περιγράψτε το πρόβλημά σας…", - "submit": "Υποβολή εισιτηρίου", - "listTitle": "Τα εισιτήριά σας", - "listSubtitle": "Κάθε αίτημα που έχετε στείλει στο προσωπικό", - "listEmpty": "Δεν έχετε εισιτήρια ακόμα.", - "colId": "ID", - "colSubject": "Θέμα", - "colStatus": "Κατάσταση", - "colCreated": "Δημιουργήθηκε", - "statusOpen": "Ανοίξτε", - "statusClosed": "Κλειστό", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Κάντε αίτηση για προσωπικό {hotel}", - "subtitle": "Ανοίγουμε αιτήσεις προσωπικού κάθε τόσο. Αν συναντήσετε μια θέση που πιστεύετε ότι θα ταιριάζετε τέλεια, μη διστάσετε να κάνετε αίτηση για αυτήν.", - "noPositionsTitle": "Δεν υπάρχουν ανοιχτές θέσεις", - "noPositionsBody": "Αυτήν τη στιγμή δεν υπάρχουν ανοιχτές θέσεις. Επιστρέψτε αργότερα για να ελέγξετε εάν έχουμε ανοίξει μέχρι τότε. Σας ευχαριστούμε για το ενδιαφέρον σας.", - "noDeadline": "Δεν έχει οριστεί προθεσμία", - "deadline": "Προθεσμία υποβολής αιτήσεων: {date}", - "alreadyApplied": "Έχετε ήδη υποβάλει αίτηση για {rank}", - "aboutYou": "Σχετικά με εσάς", - "aboutPlaceholder": "Πείτε μας γιατί θα ήσασταν εξαιρετικός {rank}…", - "applyFor": "Αίτηση για {rank}", - "success": { - "submitted": "Application submitted — staff will review it soon." - }, - "errors": { - "empty": "Please write at least 10 characters about yourself.", - "invalid": "Invalid application.", - "duplicate": "You have already applied for this position.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "applyTeam": { - "title": "Κάντε αίτηση για την ομάδα του {hotel}", - "subtitle": "Ανοίγουμε περιοδικά αιτήσεις ομάδας. Αν δείτε μια ομάδα που σας ταιριάζει, μην διστάσετε να κάνετε αίτηση!", - "noPositionsTitle": "Δεν υπάρχουν ανοιχτές θέσεις ομάδας", - "noPositionsBody": "Αυτήν τη στιγμή δεν υπάρχουν ανοιχτές θέσεις ομάδας. Επιστρέψτε αργότερα για να ελέγξετε για νέα ανοίγματα. Σας ευχαριστώ!", - "pending": "Η αίτησή σας είναι σε εκκρεμότητα", - "aboutYou": "Σχετικά με εσάς", - "aboutPlaceholder": "Πείτε μας γιατί θα ήσασταν πολύ κατάλληλοι για το {rank}…", - "applyFor": "Αίτηση για {rank}", - "success": { - "submitted": "Application submitted — staff will review it soon." - }, - "errors": { - "empty": "Please write at least 10 characters about yourself.", - "invalid": "Invalid application.", - "duplicate": "You have already applied for this team.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radio": { - "title": "Ραδιόφωνο", - "subtitle": "Συντονιστείτε στο ραδιόφωνο του ξενοδοχείου — ζωντανά σετ DJ, αιτήματα και φωνές.", - "nowPlaying": "Τώρα παίζει", - "nothingPlaying": "Δεν παίζει τίποτα αυτή τη στιγμή.", - "onAir": "On air: {dj}", - "noDj": "Χωρίς DJ στον αέρα.", - "audioUnsupported": "Το πρόγραμμα περιήγησής σας δεν υποστηρίζει το στοιχείο ήχου.", - "streamOffline": "Η ροή αυτή τη στιγμή είναι εκτός σύνδεσης.", - "exploreTitle": "Εξερευνήστε το ραδιόφωνο", - "exploreSubtitle": "Πρόγραμμα, κραυγές, αιτήματα και πολλά άλλα", - "linkSchedule": "Πρόγραμμα", - "linkScheduleText": "Η εβδομαδιαία μας σύνθεση από DJs και σόου.", - "linkShouts": "Κραυγές", - "linkShoutsText": "Κραυγές και αιτήματα από την κοινότητα.", - "linkRequests": "Αιτήματα", - "linkRequestsText": "Ζητήστε από τον DJ να περιγράψει το αγαπημένο σας κομμάτι.", - "linkApply": "Αίτηση ως DJ", - "linkApplyText": "Γίνετε μέλος της ομάδας και βγείτε στα ερτζιανά.", - "linkLeaderboard": "Leaderboard", - "linkLeaderboardText": "Οι κορυφαίοι ακροατές ταξινομούνται με βάση τους πόντους που έχουν κερδίσει.", - "todayTitle": "Το σημερινό πρόγραμμα", - "todayTitleWithDay": "Το σημερινό πρόγραμμα · {day}", - "todaySubtitle": "Τι κυκλοφορεί σήμερα στα ερτζιανά", - "fullWeek": "Ολόκληρη εβδομάδα →", - "noShowsToday": "Δεν έχουν προγραμματιστεί εμφανίσεις για σήμερα.", - "colTime": "Χρόνος", - "colShow": "Εμφάνιση", - "colDj": "DJ", - "untitledShow": "Παράσταση χωρίς τίτλο", - "userNumber": "Χρήστης #{id}" - }, - "radioSchedule": { - "title": "Πρόγραμμα ραδιοφώνου", - "subtitle": "Η εβδομαδιαία μας σύνθεση από DJs και σόου", - "empty": "Δεν έχουν προγραμματιστεί ακόμη εμφανίσεις.", - "colDay": "Ημέρα", - "colTime": "Χρόνος", - "colDj": "DJ", - "colShow": "Εμφάνιση", - "noShows": "Δεν υπάρχουν παραστάσεις" - }, - "radioShouts": { - "title": "Κραυγές ραδιοφώνου", - "subtitle": "Κραυγές και αιτήματα από την κοινότητα", - "postTitle": "Δημοσιεύστε μια κραυγή", - "postSubtitle": "Στείλτε ένα μήνυμα στον DJ on air", - "messageLabel": "Το μήνυμά σας", - "messagePlaceholder": "Στείλτε μια κραυγή στον DJ…", - "shoutButton": "Φωνάξτε", - "loginToPost": "Συνδεθείτε για να δημοσιεύσετε μια κραυγή.", - "latestTitle": "Τελευταίες κραυγές", - "latestSubtitle": "Τα πιο πρόσφατα μηνύματα από ακροατές", - "empty": "Χωρίς φωνές ακόμα. Γίνε ο πρώτος!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Διαγωνισμοί Ραδιοφώνου", - "subtitle": "Συντονιστείτε και λάβετε μέρος στους τελευταίους on-air διαγωνισμούς μας", - "empty": "Δεν υπάρχουν ακόμη διαγωνισμοί.", - "contestLabel": "Διαγωνισμός #{id}", - "dateUnknown": "Ημερομηνία άγνωστη" - }, - "radioGiveaways": { - "title": "Ραδιόφωνο Giveaways", - "subtitle": "Ακούστε την ευκαιρία σας να κερδίσετε στα δώρα μας στο ραδιόφωνο", - "empty": "Δεν υπάρχουν ακόμη δώρα.", - "giveawayLabel": "Δώρο #{id}", - "dateUnknown": "Ημερομηνία άγνωστη" - }, - "radioLeaderboard": { - "title": "Πίνακας κορυφαίων ακροατών ραδιοφώνου", - "subtitle": "Οι κορυφαίοι 50 ακροατές ανά πόντους που κέρδισαν συντονίζοντας στο ραδιόφωνο", - "empty": "Δεν υπάρχουν σημεία ακροατής για εμφάνιση ακόμα.", - "colRank": "Κατάταξη", - "colAvatar": "Avatar", - "colListener": "Ακροατής", - "colPoints": "Πόντοι" - }, - "radioRequests": { - "formTitle": "Υποβάλετε ένα αίτημα", - "formSubtitle": "Ζητήστε από τον DJ να παίξει το αγαπημένο σας κομμάτι", - "songLabel": "Τραγούδι", - "songPlaceholder": "Ο τίτλος του τραγουδιού", - "artistLabel": "Καλλιτέχνης", - "artistPlaceholder": "Όνομα καλλιτέχνη (προαιρετικό)", - "submitButton": "Υποβολή αιτήματος", - "loginToRequest": "Συνδεθείτε για να υποβάλετε αίτημα.", - "latestTitle": "Πρόσφατα αιτήματα", - "latestSubtitle": "Τα πιο πρόσφατα τραγούδια που ζητήθηκαν", - "empty": "Δεν υπάρχουν ακόμη αιτήματα.", - "colSong": "Τραγούδι", - "colArtist": "Καλλιτέχνης", - "colRequester": "Αιτητής", - "colDate": "Ημερομηνία", - "colStatus": "Κατάσταση", - "statusPending": "Σε εκκρεμότητα", - "statusApproved": "Εγκρίθηκε", - "statusPlayed": "Έπαιξε", - "success": { - "posted": "Request submitted." - }, - "errors": { - "empty": "Please enter a song title or artist.", - "invalid": "Invalid request.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioApply": { - "title": "Κάντε αίτηση για να γίνετε DJ στο ραδιόφωνο", - "subtitle": "Πες μας για σένα και γιατί θα ταίριαζες πολύ στα ερτζιανά", - "latestTitle": "Η τελευταία σας εφαρμογή", - "statusLabel": "Κατάσταση:", - "submittedOn": "· υποβλήθηκε {date}", - "submitAgain": "Μπορείτε να υποβάλετε ξανά παρακάτω εάν τα στοιχεία σας έχουν αλλάξει.", - "formTitle": "Έντυπο αίτησης", - "formSubtitle": "Πρέπει να συμπληρωθούν όλα τα πεδία που επισημαίνονται ως υποχρεωτικά", - "realNameLabel": "Πραγματικό όνομα", - "realNamePlaceholder": "Το πλήρες όνομά σας", - "ageLabel": "Ηλικία", - "availabilityLabel": "Διαθεσιμότητα", - "availabilityPlaceholder": "Ποιες ημέρες και ώρες μπορείτε να μεταδώσετε;", - "musicStyleLabel": "Μουσικό στυλ", - "musicStylePlaceholder": "π.χ. House, Pop, Hip-Hop", - "experienceLabel": "Εμπειρία", - "optional": "(προαιρετικό)", - "experiencePlaceholder": "Κάποια προηγούμενη εμπειρία DJ ή φιλοξενίας;", - "motivationLabel": "Κίνητρο", - "motivationPlaceholder": "Γιατί θέλετε να γίνετε μέλος της ομάδας του ραδιοφώνου;", - "submitButton": "Υποβολή αίτησης", - "success": { - "submitted": "Application submitted — we will get back to you soon." - }, - "errors": { - "invalid": "Please fill in all required fields.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "settings": { - "accountSettings": "Ρυθμίσεις λογαριασμού", - "accountSettingsSubtitle": "Διαχειριστείτε το προφίλ, την ασφάλεια και τους συνδεδεμένους λογαριασμούς σας", - "publicProfile": "Το δημόσιο προφίλ σας", - "noMotto": "Χωρίς σύνθημα", - "noEmail": "Δεν υπάρχει e-mail στο αρχείο", - "changeMotto": "Άλλαξε μότο", - "changeMottoSubtitle": "Ενημερώνεται άμεσα στο παιχνίδι εάν είστε συνδεδεμένοι", - "mottoPlaceholder": "Το μότο σου", - "saveMotto": "Αποθήκευση σύνθημα", - "securityTitle": "Ασφάλεια", - "securitySubtitle": "Έλεγχος ταυτότητας δύο παραγόντων", - "securityDescription": "Προσθέστε ένα δεύτερο επίπεδο προστασίας στον λογαριασμό σας.", - "twoFactorLink": "Έλεγχος ταυτότητας δύο παραγόντων" - }, - "settings2fa": { - "backToSettings": "← Ρυθμίσεις", - "title": "Έλεγχος ταυτότητας δύο παραγόντων", - "subtitle": "Προσθέστε ένα δεύτερο επίπεδο ασφάλειας με μια εφαρμογή ελέγχου ταυτότητας", - "nowEnabled": "Το 2FA είναι πλέον ενεργοποιημένο. 🔒", - "disabledNotice": "Το 2FA έχει απενεργοποιηθεί.", - "badCode": "Αυτός ο κωδικός δεν ήταν έγκυρος — δοκιμάστε ξανά.", - "noAppKeyPrefix": "Το 2FA δεν είναι διαθέσιμο μέχρι", - "noAppKeyMiddle": "έχει ρυθμιστεί (το ίδιο Laravel", - "noAppKeySuffix": "καθώς εγκαθιστάτε το AtomCMS, έτσι τα υπάρχοντα μυστικά παραμένουν αναγνώσιμα).", - "isEnabled": "Το 2FA είναι ενεργοποιημένο", - "onYourAccount": "στον λογαριασμό σας.", - "disable": "Απενεργοποιήστε το 2FA", - "scanOrEnter": "Σαρώστε ή εισαγάγετε αυτό το κλειδί", - "scanInstructions": "Προσθέστε το στο Google Authenticator / Authy και, στη συνέχεια, εισαγάγετε τον 6ψήφιο κωδικό για επιβεβαίωση.", - "manualKey": "Χειροκίνητο κλειδί:", - "codePlaceholder": "6ψήφιος κωδικός", - "confirm": "Επιβεβαίωση", - "enableIntro": "Προσθέστε ένα δεύτερο επίπεδο ασφάλειας με μια εφαρμογή ελέγχου ταυτότητας.", - "enable": "Ενεργοποίηση 2FA" - }, - "title": "Συνδεδεμένοι λογαριασμοί", - "subtitle": "Συνδέστε έναν λογαριασμό κοινωνικής δικτύωσης για να μπορείτε να συνδεθείτε με ένα κλικ", - "connected": "Συνδεδεμένος", - "unavailable": "Μη διαθέσιμο", - "login": { - "title": "Συνδεθείτε", - "subtitle": "Καλώς ήρθατε πίσω — συνδεθείτε για να μπείτε στο ξενοδοχείο.", - "subtitle2fa": "Εισαγάγετε τον 6ψήφιο κωδικό από τον έλεγχο ταυτότητας.", - "usernamePlaceholder": "Όνομα χρήστη", - "passwordPlaceholder": "Κωδικός πρόσβασης", - "codePlaceholder": "Κωδικός 2FA", - "pleaseWait": "Παρακαλώ περιμένετε…", - "verify": "Επαλήθευση", - "signIn": "Συνδεθείτε", - "or": "ή", - "noAccount": "Δεν υπάρχει λογαριασμός;", - "createOne": "Δημιουργήστε ένα", - "forgotPassword": "Ξεχάσατε τον κωδικό πρόσβασης;", - "errorInvalidCredentials": "Μη έγκυρο όνομα χρήστη ή κωδικός πρόσβασης", - "errorInvalid2fa": "Μη έγκυρος κωδικός 2FA", - "welcomeBack": "Καλώς ήρθες πίσω", - "welcomeBackSub": "Συνδέσου για να συνεχίσεις στο {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Δημιουργία λογαριασμού", - "subtitle": "Εγγραφείτε στο ξενοδοχείο - χρειάζεται μόνο μια στιγμή.", - "username": "Όνομα χρήστη", - "email": "Email", - "password": "Κωδικός πρόσβασης", - "confirmPassword": "Επαναλάβετε τον κωδικό πρόσβασης", - "usernamePlaceholder": "Όνομα χρήστη", - "emailPlaceholder": "Email", - "passwordPlaceholder": "Κωδικός πρόσβασης (ελάχ. 6 χαρακτήρες)", - "confirmPasswordPlaceholder": "Επαναλάβετε τον κωδικό πρόσβασης", - "selectOutfit": "Επιλέξτε το ντύσιμό σας", - "termsAccept": "Είμαι 18+ και αποδέχομαι τους όρους και τους κανόνες του {hotel}.", - "createAccount": "Δημιουργία λογαριασμού", - "creatingAccount": "Δημιουργία λογαριασμού...", - "redirecting": "Ανακατεύθυνση στον λογαριασμό σας...", - "alreadyHaveAccount": "Έχετε ήδη λογαριασμό; Σύνδεση!", - "register": "Εγγραφή", - "termsError": "Πρέπει να αποδεχτείτε τους όρους και τους κανόνες για να εγγραφείτε.", - "usernameError": "Απαιτείται όνομα χρήστη.", - "emailError": "Απαιτείται έγκυρο email.", - "passwordError": "Ο κωδικός πρόσβασης πρέπει να αποτελείται από τουλάχιστον 6 χαρακτήρες.", - "confirmPasswordError": "Οι κωδικοί πρόσβασης δεν ταιριάζουν.", - "termsRequired": "Πρέπει να αποδεχτείτε τους όρους και τους κανόνες.", - "usernameRequired": "Απαιτείται όνομα χρήστη.", - "emailRequired": "Απαιτείται email.", - "passwordRequired": "Απαιτείται κωδικός πρόσβασης.", - "passwordsDontMatch": "Οι κωδικοί πρόσβασης δεν ταιριάζουν.", - "alreadyHaveAccountPre": "Έχεις ήδη λογαριασμό;", - "alreadyHaveAccountLink": "Σύνδεση", - "whoIsOnline": "Ποιος είναι συνδεδεμένος", - "usersOnline": "{count} συνδεδεμένοι" - }, - "forgot": { - "title": "Επαναφορά κωδικού πρόσβασης", - "subtitle": "Θα σας στείλουμε με email έναν ασφαλή σύνδεσμο για να ορίσετε νέο κωδικό πρόσβασης.", - "sentNotice": "Εάν αυτό το email είναι καταχωρημένο, έχει σταλεί ένας σύνδεσμος επαναφοράς. Ελέγξτε τα εισερχόμενά σας.", - "emailPlaceholder": "Το email σας", - "sendResetLink": "Αποστολή συνδέσμου επαναφοράς", - "backToLogin": "Επιστροφή στην είσοδο", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Ορίστε νέο κωδικό πρόσβασης", - "subtitle": "Επιλέξτε έναν ισχυρό κωδικό πρόσβασης που δεν χρησιμοποιείτε αλλού.", - "passwordPlaceholder": "Νέος κωδικός πρόσβασης (ελάχ. 6 χαρακτήρες)", - "resetPassword": "Επαναφορά κωδικού πρόσβασης", - "backToLogin": "Επιστροφή στην είσοδο" - }, - "verify": { - "verifiedTitle": "Είστε έτοιμοι", - "verifiedSubtitle": "Το email επαληθεύτηκε", - "verifiedBody": "Η διεύθυνση email σας έχει επαληθευτεί. Τώρα μπορείτε να συνδεθείτε και να παίξετε.", - "goToLogin": "Μεταβείτε στη σύνδεση", - "alreadyTitle": "Έχει ήδη επαληθευτεί", - "alreadySubtitle": "Δεν μένει τίποτα να κάνουμε", - "alreadyBody": "Αυτή η διεύθυνση ηλεκτρονικού ταχυδρομείου έχει ήδη επιβεβαιωθεί.", - "unavailableTitle": "Προσπαθήστε ξανά σύντομα", - "unavailableSubtitle": "Ο διακομιστής δεν είναι προσβάσιμος", - "unavailableBody": "Δεν μπορέσαμε να επικοινωνήσουμε με τον διακομιστή για να επαληθεύσουμε το email σας. Δοκιμάστε ξανά τον σύνδεσμο σε λίγο.", - "invalidTitle": "Επαλήθευση μέσω email", - "invalidSubtitle": "Μη έγκυρος ή ληγμένος σύνδεσμος", - "invalidBody": "Αυτός ο σύνδεσμος επαλήθευσης δεν είναι έγκυρος. Βεβαιωθείτε ότι έχετε ανοίξει τον πλήρη σύνδεσμο από το email σας ή ζητήστε νέο.", - "backToLogin": "Επιστροφή στην είσοδο" - }, - "banned": { - "title": "Είστε απαγορευμένοι", - "subtitle": "Ο λογαριασμός έχει ανασταλεί", - "body": "Ο λογαριασμός σας έχει τεθεί σε αναστολή από το ξενοδοχείο.", - "reasonLabel": "Λόγος:", - "permanent": "Αυτή η απαγόρευση είναι μόνιμη.", - "expires": "Λήγει στις {date}.", - "contactStaff": "Εάν πιστεύετε ότι πρόκειται για λάθος, επικοινωνήστε με την ομάδα του προσωπικού." - }, - "maintenance": { - "title": "Το {hotel} βρίσκεται υπό συντήρηση", - "subtitle": "Θα επιστρέψουμε σύντομα", - "staffCanLogIn": "Το προσωπικό μπορεί ακόμα να συνδεθεί." - }, - "admin": { - "nav": { - "overview": "Επισκόπηση", - "dashboard": "Ταμπλό", - "content": "περιεχόμενο", - "articles": "Άρθρα", - "tags": "Ετικέτες", - "navigator": "Πλοηγός", - "helpCenter": "Κέντρο βοήθειας", - "advertisements": "Διαφημίσεις", - "writeableBoxes": "Εγγράψιμα κουτιά", - "photos": "Φωτογραφίες", - "tickets": "Εισιτήρια", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Χρήστες και πρόσβαση", - "users": "Χρήστες", - "bans": "Απαγορεύσεις", - "ipManagement": "Διαχείριση IP", - "vpn": "VPN", - "applications": "Εφαρμογές", - "teams": "Ομάδες", - "permissions": "Άδειες", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Οικονομία", - "catalog": "Κατάλογος", - "shop": "Κατάστημα", - "transactions": "Συναλλαγές", - "vouchers": "Κουπόνια", - "subscriptions": "Συνδρομές", - "rareValues": "Σπάνιες αξίες", - "badges": "Σήματα", - "achievements": "Επιτεύγματα", - "calendar": "Ημερολόγιο", - "radio": "Ραδιόφωνο", - "radioHistory": "Ιστορία του ραδιοφώνου", - "radioBanners": "Πανό", - "radioEmbed": "Ενσωμάτωση", - "radioApiKeys": "Κλειδιά API", - "radioModeration": "Μέτρο", - "radioSettings": "Ρυθμίσεις", - "radioMonitoring": "Παρακολούθηση", - "radioPoints": "Πόντοι", - "radioRanks": "Βαθμοί", - "radioAutodj": "Auto DJ", - "system": "Σύστημα", - "commandocentrum": "Commandocentrum", - "emulator": "Εξομοιωτής", - "alerts": "Ειδοποιήσεις", - "logs": "κούτσουρα", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Φίλτρο λέξεων", - "maintenance": "Συντήρηση", - "rooms": "Δωμάτια", - "emailTemplates": "Πρότυπα email", - "theme": "Θέμα", - "media": "ΜΜΕ", - "favicon": "Favicon", - "sounds": "Ήχοι", - "translations": "Μεταφράσεις", - "import": "Εισαγωγή", - "settings": "Ρυθμίσεις", - "backToSite": "Επιστροφή στον ιστότοπο", - "housekeeping": "Οικονομία", - "hotelManagementPanel": "Πάνελ διαχείρισης ξενοδοχείου", - "rankLabel": "Κατάταξη {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Ταμπλό", - "subtitle": "Επισκόπηση ξενοδοχείου & ζωντανή κατάσταση", - "playersOnline": "Παίκτες σε απευθείας σύνδεση", - "articles": "Άρθρα", - "activeBans": "Ενεργές απαγορεύσεις", - "database": "Βάση δεδομένων", - "databaseConnected": "Συνδεδεμένος", - "databaseDown": "Κάτω", - "usersByRank": "Χρήστες ανά κατάταξη", - "noAccountsToBreakDown": "Δεν υπάρχουν ακόμη λογαριασμοί για ανάλυση", - "rankLabel": "Κατάταξη {rank}", - "rankWithCount": "Κατάταξη {rank}: {count} λογαριασμοί", - "recentStaffActivity": "Πρόσφατη δραστηριότητα του προσωπικού", - "viewAll": "Προβολή όλων", - "noStaffActivityLogged": "Δεν έχει καταγραφεί ακόμη δραστηριότητα προσωπικού" - }, - "articles": { - "title": "Άρθρα", - "subtitle": "Άρθρα ειδήσεων — 50 πιο πρόσφατα", - "newArticle": "+ Νέο άρθρο", - "edit": "Επεξεργασία", - "delete": "Διαγραφή", - "noArticles": "Δεν υπάρχουν ακόμη άρθρα", - "confirmDelete": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το \"{title}\";", - "colTitle": "Τίτλος", - "colSlug": "γυμνοσάλιαγκας", - "colAuthor": "Συγγραφέας", - "colCreated": "Δημιουργήθηκε", - "colActions": "Δράσεις", - "form": { - "title": "Τίτλος", - "titlePlaceholder": "Τίτλος άρθρου", - "slug": "γυμνοσάλιαγκας", - "slugPlaceholder": "άρθρο-url-slug", - "category": "Κατηγορία", - "categoryPlaceholder": "Επιλέξτε μια κατηγορία", - "body": "Σώμα", - "bodyPlaceholder": "Γράψτε το περιεχόμενο του άρθρου σας…", - "image": "Εικόνα", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Μικρογραφία", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Δημοσιεύθηκε", - "featured": "Προτεινόμενα", - "save": "Αποθήκευση άρθρου", - "saving": "Αποθήκευση…", - "deleteArticle": "Διαγραφή άρθρου", - "deleteConfirm": "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί. Το άρθρο θα καταργηθεί οριστικά.", - "cancel": "Ακύρωση", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Ετικέτες", - "subtitle": "Ετικέτες / κατηγορίες άρθρων", - "addTag": "Προσθήκη ετικέτας", - "name": "Όνομα", - "namePlaceholder": "Όνομα ετικέτας", - "backgroundColour": "Χρώμα φόντου", - "createTag": "Δημιουργία ετικέτας", - "editTag": "Επεξεργασία ετικέτας", - "updateTag": "Ενημέρωση ετικέτας", - "deleteTag": "Διαγραφή ετικέτας", - "confirmDelete": "Διαγραφή \"{name}\";", - "noTags": "Δεν υπάρχουν ακόμη ετικέτες", - "colId": "ID", - "colTag": "Ετικέτα", - "colColour": "Χρώμα", - "colUsedBy": "Χρησιμοποιείται από", - "colCreated": "Δημιουργήθηκε", - "colActions": "Δράσεις" - }, - "navigation": { - "title": "Πλοηγός", - "flatCategories": "Επίπεδες κατηγορίες", - "publicRooms": "Δημόσια δωμάτια", - "addCategory": "Προσθήκη κατηγορίας", - "editCategory": "Επεξεργασία κατηγορίας", - "deleteCategory": "Διαγραφή κατηγορίας", - "categoryName": "Όνομα κατηγορίας", - "categoryNamePlaceholder": "π.χ. Χαλαρά & Συνομιλία", - "categoryOrder": "Παραγγελία", - "roomName": "Όνομα δωματίου", - "roomNamePlaceholder": "π.χ. Lounge καλωσορίσματος", - "roomId": "ID δωματίου", - "roomIdPlaceholder": "Αριθμητικό αναγνωριστικό δωματίου", - "save": "Αποθήκευση", - "cancel": "Ακύρωση", - "noCategories": "Δεν υπάρχουν ακόμη κατηγορίες", - "noPublicRooms": "Δεν υπάρχουν ακόμη δημόσιοι χώροι", - "colId": "ID", - "colName": "Όνομα", - "colOrder": "Παραγγελία", - "colRooms": "Δωμάτια", - "colActions": "Δράσεις" - }, - "helpCenter": { - "title": "Κέντρο βοήθειας", - "subtitle": "Καταχωρίσεις υποστήριξης και διαχείριση συχνών ερωτήσεων", - "entries": "Συμμετοχές", - "newEntry": "+ Νέα καταχώρηση", - "edit": "Επεξεργασία", - "delete": "Διαγραφή", - "noEntries": "Δεν υπάρχουν ακόμη καταχωρήσεις", - "confirmDelete": "Διαγραφή \"{title}\";", - "colId": "ID", - "colTitle": "Τίτλος", - "colCategory": "Κατηγορία", - "colCreated": "Δημιουργήθηκε", - "colActions": "Δράσεις", - "form": { - "title": "Τίτλος", - "titlePlaceholder": "Τίτλος εισόδου", - "category": "Κατηγορία", - "categoryPlaceholder": "Επιλέξτε κατηγορία", - "body": "Σώμα", - "bodyPlaceholder": "Γράψε την απάντηση…", - "save": "Αποθήκευση καταχώρισης", - "saving": "Αποθήκευση…", - "deleteEntry": "Διαγραφή καταχώρισης", - "cancel": "Ακύρωση" - } - }, - "ads": { - "title": "Διαφημίσεις", - "subtitle": "Διαχειριστείτε διαφημίσεις ξενοδοχείων και διαφημιστικά banner", - "newAd": "+ Νέα διαφήμιση", - "edit": "Επεξεργασία", - "delete": "Διαγραφή", - "noAds": "Δεν υπάρχουν ακόμη διαφημίσεις", - "confirmDelete": "Διαγραφή αυτής της διαφήμισης;", - "colId": "ID", - "colName": "Όνομα", - "colImage": "Εικόνα", - "colUrl": "URL", - "colViews": "Απόψεις", - "colStatus": "Κατάσταση", - "colCreated": "Δημιουργήθηκε", - "colActions": "Δράσεις", - "form": { - "name": "Όνομα", - "namePlaceholder": "Όνομα διαφήμισης", - "image": "Διεύθυνση URL εικόνας", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Διεύθυνση URL στόχου", - "urlPlaceholder": "https://example.com", - "enabled": "Ενεργοποιημένο", - "save": "Αποθήκευση διαφήμισης", - "saving": "Αποθήκευση…", - "deleteAd": "Διαγραφή διαφήμισης", - "cancel": "Ακύρωση" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Εγγράψιμα κουτιά", - "subtitle": "Οι πίνακες περιεχομένου εμφανίζονται σε όλο το ξενοδοχείο και στο CMS", - "newBox": "Καινούργιο κουτί", - "edit": "Επεξεργασία", - "delete": "Διαγραφή", - "noBoxes": "Δεν υπάρχουν εγγράψιμα κουτιά ακόμα", - "confirmDelete": "Διαγραφή αυτού του πλαισίου;", - "colId": "ID", - "colName": "Όνομα", - "colLocation": "Τοποθεσία", - "colUpdated": "Ενημερώθηκε", - "colActions": "Δράσεις", - "form": { - "name": "Όνομα", - "namePlaceholder": "Όνομα κουτιού", - "location": "Τοποθεσία", - "locationPlaceholder": "π.χ. αρχική σελίδα, πλαϊνή γραμμή", - "content": "περιεχόμενο", - "contentPlaceholder": "Γράψτε το περιεχόμενο του κουτιού…", - "enabled": "Ενεργοποιημένο", - "save": "Πλαίσιο αποθήκευσης", - "saving": "Αποθήκευση…", - "deleteBox": "Διαγραφή πλαισίου", - "cancel": "Ακύρωση" - } - }, - "photos": { - "title": "Συντονισμός φωτογραφιών", - "subtitle": "Πρόσφατες φωτογραφίες κάμερας στο παιχνίδι", - "delete": "Διαγραφή", - "approve": "Έγκριση", - "noPhotos": "Δεν υπάρχουν φωτογραφίες για εποπτεία", - "confirmDelete": "Να διαγραφεί οριστικά αυτή η φωτογραφία;", - "colId": "ID", - "colPreview": "Προεπισκόπηση", - "colUser": "Χρήστης", - "colRoom": "δωμάτιο", - "colTimestamp": "Χρονική σήμανση", - "colActions": "Δράσεις", - "photoAlt": "Φωτογραφία χρήστη #{id}", - "byUser": "από {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Χρήστες", - "subtitle": "Περιηγηθείτε, αναζητήστε και διαχειριστείτε λογαριασμούς ξενοδοχείων", - "search": "Αναζήτηση", - "searchPlaceholder": "Αναζήτηση με όνομα χρήστη, email ή αναγνωριστικό…", - "searchResults": "{count, plural, one {# result} other {# results}} for \"{query}\"", - "noResults": "Δεν βρέθηκαν χρήστες", - "colId": "ID", - "colUsername": "Όνομα χρήστη", - "colEmail": "Email", - "colRank": "Κατάταξη", - "colOnline": "Διαδικτυακά", - "colRegistered": "Εγγεγραμμένος", - "colLastOnline": "Τελευταία σύνδεση", - "colActions": "Δράσεις", - "yes": "Ναι", - "no": "Όχι", - "edit": "Επεξεργασία", - "setRank": "Ορισμός κατάταξης", - "disconnect": "Αποσύνδεση", - "alert": "Συναγερμός", - "ban": "Απαγόρευση", - "detail": { - "title": "Χρήστης: {username}", - "subtitle": "Στοιχεία λογαριασμού και διαχείριση", - "overview": "Επισκόπηση", - "actions": "Δράσεις", - "username": "Όνομα χρήστη", - "email": "Email", - "motto": "Μότο", - "rank": "Κατάταξη", - "credits": "Πιστώσεις", - "duckets": "Παπιάκια", - "diamonds": "Διαμάντια", - "online": "Διαδικτυακά", - "registered": "Εγγεγραμμένος", - "lastOnline": "Τελευταία σύνδεση", - "ipAddress": "διεύθυνση IP", - "machineId": "Ταυτότητα μηχανήματος", - "sendAlert": "Αποστολή ειδοποίησης", - "sendMessage": "Αποστολή μηνύματος", - "disconnectUser": "Αποσύνδεση χρήστη", - "banUser": "Απαγόρευση χρήστη", - "resetPassword": "Επαναφορά κωδικού πρόσβασης", - "deleteUser": "Διαγραφή χρήστη", - "confirmDelete": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το {username}; Αυτό δεν μπορεί να αναιρεθεί.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Επεξεργασία χρήστη: {username}", - "subtitle": "Τροποποίηση στοιχείων λογαριασμού", - "username": "Όνομα χρήστη", - "usernamePlaceholder": "Όνομα χρήστη", - "email": "Email", - "emailPlaceholder": "user@example.com", - "motto": "Μότο", - "mottoPlaceholder": "Σύνθημα χρήστη", - "rank": "Κατάταξη", - "credits": "Πιστώσεις", - "duckets": "Παπιάκια", - "diamonds": "Διαμάντια", - "save": "Αποθήκευση αλλαγών", - "saving": "Αποθήκευση…", - "cancel": "Ακύρωση" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Απαγορεύσεις", - "subtitle": "Διαχειριστείτε τις απαγορεύσεις λογαριασμού, IP και μηχανημάτων", - "newBan": "Νέα απαγόρευση", - "edit": "Επεξεργασία", - "delete": "Διαγραφή", - "noBans": "Δεν υπάρχουν ακόμη απαγορεύσεις", - "confirmDelete": "Κατάργηση αυτής της απαγόρευσης;", - "colId": "ID", - "colValue": "Αξία", - "colType": "Τύπος", - "colReason": "Λόγος", - "colBannedBy": "Απαγορευμένος από", - "colExpires": "Λήγει", - "colCreated": "Δημιουργήθηκε", - "colActions": "Δράσεις", - "form": { - "value": "Αξία", - "valuePlaceholder": "Όνομα χρήστη, IP ή αναγνωριστικό μηχανής", - "type": "Τύπος", - "typeUser": "Χρήστης", - "typeIp": "IP", - "typeMachine": "Μηχανή", - "reason": "Λόγος", - "reasonPlaceholder": "Λόγος απαγόρευσης", - "expiresAt": "Λήγει στις", - "permanent": "Μόνιμη", - "save": "Αποθήκευση απαγόρευσης", - "saving": "Αποθήκευση…", - "cancel": "Ακύρωση" - } - }, - "ip": { - "title": "Διαχείριση IP", - "subtitle": "Διαχείριση της λευκής λίστας IP και της μαύρης λίστας", - "whitelist": "Λευκή λίστα", - "blacklist": "Μαύρη λίστα", - "addIp": "Προσθήκη IP", - "ipAddress": "διεύθυνση IP", - "ipAddressPlaceholder": "π.χ. 127.0.0.1", - "reason": "Λόγος", - "reasonPlaceholder": "Λόγος εγγραφής", - "add": "Προσθήκη", - "remove": "Αφαίρεση", - "confirmRemove": "Να καταργηθεί αυτή η IP από τη {list};", - "noWhitelistedIps": "Δεν υπάρχουν IP στη λίστα επιτρεπόμενων", - "noBlacklistedIps": "Δεν υπάρχουν IP στη μαύρη λίστα", - "colIp": "IP", - "colReason": "Λόγος", - "colAdded": "Προστέθηκε", - "colActions": "Δράσεις" - }, - "vpn": { - "title": "VPN / Ανίχνευση διακομιστή μεσολάβησης", - "subtitle": "Διαμορφώστε τις ρυθμίσεις εντοπισμού VPN και διακομιστή μεσολάβησης", - "enabled": "Ενεργοποιημένο", - "apiKey": "Κλειδί API", - "apiKeyPlaceholder": "Το κλειδί API εντοπισμού VPN", - "apiKeyHint": "Αφήστε κενό για απενεργοποίηση", - "blockOnDetect": "Αποκλεισμός ανίχνευσης", - "blockOnDetectHint": "Αυτόματος αποκλεισμός χρηστών που εντοπίστηκαν πίσω από VPN ή διακομιστή μεσολάβησης", - "save": "Αποθήκευση ρυθμίσεων", - "saving": "Αποθήκευση…", - "settingsSaved": "Οι ρυθμίσεις VPN αποθηκεύτηκαν με επιτυχία" - }, - "applications": { - "title": "Αιτήσεις προσωπικού", - "subtitle": "Εκκρεμείς και αναθεωρημένες αιτήσεις προσωπικού", - "pending": "Σε εκκρεμότητα", - "approved": "Εγκρίθηκε", - "rejected": "Απορρίφθηκε", - "noApplications": "Δεν υπάρχουν ακόμη αιτήσεις", - "colId": "ID", - "colApplicant": "αιτών", - "colPosition": "Θέση", - "colStatus": "Κατάσταση", - "colSubmitted": "Υποβλήθηκε", - "colActions": "Δράσεις", - "review": "Επανεξέταση", - "approve": "Έγκριση", - "reject": "Απόρριψη", - "confirmApprove": "Έγκριση {username} για {position};", - "confirmReject": "Να απορριφθεί η αίτηση του χρήστη {username} για {position};", - "detail": { - "title": "Εφαρμογή από {username}", - "subtitle": "Για {position}", - "about": "Σχετικά με τον αιτούντα", - "message": "Μήνυμα εφαρμογής", - "status": "Κατάσταση", - "submitted": "Υποβλήθηκε", - "noMessage": "Δεν παρέχεται μήνυμα" - } - }, - "teams": { - "title": "Ομάδες", - "subtitle": "Καθορίστε ονόματα και περιγραφές βαθμών προσωπικού", - "addRank": "Προσθήκη κατάταξης", - "editRank": "Επεξεργασία κατάταξης", - "deleteRank": "Διαγραφή κατάταξης", - "noTeams": "Δεν υπάρχουν ακόμη ορισμοί κατάταξης", - "confirmDelete": "Διαγραφή ορισμού κατάταξης {id};", - "colId": "ID", - "colRank": "Κατάταξη", - "colName": "Όνομα", - "colBadge": "Σήμα", - "colColour": "Χρώμα", - "colActions": "Δράσεις", - "form": { - "rankId": "Ταυτότητα κατάταξης", - "rankIdPlaceholder": "Αριθμητικό αναγνωριστικό κατάταξης", - "name": "Όνομα", - "namePlaceholder": "π.χ. Διαχειριστής", - "badge": "Κωδικός σήματος", - "badgePlaceholder": "π.χ. ADM001", - "colour": "Χρώμα", - "colourPlaceholder": "π.χ. #ff0000", - "save": "Αποθήκευση ορισμού ομάδας", - "saving": "Αποθήκευση…", - "cancel": "Ακύρωση" - } - }, - "permissions": { - "title": "Άδειες", - "subtitle": "Διαχειριστείτε τα δικαιώματα βάσει κατάταξης για τον πίνακα διαχείρισης", - "addPermission": "Προσθήκη άδειας", - "editPermission": "Άδεια επεξεργασίας", - "deletePermission": "Διαγραφή άδειας", - "noPermissions": "Δεν έχουν διαμορφωθεί ακόμη δικαιώματα", - "confirmDelete": "Διαγραφή αυτής της άδειας;", - "colId": "ID", - "colRank": "Κατάταξη", - "colPermission": "Άδεια", - "colCreated": "Δημιουργήθηκε", - "colActions": "Δράσεις", - "form": { - "rankId": "Ταυτότητα κατάταξης", - "rankIdPlaceholder": "Απαιτείται ελάχιστη κατάταξη", - "permission": "Κλειδί άδειας", - "permissionPlaceholder": "π.χ. admin.articles.manage", - "save": "Αποθήκευση άδειας", - "saving": "Αποθήκευση…", - "cancel": "Ακύρωση" - } - }, - "catalog": { - "title": "Κατάλογος", - "subtitle": "Περιηγηθείτε και διαχειριστείτε σελίδες και είδη καταλόγου", - "pages": "Σελίδες", - "items": "Είδη", - "addPage": "Προσθήκη σελίδας", - "editPage": "Επεξεργασία σελίδας", - "deletePage": "Διαγραφή σελίδας", - "addItem": "Προσθήκη στοιχείου", - "editItem": "Επεξεργασία στοιχείου", - "deleteItem": "Διαγραφή στοιχείου", - "noPages": "Δεν υπάρχουν ακόμη σελίδες καταλόγου", - "noItems": "Δεν υπάρχουν στοιχεία σε αυτήν τη σελίδα", - "confirmDeletePage": "Διαγραφή σελίδας καταλόγου \"{name}\";", - "confirmDeleteItem": "Διαγραφή αυτού του στοιχείου;", - "colId": "ID", - "colName": "Όνομα", - "colIcon": "εικονίδιο", - "colOrder": "Παραγγελία", - "colItems": "Είδη", - "colEnabled": "Ενεργοποιημένο", - "colActions": "Δράσεις", - "colItemId": "Αναγνωριστικό στοιχείου", - "colItemName": "Όνομα στοιχείου", - "colCostCredits": "Κόστος (πιστώσεις)", - "colCostPoints": "Κόστος (πόντους)", - "colLimited": "Περιορισμένη", - "pageForm": { - "name": "Όνομα", - "namePlaceholder": "Όνομα σελίδας", - "icon": "Αναγνωριστικό εικονιδίου", - "iconPlaceholder": "Αριθμητικό εικονίδιο ID", - "order": "Παραγγελία", - "enabled": "Ενεργοποιημένο", - "parent": "Γονική σελίδα", - "parentNone": "Κανένα (root)", - "save": "Αποθήκευση σελίδας", - "saving": "Αποθήκευση…", - "cancel": "Ακύρωση" - }, - "itemForm": { - "itemId": "Αναγνωριστικό στοιχείου", - "itemName": "Όνομα στοιχείου", - "costCredits": "Κόστος σε πιστώσεις", - "costDuckets": "Κόστος σε παπάκια", - "costDiamonds": "Κόστος σε διαμάντια", - "limitedStack": "Περιορισμένο μέγεθος στοίβας", - "limitedSold": "Περιορισμένη πώληση", - "save": "Αποθήκευση στοιχείου", - "saving": "Αποθήκευση…", - "cancel": "Ακύρωση" - }, - "packages": { - "openPackages": "Catalog packages", - "title": "Catalog packages", - "description": "Prepare category and price changes in a separate draft. Review the catalog before publishing.", - "createPackage": "New package", - "createDraft": "Create draft", - "draftCreated": "Package draft created. The live catalog has not changed.", - "refresh": "Refresh list", - "searchPackages": "Search packages", - "noPackages": "No packages match this search.", - "choosePackage": "Open a package or create a draft from existing categories.", - "name": "Package name", - "mode": "Publication mode", - "update": "Update existing categories", - "copy": "Create copies", - "updateHint": "Publication applies the package to its existing categories and offers.", - "copyHint": "Publication creates new categories and offers under the selected parent. Furniture references are preserved.", - "sourceCategories": "Source categories", - "packageLimits": "Descendant categories are included. Each package supports up to 200 categories and 500 offers.", - "searchCategories": "Search categories", - "selectedCategories": "Selected: {count}", - "targetParent": "Destination parent category", - "rootCategory": "Catalog root", - "draft": "Draft", - "published": "Published", - "editDraft": "Edit draft", - "catalogPreview": "Catalog preview", - "showBaseline": "Show the original saved snapshot", - "changes": "Before and after", - "entry": "Entry", - "field": "Field", - "before": "Before", - "after": "After", - "noChanges": "No edited fields compared with the original snapshot.", - "copyReview": "The entire package will be copied on publication, even if no fields were edited. The table lists edits to the original snapshot.", - "updateReview": "These draft changes will update existing catalog entries after publication.", - "saveDraft": "Save draft", - "saveHint": "Saving keeps the package as a draft. Save all changes before requesting a publication review.", - "draftSaved": "Draft saved. Publication is a separate step.", - "reviewPublication": "Review publication", - "publicationImpact": "Publication affects {pages} categories and {offers} offers.", - "conflicts": "Publication is blocked by conflicts. Resolve them before requesting another review.", - "readyToPublish": "The saved version passed the publication check. Publishing changes the live catalog.", - "publish": "Publish package", - "confirmPublish": "Publish this reviewed package to the live catalog now?", - "publishedSuccess": "Package published: {pages} categories and {offers} offers.", - "staleReview": "This package changed in another session. Reopen it to review the latest saved version.", - "unsaved": "Unsaved changes", - "discardChanges": "Discard unsaved package changes and continue?", - "working": "Working…", - "requestFailed": "The request failed. Try again.", - "invalidFields": "Check required names, layouts and whole-number fields before saving.", - "category": "Category", - "caption": "Category caption", - "iconImage": "Category icon ID", - "minRank": "Minimum rank", - "orderNum": "Display order", - "pageLayout": "Page layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "offers": "Offers ({count})", - "offer": "Offer", - "catalogName": "Offer name", - "costCredits": "Credits", - "costPoints": "Points", - "pointsType": "Points currency ID", - "amount": "Amount", - "searchOffers": "Search offers", - "currentCategoryOffers": "Only the selected category", - "selectMatching": "Select all matching offers ({count})", - "clearSelection": "Clear selection", - "selectedOffers": "Selected offers: {count}", - "select": "Select", - "selectOffer": "Select offer #{id}", - "noOffers": "No offers match these filters.", - "bulkPrices": "Bulk draft prices ({count} selected)", - "bulkHint": "Preview the selected price changes, then accept them into this draft. The live catalog remains unchanged until publication.", - "operation": "Operation", - "set": "Set value", - "add": "Add or subtract", - "percent": "Adjust by percent", - "value": "Value", - "reviewBulk": "Preview prices", - "invalidBulk": "Choose valid numbers and at least one offer. Resulting prices must be nonnegative and within the supported range.", - "acceptBulk": "Accept prices into draft", - "previous": "Previous", - "next": "Next" - }, - "integrity": { - "title": "Catalog integrity", - "description": "Check references, category paths, identifiers and furniture icons. Scanning does not change records.", - "catalog": "Catalog", - "normal": "Normal catalog", - "bc": "Builders Club", - "refresh": "Scan again", - "working": "Checking…", - "failed": "The operation could not be completed. Try again.", - "stalePreview": "The catalog changed after the preview. Create a new preview before applying repairs.", - "applied": "{count} categories reattached to the catalog root.", - "iconsUnavailable": "The icon folder could not be read. Icon availability has not been verified.", - "healthy": "No issues found in the completed checks.", - "total": "{count} issues found. Showing {shown}.", - "open": "Open", - "reference": "Reference: {value}", - "repairHint": "Preview categories whose parent no longer exists. Applying moves only these categories to the root and preserves every record. Cycles, missing furniture, icons and identifier conflicts require individual review.", - "preview": "Preview safe repairs", - "planned": "{count} categories will be moved:", - "parentChange": "parent #{from} → catalog root", - "apply": "Apply previewed repairs", - "legacyTitle": "Advanced maintenance actions", - "legacyHint": "These existing maintenance tools can rewrite identifiers and merge or remove duplicate records. They are separate from the non-destructive integrity check and its previewed parent repair.", - "issues": { - "missing_furniture": "Offer references missing furniture", - "invalid_item_ids": "Invalid furniture identifiers", - "missing_page": "Offer references a missing category", - "unreachable_page": "Unreachable category", - "category_cycle": "Category path contains a cycle", - "missing_icon": "Missing furniture icon", - "invalid_offer_id": "Invalid offer identifier", - "duplicate_offer_id": "Repeated offer identifier" - } - }, - "bulk": { - "undo": "Undo", - "undoHint": "You can also restore individual offers from audit history.", - "undoSuccess": "Restored {count} offers." - } - }, - "shop": { - "title": "Κατάστημα", - "subtitle": "Διαχειριστείτε πακέτα και παραγγελίες", - "packages": "Πακέτα", - "orders": "Παραγγελίες", - "newPackage": "+ Νέο πακέτο", - "edit": "Επεξεργασία", - "delete": "Διαγραφή", - "viewOrder": "Προβολή", - "noPackages": "Δεν υπάρχουν ακόμα πακέτα καταστημάτων", - "noOrders": "Δεν υπάρχουν παραγγελίες ακόμα", - "confirmDelete": "Διαγραφή αυτού του πακέτου;", - "colId": "ID", - "colName": "Όνομα", - "colPrice": "Τιμή", - "colCurrency": "Νόμισμα", - "colType": "Τύπος", - "colSold": "Πουλήθηκε", - "colEnabled": "Ενεργοποιημένο", - "colActions": "Δράσεις", - "colOrderId": "Ταυτότητα παραγγελίας", - "colCustomer": "Πελάτης", - "colPackage": "Πακέτο", - "colAmount": "Ποσό", - "colStatus": "Κατάσταση", - "colDate": "Ημερομηνία", - "statusPending": "Σε εκκρεμότητα", - "statusCompleted": "Ολοκληρώθηκε", - "statusRefunded": "Επιστροφή χρημάτων", - "form": { - "name": "Όνομα", - "namePlaceholder": "Όνομα πακέτου", - "description": "Περιγραφή", - "descriptionPlaceholder": "Περιγραφή πακέτου", - "price": "Τιμή", - "currency": "Νόμισμα", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Τύπος", - "typeCredits": "Πιστώσεις", - "typeDuckets": "Παπιάκια", - "typeDiamonds": "Διαμάντια", - "typeBadge": "Σήμα", - "typeFurni": "Έπιπλα", - "typeRank": "Κατάταξη", - "amount": "Ποσό", - "badgeCode": "Κωδικός σήματος", - "badgeCodePlaceholder": "π.χ. VIP001", - "rankId": "Ταυτότητα κατάταξης", - "furniItems": "Είδη επίπλων", - "enabled": "Ενεργοποιημένο", - "save": "Αποθήκευση πακέτου", - "saving": "Αποθήκευση…", - "cancel": "Ακύρωση" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Συναλλαγές", - "subtitle": "αρχείο καταγραφής πληρωμών PayPal", - "noTransactions": "Δεν υπάρχουν ακόμη συναλλαγές", - "colId": "ID", - "colUser": "Χρήστης", - "colAmount": "Ποσό", - "colCurrency": "Νόμισμα", - "colPackage": "Πακέτο", - "colStatus": "Κατάσταση", - "colDate": "Ημερομηνία", - "colActions": "Δράσεις", - "statusCompleted": "Ολοκληρώθηκε", - "statusPending": "Σε εκκρεμότητα", - "statusFailed": "Απέτυχε", - "statusRefunded": "Επιστροφή χρημάτων", - "detail": { - "title": "Συναλλαγή #{id}", - "paypalId": "Αναγνωριστικό PayPal", - "payerEmail": "Email πληρωτή", - "grossAmount": "Μικτό ποσό", - "fee": "Τέλος", - "netAmount": "Καθαρό ποσό" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Κουπόνια καταστημάτων", - "subtitle": "Διαχείριση κωδικών κουπονιών με δυνατότητα εξαργύρωσης", - "newVoucher": "+ Νέο κουπόνι", - "edit": "Επεξεργασία", - "delete": "Διαγραφή", - "noVouchers": "Δεν υπάρχουν ακόμη κουπόνια", - "confirmDelete": "Διαγραφή κουπονιού \"{code}\";", - "colId": "ID", - "colCode": "Κωδικός", - "colValue": "Αξία", - "colType": "Τύπος", - "colUses": "Χρήσεις / Μέγ", - "colExpires": "Λήγει", - "colCreated": "Δημιουργήθηκε", - "colActions": "Δράσεις", - "form": { - "code": "Κωδικός", - "codePlaceholder": "π.χ. ΚΑΛΟΚΑΙΡΙ2025", - "value": "Αξία", - "type": "Τύπος", - "typeCredits": "Πιστώσεις", - "typeDuckets": "Παπιάκια", - "typeDiamonds": "Διαμάντια", - "typeBadge": "Σήμα", - "typeFurni": "Έπιπλα", - "typeRank": "Κατάταξη", - "badgeCode": "Κωδικός σήματος", - "badgeCodePlaceholder": "π.χ. VIP001", - "rankId": "Ταυτότητα κατάταξης", - "maxUses": "Μέγιστες χρήσεις", - "maxUsesPlaceholder": "0 = απεριόριστο", - "expiresAt": "Λήγει στις", - "enabled": "Ενεργοποιημένο", - "save": "Αποθήκευση κουπονιού", - "saving": "Αποθήκευση…", - "cancel": "Ακύρωση", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Συνδρομές", - "subtitle": "Ενεργές επαναλαμβανόμενες συνδρομές", - "noSubscriptions": "Δεν υπάρχουν ενεργές συνδρομές", - "cancel": "Ακύρωση", - "confirmCancel": "Ακύρωση συνδρομής για {username};", - "colId": "ID", - "colUser": "Χρήστης", - "colPackage": "Πακέτο", - "colAmount": "Ποσό", - "colInterval": "Μεσοδιάστημα", - "colStarted": "Ξεκίνησε", - "colNextBilling": "Επόμενη χρέωση", - "colStatus": "Κατάσταση", - "colActions": "Δράσεις", - "statusActive": "Ενεργός", - "statusCancelled": "Ακυρώθηκε", - "statusExpired": "Λήξη" - }, - "rareValues": { - "title": "Σπάνιες Αξίες", - "subtitle": "Διαχειριστείτε κατηγορίες σπάνιων τιμών και τιμές αντικειμένων", - "categories": "Κατηγορίες", - "items": "Είδη", - "addCategory": "Προσθήκη κατηγορίας", - "editCategory": "Επεξεργασία κατηγορίας", - "deleteCategory": "Διαγραφή κατηγορίας", - "noCategories": "Δεν υπάρχουν ακόμα σπάνιες κατηγορίες αξίας", - "confirmDeleteCategory": "Διαγραφή κατηγορίας \"{name}\" και όλων των στοιχείων της;", - "colId": "ID", - "colName": "Όνομα", - "colItems": "Είδη", - "colUpdated": "Ενημερώθηκε", - "colActions": "Δράσεις", - "colItemName": "Όνομα στοιχείου", - "colCredits": "Πιστώσεις", - "colPoints": "Πόντοι", - "colPointType": "Τύπος σημείου", - "categoryForm": { - "name": "Όνομα", - "namePlaceholder": "Όνομα κατηγορίας", - "save": "Αποθήκευση κατηγορίας", - "saving": "Αποθήκευση…", - "cancel": "Ακύρωση" - }, - "itemForm": { - "itemName": "Όνομα στοιχείου", - "itemNamePlaceholder": "π.χ. Θρόνος", - "credits": "Πιστωτική αξία", - "points": "Αξία πόντων", - "pointType": "Τύπος σημείου", - "pointTypeDuckets": "Παπιάκια", - "pointTypeDiamonds": "Διαμάντια", - "save": "Αποθήκευση στοιχείου", - "saving": "Αποθήκευση…", - "cancel": "Ακύρωση" - } - }, - "badges": { - "title": "Σήματα", - "subtitle": "Ανεβάστε, δώστε και διαχειριστείτε τον κατάλογο σημάτων", - "upload": "Μεταφόρτωση", - "giveBadge": "Δώστε σήμα", - "catalogue": "Κατάλογος", - "uploadTitle": "Ανεβάστε ένα νέο σήμα", - "uploadSubtitle": "Ανεβάστε ένα αρχείο εικόνας σήματος", - "badgeCode": "Κωδικός σήματος", - "badgeCodePlaceholder": "π.χ. VIP001", - "badgeFile": "Αρχείο σήματος", - "badgeFileHint": "PNG ή GIF, συνιστάται 40x40", - "uploadButton": "Μεταφόρτωση", - "uploading": "Μεταφόρτωση…", - "giveTitle": "Δώστε σήμα στον χρήστη", - "giveSubtitle": "Παραχωρήστε ένα σήμα σε έναν συγκεκριμένο χρήστη", - "username": "Όνομα χρήστη", - "usernamePlaceholder": "Όνομα χρήστη στόχευσης", - "giveButton": "Δώστε σήμα", - "giving": "Δίνοντας…", - "catalogueTitle": "Κατάλογος σημάτων", - "catalogueSubtitle": "Όλα τα διαθέσιμα σήματα στο ξενοδοχείο", - "noBadges": "Δεν υπάρχουν σήματα στον κατάλογο", - "search": "Αναζήτηση σημάτων", - "searchPlaceholder": "Αναζήτηση με κωδικό ή όνομα…", - "colCode": "Κωδικός", - "colImage": "Εικόνα", - "colName": "Όνομα", - "colDescription": "Περιγραφή", - "colActions": "Δράσεις" - }, - "achievements": { - "title": "Επιτεύγματα", - "subtitle": "Λίστα επιτευγμάτων εντός παιχνιδιού μόνο για ανάγνωση", - "noAchievements": "Δεν διαμορφώθηκαν επιτεύγματα", - "colId": "ID", - "colName": "Όνομα", - "colCategory": "Κατηγορία", - "colLevels": "Επίπεδα", - "colReward": "Επιβράβευση", - "colProgress": "Πρόοδος", - "levelLabel": "Επίπεδο {level}", - "rewardCredits": "{count} πιστώσεις", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Καμπάνιες ημερολογίου", - "subtitle": "Λίστα μόνο για ανάγνωση με καμπάνιες και συμβάντα ημερολογίου", - "noCampaigns": "Δεν υπάρχουν ακόμη καμπάνιες ημερολογίου", - "colId": "ID", - "colName": "Όνομα", - "colStart": "Έναρξη", - "colEnd": "Τέλος", - "colType": "Τύπος", - "colReward": "Επιβράβευση", - "colActions": "Δράσεις", - "detail": { - "title": "Καμπάνια: {name}", - "subtitle": "Λεπτομέρειες εκδήλωσης ημερολογίου", - "days": "Μέρες", - "dayLabel": "ημέρα {day}", - "reward": "Επιβράβευση", - "noDays": "Δεν έχουν διαμορφωθεί ημέρες για αυτήν την καμπάνια" - } - }, - "radio": { - "title": "Συντονισμός Ραδιοφώνου", - "subtitle": "Τελευταίες κραυγές, εφαρμογές DJ και προγράμματα στον αέρα (25 πιο πρόσφατα από το καθένα).", - "moderation": "Μέτρο", - "shouts": "Κραυγές", - "applications": "Εφαρμογές", - "schedules": "Δρομολόγια", - "settings": "Ρυθμίσεις", - "embed": "Ενσωμάτωση", - "ranks": "Βαθμοί", - "history": "Ιστορία", - "apiKeys": "Κλειδιά API", - "points": "Πόντοι", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Ραδιοπαρακολούθηση", - "subtitle": "Ζωντανή ανίχνευση μόνο για ανάγνωση των διαμορφωμένων τελικών σημείων ραδιοφώνου (radio_now_playing_api_url, radio_listeners_api_url). Κάθε αίτημα αποτυγχάνει με ένα χρονικό όριο {timeout}s — δεν εγγράφονται δεδομένα. Διαμορφώστε τις διευθύνσεις URL στις Ρυθμίσεις.", - "stream": "Ροή", - "online": "Διαδικτυακά", - "offline": "Εκτός σύνδεσης", - "notConfigured": "Δεν έχει ρυθμιστεί", - "nowPlaying": "Τώρα παίζει", - "nowPlayingApi": "API που παίζει τώρα", - "listenersApi": "Listeners API", - "listeners": "Ακροατές", - "currentSong": "Τρέχον τραγούδι", - "bitrate": "Ρυθμός bit", - "status": "Κατάσταση", - "noNowPlayingHint": "δεν υπάρχει σύνολο API που παίζει τώρα", - "noListenersHint": "δεν έχει οριστεί API ακροατών", - "endpointDiagnostics": "Διαγνωστικά τελικού σημείου", - "diagnosticsLegend": "OK: διαθέσιμο · WARN: δεν έχει ρυθμιστεί · ERROR: αποτυχία αιτήματος ή λήξη χρονικού ορίου.", - "streamUrl": "URL ροής", - "unreachable": "απρόσιτος", - "refresh": "Ανανέωση" - }, - "user": "Χρήστης", - "message": "Μήνυμα", - "posted": "Δημοσιεύτηκε", - "realName": "Πραγματικό Όνομα", - "age": "Ηλικία", - "style": "Στυλ", - "applied": "Εφαρμόστηκε", - "day": "Ημέρα", - "start": "Έναρξη", - "end": "Τέλος", - "show": "Εμφάνιση", - "status": "Κατάσταση", - "active": "ενεργός", - "inactive": "ανενεργός", - "hidden": "κρυμμένο", - "activeSchedules": "Ενεργά προγράμματα", - "noShouts": "Όχι φωνές για μέτρια", - "noApplications": "Δεν υποβλήθηκαν αιτήσεις.", - "noSchedules": "Δεν έχουν διαμορφωθεί χρονοδιαγράμματα.", - "deleteShout": "Διαγραφή", - "confirmDeleteShout": "Διαγραφή αυτής της κραυγής;", - "pendingApplications": "Εκκρεμείς αιτήσεις", - "settingsForm": { - "title": "Ρυθμίσεις ραδιοφώνου", - "subtitle": "Οι αλλαγές γράφουν στο website_settings (πλήκτρα radio_*) και καταστρέφουν την κρυφή μνήμη ρυθμίσεων χρόνου εκτέλεσης. Οι Booleans χρησιμοποιούν 0/1.", - "enabled": "Ενεργοποιημένο", - "disabled": "ΑμεΑ", - "totalKeys": "Σύνολο κλειδιών", - "configured": "Διαμόρφωση", - "curatedHint": "επιμελημένα κλειδιά με τιμή", - "customKeys": "Προσαρμοσμένα κλειδιά", - "saveAll": "Αποθήκευση όλων", - "singleKey": "Προσθήκη / αντικατάσταση ενός μόνο κλειδιού", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "αξία", - "commentPlaceholder": "σχόλιο (προαιρετικό)", - "saveSingle": "Αποθήκευση", - "otherSettings": "Άλλες ρυθμίσεις ραδιοφώνου", - "dbError": "Δεν ήταν δυνατή η φόρτωση ρυθμίσεων (η βάση δεδομένων δεν είναι διαθέσιμη). Οι προεπιλογές θα δημιουργηθούν κατά την αποθήκευση." - }, - "embedPage": { - "title": "Ενσωμάτωση ραδιοφώνου", - "subtitle": "Έτοιμος για αντιγραφή κώδικα ενσωμάτωσης για τη ζωντανή ροή. Μόνο για ανάγνωση — τίποτα εδώ δεν γράφει στη βάση δεδομένων. Διαμορφώστε τη διεύθυνση URL ροής στις Ρυθμίσεις ραδιοφώνου (radio_stream_url).", - "streamUrl": "URL ροής", - "configured": "Διαμόρφωση", - "missing": "Λείπει", - "radioName": "Όνομα ραδιοφώνου", - "nowPlayingApi": "API που παίζει τώρα", - "set": "Σετ", - "notSet": "Δεν έχει οριστεί", - "noStreamUrl": "Δεν έχει διαμορφωθεί URL ροής", - "noStreamUrlText": "Δεν υπάρχει set radio_stream_url, επομένως δεν υπάρχει τίποτα για ενσωμάτωση ακόμα.", - "goToSettings": "Μεταβείτε στις Ρυθμίσεις ραδιοφώνου", - "livePreview": "Ζωντανή προεπισκόπηση", - "livePreviewText": "Αυτό είναι το γυμνό πρόγραμμα αναπαραγωγής audio όπως θα το δουν οι επισκέπτες. Πατήστε το play για να επιβεβαιώσετε ότι η ροή είναι προσβάσιμη.", - "source": "Πηγή", - "audioSnippet": "Απόσπασμα αναπαραγωγής ήχου", - "audioSnippetDesc": "Το αναπτυσσόμενο πρόγραμμα αναπαραγωγής ήχου HTML5 κατευθείαν στη ροή. Λειτουργεί οπουδήποτε επιτρέπεται απλό HTML.", - "iframeSnippet": "Απόσπασμα περιτυλίγματος Iframe", - "iframeSnippetDesc": "Ενσωματώνει τη σελίδα του προγράμματος αναπαραγωγής ραδιοφώνου του ιστότοπου σε ένα iframe — διατηρεί τις πληροφορίες για το στυλ και την αναπαραγωγή τώρα. Προσαρμόστε το πλάτος/ύψος ανάλογα με τη γεύση.", - "audioUnsupported": "Το πρόγραμμα περιήγησής σας δεν υποστηρίζει το στοιχείο ήχου." - }, - "banners": { - "title": "Πανό", - "heading": "Πανό ραδιοφώνου", - "description": "Διαφημιστικά banner που εμφανίζονται στη σελίδα του ραδιοφώνου, ταξινομημένα κατά σειρά ταξινόμησης.", - "addBanner": "Προσθήκη banner", - "createBanner": "Δημιουργία banner", - "deleteBanner": "Διαγραφή banner", - "noBanners": "Δεν υπάρχουν ακόμη banner — προσθέστε ένα παραπάνω.", - "existing": "Υπάρχοντα banner ({count})", - "save": "Αποθήκευση", - "delete": "Διαγραφή", - "byUser": "από χρήστη {id}", - "active": "ενεργός", - "hidden": "κρυμμένο", - "bannerAlt": "Πανό ραδιοφώνου", - "statusActive": "Ενεργός", - "statusHidden": "Κρυφό", - "dbError": "Δεν ήταν δυνατή η φόρτωση των banner (μη διαθέσιμη βάση δεδομένων).", - "form": { - "imagePath": "Διαδρομή εικόνας / URL", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Τίτλος", - "description": "Περιγραφή", - "sortOrder": "Σειρά ταξινόμησης", - "active": "Ενεργός" - } - }, - "ranksForm": { - "title": "Ραδιοφωνικοί βαθμοί", - "subtitle": "Βαθμοί DJ / προσωπικού με δυνατότητα ανάθεσης σε ραδιοφωνικές εφαρμογές.", - "dbError": "Δεν ήταν δυνατή η φόρτωση των κατατάξεων (η βάση δεδομένων δεν είναι διαθέσιμη).", - "active": "Ενεργός", - "addRank": "Προσθήκη κατάταξης", - "name": "Όνομα", - "badgeCode": "Κωδικός σήματος", - "description": "Περιγραφή", - "createRank": "Δημιουργία κατάταξης", - "existing": "Υπάρχουσες τάξεις ({count})", - "noRanks": "Δεν υπάρχουν ακόμη βαθμολογίες — προσθέστε μία παραπάνω.", - "activeLabel": "ενεργός", - "inactiveLabel": "ανενεργός", - "save": "Αποθήκευση", - "deleteRank": "Διαγραφή κατάταξης #{id}" - }, - "historyPage": { - "title": "Ιστορικό αναπαραγωγής ραδιοφώνου", - "subtitle": "Προηγούμενες εκπομπές DJ και χρόνος μετάδοσης (radio_history), πρώτα οι πιο πρόσφατες. Καταγραφή μόνο για ανάγνωση για το ποιος ήταν στον αέρα, πότε και πόσοι ακροατές συντονίστηκαν.", - "dbError": "Δεν ήταν δυνατή η φόρτωση του ιστορικού ραδιοφώνου (η βάση δεδομένων δεν είναι διαθέσιμη).", - "showsLogged": "Εμφανίζει καταγεγραμμένα", - "onAirNow": "Στον αέρα τώρα", - "uniqueDjs": "Μοναδικοί DJs", - "peakListeners": "Κορυφαίοι ακροατές", - "empty": "Δεν έχει καταγραφεί ακόμα ιστορικό ραδιοφώνου.", - "showLog": "Εμφάνιση αρχείου καταγραφής ({count})", - "colDj": "DJ", - "colShow": "Εμφάνιση", - "colStarted": "Ξεκίνησε", - "colEnded": "Τελείωσε", - "colAirtime": "Χρόνος ομιλίας", - "colListeners": "Ακροατές", - "colNotes": "Σημειώσεις", - "onAir": "στον αέρα" - }, - "apiKeysForm": { - "title": "Πλήκτρα API ραδιοφώνου", - "subtitle": "Κλειδιά API για εξωτερικές ενσωματώσεις ραδιοφώνου (radio_api_keys). Τα κλειδιά δημιουργούνται από την πλευρά του διακομιστή και εμφανίζονται καλυμμένα — αντιγράψτε την πλήρη τιμή από τη βάση δεδομένων κατά την πρώτη έκδοση.", - "dbError": "Δεν ήταν δυνατή η φόρτωση των κλειδιών API (μη διαθέσιμη βάση δεδομένων).", - "totalKeys": "Σύνολο κλειδιών", - "active": "Ενεργός", - "inactive": "Ανενεργό", - "generateKey": "Δημιουργία κλειδιού", - "generateHint": "Το μυστικό κλειδί δημιουργείται αυτόματα με κρυπτογραφική τυχαιότητα — δεν το εισάγετε.", - "name": "Όνομα", - "namePlaceholder": "Γέφυρα AzureCast", - "rateLimit": "Όριο τιμής (αιτήματα/λεπτό)", - "allowedIps": "Επιτρεπόμενες IP (προαιρετικά)", - "allowedIpsPlaceholder": "χωρισμένο με κόμμα, κενό = οποιοσδήποτε", - "generate": "Δημιουργία κλειδιού", - "existingKeys": "Υπάρχοντα κλειδιά ({count})", - "noKeys": "Δεν υπάρχουν ακόμη κλειδιά API — δημιουργήστε ένα παραπάνω.", - "colName": "Όνομα", - "colKey": "Κλειδί", - "colAllowedIps": "Επιτρεπόμενες IP", - "colRateLimit": "Όριο ποσοστού", - "colLastUsed": "Τελευταία χρήση", - "colExpires": "Λήγει", - "colStatus": "Κατάσταση", - "colActions": "Δράσεις", - "maskedHint": "Εμφανίζονται μόνο οι πρώτοι 8 χαρακτήρες", - "any": "οποιαδήποτε", - "activeLabel": "ενεργός", - "inactiveLabel": "ανενεργός", - "deactivate": "Απενεργοποίηση", - "activate": "Ενεργοποίηση", - "delete": "Διαγραφή" - }, - "pointsForm": { - "title": "Σημεία ακροατών ραδιοφώνου", - "subtitle": "Επιβραβεύστε τους ακροατές με νόμισμα για το χρόνο που αφιερώνουν στο ραδιόφωνο. Οι επεξεργασίες γράφουν στο website_settings (πλήκτρα radio_points_*) και καταστρέφουν την κρυφή μνήμη ρυθμίσεων χρόνου εκτέλεσης. Οι Booleans χρησιμοποιούν 0/1.", - "saved": "Αποθηκεύτηκε", - "points": "Πόντοι", - "enabled": "Ενεργοποιημένο", - "disabled": "ΑμεΑ", - "perMinute": "ανά λεπτό", - "paidIn": "πληρώθηκε σε {currency}", - "maxPerDay": "Μέγιστο / ημέρα", - "unlimited": "Απεριόριστο", - "minListeners": "Ελάχιστοι ακροατές", - "settings": "Ρυθμίσεις", - "pointsEnabled": "Οι πόντοι ενεργοποιήθηκαν", - "pointsEnabledHint": "Κύριος διακόπτης για την απονομή πόντων ακροατών.", - "currency": "Νόμισμα", - "currencyHint": "Σε ποιο πορτοφόλι πληρώνονται οι πόντοι.", - "pointsPerMinute": "Πόντοι ανά λεπτό", - "pointsPerMinuteHint": "Ποσό που απονέμεται για κάθε πλήρες λεπτό ακρόασης.", - "maxPerDayHint": "Ημερήσιο ανώτατο όριο ανά χρήστη. Χρησιμοποιήστε το 0 για απεριόριστο.", - "minListenersHint": "Οι πόντοι απονέμονται μόνο όταν είναι συντονισμένοι τουλάχιστον τόσοι πολλοί άνθρωποι.", - "save": "Αποθήκευση ρυθμίσεων πόντων" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Εναλλακτική λίστα αναπαραγωγής (radio_auto_dj_playlist) το ραδιόφωνο περιστρέφεται όταν δεν υπάρχει ζωντανός DJ σε ροή. Ταξινόμηση κατά σειρά ταξινόμησης και κατόπιν τίτλου.", - "dbError": "Δεν ήταν δυνατή η φόρτωση της λίστας αναπαραγωγής AutoDJ (μη διαθέσιμη βάση δεδομένων).", - "tracks": "Κομμάτια", - "active": "Ενεργός", - "inactive": "Ανενεργό", - "addTrack": "Προσθήκη κομματιού", - "titlePlaceholder": "Τίτλος κομματιού", - "artist": "Καλλιτέχνης", - "album": "Άλμπουμ", - "artworkUrl": "URL έργου τέχνης", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Διάρκεια (δευτερόλεπτα)", - "durationPlaceholder": "π.χ. 215", - "sortOrder": "Σειρά ταξινόμησης", - "playlist": "Λίστα αναπαραγωγής ({count})", - "noTracks": "Δεν υπάρχουν ακόμα κομμάτια AutoDJ — προσθέστε ένα παραπάνω.", - "colOrder": "Παραγγελία", - "colTitle": "Τίτλος", - "colArtist": "Καλλιτέχνης", - "colAlbum": "Άλμπουμ", - "colDuration": "Διάρκεια", - "colPlays": "Παίζει", - "colLastPlayed": "Τελευταίο παιχνίδι", - "colStatus": "Κατάσταση", - "colActions": "Δράσεις", - "activeLabel": "ενεργός", - "inactiveLabel": "ανενεργός", - "deactivate": "Απενεργοποίηση", - "activate": "Ενεργοποίηση", - "delete": "Διαγραφή", - "trackTitle": "Τίτλος" - }, - "moderationPage": { - "title": "DJ Moderation", - "subtitle": "Ελέγξτε και αφαιρέστε τις ραδιοφωνικές κραυγές (50 πιο πρόσφατες).", - "recentShouts": "Πρόσφατες κραυγές ({count})" - } - }, - "commandocentrum": { - "title": "Commandocentrum", - "subtitle": "Διαγνωστικά, στοιχεία ελέγχου RCON και διαχείριση χρηστών", - "diagnostics": "Διαγνωστικά", - "rcon": "RCON", - "userActions": "Ενέργειες χρήστη", - "diagnosticsTitle": "Διαγνωστικά εξομοιωτών", - "memoryUsage": "Χρήση μνήμης", - "uptime": "Χρόνος λειτουργίας", - "onlineUsers": "Διαδικτυακοί χρήστες", - "roomsLoaded": "Τα δωμάτια είναι φορτωμένα", - "refresh": "Ανανέωση", - "rconTitle": "Εντολές RCON", - "rconPlaceholder": "Εισαγάγετε την εντολή RCON…", - "rconSend": "Αποστολή", - "rconSending": "Αποστολή…", - "rconResponse": "Απάντηση", - "userActionsTitle": "Ενέργειες χρήστη", - "username": "Όνομα χρήστη", - "usernamePlaceholder": "Όνομα χρήστη στόχευσης", - "action": "Δράση", - "execute": "Εκτελέστε", - "actions": { - "disconnect": "Αποσύνδεση", - "alert": "Αποστολή ειδοποίησης", - "giveCredits": "Δώστε πιστώσεις", - "giveBadge": "Δώστε σήμα", - "givePoints": "Δώστε βαθμούς", - "ban": "Απαγόρευση", - "kick": "Κλωτσιά" - }, - "messagePlaceholder": "Μήνυμα (για ειδοποιήσεις)…", - "amountPlaceholder": "Ποσό…", - "badgePlaceholder": "Κωδικός σήματος…" - }, - "emulator": { - "title": "Διαμόρφωση εξομοιωτή", - "subtitle": "Προβολή και επεξεργασία ρυθμίσεων εξομοιωτή και κειμένων τοπικών ρυθμίσεων", - "settings": "Ρυθμίσεις", - "texts": "Κείμενα", - "search": "Αναζήτηση", - "searchPlaceholder": "Κλειδιά αναζήτησης…", - "noSettings": "Δεν βρέθηκαν ρυθμίσεις", - "noTexts": "Δεν βρέθηκαν κείμενα", - "edit": "Επεξεργασία", - "save": "Αποθήκευση", - "saving": "Αποθήκευση…", - "cancel": "Ακύρωση", - "colKey": "Κλειδί", - "colValue": "Αξία", - "colType": "Τύπος", - "colActions": "Δράσεις", - "editDialog": { - "title": "Επεξεργασία: {key}", - "value": "Αξία", - "valuePlaceholder": "Εισαγάγετε τιμή…", - "save": "Αποθήκευση αλλαγών", - "cancel": "Ακύρωση" - } - }, - "alerts": { - "title": "Ειδοποιήσεις", - "subtitle": "Στείλτε ειδοποιήσεις σε όλο το ξενοδοχείο και δείτε πρόσφατες ειδοποιήσεις", - "sendAlert": "Αποστολή ειδοποίησης ξενοδοχείου", - "recentAlerts": "Πρόσφατες ειδοποιήσεις ({count})", - "noRecentAlerts": "Δεν υπάρχουν πρόσφατες ειδοποιήσεις", - "form": { - "title": "Τίτλος ειδοποίησης", - "titlePlaceholder": "π.χ. Συντήρηση διακομιστή σε 10 λεπτά", - "message": "Μήνυμα ειδοποίησης", - "messagePlaceholder": "Γράψτε το μήνυμα ειδοποίησης…", - "type": "Τύπος", - "typeHotel": "Ειδοποίηση σε όλο το ξενοδοχείο", - "typeStaff": "Προσωπικό μόνο", - "urgent": "Επείγον", - "send": "Αποστολή ειδοποίησης", - "sending": "Αποστολή…", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Τίτλος", - "colSentBy": "Αποστολή από", - "colType": "Τύπος", - "colDate": "Ημερομηνία", - "colActions": "Δράσεις", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Δραστηριότητες Προσωπικού", - "subtitle": "Διαδρομή ελέγχου των ενεργειών του προσωπικού στον πίνακα διαχείρισης", - "noLogs": "Δεν έχει καταγραφεί ακόμη δραστηριότητα προσωπικού", - "colId": "ID", - "colUser": "Χρήστης", - "colAction": "Δράση", - "colTarget": "Στόχος", - "colDescription": "Περιγραφή", - "colIp": "IP", - "colTimestamp": "Χρονική σήμανση", - "filterByUser": "Φιλτράρισμα ανά χρήστη…", - "filterByAction": "Φιλτράρισμα ανά ενέργεια…", - "clearFilters": "Καθαρίστε τα φίλτρα", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Φίλτρο Word", - "subtitle": "Διαχειριστείτε φιλτραρισμένες λέξεις και φράσεις στο ξενοδοχείο", - "addWord": "Προσθήκη λέξης", - "addWords": "Προσθέστε λέξεις", - "noWords": "Δεν υπάρχουν φιλτραρισμένες λέξεις ακόμα", - "confirmDelete": "Κατάργηση του \"{word}\" από το φίλτρο;", - "colId": "ID", - "colWord": "Λέξη", - "colAddedBy": "Προστέθηκε από", - "colCreated": "Δημιουργήθηκε", - "colActions": "Δράσεις", - "form": { - "word": "Λέξη", - "wordPlaceholder": "π.χ. κακή λέξη", - "addMore": "Προσθέστε πολλές λέξεις (μία ανά γραμμή)", - "save": "Προσθήκη στο φίλτρο", - "saving": "Αποθήκευση…", - "cancel": "Ακύρωση" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Λειτουργία συντήρησης", - "subtitle": "Ενεργοποίηση ή απενεργοποίηση της συντήρησης σε όλο το ξενοδοχείο", - "enabled": "Η λειτουργία συντήρησης είναι ενεργοποιημένη", - "disabled": "Η λειτουργία συντήρησης είναι απενεργοποιημένη", - "enable": "Ενεργοποίηση συντήρησης", - "disable": "Απενεργοποιήστε τη συντήρηση", - "message": "Μήνυμα συντήρησης", - "messagePlaceholder": "Θα επιστρέψουμε σύντομα!", - "staffAccess": "Επιτρέψτε την πρόσβαση του προσωπικού κατά τη συντήρηση", - "save": "Αποθήκευση ρυθμίσεων", - "saving": "Αποθήκευση…", - "confirmEnable": "Η ενεργοποίηση της συντήρησης θα αποτρέψει την πρόσβαση στο ξενοδοχείο από όλους τους χρήστες χωρίς προσωπικό. Συνεχίζω;", - "confirmDisable": "Απενεργοποίηση λειτουργίας συντήρησης και επαναφορά της πρόσβασης για όλους τους χρήστες;" - }, - "housekeeping": { - "title": "Άδειες καθαριότητας", - "subtitle": "Διαμορφώστε ποιες τάξεις μπορούν να έχουν πρόσβαση σε ποιες ενότητες διαχειριστή", - "addPermission": "Προσθήκη άδειας", - "editPermission": "Άδεια επεξεργασίας", - "deletePermission": "Διαγραφή άδειας", - "noPermissions": "Δεν έχουν διαμορφωθεί άδειες καθαριότητας", - "confirmDelete": "Διαγραφή αυτής της άδειας;", - "colId": "ID", - "colRank": "Κατάταξη", - "colSection": "Ενότητα", - "colActions": "Δράσεις", - "form": { - "rankId": "Ταυτότητα κατάταξης", - "rankIdPlaceholder": "Ελάχιστη κατάταξη", - "section": "Κλειδί ενότητας", - "sectionPlaceholder": "π.χ. admin.dashboard", - "save": "Αποθήκευση άδειας", - "saving": "Αποθήκευση…", - "cancel": "Ακύρωση" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset Εφαρμόστηκε!", - "cleared": "All Άδειες cleared!", - "invalidRank": "Invalid Κατάταξη", - "testDone": "Test done: {count} Άδειες found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Διαγραφή ALL Άδειες? This Δράση cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Άδεια", - "colDescription": "Περιγραφή", - "colMinRank": "Min. Κατάταξη", - "permissionKey": "Κλειδί άδειας", - "minRank": "Min. Κατάταξη", - "description": "Περιγραφή", - "permissions": "Άδειες", - "permissionsCount": "{count} Άδειες", - "permission": "Άδεια", - "highestMinRank": "Highest min. Κατάταξη: {rank}", - "totalMinRank": "Total min. Κατάταξη sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Βαθμοί", - "missingDeps": "{count} Λείπει dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Λείπει)", - "rank": "Κατάταξη", - "count": "Count", - "searchPermission": "Αναζήτηση Άδειες…", - "search": "Αναζήτηση", - "manage": "Manage", - "importSelection": "Εισαγωγή selection", - "noGroup": "Όχι group", - "allGroups": "All groups", - "perGroup": "Άδειες per group", - "perRank": "Άδειες per Κατάταξη", - "rankOverviewHint": "All Άδειες grouped by the Κατάταξη they are assigned to.", - "tabOverview": "Επισκόπηση", - "tabManage": "Manage", - "tabImport": "Εισαγωγή / Export", - "tabRanks": "Κατάταξη Επισκόπηση", - "tabPresets": "Προεπιλογές", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Εισαγωγή Άδειες", - "importHint": "Paste a JSON array of Άδεια objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Εισαγωγή", - "exportTitle": "Export Άδειες", - "exportHint": "Export all Άδειες as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Άδεια Προεπιλογές", - "presetsHint": "Εφαρμόστε a predefined Σετ of Άδειες for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Μέτρο tools: Χρήστης lookup, Απαγορεύσεις, CFH handling, chat κούτσουρα.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Χρήστες, Δωμάτια, news, Ρυθμίσεις, Κατάστημα, events, Ραδιόφωνο & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Άδεια management and asset Εισαγωγή.", - "applyPreset": "Εφαρμόστε preset", - "clearAll": "Clear all Άδειες", - "testTitle": "Test Κατάταξη access", - "testHint": "Enter a Κατάταξη number to see which Άδειες would be granted.", - "test": "Test", - "auditTitle": "Άδεια audit log", - "auditHint": "All changes to Οικονομία Άδειες are logged.", - "auditLogsAt": "Audit κούτσουρα are available on the Audit log page.", - "viewAuditLogs": "Προβολή audit κούτσουρα", - "importedWithErrors": "Imported {count} Άδειες with {errors} errors", - "confirmClearAllDesc": "This will Αφαίρεση every Άδεια entry from the Βάση δεδομένων. Are you sure?", - "confirmDeletePermission": "Διαγραφή this Άδεια permanently?", - "confirmBulkDelete": "Διαγραφή {count} selected Άδειες?", - "deleteSelected": "Διαγραφή {count} selected", - "cancel": "Ακύρωση", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Χρήστης", - "auditAction": "Δράση", - "auditTarget": "Στόχος", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Δωμάτια", - "subtitle": "Αναζήτηση και διαχείριση δωματίων ξενοδοχείων", - "search": "Αναζήτηση", - "searchPlaceholder": "Αναζήτηση κατά όνομα, ιδιοκτήτη ή ταυτότητα…", - "searchResults": "Βρέθηκε {count, plural, one {# room} other {# rooms}} για \"{query}\"", - "noResults": "Δεν βρέθηκαν δωμάτια", - "colId": "ID", - "colName": "Όνομα", - "colOwner": "Ιδιοκτήτης", - "colUsers": "Χρήστες", - "colState": "κράτος", - "colCategory": "Κατηγορία", - "colCreated": "Δημιουργήθηκε", - "colActions": "Δράσεις", - "stateOpen": "Ανοίξτε", - "stateClosed": "Κλειστό", - "stateLocked": "Κλειδωμένο", - "stateInvisible": "Αόρατο", - "detail": { - "title": "Δωμάτιο: {name}", - "subtitle": "Ανήκει σε {owner}", - "overview": "Επισκόπηση", - "actions": "Δράσεις", - "description": "Περιγραφή", - "noDescription": "Καμία περιγραφή", - "owner": "Ιδιοκτήτης", - "users": "Χρήστες στο διαδίκτυο", - "maxUsers": "Μέγιστος αριθμός χρηστών", - "category": "Κατηγορία", - "state": "κράτος", - "tags": "Ετικέτες", - "noTags": "Χωρίς ετικέτες", - "created": "Δημιουργήθηκε", - "deleteRoom": "Διαγραφή δωματίου", - "confirmDelete": "Διαγραφή δωματίου \"{name}\"; Αυτό δεν μπορεί να αναιρεθεί.", - "enterRoom": "Μπείτε στο δωμάτιο", - "changeOwner": "Αλλαγή κατόχου", - "changeOwnerPlaceholder": "Όνομα χρήστη νέου κατόχου" - } - }, - "emailTemplates": { - "title": "Πρότυπα email", - "subtitle": "Διαχείριση προτύπων email συναλλαγών", - "newTemplate": "+ Νέο πρότυπο", - "edit": "Επεξεργασία", - "delete": "Διαγραφή", - "noTemplates": "Δεν υπάρχουν ακόμη πρότυπα email", - "confirmDelete": "Διαγραφή προτύπου \"{name}\";", - "colId": "ID", - "colName": "Όνομα", - "colSubject": "Θέμα", - "colKey": "Κλειδί", - "colUpdated": "Ενημερώθηκε", - "colActions": "Δράσεις", - "form": { - "name": "Όνομα", - "namePlaceholder": "π.χ. Email καλωσορίσματος", - "key": "Κλειδί", - "keyPlaceholder": "π.χ. Welcome_email", - "subject": "Θέμα", - "subjectPlaceholder": "Γραμμή θέματος email", - "body": "Σώμα (HTML)", - "bodyPlaceholder": "

Αγαπητέ {username},

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

Αγαπητέ {username},

", + "variables": "Διαθέσιμες μεταβλητές", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Αποθήκευση προτύπου", + "saving": "Αποθήκευση…", + "cancel": "Ακύρωση", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Θέμα", + "subtitle": "Προσαρμόστε την εμφάνιση CMS", + "presets": "Προεπιλογές", + "colours": "Χρώματα", + "css": "CSS", + "presetsTitle": "Προεπιλογές θεμάτων", + "presetsSubtitle": "Επιλέξτε έναν προκατασκευασμένο συνδυασμό χρωμάτων", + "applyPreset": "Εφαρμόστε", + "presetApplied": "Εφαρμόστηκε η προεπιλογή: {preset}", + "customiseTitle": "Προσαρμοσμένα χρώματα", + "primary": "Πρωτοβάθμια", + "secondary": "Δευτερεύουσα", + "accent": "Προφορά", + "background": "φόντο", + "surface": "Επιφάνεια", + "text": "Κείμενο", + "saveColours": "Αποθήκευση χρωμάτων", + "savingColours": "Αποθήκευση…", + "cssTitle": "Προσαρμοσμένο CSS", + "cssSubtitle": "Προσθέστε προσαρμοσμένο CSS για να παρακάμψετε τα στυλ θέματος", + "cssPlaceholder": "/* Το προσαρμοσμένο σας CSS εδώ */", + "saveCss": "Αποθήκευση CSS", + "savingCss": "Αποθήκευση…", + "reset": "Επαναφορά στις προεπιλογές", + "confirmReset": "Επαναφορά του θέματος στις προεπιλεγμένες τιμές;", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Βιβλιοθήκη πολυμέσων", + "subtitle": "Μεταφόρτωση και διαχείριση αρχείων πολυμέσων", + "upload": "Μεταφόρτωση", + "uploadTitle": "Ανεβάστε ένα αρχείο", + "uploadSubtitle": "Σύρετε και αποθέστε ή κάντε κλικ για μεταφόρτωση", + "uploadButton": "Επιλέξτε αρχείο", + "uploading": "Μεταφόρτωση…", + "noFiles": "Δεν υπάρχουν ακόμα αρχεία πολυμέσων", + "delete": "Διαγραφή", + "confirmDelete": "Διαγραφή αυτού του αρχείου οριστικά;", + "search": "Αναζήτηση", + "searchPlaceholder": "Αναζήτηση κατά όνομα αρχείου…", + "colPreview": "Προεπισκόπηση", + "colName": "Όνομα", + "colSize": "Μέγεθος", + "colType": "Τύπος", + "colUploaded": "Μεταφορτώθηκε", + "colActions": "Δράσεις", + "copyUrl": "Αντιγραφή διεύθυνσης URL", + "urlCopied": "Η διεύθυνση URL αντιγράφηκε στο πρόχειρο" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Ανεβάστε και διαχειριστείτε το favicon του ιστότοπου", + "current": "Τρέχον favicon", + "uploadLabel": "Μεταφόρτωση favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO ή SVG. Μέγιστο 2MB.", + "upload": "Μεταφόρτωση", + "uploading": "Μεταφόρτωση…", + "delete": "Αφαίρεση", + "deleting": "Αφαίρεση…", + "saved": "Το Favicon αποθηκεύτηκε με επιτυχία!", + "deleted": "Το Favicon καταργήθηκε με επιτυχία!", + "error": "Κάτι πήγε στραβά", + "confirmDelete": "Κατάργηση του favicon; Ο ιστότοπος δεν θα εμφανίζει πλέον προσαρμοσμένο favicon.", + "generator": { + "title": "Δημιουργία favicon", + "text": "Κείμενο", + "bgColor": "Χρώμα φόντου", + "textColor": "Χρώμα κειμένου", + "rounded": "Στρογγυλεμένες γωνίες", + "save": "Αποθήκευση ως favicon" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "Ρυθμίσεις CMS", + "subtitle": "Διαχείριση διαμόρφωσης CMS κλειδιού/τιμής", + "addSetting": "Προσθήκη ρύθμισης", + "edit": "Επεξεργασία", + "delete": "Διαγραφή", + "noSettings": "Δεν βρέθηκαν ρυθμίσεις", + "confirmDelete": "Διαγραφή της ρύθμισης \"{key}\";", + "colKey": "Κλειδί", + "colValue": "Αξία", + "colUpdated": "Ενημερώθηκε", + "colActions": "Δράσεις", + "form": { + "key": "Κλειδί", + "keyPlaceholder": "π.χ. όνομα_ξενοδοχείου", + "value": "Αξία", + "valuePlaceholder": "Ρύθμιση τιμής", + "save": "Αποθήκευση ρύθμισης", + "saving": "Αποθήκευση…", + "cancel": "Ακύρωση" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Αρχική", + "reload": "Επαναφόρτωση", + "fullscreen": "Πλήρης οθόνη", + "logout": "Αποσύνδεση", + "onlineUsers": "Χρήστες συνδεδεμένοι", + "emulatorOnline": "Ο εξομοιωτής είναι online", + "emulatorOffline": "Ο εξομοιωτής είναι offline", + "dragToMove": "Σύρετε για μετακίνηση", + "hide": "Απόκρυψη γραμμής", + "fullscreenExit": "Έξοδος από πλήρη οθόνη", + "show": "Εμφάνιση γραμμής", + "emulatorUnknown": "Άγνωστη κατάσταση εξομοιωτή" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Διαγνωστικός έλεγχος αρχείων", + "preliminary": "Προκαταρκτικός έλεγχος διευθύνσεων· το περιεχόμενο ελέγχεται στην εισαγωγή.", + "http": "HTTP {status}", + "network": "Αποτυχία σύνδεσης", + "timeout": "Η πηγή δεν απάντησε εγκαίρως", + "invalidResponse": "Η πηγή επέστρεψε ιστοσελίδα αντί αρχείου", + "available": "Βρέθηκε αρχείο· εκκρεμεί έλεγχος", + "recover": "Επισύναψη πρωτοτύπου και συνέχεια", + "recoveryHint": "Επιλέξτε {file} (έως 50 MB). Ελέγχεται η ταυτότητά του. Επαναλαμβάνονται οι αποτυχίες· οι ολοκληρωμένες εισαγωγές διατηρούνται.", + "attach": "Επιλέξτε το αρχικό αρχείο .nitro", + "working": "Έλεγχος ή συνέχιση...", + "attached": "Επισυνάφθηκε αντίστοιχο αρχείο", + "resume": "Συνέχιση αποτυχημένων εισαγωγών με το αρχείο", + "invalidFile": "Επιλέξτε αντίστοιχο αρχικό .nitro έως 50 MB και δοκιμάστε ξανά.", + "resumeError": "Ανανεώστε το ιστορικό και χρησιμοποιήστε την τελευταία προσπάθεια· ελέγξτε το αρχείο και ξαναδοκιμάστε.", + "mismatchedFile": "Αυτό το αρχείο ανήκει σε άλλο έπιπλο.", + "alreadyStarted": "Η ανάκτηση ξεκίνησε ήδη. Ανανεώστε το ιστορικό και χρησιμοποιήστε την τελευταία προσπάθεια.", + "notEligible": "Αυτό το στοιχείο δεν επιτρέπει ανάκτηση με συνημμένο." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/es.json b/src/messages/es.json index 89bba150..05e9347d 100644 --- a/src/messages/es.json +++ b/src/messages/es.json @@ -1,3919 +1,4913 @@ { - "draftRecovery": { - "ready": "Se conservará una copia de recuperación en este navegador durante 7 días.", - "saved": "Copia de recuperación guardada en este navegador durante 7 días.", - "unavailable": "La recuperación en el navegador no está disponible. Mantén esta página abierta hasta que se guarden los cambios.", - "found": "Hay una copia de recuperación disponible en este navegador, guardada el", - "restore": "Restaurar copia del navegador", - "discard": "Eliminar copia del navegador", - "confirmRestore": "¿Reemplazar el formulario actual con la copia de recuperación del navegador? Revisa el contenido antes de guardar.", - "confirmDiscard": "¿Eliminar esta copia de recuperación del navegador? El formulario actual no cambiará." - }, - "nav": { - "home": "Inicio", - "community": "Comunidad", - "articles": "Artículos", - "photos": "Fotos", - "staff": "Equipo", - "rankings": "Clasificaciones", - "guilds": "Grupos", - "leaderboards": "Tablas de clasificación", - "rareValues": "Valores raros", - "shop": "Tienda", - "market": "Mercado", - "assistance": "Asistencia", - "helpCenter": "Centro de ayuda", - "myTickets": "Mis tickets", - "badges": "Insignias", - "radio": "Radio", - "friends": "Amigos", - "messages": "Mensajes", - "admin": "Admin", - "openMenu": "Open menu", - "closeMenu": "Close menu", - "drawBadge": "Diseñar insignia", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} en línea", - "nitroClient": "Cliente Nitro", - "tagline": "¡Un mundo virtual en línea donde puedes crear tu propio avatar, hacer amigos, chatear, crear salas y mucho más!", - "login": "Iniciar sesión", - "or": "O", - "createAccount": "Crear una cuenta" - }, - "footer": { - "copyright": "© {year} - {hotel} es un proyecto educativo sin fines de lucro" - }, - "pages": { - "staff": { - "title": "Equipo", - "subtitle": "El equipo detrás del hotel", - "ranksTitle": "Rangos", - "ranksSubtitle": "De qué se encarga cada parte del equipo", - "membersTitle": "Miembros del equipo", - "membersEmptySubtitle": "Nadie que mostrar ahora mismo", - "membersSubtitle": "{count, plural, one {# miembro manteniendo todo en marcha} other {# miembros manteniendo todo en marcha}}", - "emptyState": "No hay miembros del equipo que mostrar.", - "colUsername": "Usuario", - "colRank": "Rango", - "colMotto": "Lema" - }, - "leaderboard": { - "title": "Tabla de clasificación", - "subtitle": "Top 20 jugadores por {currency}", - "tab_credits": "Créditos", - "tab_diamonds": "Diamantes", - "tab_duckets": "Duckets", - "tab_achievement": "Logros", - "tab_respects": "Respetos", - "tab_onlinetime": "Tiempo en línea", - "emptyState": "Aún no hay clasificaciones que mostrar.", - "colAvatar": "Avatar", - "colPlayer": "Jugador" - }, - "friends": { - "title": "Amigos", - "emptySubtitle": "Aún no has añadido amigos", - "subtitle": "{count, plural, one {Tienes # amigo} other {Tienes # amigos}}", - "emptyState": "Añade amigos en el hotel y aparecerán aquí.", - "noMotto": "Sin lema", - "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": "Mensajes", - "subtitle": "Solicitudes de amistad y mensajes fuera de línea esperándote", - "requestsTitle": "Solicitudes de amistad", - "requestsEmptySubtitle": "Nadie te ha enviado una solicitud de amistad aún", - "requestsSubtitle": "{count, plural, one {# solicitud pendiente} other {# solicitudes pendientes}}", - "requestsEmptyState": "No hay solicitudes de amistad pendientes.", - "wantsToBeFriend": "quiere ser tu amigo.", - "accept": "Aceptar", - "offlineTitle": "Mensajes fuera de línea", - "offlineEmptySubtitle": "Tu bandeja de entrada está vacía", - "offlineSubtitle": "{count, plural, one {# mensaje recibido} other {# mensajes recibidos}}", - "offlineEmptyState": "No tienes mensajes fuera de línea.", - "unknownUser": "Usuario #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Sin lema", - "statRank": "Rango", - "statCredits": "Créditos", - "statRegistered": "Registrado", - "badgesTitle": "Insignias", - "badgesEmpty": "Aún no hay insignias.", - "photosTitle": "Fotos", - "photosEmpty": "Aún no hay fotos.", - "guestbookTitle": "Libro de visitas", - "guestbookSubtitle": "Mensajes en el muro de {username}", - "leaveMessage": "Dejar un mensaje", - "guestbookPlaceholder": "Escribe algo en el libro de visitas de {username}…", - "post": "Publicar", - "loginToPost": "Inicia sesión para dejar un mensaje en el libro de visitas.", - "guestbookEmpty": "Aún no hay entradas en el libro de visitas.", - "unknownUser": "Usuario #{id}", - "statDuckets": "Duckets", - "statDiamonds": "Diamantes", - "walletTitle": "Billetera", - "friendsTitle": "Amigos", - "friendsSubtitle": "Personas del hotel con las que pasan el tiempo", - "friendsEmpty": "No hay amigos que mostrar.", - "roomsTitle": "Salas", - "roomsSubtitle": "Salas que poseen", - "roomsEmpty": "No hay salas que mostrar.", - "roomUntitled": "Sala sin título", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Clasificaciones", - "subtitle": "Los 12 mejores jugadores clasificados por créditos", - "emptyState": "Aún no hay jugadores que clasificar." - }, - "home": { - "welcome": "Bienvenido a {hotelName}", - "welcomeSubtitle": "Tu hotel retro, ahora impulsado por Next.js", - "welcomeBody": "Pasa el rato, colecciona furni y conoce amigos.", - "enterHotel": "Entrar a {hotelName}", - "onlineFriends": "Amigos en línea", - "noFriendsOnline": "No hay amigos en línea", - "register": "REGÍSTRATE AHORA", - "joinNow": "¡Únete a {hotelName} hoy!", - "recentUsers": "Usuarios recientes", - "recentPhotos": "Fotos recientes", - "latestNews": "Últimas noticias", - "newsTitle": "Últimas noticias", - "newsSubtitle": "Lo último del hotel", - "allNews": "Todas las noticias →", - "allUsers": "Comunidad →", - "noArticles": "Aún no hay artículos.", - "noPhotos": "Aún no hay fotos.", - "noUsers": "No hay usuarios en línea", - "latestArticle": "Último artículo", - "latestUsers": "Nuevos ciudadanos ({count} total)", - "statsOnline": "En línea", - "statsCitizens": "Ciudadanos", - "statsRooms": "Salas", - "statsArticles": "Artículos", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Crea tu look único", - "featuresFurniture": "Muebles", - "featuresFurnitureDesc": "Decora salas con objetos", - "featuresCommunity": "Comunidad", - "featuresCommunityDesc": "Haz amigos y chatea", - "featuresGames": "Juegos", - "featuresGamesDesc": "Compite y diviértete" - }, - "news": { - "title": "Noticias", - "subtitle": "Los últimos anuncios, eventos y actualizaciones del hotel", - "noArticles": "Aún no hay artículos." - }, - "article": { - "backToNews": "← Noticias", - "reactionsTitle": "Reacciones", - "reactionsSubtitle": "Dinos lo que piensas", - "reaction": { - "like": "Me gusta", - "love": "Me encanta", - "wow": "Vaya" - }, - "removeReaction": "Haz clic para eliminar tu reacción", - "reactWith": "Reaccionar con {reaction}", - "noReactions": "Aún no hay reacciones.", - "logIn": "Inicia sesión", - "toReact": "para reaccionar.", - "commentsTitle": "Comentarios", - "commentsSubtitle": "Únete a la conversación", - "commentsCount": "{count} hasta ahora", - "noComments": "Aún no hay comentarios. Sé el primero en comentar.", - "userNumber": "Usuario #{id}", - "addComment": "Añadir un comentario", - "commentPlaceholder": "Escribe tu comentario…", - "postComment": "Publicar comentario", - "toComment": "para dejar un comentario.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Fotos", - "subtitle": "Las últimas instantáneas tomadas en el hotel", - "noPhotos": "Aún no hay fotos.", - "photoAlt": "Foto del usuario #{id}", - "byUser": "por el usuario #{id}" - }, - "badges": { - "title": "Insignias", - "subtitle": "Las insignias que puedes ganar y lucir en el hotel", - "noBadges": "Aún no hay insignias disponibles." - }, - "community": { - "title": "Comunidad", - "subtitle": "Todo lo que sucede en el hotel en un solo lugar", - "open": "Abrir →", - "links": { - "rankings": { - "title": "Clasificaciones", - "text": "Ve los jugadores más ricos del hotel, clasificados por créditos." - }, - "staff": { - "title": "Equipo", - "text": "Conoce al equipo que mantiene el hotel en funcionamiento cada día." - }, - "news": { - "title": "Noticias", - "text": "Los últimos anuncios, eventos y actualizaciones." - }, - "photos": { - "title": "Fotos", - "text": "Instantáneas compartidas por la comunidad de todo el hotel." - }, - "guilds": { - "title": "Grupos", - "text": "Explora los grupos que los jugadores han creado y a los que se han unido." - }, - "leaderboards": { - "title": "Tablas de clasificación", - "text": "Quién está en la cima esta temporada en las estadísticas del hotel." - } - } - }, - "guilds": { - "title": "Grupos", - "subtitle": "Explora los grupos que los jugadores han creado y a los que se han unido", - "empty": "Aún no hay grupos.", - "unnamedGuild": "Grupo sin nombre", - "noDescription": "Sin descripción" - }, - "guild": { - "allGuilds": "← Todos los grupos", - "unnamedGuild": "Grupo sin nombre", - "noDescription": "Sin descripción", - "memberSingular": "Miembro", - "memberPlural": "Miembros", - "founded": "Fundado", - "forumLink": "Foro →", - "discussion": "Discusión", - "membersTitle": "Miembros", - "memberLowerSingular": "miembro", - "memberLowerPlural": "miembros", - "noMembers": "No hay miembros.", - "owner": "Dueño", - "noMotto": "Sin lema" - }, - "guildForum": { - "backToGuild": "← Volver al grupo", - "unnamedGuild": "Grupo sin nombre", - "forumTitle": "{guild} — Foro", - "threadSingular": "hilo", - "threadPlural": "hilos", - "newThread": "+ Nuevo hilo", - "empty": "Aún no hay hilos en este foro.", - "colSubject": "Asunto", - "colAuthor": "Autor", - "colPosts": "Mensajes", - "colDate": "Fecha", - "noSubject": "(sin asunto)", - "pinned": "Fijado", - "locked": "Bloqueado", - "userNumber": "Usuario #{id}", - "unknown": "Desconocido", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Volver al foro", - "unnamedGuild": "Grupo sin nombre", - "title": "Nuevo hilo", - "subtitle": "en el foro de {guild}", - "subjectLabel": "Asunto", - "subjectPlaceholder": "Asunto del hilo", - "messageLabel": "Mensaje", - "messagePlaceholder": "Escribe tu mensaje inicial…", - "postThread": "Publicar hilo", - "cancel": "Cancelar", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Tienda", - "subtitle": "Recarga tu cuenta y obtén paquetes exclusivos, moneda e insignias.", - "browsingCategory": "Explorando los paquetes de {category}.", - "all": "Todos", - "allPackages": "Todos los paquetes", - "packagesAvailable": "{count, plural, one {# paquete disponible} other {# paquetes disponibles}}", - "empty": "No hay paquetes disponibles ahora mismo.", - "buy": "Comprar", - "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": "Recargar con PayPal", - "subtitle": "Paga de forma segura con PayPal y tus créditos se añaden en cuanto se procesa el pago.", - "cancelled": "El pago fue cancelado — no se realizó ningún cobro.", - "chooseAmount": "Elige un monto", - "notConfiguredPre": "PayPal aún no está configurado. Un administrador debe configurar", - "notConfiguredAnd": "y", - "notConfiguredOptional": "(y opcionalmente", - "notConfiguredPost": "para sandbox vs. producción).", - "balanceTitle": "Tu saldo", - "signedInAs": "Conectado como {username}", - "credits": "Créditos", - "creditsPerUnit": "Créditos por 1.00 {currency}", - "rateLine": "Recibes {amount} créditos por 1.00 {currency}. Los créditos aparecen en el juego la próxima vez que inicies sesión." - }, - "marketplace": { - "title": "Mercado", - "subtitle": "Explora muebles y rarezas listados por jugadores. Los listados se colocan en el juego y se actualizan en vivo — entra al hotel para hacer una oferta.", - "activeOffers": "Ofertas activas", - "sellers": "Vendedores", - "totalValue": "Valor total", - "activeListings": "Listados activos", - "mostRecentFirst": "Más recientes primero", - "empty": "No hay ofertas activas en el mercado ahora mismo. Vuelve más tarde.", - "colOffer": "Oferta", - "colItem": "Artículo", - "colSeller": "Vendedor", - "colPrice": "Precio", - "colListed": "Publicado", - "itemLabel": "Artículo #{id}", - "userLabel": "Usuario #{id}", - "justNow": "ahora mismo", - "minutesAgo": "hace {count}m", - "hoursAgo": "hace {count}h", - "daysAgo": "hace {count}d" - }, - "rares": { - "title": "Valores raros", - "subtitle": "Obtén una visión general de todas las rarezas del hotel, agrupadas por categoría.", - "empty": "Actualmente no tenemos rarezas listadas aquí.", - "rareCount": "{count, plural, one {# rareza} other {# rarezas}}", - "viewRares": "Ver rarezas →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rareza en esta categoría} other {# rarezas en esta categoría}}", - "allRares": "← Todas las rarezas", - "empty": "Aún no hay rarezas listadas en esta categoría.", - "colRare": "Rareza", - "colCredits": "Créditos", - "colCurrency": "Moneda", - "creditsValue": "{value} créditos", - "duckets": "Duckets", - "diamonds": "Diamantes", - "credits": "Créditos" - }, - "redeem": { - "title": "Canjear un vale", - "subtitle": "¿Tienes un código de vale? Introdúcelo abajo para añadir la recompensa a tu cuenta.", - "enterCode": "Ingresa tu código", - "oncePerAccount": "Cada vale solo puede canjearse una vez por cuenta.", - "balanceTitle": "Tu saldo", - "signedInAs": "Conectado como {username}", - "credits": "Créditos", - "instantCredit": "Las recompensas canjeadas se acreditan al instante y aparecen en el juego la próxima vez que inicies sesión." - }, - "help": { - "title": "Centro de ayuda", - "subtitle": "Encuentra guías, temas de soporte y las reglas del hotel — todo lo que necesitas para obtener ayuda.", - "myTickets": "Mis tickets →", - "topicsTitle": "Temas de soporte", - "topicsSubtitle": "Explora guías y respuestas a preguntas frecuentes", - "topicsEmpty": "Aún no hay temas de ayuda.", - "rulesTitle": "Reglas del hotel", - "rulesSubtitle": "Por favor, léelas antes de pasar el rato en el hotel", - "rulesEmpty": "Aún no hay reglas publicadas.", - "categoryEmpty": "No hay reglas en esta categoría." - }, - "helpCategory": { - "back": "← Centro de ayuda", - "topicSubtitle": "Tema del centro de ayuda", - "moreTitle": "Más temas de ayuda", - "moreSubtitle": "Ir a otro tema de soporte" - }, - "helpTickets": { - "title": "Tickets de ayuda", - "subtitle": "Envía un ticket al equipo y sigue tus solicitudes abiertas.", - "statTotal": "Total de tickets", - "statOpen": "Abiertos", - "statClosed": "Cerrados", - "newTitle": "Nuevo ticket", - "newSubtitle": "Describe tu problema y el equipo hará seguimiento", - "subjectPlaceholder": "Asunto", - "contentPlaceholder": "Describe tu problema…", - "submit": "Enviar ticket", - "listTitle": "Tus tickets", - "listSubtitle": "Todas las solicitudes que has enviado al equipo", - "listEmpty": "Aún no tienes tickets.", - "colId": "ID", - "colSubject": "Asunto", - "colStatus": "Estado", - "colCreated": "Creado", - "statusOpen": "Abierto", - "statusClosed": "Cerrado", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Solicitar unirte al equipo de {hotel}", - "subtitle": "Abrimos solicitudes de personal de vez en cuando. Si encuentras un puesto en el que crees que encajarías perfectamente, no dudes en solicitarlo.", - "noPositionsTitle": "No hay puestos abiertos", - "noPositionsBody": "Actualmente no hay puestos abiertos. Vuelve más tarde para comprobar si tenemos alguna vacante. Gracias por tu interés.", - "noDeadline": "Sin fecha límite", - "deadline": "Fecha límite de solicitud: {date}", - "alreadyApplied": "Ya has solicitado {rank}", - "aboutYou": "Sobre ti", - "aboutPlaceholder": "Cuéntanos por qué serías un gran {rank}…", - "applyFor": "Solicitar {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": "Solicitar unirte al equipo de {hotel}", - "subtitle": "Abrimos solicitudes de equipo periódicamente. ¡Si ves un equipo al que encajas, no dudes en solicitarlo!", - "noPositionsTitle": "No hay puestos de equipo abiertos", - "noPositionsBody": "Actualmente no hay puestos de equipo abiertos. Vuelve más tarde para comprobar si hay nuevas vacantes. ¡Gracias!", - "pending": "Tu solicitud está pendiente", - "aboutYou": "Sobre ti", - "aboutPlaceholder": "Cuéntanos por qué serías ideal para {rank}…", - "applyFor": "Solicitar {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": "Sintoniza la radio del hotel — sesiones de DJ en vivo, solicitudes y saludos.", - "nowPlaying": "Reproduciendo ahora", - "nothingPlaying": "No se está reproduciendo nada ahora mismo.", - "onAir": "Al aire: {dj}", - "noDj": "No hay DJ al aire.", - "audioUnsupported": "Tu navegador no soporta el elemento de audio.", - "streamOffline": "La transmisión está actualmente fuera de línea.", - "exploreTitle": "Explora la radio", - "exploreSubtitle": "Horario, saludos, solicitudes y más", - "linkSchedule": "Horario", - "linkScheduleText": "Nuestra programación semanal de DJs y programas.", - "linkShouts": "Saludos", - "linkShoutsText": "Saludos y solicitudes de la comunidad.", - "linkRequests": "Solicitudes", - "linkRequestsText": "Pídele al DJ que ponga tu canción favorita.", - "linkApply": "Solicitar ser DJ", - "linkApplyText": "Únete al equipo y sal al aire.", - "linkLeaderboard": "Tabla de clasificación", - "linkLeaderboardText": "Los mejores oyentes clasificados por puntos obtenidos.", - "todayTitle": "Horario de hoy", - "todayTitleWithDay": "Horario de hoy · {day}", - "todaySubtitle": "Lo que hay al aire hoy", - "fullWeek": "Semana completa →", - "noShowsToday": "No hay programas programados para hoy.", - "colTime": "Hora", - "colShow": "Programa", - "colDj": "DJ", - "untitledShow": "Programa sin título", - "userNumber": "Usuario #{id}" - }, - "radioSchedule": { - "title": "Horario de radio", - "subtitle": "Nuestra programación semanal de DJs y programas", - "empty": "Aún no hay programas programados.", - "colDay": "Día", - "colTime": "Hora", - "colDj": "DJ", - "colShow": "Programa", - "noShows": "Sin programas" - }, - "radioShouts": { - "title": "Saludos de radio", - "subtitle": "Saludos y solicitudes de la comunidad", - "postTitle": "Publicar un saludo", - "postSubtitle": "Envía un mensaje al DJ al aire", - "messageLabel": "Tu mensaje", - "messagePlaceholder": "Envía un saludo al DJ…", - "shoutButton": "Saludar", - "loginToPost": "Inicia sesión para publicar un saludo.", - "latestTitle": "Últimos saludos", - "latestSubtitle": "Los mensajes más recientes de los oyentes", - "empty": "Aún no hay saludos. ¡Sé el primero!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Concursos de radio", - "subtitle": "Sintoniza y participa en nuestros últimos concursos al aire", - "empty": "Aún no hay concursos.", - "contestLabel": "Concurso #{id}", - "dateUnknown": "Fecha desconocida" - }, - "radioGiveaways": { - "title": "Sorteos de radio", - "subtitle": "Escucha para tener la oportunidad de ganar en nuestros sorteos de radio", - "empty": "Aún no hay sorteos.", - "giveawayLabel": "Sorteo #{id}", - "dateUnknown": "Fecha desconocida" - }, - "radioLeaderboard": { - "title": "Tabla de clasificación de oyentes", - "subtitle": "Top 50 oyentes por puntos obtenidos sintonizando la radio", - "empty": "Aún no hay puntos de oyente que mostrar.", - "colRank": "Rango", - "colAvatar": "Avatar", - "colListener": "Oyente", - "colPoints": "Puntos" - }, - "radioApply": { - "title": "Solicitar ser DJ de radio", - "subtitle": "Cuéntanos sobre ti y por qué serías ideal para la radio", - "latestTitle": "Tu última solicitud", - "statusLabel": "Estado:", - "submittedOn": "· enviada el {date}", - "submitAgain": "Puedes enviarla de nuevo abajo si tus datos han cambiado.", - "formTitle": "Formulario de solicitud", - "formSubtitle": "Todos los campos marcados como obligatorios deben completarse", - "realNameLabel": "Nombre real", - "realNamePlaceholder": "Tu nombre completo", - "ageLabel": "Edad", - "availabilityLabel": "Disponibilidad", - "availabilityPlaceholder": "¿Qué días y horarios puedes transmitir?", - "musicStyleLabel": "Estilo musical", - "musicStylePlaceholder": "ej. House, Pop, Hip-Hop", - "experienceLabel": "Experiencia", - "optional": "(opcional)", - "experiencePlaceholder": "¿Tienes experiencia previa como DJ o presentador?", - "motivationLabel": "Motivación", - "motivationPlaceholder": "¿Por qué quieres unirte al equipo de radio?", - "submitButton": "Enviar solicitud", - "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": "Configuración de la cuenta", - "accountSettingsSubtitle": "Gestiona tu perfil, seguridad y cuentas conectadas", - "publicProfile": "Tu perfil público", - "noMotto": "Sin lema", - "noEmail": "Sin correo electrónico registrado", - "changeMotto": "Cambiar lema", - "changeMottoSubtitle": "Se actualiza al instante en el juego si estás en línea", - "mottoPlaceholder": "Tu lema", - "saveMotto": "Guardar lema", - "securityTitle": "Seguridad", - "securitySubtitle": "Autenticación de dos factores", - "securityDescription": "Añade una segunda capa de protección a tu cuenta.", - "twoFactorLink": "Autenticación de dos factores" - }, - "settings2fa": { - "backToSettings": "← Configuración", - "title": "Autenticación de dos factores", - "subtitle": "Añade una segunda capa de seguridad con una aplicación de autenticación", - "nowEnabled": "2FA está ahora activado. 🔒", - "disabledNotice": "2FA ha sido desactivado.", - "badCode": "Ese código no era válido — inténtalo de nuevo.", - "noAppKeyPrefix": "2FA no está disponible hasta que", - "noAppKeyMiddle": "esté configurada (la misma", - "noAppKeySuffix": "que en tu instalación de AtomCMS, para que los secretos existentes sigan siendo legibles).", - "isEnabled": "2FA está activado", - "onYourAccount": "en tu cuenta.", - "disable": "Desactivar 2FA", - "scanOrEnter": "Escanea o ingresa esta clave", - "scanInstructions": "Añade esto a Google Authenticator / Authy, luego ingresa el código de 6 dígitos para confirmar.", - "manualKey": "Clave manual:", - "codePlaceholder": "Código de 6 dígitos", - "confirm": "Confirmar", - "enableIntro": "Añade una segunda capa de seguridad con una aplicación de autenticación.", - "enable": "Activar 2FA" - }, - "title": "Cuentas conectadas", - "subtitle": "Vincula una cuenta social para iniciar sesión con un clic", - "connected": "Conectado", - "unavailable": "No disponible", - "login": { - "title": "Iniciar sesión", - "subtitle": "Bienvenido de nuevo — inicia sesión para entrar al hotel.", - "subtitle2fa": "Ingresa el código de 6 dígitos de tu autenticador.", - "usernamePlaceholder": "Usuario", - "passwordPlaceholder": "Contraseña", - "codePlaceholder": "Código 2FA", - "pleaseWait": "Por favor espera…", - "verify": "Verificar", - "signIn": "Iniciar sesión", - "or": "o", - "noAccount": "¿No tienes cuenta?", - "createOne": "Crea una", - "forgotPassword": "¿Olvidaste tu contraseña?", - "errorInvalidCredentials": "Usuario o contraseña inválidos", - "errorInvalid2fa": "Código 2FA inválido", - "welcomeBack": "Bienvenido de nuevo", - "welcomeBackSub": "Inicia sesión para continuar en {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Crear cuenta", - "subtitle": "Únete al hotel — solo toma un momento.", - "username": "Usuario", - "email": "Correo electrónico", - "password": "Contraseña", - "confirmPassword": "Repetir contraseña", - "usernamePlaceholder": "Usuario", - "emailPlaceholder": "Correo electrónico", - "passwordPlaceholder": "Contraseña (mín. 6 caracteres)", - "confirmPasswordPlaceholder": "Repetir contraseña", - "selectOutfit": "Selecciona tu atuendo", - "termsAccept": "Soy mayor de 18 años y acepto los términos y reglas de {hotel}.", - "createAccount": "Crear cuenta", - "creatingAccount": "Creando cuenta...", - "redirecting": "Redirigiendo a tu cuenta...", - "alreadyHaveAccount": "¿Ya tienes una cuenta? ¡Inicia sesión!", - "register": "Registrarse", - "termsError": "Debes aceptar los términos y reglas para registrarte.", - "usernameError": "El usuario es obligatorio.", - "emailError": "Se requiere un correo electrónico válido.", - "passwordError": "La contraseña debe tener al menos 6 caracteres.", - "confirmPasswordError": "Las contraseñas no coinciden.", - "termsRequired": "Debes aceptar los términos y reglas.", - "usernameRequired": "El usuario es obligatorio.", - "emailRequired": "El correo electrónico es obligatorio.", - "passwordRequired": "La contraseña es obligatoria.", - "passwordsDontMatch": "Las contraseñas no coinciden.", - "alreadyHaveAccountPre": "¿Ya tienes una cuenta?", - "alreadyHaveAccountLink": "Iniciar sesión", - "whoIsOnline": "Quién está en línea", - "usersOnline": "{count} en línea" - }, - "forgot": { - "title": "Restablecer contraseña", - "subtitle": "Te enviaremos por correo electrónico un enlace seguro para establecer una nueva contraseña.", - "sentNotice": "Si ese correo está registrado, se ha enviado un enlace de restablecimiento. Revisa tu bandeja de entrada.", - "emailPlaceholder": "Tu correo electrónico", - "sendResetLink": "Enviar enlace de restablecimiento", - "backToLogin": "Volver al inicio de sesión", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Establecer una nueva contraseña", - "subtitle": "Elige una contraseña segura que no uses en otros sitios.", - "passwordPlaceholder": "Nueva contraseña (mín. 6 caracteres)", - "resetPassword": "Restablecer contraseña", - "backToLogin": "Volver al inicio de sesión" - }, - "verify": { - "verifiedTitle": "Todo está listo", - "verifiedSubtitle": "Correo electrónico verificado", - "verifiedBody": "Tu dirección de correo electrónico ha sido verificada. Ya puedes iniciar sesión y jugar.", - "goToLogin": "Ir al inicio de sesión", - "alreadyTitle": "Ya verificado", - "alreadySubtitle": "Nada más que hacer", - "alreadyBody": "Esta dirección de correo electrónico ya ha sido confirmada.", - "unavailableTitle": "Inténtalo de nuevo en breve", - "unavailableSubtitle": "Servidor inaccesible", - "unavailableBody": "No pudimos contactar al servidor para verificar tu correo. Por favor, intenta el enlace de nuevo en un momento.", - "invalidTitle": "Verificación de correo electrónico", - "invalidSubtitle": "Enlace inválido o expirado", - "invalidBody": "Este enlace de verificación no es válido. Asegúrate de haber abierto el enlace completo de tu correo, o solicita uno nuevo.", - "backToLogin": "Volver al inicio de sesión" - }, - "banned": { - "title": "Has sido baneado", - "subtitle": "Cuenta suspendida", - "body": "Tu cuenta ha sido suspendida del hotel.", - "reasonLabel": "Motivo:", - "permanent": "Este baneo es permanente.", - "expires": "Expira el {date}.", - "contactStaff": "Si crees que esto es un error, contacta al equipo." - }, - "maintenance": { - "title": "{hotel} está en mantenimiento", - "subtitle": "Volveremos en breve", - "staffCanLogIn": "El equipo aún puede iniciar sesión." - }, - "admin": { - "nav": { - "overview": "Resumen", - "dashboard": "Panel", - "content": "Contenido", - "articles": "Artículos", - "tags": "Etiquetas", - "navigator": "Navegador", - "helpCenter": "Centro de ayuda", - "advertisements": "Anuncios", - "writeableBoxes": "Cajas editables", - "photos": "Fotos", - "tickets": "Tickets", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Usuarios y acceso", - "users": "Usuarios", - "bans": "Sanciones", - "ipManagement": "Gestión de IP", - "vpn": "VPN", - "applications": "Solicitudes", - "teams": "Equipos", - "permissions": "Permisos", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Economía", - "catalog": "Catálogo", - "shop": "Tienda", - "transactions": "Transacciones", - "vouchers": "Vales", - "subscriptions": "Suscripciones", - "rareValues": "Valores raros", - "badges": "Insignias", - "achievements": "Logros", - "calendar": "Calendario", - "radio": "Radio", - "radioHistory": "Historial de radio", - "radioBanners": "Banners", - "radioEmbed": "Incrustar", - "radioApiKeys": "Claves API", - "radioModeration": "Moderación", - "radioSettings": "Ajustes", - "radioMonitoring": "Monitoreo", - "radioPoints": "Puntos", - "radioRanks": "Rangos", - "radioAutodj": "Auto DJ", - "system": "Sistema", - "commandocentrum": "Centro de comandos", - "emulator": "Emulador", - "alerts": "Alertas", - "logs": "Registros", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Filtro de palabras", - "maintenance": "Mantenimiento", - "rooms": "Salas", - "emailTemplates": "Plantillas de correo", - "theme": "Tema", - "media": "Multimedia", - "favicon": "Favicon", - "sounds": "Sonidos", - "translations": "Traducciones", - "import": "Importar", - "settings": "Ajustes", - "backToSite": "Volver al sitio", - "housekeeping": "Housekeeping", - "hotelManagementPanel": "Panel de gestión del hotel", - "rankLabel": "Rango {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Buscar en el menú…", - "clearMenuSearch": "Borrar búsqueda", - "noMenuResults": "No se encontraron páginas.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "studio": "Studio", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Panel", - "subtitle": "Resumen del hotel y estado en vivo", - "playersOnline": "Jugadores en línea", - "articles": "Artículos", - "activeBans": "Sanciones activas", - "database": "Base de datos", - "databaseConnected": "Conectada", - "databaseDown": "Caída", - "usersByRank": "Usuarios por rango", - "noAccountsToBreakDown": "Aún no hay cuentas que desglosar", - "rankLabel": "Rango {rank}", - "rankWithCount": "Rango {rank}: {count} cuentas", - "recentStaffActivity": "Actividad reciente del equipo", - "viewAll": "Ver todo", - "noStaffActivityLogged": "Aún no se ha registrado actividad del equipo" - }, - "articles": { - "title": "Artículos", - "subtitle": "Artículos de noticias — 50 más recientes", - "newArticle": "+ Nuevo artículo", - "edit": "Editar", - "delete": "Eliminar", - "noArticles": "Aún no hay artículos", - "confirmDelete": "¿Estás seguro de que quieres eliminar \"{title}\"?", - "colTitle": "Título", - "colSlug": "Slug", - "colAuthor": "Autor", - "colCreated": "Creado", - "colActions": "Acciones", - "form": { - "title": "Título", - "titlePlaceholder": "Título del artículo", - "slug": "Slug", - "slugPlaceholder": "slug-url-del-artículo", - "category": "Categoría", - "categoryPlaceholder": "Selecciona una categoría", - "body": "Contenido", - "bodyPlaceholder": "Escribe el contenido del artículo…", - "image": "Imagen", - "imagePlaceholder": "https://example.com/imagen.png", - "thumbnail": "Miniatura", - "thumbnailPlaceholder": "https://example.com/miniatura.png", - "published": "Publicado", - "featured": "Destacado", - "save": "Guardar artículo", - "saving": "Guardando…", - "deleteArticle": "Eliminar artículo", - "deleteConfirm": "Esta acción no se puede deshacer. El artículo se eliminará permanentemente.", - "cancel": "Cancelar", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Etiquetas", - "subtitle": "Etiquetas / categorías de artículos", - "addTag": "Añadir etiqueta", - "name": "Nombre", - "namePlaceholder": "Nombre de la etiqueta", - "backgroundColour": "Color de fondo", - "createTag": "Crear etiqueta", - "editTag": "Editar etiqueta", - "updateTag": "Actualizar etiqueta", - "deleteTag": "Eliminar etiqueta", - "confirmDelete": "¿Eliminar \"{name}\"?", - "noTags": "Aún no hay etiquetas", - "colId": "ID", - "colTag": "Etiqueta", - "colColour": "Color", - "colUsedBy": "Usada por", - "colCreated": "Creada", - "colActions": "Acciones" - }, - "navigation": { - "title": "Navegador", - "flatCategories": "Categorías planas", - "publicRooms": "Salas públicas", - "addCategory": "Añadir categoría", - "editCategory": "Editar categoría", - "deleteCategory": "Eliminar categoría", - "categoryName": "Nombre de categoría", - "categoryNamePlaceholder": "ej. Relax y Charla", - "categoryOrder": "Orden", - "roomName": "Nombre de sala", - "roomNamePlaceholder": "ej. Sala de Bienvenida", - "roomId": "ID de sala", - "roomIdPlaceholder": "ID numérico de la sala", - "save": "Guardar", - "cancel": "Cancelar", - "noCategories": "Aún no hay categorías", - "noPublicRooms": "Aún no hay salas públicas", - "colId": "ID", - "colName": "Nombre", - "colOrder": "Orden", - "colRooms": "Salas", - "colActions": "Acciones" - }, - "helpCenter": { - "title": "Centro de ayuda", - "subtitle": "Gestión de entradas de soporte y FAQ", - "entries": "Entradas", - "newEntry": "+ Nueva entrada", - "edit": "Editar", - "delete": "Eliminar", - "noEntries": "Aún no hay entradas", - "confirmDelete": "¿Eliminar \"{title}\"?", - "colId": "ID", - "colTitle": "Título", - "colCategory": "Categoría", - "colCreated": "Creada", - "colActions": "Acciones", - "form": { - "title": "Título", - "titlePlaceholder": "Título de la entrada", - "category": "Categoría", - "categoryPlaceholder": "Seleccionar categoría", - "body": "Contenido", - "bodyPlaceholder": "Escribe la respuesta…", - "save": "Guardar entrada", - "saving": "Guardando…", - "deleteEntry": "Eliminar entrada", - "cancel": "Cancelar" - } - }, - "ads": { - "title": "Anuncios", - "subtitle": "Gestionar anuncios del hotel y banners promocionales", - "newAd": "+ Nuevo anuncio", - "edit": "Editar", - "delete": "Eliminar", - "noAds": "Aún no hay anuncios", - "confirmDelete": "¿Eliminar este anuncio?", - "colId": "ID", - "colName": "Nombre", - "colImage": "Imagen", - "colUrl": "URL", - "colViews": "Vistas", - "colStatus": "Estado", - "colCreated": "Creado", - "colActions": "Acciones", - "form": { - "name": "Nombre", - "namePlaceholder": "Nombre del anuncio", - "image": "URL de imagen", - "imagePlaceholder": "https://example.com/banner.png", - "url": "URL de destino", - "urlPlaceholder": "https://example.com", - "enabled": "Activado", - "save": "Guardar anuncio", - "saving": "Guardando…", - "deleteAd": "Eliminar anuncio", - "cancel": "Cancelar" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Cajas editables", - "subtitle": "Paneles de contenido mostrados en el hotel y CMS", - "newBox": "Nueva caja", - "edit": "Editar", - "delete": "Eliminar", - "noBoxes": "Aún no hay cajas editables", - "confirmDelete": "¿Eliminar esta caja?", - "colId": "ID", - "colName": "Nombre", - "colLocation": "Ubicación", - "colUpdated": "Actualizada", - "colActions": "Acciones", - "form": { - "name": "Nombre", - "namePlaceholder": "Nombre de la caja", - "location": "Ubicación", - "locationPlaceholder": "ej. portada, barra lateral", - "content": "Contenido", - "contentPlaceholder": "Escribe el contenido de la caja…", - "enabled": "Activado", - "save": "Guardar caja", - "saving": "Guardando…", - "deleteBox": "Eliminar caja", - "cancel": "Cancelar" - } - }, - "photos": { - "title": "Moderación de fotos", - "subtitle": "Fotos recientes de la cámara del juego", - "delete": "Eliminar", - "approve": "Aprobar", - "noPhotos": "No hay fotos que moderar", - "confirmDelete": "¿Eliminar esta foto permanentemente?", - "colId": "ID", - "colPreview": "Vista previa", - "colUser": "Usuario", - "colRoom": "Sala", - "colTimestamp": "Fecha", - "colActions": "Acciones", - "photoAlt": "Foto de usuario #{id}", - "byUser": "por {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Usuarios", - "subtitle": "Explorar, buscar y gestionar cuentas del hotel", - "search": "Buscar", - "searchPlaceholder": "Buscar por usuario, correo o ID…", - "searchResults": "{count, plural, one {# resultado} other {# resultados}} para \"{query}\"", - "noResults": "No se encontraron usuarios", - "colId": "ID", - "colUsername": "Usuario", - "colEmail": "Correo", - "colRank": "Rango", - "colOnline": "En línea", - "colRegistered": "Registrado", - "colLastOnline": "Última conexión", - "colActions": "Acciones", - "yes": "Sí", - "no": "No", - "edit": "Editar", - "setRank": "Asignar rango", - "disconnect": "Desconectar", - "alert": "Alerta", - "ban": "Sancionar", - "detail": { - "title": "Usuario: {username}", - "subtitle": "Detalles de la cuenta y gestión", - "overview": "Resumen", - "actions": "Acciones", - "username": "Usuario", - "email": "Correo", - "motto": "Lema", - "rank": "Rango", - "credits": "Créditos", - "duckets": "Duckets", - "diamonds": "Diamantes", - "online": "En línea", - "registered": "Registrado", - "lastOnline": "Última conexión", - "ipAddress": "Dirección IP", - "machineId": "ID de máquina", - "sendAlert": "Enviar alerta", - "sendMessage": "Enviar mensaje", - "disconnectUser": "Desconectar usuario", - "banUser": "Sancionar usuario", - "resetPassword": "Restablecer contraseña", - "deleteUser": "Eliminar usuario", - "confirmDelete": "¿Estás seguro de que quieres eliminar a {username}? Esto no se puede deshacer.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Editar usuario: {username}", - "subtitle": "Modificar detalles de la cuenta", - "username": "Usuario", - "usernamePlaceholder": "Usuario", - "email": "Correo", - "emailPlaceholder": "usuario@example.com", - "motto": "Lema", - "mottoPlaceholder": "Lema del usuario", - "rank": "Rango", - "credits": "Créditos", - "duckets": "Duckets", - "diamonds": "Diamantes", - "save": "Guardar cambios", - "saving": "Guardando…", - "cancel": "Cancelar" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Sanciones", - "subtitle": "Gestionar sanciones de cuenta, IP y máquina", - "newBan": "Nueva sanción", - "edit": "Editar", - "delete": "Eliminar", - "noBans": "Aún no hay sanciones", - "confirmDelete": "¿Eliminar esta sanción?", - "colId": "ID", - "colValue": "Valor", - "colType": "Tipo", - "colReason": "Motivo", - "colBannedBy": "Sancionado por", - "colExpires": "Expira", - "colCreated": "Creada", - "colActions": "Acciones", - "form": { - "value": "Valor", - "valuePlaceholder": "Usuario, IP o ID de máquina", - "type": "Tipo", - "typeUser": "Usuario", - "typeIp": "IP", - "typeMachine": "Máquina", - "reason": "Motivo", - "reasonPlaceholder": "Motivo de la sanción", - "expiresAt": "Expira el", - "permanent": "Permanente", - "save": "Guardar sanción", - "saving": "Guardando…", - "cancel": "Cancelar" - } - }, - "ip": { - "title": "Gestión de IP", - "subtitle": "Gestionar lista blanca y negra de IP", - "whitelist": "Lista blanca", - "blacklist": "Lista negra", - "addIp": "Añadir IP", - "ipAddress": "Dirección IP", - "ipAddressPlaceholder": "ej. 127.0.0.1", - "reason": "Motivo", - "reasonPlaceholder": "Motivo del listado", - "add": "Añadir", - "remove": "Eliminar", - "confirmRemove": "¿Eliminar esta IP de la {list}?", - "noWhitelistedIps": "No hay IP en lista blanca", - "noBlacklistedIps": "No hay IP en lista negra", - "colIp": "IP", - "colReason": "Motivo", - "colAdded": "Añadida", - "colActions": "Acciones" - }, - "vpn": { - "title": "Detección de VPN / Proxy", - "subtitle": "Configurar ajustes de detección de VPN y proxy", - "enabled": "Activado", - "apiKey": "Clave de API", - "apiKeyPlaceholder": "Tu clave de API de detección de VPN", - "apiKeyHint": "Déjalo vacío para desactivar", - "blockOnDetect": "Bloquear al detectar", - "blockOnDetectHint": "Bloquear automáticamente a usuarios detectados detrás de una VPN o proxy", - "save": "Guardar ajustes", - "saving": "Guardando…", - "settingsSaved": "Ajustes de VPN guardados correctamente" - }, - "applications": { - "title": "Solicitudes de personal", - "subtitle": "Solicitudes de personal pendientes y revisadas", - "pending": "Pendientes", - "approved": "Aprobadas", - "rejected": "Rechazadas", - "noApplications": "Aún no hay solicitudes", - "colId": "ID", - "colApplicant": "Solicitante", - "colPosition": "Puesto", - "colStatus": "Estado", - "colSubmitted": "Enviada", - "colActions": "Acciones", - "review": "Revisar", - "approve": "Aprobar", - "reject": "Rechazar", - "confirmApprove": "¿Aprobar a {username} para {position}?", - "confirmReject": "¿Rechazar la solicitud de {username} para {position}?", - "detail": { - "title": "Solicitud de {username}", - "subtitle": "Para {position}", - "about": "Sobre el solicitante", - "message": "Mensaje de solicitud", - "status": "Estado", - "submitted": "Enviada", - "noMessage": "No se proporcionó mensaje" - } - }, - "teams": { - "title": "Equipos", - "subtitle": "Definir nombres y descripciones de rangos del equipo", - "addRank": "Añadir rango", - "editRank": "Editar rango", - "deleteRank": "Eliminar rango", - "noTeams": "Aún no hay definiciones de rango", - "confirmDelete": "¿Eliminar la definición del rango {id}?", - "colId": "ID", - "colRank": "Rango", - "colName": "Nombre", - "colBadge": "Insignia", - "colColour": "Color", - "colActions": "Acciones", - "form": { - "rankId": "ID de rango", - "rankIdPlaceholder": "ID numérico del rango", - "name": "Nombre", - "namePlaceholder": "ej. Administrador", - "badge": "Código de insignia", - "badgePlaceholder": "ej. ADM001", - "colour": "Color", - "colourPlaceholder": "ej. #ff0000", - "save": "Guardar definición de equipo", - "saving": "Guardando…", - "cancel": "Cancelar" - } - }, - "permissions": { - "title": "Permisos", - "subtitle": "Gestionar permisos basados en rangos para el panel de administración", - "addPermission": "Añadir permiso", - "editPermission": "Editar permiso", - "deletePermission": "Eliminar permiso", - "noPermissions": "Aún no hay permisos configurados", - "confirmDelete": "¿Eliminar este permiso?", - "colId": "ID", - "colRank": "Rango", - "colPermission": "Permiso", - "colCreated": "Creado", - "colActions": "Acciones", - "form": { - "rankId": "ID de rango", - "rankIdPlaceholder": "Rango mínimo requerido", - "permission": "Clave de permiso", - "permissionPlaceholder": "ej. admin.articles.manage", - "save": "Guardar permiso", - "saving": "Guardando…", - "cancel": "Cancelar" - } - }, - "catalog": { - "title": "Catálogo", - "subtitle": "Explorar y gestionar páginas y artículos del catálogo", - "pages": "Páginas", - "items": "Artículos", - "addPage": "Añadir página", - "editPage": "Editar página", - "deletePage": "Eliminar página", - "addItem": "Añadir artículo", - "editItem": "Editar artículo", - "deleteItem": "Eliminar artículo", - "noPages": "Aún no hay páginas de catálogo", - "noItems": "No hay artículos en esta página", - "confirmDeletePage": "¿Eliminar la página de catálogo \"{name}\"?", - "confirmDeleteItem": "¿Eliminar este artículo?", - "colId": "ID", - "colName": "Nombre", - "colIcon": "Icono", - "colOrder": "Orden", - "colItems": "Artículos", - "colEnabled": "Activado", - "colActions": "Acciones", - "colItemId": "ID del artículo", - "colItemName": "Nombre del artículo", - "colCostCredits": "Coste (créditos)", - "colCostPoints": "Coste (puntos)", - "colLimited": "Limitado", - "pageForm": { - "name": "Nombre", - "namePlaceholder": "Nombre de la página", - "icon": "ID del icono", - "iconPlaceholder": "ID numérico del icono", - "order": "Orden", - "enabled": "Activado", - "parent": "Página padre", - "parentNone": "Ninguna (raíz)", - "save": "Guardar página", - "saving": "Guardando…", - "cancel": "Cancelar" - }, - "itemForm": { - "itemId": "ID del artículo", - "itemName": "Nombre del artículo", - "costCredits": "Coste en créditos", - "costDuckets": "Coste en duckets", - "costDiamonds": "Coste en diamantes", - "limitedStack": "Tamaño de lote limitado", - "limitedSold": "Limitados vendidos", - "save": "Guardar artículo", - "saving": "Guardando…", - "cancel": "Cancelar" - }, - "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." - } - }, - "shop": { - "title": "Tienda", - "subtitle": "Gestionar paquetes y pedidos", - "packages": "Paquetes", - "orders": "Pedidos", - "newPackage": "+ Nuevo paquete", - "edit": "Editar", - "delete": "Eliminar", - "viewOrder": "Ver", - "noPackages": "Aún no hay paquetes en la tienda", - "noOrders": "Aún no hay pedidos", - "confirmDelete": "¿Eliminar este paquete?", - "colId": "ID", - "colName": "Nombre", - "colPrice": "Precio", - "colCurrency": "Moneda", - "colType": "Tipo", - "colSold": "Vendidos", - "colEnabled": "Activado", - "colActions": "Acciones", - "colOrderId": "ID de pedido", - "colCustomer": "Cliente", - "colPackage": "Paquete", - "colAmount": "Cantidad", - "colStatus": "Estado", - "colDate": "Fecha", - "statusPending": "Pendiente", - "statusCompleted": "Completado", - "statusRefunded": "Reembolsado", - "form": { - "name": "Nombre", - "namePlaceholder": "Nombre del paquete", - "description": "Descripción", - "descriptionPlaceholder": "Descripción del paquete", - "price": "Precio", - "currency": "Moneda", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Tipo", - "typeCredits": "Créditos", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamantes", - "typeBadge": "Insignia", - "typeFurni": "Mueble", - "typeRank": "Rango", - "amount": "Cantidad", - "badgeCode": "Código de insignia", - "badgeCodePlaceholder": "ej. VIP001", - "rankId": "ID de rango", - "furniItems": "Muebles", - "enabled": "Activado", - "save": "Guardar paquete", - "saving": "Guardando…", - "cancel": "Cancelar" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Transacciones", - "subtitle": "Registro de pagos de PayPal", - "noTransactions": "Aún no hay transacciones", - "colId": "ID", - "colUser": "Usuario", - "colAmount": "Cantidad", - "colCurrency": "Moneda", - "colPackage": "Paquete", - "colStatus": "Estado", - "colDate": "Fecha", - "colActions": "Acciones", - "statusCompleted": "Completado", - "statusPending": "Pendiente", - "statusFailed": "Fallido", - "statusRefunded": "Reembolsado", - "detail": { - "title": "Transacción #{id}", - "paypalId": "ID de PayPal", - "payerEmail": "Correo del pagador", - "grossAmount": "Importe bruto", - "fee": "Comisión", - "netAmount": "Importe neto" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Vales de tienda", - "subtitle": "Gestionar códigos de vale canjeables", - "newVoucher": "+ Nuevo vale", - "edit": "Editar", - "delete": "Eliminar", - "noVouchers": "Aún no hay vales", - "confirmDelete": "¿Eliminar el vale \"{code}\"?", - "colId": "ID", - "colCode": "Código", - "colValue": "Valor", - "colType": "Tipo", - "colUses": "Usos / Máx", - "colExpires": "Expira", - "colCreated": "Creado", - "colActions": "Acciones", - "form": { - "code": "Código", - "codePlaceholder": "ej. VERANO2025", - "value": "Valor", - "type": "Tipo", - "typeCredits": "Créditos", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamantes", - "typeBadge": "Insignia", - "typeFurni": "Mueble", - "typeRank": "Rango", - "badgeCode": "Código de insignia", - "badgeCodePlaceholder": "ej. VIP001", - "rankId": "ID de rango", - "maxUses": "Usos máximos", - "maxUsesPlaceholder": "0 = ilimitado", - "expiresAt": "Expira el", - "enabled": "Activado", - "save": "Guardar vale", - "saving": "Guardando…", - "cancel": "Cancelar", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Suscripciones", - "subtitle": "Suscripciones recurrentes activas", - "noSubscriptions": "No hay suscripciones activas", - "cancel": "Cancelar", - "confirmCancel": "¿Cancelar la suscripción de {username}?", - "colId": "ID", - "colUser": "Usuario", - "colPackage": "Paquete", - "colAmount": "Cantidad", - "colInterval": "Intervalo", - "colStarted": "Iniciada", - "colNextBilling": "Próximo cobro", - "colStatus": "Estado", - "colActions": "Acciones", - "statusActive": "Activa", - "statusCancelled": "Cancelada", - "statusExpired": "Expirada" - }, - "rareValues": { - "title": "Valores raros", - "subtitle": "Gestionar categorías de valores raros y precios de artículos", - "categories": "Categorías", - "items": "Artículos", - "addCategory": "Añadir categoría", - "editCategory": "Editar categoría", - "deleteCategory": "Eliminar categoría", - "noCategories": "Aún no hay categorías de valores raros", - "confirmDeleteCategory": "¿Eliminar la categoría \"{name}\" y todos sus artículos?", - "colId": "ID", - "colName": "Nombre", - "colItems": "Artículos", - "colUpdated": "Actualizada", - "colActions": "Acciones", - "colItemName": "Nombre del artículo", - "colCredits": "Créditos", - "colPoints": "Puntos", - "colPointType": "Tipo de punto", - "categoryForm": { - "name": "Nombre", - "namePlaceholder": "Nombre de la categoría", - "save": "Guardar categoría", - "saving": "Guardando…", - "cancel": "Cancelar" - }, - "itemForm": { - "itemName": "Nombre del artículo", - "itemNamePlaceholder": "ej. Trono", - "credits": "Valor en créditos", - "points": "Valor en puntos", - "pointType": "Tipo de punto", - "pointTypeDuckets": "Duckets", - "pointTypeDiamonds": "Diamantes", - "save": "Guardar artículo", - "saving": "Guardando…", - "cancel": "Cancelar" - } - }, - "badges": { - "title": "Insignias", - "subtitle": "Subir, entregar y gestionar el catálogo de insignias", - "upload": "Subir", - "giveBadge": "Dar insignia", - "catalogue": "Catálogo", - "uploadTitle": "Subir una nueva insignia", - "uploadSubtitle": "Subir un archivo de imagen de insignia", - "badgeCode": "Código de insignia", - "badgeCodePlaceholder": "ej. VIP001", - "badgeFile": "Archivo de insignia", - "badgeFileHint": "PNG o GIF, recomendado 40x40", - "uploadButton": "Subir", - "uploading": "Subiendo…", - "giveTitle": "Dar insignia a usuario", - "giveSubtitle": "Conceder una insignia a un usuario específico", - "username": "Usuario", - "usernamePlaceholder": "Usuario objetivo", - "giveButton": "Dar insignia", - "giving": "Dando…", - "catalogueTitle": "Catálogo de insignias", - "catalogueSubtitle": "Todas las insignias disponibles en el hotel", - "noBadges": "No hay insignias en el catálogo", - "search": "Buscar insignias", - "searchPlaceholder": "Buscar por código o nombre…", - "colCode": "Código", - "colImage": "Imagen", - "colName": "Nombre", - "colDescription": "Descripción", - "colActions": "Acciones" - }, - "achievements": { - "title": "Logros", - "subtitle": "Lista de solo lectura de logros del juego", - "noAchievements": "No hay logros configurados", - "colId": "ID", - "colName": "Nombre", - "colCategory": "Categoría", - "colLevels": "Niveles", - "colReward": "Recompensa", - "colProgress": "Progreso", - "levelLabel": "Nivel {level}", - "rewardCredits": "{count} créditos", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Campañas de calendario", - "subtitle": "Lista de solo lectura de campañas y eventos del calendario", - "noCampaigns": "Aún no hay campañas de calendario", - "colId": "ID", - "colName": "Nombre", - "colStart": "Inicio", - "colEnd": "Fin", - "colType": "Tipo", - "colReward": "Recompensa", - "colActions": "Acciones", - "detail": { - "title": "Campaña: {name}", - "subtitle": "Detalles del evento de calendario", - "days": "Días", - "dayLabel": "Día {day}", - "reward": "Recompensa", - "noDays": "No hay días configurados para esta campaña" - } - }, - "radio": { - "title": "Moderación de radio", - "subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).", - "moderation": "Moderation", - "shouts": "Saludos", - "applications": "Solicitudes", - "schedules": "Horarios", - "settings": "Ajustes", - "embed": "Incrustar", - "ranks": "Rangos", - "history": "Historial", - "apiKeys": "Claves de API", - "points": "Puntos", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Monitorización de radio", - "subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.", - "stream": "Stream", - "online": "En línea", - "offline": "Fuera de línea", - "notConfigured": "Not configured", - "nowPlaying": "Now playing", - "nowPlayingApi": "Now-playing API", - "listenersApi": "Listeners API", - "listeners": "Oyentes", - "currentSong": "Canción actual", - "bitrate": "Bitrate", - "status": "Estado", - "noNowPlayingHint": "no now-playing API set", - "noListenersHint": "no listeners API set", - "endpointDiagnostics": "Endpoint diagnostics", - "diagnosticsLegend": "OK: accesible · WARN: sin configurar · ERROR: solicitud fallida o tiempo agotado.", - "streamUrl": "Stream URL", - "unreachable": "unreachable", - "refresh": "Actualizar" - }, - "user": "User", - "message": "Message", - "posted": "Posted", - "realName": "Real Name", - "age": "Age", - "style": "Style", - "applied": "Applied", - "day": "Day", - "start": "Start", - "end": "End", - "show": "Show", - "status": "Estado", - "active": "active", - "inactive": "inactive", - "hidden": "hidden", - "activeSchedules": "Active schedules", - "noShouts": "No hay saludos que moderar", - "noApplications": "No applications submitted.", - "noSchedules": "No schedules configured.", - "deleteShout": "Eliminar", - "confirmDeleteShout": "¿Eliminar este saludo?", - "pendingApplications": "Solicitudes pendientes", - "settingsForm": { - "title": "Radio Settings", - "subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", - "enabled": "Enabled", - "disabled": "Disabled", - "totalKeys": "Total keys", - "configured": "Configured", - "curatedHint": "curated keys with a value", - "customKeys": "Custom keys", - "saveAll": "Save all", - "singleKey": "Add / overwrite a single key", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "value", - "commentPlaceholder": "comment (optional)", - "saveSingle": "Save", - "otherSettings": "Other radio settings", - "dbError": "Could not load settings (database unavailable). Defaults will be created on save." - }, - "embedPage": { - "title": "Radio Embed", - "subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).", - "streamUrl": "Stream URL", - "configured": "Configured", - "missing": "Missing", - "radioName": "Radio name", - "nowPlayingApi": "Now-playing API", - "set": "Set", - "notSet": "Not set", - "noStreamUrl": "No stream URL configured", - "noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.", - "goToSettings": "Go to Radio Settings", - "livePreview": "Live preview", - "livePreviewText": "This is the bare audio player as visitors will see it. Press play to confirm the stream is reachable.", - "source": "Source", - "audioSnippet": "Audio player snippet", - "audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.", - "iframeSnippet": "Iframe wrapper snippet", - "iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.", - "audioUnsupported": "Your browser does not support the audio element." - }, - "banners": { - "title": "Banners", - "heading": "Radio Banners", - "description": "Promotional banners shown on the radio page, ordered by sort order.", - "addBanner": "Añadir banner", - "createBanner": "Create banner", - "deleteBanner": "Eliminar banner", - "noBanners": "No banners yet — add one above.", - "existing": "Existing banners ({count})", - "save": "Save", - "delete": "Delete", - "byUser": "by user {id}", - "active": "active", - "hidden": "hidden", - "bannerAlt": "Radio banner", - "statusActive": "Active", - "statusHidden": "Hidden", - "dbError": "Could not load banners (database unavailable).", - "form": { - "imagePath": "Image path / URL", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Title", - "description": "Description", - "sortOrder": "Sort order", - "active": "Active" - } - }, - "ranksForm": { - "title": "Rangos de radio", - "subtitle": "DJ / staff ranks assignable on radio applications.", - "dbError": "Could not load ranks (database unavailable).", - "active": "Active", - "addRank": "Add rank", - "name": "Name", - "badgeCode": "Badge code", - "description": "Description", - "createRank": "Create rank", - "existing": "Existing ranks ({count})", - "noRanks": "No ranks yet — add one above.", - "activeLabel": "active", - "inactiveLabel": "inactive", - "save": "Save", - "deleteRank": "Delete rank #{id}" - }, - "historyPage": { - "title": "Radio Play History", - "subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.", - "dbError": "Could not load radio history (database unavailable).", - "showsLogged": "Shows logged", - "onAirNow": "On air now", - "uniqueDjs": "Unique DJs", - "peakListeners": "Peak listeners", - "empty": "No radio history recorded yet.", - "showLog": "Show log ({count})", - "colDj": "DJ", - "colShow": "Show", - "colStarted": "Started", - "colEnded": "Ended", - "colAirtime": "Airtime", - "colListeners": "Listeners", - "colNotes": "Notes", - "onAir": "on air" - }, - "apiKeysForm": { - "title": "Claves de API", - "subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.", - "dbError": "Could not load API keys (database unavailable).", - "totalKeys": "Total keys", - "active": "Active", - "inactive": "Inactive", - "generateKey": "Generar nueva clave", - "generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.", - "name": "Name", - "namePlaceholder": "AzureCast bridge", - "rateLimit": "Rate limit (requests/min)", - "allowedIps": "Allowed IPs (optional)", - "allowedIpsPlaceholder": "comma-separated, blank = any", - "generate": "Generar", - "existingKeys": "Existing keys ({count})", - "noKeys": "No API keys yet — generate one above.", - "colName": "Name", - "colKey": "Clave", - "colAllowedIps": "Allowed IPs", - "colRateLimit": "Rate limit", - "colLastUsed": "Last used", - "colExpires": "Expires", - "colStatus": "Status", - "colActions": "Acciones", - "maskedHint": "Only the first 8 characters are shown", - "any": "any", - "activeLabel": "active", - "inactiveLabel": "inactive", - "deactivate": "Deactivate", - "activate": "Activate", - "delete": "Delete" - }, - "pointsForm": { - "title": "Configuración de puntos de oyente", - "subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", - "saved": "Saved", - "points": "Points", - "enabled": "Enabled", - "disabled": "Disabled", - "perMinute": "Per minute", - "paidIn": "paid in {currency}", - "maxPerDay": "Max / day", - "unlimited": "Unlimited", - "minListeners": "Min listeners", - "settings": "Settings", - "pointsEnabled": "Points enabled", - "pointsEnabledHint": "Master switch for awarding listener points.", - "currency": "Currency", - "currencyHint": "Which wallet the points are paid into.", - "pointsPerMinute": "Points per minute", - "pointsPerMinuteHint": "Amount awarded for each full minute of listening.", - "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", - "minListenersHint": "Points are only awarded when at least this many people are tuned in.", - "save": "Guardar configuración de puntos" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.", - "dbError": "Could not load the AutoDJ playlist (database unavailable).", - "tracks": "Tracks", - "active": "Active", - "inactive": "Inactive", - "addTrack": "Add track", - "titlePlaceholder": "Track title", - "artist": "Artist", - "album": "Album", - "artworkUrl": "Artwork URL", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Duration (seconds)", - "durationPlaceholder": "e.g. 215", - "sortOrder": "Sort order", - "playlist": "Playlist ({count})", - "noTracks": "No AutoDJ tracks yet — add one above.", - "colOrder": "Order", - "colTitle": "Title", - "colArtist": "Artist", - "colAlbum": "Album", - "colDuration": "Duration", - "colPlays": "Plays", - "colLastPlayed": "Last played", - "colStatus": "Status", - "colActions": "Actions", - "activeLabel": "active", - "inactiveLabel": "inactive", - "deactivate": "Deactivate", - "activate": "Activate", - "delete": "Delete", - "trackTitle": "Title" - }, - "moderationPage": { - "title": "DJ Moderation", - "subtitle": "Review and remove radio shouts (50 most recent).", - "recentShouts": "Recent Shouts ({count})" - } - }, - "commandocentrum": { - "title": "Centro de comandos", - "subtitle": "Diagnósticos, controles RCON y gestión de usuarios", - "diagnostics": "Diagnósticos", - "rcon": "RCON", - "userActions": "Acciones de usuario", - "diagnosticsTitle": "Diagnósticos del emulador", - "memoryUsage": "Uso de memoria", - "uptime": "Tiempo activo", - "onlineUsers": "Usuarios en línea", - "roomsLoaded": "Salas cargadas", - "refresh": "Actualizar", - "rconTitle": "Comandos RCON", - "rconPlaceholder": "Introduce un comando RCON…", - "rconSend": "Enviar", - "rconSending": "Enviando…", - "rconResponse": "Respuesta", - "userActionsTitle": "Acciones de usuario", - "username": "Usuario", - "usernamePlaceholder": "Usuario objetivo", - "action": "Acción", - "execute": "Ejecutar", - "actions": { - "disconnect": "Desconectar", - "alert": "Enviar alerta", - "giveCredits": "Dar créditos", - "giveBadge": "Dar insignia", - "givePoints": "Dar puntos", - "ban": "Sancionar", - "kick": "Expulsar" - }, - "messagePlaceholder": "Mensaje (para alertas)…", - "amountPlaceholder": "Cantidad…", - "badgePlaceholder": "Código de insignia…" - }, - "emulator": { - "title": "Configuración del emulador", - "subtitle": "Ver y editar ajustes del emulador y textos de localización", - "settings": "Ajustes", - "texts": "Textos", - "search": "Buscar", - "searchPlaceholder": "Buscar claves…", - "noSettings": "No se encontraron ajustes", - "noTexts": "No se encontraron textos", - "edit": "Editar", - "save": "Guardar", - "saving": "Guardando…", - "cancel": "Cancelar", - "colKey": "Clave", - "colValue": "Valor", - "colType": "Tipo", - "colActions": "Acciones", - "editDialog": { - "title": "Editar: {key}", - "value": "Valor", - "valuePlaceholder": "Introduce el valor…", - "save": "Guardar cambios", - "cancel": "Cancelar" - } - }, - "alerts": { - "title": "Alertas", - "subtitle": "Enviar alertas a todo el hotel y ver alertas recientes", - "sendAlert": "Enviar alerta al hotel", - "recentAlerts": "Alertas recientes ({count})", - "noRecentAlerts": "No hay alertas recientes", - "form": { - "title": "Título de la alerta", - "titlePlaceholder": "ej. Mantenimiento del servidor en 10 minutos", - "message": "Mensaje de alerta", - "messagePlaceholder": "Escribe el mensaje de alerta…", - "type": "Tipo", - "typeHotel": "Alerta a todo el hotel", - "typeStaff": "Solo equipo", - "urgent": "Urgente", - "send": "Enviar alerta", - "sending": "Enviando…", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Título", - "colSentBy": "Enviada por", - "colType": "Tipo", - "colDate": "Fecha", - "colActions": "Acciones", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Actividades del equipo", - "subtitle": "Registro de auditoría de acciones del equipo en el panel de administración", - "noLogs": "Aún no se ha registrado actividad del equipo", - "colId": "ID", - "colUser": "Usuario", - "colAction": "Acción", - "colTarget": "Objetivo", - "colDescription": "Descripción", - "colIp": "IP", - "colTimestamp": "Fecha", - "filterByUser": "Filtrar por usuario…", - "filterByAction": "Filtrar por acción…", - "clearFilters": "Limpiar filtros", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Filtro de palabras", - "subtitle": "Gestionar palabras y frases filtradas en el hotel", - "addWord": "Añadir palabra", - "addWords": "Añadir palabras", - "noWords": "Aún no hay palabras filtradas", - "confirmDelete": "¿Eliminar \"{word}\" del filtro?", - "colId": "ID", - "colWord": "Palabra", - "colAddedBy": "Añadida por", - "colCreated": "Creada", - "colActions": "Acciones", - "form": { - "word": "Palabra", - "wordPlaceholder": "ej. palabrota", - "addMore": "Añadir varias palabras (una por línea)", - "save": "Añadir al filtro", - "saving": "Guardando…", - "cancel": "Cancelar" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Modo de mantenimiento", - "subtitle": "Activar o desactivar el mantenimiento del hotel", - "enabled": "El modo de mantenimiento está activado", - "disabled": "El modo de mantenimiento está desactivado", - "enable": "Activar mantenimiento", - "disable": "Desactivar mantenimiento", - "message": "Mensaje de mantenimiento", - "messagePlaceholder": "¡Volveremos en breve!", - "staffAccess": "Permitir acceso del equipo durante el mantenimiento", - "save": "Guardar ajustes", - "saving": "Guardando…", - "confirmEnable": "Activar el mantenimiento impedirá que todos los usuarios no pertenecientes al equipo accedan al hotel. ¿Continuar?", - "confirmDisable": "¿Desactivar el modo de mantenimiento y restaurar el acceso para todos los usuarios?" - }, - "housekeeping": { - "title": "Permisos de Housekeeping", - "subtitle": "Configurar qué rangos pueden acceder a qué secciones de administración", - "addPermission": "Añadir permiso", - "editPermission": "Editar permiso", - "deletePermission": "Eliminar permiso", - "noPermissions": "No hay permisos de housekeeping configurados", - "confirmDelete": "¿Eliminar este permiso?", - "colId": "ID", - "colRank": "Rango", - "colSection": "Sección", - "colActions": "Acciones", - "form": { - "rankId": "ID de rango", - "rankIdPlaceholder": "Rango mínimo", - "section": "Clave de sección", - "sectionPlaceholder": "ej. admin.dashboard", - "save": "Guardar permiso", - "saving": "Guardando…", - "cancel": "Cancelar" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset applied!", - "cleared": "All Permisos cleared!", - "invalidRank": "Invalid Rango", - "testDone": "Test done: {count} Permisos found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Eliminar ALL Permisos? This Acción cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Permiso", - "colDescription": "Descripción", - "colMinRank": "Min. Rango", - "permissionKey": "Clave de permiso", - "minRank": "Min. Rango", - "description": "Descripción", - "permissions": "Permisos", - "permissionsCount": "{count} Permisos", - "permission": "Permiso", - "highestMinRank": "Highest min. Rango: {rank}", - "totalMinRank": "Total min. Rango sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Rangos", - "missingDeps": "{count} missing dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(missing)", - "rank": "Rango", - "count": "Count", - "searchPermission": "Buscar Permisos…", - "search": "Buscar", - "manage": "Manage", - "importSelection": "Importar selection", - "noGroup": "No group", - "allGroups": "All groups", - "perGroup": "Permisos per group", - "perRank": "Permisos per Rango", - "rankOverviewHint": "All Permisos grouped by the Rango they are assigned to.", - "tabOverview": "Resumen", - "tabManage": "Manage", - "tabImport": "Importar / Export", - "tabRanks": "Rango Resumen", - "tabPresets": "Preajustes", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Importar Permisos", - "importHint": "Paste a JSON array of Permiso objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Importar", - "exportTitle": "Export Permisos", - "exportHint": "Export all Permisos as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Permiso Preajustes", - "presetsHint": "Aplicar a predefined set of Permisos for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Moderación tools: Usuario lookup, Sanciones, CFH handling, chat Registros.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Usuarios, Salas, news, Ajustes, Tienda, events, radio & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Permiso management and asset Importar.", - "applyPreset": "Aplicar preset", - "clearAll": "Clear all Permisos", - "testTitle": "Test Rango access", - "testHint": "Enter a Rango number to see which Permisos would be granted.", - "test": "Test", - "auditTitle": "Permiso audit log", - "auditHint": "All changes to housekeeping Permisos are logged.", - "auditLogsAt": "Audit Registros are available on the Audit log page.", - "viewAuditLogs": "Ver audit Registros", - "importedWithErrors": "Imported {count} Permisos with {errors} errors", - "confirmClearAllDesc": "This will Eliminar every Permiso entry from the Base de datos. Are you sure?", - "confirmDeletePermission": "Eliminar this Permiso permanently?", - "confirmBulkDelete": "Eliminar {count} selected Permisos?", - "deleteSelected": "Eliminar {count} selected", - "cancel": "Cancelar", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Usuario", - "auditAction": "Acción", - "auditTarget": "Objetivo", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Salas", - "subtitle": "Buscar y gestionar salas del hotel", - "search": "Buscar", - "searchPlaceholder": "Buscar por nombre, dueño o ID…", - "searchResults": "{count, plural, one {# sala} other {# salas}} encontradas para \"{query}\"", - "noResults": "No se encontraron salas", - "colId": "ID", - "colName": "Nombre", - "colOwner": "Dueño", - "colUsers": "Usuarios", - "colState": "Estado", - "colCategory": "Categoría", - "colCreated": "Creada", - "colActions": "Acciones", - "stateOpen": "Abierta", - "stateClosed": "Cerrada", - "stateLocked": "Bloqueada", - "stateInvisible": "Invisible", - "detail": { - "title": "Sala: {name}", - "subtitle": "Propiedad de {owner}", - "overview": "Resumen", - "actions": "Acciones", - "description": "Descripción", - "noDescription": "Sin descripción", - "owner": "Dueño", - "users": "Usuarios en línea", - "maxUsers": "Usuarios máximos", - "category": "Categoría", - "state": "Estado", - "tags": "Etiquetas", - "noTags": "Sin etiquetas", - "created": "Creada", - "deleteRoom": "Eliminar sala", - "confirmDelete": "¿Eliminar la sala \"{name}\"? Esto no se puede deshacer.", - "enterRoom": "Entrar a la sala", - "changeOwner": "Cambiar dueño", - "changeOwnerPlaceholder": "Usuario del nuevo dueño" - } - }, - "emailTemplates": { - "title": "Plantillas de correo", - "subtitle": "Gestionar plantillas de correo transaccional", - "newTemplate": "+ Nueva plantilla", - "edit": "Editar", - "delete": "Eliminar", - "noTemplates": "Aún no hay plantillas de correo", - "confirmDelete": "¿Eliminar la plantilla \"{name}\"?", - "colId": "ID", - "colName": "Nombre", - "colSubject": "Asunto", - "colKey": "Clave", - "colUpdated": "Actualizada", - "colActions": "Acciones", - "form": { - "name": "Nombre", - "namePlaceholder": "ej. Correo de bienvenida", - "key": "Clave", - "keyPlaceholder": "ej. welcome_email", - "subject": "Asunto", - "subjectPlaceholder": "Línea de asunto del correo", - "body": "Contenido (HTML)", - "bodyPlaceholder": "

Estimado {username},

", - "variables": "Variables disponibles", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Guardar plantilla", - "saving": "Guardando…", - "cancel": "Cancelar" - } - }, - "theme": { - "title": "Tema", - "subtitle": "Personalizar la apariencia del CMS", - "presets": "Preajustes", - "colours": "Colores", - "css": "CSS", - "presetsTitle": "Preajustes de tema", - "presetsSubtitle": "Elige un esquema de color predefinido", - "applyPreset": "Aplicar", - "presetApplied": "Preajuste aplicado: {preset}", - "customiseTitle": "Colores personalizados", - "primary": "Primario", - "secondary": "Secundario", - "accent": "Acento", - "background": "Fondo", - "surface": "Superficie", - "text": "Texto", - "saveColours": "Guardar colores", - "savingColours": "Guardando…", - "cssTitle": "CSS personalizado", - "cssSubtitle": "Añadir CSS personalizado para sobrescribir los estilos del tema", - "cssPlaceholder": "/* Tu CSS personalizado aquí */", - "saveCss": "Guardar CSS", - "savingCss": "Guardando…", - "reset": "Restablecer valores por defecto", - "confirmReset": "¿Restablecer el tema a los valores por defecto?" - }, - "media": { - "title": "Biblioteca multimedia", - "subtitle": "Subir y gestionar archivos multimedia", - "upload": "Subir", - "uploadTitle": "Subir un archivo", - "uploadSubtitle": "Arrastra y suelta o haz clic para subir", - "uploadButton": "Elegir archivo", - "uploading": "Subiendo…", - "noFiles": "Aún no hay archivos multimedia", - "delete": "Eliminar", - "confirmDelete": "¿Eliminar este archivo permanentemente?", - "search": "Buscar", - "searchPlaceholder": "Buscar por nombre de archivo…", - "colPreview": "Vista previa", - "colName": "Nombre", - "colSize": "Tamaño", - "colType": "Tipo", - "colUploaded": "Subido", - "colActions": "Acciones", - "copyUrl": "Copiar URL", - "urlCopied": "URL copiada al portapapeles" - }, - "settings": { - "title": "Ajustes del CMS", - "subtitle": "Gestionar configuración clave/valor del CMS", - "addSetting": "Añadir ajuste", - "edit": "Editar", - "delete": "Eliminar", - "noSettings": "No se encontraron ajustes", - "confirmDelete": "¿Eliminar el ajuste \"{key}\"?", - "colKey": "Clave", - "colValue": "Valor", - "colUpdated": "Actualizado", - "colActions": "Acciones", - "form": { - "key": "Clave", - "keyPlaceholder": "ej. hotel_name", - "value": "Valor", - "valuePlaceholder": "Valor del ajuste", - "save": "Guardar ajuste", - "saving": "Guardando…", - "cancel": "Cancelar" - }, - "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." - }, - "favicon": { - "title": "Favicon", - "subtitle": "Upload and manage the site favicon", - "current": "Current favicon", - "uploadLabel": "Upload favicon", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.", - "upload": "Upload", - "uploading": "Uploading…", - "delete": "Remove", - "deleting": "Removing…", - "saved": "Favicon saved successfully!", - "deleted": "Favicon removed successfully!", - "error": "Something went wrong", - "confirmDelete": "Remove the favicon? The site will no longer show a custom favicon.", - "generator": { - "title": "Generate favicon", - "text": "Text", - "bgColor": "Background color", - "textColor": "Text color", - "rounded": "Rounded corners", - "save": "Save as favicon" - }, - "cancel": "Cancel" - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Inicio", - "reload": "Recargar", - "fullscreen": "Pantalla completa", - "logout": "Cerrar sesión", - "onlineUsers": "Usuarios en línea", - "emulatorOnline": "Emulador en línea", - "emulatorOffline": "Emulador fuera de línea", - "dragToMove": "Arrastra para mover", - "hide": "Ocultar barra", - "fullscreenExit": "Salir de pantalla completa", - "show": "Mostrar barra", - "emulatorUnknown": "Estado del emulador desconocido" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Diagnóstico de archivos", - "preliminary": "Comprobación preliminar de direcciones; el contenido se valida al importar.", - "http": "HTTP {status}", - "network": "Falló la conexión", - "timeout": "La fuente no respondió a tiempo", - "invalidResponse": "La fuente devolvió una página web en lugar de un archivo", - "available": "Archivo encontrado; pendiente de validación", - "recover": "Adjuntar original y reanudar", - "recoveryHint": "Elige {file} (máximo 50 MB). Se verifica su identidad. Se reintentan los elementos fallidos y se conservan los importados.", - "attach": "Elige el archivo .nitro original", - "working": "Validando o reanudando...", - "attached": "Archivo original correspondiente adjuntado", - "resume": "Reanudar importaciones fallidas con este archivo", - "invalidFile": "Elige un .nitro original correspondiente de hasta 50 MB y vuelve a intentarlo.", - "resumeError": "Actualiza el historial y usa el último intento; comprueba el archivo y vuelve a intentarlo.", - "mismatchedFile": "Este archivo pertenece a otro mueble.", - "alreadyStarted": "La recuperación ya comenzó. Actualiza el historial y usa el último intento.", - "notEligible": "Este elemento no admite recuperación mediante archivo adjunto." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "Se conservará una copia de recuperación en este navegador durante 7 días.", + "saved": "Copia de recuperación guardada en este navegador durante 7 días.", + "unavailable": "La recuperación en el navegador no está disponible. Mantén esta página abierta hasta que se guarden los cambios.", + "found": "Hay una copia de recuperación disponible en este navegador, guardada el", + "restore": "Restaurar copia del navegador", + "discard": "Eliminar copia del navegador", + "confirmRestore": "¿Reemplazar el formulario actual con la copia de recuperación del navegador? Revisa el contenido antes de guardar.", + "confirmDiscard": "¿Eliminar esta copia de recuperación del navegador? El formulario actual no cambiará." + }, + "nav": { + "home": "Inicio", + "community": "Comunidad", + "articles": "Artículos", + "photos": "Fotos", + "staff": "Equipo", + "rankings": "Clasificaciones", + "guilds": "Grupos", + "leaderboards": "Tablas de clasificación", + "rareValues": "Valores raros", + "shop": "Tienda", + "market": "Mercado", + "assistance": "Asistencia", + "helpCenter": "Centro de ayuda", + "myTickets": "Mis tickets", + "badges": "Insignias", + "radio": "Radio", + "friends": "Amigos", + "messages": "Mensajes", + "admin": "Admin", + "openMenu": "Open menu", + "closeMenu": "Close menu", + "drawBadge": "Diseñar insignia", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} en línea", + "nitroClient": "Cliente Nitro", + "tagline": "¡Un mundo virtual en línea donde puedes crear tu propio avatar, hacer amigos, chatear, crear salas y mucho más!", + "login": "Iniciar sesión", + "or": "O", + "createAccount": "Crear una cuenta" + }, + "footer": { + "copyright": "© {year} - {hotel} es un proyecto educativo sin fines de lucro" + }, + "pages": { + "staff": { + "title": "Equipo", + "subtitle": "El equipo detrás del hotel", + "ranksTitle": "Rangos", + "ranksSubtitle": "De qué se encarga cada parte del equipo", + "membersTitle": "Miembros del equipo", + "membersEmptySubtitle": "Nadie que mostrar ahora mismo", + "membersSubtitle": "{count, plural, one {# miembro manteniendo todo en marcha} other {# miembros manteniendo todo en marcha}}", + "emptyState": "No hay miembros del equipo que mostrar.", + "colUsername": "Usuario", + "colRank": "Rango", + "colMotto": "Lema", + "viewProfile": "View profile", + "noMotto": "No motto set", + "loadError": "Unable to load staff members. Please try again shortly.", + "retry": "Try again" + }, + "leaderboard": { + "title": "Tabla de clasificación", + "subtitle": "Top 20 jugadores por {currency}", + "tab_credits": "Créditos", + "tab_diamonds": "Diamantes", + "tab_duckets": "Duckets", + "tab_achievement": "Logros", + "tab_respects": "Respetos", + "tab_onlinetime": "Tiempo en línea", + "emptyState": "Aún no hay clasificaciones que mostrar.", + "colAvatar": "Avatar", + "colPlayer": "Jugador" + }, + "friends": { + "title": "Amigos", + "emptySubtitle": "Aún no has añadido amigos", + "subtitle": "{count, plural, one {Tienes # amigo} other {Tienes # amigos}}", + "emptyState": "Añade amigos en el hotel y aparecerán aquí.", + "noMotto": "Sin lema", + "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": "Mensajes", + "subtitle": "Solicitudes de amistad y mensajes fuera de línea esperándote", + "requestsTitle": "Solicitudes de amistad", + "requestsEmptySubtitle": "Nadie te ha enviado una solicitud de amistad aún", + "requestsSubtitle": "{count, plural, one {# solicitud pendiente} other {# solicitudes pendientes}}", + "requestsEmptyState": "No hay solicitudes de amistad pendientes.", + "wantsToBeFriend": "quiere ser tu amigo.", + "accept": "Aceptar", + "offlineTitle": "Mensajes fuera de línea", + "offlineEmptySubtitle": "Tu bandeja de entrada está vacía", + "offlineSubtitle": "{count, plural, one {# mensaje recibido} other {# mensajes recibidos}}", + "offlineEmptyState": "No tienes mensajes fuera de línea.", + "unknownUser": "Usuario #{id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Sin lema", + "statRank": "Rango", + "statCredits": "Créditos", + "statRegistered": "Registrado", + "badgesTitle": "Insignias", + "badgesEmpty": "Aún no hay insignias.", + "photosTitle": "Fotos", + "photosEmpty": "Aún no hay fotos.", + "guestbookTitle": "Libro de visitas", + "guestbookSubtitle": "Mensajes en el muro de {username}", + "leaveMessage": "Dejar un mensaje", + "guestbookPlaceholder": "Escribe algo en el libro de visitas de {username}…", + "post": "Publicar", + "loginToPost": "Inicia sesión para dejar un mensaje en el libro de visitas.", + "guestbookEmpty": "Aún no hay entradas en el libro de visitas.", + "unknownUser": "Usuario #{id}", + "statDuckets": "Duckets", + "statDiamonds": "Diamantes", + "walletTitle": "Billetera", + "friendsTitle": "Amigos", + "friendsSubtitle": "Personas del hotel con las que pasan el tiempo", + "friendsEmpty": "No hay amigos que mostrar.", + "roomsTitle": "Salas", + "roomsSubtitle": "Salas que poseen", + "roomsEmpty": "No hay salas que mostrar.", + "roomUntitled": "Sala sin título", + "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": "Clasificaciones", + "subtitle": "Los 12 mejores jugadores clasificados por créditos", + "emptyState": "Aún no hay jugadores que clasificar." + }, + "home": { + "welcome": "Bienvenido a {hotelName}", + "welcomeSubtitle": "Tu hotel retro, ahora impulsado por Next.js", + "welcomeBody": "Pasa el rato, colecciona furni y conoce amigos.", + "enterHotel": "Entrar a {hotelName}", + "onlineFriends": "Amigos en línea", + "noFriendsOnline": "No hay amigos en línea", + "register": "REGÍSTRATE AHORA", + "joinNow": "¡Únete a {hotelName} hoy!", + "recentUsers": "Usuarios recientes", + "recentPhotos": "Fotos recientes", + "latestNews": "Últimas noticias", + "newsTitle": "Últimas noticias", + "newsSubtitle": "Lo último del hotel", + "allNews": "Todas las noticias →", + "allUsers": "Comunidad →", + "noArticles": "Aún no hay artículos.", + "noPhotos": "Aún no hay fotos.", + "noUsers": "No hay usuarios en línea", + "latestArticle": "Último artículo", + "latestUsers": "Nuevos ciudadanos ({count} total)", + "statsOnline": "En línea", + "statsCitizens": "Ciudadanos", + "statsRooms": "Salas", + "statsArticles": "Artículos", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Crea tu look único", + "featuresFurniture": "Muebles", + "featuresFurnitureDesc": "Decora salas con objetos", + "featuresCommunity": "Comunidad", + "featuresCommunityDesc": "Haz amigos y chatea", + "featuresGames": "Juegos", + "featuresGamesDesc": "Compite y diviértete", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Noticias", + "subtitle": "Los últimos anuncios, eventos y actualizaciones del hotel", + "noArticles": "Aún no hay artículos.", + "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": "← Noticias", + "reactionsTitle": "Reacciones", + "reactionsSubtitle": "Dinos lo que piensas", + "reaction": { + "like": "Me gusta", + "love": "Me encanta", + "wow": "Vaya" + }, + "removeReaction": "Haz clic para eliminar tu reacción", + "reactWith": "Reaccionar con {reaction}", + "noReactions": "Aún no hay reacciones.", + "logIn": "Inicia sesión", + "toReact": "para reaccionar.", + "commentsTitle": "Comentarios", + "commentsSubtitle": "Únete a la conversación", + "commentsCount": "{count} hasta ahora", + "noComments": "Aún no hay comentarios. Sé el primero en comentar.", + "userNumber": "Usuario #{id}", + "addComment": "Añadir un comentario", + "commentPlaceholder": "Escribe tu comentario…", + "postComment": "Publicar comentario", + "toComment": "para dejar un comentario.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Fotos", + "subtitle": "Las últimas instantáneas tomadas en el hotel", + "noPhotos": "Aún no hay fotos.", + "photoAlt": "Foto del usuario #{id}", + "byUser": "por el usuario #{id}" + }, + "badges": { + "title": "Insignias", + "subtitle": "Las insignias que puedes ganar y lucir en el hotel", + "noBadges": "Aún no hay insignias disponibles." + }, + "community": { + "title": "Comunidad", + "subtitle": "Todo lo que sucede en el hotel en un solo lugar", + "open": "Abrir →", + "links": { + "rankings": { + "title": "Clasificaciones", + "text": "Ve los jugadores más ricos del hotel, clasificados por créditos." + }, + "staff": { + "title": "Equipo", + "text": "Conoce al equipo que mantiene el hotel en funcionamiento cada día." + }, + "news": { + "title": "Noticias", + "text": "Los últimos anuncios, eventos y actualizaciones." + }, + "photos": { + "title": "Fotos", + "text": "Instantáneas compartidas por la comunidad de todo el hotel." + }, + "guilds": { + "title": "Grupos", + "text": "Explora los grupos que los jugadores han creado y a los que se han unido." + }, + "leaderboards": { + "title": "Tablas de clasificación", + "text": "Quién está en la cima esta temporada en las estadísticas del hotel." + } + } + }, + "guilds": { + "title": "Grupos", + "subtitle": "Explora los grupos que los jugadores han creado y a los que se han unido", + "empty": "Aún no hay grupos.", + "unnamedGuild": "Grupo sin nombre", + "noDescription": "Sin descripción" + }, + "guild": { + "allGuilds": "← Todos los grupos", + "unnamedGuild": "Grupo sin nombre", + "noDescription": "Sin descripción", + "memberSingular": "Miembro", + "memberPlural": "Miembros", + "founded": "Fundado", + "forumLink": "Foro →", + "discussion": "Discusión", + "membersTitle": "Miembros", + "memberLowerSingular": "miembro", + "memberLowerPlural": "miembros", + "noMembers": "No hay miembros.", + "owner": "Dueño", + "noMotto": "Sin lema" + }, + "guildForum": { + "backToGuild": "← Volver al grupo", + "unnamedGuild": "Grupo sin nombre", + "forumTitle": "{guild} — Foro", + "threadSingular": "hilo", + "threadPlural": "hilos", + "newThread": "+ Nuevo hilo", + "empty": "Aún no hay hilos en este foro.", + "colSubject": "Asunto", + "colAuthor": "Autor", + "colPosts": "Mensajes", + "colDate": "Fecha", + "noSubject": "(sin asunto)", + "pinned": "Fijado", + "locked": "Bloqueado", + "userNumber": "Usuario #{id}", + "unknown": "Desconocido", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Volver al foro", + "unnamedGuild": "Grupo sin nombre", + "title": "Nuevo hilo", + "subtitle": "en el foro de {guild}", + "subjectLabel": "Asunto", + "subjectPlaceholder": "Asunto del hilo", + "messageLabel": "Mensaje", + "messagePlaceholder": "Escribe tu mensaje inicial…", + "postThread": "Publicar hilo", + "cancel": "Cancelar", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Tienda", + "subtitle": "Recarga tu cuenta y obtén paquetes exclusivos, moneda e insignias.", + "browsingCategory": "Explorando los paquetes de {category}.", + "all": "Todos", + "allPackages": "Todos los paquetes", + "packagesAvailable": "{count, plural, one {# paquete disponible} other {# paquetes disponibles}}", + "empty": "No hay paquetes disponibles ahora mismo.", + "buy": "Comprar", + "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": "Recargar con PayPal", + "subtitle": "Paga de forma segura con PayPal y tus créditos se añaden en cuanto se procesa el pago.", + "cancelled": "El pago fue cancelado — no se realizó ningún cobro.", + "chooseAmount": "Elige un monto", + "notConfiguredPre": "PayPal aún no está configurado. Un administrador debe configurar", + "notConfiguredAnd": "y", + "notConfiguredOptional": "(y opcionalmente", + "notConfiguredPost": "para sandbox vs. producción).", + "balanceTitle": "Tu saldo", + "signedInAs": "Conectado como {username}", + "credits": "Créditos", + "creditsPerUnit": "Créditos por 1.00 {currency}", + "rateLine": "Recibes {amount} créditos por 1.00 {currency}. Los créditos aparecen en el juego la próxima vez que inicies sesión." + }, + "marketplace": { + "title": "Mercado", + "subtitle": "Explora muebles y rarezas listados por jugadores. Los listados se colocan en el juego y se actualizan en vivo — entra al hotel para hacer una oferta.", + "activeOffers": "Ofertas activas", + "sellers": "Vendedores", + "totalValue": "Valor total", + "activeListings": "Listados activos", + "mostRecentFirst": "Más recientes primero", + "empty": "No hay ofertas activas en el mercado ahora mismo. Vuelve más tarde.", + "colOffer": "Oferta", + "colItem": "Artículo", + "colSeller": "Vendedor", + "colPrice": "Precio", + "colListed": "Publicado", + "itemLabel": "Artículo #{id}", + "userLabel": "Usuario #{id}", + "justNow": "ahora mismo", + "minutesAgo": "hace {count}m", + "hoursAgo": "hace {count}h", + "daysAgo": "hace {count}d" + }, + "rares": { + "title": "Valores raros", + "subtitle": "Obtén una visión general de todas las rarezas del hotel, agrupadas por categoría.", + "empty": "Actualmente no tenemos rarezas listadas aquí.", + "rareCount": "{count, plural, one {# rareza} other {# rarezas}}", + "viewRares": "Ver rarezas →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# rareza en esta categoría} other {# rarezas en esta categoría}}", + "allRares": "← Todas las rarezas", + "empty": "Aún no hay rarezas listadas en esta categoría.", + "colRare": "Rareza", + "colCredits": "Créditos", + "colCurrency": "Moneda", + "creditsValue": "{value} créditos", + "duckets": "Duckets", + "diamonds": "Diamantes", + "credits": "Créditos" + }, + "redeem": { + "title": "Canjear un vale", + "subtitle": "¿Tienes un código de vale? Introdúcelo abajo para añadir la recompensa a tu cuenta.", + "enterCode": "Ingresa tu código", + "oncePerAccount": "Cada vale solo puede canjearse una vez por cuenta.", + "balanceTitle": "Tu saldo", + "signedInAs": "Conectado como {username}", + "credits": "Créditos", + "instantCredit": "Las recompensas canjeadas se acreditan al instante y aparecen en el juego la próxima vez que inicies sesión." + }, + "help": { + "title": "Centro de ayuda", + "subtitle": "Encuentra guías, temas de soporte y las reglas del hotel — todo lo que necesitas para obtener ayuda.", + "myTickets": "Mis tickets →", + "topicsTitle": "Temas de soporte", + "topicsSubtitle": "Explora guías y respuestas a preguntas frecuentes", + "topicsEmpty": "Aún no hay temas de ayuda.", + "rulesTitle": "Reglas del hotel", + "rulesSubtitle": "Por favor, léelas antes de pasar el rato en el hotel", + "rulesEmpty": "Aún no hay reglas publicadas.", + "categoryEmpty": "No hay reglas en esta categoría." + }, + "helpCategory": { + "back": "← Centro de ayuda", + "topicSubtitle": "Tema del centro de ayuda", + "moreTitle": "Más temas de ayuda", + "moreSubtitle": "Ir a otro tema de soporte" + }, + "helpTickets": { + "title": "Tickets de ayuda", + "subtitle": "Envía un ticket al equipo y sigue tus solicitudes abiertas.", + "statTotal": "Total de tickets", + "statOpen": "Abiertos", + "statClosed": "Cerrados", + "newTitle": "Nuevo ticket", + "newSubtitle": "Describe tu problema y el equipo hará seguimiento", + "subjectPlaceholder": "Asunto", + "contentPlaceholder": "Describe tu problema…", + "submit": "Enviar ticket", + "listTitle": "Tus tickets", + "listSubtitle": "Todas las solicitudes que has enviado al equipo", + "listEmpty": "Aún no tienes tickets.", + "colId": "ID", + "colSubject": "Asunto", + "colStatus": "Estado", + "colCreated": "Creado", + "statusOpen": "Abierto", + "statusClosed": "Cerrado", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "Solicitar unirte al equipo de {hotel}", + "subtitle": "Abrimos solicitudes de personal de vez en cuando. Si encuentras un puesto en el que crees que encajarías perfectamente, no dudes en solicitarlo.", + "noPositionsTitle": "No hay puestos abiertos", + "noPositionsBody": "Actualmente no hay puestos abiertos. Vuelve más tarde para comprobar si tenemos alguna vacante. Gracias por tu interés.", + "noDeadline": "Sin fecha límite", + "deadline": "Fecha límite de solicitud: {date}", + "alreadyApplied": "Ya has solicitado {rank}", + "aboutYou": "Sobre ti", + "aboutPlaceholder": "Cuéntanos por qué serías un gran {rank}…", + "applyFor": "Solicitar {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": "Solicitar unirte al equipo de {hotel}", + "subtitle": "Abrimos solicitudes de equipo periódicamente. ¡Si ves un equipo al que encajas, no dudes en solicitarlo!", + "noPositionsTitle": "No hay puestos de equipo abiertos", + "noPositionsBody": "Actualmente no hay puestos de equipo abiertos. Vuelve más tarde para comprobar si hay nuevas vacantes. ¡Gracias!", + "pending": "Tu solicitud está pendiente", + "aboutYou": "Sobre ti", + "aboutPlaceholder": "Cuéntanos por qué serías ideal para {rank}…", + "applyFor": "Solicitar {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": "Sintoniza la radio del hotel — sesiones de DJ en vivo, solicitudes y saludos.", + "nowPlaying": "Reproduciendo ahora", + "nothingPlaying": "No se está reproduciendo nada ahora mismo.", + "onAir": "Al aire: {dj}", + "noDj": "No hay DJ al aire.", + "audioUnsupported": "Tu navegador no soporta el elemento de audio.", + "streamOffline": "La transmisión está actualmente fuera de línea.", + "exploreTitle": "Explora la radio", + "exploreSubtitle": "Horario, saludos, solicitudes y más", + "linkSchedule": "Horario", + "linkScheduleText": "Nuestra programación semanal de DJs y programas.", + "linkShouts": "Saludos", + "linkShoutsText": "Saludos y solicitudes de la comunidad.", + "linkRequests": "Solicitudes", + "linkRequestsText": "Pídele al DJ que ponga tu canción favorita.", + "linkApply": "Solicitar ser DJ", + "linkApplyText": "Únete al equipo y sal al aire.", + "linkLeaderboard": "Tabla de clasificación", + "linkLeaderboardText": "Los mejores oyentes clasificados por puntos obtenidos.", + "todayTitle": "Horario de hoy", + "todayTitleWithDay": "Horario de hoy · {day}", + "todaySubtitle": "Lo que hay al aire hoy", + "fullWeek": "Semana completa →", + "noShowsToday": "No hay programas programados para hoy.", + "colTime": "Hora", + "colShow": "Programa", + "colDj": "DJ", + "untitledShow": "Programa sin título", + "userNumber": "Usuario #{id}" + }, + "radioSchedule": { + "title": "Horario de radio", + "subtitle": "Nuestra programación semanal de DJs y programas", + "empty": "Aún no hay programas programados.", + "colDay": "Día", + "colTime": "Hora", + "colDj": "DJ", + "colShow": "Programa", + "noShows": "Sin programas" + }, + "radioShouts": { + "title": "Saludos de radio", + "subtitle": "Saludos y solicitudes de la comunidad", + "postTitle": "Publicar un saludo", + "postSubtitle": "Envía un mensaje al DJ al aire", + "messageLabel": "Tu mensaje", + "messagePlaceholder": "Envía un saludo al DJ…", + "shoutButton": "Saludar", + "loginToPost": "Inicia sesión para publicar un saludo.", + "latestTitle": "Últimos saludos", + "latestSubtitle": "Los mensajes más recientes de los oyentes", + "empty": "Aún no hay saludos. ¡Sé el primero!", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Concursos de radio", + "subtitle": "Sintoniza y participa en nuestros últimos concursos al aire", + "empty": "Aún no hay concursos.", + "contestLabel": "Concurso #{id}", + "dateUnknown": "Fecha desconocida" + }, + "radioGiveaways": { + "title": "Sorteos de radio", + "subtitle": "Escucha para tener la oportunidad de ganar en nuestros sorteos de radio", + "empty": "Aún no hay sorteos.", + "giveawayLabel": "Sorteo #{id}", + "dateUnknown": "Fecha desconocida" + }, + "radioLeaderboard": { + "title": "Tabla de clasificación de oyentes", + "subtitle": "Top 50 oyentes por puntos obtenidos sintonizando la radio", + "empty": "Aún no hay puntos de oyente que mostrar.", + "colRank": "Rango", + "colAvatar": "Avatar", + "colListener": "Oyente", + "colPoints": "Puntos" + }, + "radioApply": { + "title": "Solicitar ser DJ de radio", + "subtitle": "Cuéntanos sobre ti y por qué serías ideal para la radio", + "latestTitle": "Tu última solicitud", + "statusLabel": "Estado:", + "submittedOn": "· enviada el {date}", + "submitAgain": "Puedes enviarla de nuevo abajo si tus datos han cambiado.", + "formTitle": "Formulario de solicitud", + "formSubtitle": "Todos los campos marcados como obligatorios deben completarse", + "realNameLabel": "Nombre real", + "realNamePlaceholder": "Tu nombre completo", + "ageLabel": "Edad", + "availabilityLabel": "Disponibilidad", + "availabilityPlaceholder": "¿Qué días y horarios puedes transmitir?", + "musicStyleLabel": "Estilo musical", + "musicStylePlaceholder": "ej. House, Pop, Hip-Hop", + "experienceLabel": "Experiencia", + "optional": "(opcional)", + "experiencePlaceholder": "¿Tienes experiencia previa como DJ o presentador?", + "motivationLabel": "Motivación", + "motivationPlaceholder": "¿Por qué quieres unirte al equipo de radio?", + "submitButton": "Enviar solicitud", + "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": "Configuración de la cuenta", + "accountSettingsSubtitle": "Gestiona tu perfil, seguridad y cuentas conectadas", + "publicProfile": "Tu perfil público", + "noMotto": "Sin lema", + "noEmail": "Sin correo electrónico registrado", + "changeMotto": "Cambiar lema", + "changeMottoSubtitle": "Se actualiza al instante en el juego si estás en línea", + "mottoPlaceholder": "Tu lema", + "saveMotto": "Guardar lema", + "securityTitle": "Seguridad", + "securitySubtitle": "Autenticación de dos factores", + "securityDescription": "Añade una segunda capa de protección a tu cuenta.", + "twoFactorLink": "Autenticación de dos factores" + }, + "settings2fa": { + "backToSettings": "← Configuración", + "title": "Autenticación de dos factores", + "subtitle": "Añade una segunda capa de seguridad con una aplicación de autenticación", + "nowEnabled": "2FA está ahora activado. 🔒", + "disabledNotice": "2FA ha sido desactivado.", + "badCode": "Ese código no era válido — inténtalo de nuevo.", + "noAppKeyPrefix": "2FA no está disponible hasta que", + "noAppKeyMiddle": "esté configurada (la misma", + "noAppKeySuffix": "que en tu instalación de AtomCMS, para que los secretos existentes sigan siendo legibles).", + "isEnabled": "2FA está activado", + "onYourAccount": "en tu cuenta.", + "disable": "Desactivar 2FA", + "scanOrEnter": "Escanea o ingresa esta clave", + "scanInstructions": "Añade esto a Google Authenticator / Authy, luego ingresa el código de 6 dígitos para confirmar.", + "manualKey": "Clave manual:", + "codePlaceholder": "Código de 6 dígitos", + "confirm": "Confirmar", + "enableIntro": "Añade una segunda capa de seguridad con una aplicación de autenticación.", + "enable": "Activar 2FA", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Cuentas conectadas", + "subtitle": "Vincula una cuenta social para iniciar sesión con un clic", + "connected": "Conectado", + "unavailable": "No disponible", + "login": { + "title": "Iniciar sesión", + "subtitle": "Bienvenido de nuevo — inicia sesión para entrar al hotel.", + "subtitle2fa": "Ingresa el código de 6 dígitos de tu autenticador.", + "usernamePlaceholder": "Usuario", + "passwordPlaceholder": "Contraseña", + "codePlaceholder": "Código 2FA", + "pleaseWait": "Por favor espera…", + "verify": "Verificar", + "signIn": "Iniciar sesión", + "or": "o", + "noAccount": "¿No tienes cuenta?", + "createOne": "Crea una", + "forgotPassword": "¿Olvidaste tu contraseña?", + "errorInvalidCredentials": "Usuario o contraseña inválidos", + "errorInvalid2fa": "Código 2FA inválido", + "welcomeBack": "Bienvenido de nuevo", + "welcomeBackSub": "Inicia sesión para continuar en {hotelName}", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Crear cuenta", + "subtitle": "Únete al hotel — solo toma un momento.", + "username": "Usuario", + "email": "Correo electrónico", + "password": "Contraseña", + "confirmPassword": "Repetir contraseña", + "usernamePlaceholder": "Usuario", + "emailPlaceholder": "Correo electrónico", + "passwordPlaceholder": "Contraseña (mín. 6 caracteres)", + "confirmPasswordPlaceholder": "Repetir contraseña", + "selectOutfit": "Selecciona tu atuendo", + "termsAccept": "Soy mayor de 18 años y acepto los términos y reglas de {hotel}.", + "createAccount": "Crear cuenta", + "creatingAccount": "Creando cuenta...", + "redirecting": "Redirigiendo a tu cuenta...", + "alreadyHaveAccount": "¿Ya tienes una cuenta? ¡Inicia sesión!", + "register": "Registrarse", + "termsError": "Debes aceptar los términos y reglas para registrarte.", + "usernameError": "El usuario es obligatorio.", + "emailError": "Se requiere un correo electrónico válido.", + "passwordError": "La contraseña debe tener al menos 6 caracteres.", + "confirmPasswordError": "Las contraseñas no coinciden.", + "termsRequired": "Debes aceptar los términos y reglas.", + "usernameRequired": "El usuario es obligatorio.", + "emailRequired": "El correo electrónico es obligatorio.", + "passwordRequired": "La contraseña es obligatoria.", + "passwordsDontMatch": "Las contraseñas no coinciden.", + "alreadyHaveAccountPre": "¿Ya tienes una cuenta?", + "alreadyHaveAccountLink": "Iniciar sesión", + "whoIsOnline": "Quién está en línea", + "usersOnline": "{count} en línea", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Restablecer contraseña", + "subtitle": "Te enviaremos por correo electrónico un enlace seguro para establecer una nueva contraseña.", + "sentNotice": "Si ese correo está registrado, se ha enviado un enlace de restablecimiento. Revisa tu bandeja de entrada.", + "emailPlaceholder": "Tu correo electrónico", + "sendResetLink": "Enviar enlace de restablecimiento", + "backToLogin": "Volver al inicio de sesión", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Establecer una nueva contraseña", + "subtitle": "Elige una contraseña segura que no uses en otros sitios.", + "passwordPlaceholder": "Nueva contraseña (mín. 6 caracteres)", + "resetPassword": "Restablecer contraseña", + "backToLogin": "Volver al inicio de sesión" + }, + "verify": { + "verifiedTitle": "Todo está listo", + "verifiedSubtitle": "Correo electrónico verificado", + "verifiedBody": "Tu dirección de correo electrónico ha sido verificada. Ya puedes iniciar sesión y jugar.", + "goToLogin": "Ir al inicio de sesión", + "alreadyTitle": "Ya verificado", + "alreadySubtitle": "Nada más que hacer", + "alreadyBody": "Esta dirección de correo electrónico ya ha sido confirmada.", + "unavailableTitle": "Inténtalo de nuevo en breve", + "unavailableSubtitle": "Servidor inaccesible", + "unavailableBody": "No pudimos contactar al servidor para verificar tu correo. Por favor, intenta el enlace de nuevo en un momento.", + "invalidTitle": "Verificación de correo electrónico", + "invalidSubtitle": "Enlace inválido o expirado", + "invalidBody": "Este enlace de verificación no es válido. Asegúrate de haber abierto el enlace completo de tu correo, o solicita uno nuevo.", + "backToLogin": "Volver al inicio de sesión" + }, + "banned": { + "title": "Has sido baneado", + "subtitle": "Cuenta suspendida", + "body": "Tu cuenta ha sido suspendida del hotel.", + "reasonLabel": "Motivo:", + "permanent": "Este baneo es permanente.", + "expires": "Expira el {date}.", + "contactStaff": "Si crees que esto es un error, contacta al equipo." + }, + "maintenance": { + "title": "{hotel} está en mantenimiento", + "subtitle": "Volveremos en breve", + "staffCanLogIn": "El equipo aún puede iniciar sesión." + }, + "admin": { + "nav": { + "overview": "Resumen", + "dashboard": "Panel", + "content": "Contenido", + "articles": "Artículos", + "tags": "Etiquetas", + "navigator": "Navegador", + "helpCenter": "Centro de ayuda", + "advertisements": "Anuncios", + "writeableBoxes": "Cajas editables", + "photos": "Fotos", + "tickets": "Tickets", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Usuarios y acceso", + "users": "Usuarios", + "bans": "Sanciones", + "ipManagement": "Gestión de IP", + "vpn": "VPN", + "applications": "Solicitudes", + "teams": "Equipos", + "permissions": "Permisos", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "Economía", + "catalog": "Catálogo", + "shop": "Tienda", + "transactions": "Transacciones", + "vouchers": "Vales", + "subscriptions": "Suscripciones", + "rareValues": "Valores raros", + "badges": "Insignias", + "achievements": "Logros", + "calendar": "Calendario", + "radio": "Radio", + "radioHistory": "Historial de radio", + "radioBanners": "Banners", + "radioEmbed": "Incrustar", + "radioApiKeys": "Claves API", + "radioModeration": "Moderación", + "radioSettings": "Ajustes", + "radioMonitoring": "Monitoreo", + "radioPoints": "Puntos", + "radioRanks": "Rangos", + "radioAutodj": "Auto DJ", + "system": "Sistema", + "commandocentrum": "Centro de comandos", + "emulator": "Emulador", + "alerts": "Alertas", + "logs": "Registros", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Filtro de palabras", + "maintenance": "Mantenimiento", + "rooms": "Salas", + "emailTemplates": "Plantillas de correo", + "theme": "Tema", + "media": "Multimedia", + "favicon": "Favicon", + "sounds": "Sonidos", + "translations": "Traducciones", + "import": "Importar", + "settings": "Ajustes", + "backToSite": "Volver al sitio", + "housekeeping": "Housekeeping", + "hotelManagementPanel": "Panel de gestión del hotel", + "rankLabel": "Rango {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Buscar en el menú…", + "clearMenuSearch": "Borrar búsqueda", + "noMenuResults": "No se encontraron páginas.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "studio": "Studio", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "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" + }, + "dashboard": { + "title": "Panel", + "subtitle": "Resumen del hotel y estado en vivo", + "playersOnline": "Jugadores en línea", + "articles": "Artículos", + "activeBans": "Sanciones activas", + "database": "Base de datos", + "databaseConnected": "Conectada", + "databaseDown": "Caída", + "usersByRank": "Usuarios por rango", + "noAccountsToBreakDown": "Aún no hay cuentas que desglosar", + "rankLabel": "Rango {rank}", + "rankWithCount": "Rango {rank}: {count} cuentas", + "recentStaffActivity": "Actividad reciente del equipo", + "viewAll": "Ver todo", + "noStaffActivityLogged": "Aún no se ha registrado actividad del equipo", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "Artículos", + "subtitle": "Artículos de noticias — 50 más recientes", + "newArticle": "+ Nuevo artículo", + "edit": "Editar", + "delete": "Eliminar", + "noArticles": "Aún no hay artículos", + "confirmDelete": "¿Estás seguro de que quieres eliminar \"{title}\"?", + "colTitle": "Título", + "colSlug": "Slug", + "colAuthor": "Autor", + "colCreated": "Creado", + "colActions": "Acciones", + "form": { + "title": "Título", + "titlePlaceholder": "Título del artículo", + "slug": "Slug", + "slugPlaceholder": "slug-url-del-artículo", + "category": "Categoría", + "categoryPlaceholder": "Selecciona una categoría", + "body": "Contenido", + "bodyPlaceholder": "Escribe el contenido del artículo…", + "image": "Imagen", + "imagePlaceholder": "https://example.com/imagen.png", + "thumbnail": "Miniatura", + "thumbnailPlaceholder": "https://example.com/miniatura.png", + "published": "Publicado", + "featured": "Destacado", + "save": "Guardar artículo", + "saving": "Guardando…", + "deleteArticle": "Eliminar artículo", + "deleteConfirm": "Esta acción no se puede deshacer. El artículo se eliminará permanentemente.", + "cancel": "Cancelar", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "Etiquetas", + "subtitle": "Etiquetas / categorías de artículos", + "addTag": "Añadir etiqueta", + "name": "Nombre", + "namePlaceholder": "Nombre de la etiqueta", + "backgroundColour": "Color de fondo", + "createTag": "Crear etiqueta", + "editTag": "Editar etiqueta", + "updateTag": "Actualizar etiqueta", + "deleteTag": "Eliminar etiqueta", + "confirmDelete": "¿Eliminar \"{name}\"?", + "noTags": "Aún no hay etiquetas", + "colId": "ID", + "colTag": "Etiqueta", + "colColour": "Color", + "colUsedBy": "Usada por", + "colCreated": "Creada", + "colActions": "Acciones", + "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": "Navegador", + "flatCategories": "Categorías planas", + "publicRooms": "Salas públicas", + "addCategory": "Añadir categoría", + "editCategory": "Editar categoría", + "deleteCategory": "Eliminar categoría", + "categoryName": "Nombre de categoría", + "categoryNamePlaceholder": "ej. Relax y Charla", + "categoryOrder": "Orden", + "roomName": "Nombre de sala", + "roomNamePlaceholder": "ej. Sala de Bienvenida", + "roomId": "ID de sala", + "roomIdPlaceholder": "ID numérico de la sala", + "save": "Guardar", + "cancel": "Cancelar", + "noCategories": "Aún no hay categorías", + "noPublicRooms": "Aún no hay salas públicas", + "colId": "ID", + "colName": "Nombre", + "colOrder": "Orden", + "colRooms": "Salas", + "colActions": "Acciones", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Centro de ayuda", + "subtitle": "Gestión de entradas de soporte y FAQ", + "entries": "Entradas", + "newEntry": "+ Nueva entrada", + "edit": "Editar", + "delete": "Eliminar", + "noEntries": "Aún no hay entradas", + "confirmDelete": "¿Eliminar \"{title}\"?", + "colId": "ID", + "colTitle": "Título", + "colCategory": "Categoría", + "colCreated": "Creada", + "colActions": "Acciones", + "form": { + "title": "Título", + "titlePlaceholder": "Título de la entrada", + "category": "Categoría", + "categoryPlaceholder": "Seleccionar categoría", + "body": "Contenido", + "bodyPlaceholder": "Escribe la respuesta…", + "save": "Guardar entrada", + "saving": "Guardando…", + "deleteEntry": "Eliminar entrada", + "cancel": "Cancelar" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Anuncios", + "subtitle": "Gestionar anuncios del hotel y banners promocionales", + "newAd": "+ Nuevo anuncio", + "edit": "Editar", + "delete": "Eliminar", + "noAds": "Aún no hay anuncios", + "confirmDelete": "¿Eliminar este anuncio?", + "colId": "ID", + "colName": "Nombre", + "colImage": "Imagen", + "colUrl": "URL", + "colViews": "Vistas", + "colStatus": "Estado", + "colCreated": "Creado", + "colActions": "Acciones", + "form": { + "name": "Nombre", + "namePlaceholder": "Nombre del anuncio", + "image": "URL de imagen", + "imagePlaceholder": "https://example.com/banner.png", + "url": "URL de destino", + "urlPlaceholder": "https://example.com", + "enabled": "Activado", + "save": "Guardar anuncio", + "saving": "Guardando…", + "deleteAd": "Eliminar anuncio", + "cancel": "Cancelar" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Cajas editables", + "subtitle": "Paneles de contenido mostrados en el hotel y CMS", + "newBox": "Nueva caja", + "edit": "Editar", + "delete": "Eliminar", + "noBoxes": "Aún no hay cajas editables", + "confirmDelete": "¿Eliminar esta caja?", + "colId": "ID", + "colName": "Nombre", + "colLocation": "Ubicación", + "colUpdated": "Actualizada", + "colActions": "Acciones", + "form": { + "name": "Nombre", + "namePlaceholder": "Nombre de la caja", + "location": "Ubicación", + "locationPlaceholder": "ej. portada, barra lateral", + "content": "Contenido", + "contentPlaceholder": "Escribe el contenido de la caja…", + "enabled": "Activado", + "save": "Guardar caja", + "saving": "Guardando…", + "deleteBox": "Eliminar caja", + "cancel": "Cancelar", + "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": "Moderación de fotos", + "subtitle": "Fotos recientes de la cámara del juego", + "delete": "Eliminar", + "approve": "Aprobar", + "noPhotos": "No hay fotos que moderar", + "confirmDelete": "¿Eliminar esta foto permanentemente?", + "colId": "ID", + "colPreview": "Vista previa", + "colUser": "Usuario", + "colRoom": "Sala", + "colTimestamp": "Fecha", + "colActions": "Acciones", + "photoAlt": "Foto de usuario #{id}", + "byUser": "por {username}", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Usuarios", + "subtitle": "Explorar, buscar y gestionar cuentas del hotel", + "search": "Buscar", + "searchPlaceholder": "Buscar por usuario, correo o ID…", + "searchResults": "{count, plural, one {# resultado} other {# resultados}} para \"{query}\"", + "noResults": "No se encontraron usuarios", + "colId": "ID", + "colUsername": "Usuario", + "colEmail": "Correo", + "colRank": "Rango", + "colOnline": "En línea", + "colRegistered": "Registrado", + "colLastOnline": "Última conexión", + "colActions": "Acciones", + "yes": "Sí", + "no": "No", + "edit": "Editar", + "setRank": "Asignar rango", + "disconnect": "Desconectar", + "alert": "Alerta", + "ban": "Sancionar", + "detail": { + "title": "Usuario: {username}", + "subtitle": "Detalles de la cuenta y gestión", + "overview": "Resumen", + "actions": "Acciones", + "username": "Usuario", + "email": "Correo", + "motto": "Lema", + "rank": "Rango", + "credits": "Créditos", + "duckets": "Duckets", + "diamonds": "Diamantes", + "online": "En línea", + "registered": "Registrado", + "lastOnline": "Última conexión", + "ipAddress": "Dirección IP", + "machineId": "ID de máquina", + "sendAlert": "Enviar alerta", + "sendMessage": "Enviar mensaje", + "disconnectUser": "Desconectar usuario", + "banUser": "Sancionar usuario", + "resetPassword": "Restablecer contraseña", + "deleteUser": "Eliminar usuario", + "confirmDelete": "¿Estás seguro de que quieres eliminar a {username}? Esto no se puede deshacer.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Editar usuario: {username}", + "subtitle": "Modificar detalles de la cuenta", + "username": "Usuario", + "usernamePlaceholder": "Usuario", + "email": "Correo", + "emailPlaceholder": "usuario@example.com", + "motto": "Lema", + "mottoPlaceholder": "Lema del usuario", + "rank": "Rango", + "credits": "Créditos", + "duckets": "Duckets", + "diamonds": "Diamantes", + "save": "Guardar cambios", + "saving": "Guardando…", + "cancel": "Cancelar" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Sanciones", + "subtitle": "Gestionar sanciones de cuenta, IP y máquina", + "newBan": "Nueva sanción", + "edit": "Editar", + "delete": "Eliminar", + "noBans": "Aún no hay sanciones", + "confirmDelete": "¿Eliminar esta sanción?", + "colId": "ID", + "colValue": "Valor", + "colType": "Tipo", + "colReason": "Motivo", + "colBannedBy": "Sancionado por", + "colExpires": "Expira", + "colCreated": "Creada", + "colActions": "Acciones", + "form": { + "value": "Valor", + "valuePlaceholder": "Usuario, IP o ID de máquina", + "type": "Tipo", + "typeUser": "Usuario", + "typeIp": "IP", + "typeMachine": "Máquina", + "reason": "Motivo", + "reasonPlaceholder": "Motivo de la sanción", + "expiresAt": "Expira el", + "permanent": "Permanente", + "save": "Guardar sanción", + "saving": "Guardando…", + "cancel": "Cancelar" + }, + "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": "Gestión de IP", + "subtitle": "Gestionar lista blanca y negra de IP", + "whitelist": "Lista blanca", + "blacklist": "Lista negra", + "addIp": "Añadir IP", + "ipAddress": "Dirección IP", + "ipAddressPlaceholder": "ej. 127.0.0.1", + "reason": "Motivo", + "reasonPlaceholder": "Motivo del listado", + "add": "Añadir", + "remove": "Eliminar", + "confirmRemove": "¿Eliminar esta IP de la {list}?", + "noWhitelistedIps": "No hay IP en lista blanca", + "noBlacklistedIps": "No hay IP en lista negra", + "colIp": "IP", + "colReason": "Motivo", + "colAdded": "Añadida", + "colActions": "Acciones", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "Detección de VPN / Proxy", + "subtitle": "Configurar ajustes de detección de VPN y proxy", + "enabled": "Activado", + "apiKey": "Clave de API", + "apiKeyPlaceholder": "Tu clave de API de detección de VPN", + "apiKeyHint": "Déjalo vacío para desactivar", + "blockOnDetect": "Bloquear al detectar", + "blockOnDetectHint": "Bloquear automáticamente a usuarios detectados detrás de una VPN o proxy", + "save": "Guardar ajustes", + "saving": "Guardando…", + "settingsSaved": "Ajustes de VPN guardados correctamente", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Solicitudes de personal", + "subtitle": "Solicitudes de personal pendientes y revisadas", + "pending": "Pendientes", + "approved": "Aprobadas", + "rejected": "Rechazadas", + "noApplications": "Aún no hay solicitudes", + "colId": "ID", + "colApplicant": "Solicitante", + "colPosition": "Puesto", + "colStatus": "Estado", + "colSubmitted": "Enviada", + "colActions": "Acciones", + "review": "Revisar", + "approve": "Aprobar", + "reject": "Rechazar", + "confirmApprove": "¿Aprobar a {username} para {position}?", + "confirmReject": "¿Rechazar la solicitud de {username} para {position}?", + "detail": { + "title": "Solicitud de {username}", + "subtitle": "Para {position}", + "about": "Sobre el solicitante", + "message": "Mensaje de solicitud", + "status": "Estado", + "submitted": "Enviada", + "noMessage": "No se proporcionó mensaje" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Equipos", + "subtitle": "Definir nombres y descripciones de rangos del equipo", + "addRank": "Añadir rango", + "editRank": "Editar rango", + "deleteRank": "Eliminar rango", + "noTeams": "Aún no hay definiciones de rango", + "confirmDelete": "¿Eliminar la definición del rango {id}?", + "colId": "ID", + "colRank": "Rango", + "colName": "Nombre", + "colBadge": "Insignia", + "colColour": "Color", + "colActions": "Acciones", + "form": { + "rankId": "ID de rango", + "rankIdPlaceholder": "ID numérico del rango", + "name": "Nombre", + "namePlaceholder": "ej. Administrador", + "badge": "Código de insignia", + "badgePlaceholder": "ej. ADM001", + "colour": "Color", + "colourPlaceholder": "ej. #ff0000", + "save": "Guardar definición de equipo", + "saving": "Guardando…", + "cancel": "Cancelar" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Permisos", + "subtitle": "Gestionar permisos basados en rangos para el panel de administración", + "addPermission": "Añadir permiso", + "editPermission": "Editar permiso", + "deletePermission": "Eliminar permiso", + "noPermissions": "Aún no hay permisos configurados", + "confirmDelete": "¿Eliminar este permiso?", + "colId": "ID", + "colRank": "Rango", + "colPermission": "Permiso", + "colCreated": "Creado", + "colActions": "Acciones", + "form": { + "rankId": "ID de rango", + "rankIdPlaceholder": "Rango mínimo requerido", + "permission": "Clave de permiso", + "permissionPlaceholder": "ej. admin.articles.manage", + "save": "Guardar permiso", + "saving": "Guardando…", + "cancel": "Cancelar" + } + }, + "catalog": { + "title": "Catálogo", + "subtitle": "Explorar y gestionar páginas y artículos del catálogo", + "pages": "Páginas", + "items": "Artículos", + "addPage": "Añadir página", + "editPage": "Editar página", + "deletePage": "Eliminar página", + "addItem": "Añadir artículo", + "editItem": "Editar artículo", + "deleteItem": "Eliminar artículo", + "noPages": "Aún no hay páginas de catálogo", + "noItems": "No hay artículos en esta página", + "confirmDeletePage": "¿Eliminar la página de catálogo \"{name}\"?", + "confirmDeleteItem": "¿Eliminar este artículo?", + "colId": "ID", + "colName": "Nombre", + "colIcon": "Icono", + "colOrder": "Orden", + "colItems": "Artículos", + "colEnabled": "Activado", + "colActions": "Acciones", + "colItemId": "ID del artículo", + "colItemName": "Nombre del artículo", + "colCostCredits": "Coste (créditos)", + "colCostPoints": "Coste (puntos)", + "colLimited": "Limitado", + "pageForm": { + "name": "Nombre", + "namePlaceholder": "Nombre de la página", + "icon": "ID del icono", + "iconPlaceholder": "ID numérico del icono", + "order": "Orden", + "enabled": "Activado", + "parent": "Página padre", + "parentNone": "Ninguna (raíz)", + "save": "Guardar página", + "saving": "Guardando…", + "cancel": "Cancelar" + }, + "itemForm": { + "itemId": "ID del artículo", + "itemName": "Nombre del artículo", + "costCredits": "Coste en créditos", + "costDuckets": "Coste en duckets", + "costDiamonds": "Coste en diamantes", + "limitedStack": "Tamaño de lote limitado", + "limitedSold": "Limitados vendidos", + "save": "Guardar artículo", + "saving": "Guardando…", + "cancel": "Cancelar" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Tienda", + "subtitle": "Gestionar paquetes y pedidos", + "packages": "Paquetes", + "orders": "Pedidos", + "newPackage": "+ Nuevo paquete", + "edit": "Editar", + "delete": "Eliminar", + "viewOrder": "Ver", + "noPackages": "Aún no hay paquetes en la tienda", + "noOrders": "Aún no hay pedidos", + "confirmDelete": "¿Eliminar este paquete?", + "colId": "ID", + "colName": "Nombre", + "colPrice": "Precio", + "colCurrency": "Moneda", + "colType": "Tipo", + "colSold": "Vendidos", + "colEnabled": "Activado", + "colActions": "Acciones", + "colOrderId": "ID de pedido", + "colCustomer": "Cliente", + "colPackage": "Paquete", + "colAmount": "Cantidad", + "colStatus": "Estado", + "colDate": "Fecha", + "statusPending": "Pendiente", + "statusCompleted": "Completado", + "statusRefunded": "Reembolsado", + "form": { + "name": "Nombre", + "namePlaceholder": "Nombre del paquete", + "description": "Descripción", + "descriptionPlaceholder": "Descripción del paquete", + "price": "Precio", + "currency": "Moneda", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Tipo", + "typeCredits": "Créditos", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamantes", + "typeBadge": "Insignia", + "typeFurni": "Mueble", + "typeRank": "Rango", + "amount": "Cantidad", + "badgeCode": "Código de insignia", + "badgeCodePlaceholder": "ej. VIP001", + "rankId": "ID de rango", + "furniItems": "Muebles", + "enabled": "Activado", + "save": "Guardar paquete", + "saving": "Guardando…", + "cancel": "Cancelar", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "Transacciones", + "subtitle": "Registro de pagos de PayPal", + "noTransactions": "Aún no hay transacciones", + "colId": "ID", + "colUser": "Usuario", + "colAmount": "Cantidad", + "colCurrency": "Moneda", + "colPackage": "Paquete", + "colStatus": "Estado", + "colDate": "Fecha", + "colActions": "Acciones", + "statusCompleted": "Completado", + "statusPending": "Pendiente", + "statusFailed": "Fallido", + "statusRefunded": "Reembolsado", + "detail": { + "title": "Transacción #{id}", + "paypalId": "ID de PayPal", + "payerEmail": "Correo del pagador", + "grossAmount": "Importe bruto", + "fee": "Comisión", + "netAmount": "Importe neto" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Vales de tienda", + "subtitle": "Gestionar códigos de vale canjeables", + "newVoucher": "+ Nuevo vale", + "edit": "Editar", + "delete": "Eliminar", + "noVouchers": "Aún no hay vales", + "confirmDelete": "¿Eliminar el vale \"{code}\"?", + "colId": "ID", + "colCode": "Código", + "colValue": "Valor", + "colType": "Tipo", + "colUses": "Usos / Máx", + "colExpires": "Expira", + "colCreated": "Creado", + "colActions": "Acciones", + "form": { + "code": "Código", + "codePlaceholder": "ej. VERANO2025", + "value": "Valor", + "type": "Tipo", + "typeCredits": "Créditos", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamantes", + "typeBadge": "Insignia", + "typeFurni": "Mueble", + "typeRank": "Rango", + "badgeCode": "Código de insignia", + "badgeCodePlaceholder": "ej. VIP001", + "rankId": "ID de rango", + "maxUses": "Usos máximos", + "maxUsesPlaceholder": "0 = ilimitado", + "expiresAt": "Expira el", + "enabled": "Activado", + "save": "Guardar vale", + "saving": "Guardando…", + "cancel": "Cancelar", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Suscripciones", + "subtitle": "Suscripciones recurrentes activas", + "noSubscriptions": "No hay suscripciones activas", + "cancel": "Cancelar", + "confirmCancel": "¿Cancelar la suscripción de {username}?", + "colId": "ID", + "colUser": "Usuario", + "colPackage": "Paquete", + "colAmount": "Cantidad", + "colInterval": "Intervalo", + "colStarted": "Iniciada", + "colNextBilling": "Próximo cobro", + "colStatus": "Estado", + "colActions": "Acciones", + "statusActive": "Activa", + "statusCancelled": "Cancelada", + "statusExpired": "Expirada", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Valores raros", + "subtitle": "Gestionar categorías de valores raros y precios de artículos", + "categories": "Categorías", + "items": "Artículos", + "addCategory": "Añadir categoría", + "editCategory": "Editar categoría", + "deleteCategory": "Eliminar categoría", + "noCategories": "Aún no hay categorías de valores raros", + "confirmDeleteCategory": "¿Eliminar la categoría \"{name}\" y todos sus artículos?", + "colId": "ID", + "colName": "Nombre", + "colItems": "Artículos", + "colUpdated": "Actualizada", + "colActions": "Acciones", + "colItemName": "Nombre del artículo", + "colCredits": "Créditos", + "colPoints": "Puntos", + "colPointType": "Tipo de punto", + "categoryForm": { + "name": "Nombre", + "namePlaceholder": "Nombre de la categoría", + "save": "Guardar categoría", + "saving": "Guardando…", + "cancel": "Cancelar" + }, + "itemForm": { + "itemName": "Nombre del artículo", + "itemNamePlaceholder": "ej. Trono", + "credits": "Valor en créditos", + "points": "Valor en puntos", + "pointType": "Tipo de punto", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Diamantes", + "save": "Guardar artículo", + "saving": "Guardando…", + "cancel": "Cancelar", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Insignias", + "subtitle": "Subir, entregar y gestionar el catálogo de insignias", + "upload": "Subir", + "giveBadge": "Dar insignia", + "catalogue": "Catálogo", + "uploadTitle": "Subir una nueva insignia", + "uploadSubtitle": "Subir un archivo de imagen de insignia", + "badgeCode": "Código de insignia", + "badgeCodePlaceholder": "ej. VIP001", + "badgeFile": "Archivo de insignia", + "badgeFileHint": "PNG o GIF, recomendado 40x40", + "uploadButton": "Subir", + "uploading": "Subiendo…", + "giveTitle": "Dar insignia a usuario", + "giveSubtitle": "Conceder una insignia a un usuario específico", + "username": "Usuario", + "usernamePlaceholder": "Usuario objetivo", + "giveButton": "Dar insignia", + "giving": "Dando…", + "catalogueTitle": "Catálogo de insignias", + "catalogueSubtitle": "Todas las insignias disponibles en el hotel", + "noBadges": "No hay insignias en el catálogo", + "search": "Buscar insignias", + "searchPlaceholder": "Buscar por código o nombre…", + "colCode": "Código", + "colImage": "Imagen", + "colName": "Nombre", + "colDescription": "Descripción", + "colActions": "Acciones", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Logros", + "subtitle": "Lista de solo lectura de logros del juego", + "noAchievements": "No hay logros configurados", + "colId": "ID", + "colName": "Nombre", + "colCategory": "Categoría", + "colLevels": "Niveles", + "colReward": "Recompensa", + "colProgress": "Progreso", + "levelLabel": "Nivel {level}", + "rewardCredits": "{count} créditos", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Campañas de calendario", + "subtitle": "Lista de solo lectura de campañas y eventos del calendario", + "noCampaigns": "Aún no hay campañas de calendario", + "colId": "ID", + "colName": "Nombre", + "colStart": "Inicio", + "colEnd": "Fin", + "colType": "Tipo", + "colReward": "Recompensa", + "colActions": "Acciones", + "detail": { + "title": "Campaña: {name}", + "subtitle": "Detalles del evento de calendario", + "days": "Días", + "dayLabel": "Día {day}", + "reward": "Recompensa", + "noDays": "No hay días configurados para esta campaña", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Moderación de radio", + "subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).", + "moderation": "Moderation", + "shouts": "Saludos", + "applications": "Solicitudes", + "schedules": "Horarios", + "settings": "Ajustes", + "embed": "Incrustar", + "ranks": "Rangos", + "history": "Historial", + "apiKeys": "Claves de API", + "points": "Puntos", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Monitorización de radio", + "subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.", + "stream": "Stream", + "online": "En línea", + "offline": "Fuera de línea", + "notConfigured": "Not configured", + "nowPlaying": "Now playing", + "nowPlayingApi": "Now-playing API", + "listenersApi": "Listeners API", + "listeners": "Oyentes", + "currentSong": "Canción actual", + "bitrate": "Bitrate", + "status": "Estado", + "noNowPlayingHint": "no now-playing API set", + "noListenersHint": "no listeners API set", + "endpointDiagnostics": "Endpoint diagnostics", + "diagnosticsLegend": "OK: accesible · WARN: sin configurar · ERROR: solicitud fallida o tiempo agotado.", + "streamUrl": "Stream URL", + "unreachable": "unreachable", + "refresh": "Actualizar" + }, + "user": "User", + "message": "Message", + "posted": "Posted", + "realName": "Real Name", + "age": "Age", + "style": "Style", + "applied": "Applied", + "day": "Day", + "start": "Start", + "end": "End", + "show": "Show", + "status": "Estado", + "active": "active", + "inactive": "inactive", + "hidden": "hidden", + "activeSchedules": "Active schedules", + "noShouts": "No hay saludos que moderar", + "noApplications": "No applications submitted.", + "noSchedules": "No schedules configured.", + "deleteShout": "Eliminar", + "confirmDeleteShout": "¿Eliminar este saludo?", + "pendingApplications": "Solicitudes pendientes", + "settingsForm": { + "title": "Radio Settings", + "subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "enabled": "Enabled", + "disabled": "Disabled", + "totalKeys": "Total keys", + "configured": "Configured", + "curatedHint": "curated keys with a value", + "customKeys": "Custom keys", + "saveAll": "Save all", + "singleKey": "Add / overwrite a single key", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "value", + "commentPlaceholder": "comment (optional)", + "saveSingle": "Save", + "otherSettings": "Other radio settings", + "dbError": "Could not load settings (database unavailable). Defaults will be created on save." + }, + "embedPage": { + "title": "Radio Embed", + "subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).", + "streamUrl": "Stream URL", + "configured": "Configured", + "missing": "Missing", + "radioName": "Radio name", + "nowPlayingApi": "Now-playing API", + "set": "Set", + "notSet": "Not set", + "noStreamUrl": "No stream URL configured", + "noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.", + "goToSettings": "Go to Radio Settings", + "livePreview": "Live preview", + "livePreviewText": "This is the bare audio player as visitors will see it. Press play to confirm the stream is reachable.", + "source": "Source", + "audioSnippet": "Audio player snippet", + "audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.", + "iframeSnippet": "Iframe wrapper snippet", + "iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.", + "audioUnsupported": "Your browser does not support the audio element." + }, + "banners": { + "title": "Banners", + "heading": "Radio Banners", + "description": "Promotional banners shown on the radio page, ordered by sort order.", + "addBanner": "Añadir banner", + "createBanner": "Create banner", + "deleteBanner": "Eliminar banner", + "noBanners": "No banners yet — add one above.", + "existing": "Existing banners ({count})", + "save": "Save", + "delete": "Delete", + "byUser": "by user {id}", + "active": "active", + "hidden": "hidden", + "bannerAlt": "Radio banner", + "statusActive": "Active", + "statusHidden": "Hidden", + "dbError": "Could not load banners (database unavailable).", + "form": { + "imagePath": "Image path / URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Title", + "description": "Description", + "sortOrder": "Sort order", + "active": "Active" + } + }, + "ranksForm": { + "title": "Rangos de radio", + "subtitle": "DJ / staff ranks assignable on radio applications.", + "dbError": "Could not load ranks (database unavailable).", + "active": "Active", + "addRank": "Add rank", + "name": "Name", + "badgeCode": "Badge code", + "description": "Description", + "createRank": "Create rank", + "existing": "Existing ranks ({count})", + "noRanks": "No ranks yet — add one above.", + "activeLabel": "active", + "inactiveLabel": "inactive", + "save": "Save", + "deleteRank": "Delete rank #{id}" + }, + "historyPage": { + "title": "Radio Play History", + "subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.", + "dbError": "Could not load radio history (database unavailable).", + "showsLogged": "Shows logged", + "onAirNow": "On air now", + "uniqueDjs": "Unique DJs", + "peakListeners": "Peak listeners", + "empty": "No radio history recorded yet.", + "showLog": "Show log ({count})", + "colDj": "DJ", + "colShow": "Show", + "colStarted": "Started", + "colEnded": "Ended", + "colAirtime": "Airtime", + "colListeners": "Listeners", + "colNotes": "Notes", + "onAir": "on air" + }, + "apiKeysForm": { + "title": "Claves de API", + "subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.", + "dbError": "Could not load API keys (database unavailable).", + "totalKeys": "Total keys", + "active": "Active", + "inactive": "Inactive", + "generateKey": "Generar nueva clave", + "generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.", + "name": "Name", + "namePlaceholder": "AzureCast bridge", + "rateLimit": "Rate limit (requests/min)", + "allowedIps": "Allowed IPs (optional)", + "allowedIpsPlaceholder": "comma-separated, blank = any", + "generate": "Generar", + "existingKeys": "Existing keys ({count})", + "noKeys": "No API keys yet — generate one above.", + "colName": "Name", + "colKey": "Clave", + "colAllowedIps": "Allowed IPs", + "colRateLimit": "Rate limit", + "colLastUsed": "Last used", + "colExpires": "Expires", + "colStatus": "Status", + "colActions": "Acciones", + "maskedHint": "Only the first 8 characters are shown", + "any": "any", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete" + }, + "pointsForm": { + "title": "Configuración de puntos de oyente", + "subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "saved": "Saved", + "points": "Points", + "enabled": "Enabled", + "disabled": "Disabled", + "perMinute": "Per minute", + "paidIn": "paid in {currency}", + "maxPerDay": "Max / day", + "unlimited": "Unlimited", + "minListeners": "Min listeners", + "settings": "Settings", + "pointsEnabled": "Points enabled", + "pointsEnabledHint": "Master switch for awarding listener points.", + "currency": "Currency", + "currencyHint": "Which wallet the points are paid into.", + "pointsPerMinute": "Points per minute", + "pointsPerMinuteHint": "Amount awarded for each full minute of listening.", + "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", + "minListenersHint": "Points are only awarded when at least this many people are tuned in.", + "save": "Guardar configuración de puntos" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.", + "dbError": "Could not load the AutoDJ playlist (database unavailable).", + "tracks": "Tracks", + "active": "Active", + "inactive": "Inactive", + "addTrack": "Add track", + "titlePlaceholder": "Track title", + "artist": "Artist", + "album": "Album", + "artworkUrl": "Artwork URL", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Duration (seconds)", + "durationPlaceholder": "e.g. 215", + "sortOrder": "Sort order", + "playlist": "Playlist ({count})", + "noTracks": "No AutoDJ tracks yet — add one above.", + "colOrder": "Order", + "colTitle": "Title", + "colArtist": "Artist", + "colAlbum": "Album", + "colDuration": "Duration", + "colPlays": "Plays", + "colLastPlayed": "Last played", + "colStatus": "Status", + "colActions": "Actions", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete", + "trackTitle": "Title" + }, + "moderationPage": { + "title": "DJ Moderation", + "subtitle": "Review and remove radio shouts (50 most recent).", + "recentShouts": "Recent Shouts ({count})" + } + }, + "commandocentrum": { + "title": "Centro de comandos", + "subtitle": "Diagnósticos, controles RCON y gestión de usuarios", + "diagnostics": "Diagnósticos", + "rcon": "RCON", + "userActions": "Acciones de usuario", + "diagnosticsTitle": "Diagnósticos del emulador", + "memoryUsage": "Uso de memoria", + "uptime": "Tiempo activo", + "onlineUsers": "Usuarios en línea", + "roomsLoaded": "Salas cargadas", + "refresh": "Actualizar", + "rconTitle": "Comandos RCON", + "rconPlaceholder": "Introduce un comando RCON…", + "rconSend": "Enviar", + "rconSending": "Enviando…", + "rconResponse": "Respuesta", + "userActionsTitle": "Acciones de usuario", + "username": "Usuario", + "usernamePlaceholder": "Usuario objetivo", + "action": "Acción", + "execute": "Ejecutar", + "actions": { + "disconnect": "Desconectar", + "alert": "Enviar alerta", + "giveCredits": "Dar créditos", + "giveBadge": "Dar insignia", + "givePoints": "Dar puntos", + "ban": "Sancionar", + "kick": "Expulsar" + }, + "messagePlaceholder": "Mensaje (para alertas)…", + "amountPlaceholder": "Cantidad…", + "badgePlaceholder": "Código de insignia…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Configuración del emulador", + "subtitle": "Ver y editar ajustes del emulador y textos de localización", + "settings": "Ajustes", + "texts": "Textos", + "search": "Buscar", + "searchPlaceholder": "Buscar claves…", + "noSettings": "No se encontraron ajustes", + "noTexts": "No se encontraron textos", + "edit": "Editar", + "save": "Guardar", + "saving": "Guardando…", + "cancel": "Cancelar", + "colKey": "Clave", + "colValue": "Valor", + "colType": "Tipo", + "colActions": "Acciones", + "editDialog": { + "title": "Editar: {key}", + "value": "Valor", + "valuePlaceholder": "Introduce el valor…", + "save": "Guardar cambios", + "cancel": "Cancelar" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Alertas", + "subtitle": "Enviar alertas a todo el hotel y ver alertas recientes", + "sendAlert": "Enviar alerta al hotel", + "recentAlerts": "Alertas recientes ({count})", + "noRecentAlerts": "No hay alertas recientes", + "form": { + "title": "Título de la alerta", + "titlePlaceholder": "ej. Mantenimiento del servidor en 10 minutos", + "message": "Mensaje de alerta", + "messagePlaceholder": "Escribe el mensaje de alerta…", + "type": "Tipo", + "typeHotel": "Alerta a todo el hotel", + "typeStaff": "Solo equipo", + "urgent": "Urgente", + "send": "Enviar alerta", + "sending": "Enviando…", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "ID", + "colTitle": "Título", + "colSentBy": "Enviada por", + "colType": "Tipo", + "colDate": "Fecha", + "colActions": "Acciones", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Actividades del equipo", + "subtitle": "Registro de auditoría de acciones del equipo en el panel de administración", + "noLogs": "Aún no se ha registrado actividad del equipo", + "colId": "ID", + "colUser": "Usuario", + "colAction": "Acción", + "colTarget": "Objetivo", + "colDescription": "Descripción", + "colIp": "IP", + "colTimestamp": "Fecha", + "filterByUser": "Filtrar por usuario…", + "filterByAction": "Filtrar por acción…", + "clearFilters": "Limpiar filtros", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Filtro de palabras", + "subtitle": "Gestionar palabras y frases filtradas en el hotel", + "addWord": "Añadir palabra", + "addWords": "Añadir palabras", + "noWords": "Aún no hay palabras filtradas", + "confirmDelete": "¿Eliminar \"{word}\" del filtro?", + "colId": "ID", + "colWord": "Palabra", + "colAddedBy": "Añadida por", + "colCreated": "Creada", + "colActions": "Acciones", + "form": { + "word": "Palabra", + "wordPlaceholder": "ej. palabrota", + "addMore": "Añadir varias palabras (una por línea)", + "save": "Añadir al filtro", + "saving": "Guardando…", + "cancel": "Cancelar" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Modo de mantenimiento", + "subtitle": "Activar o desactivar el mantenimiento del hotel", + "enabled": "El modo de mantenimiento está activado", + "disabled": "El modo de mantenimiento está desactivado", + "enable": "Activar mantenimiento", + "disable": "Desactivar mantenimiento", + "message": "Mensaje de mantenimiento", + "messagePlaceholder": "¡Volveremos en breve!", + "staffAccess": "Permitir acceso del equipo durante el mantenimiento", + "save": "Guardar ajustes", + "saving": "Guardando…", + "confirmEnable": "Activar el mantenimiento impedirá que todos los usuarios no pertenecientes al equipo accedan al hotel. ¿Continuar?", + "confirmDisable": "¿Desactivar el modo de mantenimiento y restaurar el acceso para todos los usuarios?", + "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": "Permisos de Housekeeping", + "subtitle": "Configurar qué rangos pueden acceder a qué secciones de administración", + "addPermission": "Añadir permiso", + "editPermission": "Editar permiso", + "deletePermission": "Eliminar permiso", + "noPermissions": "No hay permisos de housekeeping configurados", + "confirmDelete": "¿Eliminar este permiso?", + "colId": "ID", + "colRank": "Rango", + "colSection": "Sección", + "colActions": "Acciones", + "form": { + "rankId": "ID de rango", + "rankIdPlaceholder": "Rango mínimo", + "section": "Clave de sección", + "sectionPlaceholder": "ej. admin.dashboard", + "save": "Guardar permiso", + "saving": "Guardando…", + "cancel": "Cancelar" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset applied!", + "cleared": "All Permisos cleared!", + "invalidRank": "Invalid Rango", + "testDone": "Test done: {count} Permisos found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Eliminar ALL Permisos? This Acción cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Permiso", + "colDescription": "Descripción", + "colMinRank": "Min. Rango", + "permissionKey": "Clave de permiso", + "minRank": "Min. Rango", + "description": "Descripción", + "permissions": "Permisos", + "permissionsCount": "{count} Permisos", + "permission": "Permiso", + "highestMinRank": "Highest min. Rango: {rank}", + "totalMinRank": "Total min. Rango sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Rangos", + "missingDeps": "{count} missing dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(missing)", + "rank": "Rango", + "count": "Count", + "searchPermission": "Buscar Permisos…", + "search": "Buscar", + "manage": "Manage", + "importSelection": "Importar selection", + "noGroup": "No group", + "allGroups": "All groups", + "perGroup": "Permisos per group", + "perRank": "Permisos per Rango", + "rankOverviewHint": "All Permisos grouped by the Rango they are assigned to.", + "tabOverview": "Resumen", + "tabManage": "Manage", + "tabImport": "Importar / Export", + "tabRanks": "Rango Resumen", + "tabPresets": "Preajustes", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "Importar Permisos", + "importHint": "Paste a JSON array of Permiso objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "Importar", + "exportTitle": "Export Permisos", + "exportHint": "Export all Permisos as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Permiso Preajustes", + "presetsHint": "Aplicar a predefined set of Permisos for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Moderación tools: Usuario lookup, Sanciones, CFH handling, chat Registros.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Usuarios, Salas, news, Ajustes, Tienda, events, radio & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including Permiso management and asset Importar.", + "applyPreset": "Aplicar preset", + "clearAll": "Clear all Permisos", + "testTitle": "Test Rango access", + "testHint": "Enter a Rango number to see which Permisos would be granted.", + "test": "Test", + "auditTitle": "Permiso audit log", + "auditHint": "All changes to housekeeping Permisos are logged.", + "auditLogsAt": "Audit Registros are available on the Audit log page.", + "viewAuditLogs": "Ver audit Registros", + "importedWithErrors": "Imported {count} Permisos with {errors} errors", + "confirmClearAllDesc": "This will Eliminar every Permiso entry from the Base de datos. Are you sure?", + "confirmDeletePermission": "Eliminar this Permiso permanently?", + "confirmBulkDelete": "Eliminar {count} selected Permisos?", + "deleteSelected": "Eliminar {count} selected", + "cancel": "Cancelar", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Usuario", + "auditAction": "Acción", + "auditTarget": "Objetivo", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Salas", + "subtitle": "Buscar y gestionar salas del hotel", + "search": "Buscar", + "searchPlaceholder": "Buscar por nombre, dueño o ID…", + "searchResults": "{count, plural, one {# sala} other {# salas}} encontradas para \"{query}\"", + "noResults": "No se encontraron salas", + "colId": "ID", + "colName": "Nombre", + "colOwner": "Dueño", + "colUsers": "Usuarios", + "colState": "Estado", + "colCategory": "Categoría", + "colCreated": "Creada", + "colActions": "Acciones", + "stateOpen": "Abierta", + "stateClosed": "Cerrada", + "stateLocked": "Bloqueada", + "stateInvisible": "Invisible", + "detail": { + "title": "Sala: {name}", + "subtitle": "Propiedad de {owner}", + "overview": "Resumen", + "actions": "Acciones", + "description": "Descripción", + "noDescription": "Sin descripción", + "owner": "Dueño", + "users": "Usuarios en línea", + "maxUsers": "Usuarios máximos", + "category": "Categoría", + "state": "Estado", + "tags": "Etiquetas", + "noTags": "Sin etiquetas", + "created": "Creada", + "deleteRoom": "Eliminar sala", + "confirmDelete": "¿Eliminar la sala \"{name}\"? Esto no se puede deshacer.", + "enterRoom": "Entrar a la sala", + "changeOwner": "Cambiar dueño", + "changeOwnerPlaceholder": "Usuario del nuevo dueño" + } + }, + "emailTemplates": { + "title": "Plantillas de correo", + "subtitle": "Gestionar plantillas de correo transaccional", + "newTemplate": "+ Nueva plantilla", + "edit": "Editar", + "delete": "Eliminar", + "noTemplates": "Aún no hay plantillas de correo", + "confirmDelete": "¿Eliminar la plantilla \"{name}\"?", + "colId": "ID", + "colName": "Nombre", + "colSubject": "Asunto", + "colKey": "Clave", + "colUpdated": "Actualizada", + "colActions": "Acciones", + "form": { + "name": "Nombre", + "namePlaceholder": "ej. Correo de bienvenida", + "key": "Clave", + "keyPlaceholder": "ej. welcome_email", + "subject": "Asunto", + "subjectPlaceholder": "Línea de asunto del correo", + "body": "Contenido (HTML)", + "bodyPlaceholder": "

Estimado {username},

", + "variables": "Variables disponibles", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Guardar plantilla", + "saving": "Guardando…", + "cancel": "Cancelar", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Tema", + "subtitle": "Personalizar la apariencia del CMS", + "presets": "Preajustes", + "colours": "Colores", + "css": "CSS", + "presetsTitle": "Preajustes de tema", + "presetsSubtitle": "Elige un esquema de color predefinido", + "applyPreset": "Aplicar", + "presetApplied": "Preajuste aplicado: {preset}", + "customiseTitle": "Colores personalizados", + "primary": "Primario", + "secondary": "Secundario", + "accent": "Acento", + "background": "Fondo", + "surface": "Superficie", + "text": "Texto", + "saveColours": "Guardar colores", + "savingColours": "Guardando…", + "cssTitle": "CSS personalizado", + "cssSubtitle": "Añadir CSS personalizado para sobrescribir los estilos del tema", + "cssPlaceholder": "/* Tu CSS personalizado aquí */", + "saveCss": "Guardar CSS", + "savingCss": "Guardando…", + "reset": "Restablecer valores por defecto", + "confirmReset": "¿Restablecer el tema a los valores por defecto?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Biblioteca multimedia", + "subtitle": "Subir y gestionar archivos multimedia", + "upload": "Subir", + "uploadTitle": "Subir un archivo", + "uploadSubtitle": "Arrastra y suelta o haz clic para subir", + "uploadButton": "Elegir archivo", + "uploading": "Subiendo…", + "noFiles": "Aún no hay archivos multimedia", + "delete": "Eliminar", + "confirmDelete": "¿Eliminar este archivo permanentemente?", + "search": "Buscar", + "searchPlaceholder": "Buscar por nombre de archivo…", + "colPreview": "Vista previa", + "colName": "Nombre", + "colSize": "Tamaño", + "colType": "Tipo", + "colUploaded": "Subido", + "colActions": "Acciones", + "copyUrl": "Copiar URL", + "urlCopied": "URL copiada al portapapeles" + }, + "settings": { + "title": "Ajustes del CMS", + "subtitle": "Gestionar configuración clave/valor del CMS", + "addSetting": "Añadir ajuste", + "edit": "Editar", + "delete": "Eliminar", + "noSettings": "No se encontraron ajustes", + "confirmDelete": "¿Eliminar el ajuste \"{key}\"?", + "colKey": "Clave", + "colValue": "Valor", + "colUpdated": "Actualizado", + "colActions": "Acciones", + "form": { + "key": "Clave", + "keyPlaceholder": "ej. hotel_name", + "value": "Valor", + "valuePlaceholder": "Valor del ajuste", + "save": "Guardar ajuste", + "saving": "Guardando…", + "cancel": "Cancelar" + }, + "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." + }, + "favicon": { + "title": "Favicon", + "subtitle": "Upload and manage the site favicon", + "current": "Current favicon", + "uploadLabel": "Upload favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.", + "upload": "Upload", + "uploading": "Uploading…", + "delete": "Remove", + "deleting": "Removing…", + "saved": "Favicon saved successfully!", + "deleted": "Favicon removed successfully!", + "error": "Something went wrong", + "confirmDelete": "Remove the favicon? The site will no longer show a custom favicon.", + "generator": { + "title": "Generate favicon", + "text": "Text", + "bgColor": "Background color", + "textColor": "Text color", + "rounded": "Rounded corners", + "save": "Save as favicon" + }, + "cancel": "Cancel" + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Inicio", + "reload": "Recargar", + "fullscreen": "Pantalla completa", + "logout": "Cerrar sesión", + "onlineUsers": "Usuarios en línea", + "emulatorOnline": "Emulador en línea", + "emulatorOffline": "Emulador fuera de línea", + "dragToMove": "Arrastra para mover", + "hide": "Ocultar barra", + "fullscreenExit": "Salir de pantalla completa", + "show": "Mostrar barra", + "emulatorUnknown": "Estado del emulador desconocido" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Diagnóstico de archivos", + "preliminary": "Comprobación preliminar de direcciones; el contenido se valida al importar.", + "http": "HTTP {status}", + "network": "Falló la conexión", + "timeout": "La fuente no respondió a tiempo", + "invalidResponse": "La fuente devolvió una página web en lugar de un archivo", + "available": "Archivo encontrado; pendiente de validación", + "recover": "Adjuntar original y reanudar", + "recoveryHint": "Elige {file} (máximo 50 MB). Se verifica su identidad. Se reintentan los elementos fallidos y se conservan los importados.", + "attach": "Elige el archivo .nitro original", + "working": "Validando o reanudando...", + "attached": "Archivo original correspondiente adjuntado", + "resume": "Reanudar importaciones fallidas con este archivo", + "invalidFile": "Elige un .nitro original correspondiente de hasta 50 MB y vuelve a intentarlo.", + "resumeError": "Actualiza el historial y usa el último intento; comprueba el archivo y vuelve a intentarlo.", + "mismatchedFile": "Este archivo pertenece a otro mueble.", + "alreadyStarted": "La recuperación ya comenzó. Actualiza el historial y usa el último intento.", + "notEligible": "Este elemento no admite recuperación mediante archivo adjunto." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/fi.json b/src/messages/fi.json index 4e472aa3..82a0a9d6 100644 --- a/src/messages/fi.json +++ b/src/messages/fi.json @@ -1,674 +1,4908 @@ { - "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": {}, - "header": {}, - "footer": {}, - "emails": {}, - "pages": { - "admin": { - "nav": { - "studio": "Studio", - "operationsCenter": "Operations center" - }, - "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." - }, - "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" - } - } - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "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" - }, - "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}" - }, - "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." - } - }, - "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" - } - } - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "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." - } - }, - "toolbar": { - "home": "Koti", - "reload": "Lataa uudelleen", - "fullscreen": "Koko näyttö", - "logout": "Kirjaudu ulos", - "onlineUsers": "Käyttäjät verkossa", - "emulatorOnline": "Emulaattori verkossa", - "emulatorOffline": "Emulaattori ei verkossa", - "dragToMove": "Vedä liikuttaaksesi", - "hide": "Piilota työkalupalkki", - "fullscreenExit": "Lopeta koko näyttö", - "show": "Näytä työkalupalkki", - "emulatorUnknown": "Emulaattorin tila tuntematon" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Tiedostojen diagnostiikka", - "preliminary": "Osoitteiden alustava tarkistus; sisältö tarkistetaan tuonnissa.", - "http": "HTTP {status}", - "network": "Yhteys epäonnistui", - "timeout": "Lähde ei vastannut ajoissa", - "invalidResponse": "Lähde palautti verkkosivun tiedoston sijaan", - "available": "Tiedosto löytyi; odottaa tarkistusta", - "recover": "Liitä alkuperäinen ja jatka", - "recoveryHint": "Valitse {file} (enintään 50 MB). Sen tunniste tarkistetaan. Epäonnistuneet kohteet yritetään uudelleen; valmiit tuonnit säilytetään.", - "attach": "Valitse alkuperäinen .nitro-tiedosto", - "working": "Tarkistetaan tai jatketaan...", - "attached": "Vastaava tiedosto liitetty", - "resume": "Jatka epäonnistuneita tuonteja tällä tiedostolla", - "invalidFile": "Valitse vastaava alkuperäinen .nitro, enintään 50 MB, ja yritä uudelleen.", - "resumeError": "Päivitä historia ja käytä uusinta yritystä; tarkista tiedosto ja yritä uudelleen.", - "mismatchedFile": "Tämä tiedosto kuuluu toiselle huonekalulle.", - "alreadyStarted": "Palautus on jo alkanut. Päivitä historia ja käytä uusinta yritystä.", - "notEligible": "Tätä kohdetta ei voi palauttaa liitteellä." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "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" + }, + "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." + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "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" + } + }, + "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!" + }, + "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" + }, + "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" + } + }, + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "tickets": { + "title": "CMS support desk", + "subtitle": "Internal CMS tickets (assignee, priority, staff workflow). Not the same as help-center tickets from /help.", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab. Use Inbox for both queues.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product’s own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Tickets players open at /help/tickets. Separate from the CMS support desk.", + "queueHint": "This queue is the public help center. Use Inbox for both queues, or Support desk for CMS-only.", + "queueOtherCta": "Open unified inbox", + "queueCounts": "Open here: {here} · Support desk: {other}", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + } + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "applications": { + "title": "Staff Applications", + "subtitle": "Pending and reviewed staff applications", + "pending": "Pending", + "approved": "Approved", + "rejected": "Rejected", + "noApplications": "No applications yet", + "colId": "ID", + "colApplicant": "Applicant", + "colPosition": "Position", + "colStatus": "Status", + "colSubmitted": "Submitted", + "colActions": "Actions", + "review": "Review", + "approve": "Approve", + "reject": "Reject", + "confirmApprove": "Approve {username} for {position}?", + "confirmReject": "Reject {username}'s application for {position}?", + "detail": { + "title": "Application by {username}", + "subtitle": "For {position}", + "about": "About the applicant", + "message": "Application message", + "status": "Status", + "submitted": "Submitted", + "noMessage": "No message provided" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Teams", + "subtitle": "Define staff rank names and descriptions", + "addRank": "Add rank", + "editRank": "Edit rank", + "deleteRank": "Delete rank", + "noTeams": "No rank definitions yet", + "confirmDelete": "Delete rank {id} definition?", + "colId": "ID", + "colRank": "Rank", + "colName": "Name", + "colBadge": "Badge", + "colColour": "Colour", + "colActions": "Actions", + "form": { + "rankId": "Rank ID", + "rankIdPlaceholder": "Numeric rank ID", + "name": "Name", + "namePlaceholder": "e.g. Administrator", + "badge": "Badge code", + "badgePlaceholder": "e.g. ADM001", + "colour": "Colour", + "colourPlaceholder": "e.g. #ff0000", + "save": "Save team definition", + "saving": "Saving…", + "cancel": "Cancel" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Permissions", + "subtitle": "This is the live access control for admin and mod panels", + "addPermission": "Add permission", + "editPermission": "Edit permission", + "deletePermission": "Delete permission", + "noPermissions": "No permissions configured yet", + "confirmDelete": "Delete this permission?", + "colId": "ID", + "colRank": "Rank", + "colPermission": "Permission", + "colCreated": "Created", + "colActions": "Actions", + "form": { + "rankId": "Rank ID", + "rankIdPlaceholder": "Minimum rank required", + "permission": "Permission key", + "permissionPlaceholder": "e.g. admin.articles.manage", + "save": "Save permission", + "saving": "Saving…", + "cancel": "Cancel" + } + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "shop": { + "title": "Shop", + "subtitle": "Manage packages and orders", + "packages": "Packages", + "orders": "Orders", + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions (most recent 25)", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackage": "+ New package", + "edit": "Edit", + "delete": "Delete", + "viewOrder": "View", + "noPackages": "No shop packages yet", + "noOrders": "No orders yet", + "confirmDelete": "Delete this package?", + "colId": "ID", + "colName": "Name", + "colPrice": "Price", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colCurrency": "Currency", + "colType": "Type", + "colSold": "Sold", + "colEnabled": "Enabled", + "colActions": "Actions", + "colOrderId": "Order ID", + "colCustomer": "Customer", + "colPackage": "Package", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "colAmount": "Amount", + "colStatus": "Status", + "colDate": "Date", + "statusPending": "Pending", + "statusCompleted": "Completed", + "statusRefunded": "Refunded", + "form": { + "name": "Name", + "namePlaceholder": "Package name", + "description": "Description", + "descriptionPlaceholder": "Package description", + "price": "Price", + "currency": "Currency", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Type", + "typeCredits": "Credits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamonds", + "typeBadge": "Badge", + "typeFurni": "Furniture", + "typeRank": "Rank", + "amount": "Amount", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "e.g. VIP001", + "rankId": "Rank ID", + "furniItems": "Furniture items", + "enabled": "Enabled", + "save": "Save package", + "saving": "Saving…", + "cancel": "Cancel", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "listHeading": "Guilds ({count})", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "transactions": { + "title": "Transactions", + "subtitle": "PayPal payment log", + "noTransactions": "No transactions yet", + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colId": "ID", + "colUser": "User", + "colPayer": "Payer", + "colAmount": "Amount", + "colCurrency": "Currency", + "colPackage": "Package", + "colStatus": "Status", + "colTransaction": "Transaction ID", + "colDate": "Date", + "colActions": "Actions", + "statusCompleted": "Completed", + "statusPending": "Pending", + "statusFailed": "Failed", + "statusRefunded": "Refunded", + "detail": { + "title": "Transaction #{id}", + "paypalId": "PayPal ID", + "payerEmail": "Payer email", + "grossAmount": "Gross amount", + "fee": "Fee", + "netAmount": "Net amount" + } + }, + "vouchers": { + "title": "Shop Vouchers", + "subtitle": "Manage redeemable voucher codes", + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "newVoucher": "+ New voucher", + "edit": "Edit", + "delete": "Delete", + "noVouchers": "No vouchers yet", + "confirmDeleteTitle": "Delete voucher", + "confirmDelete": "Delete voucher \"{code}\"?", + "created": "Voucher created", + "deleted": "Voucher deleted", + "updated": "Voucher updated", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "updateError": "Could not update voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colId": "ID", + "colCode": "Code", + "colValue": "Value", + "colAmount": "Amount", + "colType": "Type", + "colUses": "Uses / Max", + "colStatus": "Status", + "colExpires": "Expires", + "colCreated": "Created", + "colActions": "Actions", + "form": { + "code": "Code", + "codePlaceholder": "e.g. SUMMER2025", + "value": "Value", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "type": "Type", + "typeCredits": "Credits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamonds", + "typeBadge": "Badge", + "typeFurni": "Furniture", + "typeRank": "Rank", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "e.g. VIP001", + "rankId": "Rank ID", + "maxUses": "Max uses", + "maxUsesPlaceholder": "0 = unlimited", + "expiresAt": "Expires at", + "enabled": "Enabled", + "create": "Create voucher", + "save": "Save voucher", + "saving": "Saving…", + "cancel": "Cancel" + } + }, + "subscriptions": { + "title": "Subscriptions", + "subtitle": "Active recurring subscriptions", + "noSubscriptions": "No active subscriptions", + "cancel": "Cancel", + "confirmCancel": "Cancel subscription for {username}?", + "colId": "ID", + "colUser": "User", + "colPackage": "Package", + "colAmount": "Amount", + "colInterval": "Interval", + "colStarted": "Started", + "colNextBilling": "Next billing", + "colStatus": "Status", + "colActions": "Actions", + "statusActive": "Active", + "statusCancelled": "Cancelled", + "statusExpired": "Expired", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Rare Values", + "subtitle": "Manage rare value categories and item prices", + "categories": "Categories", + "items": "Items", + "addCategory": "Add category", + "editCategory": "Edit category", + "editValue": "Edit value", + "deleteCategory": "Delete category", + "noCategories": "No rare value categories yet", + "confirmDeleteCategory": "Delete category \"{name}\" and all its items?", + "colId": "ID", + "colName": "Name", + "colItems": "Items", + "colUpdated": "Updated", + "colActions": "Actions", + "colItemName": "Item name", + "colCredits": "Credits", + "colPoints": "Points", + "colPointType": "Point type", + "categoryForm": { + "name": "Name", + "namePlaceholder": "Category name", + "save": "Save category", + "saving": "Saving…", + "cancel": "Cancel" + }, + "itemForm": { + "itemName": "Item name", + "itemNamePlaceholder": "e.g. Throne", + "credits": "Credits value", + "points": "Points value", + "pointType": "Point type", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Diamonds", + "save": "Save item", + "saving": "Saving…", + "cancel": "Cancel", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Badges", + "subtitle": "Upload, give and manage badge catalogue", + "upload": "Upload", + "giveBadge": "Give badge", + "catalogue": "Catalogue", + "uploadTitle": "Upload a new badge", + "uploadSubtitle": "Upload a badge image file", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "e.g. VIP001", + "badgeFile": "Badge file", + "badgeFileHint": "PNG or GIF, recommended 40x40", + "uploadButton": "Upload", + "uploading": "Uploading…", + "giveTitle": "Give badge to user", + "giveSubtitle": "Grant a badge to a specific user", + "username": "Username", + "usernamePlaceholder": "Target username", + "giveButton": "Give badge", + "giving": "Giving…", + "catalogueTitle": "Badge catalogue", + "catalogueSubtitle": "All available badges in the hotel", + "noBadges": "No badges in the catalogue", + "search": "Search badges", + "searchPlaceholder": "Search by code or name…", + "colCode": "Code", + "colImage": "Image", + "colName": "Name", + "colDescription": "Description", + "colActions": "Actions", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Achievements", + "subtitle": "Read-only list of in-game achievements", + "noAchievements": "No achievements configured", + "colId": "ID", + "colName": "Name", + "colCategory": "Category", + "colLevels": "Levels", + "colReward": "Reward", + "colProgress": "Progress", + "levelLabel": "Level {level}", + "rewardCredits": "{count} credits", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Calendar campaigns", + "subtitle": "Read-only list of calendar campaigns and events", + "noCampaigns": "No calendar campaigns yet", + "colId": "ID", + "colName": "Name", + "colStart": "Start", + "colEnd": "End", + "colType": "Type", + "colReward": "Reward", + "colActions": "Actions", + "detail": { + "title": "Campaign: {name}", + "subtitle": "Calendar event details", + "days": "Days", + "dayLabel": "Day {day}", + "reward": "Reward", + "noDays": "No days configured for this campaign", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Radio Moderation", + "subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).", + "moderation": "Moderation", + "shouts": "Shouts", + "applications": "Applications", + "schedules": "Schedules", + "settings": "Settings", + "embed": "Embed", + "ranks": "Ranks", + "history": "History", + "apiKeys": "API Keys", + "points": "Points", + "autoDj": "AutoDJ", + "user": "User", + "message": "Message", + "posted": "Posted", + "realName": "Real Name", + "age": "Age", + "style": "Style", + "applied": "Applied", + "day": "Day", + "start": "Start", + "end": "End", + "show": "Show", + "status": "Status", + "active": "active", + "inactive": "inactive", + "hidden": "hidden", + "activeSchedules": "Active schedules", + "noShouts": "No shouts to moderate", + "noApplications": "No applications submitted.", + "noSchedules": "No schedules configured.", + "deleteShout": "Delete", + "confirmDeleteShout": "Delete this shout?", + "pendingApplications": "Pending applications", + "settingsForm": { + "title": "Radio Settings", + "subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "enabled": "Enabled", + "disabled": "Disabled", + "totalKeys": "Total keys", + "configured": "Configured", + "curatedHint": "curated keys with a value", + "customKeys": "Custom keys", + "saveAll": "Save all", + "singleKey": "Add / overwrite a single key", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "value", + "commentPlaceholder": "comment (optional)", + "saveSingle": "Save", + "otherSettings": "Other radio settings", + "dbError": "Could not load settings (database unavailable). Defaults will be created on save." + }, + "embedPage": { + "title": "Radio Embed", + "subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).", + "streamUrl": "Stream URL", + "configured": "Configured", + "missing": "Missing", + "radioName": "Radio name", + "nowPlayingApi": "Now-playing API", + "set": "Set", + "notSet": "Not set", + "noStreamUrl": "No stream URL configured", + "noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.", + "goToSettings": "Go to Radio Settings", + "livePreview": "Live preview", + "livePreviewText": "This is the bare audio player as visitors will see it. Press play to confirm the stream is reachable.", + "source": "Source", + "audioSnippet": "Audio player snippet", + "audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.", + "iframeSnippet": "Iframe wrapper snippet", + "iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.", + "audioUnsupported": "Your browser does not support the audio element." + }, + "banners": { + "title": "Banners", + "heading": "Radio Banners", + "description": "Promotional banners shown on the radio page, ordered by sort order.", + "addBanner": "Add banner", + "createBanner": "Create banner", + "deleteBanner": "Delete banner", + "noBanners": "No banners yet — add one above.", + "existing": "Existing banners ({count})", + "save": "Save", + "delete": "Delete", + "byUser": "by user {id}", + "active": "active", + "hidden": "hidden", + "bannerAlt": "Radio banner", + "statusActive": "Active", + "statusHidden": "Hidden", + "dbError": "Could not load banners (database unavailable).", + "form": { + "imagePath": "Image path / URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Title", + "description": "Description", + "sortOrder": "Sort order", + "active": "Active" + } + }, + "ranksForm": { + "title": "Radio Ranks", + "subtitle": "DJ / staff ranks assignable on radio applications.", + "dbError": "Could not load ranks (database unavailable).", + "active": "Active", + "addRank": "Add rank", + "name": "Name", + "badgeCode": "Badge code", + "description": "Description", + "createRank": "Create rank", + "existing": "Existing ranks ({count})", + "noRanks": "No ranks yet — add one above.", + "activeLabel": "active", + "inactiveLabel": "inactive", + "save": "Save", + "deleteRank": "Delete rank #{id}" + }, + "historyPage": { + "title": "Radio Play History", + "subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.", + "dbError": "Could not load radio history (database unavailable).", + "showsLogged": "Shows logged", + "onAirNow": "On air now", + "uniqueDjs": "Unique DJs", + "peakListeners": "Peak listeners", + "empty": "No radio history recorded yet.", + "showLog": "Show log ({count})", + "colDj": "DJ", + "colShow": "Show", + "colStarted": "Started", + "colEnded": "Ended", + "colAirtime": "Airtime", + "colListeners": "Listeners", + "colNotes": "Notes", + "onAir": "on air" + }, + "apiKeysForm": { + "title": "Radio API Keys", + "subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.", + "dbError": "Could not load API keys (database unavailable).", + "totalKeys": "Total keys", + "active": "Active", + "inactive": "Inactive", + "generateKey": "Generate key", + "generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.", + "name": "Name", + "namePlaceholder": "AzureCast bridge", + "rateLimit": "Rate limit (requests/min)", + "allowedIps": "Allowed IPs (optional)", + "allowedIpsPlaceholder": "comma-separated, blank = any", + "generate": "Generate key", + "existingKeys": "Existing keys ({count})", + "noKeys": "No API keys yet — generate one above.", + "colName": "Name", + "colKey": "Key", + "colAllowedIps": "Allowed IPs", + "colRateLimit": "Rate limit", + "colLastUsed": "Last used", + "colExpires": "Expires", + "colStatus": "Status", + "colActions": "Actions", + "maskedHint": "Only the first 8 characters are shown", + "any": "any", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete" + }, + "pointsForm": { + "title": "Radio Listener Points", + "subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "points": "Points", + "enabled": "Enabled", + "disabled": "Disabled", + "perMinute": "Per minute", + "paidIn": "paid in {currency}", + "maxPerDay": "Max / day", + "unlimited": "Unlimited", + "minListeners": "Min listeners", + "settings": "Settings", + "pointsEnabled": "Points enabled", + "pointsEnabledHint": "Master switch for awarding listener points.", + "currency": "Currency", + "currencyHint": "Which wallet the points are paid into.", + "pointsPerMinute": "Points per minute", + "pointsPerMinuteHint": "Amount awarded for each full minute of listening.", + "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", + "minListenersHint": "Points are only awarded when at least this many people are tuned in.", + "save": "Save points settings", + "saved": "Settings saved." + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.", + "dbError": "Could not load the AutoDJ playlist (database unavailable).", + "tracks": "Tracks", + "active": "Active", + "inactive": "Inactive", + "addTrack": "Add track", + "trackTitle": "Title", + "titlePlaceholder": "Track title", + "artist": "Artist", + "album": "Album", + "artworkUrl": "Artwork URL", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Duration (seconds)", + "durationPlaceholder": "e.g. 215", + "sortOrder": "Sort order", + "playlist": "Playlist ({count})", + "noTracks": "No AutoDJ tracks yet — add one above.", + "colOrder": "Order", + "colTitle": "Title", + "colArtist": "Artist", + "colAlbum": "Album", + "colDuration": "Duration", + "colPlays": "Plays", + "colLastPlayed": "Last played", + "colStatus": "Status", + "colActions": "Actions", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete" + }, + "monitoring": { + "title": "Radio Monitoring", + "subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.", + "stream": "Stream", + "online": "Online", + "offline": "Offline", + "notConfigured": "Not configured", + "nowPlaying": "Now playing", + "nowPlayingApi": "Now-playing API", + "listenersApi": "Listeners API", + "listeners": "Listeners", + "currentSong": "Current song", + "bitrate": "Bitrate", + "status": "Status", + "noNowPlayingHint": "no now-playing API set", + "noListenersHint": "no listeners API set", + "endpointDiagnostics": "Endpoint diagnostics", + "diagnosticsLegend": "OK: reachable · WARN: not configured · ERROR: request failed or timed out.", + "streamUrl": "Stream URL", + "unreachable": "unreachable", + "refresh": "Refresh" + }, + "moderationPage": { + "title": "DJ Moderation", + "subtitle": "Review and remove radio shouts (50 most recent).", + "recentShouts": "Recent Shouts ({count})" + } + }, + "commandocentrum": { + "title": "Commandocentrum", + "subtitle": "Diagnostics, RCON controls and user management", + "diagnostics": "Diagnostics", + "rcon": "RCON", + "userActions": "User actions", + "diagnosticsTitle": "Emulator diagnostics", + "memoryUsage": "Memory usage", + "uptime": "Uptime", + "onlineUsers": "Online users", + "roomsLoaded": "Rooms loaded", + "refresh": "Refresh", + "rconTitle": "RCON commands", + "rconPlaceholder": "Enter RCON command…", + "rconSend": "Send", + "rconSending": "Sending…", + "rconResponse": "Response", + "userActionsTitle": "User actions", + "username": "Username", + "usernamePlaceholder": "Target username", + "action": "Action", + "execute": "Execute", + "actions": { + "disconnect": "Disconnect", + "alert": "Send alert", + "giveCredits": "Give credits", + "giveBadge": "Give badge", + "givePoints": "Give points", + "ban": "Ban", + "kick": "Kick" + }, + "messagePlaceholder": "Message (for alerts)…", + "amountPlaceholder": "Amount…", + "badgePlaceholder": "Badge code…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Emulator Config", + "subtitle": "View and edit emulator settings and locale texts", + "settings": "Settings", + "texts": "Texts", + "search": "Search", + "searchPlaceholder": "Search keys…", + "noSettings": "No settings found", + "noTexts": "No texts found", + "edit": "Edit", + "save": "Save", + "saving": "Saving…", + "cancel": "Cancel", + "colKey": "Key", + "colValue": "Value", + "colType": "Type", + "colActions": "Actions", + "editDialog": { + "title": "Edit: {key}", + "value": "Value", + "valuePlaceholder": "Enter value…", + "save": "Save changes", + "cancel": "Cancel" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Alerts", + "subtitle": "Send hotel-wide alerts and view recent ops alerts", + "sendAlert": "Send hotel alert", + "recentAlerts": "Recent alerts ({count})", + "noAlerts": "No recent alerts", + "noRecentAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "form": { + "title": "Alert title", + "titlePlaceholder": "e.g. Server maintenance in 10 minutes", + "message": "Alert message", + "messagePlaceholder": "Write the alert message…", + "description": "Broadcasts via RCON 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" + }, + "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" + } + }, + "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" + }, + "media": { + "title": "Media Library", + "subtitle": "Upload and manage media files", + "upload": "Upload", + "uploadTitle": "Upload a file", + "uploadSubtitle": "Drag and drop or click to upload", + "uploadButton": "Choose file", + "uploading": "Uploading…", + "noFiles": "No media files yet", + "delete": "Delete", + "confirmDelete": "Delete this file permanently?", + "search": "Search", + "searchPlaceholder": "Search by filename…", + "colPreview": "Preview", + "colName": "Name", + "colSize": "Size", + "colType": "Type", + "colUploaded": "Uploaded", + "colActions": "Actions", + "copyUrl": "Copy URL", + "urlCopied": "URL copied to clipboard" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Upload and manage the site favicon", + "current": "Current favicon", + "uploadLabel": "Upload favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.", + "upload": "Upload", + "uploading": "Uploading…", + "delete": "Remove", + "deleting": "Removing…", + "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": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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." + } + }, + "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." + } + }, + "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" + }, + "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." + } + }, + "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}" + }, + "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": "Sign in", + "subtitle": "Welcome back — log in to enter the hotel.", + "subtitle2fa": "Enter the 6-digit code from your authenticator.", + "welcomeBack": "Welcome back", + "welcomeBackSub": "Sign in to continue to {hotelName}", + "usernamePlaceholder": "Username", + "passwordPlaceholder": "Password", + "codePlaceholder": "2FA code", + "pleaseWait": "Please wait…", + "verify": "Verify", + "signIn": "Sign in", + "or": "or", + "noAccount": "No account?", + "createOne": "Create one", + "forgotPassword": "Forgot password?", + "errorInvalidCredentials": "Invalid username or password", + "errorInvalid2fa": "Invalid 2FA code", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Create account", + "subtitle": "Join the hotel — it only takes a moment.", + "username": "Username", + "email": "Email", + "password": "Password", + "confirmPassword": "Repeat password", + "usernamePlaceholder": "Username", + "emailPlaceholder": "Email", + "passwordPlaceholder": "Password (min 8 chars)", + "confirmPasswordPlaceholder": "Repeat password", + "selectOutfit": "Select your outfit", + "termsAccept": "I am 18+ and accept the {hotel} terms & rules.", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security", + "createAccount": "Create account", + "creatingAccount": "Creating account...", + "redirecting": "Redirecting to your account...", + "alreadyHaveAccount": "Already have an account? Login!", + "alreadyHaveAccountPre": "Already have an account?", + "alreadyHaveAccountLink": "Sign in", + "register": "Register", + "whoIsOnline": "Who's online", + "usersOnline": "{count} online", + "termsError": "You must accept the terms & rules to register.", + "usernameError": "Username is required.", + "emailError": "Valid email is required.", + "passwordError": "Password must be at least 6 characters.", + "confirmPasswordError": "Passwords do not match.", + "termsRequired": "You must accept the terms & rules.", + "usernameRequired": "Username is required.", + "emailRequired": "Email is required.", + "passwordRequired": "Password is required.", + "passwordsDontMatch": "Passwords do not match." + }, + "forgot": { + "title": "Reset password", + "subtitle": "We'll email you a secure link to set a new password.", + "sentNotice": "If that email is registered, a reset link has been sent. Check your inbox.", + "emailPlaceholder": "Your email", + "sendResetLink": "Send reset link", + "backToLogin": "Back to login", + "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 6 chars)", + "resetPassword": "Reset password", + "backToLogin": "Back to login" + }, + "verify": { + "verifiedTitle": "You're all set", + "verifiedSubtitle": "Email verified", + "verifiedBody": "Your email address has been verified. You can now log in and play.", + "goToLogin": "Go to login", + "alreadyTitle": "Already verified", + "alreadySubtitle": "Nothing left to do", + "alreadyBody": "This email address has already been confirmed.", + "unavailableTitle": "Try again shortly", + "unavailableSubtitle": "Server unreachable", + "unavailableBody": "We couldn't reach the server to verify your email. Please retry the link in a moment.", + "invalidTitle": "Email verification", + "invalidSubtitle": "Invalid or expired link", + "invalidBody": "This verification link is not valid. Make sure you opened the full link from your email, or request a new one.", + "backToLogin": "Back to login" + }, + "banned": { + "title": "You are banned", + "subtitle": "Account suspended", + "body": "Your account has been suspended from the hotel.", + "reasonLabel": "Reason:", + "permanent": "This ban is permanent.", + "expires": "Expires {date}.", + "contactStaff": "If you believe this is a mistake, contact the staff team." + }, + "maintenance": { + "title": "{hotel} is under maintenance", + "subtitle": "We'll be back shortly", + "staffCanLogIn": "Staff can still log in." + }, + "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" + }, + "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" + } + }, + "toolbar": { + "home": "Koti", + "reload": "Lataa uudelleen", + "fullscreen": "Koko näyttö", + "logout": "Kirjaudu ulos", + "onlineUsers": "Käyttäjät verkossa", + "emulatorOnline": "Emulaattori verkossa", + "emulatorOffline": "Emulaattori ei verkossa", + "dragToMove": "Vedä liikuttaaksesi", + "hide": "Piilota työkalupalkki", + "fullscreenExit": "Lopeta koko näyttö", + "show": "Näytä työkalupalkki", + "emulatorUnknown": "Emulaattorin tila tuntematon" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Tiedostojen diagnostiikka", + "preliminary": "Osoitteiden alustava tarkistus; sisältö tarkistetaan tuonnissa.", + "http": "HTTP {status}", + "network": "Yhteys epäonnistui", + "timeout": "Lähde ei vastannut ajoissa", + "invalidResponse": "Lähde palautti verkkosivun tiedoston sijaan", + "available": "Tiedosto löytyi; odottaa tarkistusta", + "recover": "Liitä alkuperäinen ja jatka", + "recoveryHint": "Valitse {file} (enintään 50 MB). Sen tunniste tarkistetaan. Epäonnistuneet kohteet yritetään uudelleen; valmiit tuonnit säilytetään.", + "attach": "Valitse alkuperäinen .nitro-tiedosto", + "working": "Tarkistetaan tai jatketaan...", + "attached": "Vastaava tiedosto liitetty", + "resume": "Jatka epäonnistuneita tuonteja tällä tiedostolla", + "invalidFile": "Valitse vastaava alkuperäinen .nitro, enintään 50 MB, ja yritä uudelleen.", + "resumeError": "Päivitä historia ja käytä uusinta yritystä; tarkista tiedosto ja yritä uudelleen.", + "mismatchedFile": "Tämä tiedosto kuuluu toiselle huonekalulle.", + "alreadyStarted": "Palautus on jo alkanut. Päivitä historia ja käytä uusinta yritystä.", + "notEligible": "Tätä kohdetta ei voi palauttaa liitteellä." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/fr.json b/src/messages/fr.json index a5e5da2f..365ba457 100644 --- a/src/messages/fr.json +++ b/src/messages/fr.json @@ -1,3919 +1,4913 @@ { - "draftRecovery": { - "ready": "Une copie de récupération sera conservée dans ce navigateur pendant 7 jours.", - "saved": "Une copie de récupération a été enregistrée dans ce navigateur pour 7 jours.", - "unavailable": "La récupération dans le navigateur est indisponible. Garde cette page ouverte jusqu’à l’enregistrement de tes modifications.", - "found": "Une copie de récupération est disponible dans ce navigateur, enregistrée le", - "restore": "Restaurer la copie du navigateur", - "discard": "Supprimer la copie du navigateur", - "confirmRestore": "Remplacer le formulaire actuel par la copie de récupération du navigateur ? Vérifie le contenu avant d’enregistrer.", - "confirmDiscard": "Supprimer cette copie de récupération du navigateur ? Le formulaire actuel restera inchangé." - }, - "nav": { - "home": "Accueil", - "community": "Communauté", - "articles": "Articles", - "photos": "Photos", - "staff": "Équipe", - "rankings": "Classements", - "guilds": "Groupes", - "leaderboards": "Meilleurs scores", - "rareValues": "Valeurs rares", - "shop": "Boutique", - "market": "Marché", - "assistance": "Assistance", - "helpCenter": "Centre d'aide", - "myTickets": "Mes tickets", - "badges": "Badges", - "radio": "Radio", - "friends": "Amis", - "messages": "Messages", - "admin": "Admin", - "openMenu": "Open menu", - "closeMenu": "Close menu", - "drawBadge": "Dessiner un badge", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} en ligne", - "nitroClient": "Client Nitro", - "tagline": "Un monde virtuel en ligne où vous pouvez créer votre propre avatar, vous faire des amis, discuter, créer des salons et bien plus encore !", - "login": "Connexion", - "or": "Ou", - "createAccount": "Créer un compte" - }, - "footer": { - "copyright": "© {year} - {hotel} est un projet éducatif à but non lucratif" - }, - "pages": { - "staff": { - "title": "Équipe", - "subtitle": "L'équipe derrière l'hôtel", - "ranksTitle": "Rangs", - "ranksSubtitle": "Ce dont chaque membre de l'équipe s'occupe", - "membersTitle": "Membres de l'équipe", - "membersEmptySubtitle": "Personne à afficher pour le moment", - "membersSubtitle": "{count, plural, one {# membre qui fait tourner les choses} other {# membres qui font tourner les choses}}", - "emptyState": "Aucun membre du personnel à afficher.", - "colUsername": "Nom d'utilisateur", - "colRank": "Rang", - "colMotto": "Devise" - }, - "leaderboard": { - "title": "Classement", - "subtitle": "Top 20 des joueurs par {currency}", - "tab_credits": "Crédits", - "tab_diamonds": "Diamants", - "tab_duckets": "Duckets", - "tab_achievement": "Succès", - "tab_respects": "Respects", - "tab_onlinetime": "Temps en ligne", - "emptyState": "Aucun classement à afficher pour le moment.", - "colAvatar": "Avatar", - "colPlayer": "Joueur" - }, - "friends": { - "title": "Amis", - "emptySubtitle": "Vous n'avez encore aucun ami ajouté", - "subtitle": "{count, plural, one {Vous avez # ami} other {Vous avez # amis}}", - "emptyState": "Ajoutez des amis dans l'hôtel et ils apparaîtront ici.", - "noMotto": "Aucune devise", - "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": "Demandes d'amis et messages hors ligne qui vous attendent", - "requestsTitle": "Demandes d'amis", - "requestsEmptySubtitle": "Personne n'a encore demandé à être votre ami", - "requestsSubtitle": "{count, plural, one {# demande en attente} other {# demandes en attente}}", - "requestsEmptyState": "Aucune demande d'ami en attente.", - "wantsToBeFriend": "veut être votre ami.", - "accept": "Accepter", - "offlineTitle": "Messages hors ligne", - "offlineEmptySubtitle": "Votre boîte de réception est vide", - "offlineSubtitle": "{count, plural, one {# message reçu} other {# messages reçus}}", - "offlineEmptyState": "Vous n'avez aucun message hors ligne.", - "unknownUser": "Utilisateur #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Aucune devise", - "statRank": "Rang", - "statCredits": "Crédits", - "statRegistered": "Inscrit", - "badgesTitle": "Badges", - "badgesEmpty": "Pas encore de badges.", - "photosTitle": "Photos", - "photosEmpty": "Pas encore de photos.", - "guestbookTitle": "Livre d'or", - "guestbookSubtitle": "Messages sur le mur de {username}", - "leaveMessage": "Laisser un message", - "guestbookPlaceholder": "Écrivez quelque chose sur le livre d'or de {username}…", - "post": "Publier", - "loginToPost": "Connectez-vous pour laisser un message dans le livre d'or.", - "guestbookEmpty": "Pas encore d'entrées dans le livre d'or.", - "unknownUser": "Utilisateur #{id}", - "statDuckets": "Duckets", - "statDiamonds": "Diamants", - "walletTitle": "Portefeuille", - "friendsTitle": "Amis", - "friendsSubtitle": "Les personnes de l'hôtel avec qui il/elle traîne", - "friendsEmpty": "Aucun ami à afficher.", - "roomsTitle": "Salons", - "roomsSubtitle": "Salons qu'il/elle possède", - "roomsEmpty": "Aucun salon à afficher.", - "roomUntitled": "Salon sans titre", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Classements", - "subtitle": "Les 12 meilleurs joueurs classés par crédits", - "emptyState": "Aucun joueur à classer pour le moment." - }, - "home": { - "welcome": "Bienvenue sur {hotelName}", - "welcomeSubtitle": "Votre hôtel rétro, désormais propulsé par Next.js", - "welcomeBody": "Traînez, collectionnez des meubles et rencontrez des amis.", - "enterHotel": "Entrer dans {hotelName}", - "onlineFriends": "Amis en ligne", - "noFriendsOnline": "Aucun ami en ligne", - "register": "S'INSCRIRE MAINTENANT", - "joinNow": "Rejoignez {hotelName} dès aujourd'hui !", - "recentUsers": "Utilisateurs récents", - "recentPhotos": "Photos récentes", - "latestNews": "Dernières actualités", - "newsTitle": "Dernières actualités", - "newsSubtitle": "Fraîchement sorties de l'hôtel", - "allNews": "Toutes les actualités →", - "allUsers": "Communauté →", - "noArticles": "Pas encore d'articles.", - "noPhotos": "Pas encore de photos.", - "noUsers": "Aucun utilisateur en ligne", - "latestArticle": "Dernier article", - "latestUsers": "Nouveaux citoyens ({count} total)", - "statsOnline": "En ligne", - "statsCitizens": "Citoyens", - "statsRooms": "Salons", - "statsArticles": "Articles", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Crée ton look unique", - "featuresFurniture": "Meubles", - "featuresFurnitureDesc": "Décore les salons avec des objets", - "featuresCommunity": "Communauté", - "featuresCommunityDesc": "Fais des amis et discute", - "featuresGames": "Jeux", - "featuresGamesDesc": "Compète et amuse-toi" - }, - "news": { - "title": "Actualités", - "subtitle": "Les dernières annonces, événements et mises à jour de l'hôtel", - "noArticles": "Pas encore d'articles." - }, - "article": { - "backToNews": "← Actualités", - "reactionsTitle": "Réactions", - "reactionsSubtitle": "Dites-nous ce que vous en pensez", - "reaction": { - "like": "J'aime", - "love": "J'adore", - "wow": "Waouh" - }, - "removeReaction": "Cliquez pour retirer votre réaction", - "reactWith": "Réagir avec {reaction}", - "noReactions": "Pas encore de réactions.", - "logIn": "Connectez-vous", - "toReact": "pour réagir.", - "commentsTitle": "Commentaires", - "commentsSubtitle": "Participez à la conversation", - "commentsCount": "{count} jusqu'à présent", - "noComments": "Pas encore de commentaires. Soyez le premier à commenter.", - "userNumber": "Utilisateur #{id}", - "addComment": "Ajouter un commentaire", - "commentPlaceholder": "Écrivez votre commentaire…", - "postComment": "Publier le commentaire", - "toComment": "pour laisser un commentaire.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Photos", - "subtitle": "Les dernières captures d'écran prises dans l'hôtel", - "noPhotos": "Pas encore de photos.", - "photoAlt": "Photo de l'utilisateur #{id}", - "byUser": "par l'utilisateur #{id}" - }, - "badges": { - "title": "Badges", - "subtitle": "Les badges que vous pouvez gagner et afficher dans l'hôtel", - "noBadges": "Aucun badge disponible pour le moment." - }, - "community": { - "title": "Communauté", - "subtitle": "Tout ce qui se passe dans l'hôtel en un seul endroit", - "open": "Ouvrir →", - "links": { - "rankings": { - "title": "Classements", - "text": "Voir les joueurs les plus riches de l'hôtel, classés par crédits." - }, - "staff": { - "title": "Équipe", - "text": "Rencontrez l'équipe qui fait tourner l'hôtel chaque jour." - }, - "news": { - "title": "Actualités", - "text": "Les dernières annonces, événements et mises à jour." - }, - "photos": { - "title": "Photos", - "text": "Les captures d'écran partagées par la communauté dans tout l'hôtel." - }, - "guilds": { - "title": "Groupes", - "text": "Parcourez les groupes que les joueurs ont créés et rejoints." - }, - "leaderboards": { - "title": "Meilleurs scores", - "text": "Qui est en tête cette saison dans les statistiques de l'hôtel." - } - } - }, - "guilds": { - "title": "Groupes", - "subtitle": "Parcourez les groupes que les joueurs ont créés et rejoints", - "empty": "Pas encore de groupes.", - "unnamedGuild": "Groupe sans nom", - "noDescription": "Aucune description" - }, - "guild": { - "allGuilds": "← Tous les groupes", - "unnamedGuild": "Groupe sans nom", - "noDescription": "Aucune description", - "memberSingular": "Membre", - "memberPlural": "Membres", - "founded": "Fondé", - "forumLink": "Forum →", - "discussion": "Discussion", - "membersTitle": "Membres", - "memberLowerSingular": "membre", - "memberLowerPlural": "membres", - "noMembers": "Aucun membre.", - "owner": "Propriétaire", - "noMotto": "Aucune devise" - }, - "guildForum": { - "backToGuild": "← Retour au groupe", - "unnamedGuild": "Groupe sans nom", - "forumTitle": "{guild} — Forum", - "threadSingular": "sujet", - "threadPlural": "sujets", - "newThread": "+ Nouveau sujet", - "empty": "Aucun sujet dans ce forum pour le moment.", - "colSubject": "Sujet", - "colAuthor": "Auteur", - "colPosts": "Messages", - "colDate": "Date", - "noSubject": "(sans sujet)", - "pinned": "Épinglé", - "locked": "Verrouillé", - "userNumber": "Utilisateur #{id}", - "unknown": "Inconnu", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Retour au forum", - "unnamedGuild": "Groupe sans nom", - "title": "Nouveau sujet", - "subtitle": "dans le forum {guild}", - "subjectLabel": "Sujet", - "subjectPlaceholder": "Sujet du fil", - "messageLabel": "Message", - "messagePlaceholder": "Écrivez votre premier message…", - "postThread": "Publier le sujet", - "cancel": "Annuler", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Boutique", - "subtitle": "Rechargez votre compte et obtenez des packs exclusifs, de la monnaie et des badges.", - "browsingCategory": "Parcourir les packs {category}.", - "all": "Tout", - "allPackages": "Tous les packs", - "packagesAvailable": "{count, plural, one {# pack disponible} other {# packs disponibles}}", - "empty": "Aucun pack disponible pour le moment.", - "buy": "Acheter", - "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": "Recharger avec PayPal", - "subtitle": "Payez en toute sécurité avec PayPal et vos crédits sont ajoutés dès que le paiement est confirmé.", - "cancelled": "Le paiement a été annulé — aucun montant n'a été prélevé.", - "chooseAmount": "Choisissez un montant", - "notConfiguredPre": "PayPal n'est pas encore configuré. Un administrateur doit définir", - "notConfiguredAnd": "et", - "notConfiguredOptional": "(et éventuellement", - "notConfiguredPost": "pour le bac à sable ou le mode réel).", - "balanceTitle": "Votre solde", - "signedInAs": "Connecté en tant que {username}", - "credits": "Crédits", - "creditsPerUnit": "Crédits pour 1,00 {currency}", - "rateLine": "Vous recevez {amount} crédits pour 1,00 {currency}. Les crédits apparaissent dans le jeu la prochaine fois que vous vous connectez." - }, - "marketplace": { - "title": "Marché", - "subtitle": "Parcourez les meubles et les rares listés par les joueurs. Les annonces sont placées dans le jeu et mises à jour en direct — rendez-vous dans l'hôtel pour faire une offre.", - "activeOffers": "Offres actives", - "sellers": "Vendeurs", - "totalValue": "Valeur totale", - "activeListings": "Annonces actives", - "mostRecentFirst": "Les plus récentes en premier", - "empty": "Il n'y a aucune offre active sur le marché pour le moment. Revenez plus tard.", - "colOffer": "Offre", - "colItem": "Objet", - "colSeller": "Vendeur", - "colPrice": "Prix", - "colListed": "Publié", - "itemLabel": "Objet #{id}", - "userLabel": "Utilisateur #{id}", - "justNow": "à l'instant", - "minutesAgo": "il y a {count}m", - "hoursAgo": "il y a {count}h", - "daysAgo": "il y a {count}j" - }, - "rares": { - "title": "Valeurs rares", - "subtitle": "Obtenez un aperçu de tous les rares de l'hôtel, regroupés par catégorie.", - "empty": "Nous n'avons actuellement aucun rare répertorié ici.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Voir les rares →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare dans cette catégorie} other {# rares dans cette catégorie}}", - "allRares": "← Tous les rares", - "empty": "Aucun rare répertorié dans cette catégorie pour le moment.", - "colRare": "Rare", - "colCredits": "Crédits", - "colCurrency": "Monnaie", - "creditsValue": "{value} crédits", - "duckets": "Duckets", - "diamonds": "Diamants", - "credits": "Crédits" - }, - "redeem": { - "title": "Échanger un bon", - "subtitle": "Vous avez un code de bon ? Saisissez-le ci-dessous pour ajouter la récompense à votre compte.", - "enterCode": "Entrez votre code", - "oncePerAccount": "Chaque bon ne peut être échangé qu'une seule fois par compte.", - "balanceTitle": "Votre solde", - "signedInAs": "Connecté en tant que {username}", - "credits": "Crédits", - "instantCredit": "Les récompenses échangées sont créditées instantanément et apparaissent dans le jeu la prochaine fois que vous vous connectez." - }, - "help": { - "title": "Centre d'aide", - "subtitle": "Trouvez des guides, des sujets d'assistance et les règles de l'hôtel — tout ce dont vous avez besoin pour obtenir de l'aide.", - "myTickets": "Mes tickets →", - "topicsTitle": "Sujets d'assistance", - "topicsSubtitle": "Parcourez les guides et les réponses aux questions courantes", - "topicsEmpty": "Pas encore de sujets d'aide.", - "rulesTitle": "Règles de l'hôtel", - "rulesSubtitle": "Veuillez les lire avant de traîner dans l'hôtel", - "rulesEmpty": "Aucune règle publiée pour le moment.", - "categoryEmpty": "Aucune règle dans cette catégorie." - }, - "helpCategory": { - "back": "← Centre d'aide", - "topicSubtitle": "Sujet du centre d'aide", - "moreTitle": "Plus de sujets d'aide", - "moreSubtitle": "Aller à un autre sujet d'assistance" - }, - "helpTickets": { - "title": "Tickets d'aide", - "subtitle": "Soumettez un ticket au personnel et suivez vos demandes en cours.", - "statTotal": "Total des tickets", - "statOpen": "Ouverts", - "statClosed": "Fermés", - "newTitle": "Nouveau ticket", - "newSubtitle": "Décrivez votre problème et le personnel vous répondra", - "subjectPlaceholder": "Sujet", - "contentPlaceholder": "Décrivez votre problème…", - "submit": "Soumettre le ticket", - "listTitle": "Vos tickets", - "listSubtitle": "Toutes les demandes que vous avez envoyées au personnel", - "listEmpty": "Vous n'avez pas encore de tickets.", - "colId": "ID", - "colSubject": "Sujet", - "colStatus": "Statut", - "colCreated": "Créé", - "statusOpen": "Ouvert", - "statusClosed": "Fermé", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Postuler pour {hotel}", - "subtitle": "Nous ouvrons des candidatures pour le personnel de temps en temps. Si vous tombez sur un poste dans lequel vous pensez correspondre parfaitement, n'hésitez pas à postuler.", - "noPositionsTitle": "Aucun poste ouvert", - "noPositionsBody": "Il n'y a actuellement aucun poste ouvert. Revenez plus tard pour vérifier si de nouveaux postes sont disponibles. Merci de votre intérêt.", - "noDeadline": "Aucune date limite fixée", - "deadline": "Date limite de candidature : {date}", - "alreadyApplied": "Vous avez déjà postulé pour {rank}", - "aboutYou": "À propos de vous", - "aboutPlaceholder": "Dites-nous pourquoi vous seriez un excellent {rank}…", - "applyFor": "Postuler pour {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": "Postuler pour rejoindre l'équipe {hotel}", - "subtitle": "Nous ouvrons les candidatures pour l'équipe périodiquement. Si vous voyez une équipe qui vous correspond, n'hésitez pas à postuler !", - "noPositionsTitle": "Aucun poste dans l'équipe ouvert", - "noPositionsBody": "Il n'y a actuellement aucun poste ouvert dans l'équipe. Revenez plus tard pour vérifier les nouvelles offres. Merci !", - "pending": "Votre candidature est en attente", - "aboutYou": "À propos de vous", - "aboutPlaceholder": "Dites-nous pourquoi vous seriez un excellent choix pour {rank}…", - "applyFor": "Postuler pour {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": "Écoutez la radio de l'hôtel — sessions live de DJ, demandes et dédicaces.", - "nowPlaying": "En cours de lecture", - "nothingPlaying": "Rien ne joue pour le moment.", - "onAir": "À l'antenne : {dj}", - "noDj": "Aucun DJ à l'antenne.", - "audioUnsupported": "Votre navigateur ne prend pas en charge l'élément audio.", - "streamOffline": "Le flux est actuellement hors ligne.", - "exploreTitle": "Explorer la radio", - "exploreSubtitle": "Programmation, dédicaces, demandes et plus", - "linkSchedule": "Programmation", - "linkScheduleText": "Notre programme hebdomadaire de DJ et d'émissions.", - "linkShouts": "Dédicaces", - "linkShoutsText": "Dédicaces et demandes de la communauté.", - "linkRequests": "Demandes", - "linkRequestsText": "Demandez au DJ de passer votre morceau préféré.", - "linkApply": "Postuler comme DJ", - "linkApplyText": "Rejoignez l'équipe et prenez le micro.", - "linkLeaderboard": "Classement", - "linkLeaderboardText": "Meilleurs auditeurs classés par points gagnés.", - "todayTitle": "Programmation du jour", - "todayTitleWithDay": "Programmation du jour · {day}", - "todaySubtitle": "Ce qui passe à l'antenne aujourd'hui", - "fullWeek": "Toute la semaine →", - "noShowsToday": "Aucune émission prévue aujourd'hui.", - "colTime": "Horaire", - "colShow": "Émission", - "colDj": "DJ", - "untitledShow": "Émission sans titre", - "userNumber": "Utilisateur #{id}" - }, - "radioSchedule": { - "title": "Programmation radio", - "subtitle": "Notre programme hebdomadaire de DJ et d'émissions", - "empty": "Aucune émission prévue pour le moment.", - "colDay": "Jour", - "colTime": "Horaire", - "colDj": "DJ", - "colShow": "Émission", - "noShows": "Aucune émission" - }, - "radioShouts": { - "title": "Dédicaces radio", - "subtitle": "Dédicaces et demandes de la communauté", - "postTitle": "Publier une dédicace", - "postSubtitle": "Envoyez un message au DJ à l'antenne", - "messageLabel": "Votre message", - "messagePlaceholder": "Envoyez une dédicace au DJ…", - "shoutButton": "Dédicacer", - "loginToPost": "Connectez-vous pour publier une dédicace.", - "latestTitle": "Dernières dédicaces", - "latestSubtitle": "Les messages les plus récents des auditeurs", - "empty": "Pas encore de dédicaces. Soyez le premier !", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Concours radio", - "subtitle": "Écoutez et participez à nos derniers concours en direct", - "empty": "Pas encore de concours.", - "contestLabel": "Concours #{id}", - "dateUnknown": "Date inconnue" - }, - "radioGiveaways": { - "title": "Concours radio", - "subtitle": "Écoutez pour tenter votre chance dans nos concours radio", - "empty": "Pas encore de concours.", - "giveawayLabel": "Concours #{id}", - "dateUnknown": "Date inconnue" - }, - "radioLeaderboard": { - "title": "Classement des auditeurs radio", - "subtitle": "Top 50 des auditeurs par points gagnés à l'écoute de la radio", - "empty": "Aucun point d'auditeur à afficher pour le moment.", - "colRank": "Rang", - "colAvatar": "Avatar", - "colListener": "Auditeur", - "colPoints": "Points" - }, - "radioApply": { - "title": "Postuler pour devenir DJ radio", - "subtitle": "Parlez-nous de vous et pourquoi vous seriez parfait pour l'antenne", - "latestTitle": "Votre dernière candidature", - "statusLabel": "Statut :", - "submittedOn": "· soumise le {date}", - "submitAgain": "Vous pouvez soumettre à nouveau ci-dessous si vos informations ont changé.", - "formTitle": "Formulaire de candidature", - "formSubtitle": "Tous les champs marqués comme requis doivent être remplis", - "realNameLabel": "Nom réel", - "realNamePlaceholder": "Votre nom complet", - "ageLabel": "Âge", - "availabilityLabel": "Disponibilité", - "availabilityPlaceholder": "Quels jours et à quelles heures pouvez-vous diffuser ?", - "musicStyleLabel": "Style de musique", - "musicStylePlaceholder": "ex. House, Pop, Hip-Hop", - "experienceLabel": "Expérience", - "optional": "(facultatif)", - "experiencePlaceholder": "Une expérience préalable en tant que DJ ou animateur ?", - "motivationLabel": "Motivation", - "motivationPlaceholder": "Pourquoi voulez-vous rejoindre l'équipe radio ?", - "submitButton": "Soumettre la candidature", - "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": "Paramètres du compte", - "accountSettingsSubtitle": "Gérez votre profil, votre sécurité et vos comptes connectés", - "publicProfile": "Votre profil public", - "noMotto": "Aucune devise", - "noEmail": "Aucun e-mail enregistré", - "changeMotto": "Changer la devise", - "changeMottoSubtitle": "Se met à jour instantanément dans le jeu si vous êtes en ligne", - "mottoPlaceholder": "Votre devise", - "saveMotto": "Enregistrer la devise", - "securityTitle": "Sécurité", - "securitySubtitle": "Authentification à deux facteurs", - "securityDescription": "Ajoutez une deuxième couche de protection à votre compte.", - "twoFactorLink": "Authentification à deux facteurs" - }, - "settings2fa": { - "backToSettings": "← Paramètres", - "title": "Authentification à deux facteurs", - "subtitle": "Ajoutez une deuxième couche de sécurité avec une application d'authentification", - "nowEnabled": "L'A2F est maintenant activée. 🔒", - "disabledNotice": "L'A2F a été désactivée.", - "badCode": "Ce code n'était pas valide — réessayez.", - "noAppKeyPrefix": "L'A2F est indisponible tant que", - "noAppKeyMiddle": "n'est pas configuré (la même clé Laravel", - "noAppKeySuffix": "que votre installation AtomCMS, pour que les secrets existants restent lisibles).", - "isEnabled": "L'A2F est activée", - "onYourAccount": "sur votre compte.", - "disable": "Désactiver l'A2F", - "scanOrEnter": "Scannez ou saisissez cette clé", - "scanInstructions": "Ajoutez-la à Google Authenticator / Authy, puis saisissez le code à 6 chiffres pour confirmer.", - "manualKey": "Clé manuelle :", - "codePlaceholder": "Code à 6 chiffres", - "confirm": "Confirmer", - "enableIntro": "Ajoutez une deuxième couche de sécurité avec une application d'authentification.", - "enable": "Activer l'A2F" - }, - "title": "Comptes connectés", - "subtitle": "Associez un compte social pour vous connecter en un clic", - "connected": "Connecté", - "unavailable": "Indisponible", - "login": { - "title": "Connexion", - "subtitle": "Bon retour — connectez-vous pour entrer dans l'hôtel.", - "subtitle2fa": "Saisissez le code à 6 chiffres de votre application d'authentification.", - "usernamePlaceholder": "Nom d'utilisateur", - "passwordPlaceholder": "Mot de passe", - "codePlaceholder": "Code A2F", - "pleaseWait": "Veuillez patienter…", - "verify": "Vérifier", - "signIn": "Se connecter", - "or": "ou", - "noAccount": "Pas de compte ?", - "createOne": "Créer un compte", - "forgotPassword": "Mot de passe oublié ?", - "errorInvalidCredentials": "Nom d'utilisateur ou mot de passe invalide", - "errorInvalid2fa": "Code A2F invalide", - "welcomeBack": "Bon retour", - "welcomeBackSub": "Connecte-toi pour continuer vers {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Créer un compte", - "subtitle": "Rejoignez l'hôtel — cela ne prend qu'un instant.", - "username": "Nom d'utilisateur", - "email": "E-mail", - "password": "Mot de passe", - "confirmPassword": "Répéter le mot de passe", - "usernamePlaceholder": "Nom d'utilisateur", - "emailPlaceholder": "E-mail", - "passwordPlaceholder": "Mot de passe (min 6 car.)", - "confirmPasswordPlaceholder": "Répéter le mot de passe", - "selectOutfit": "Sélectionnez votre tenue", - "termsAccept": "J'ai 18 ans ou plus et j'accepte les conditions et règles de {hotel}.", - "createAccount": "Créer un compte", - "creatingAccount": "Création du compte...", - "redirecting": "Redirection vers votre compte...", - "alreadyHaveAccount": "Vous avez déjà un compte ? Connectez-vous !", - "register": "S'inscrire", - "termsError": "Vous devez accepter les conditions et règles pour vous inscrire.", - "usernameError": "Le nom d'utilisateur est requis.", - "emailError": "Un e-mail valide est requis.", - "passwordError": "Le mot de passe doit contenir au moins 6 caractères.", - "confirmPasswordError": "Les mots de passe ne correspondent pas.", - "termsRequired": "Vous devez accepter les conditions et règles.", - "usernameRequired": "Le nom d'utilisateur est requis.", - "emailRequired": "L'e-mail est requis.", - "passwordRequired": "Le mot de passe est requis.", - "passwordsDontMatch": "Les mots de passe ne correspondent pas.", - "alreadyHaveAccountPre": "Tu as déjà un compte ?", - "alreadyHaveAccountLink": "Se connecter", - "whoIsOnline": "Qui est en ligne", - "usersOnline": "{count} en ligne" - }, - "forgot": { - "title": "Réinitialiser le mot de passe", - "subtitle": "Nous vous enverrons par e-mail un lien sécurisé pour définir un nouveau mot de passe.", - "sentNotice": "Si cet e-mail est enregistré, un lien de réinitialisation a été envoyé. Vérifiez votre boîte de réception.", - "emailPlaceholder": "Votre e-mail", - "sendResetLink": "Envoyer le lien de réinitialisation", - "backToLogin": "Retour à la connexion", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Définir un nouveau mot de passe", - "subtitle": "Choisissez un mot de passe fort que vous n'utilisez pas ailleurs.", - "passwordPlaceholder": "Nouveau mot de passe (min 6 car.)", - "resetPassword": "Réinitialiser le mot de passe", - "backToLogin": "Retour à la connexion" - }, - "verify": { - "verifiedTitle": "Tout est prêt", - "verifiedSubtitle": "E-mail vérifié", - "verifiedBody": "Votre adresse e-mail a été vérifiée. Vous pouvez maintenant vous connecter et jouer.", - "goToLogin": "Aller à la connexion", - "alreadyTitle": "Déjà vérifié", - "alreadySubtitle": "Rien à faire", - "alreadyBody": "Cette adresse e-mail a déjà été confirmée.", - "unavailableTitle": "Réessayez dans un instant", - "unavailableSubtitle": "Serveur inaccessible", - "unavailableBody": "Nous n'avons pas pu joindre le serveur pour vérifier votre e-mail. Veuillez réessayer le lien dans un instant.", - "invalidTitle": "Vérification d'e-mail", - "invalidSubtitle": "Lien invalide ou expiré", - "invalidBody": "Ce lien de vérification n'est pas valide. Assurez-vous d'avoir ouvert le lien complet depuis votre e-mail, ou demandez-en un nouveau.", - "backToLogin": "Retour à la connexion" - }, - "banned": { - "title": "Vous êtes banni", - "subtitle": "Compte suspendu", - "body": "Votre compte a été suspendu de l'hôtel.", - "reasonLabel": "Raison :", - "permanent": "Ce bannissement est permanent.", - "expires": "Expire le {date}.", - "contactStaff": "Si vous pensez qu'il s'agit d'une erreur, contactez l'équipe du personnel." - }, - "maintenance": { - "title": "{hotel} est en maintenance", - "subtitle": "Nous serons bientôt de retour", - "staffCanLogIn": "Le personnel peut toujours se connecter." - }, - "admin": { - "nav": { - "overview": "Aperçu", - "dashboard": "Tableau de bord", - "content": "Contenu", - "articles": "Articles", - "tags": "Étiquettes", - "navigator": "Navigateur", - "helpCenter": "Centre d'aide", - "advertisements": "Publicités", - "writeableBoxes": "Boîtes modifiables", - "photos": "Photos", - "tickets": "Tickets", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Utilisateurs & accès", - "users": "Utilisateurs", - "bans": "Bannissements", - "ipManagement": "Gestion IP", - "vpn": "VPN", - "applications": "Candidatures", - "teams": "Équipes", - "permissions": "Permissions", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Économie", - "catalog": "Catalogue", - "shop": "Boutique", - "transactions": "Transactions", - "vouchers": "Bons", - "subscriptions": "Abonnements", - "rareValues": "Valeurs rares", - "badges": "Badges", - "achievements": "Succès", - "calendar": "Calendrier", - "radio": "Radio", - "radioHistory": "Historique radio", - "radioBanners": "Bannières", - "radioEmbed": "Intégration", - "radioApiKeys": "Clés API", - "radioModeration": "Modération", - "radioSettings": "Paramètres", - "radioMonitoring": "Surveillance", - "radioPoints": "Points", - "radioRanks": "Rangs", - "radioAutodj": "Auto DJ", - "system": "Système", - "commandocentrum": "Commandocentrum", - "emulator": "Émulateur", - "alerts": "Alertes", - "logs": "Journaux", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Filtre de mots", - "maintenance": "Maintenance", - "rooms": "Salons", - "emailTemplates": "Modèles d'e-mail", - "theme": "Thème", - "media": "Médias", - "favicon": "Favicon", - "sounds": "Sons", - "translations": "Traductions", - "import": "Importer", - "settings": "Paramètres", - "backToSite": "Retour au site", - "housekeeping": "Gouvernance", - "hotelManagementPanel": "Panneau de gestion de l'hôtel", - "rankLabel": "Rang {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Rechercher dans le menu…", - "clearMenuSearch": "Effacer la recherche", - "noMenuResults": "Aucune page trouvée.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "studio": "Studio", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Tableau de bord", - "subtitle": "Aperçu de l'hôtel & statut en direct", - "playersOnline": "Joueurs en ligne", - "articles": "Articles", - "activeBans": "Bannissements actifs", - "database": "Base de données", - "databaseConnected": "Connectée", - "databaseDown": "Indisponible", - "usersByRank": "Utilisateurs par rang", - "noAccountsToBreakDown": "Aucun compte à détailler pour le moment", - "rankLabel": "Rang {rank}", - "rankWithCount": "Rang {rank} : {count} comptes", - "recentStaffActivity": "Activité récente du personnel", - "viewAll": "Voir tout", - "noStaffActivityLogged": "Aucune activité du personnel enregistrée" - }, - "articles": { - "title": "Articles", - "subtitle": "Articles d'actualité — les 50 plus récents", - "newArticle": "+ Nouvel article", - "edit": "Modifier", - "delete": "Supprimer", - "noArticles": "Pas encore d'articles", - "confirmDelete": "Êtes-vous sûr de vouloir supprimer « {title} » ?", - "colTitle": "Titre", - "colSlug": "Slug", - "colAuthor": "Auteur", - "colCreated": "Créé", - "colActions": "Actions", - "form": { - "title": "Titre", - "titlePlaceholder": "Titre de l'article", - "slug": "Slug", - "slugPlaceholder": "slug-url-article", - "category": "Catégorie", - "categoryPlaceholder": "Sélectionnez une catégorie", - "body": "Corps", - "bodyPlaceholder": "Rédigez le contenu de votre article…", - "image": "Image", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Vignette", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Publié", - "featured": "À la une", - "save": "Enregistrer l'article", - "saving": "Enregistrement…", - "deleteArticle": "Supprimer l'article", - "deleteConfirm": "Cette action est irréversible. L'article sera définitivement supprimé.", - "cancel": "Annuler", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Étiquettes", - "subtitle": "Étiquettes d'articles / catégories", - "addTag": "Ajouter une étiquette", - "name": "Nom", - "namePlaceholder": "Nom de l'étiquette", - "backgroundColour": "Couleur de fond", - "createTag": "Créer l'étiquette", - "editTag": "Modifier l'étiquette", - "updateTag": "Mettre à jour l'étiquette", - "deleteTag": "Supprimer l'étiquette", - "confirmDelete": "Supprimer « {name} » ?", - "noTags": "Pas encore d'étiquettes", - "colId": "ID", - "colTag": "Étiquette", - "colColour": "Couleur", - "colUsedBy": "Utilisée par", - "colCreated": "Créé", - "colActions": "Actions" - }, - "navigation": { - "title": "Navigateur", - "flatCategories": "Catégories plates", - "publicRooms": "Salons publics", - "addCategory": "Ajouter une catégorie", - "editCategory": "Modifier la catégorie", - "deleteCategory": "Supprimer la catégorie", - "categoryName": "Nom de la catégorie", - "categoryNamePlaceholder": "ex. Salon & Discussion", - "categoryOrder": "Ordre", - "roomName": "Nom du salon", - "roomNamePlaceholder": "ex. Salon d'accueil", - "roomId": "ID du salon", - "roomIdPlaceholder": "ID numérique du salon", - "save": "Enregistrer", - "cancel": "Annuler", - "noCategories": "Pas encore de catégories", - "noPublicRooms": "Pas encore de salons publics", - "colId": "ID", - "colName": "Nom", - "colOrder": "Ordre", - "colRooms": "Salons", - "colActions": "Actions" - }, - "helpCenter": { - "title": "Centre d'aide", - "subtitle": "Entrées d'assistance et gestion des FAQ", - "entries": "Entrées", - "newEntry": "+ Nouvelle entrée", - "edit": "Modifier", - "delete": "Supprimer", - "noEntries": "Pas encore d'entrées", - "confirmDelete": "Supprimer « {title} » ?", - "colId": "ID", - "colTitle": "Titre", - "colCategory": "Catégorie", - "colCreated": "Créé", - "colActions": "Actions", - "form": { - "title": "Titre", - "titlePlaceholder": "Titre de l'entrée", - "category": "Catégorie", - "categoryPlaceholder": "Sélectionnez une catégorie", - "body": "Corps", - "bodyPlaceholder": "Rédigez la réponse…", - "save": "Enregistrer l'entrée", - "saving": "Enregistrement…", - "deleteEntry": "Supprimer l'entrée", - "cancel": "Annuler" - } - }, - "ads": { - "title": "Publicités", - "subtitle": "Gérer les publicités et bannières promotionnelles de l'hôtel", - "newAd": "+ Nouvelle pub", - "edit": "Modifier", - "delete": "Supprimer", - "noAds": "Pas encore de publicités", - "confirmDelete": "Supprimer cette publicité ?", - "colId": "ID", - "colName": "Nom", - "colImage": "Image", - "colUrl": "URL", - "colViews": "Vues", - "colStatus": "Statut", - "colCreated": "Créé", - "colActions": "Actions", - "form": { - "name": "Nom", - "namePlaceholder": "Nom de la pub", - "image": "URL de l'image", - "imagePlaceholder": "https://example.com/banner.png", - "url": "URL cible", - "urlPlaceholder": "https://example.com", - "enabled": "Activée", - "save": "Enregistrer la pub", - "saving": "Enregistrement…", - "deleteAd": "Supprimer la pub", - "cancel": "Annuler" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Boîtes modifiables", - "subtitle": "Panneaux de contenu affichés dans l'hôtel et le CMS", - "newBox": "Nouvelle boîte", - "edit": "Modifier", - "delete": "Supprimer", - "noBoxes": "Pas encore de boîtes modifiables", - "confirmDelete": "Supprimer cette boîte ?", - "colId": "ID", - "colName": "Nom", - "colLocation": "Emplacement", - "colUpdated": "Mis à jour", - "colActions": "Actions", - "form": { - "name": "Nom", - "namePlaceholder": "Nom de la boîte", - "location": "Emplacement", - "locationPlaceholder": "ex. accueil, sidebar", - "content": "Contenu", - "contentPlaceholder": "Rédigez le contenu de la boîte…", - "enabled": "Activée", - "save": "Enregistrer la boîte", - "saving": "Enregistrement…", - "deleteBox": "Supprimer la boîte", - "cancel": "Annuler" - } - }, - "photos": { - "title": "Modération des photos", - "subtitle": "Photos récentes prises dans le jeu", - "delete": "Supprimer", - "approve": "Approuver", - "noPhotos": "Aucune photo à modérer", - "confirmDelete": "Supprimer cette photo définitivement ?", - "colId": "ID", - "colPreview": "Aperçu", - "colUser": "Utilisateur", - "colRoom": "Salon", - "colTimestamp": "Horodatage", - "colActions": "Actions", - "photoAlt": "Photo utilisateur #{id}", - "byUser": "par {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Utilisateurs", - "subtitle": "Parcourir, rechercher et gérer les comptes de l'hôtel", - "search": "Rechercher", - "searchPlaceholder": "Rechercher par nom d'utilisateur, e-mail ou ID…", - "searchResults": "{count, plural, one {# résultat} other {# résultats}} pour « {query} »", - "noResults": "Aucun utilisateur trouvé", - "colId": "ID", - "colUsername": "Nom d'utilisateur", - "colEmail": "E-mail", - "colRank": "Rang", - "colOnline": "En ligne", - "colRegistered": "Inscrit", - "colLastOnline": "Dernière connexion", - "colActions": "Actions", - "yes": "Oui", - "no": "Non", - "edit": "Modifier", - "setRank": "Définir le rang", - "disconnect": "Déconnecter", - "alert": "Alerte", - "ban": "Bannir", - "detail": { - "title": "Utilisateur : {username}", - "subtitle": "Détails du compte et gestion", - "overview": "Aperçu", - "actions": "Actions", - "username": "Nom d'utilisateur", - "email": "E-mail", - "motto": "Devise", - "rank": "Rang", - "credits": "Crédits", - "duckets": "Duckets", - "diamonds": "Diamants", - "online": "En ligne", - "registered": "Inscrit", - "lastOnline": "Dernière connexion", - "ipAddress": "Adresse IP", - "machineId": "ID machine", - "sendAlert": "Envoyer une alerte", - "sendMessage": "Envoyer un message", - "disconnectUser": "Déconnecter l'utilisateur", - "banUser": "Bannir l'utilisateur", - "resetPassword": "Réinitialiser le mot de passe", - "deleteUser": "Supprimer l'utilisateur", - "confirmDelete": "Êtes-vous sûr de vouloir supprimer {username} ? Cette action est irréversible.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Modifier l'utilisateur : {username}", - "subtitle": "Modifier les détails du compte", - "username": "Nom d'utilisateur", - "usernamePlaceholder": "Nom d'utilisateur", - "email": "E-mail", - "emailPlaceholder": "user@example.com", - "motto": "Devise", - "mottoPlaceholder": "Devise de l'utilisateur", - "rank": "Rang", - "credits": "Crédits", - "duckets": "Duckets", - "diamonds": "Diamants", - "save": "Enregistrer les modifications", - "saving": "Enregistrement…", - "cancel": "Annuler" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Bannissements", - "subtitle": "Gérer les bannissements de compte, IP et machine", - "newBan": "Nouveau bannissement", - "edit": "Modifier", - "delete": "Supprimer", - "noBans": "Pas encore de bannissements", - "confirmDelete": "Supprimer ce bannissement ?", - "colId": "ID", - "colValue": "Valeur", - "colType": "Type", - "colReason": "Raison", - "colBannedBy": "Banni par", - "colExpires": "Expire", - "colCreated": "Créé", - "colActions": "Actions", - "form": { - "value": "Valeur", - "valuePlaceholder": "Nom d'utilisateur, IP ou ID machine", - "type": "Type", - "typeUser": "Utilisateur", - "typeIp": "IP", - "typeMachine": "Machine", - "reason": "Raison", - "reasonPlaceholder": "Motif du bannissement", - "expiresAt": "Expire le", - "permanent": "Permanent", - "save": "Enregistrer le bannissement", - "saving": "Enregistrement…", - "cancel": "Annuler" - } - }, - "ip": { - "title": "Gestion IP", - "subtitle": "Gérer la liste blanche et la liste noire des IP", - "whitelist": "Liste blanche", - "blacklist": "Liste noire", - "addIp": "Ajouter une IP", - "ipAddress": "Adresse IP", - "ipAddressPlaceholder": "ex. 127.0.0.1", - "reason": "Raison", - "reasonPlaceholder": "Motif de l'inscription", - "add": "Ajouter", - "remove": "Retirer", - "confirmRemove": "Retirer cette IP de la {list} ?", - "noWhitelistedIps": "Aucune IP en liste blanche", - "noBlacklistedIps": "Aucune IP en liste noire", - "colIp": "IP", - "colReason": "Raison", - "colAdded": "Ajouté", - "colActions": "Actions" - }, - "vpn": { - "title": "Détection VPN / Proxy", - "subtitle": "Configurer les paramètres de détection VPN et proxy", - "enabled": "Activé", - "apiKey": "Clé API", - "apiKeyPlaceholder": "Votre clé API de détection VPN", - "apiKeyHint": "Laisser vide pour désactiver", - "blockOnDetect": "Bloquer à la détection", - "blockOnDetectHint": "Bloquer automatiquement les utilisateurs détectés derrière un VPN ou proxy", - "save": "Enregistrer les paramètres", - "saving": "Enregistrement…", - "settingsSaved": "Paramètres VPN enregistrés avec succès" - }, - "applications": { - "title": "Candidatures au personnel", - "subtitle": "Candidatures en attente et examinées", - "pending": "En attente", - "approved": "Approuvée", - "rejected": "Rejetée", - "noApplications": "Pas encore de candidatures", - "colId": "ID", - "colApplicant": "Candidat", - "colPosition": "Poste", - "colStatus": "Statut", - "colSubmitted": "Soumise", - "colActions": "Actions", - "review": "Examiner", - "approve": "Approuver", - "reject": "Rejeter", - "confirmApprove": "Approuver {username} pour {position} ?", - "confirmReject": "Rejeter la candidature de {username} pour {position} ?", - "detail": { - "title": "Candidature de {username}", - "subtitle": "Pour {position}", - "about": "À propos du candidat", - "message": "Message de candidature", - "status": "Statut", - "submitted": "Soumise", - "noMessage": "Aucun message fourni" - } - }, - "teams": { - "title": "Équipes", - "subtitle": "Définir les noms et descriptions des rangs du personnel", - "addRank": "Ajouter un rang", - "editRank": "Modifier le rang", - "deleteRank": "Supprimer le rang", - "noTeams": "Pas encore de définitions de rangs", - "confirmDelete": "Supprimer la définition du rang {id} ?", - "colId": "ID", - "colRank": "Rang", - "colName": "Nom", - "colBadge": "Badge", - "colColour": "Couleur", - "colActions": "Actions", - "form": { - "rankId": "ID du rang", - "rankIdPlaceholder": "ID numérique du rang", - "name": "Nom", - "namePlaceholder": "ex. Administrateur", - "badge": "Code du badge", - "badgePlaceholder": "ex. ADM001", - "colour": "Couleur", - "colourPlaceholder": "ex. #ff0000", - "save": "Enregistrer la définition d'équipe", - "saving": "Enregistrement…", - "cancel": "Annuler" - } - }, - "permissions": { - "title": "Permissions", - "subtitle": "Gérer les permissions basées sur les rangs pour le panneau d'administration", - "addPermission": "Ajouter une permission", - "editPermission": "Modifier la permission", - "deletePermission": "Supprimer la permission", - "noPermissions": "Aucune permission configurée pour le moment", - "confirmDelete": "Supprimer cette permission ?", - "colId": "ID", - "colRank": "Rang", - "colPermission": "Permission", - "colCreated": "Créé", - "colActions": "Actions", - "form": { - "rankId": "ID du rang", - "rankIdPlaceholder": "Rang minimum requis", - "permission": "Clé de permission", - "permissionPlaceholder": "ex. admin.articles.manage", - "save": "Enregistrer la permission", - "saving": "Enregistrement…", - "cancel": "Annuler" - } - }, - "catalog": { - "title": "Catalogue", - "subtitle": "Parcourir et gérer les pages et articles du catalogue", - "pages": "Pages", - "items": "Articles", - "addPage": "Ajouter une page", - "editPage": "Modifier la page", - "deletePage": "Supprimer la page", - "addItem": "Ajouter un article", - "editItem": "Modifier l'article", - "deleteItem": "Supprimer l'article", - "noPages": "Pas encore de pages catalogue", - "noItems": "Aucun article sur cette page", - "confirmDeletePage": "Supprimer la page catalogue « {name} » ?", - "confirmDeleteItem": "Supprimer cet article ?", - "colId": "ID", - "colName": "Nom", - "colIcon": "Icône", - "colOrder": "Ordre", - "colItems": "Articles", - "colEnabled": "Activé", - "colActions": "Actions", - "colItemId": "ID article", - "colItemName": "Nom de l'article", - "colCostCredits": "Coût (crédits)", - "colCostPoints": "Coût (points)", - "colLimited": "Limité", - "pageForm": { - "name": "Nom", - "namePlaceholder": "Nom de la page", - "icon": "ID icône", - "iconPlaceholder": "ID numérique de l'icône", - "order": "Ordre", - "enabled": "Activée", - "parent": "Page parente", - "parentNone": "Aucune (racine)", - "save": "Enregistrer la page", - "saving": "Enregistrement…", - "cancel": "Annuler" - }, - "itemForm": { - "itemId": "ID article", - "itemName": "Nom de l'article", - "costCredits": "Coût en crédits", - "costDuckets": "Coût en duckets", - "costDiamonds": "Coût en diamants", - "limitedStack": "Taille du stock limité", - "limitedSold": "Limité vendu", - "save": "Enregistrer l'article", - "saving": "Enregistrement…", - "cancel": "Annuler" - }, - "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." - } - }, - "shop": { - "title": "Boutique", - "subtitle": "Gérer les packs et les commandes", - "packages": "Packs", - "orders": "Commandes", - "newPackage": "+ Nouveau pack", - "edit": "Modifier", - "delete": "Supprimer", - "viewOrder": "Voir", - "noPackages": "Pas encore de packs boutique", - "noOrders": "Pas encore de commandes", - "confirmDelete": "Supprimer ce pack ?", - "colId": "ID", - "colName": "Nom", - "colPrice": "Prix", - "colCurrency": "Devise", - "colType": "Type", - "colSold": "Vendu", - "colEnabled": "Activé", - "colActions": "Actions", - "colOrderId": "ID commande", - "colCustomer": "Client", - "colPackage": "Pack", - "colAmount": "Montant", - "colStatus": "Statut", - "colDate": "Date", - "statusPending": "En attente", - "statusCompleted": "Terminée", - "statusRefunded": "Remboursée", - "form": { - "name": "Nom", - "namePlaceholder": "Nom du pack", - "description": "Description", - "descriptionPlaceholder": "Description du pack", - "price": "Prix", - "currency": "Devise", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Type", - "typeCredits": "Crédits", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamants", - "typeBadge": "Badge", - "typeFurni": "Meuble", - "typeRank": "Rang", - "amount": "Quantité", - "badgeCode": "Code du badge", - "badgeCodePlaceholder": "ex. VIP001", - "rankId": "ID du rang", - "furniItems": "Articles meubles", - "enabled": "Activé", - "save": "Enregistrer le pack", - "saving": "Enregistrement…", - "cancel": "Annuler" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Transactions", - "subtitle": "Journal des paiements PayPal", - "noTransactions": "Pas encore de transactions", - "colId": "ID", - "colUser": "Utilisateur", - "colAmount": "Montant", - "colCurrency": "Devise", - "colPackage": "Pack", - "colStatus": "Statut", - "colDate": "Date", - "colActions": "Actions", - "statusCompleted": "Terminée", - "statusPending": "En attente", - "statusFailed": "Échouée", - "statusRefunded": "Remboursée", - "detail": { - "title": "Transaction #{id}", - "paypalId": "ID PayPal", - "payerEmail": "E-mail du payeur", - "grossAmount": "Montant brut", - "fee": "Frais", - "netAmount": "Montant net" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Bons d'achat", - "subtitle": "Gérer les codes de bons échangeables", - "newVoucher": "+ Nouveau bon", - "edit": "Modifier", - "delete": "Supprimer", - "noVouchers": "Pas encore de bons", - "confirmDelete": "Supprimer le bon « {code} » ?", - "colId": "ID", - "colCode": "Code", - "colValue": "Valeur", - "colType": "Type", - "colUses": "Utilisations / Max", - "colExpires": "Expire", - "colCreated": "Créé", - "colActions": "Actions", - "form": { - "code": "Code", - "codePlaceholder": "ex. ETE2025", - "value": "Valeur", - "type": "Type", - "typeCredits": "Crédits", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamants", - "typeBadge": "Badge", - "typeFurni": "Meuble", - "typeRank": "Rang", - "badgeCode": "Code du badge", - "badgeCodePlaceholder": "ex. VIP001", - "rankId": "ID du rang", - "maxUses": "Utilisations max", - "maxUsesPlaceholder": "0 = illimité", - "expiresAt": "Expire le", - "enabled": "Activé", - "save": "Enregistrer le bon", - "saving": "Enregistrement…", - "cancel": "Annuler", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Abonnements", - "subtitle": "Abonnements récurrents actifs", - "noSubscriptions": "Aucun abonnement actif", - "cancel": "Résilier", - "confirmCancel": "Résilier l'abonnement de {username} ?", - "colId": "ID", - "colUser": "Utilisateur", - "colPackage": "Pack", - "colAmount": "Montant", - "colInterval": "Intervalle", - "colStarted": "Démarré", - "colNextBilling": "Prochaine facturation", - "colStatus": "Statut", - "colActions": "Actions", - "statusActive": "Actif", - "statusCancelled": "Résilié", - "statusExpired": "Expiré" - }, - "rareValues": { - "title": "Valeurs rares", - "subtitle": "Gérer les catégories de valeurs rares et les prix des articles", - "categories": "Catégories", - "items": "Articles", - "addCategory": "Ajouter une catégorie", - "editCategory": "Modifier la catégorie", - "deleteCategory": "Supprimer la catégorie", - "noCategories": "Pas encore de catégories de valeurs rares", - "confirmDeleteCategory": "Supprimer la catégorie « {name} » et tous ses articles ?", - "colId": "ID", - "colName": "Nom", - "colItems": "Articles", - "colUpdated": "Mis à jour", - "colActions": "Actions", - "colItemName": "Nom de l'article", - "colCredits": "Crédits", - "colPoints": "Points", - "colPointType": "Type de points", - "categoryForm": { - "name": "Nom", - "namePlaceholder": "Nom de la catégorie", - "save": "Enregistrer la catégorie", - "saving": "Enregistrement…", - "cancel": "Annuler" - }, - "itemForm": { - "itemName": "Nom de l'article", - "itemNamePlaceholder": "ex. Trône", - "credits": "Valeur en crédits", - "points": "Valeur en points", - "pointType": "Type de points", - "pointTypeDuckets": "Duckets", - "pointTypeDiamonds": "Diamants", - "save": "Enregistrer l'article", - "saving": "Enregistrement…", - "cancel": "Annuler" - } - }, - "badges": { - "title": "Badges", - "subtitle": "Télécharger, attribuer et gérer le catalogue de badges", - "upload": "Télécharger", - "giveBadge": "Attribuer un badge", - "catalogue": "Catalogue", - "uploadTitle": "Télécharger un nouveau badge", - "uploadSubtitle": "Télécharger un fichier image de badge", - "badgeCode": "Code du badge", - "badgeCodePlaceholder": "ex. VIP001", - "badgeFile": "Fichier du badge", - "badgeFileHint": "PNG ou GIF, recommandé 40x40", - "uploadButton": "Choisir un fichier", - "uploading": "Téléchargement…", - "giveTitle": "Attribuer un badge à un utilisateur", - "giveSubtitle": "Accorder un badge à un utilisateur spécifique", - "username": "Nom d'utilisateur", - "usernamePlaceholder": "Nom d'utilisateur cible", - "giveButton": "Attribuer le badge", - "giving": "Attribution…", - "catalogueTitle": "Catalogue des badges", - "catalogueSubtitle": "Tous les badges disponibles dans l'hôtel", - "noBadges": "Aucun badge dans le catalogue", - "search": "Rechercher des badges", - "searchPlaceholder": "Rechercher par code ou nom…", - "colCode": "Code", - "colImage": "Image", - "colName": "Nom", - "colDescription": "Description", - "colActions": "Actions" - }, - "achievements": { - "title": "Succès", - "subtitle": "Lecture seule de la liste des succès du jeu", - "noAchievements": "Aucun succès configuré", - "colId": "ID", - "colName": "Nom", - "colCategory": "Catégorie", - "colLevels": "Niveaux", - "colReward": "Récompense", - "colProgress": "Progression", - "levelLabel": "Niveau {level}", - "rewardCredits": "{count} crédits", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Campagnes du calendrier", - "subtitle": "Lecture seule de la liste des campagnes et événements du calendrier", - "noCampaigns": "Pas encore de campagnes calendrier", - "colId": "ID", - "colName": "Nom", - "colStart": "Début", - "colEnd": "Fin", - "colType": "Type", - "colReward": "Récompense", - "colActions": "Actions", - "detail": { - "title": "Campagne : {name}", - "subtitle": "Détails de l'événement calendrier", - "days": "Jours", - "dayLabel": "Jour {day}", - "reward": "Récompense", - "noDays": "Aucun jour configuré pour cette campagne" - } - }, - "radio": { - "title": "Modération radio", - "subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).", - "moderation": "Moderation", - "shouts": "Dédicaces", - "applications": "Candidatures", - "schedules": "Programmations", - "settings": "Paramètres", - "embed": "Intégration", - "ranks": "Rangs", - "history": "Historique", - "apiKeys": "Clés API", - "points": "Points", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Surveillance radio", - "subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.", - "stream": "Stream", - "online": "En ligne", - "offline": "Hors ligne", - "notConfigured": "Not configured", - "nowPlaying": "Now playing", - "nowPlayingApi": "Now-playing API", - "listenersApi": "Listeners API", - "listeners": "Auditeurs", - "currentSong": "Chanson en cours", - "bitrate": "Débit", - "status": "Statut", - "noNowPlayingHint": "no now-playing API set", - "noListenersHint": "no listeners API set", - "endpointDiagnostics": "Endpoint diagnostics", - "diagnosticsLegend": "OK : accessible · WARN : non configuré · ERROR : échec de la requête ou délai dépassé.", - "streamUrl": "Stream URL", - "unreachable": "unreachable", - "refresh": "Actualiser" - }, - "user": "User", - "message": "Message", - "posted": "Posted", - "realName": "Real Name", - "age": "Age", - "style": "Style", - "applied": "Applied", - "day": "Day", - "start": "Start", - "end": "End", - "show": "Show", - "status": "Statut", - "active": "active", - "inactive": "inactive", - "hidden": "hidden", - "activeSchedules": "Active schedules", - "noShouts": "Aucune dédicace à modérer", - "noApplications": "No applications submitted.", - "noSchedules": "No schedules configured.", - "deleteShout": "Supprimer", - "confirmDeleteShout": "Supprimer cette dédicace ?", - "pendingApplications": "Candidatures en attente", - "settingsForm": { - "title": "Radio Settings", - "subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", - "enabled": "Enabled", - "disabled": "Disabled", - "totalKeys": "Total keys", - "configured": "Configured", - "curatedHint": "curated keys with a value", - "customKeys": "Custom keys", - "saveAll": "Save all", - "singleKey": "Add / overwrite a single key", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "value", - "commentPlaceholder": "comment (optional)", - "saveSingle": "Save", - "otherSettings": "Other radio settings", - "dbError": "Could not load settings (database unavailable). Defaults will be created on save." - }, - "embedPage": { - "title": "Radio Embed", - "subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).", - "streamUrl": "Stream URL", - "configured": "Configured", - "missing": "Missing", - "radioName": "Radio name", - "nowPlayingApi": "Now-playing API", - "set": "Set", - "notSet": "Not set", - "noStreamUrl": "No stream URL configured", - "noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.", - "goToSettings": "Go to Radio Settings", - "livePreview": "Live preview", - "livePreviewText": "This is the bare audio player as visitors will see it. Press play to confirm the stream is reachable.", - "source": "Source", - "audioSnippet": "Audio player snippet", - "audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.", - "iframeSnippet": "Iframe wrapper snippet", - "iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.", - "audioUnsupported": "Your browser does not support the audio element." - }, - "banners": { - "title": "Bannières", - "heading": "Radio Banners", - "description": "Promotional banners shown on the radio page, ordered by sort order.", - "addBanner": "Ajouter une bannière", - "createBanner": "Create banner", - "deleteBanner": "Supprimer la bannière", - "noBanners": "No banners yet — add one above.", - "existing": "Existing banners ({count})", - "save": "Save", - "delete": "Delete", - "byUser": "by user {id}", - "active": "active", - "hidden": "hidden", - "bannerAlt": "Radio banner", - "statusActive": "Active", - "statusHidden": "Hidden", - "dbError": "Could not load banners (database unavailable).", - "form": { - "imagePath": "Image path / URL", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Title", - "description": "Description", - "sortOrder": "Sort order", - "active": "Active" - } - }, - "ranksForm": { - "title": "Rangs radio", - "subtitle": "DJ / staff ranks assignable on radio applications.", - "dbError": "Could not load ranks (database unavailable).", - "active": "Active", - "addRank": "Add rank", - "name": "Name", - "badgeCode": "Badge code", - "description": "Description", - "createRank": "Create rank", - "existing": "Existing ranks ({count})", - "noRanks": "No ranks yet — add one above.", - "activeLabel": "active", - "inactiveLabel": "inactive", - "save": "Save", - "deleteRank": "Delete rank #{id}" - }, - "historyPage": { - "title": "Radio Play History", - "subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.", - "dbError": "Could not load radio history (database unavailable).", - "showsLogged": "Shows logged", - "onAirNow": "On air now", - "uniqueDjs": "Unique DJs", - "peakListeners": "Peak listeners", - "empty": "No radio history recorded yet.", - "showLog": "Show log ({count})", - "colDj": "DJ", - "colShow": "Show", - "colStarted": "Started", - "colEnded": "Ended", - "colAirtime": "Airtime", - "colListeners": "Listeners", - "colNotes": "Notes", - "onAir": "on air" - }, - "apiKeysForm": { - "title": "Clés API", - "subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.", - "dbError": "Could not load API keys (database unavailable).", - "totalKeys": "Total keys", - "active": "Active", - "inactive": "Inactive", - "generateKey": "Générer une nouvelle clé", - "generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.", - "name": "Name", - "namePlaceholder": "AzureCast bridge", - "rateLimit": "Rate limit (requests/min)", - "allowedIps": "Allowed IPs (optional)", - "allowedIpsPlaceholder": "comma-separated, blank = any", - "generate": "Générer", - "existingKeys": "Existing keys ({count})", - "noKeys": "No API keys yet — generate one above.", - "colName": "Name", - "colKey": "Clé", - "colAllowedIps": "Allowed IPs", - "colRateLimit": "Rate limit", - "colLastUsed": "Last used", - "colExpires": "Expires", - "colStatus": "Status", - "colActions": "Actions", - "maskedHint": "Only the first 8 characters are shown", - "any": "any", - "activeLabel": "active", - "inactiveLabel": "inactive", - "deactivate": "Deactivate", - "activate": "Activate", - "delete": "Delete" - }, - "pointsForm": { - "title": "Configuration des points d'écoute", - "subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", - "saved": "Saved", - "points": "Points", - "enabled": "Enabled", - "disabled": "Disabled", - "perMinute": "Per minute", - "paidIn": "paid in {currency}", - "maxPerDay": "Max / day", - "unlimited": "Unlimited", - "minListeners": "Min listeners", - "settings": "Settings", - "pointsEnabled": "Points enabled", - "pointsEnabledHint": "Master switch for awarding listener points.", - "currency": "Currency", - "currencyHint": "Which wallet the points are paid into.", - "pointsPerMinute": "Points per minute", - "pointsPerMinuteHint": "Amount awarded for each full minute of listening.", - "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", - "minListenersHint": "Points are only awarded when at least this many people are tuned in.", - "save": "Enregistrer les paramètres de points" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.", - "dbError": "Could not load the AutoDJ playlist (database unavailable).", - "tracks": "Tracks", - "active": "Active", - "inactive": "Inactive", - "addTrack": "Add track", - "titlePlaceholder": "Track title", - "artist": "Artist", - "album": "Album", - "artworkUrl": "Artwork URL", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Duration (seconds)", - "durationPlaceholder": "e.g. 215", - "sortOrder": "Sort order", - "playlist": "Playlist ({count})", - "noTracks": "No AutoDJ tracks yet — add one above.", - "colOrder": "Order", - "colTitle": "Title", - "colArtist": "Artist", - "colAlbum": "Album", - "colDuration": "Duration", - "colPlays": "Plays", - "colLastPlayed": "Last played", - "colStatus": "Status", - "colActions": "Actions", - "activeLabel": "active", - "inactiveLabel": "inactive", - "deactivate": "Deactivate", - "activate": "Activate", - "delete": "Delete", - "trackTitle": "Title" - }, - "moderationPage": { - "title": "DJ Moderation", - "subtitle": "Review and remove radio shouts (50 most recent).", - "recentShouts": "Recent Shouts ({count})" - } - }, - "commandocentrum": { - "title": "Commandocentrum", - "subtitle": "Diagnostics, contrôles RCON et gestion des utilisateurs", - "diagnostics": "Diagnostics", - "rcon": "RCON", - "userActions": "Actions utilisateur", - "diagnosticsTitle": "Diagnostics de l'émulateur", - "memoryUsage": "Utilisation mémoire", - "uptime": "Temps de fonctionnement", - "onlineUsers": "Utilisateurs en ligne", - "roomsLoaded": "Salons chargés", - "refresh": "Actualiser", - "rconTitle": "Commandes RCON", - "rconPlaceholder": "Saisir une commande RCON…", - "rconSend": "Envoyer", - "rconSending": "Envoi…", - "rconResponse": "Réponse", - "userActionsTitle": "Actions utilisateur", - "username": "Nom d'utilisateur", - "usernamePlaceholder": "Nom d'utilisateur cible", - "action": "Action", - "execute": "Exécuter", - "actions": { - "disconnect": "Déconnecter", - "alert": "Envoyer une alerte", - "giveCredits": "Donner des crédits", - "giveBadge": "Donner un badge", - "givePoints": "Donner des points", - "ban": "Bannir", - "kick": "Expulser" - }, - "messagePlaceholder": "Message (pour les alertes)…", - "amountPlaceholder": "Montant…", - "badgePlaceholder": "Code du badge…" - }, - "emulator": { - "title": "Configuration de l'émulateur", - "subtitle": "Voir et modifier les paramètres de l'émulateur et les textes de localisation", - "settings": "Paramètres", - "texts": "Textes", - "search": "Rechercher", - "searchPlaceholder": "Rechercher des clés…", - "noSettings": "Aucun paramètre trouvé", - "noTexts": "Aucun texte trouvé", - "edit": "Modifier", - "save": "Enregistrer", - "saving": "Enregistrement…", - "cancel": "Annuler", - "colKey": "Clé", - "colValue": "Valeur", - "colType": "Type", - "colActions": "Actions", - "editDialog": { - "title": "Modifier : {key}", - "value": "Valeur", - "valuePlaceholder": "Saisir la valeur…", - "save": "Enregistrer les modifications", - "cancel": "Annuler" - } - }, - "alerts": { - "title": "Alertes", - "subtitle": "Envoyer des alertes à tout l'hôtel et voir les alertes récentes", - "sendAlert": "Envoyer une alerte à l'hôtel", - "recentAlerts": "Alertes récentes ({count})", - "noRecentAlerts": "Aucune alerte récente", - "form": { - "title": "Titre de l'alerte", - "titlePlaceholder": "ex. Maintenance du serveur dans 10 minutes", - "message": "Message d'alerte", - "messagePlaceholder": "Rédigez le message d'alerte…", - "type": "Type", - "typeHotel": "Alerte à tout l'hôtel", - "typeStaff": "Personnel uniquement", - "urgent": "Urgent", - "send": "Envoyer l'alerte", - "sending": "Envoi…", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Titre", - "colSentBy": "Envoyé par", - "colType": "Type", - "colDate": "Date", - "colActions": "Actions", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Activités du personnel", - "subtitle": "Piste d'audit des actions du personnel dans le panneau d'administration", - "noLogs": "Aucune activité du personnel enregistrée", - "colId": "ID", - "colUser": "Utilisateur", - "colAction": "Action", - "colTarget": "Cible", - "colDescription": "Description", - "colIp": "IP", - "colTimestamp": "Horodatage", - "filterByUser": "Filtrer par utilisateur…", - "filterByAction": "Filtrer par action…", - "clearFilters": "Effacer les filtres", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Filtre de mots", - "subtitle": "Gérer les mots et expressions filtrés dans l'hôtel", - "addWord": "Ajouter un mot", - "addWords": "Ajouter des mots", - "noWords": "Aucun mot filtré pour le moment", - "confirmDelete": "Retirer « {word} » du filtre ?", - "colId": "ID", - "colWord": "Mot", - "colAddedBy": "Ajouté par", - "colCreated": "Créé", - "colActions": "Actions", - "form": { - "word": "Mot", - "wordPlaceholder": "ex. grosmot", - "addMore": "Ajouter plusieurs mots (un par ligne)", - "save": "Ajouter au filtre", - "saving": "Enregistrement…", - "cancel": "Annuler" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Mode maintenance", - "subtitle": "Activer ou désactiver la maintenance de tout l'hôtel", - "enabled": "Le mode maintenance est activé", - "disabled": "Le mode maintenance est désactivé", - "enable": "Activer la maintenance", - "disable": "Désactiver la maintenance", - "message": "Message de maintenance", - "messagePlaceholder": "Nous revenons bientôt !", - "staffAccess": "Autoriser l'accès du personnel pendant la maintenance", - "save": "Enregistrer les paramètres", - "saving": "Enregistrement…", - "confirmEnable": "L'activation de la maintenance empêchera tous les utilisateurs non-personnel d'accéder à l'hôtel. Continuer ?", - "confirmDisable": "Désactiver le mode maintenance et restaurer l'accès pour tous les utilisateurs ?" - }, - "housekeeping": { - "title": "Permissions de gouvernance", - "subtitle": "Configurer quels rangs peuvent accéder à quelles sections d'administration", - "addPermission": "Ajouter une permission", - "editPermission": "Modifier la permission", - "deletePermission": "Supprimer la permission", - "noPermissions": "Aucune permission de gouvernance configurée", - "confirmDelete": "Supprimer cette permission ?", - "colId": "ID", - "colRank": "Rang", - "colSection": "Section", - "colActions": "Actions", - "form": { - "rankId": "ID du rang", - "rankIdPlaceholder": "Rang minimum", - "section": "Clé de section", - "sectionPlaceholder": "ex. admin.dashboard", - "save": "Enregistrer la permission", - "saving": "Enregistrement…", - "cancel": "Annuler" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset applied!", - "cleared": "All permissions cleared!", - "invalidRank": "Invalid Rang", - "testDone": "Test done: {count} permissions found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Supprimer ALL permissions? This action cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Permission", - "colDescription": "Description", - "colMinRank": "Min. Rang", - "permissionKey": "Clé de permission", - "minRank": "Min. Rang", - "description": "Description", - "permissions": "Permissions", - "permissionsCount": "{count} permissions", - "permission": "permission", - "highestMinRank": "Highest min. Rang: {rank}", - "totalMinRank": "Total min. Rang sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Rangs", - "missingDeps": "{count} missing dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(missing)", - "rank": "Rang", - "count": "Count", - "searchPermission": "Rechercher permissions…", - "search": "Rechercher", - "manage": "Manage", - "importSelection": "Importer selection", - "noGroup": "Non group", - "allGroups": "All groups", - "perGroup": "Permissions per group", - "perRank": "Permissions per Rang", - "rankOverviewHint": "All permissions grouped by the Rang they are assigned to.", - "tabOverview": "Aperçu", - "tabManage": "Manage", - "tabImport": "Importer / Export", - "tabRanks": "Rang Aperçu", - "tabPresets": "Préréglages", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Importer permissions", - "importHint": "Paste a JSON array of permission objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Importer", - "exportTitle": "Export permissions", - "exportHint": "Export all permissions as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Permission Préréglages", - "presetsHint": "Appliquer a predefined set of permissions for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Modération tools: Utilisateur lookup, Bannissements, CFH handling, chat Journaux.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Utilisateurs, Salons, news, Paramètres, Boutique, events, radio & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including permission management and asset Importer.", - "applyPreset": "Appliquer preset", - "clearAll": "Clear all permissions", - "testTitle": "Test Rang access", - "testHint": "Enter a Rang number to see which permissions would be granted.", - "test": "Test", - "auditTitle": "Permission audit log", - "auditHint": "All changes to Gouvernance permissions are logged.", - "auditLogsAt": "Audit Journaux are available on the Audit log page.", - "viewAuditLogs": "Voir audit Journaux", - "importedWithErrors": "Imported {count} permissions with {errors} errors", - "confirmClearAllDesc": "This will Retirer every permission entry from the Base de données. Are you sure?", - "confirmDeletePermission": "Supprimer this permission permanently?", - "confirmBulkDelete": "Supprimer {count} selected permissions?", - "deleteSelected": "Supprimer {count} selected", - "cancel": "Annuler", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Utilisateur", - "auditAction": "Action", - "auditTarget": "Cible", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Salons", - "subtitle": "Rechercher et gérer les salons de l'hôtel", - "search": "Rechercher", - "searchPlaceholder": "Rechercher par nom, propriétaire ou ID…", - "searchResults": "{count, plural, one {# salon} other {# salons}} trouvé(s) pour « {query} »", - "noResults": "Aucun salon trouvé", - "colId": "ID", - "colName": "Nom", - "colOwner": "Propriétaire", - "colUsers": "Utilisateurs", - "colState": "État", - "colCategory": "Catégorie", - "colCreated": "Créé", - "colActions": "Actions", - "stateOpen": "Ouvert", - "stateClosed": "Fermé", - "stateLocked": "Verrouillé", - "stateInvisible": "Invisible", - "detail": { - "title": "Salon : {name}", - "subtitle": "Appartient à {owner}", - "overview": "Aperçu", - "actions": "Actions", - "description": "Description", - "noDescription": "Aucune description", - "owner": "Propriétaire", - "users": "Utilisateurs en ligne", - "maxUsers": "Utilisateurs max", - "category": "Catégorie", - "state": "État", - "tags": "Étiquettes", - "noTags": "Aucune étiquette", - "created": "Créé", - "deleteRoom": "Supprimer le salon", - "confirmDelete": "Supprimer le salon « {name} » ? Cette action est irréversible.", - "enterRoom": "Entrer dans le salon", - "changeOwner": "Changer le propriétaire", - "changeOwnerPlaceholder": "Nom du nouveau propriétaire" - } - }, - "emailTemplates": { - "title": "Modèles d'e-mail", - "subtitle": "Gérer les modèles d'e-mail transactionnels", - "newTemplate": "+ Nouveau modèle", - "edit": "Modifier", - "delete": "Supprimer", - "noTemplates": "Pas encore de modèles d'e-mail", - "confirmDelete": "Supprimer le modèle « {name} » ?", - "colId": "ID", - "colName": "Nom", - "colSubject": "Objet", - "colKey": "Clé", - "colUpdated": "Mis à jour", - "colActions": "Actions", - "form": { - "name": "Nom", - "namePlaceholder": "ex. E-mail de bienvenue", - "key": "Clé", - "keyPlaceholder": "ex. email_bienvenue", - "subject": "Objet", - "subjectPlaceholder": "Ligne d'objet de l'e-mail", - "body": "Corps (HTML)", - "bodyPlaceholder": "

Cher/Chère {username},

", - "variables": "Variables disponibles", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Enregistrer le modèle", - "saving": "Enregistrement…", - "cancel": "Annuler" - } - }, - "theme": { - "title": "Thème", - "subtitle": "Personnaliser l'apparence du CMS", - "presets": "Préréglages", - "colours": "Couleurs", - "css": "CSS", - "presetsTitle": "Préréglages de thème", - "presetsSubtitle": "Choisir un jeu de couleurs prédéfini", - "applyPreset": "Appliquer", - "presetApplied": "Préréglage appliqué: {preset}", - "customiseTitle": "Couleurs personnalisées", - "primary": "Primaire", - "secondary": "Secondaire", - "accent": "Accent", - "background": "Arrière-plan", - "surface": "Surface", - "text": "Texte", - "saveColours": "Enregistrer les couleurs", - "savingColours": "Enregistrement…", - "cssTitle": "CSS personnalisé", - "cssSubtitle": "Ajouter du CSS personnalisé pour surcharger les styles du thème", - "cssPlaceholder": "/* Votre CSS personnalisé ici */", - "saveCss": "Enregistrer le CSS", - "savingCss": "Enregistrement…", - "reset": "Réinitialiser aux valeurs par défaut", - "confirmReset": "Réinitialiser le thème aux valeurs par défaut ?" - }, - "media": { - "title": "Médiathèque", - "subtitle": "Télécharger et gérer les fichiers médias", - "upload": "Télécharger", - "uploadTitle": "Télécharger un fichier", - "uploadSubtitle": "Glisser-déposer ou cliquer pour télécharger", - "uploadButton": "Choisir un fichier", - "uploading": "Téléchargement…", - "noFiles": "Pas encore de fichiers médias", - "delete": "Supprimer", - "confirmDelete": "Supprimer ce fichier définitivement ?", - "search": "Rechercher", - "searchPlaceholder": "Rechercher par nom de fichier…", - "colPreview": "Aperçu", - "colName": "Nom", - "colSize": "Taille", - "colType": "Type", - "colUploaded": "Téléchargé", - "colActions": "Actions", - "copyUrl": "Copier l'URL", - "urlCopied": "URL copiée dans le presse-papier" - }, - "settings": { - "title": "Paramètres CMS", - "subtitle": "Gérer la configuration clé/valeur du CMS", - "addSetting": "Ajouter un paramètre", - "edit": "Modifier", - "delete": "Supprimer", - "noSettings": "Aucun paramètre trouvé", - "confirmDelete": "Supprimer le paramètre « {key} » ?", - "colKey": "Clé", - "colValue": "Valeur", - "colUpdated": "Mis à jour", - "colActions": "Actions", - "form": { - "key": "Clé", - "keyPlaceholder": "ex. hotel_name", - "value": "Valeur", - "valuePlaceholder": "Valeur du paramètre", - "save": "Enregistrer le paramètre", - "saving": "Enregistrement…", - "cancel": "Annuler" - }, - "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." - }, - "favicon": { - "title": "Favicon", - "subtitle": "Upload and manage the site favicon", - "current": "Current favicon", - "uploadLabel": "Upload favicon", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.", - "upload": "Upload", - "uploading": "Uploading…", - "delete": "Remove", - "deleting": "Removing…", - "saved": "Favicon saved successfully!", - "deleted": "Favicon removed successfully!", - "error": "Something went wrong", - "confirmDelete": "Remove the favicon? The site will no longer show a custom favicon.", - "generator": { - "title": "Generate favicon", - "text": "Text", - "bgColor": "Background color", - "textColor": "Text color", - "rounded": "Rounded corners", - "save": "Save as favicon" - }, - "cancel": "Cancel" - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Accueil", - "reload": "Recharger", - "fullscreen": "Plein écran", - "logout": "Déconnexion", - "onlineUsers": "Utilisateurs en ligne", - "emulatorOnline": "Émulateur en ligne", - "emulatorOffline": "Émulateur hors ligne", - "dragToMove": "Glissez pour déplacer", - "hide": "Masquer la barre", - "fullscreenExit": "Quitter le plein écran", - "show": "Afficher la barre", - "emulatorUnknown": "État de l'émulateur inconnu" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Diagnostic des fichiers", - "preliminary": "Vérification préliminaire des adresses ; le contenu sera validé à l’importation.", - "http": "HTTP {status}", - "network": "Échec de la connexion", - "timeout": "La source n’a pas répondu à temps", - "invalidResponse": "La source a renvoyé une page web au lieu d’un fichier", - "available": "Fichier trouvé ; validation en attente", - "recover": "Joindre l’original et reprendre", - "recoveryHint": "Choisissez {file} (50 MB maximum). Son identité est vérifiée. Les éléments échoués sont relancés ; les imports terminés sont conservés.", - "attach": "Choisir le fichier .nitro original", - "working": "Validation ou reprise en cours...", - "attached": "Fichier original correspondant joint", - "resume": "Reprendre les imports échoués avec ce fichier", - "invalidFile": "Choisissez un .nitro original correspondant de 50 MB maximum et réessayez.", - "resumeError": "Actualisez l’historique et utilisez la dernière tentative ; vérifiez le fichier et réessayez.", - "mismatchedFile": "Ce fichier appartient à un autre meuble.", - "alreadyStarted": "La reprise a déjà commencé. Actualisez l’historique et utilisez la dernière tentative.", - "notEligible": "Cet élément ne permet pas la récupération par pièce jointe." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "Une copie de récupération sera conservée dans ce navigateur pendant 7 jours.", + "saved": "Une copie de récupération a été enregistrée dans ce navigateur pour 7 jours.", + "unavailable": "La récupération dans le navigateur est indisponible. Garde cette page ouverte jusqu’à l’enregistrement de tes modifications.", + "found": "Une copie de récupération est disponible dans ce navigateur, enregistrée le", + "restore": "Restaurer la copie du navigateur", + "discard": "Supprimer la copie du navigateur", + "confirmRestore": "Remplacer le formulaire actuel par la copie de récupération du navigateur ? Vérifie le contenu avant d’enregistrer.", + "confirmDiscard": "Supprimer cette copie de récupération du navigateur ? Le formulaire actuel restera inchangé." + }, + "nav": { + "home": "Accueil", + "community": "Communauté", + "articles": "Articles", + "photos": "Photos", + "staff": "Équipe", + "rankings": "Classements", + "guilds": "Groupes", + "leaderboards": "Meilleurs scores", + "rareValues": "Valeurs rares", + "shop": "Boutique", + "market": "Marché", + "assistance": "Assistance", + "helpCenter": "Centre d'aide", + "myTickets": "Mes tickets", + "badges": "Badges", + "radio": "Radio", + "friends": "Amis", + "messages": "Messages", + "admin": "Admin", + "openMenu": "Open menu", + "closeMenu": "Close menu", + "drawBadge": "Dessiner un badge", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} en ligne", + "nitroClient": "Client Nitro", + "tagline": "Un monde virtuel en ligne où vous pouvez créer votre propre avatar, vous faire des amis, discuter, créer des salons et bien plus encore !", + "login": "Connexion", + "or": "Ou", + "createAccount": "Créer un compte" + }, + "footer": { + "copyright": "© {year} - {hotel} est un projet éducatif à but non lucratif" + }, + "pages": { + "staff": { + "title": "Équipe", + "subtitle": "L'équipe derrière l'hôtel", + "ranksTitle": "Rangs", + "ranksSubtitle": "Ce dont chaque membre de l'équipe s'occupe", + "membersTitle": "Membres de l'équipe", + "membersEmptySubtitle": "Personne à afficher pour le moment", + "membersSubtitle": "{count, plural, one {# membre qui fait tourner les choses} other {# membres qui font tourner les choses}}", + "emptyState": "Aucun membre du personnel à afficher.", + "colUsername": "Nom d'utilisateur", + "colRank": "Rang", + "colMotto": "Devise", + "viewProfile": "View profile", + "noMotto": "No motto set", + "loadError": "Unable to load staff members. Please try again shortly.", + "retry": "Try again" + }, + "leaderboard": { + "title": "Classement", + "subtitle": "Top 20 des joueurs par {currency}", + "tab_credits": "Crédits", + "tab_diamonds": "Diamants", + "tab_duckets": "Duckets", + "tab_achievement": "Succès", + "tab_respects": "Respects", + "tab_onlinetime": "Temps en ligne", + "emptyState": "Aucun classement à afficher pour le moment.", + "colAvatar": "Avatar", + "colPlayer": "Joueur" + }, + "friends": { + "title": "Amis", + "emptySubtitle": "Vous n'avez encore aucun ami ajouté", + "subtitle": "{count, plural, one {Vous avez # ami} other {Vous avez # amis}}", + "emptyState": "Ajoutez des amis dans l'hôtel et ils apparaîtront ici.", + "noMotto": "Aucune devise", + "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": "Demandes d'amis et messages hors ligne qui vous attendent", + "requestsTitle": "Demandes d'amis", + "requestsEmptySubtitle": "Personne n'a encore demandé à être votre ami", + "requestsSubtitle": "{count, plural, one {# demande en attente} other {# demandes en attente}}", + "requestsEmptyState": "Aucune demande d'ami en attente.", + "wantsToBeFriend": "veut être votre ami.", + "accept": "Accepter", + "offlineTitle": "Messages hors ligne", + "offlineEmptySubtitle": "Votre boîte de réception est vide", + "offlineSubtitle": "{count, plural, one {# message reçu} other {# messages reçus}}", + "offlineEmptyState": "Vous n'avez aucun message hors ligne.", + "unknownUser": "Utilisateur #{id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Aucune devise", + "statRank": "Rang", + "statCredits": "Crédits", + "statRegistered": "Inscrit", + "badgesTitle": "Badges", + "badgesEmpty": "Pas encore de badges.", + "photosTitle": "Photos", + "photosEmpty": "Pas encore de photos.", + "guestbookTitle": "Livre d'or", + "guestbookSubtitle": "Messages sur le mur de {username}", + "leaveMessage": "Laisser un message", + "guestbookPlaceholder": "Écrivez quelque chose sur le livre d'or de {username}…", + "post": "Publier", + "loginToPost": "Connectez-vous pour laisser un message dans le livre d'or.", + "guestbookEmpty": "Pas encore d'entrées dans le livre d'or.", + "unknownUser": "Utilisateur #{id}", + "statDuckets": "Duckets", + "statDiamonds": "Diamants", + "walletTitle": "Portefeuille", + "friendsTitle": "Amis", + "friendsSubtitle": "Les personnes de l'hôtel avec qui il/elle traîne", + "friendsEmpty": "Aucun ami à afficher.", + "roomsTitle": "Salons", + "roomsSubtitle": "Salons qu'il/elle possède", + "roomsEmpty": "Aucun salon à afficher.", + "roomUntitled": "Salon sans titre", + "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": "Classements", + "subtitle": "Les 12 meilleurs joueurs classés par crédits", + "emptyState": "Aucun joueur à classer pour le moment." + }, + "home": { + "welcome": "Bienvenue sur {hotelName}", + "welcomeSubtitle": "Votre hôtel rétro, désormais propulsé par Next.js", + "welcomeBody": "Traînez, collectionnez des meubles et rencontrez des amis.", + "enterHotel": "Entrer dans {hotelName}", + "onlineFriends": "Amis en ligne", + "noFriendsOnline": "Aucun ami en ligne", + "register": "S'INSCRIRE MAINTENANT", + "joinNow": "Rejoignez {hotelName} dès aujourd'hui !", + "recentUsers": "Utilisateurs récents", + "recentPhotos": "Photos récentes", + "latestNews": "Dernières actualités", + "newsTitle": "Dernières actualités", + "newsSubtitle": "Fraîchement sorties de l'hôtel", + "allNews": "Toutes les actualités →", + "allUsers": "Communauté →", + "noArticles": "Pas encore d'articles.", + "noPhotos": "Pas encore de photos.", + "noUsers": "Aucun utilisateur en ligne", + "latestArticle": "Dernier article", + "latestUsers": "Nouveaux citoyens ({count} total)", + "statsOnline": "En ligne", + "statsCitizens": "Citoyens", + "statsRooms": "Salons", + "statsArticles": "Articles", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Crée ton look unique", + "featuresFurniture": "Meubles", + "featuresFurnitureDesc": "Décore les salons avec des objets", + "featuresCommunity": "Communauté", + "featuresCommunityDesc": "Fais des amis et discute", + "featuresGames": "Jeux", + "featuresGamesDesc": "Compète et amuse-toi", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Actualités", + "subtitle": "Les dernières annonces, événements et mises à jour de l'hôtel", + "noArticles": "Pas encore d'articles.", + "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": "← Actualités", + "reactionsTitle": "Réactions", + "reactionsSubtitle": "Dites-nous ce que vous en pensez", + "reaction": { + "like": "J'aime", + "love": "J'adore", + "wow": "Waouh" + }, + "removeReaction": "Cliquez pour retirer votre réaction", + "reactWith": "Réagir avec {reaction}", + "noReactions": "Pas encore de réactions.", + "logIn": "Connectez-vous", + "toReact": "pour réagir.", + "commentsTitle": "Commentaires", + "commentsSubtitle": "Participez à la conversation", + "commentsCount": "{count} jusqu'à présent", + "noComments": "Pas encore de commentaires. Soyez le premier à commenter.", + "userNumber": "Utilisateur #{id}", + "addComment": "Ajouter un commentaire", + "commentPlaceholder": "Écrivez votre commentaire…", + "postComment": "Publier le commentaire", + "toComment": "pour laisser un commentaire.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Photos", + "subtitle": "Les dernières captures d'écran prises dans l'hôtel", + "noPhotos": "Pas encore de photos.", + "photoAlt": "Photo de l'utilisateur #{id}", + "byUser": "par l'utilisateur #{id}" + }, + "badges": { + "title": "Badges", + "subtitle": "Les badges que vous pouvez gagner et afficher dans l'hôtel", + "noBadges": "Aucun badge disponible pour le moment." + }, + "community": { + "title": "Communauté", + "subtitle": "Tout ce qui se passe dans l'hôtel en un seul endroit", + "open": "Ouvrir →", + "links": { + "rankings": { + "title": "Classements", + "text": "Voir les joueurs les plus riches de l'hôtel, classés par crédits." + }, + "staff": { + "title": "Équipe", + "text": "Rencontrez l'équipe qui fait tourner l'hôtel chaque jour." + }, + "news": { + "title": "Actualités", + "text": "Les dernières annonces, événements et mises à jour." + }, + "photos": { + "title": "Photos", + "text": "Les captures d'écran partagées par la communauté dans tout l'hôtel." + }, + "guilds": { + "title": "Groupes", + "text": "Parcourez les groupes que les joueurs ont créés et rejoints." + }, + "leaderboards": { + "title": "Meilleurs scores", + "text": "Qui est en tête cette saison dans les statistiques de l'hôtel." + } + } + }, + "guilds": { + "title": "Groupes", + "subtitle": "Parcourez les groupes que les joueurs ont créés et rejoints", + "empty": "Pas encore de groupes.", + "unnamedGuild": "Groupe sans nom", + "noDescription": "Aucune description" + }, + "guild": { + "allGuilds": "← Tous les groupes", + "unnamedGuild": "Groupe sans nom", + "noDescription": "Aucune description", + "memberSingular": "Membre", + "memberPlural": "Membres", + "founded": "Fondé", + "forumLink": "Forum →", + "discussion": "Discussion", + "membersTitle": "Membres", + "memberLowerSingular": "membre", + "memberLowerPlural": "membres", + "noMembers": "Aucun membre.", + "owner": "Propriétaire", + "noMotto": "Aucune devise" + }, + "guildForum": { + "backToGuild": "← Retour au groupe", + "unnamedGuild": "Groupe sans nom", + "forumTitle": "{guild} — Forum", + "threadSingular": "sujet", + "threadPlural": "sujets", + "newThread": "+ Nouveau sujet", + "empty": "Aucun sujet dans ce forum pour le moment.", + "colSubject": "Sujet", + "colAuthor": "Auteur", + "colPosts": "Messages", + "colDate": "Date", + "noSubject": "(sans sujet)", + "pinned": "Épinglé", + "locked": "Verrouillé", + "userNumber": "Utilisateur #{id}", + "unknown": "Inconnu", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Retour au forum", + "unnamedGuild": "Groupe sans nom", + "title": "Nouveau sujet", + "subtitle": "dans le forum {guild}", + "subjectLabel": "Sujet", + "subjectPlaceholder": "Sujet du fil", + "messageLabel": "Message", + "messagePlaceholder": "Écrivez votre premier message…", + "postThread": "Publier le sujet", + "cancel": "Annuler", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Boutique", + "subtitle": "Rechargez votre compte et obtenez des packs exclusifs, de la monnaie et des badges.", + "browsingCategory": "Parcourir les packs {category}.", + "all": "Tout", + "allPackages": "Tous les packs", + "packagesAvailable": "{count, plural, one {# pack disponible} other {# packs disponibles}}", + "empty": "Aucun pack disponible pour le moment.", + "buy": "Acheter", + "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": "Recharger avec PayPal", + "subtitle": "Payez en toute sécurité avec PayPal et vos crédits sont ajoutés dès que le paiement est confirmé.", + "cancelled": "Le paiement a été annulé — aucun montant n'a été prélevé.", + "chooseAmount": "Choisissez un montant", + "notConfiguredPre": "PayPal n'est pas encore configuré. Un administrateur doit définir", + "notConfiguredAnd": "et", + "notConfiguredOptional": "(et éventuellement", + "notConfiguredPost": "pour le bac à sable ou le mode réel).", + "balanceTitle": "Votre solde", + "signedInAs": "Connecté en tant que {username}", + "credits": "Crédits", + "creditsPerUnit": "Crédits pour 1,00 {currency}", + "rateLine": "Vous recevez {amount} crédits pour 1,00 {currency}. Les crédits apparaissent dans le jeu la prochaine fois que vous vous connectez." + }, + "marketplace": { + "title": "Marché", + "subtitle": "Parcourez les meubles et les rares listés par les joueurs. Les annonces sont placées dans le jeu et mises à jour en direct — rendez-vous dans l'hôtel pour faire une offre.", + "activeOffers": "Offres actives", + "sellers": "Vendeurs", + "totalValue": "Valeur totale", + "activeListings": "Annonces actives", + "mostRecentFirst": "Les plus récentes en premier", + "empty": "Il n'y a aucune offre active sur le marché pour le moment. Revenez plus tard.", + "colOffer": "Offre", + "colItem": "Objet", + "colSeller": "Vendeur", + "colPrice": "Prix", + "colListed": "Publié", + "itemLabel": "Objet #{id}", + "userLabel": "Utilisateur #{id}", + "justNow": "à l'instant", + "minutesAgo": "il y a {count}m", + "hoursAgo": "il y a {count}h", + "daysAgo": "il y a {count}j" + }, + "rares": { + "title": "Valeurs rares", + "subtitle": "Obtenez un aperçu de tous les rares de l'hôtel, regroupés par catégorie.", + "empty": "Nous n'avons actuellement aucun rare répertorié ici.", + "rareCount": "{count, plural, one {# rare} other {# rares}}", + "viewRares": "Voir les rares →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# rare dans cette catégorie} other {# rares dans cette catégorie}}", + "allRares": "← Tous les rares", + "empty": "Aucun rare répertorié dans cette catégorie pour le moment.", + "colRare": "Rare", + "colCredits": "Crédits", + "colCurrency": "Monnaie", + "creditsValue": "{value} crédits", + "duckets": "Duckets", + "diamonds": "Diamants", + "credits": "Crédits" + }, + "redeem": { + "title": "Échanger un bon", + "subtitle": "Vous avez un code de bon ? Saisissez-le ci-dessous pour ajouter la récompense à votre compte.", + "enterCode": "Entrez votre code", + "oncePerAccount": "Chaque bon ne peut être échangé qu'une seule fois par compte.", + "balanceTitle": "Votre solde", + "signedInAs": "Connecté en tant que {username}", + "credits": "Crédits", + "instantCredit": "Les récompenses échangées sont créditées instantanément et apparaissent dans le jeu la prochaine fois que vous vous connectez." + }, + "help": { + "title": "Centre d'aide", + "subtitle": "Trouvez des guides, des sujets d'assistance et les règles de l'hôtel — tout ce dont vous avez besoin pour obtenir de l'aide.", + "myTickets": "Mes tickets →", + "topicsTitle": "Sujets d'assistance", + "topicsSubtitle": "Parcourez les guides et les réponses aux questions courantes", + "topicsEmpty": "Pas encore de sujets d'aide.", + "rulesTitle": "Règles de l'hôtel", + "rulesSubtitle": "Veuillez les lire avant de traîner dans l'hôtel", + "rulesEmpty": "Aucune règle publiée pour le moment.", + "categoryEmpty": "Aucune règle dans cette catégorie." + }, + "helpCategory": { + "back": "← Centre d'aide", + "topicSubtitle": "Sujet du centre d'aide", + "moreTitle": "Plus de sujets d'aide", + "moreSubtitle": "Aller à un autre sujet d'assistance" + }, + "helpTickets": { + "title": "Tickets d'aide", + "subtitle": "Soumettez un ticket au personnel et suivez vos demandes en cours.", + "statTotal": "Total des tickets", + "statOpen": "Ouverts", + "statClosed": "Fermés", + "newTitle": "Nouveau ticket", + "newSubtitle": "Décrivez votre problème et le personnel vous répondra", + "subjectPlaceholder": "Sujet", + "contentPlaceholder": "Décrivez votre problème…", + "submit": "Soumettre le ticket", + "listTitle": "Vos tickets", + "listSubtitle": "Toutes les demandes que vous avez envoyées au personnel", + "listEmpty": "Vous n'avez pas encore de tickets.", + "colId": "ID", + "colSubject": "Sujet", + "colStatus": "Statut", + "colCreated": "Créé", + "statusOpen": "Ouvert", + "statusClosed": "Fermé", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "Postuler pour {hotel}", + "subtitle": "Nous ouvrons des candidatures pour le personnel de temps en temps. Si vous tombez sur un poste dans lequel vous pensez correspondre parfaitement, n'hésitez pas à postuler.", + "noPositionsTitle": "Aucun poste ouvert", + "noPositionsBody": "Il n'y a actuellement aucun poste ouvert. Revenez plus tard pour vérifier si de nouveaux postes sont disponibles. Merci de votre intérêt.", + "noDeadline": "Aucune date limite fixée", + "deadline": "Date limite de candidature : {date}", + "alreadyApplied": "Vous avez déjà postulé pour {rank}", + "aboutYou": "À propos de vous", + "aboutPlaceholder": "Dites-nous pourquoi vous seriez un excellent {rank}…", + "applyFor": "Postuler pour {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": "Postuler pour rejoindre l'équipe {hotel}", + "subtitle": "Nous ouvrons les candidatures pour l'équipe périodiquement. Si vous voyez une équipe qui vous correspond, n'hésitez pas à postuler !", + "noPositionsTitle": "Aucun poste dans l'équipe ouvert", + "noPositionsBody": "Il n'y a actuellement aucun poste ouvert dans l'équipe. Revenez plus tard pour vérifier les nouvelles offres. Merci !", + "pending": "Votre candidature est en attente", + "aboutYou": "À propos de vous", + "aboutPlaceholder": "Dites-nous pourquoi vous seriez un excellent choix pour {rank}…", + "applyFor": "Postuler pour {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": "Écoutez la radio de l'hôtel — sessions live de DJ, demandes et dédicaces.", + "nowPlaying": "En cours de lecture", + "nothingPlaying": "Rien ne joue pour le moment.", + "onAir": "À l'antenne : {dj}", + "noDj": "Aucun DJ à l'antenne.", + "audioUnsupported": "Votre navigateur ne prend pas en charge l'élément audio.", + "streamOffline": "Le flux est actuellement hors ligne.", + "exploreTitle": "Explorer la radio", + "exploreSubtitle": "Programmation, dédicaces, demandes et plus", + "linkSchedule": "Programmation", + "linkScheduleText": "Notre programme hebdomadaire de DJ et d'émissions.", + "linkShouts": "Dédicaces", + "linkShoutsText": "Dédicaces et demandes de la communauté.", + "linkRequests": "Demandes", + "linkRequestsText": "Demandez au DJ de passer votre morceau préféré.", + "linkApply": "Postuler comme DJ", + "linkApplyText": "Rejoignez l'équipe et prenez le micro.", + "linkLeaderboard": "Classement", + "linkLeaderboardText": "Meilleurs auditeurs classés par points gagnés.", + "todayTitle": "Programmation du jour", + "todayTitleWithDay": "Programmation du jour · {day}", + "todaySubtitle": "Ce qui passe à l'antenne aujourd'hui", + "fullWeek": "Toute la semaine →", + "noShowsToday": "Aucune émission prévue aujourd'hui.", + "colTime": "Horaire", + "colShow": "Émission", + "colDj": "DJ", + "untitledShow": "Émission sans titre", + "userNumber": "Utilisateur #{id}" + }, + "radioSchedule": { + "title": "Programmation radio", + "subtitle": "Notre programme hebdomadaire de DJ et d'émissions", + "empty": "Aucune émission prévue pour le moment.", + "colDay": "Jour", + "colTime": "Horaire", + "colDj": "DJ", + "colShow": "Émission", + "noShows": "Aucune émission" + }, + "radioShouts": { + "title": "Dédicaces radio", + "subtitle": "Dédicaces et demandes de la communauté", + "postTitle": "Publier une dédicace", + "postSubtitle": "Envoyez un message au DJ à l'antenne", + "messageLabel": "Votre message", + "messagePlaceholder": "Envoyez une dédicace au DJ…", + "shoutButton": "Dédicacer", + "loginToPost": "Connectez-vous pour publier une dédicace.", + "latestTitle": "Dernières dédicaces", + "latestSubtitle": "Les messages les plus récents des auditeurs", + "empty": "Pas encore de dédicaces. Soyez le premier !", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Concours radio", + "subtitle": "Écoutez et participez à nos derniers concours en direct", + "empty": "Pas encore de concours.", + "contestLabel": "Concours #{id}", + "dateUnknown": "Date inconnue" + }, + "radioGiveaways": { + "title": "Concours radio", + "subtitle": "Écoutez pour tenter votre chance dans nos concours radio", + "empty": "Pas encore de concours.", + "giveawayLabel": "Concours #{id}", + "dateUnknown": "Date inconnue" + }, + "radioLeaderboard": { + "title": "Classement des auditeurs radio", + "subtitle": "Top 50 des auditeurs par points gagnés à l'écoute de la radio", + "empty": "Aucun point d'auditeur à afficher pour le moment.", + "colRank": "Rang", + "colAvatar": "Avatar", + "colListener": "Auditeur", + "colPoints": "Points" + }, + "radioApply": { + "title": "Postuler pour devenir DJ radio", + "subtitle": "Parlez-nous de vous et pourquoi vous seriez parfait pour l'antenne", + "latestTitle": "Votre dernière candidature", + "statusLabel": "Statut :", + "submittedOn": "· soumise le {date}", + "submitAgain": "Vous pouvez soumettre à nouveau ci-dessous si vos informations ont changé.", + "formTitle": "Formulaire de candidature", + "formSubtitle": "Tous les champs marqués comme requis doivent être remplis", + "realNameLabel": "Nom réel", + "realNamePlaceholder": "Votre nom complet", + "ageLabel": "Âge", + "availabilityLabel": "Disponibilité", + "availabilityPlaceholder": "Quels jours et à quelles heures pouvez-vous diffuser ?", + "musicStyleLabel": "Style de musique", + "musicStylePlaceholder": "ex. House, Pop, Hip-Hop", + "experienceLabel": "Expérience", + "optional": "(facultatif)", + "experiencePlaceholder": "Une expérience préalable en tant que DJ ou animateur ?", + "motivationLabel": "Motivation", + "motivationPlaceholder": "Pourquoi voulez-vous rejoindre l'équipe radio ?", + "submitButton": "Soumettre la candidature", + "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": "Paramètres du compte", + "accountSettingsSubtitle": "Gérez votre profil, votre sécurité et vos comptes connectés", + "publicProfile": "Votre profil public", + "noMotto": "Aucune devise", + "noEmail": "Aucun e-mail enregistré", + "changeMotto": "Changer la devise", + "changeMottoSubtitle": "Se met à jour instantanément dans le jeu si vous êtes en ligne", + "mottoPlaceholder": "Votre devise", + "saveMotto": "Enregistrer la devise", + "securityTitle": "Sécurité", + "securitySubtitle": "Authentification à deux facteurs", + "securityDescription": "Ajoutez une deuxième couche de protection à votre compte.", + "twoFactorLink": "Authentification à deux facteurs" + }, + "settings2fa": { + "backToSettings": "← Paramètres", + "title": "Authentification à deux facteurs", + "subtitle": "Ajoutez une deuxième couche de sécurité avec une application d'authentification", + "nowEnabled": "L'A2F est maintenant activée. 🔒", + "disabledNotice": "L'A2F a été désactivée.", + "badCode": "Ce code n'était pas valide — réessayez.", + "noAppKeyPrefix": "L'A2F est indisponible tant que", + "noAppKeyMiddle": "n'est pas configuré (la même clé Laravel", + "noAppKeySuffix": "que votre installation AtomCMS, pour que les secrets existants restent lisibles).", + "isEnabled": "L'A2F est activée", + "onYourAccount": "sur votre compte.", + "disable": "Désactiver l'A2F", + "scanOrEnter": "Scannez ou saisissez cette clé", + "scanInstructions": "Ajoutez-la à Google Authenticator / Authy, puis saisissez le code à 6 chiffres pour confirmer.", + "manualKey": "Clé manuelle :", + "codePlaceholder": "Code à 6 chiffres", + "confirm": "Confirmer", + "enableIntro": "Ajoutez une deuxième couche de sécurité avec une application d'authentification.", + "enable": "Activer l'A2F", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Comptes connectés", + "subtitle": "Associez un compte social pour vous connecter en un clic", + "connected": "Connecté", + "unavailable": "Indisponible", + "login": { + "title": "Connexion", + "subtitle": "Bon retour — connectez-vous pour entrer dans l'hôtel.", + "subtitle2fa": "Saisissez le code à 6 chiffres de votre application d'authentification.", + "usernamePlaceholder": "Nom d'utilisateur", + "passwordPlaceholder": "Mot de passe", + "codePlaceholder": "Code A2F", + "pleaseWait": "Veuillez patienter…", + "verify": "Vérifier", + "signIn": "Se connecter", + "or": "ou", + "noAccount": "Pas de compte ?", + "createOne": "Créer un compte", + "forgotPassword": "Mot de passe oublié ?", + "errorInvalidCredentials": "Nom d'utilisateur ou mot de passe invalide", + "errorInvalid2fa": "Code A2F invalide", + "welcomeBack": "Bon retour", + "welcomeBackSub": "Connecte-toi pour continuer vers {hotelName}", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Créer un compte", + "subtitle": "Rejoignez l'hôtel — cela ne prend qu'un instant.", + "username": "Nom d'utilisateur", + "email": "E-mail", + "password": "Mot de passe", + "confirmPassword": "Répéter le mot de passe", + "usernamePlaceholder": "Nom d'utilisateur", + "emailPlaceholder": "E-mail", + "passwordPlaceholder": "Mot de passe (min 6 car.)", + "confirmPasswordPlaceholder": "Répéter le mot de passe", + "selectOutfit": "Sélectionnez votre tenue", + "termsAccept": "J'ai 18 ans ou plus et j'accepte les conditions et règles de {hotel}.", + "createAccount": "Créer un compte", + "creatingAccount": "Création du compte...", + "redirecting": "Redirection vers votre compte...", + "alreadyHaveAccount": "Vous avez déjà un compte ? Connectez-vous !", + "register": "S'inscrire", + "termsError": "Vous devez accepter les conditions et règles pour vous inscrire.", + "usernameError": "Le nom d'utilisateur est requis.", + "emailError": "Un e-mail valide est requis.", + "passwordError": "Le mot de passe doit contenir au moins 6 caractères.", + "confirmPasswordError": "Les mots de passe ne correspondent pas.", + "termsRequired": "Vous devez accepter les conditions et règles.", + "usernameRequired": "Le nom d'utilisateur est requis.", + "emailRequired": "L'e-mail est requis.", + "passwordRequired": "Le mot de passe est requis.", + "passwordsDontMatch": "Les mots de passe ne correspondent pas.", + "alreadyHaveAccountPre": "Tu as déjà un compte ?", + "alreadyHaveAccountLink": "Se connecter", + "whoIsOnline": "Qui est en ligne", + "usersOnline": "{count} en ligne", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Réinitialiser le mot de passe", + "subtitle": "Nous vous enverrons par e-mail un lien sécurisé pour définir un nouveau mot de passe.", + "sentNotice": "Si cet e-mail est enregistré, un lien de réinitialisation a été envoyé. Vérifiez votre boîte de réception.", + "emailPlaceholder": "Votre e-mail", + "sendResetLink": "Envoyer le lien de réinitialisation", + "backToLogin": "Retour à la connexion", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Définir un nouveau mot de passe", + "subtitle": "Choisissez un mot de passe fort que vous n'utilisez pas ailleurs.", + "passwordPlaceholder": "Nouveau mot de passe (min 6 car.)", + "resetPassword": "Réinitialiser le mot de passe", + "backToLogin": "Retour à la connexion" + }, + "verify": { + "verifiedTitle": "Tout est prêt", + "verifiedSubtitle": "E-mail vérifié", + "verifiedBody": "Votre adresse e-mail a été vérifiée. Vous pouvez maintenant vous connecter et jouer.", + "goToLogin": "Aller à la connexion", + "alreadyTitle": "Déjà vérifié", + "alreadySubtitle": "Rien à faire", + "alreadyBody": "Cette adresse e-mail a déjà été confirmée.", + "unavailableTitle": "Réessayez dans un instant", + "unavailableSubtitle": "Serveur inaccessible", + "unavailableBody": "Nous n'avons pas pu joindre le serveur pour vérifier votre e-mail. Veuillez réessayer le lien dans un instant.", + "invalidTitle": "Vérification d'e-mail", + "invalidSubtitle": "Lien invalide ou expiré", + "invalidBody": "Ce lien de vérification n'est pas valide. Assurez-vous d'avoir ouvert le lien complet depuis votre e-mail, ou demandez-en un nouveau.", + "backToLogin": "Retour à la connexion" + }, + "banned": { + "title": "Vous êtes banni", + "subtitle": "Compte suspendu", + "body": "Votre compte a été suspendu de l'hôtel.", + "reasonLabel": "Raison :", + "permanent": "Ce bannissement est permanent.", + "expires": "Expire le {date}.", + "contactStaff": "Si vous pensez qu'il s'agit d'une erreur, contactez l'équipe du personnel." + }, + "maintenance": { + "title": "{hotel} est en maintenance", + "subtitle": "Nous serons bientôt de retour", + "staffCanLogIn": "Le personnel peut toujours se connecter." + }, + "admin": { + "nav": { + "overview": "Aperçu", + "dashboard": "Tableau de bord", + "content": "Contenu", + "articles": "Articles", + "tags": "Étiquettes", + "navigator": "Navigateur", + "helpCenter": "Centre d'aide", + "advertisements": "Publicités", + "writeableBoxes": "Boîtes modifiables", + "photos": "Photos", + "tickets": "Tickets", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Utilisateurs & accès", + "users": "Utilisateurs", + "bans": "Bannissements", + "ipManagement": "Gestion IP", + "vpn": "VPN", + "applications": "Candidatures", + "teams": "Équipes", + "permissions": "Permissions", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "Économie", + "catalog": "Catalogue", + "shop": "Boutique", + "transactions": "Transactions", + "vouchers": "Bons", + "subscriptions": "Abonnements", + "rareValues": "Valeurs rares", + "badges": "Badges", + "achievements": "Succès", + "calendar": "Calendrier", + "radio": "Radio", + "radioHistory": "Historique radio", + "radioBanners": "Bannières", + "radioEmbed": "Intégration", + "radioApiKeys": "Clés API", + "radioModeration": "Modération", + "radioSettings": "Paramètres", + "radioMonitoring": "Surveillance", + "radioPoints": "Points", + "radioRanks": "Rangs", + "radioAutodj": "Auto DJ", + "system": "Système", + "commandocentrum": "Commandocentrum", + "emulator": "Émulateur", + "alerts": "Alertes", + "logs": "Journaux", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Filtre de mots", + "maintenance": "Maintenance", + "rooms": "Salons", + "emailTemplates": "Modèles d'e-mail", + "theme": "Thème", + "media": "Médias", + "favicon": "Favicon", + "sounds": "Sons", + "translations": "Traductions", + "import": "Importer", + "settings": "Paramètres", + "backToSite": "Retour au site", + "housekeeping": "Gouvernance", + "hotelManagementPanel": "Panneau de gestion de l'hôtel", + "rankLabel": "Rang {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Rechercher dans le menu…", + "clearMenuSearch": "Effacer la recherche", + "noMenuResults": "Aucune page trouvée.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "studio": "Studio", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "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" + }, + "dashboard": { + "title": "Tableau de bord", + "subtitle": "Aperçu de l'hôtel & statut en direct", + "playersOnline": "Joueurs en ligne", + "articles": "Articles", + "activeBans": "Bannissements actifs", + "database": "Base de données", + "databaseConnected": "Connectée", + "databaseDown": "Indisponible", + "usersByRank": "Utilisateurs par rang", + "noAccountsToBreakDown": "Aucun compte à détailler pour le moment", + "rankLabel": "Rang {rank}", + "rankWithCount": "Rang {rank} : {count} comptes", + "recentStaffActivity": "Activité récente du personnel", + "viewAll": "Voir tout", + "noStaffActivityLogged": "Aucune activité du personnel enregistrée", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "Articles", + "subtitle": "Articles d'actualité — les 50 plus récents", + "newArticle": "+ Nouvel article", + "edit": "Modifier", + "delete": "Supprimer", + "noArticles": "Pas encore d'articles", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer « {title} » ?", + "colTitle": "Titre", + "colSlug": "Slug", + "colAuthor": "Auteur", + "colCreated": "Créé", + "colActions": "Actions", + "form": { + "title": "Titre", + "titlePlaceholder": "Titre de l'article", + "slug": "Slug", + "slugPlaceholder": "slug-url-article", + "category": "Catégorie", + "categoryPlaceholder": "Sélectionnez une catégorie", + "body": "Corps", + "bodyPlaceholder": "Rédigez le contenu de votre article…", + "image": "Image", + "imagePlaceholder": "https://example.com/image.png", + "thumbnail": "Vignette", + "thumbnailPlaceholder": "https://example.com/thumb.png", + "published": "Publié", + "featured": "À la une", + "save": "Enregistrer l'article", + "saving": "Enregistrement…", + "deleteArticle": "Supprimer l'article", + "deleteConfirm": "Cette action est irréversible. L'article sera définitivement supprimé.", + "cancel": "Annuler", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "Étiquettes", + "subtitle": "Étiquettes d'articles / catégories", + "addTag": "Ajouter une étiquette", + "name": "Nom", + "namePlaceholder": "Nom de l'étiquette", + "backgroundColour": "Couleur de fond", + "createTag": "Créer l'étiquette", + "editTag": "Modifier l'étiquette", + "updateTag": "Mettre à jour l'étiquette", + "deleteTag": "Supprimer l'étiquette", + "confirmDelete": "Supprimer « {name} » ?", + "noTags": "Pas encore d'étiquettes", + "colId": "ID", + "colTag": "Étiquette", + "colColour": "Couleur", + "colUsedBy": "Utilisée par", + "colCreated": "Créé", + "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": "Navigateur", + "flatCategories": "Catégories plates", + "publicRooms": "Salons publics", + "addCategory": "Ajouter une catégorie", + "editCategory": "Modifier la catégorie", + "deleteCategory": "Supprimer la catégorie", + "categoryName": "Nom de la catégorie", + "categoryNamePlaceholder": "ex. Salon & Discussion", + "categoryOrder": "Ordre", + "roomName": "Nom du salon", + "roomNamePlaceholder": "ex. Salon d'accueil", + "roomId": "ID du salon", + "roomIdPlaceholder": "ID numérique du salon", + "save": "Enregistrer", + "cancel": "Annuler", + "noCategories": "Pas encore de catégories", + "noPublicRooms": "Pas encore de salons publics", + "colId": "ID", + "colName": "Nom", + "colOrder": "Ordre", + "colRooms": "Salons", + "colActions": "Actions", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Centre d'aide", + "subtitle": "Entrées d'assistance et gestion des FAQ", + "entries": "Entrées", + "newEntry": "+ Nouvelle entrée", + "edit": "Modifier", + "delete": "Supprimer", + "noEntries": "Pas encore d'entrées", + "confirmDelete": "Supprimer « {title} » ?", + "colId": "ID", + "colTitle": "Titre", + "colCategory": "Catégorie", + "colCreated": "Créé", + "colActions": "Actions", + "form": { + "title": "Titre", + "titlePlaceholder": "Titre de l'entrée", + "category": "Catégorie", + "categoryPlaceholder": "Sélectionnez une catégorie", + "body": "Corps", + "bodyPlaceholder": "Rédigez la réponse…", + "save": "Enregistrer l'entrée", + "saving": "Enregistrement…", + "deleteEntry": "Supprimer l'entrée", + "cancel": "Annuler" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Publicités", + "subtitle": "Gérer les publicités et bannières promotionnelles de l'hôtel", + "newAd": "+ Nouvelle pub", + "edit": "Modifier", + "delete": "Supprimer", + "noAds": "Pas encore de publicités", + "confirmDelete": "Supprimer cette publicité ?", + "colId": "ID", + "colName": "Nom", + "colImage": "Image", + "colUrl": "URL", + "colViews": "Vues", + "colStatus": "Statut", + "colCreated": "Créé", + "colActions": "Actions", + "form": { + "name": "Nom", + "namePlaceholder": "Nom de la pub", + "image": "URL de l'image", + "imagePlaceholder": "https://example.com/banner.png", + "url": "URL cible", + "urlPlaceholder": "https://example.com", + "enabled": "Activée", + "save": "Enregistrer la pub", + "saving": "Enregistrement…", + "deleteAd": "Supprimer la pub", + "cancel": "Annuler" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Boîtes modifiables", + "subtitle": "Panneaux de contenu affichés dans l'hôtel et le CMS", + "newBox": "Nouvelle boîte", + "edit": "Modifier", + "delete": "Supprimer", + "noBoxes": "Pas encore de boîtes modifiables", + "confirmDelete": "Supprimer cette boîte ?", + "colId": "ID", + "colName": "Nom", + "colLocation": "Emplacement", + "colUpdated": "Mis à jour", + "colActions": "Actions", + "form": { + "name": "Nom", + "namePlaceholder": "Nom de la boîte", + "location": "Emplacement", + "locationPlaceholder": "ex. accueil, sidebar", + "content": "Contenu", + "contentPlaceholder": "Rédigez le contenu de la boîte…", + "enabled": "Activée", + "save": "Enregistrer la boîte", + "saving": "Enregistrement…", + "deleteBox": "Supprimer la boîte", + "cancel": "Annuler", + "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": "Modération des photos", + "subtitle": "Photos récentes prises dans le jeu", + "delete": "Supprimer", + "approve": "Approuver", + "noPhotos": "Aucune photo à modérer", + "confirmDelete": "Supprimer cette photo définitivement ?", + "colId": "ID", + "colPreview": "Aperçu", + "colUser": "Utilisateur", + "colRoom": "Salon", + "colTimestamp": "Horodatage", + "colActions": "Actions", + "photoAlt": "Photo utilisateur #{id}", + "byUser": "par {username}", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Utilisateurs", + "subtitle": "Parcourir, rechercher et gérer les comptes de l'hôtel", + "search": "Rechercher", + "searchPlaceholder": "Rechercher par nom d'utilisateur, e-mail ou ID…", + "searchResults": "{count, plural, one {# résultat} other {# résultats}} pour « {query} »", + "noResults": "Aucun utilisateur trouvé", + "colId": "ID", + "colUsername": "Nom d'utilisateur", + "colEmail": "E-mail", + "colRank": "Rang", + "colOnline": "En ligne", + "colRegistered": "Inscrit", + "colLastOnline": "Dernière connexion", + "colActions": "Actions", + "yes": "Oui", + "no": "Non", + "edit": "Modifier", + "setRank": "Définir le rang", + "disconnect": "Déconnecter", + "alert": "Alerte", + "ban": "Bannir", + "detail": { + "title": "Utilisateur : {username}", + "subtitle": "Détails du compte et gestion", + "overview": "Aperçu", + "actions": "Actions", + "username": "Nom d'utilisateur", + "email": "E-mail", + "motto": "Devise", + "rank": "Rang", + "credits": "Crédits", + "duckets": "Duckets", + "diamonds": "Diamants", + "online": "En ligne", + "registered": "Inscrit", + "lastOnline": "Dernière connexion", + "ipAddress": "Adresse IP", + "machineId": "ID machine", + "sendAlert": "Envoyer une alerte", + "sendMessage": "Envoyer un message", + "disconnectUser": "Déconnecter l'utilisateur", + "banUser": "Bannir l'utilisateur", + "resetPassword": "Réinitialiser le mot de passe", + "deleteUser": "Supprimer l'utilisateur", + "confirmDelete": "Êtes-vous sûr de vouloir supprimer {username} ? Cette action est irréversible.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Modifier l'utilisateur : {username}", + "subtitle": "Modifier les détails du compte", + "username": "Nom d'utilisateur", + "usernamePlaceholder": "Nom d'utilisateur", + "email": "E-mail", + "emailPlaceholder": "user@example.com", + "motto": "Devise", + "mottoPlaceholder": "Devise de l'utilisateur", + "rank": "Rang", + "credits": "Crédits", + "duckets": "Duckets", + "diamonds": "Diamants", + "save": "Enregistrer les modifications", + "saving": "Enregistrement…", + "cancel": "Annuler" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Bannissements", + "subtitle": "Gérer les bannissements de compte, IP et machine", + "newBan": "Nouveau bannissement", + "edit": "Modifier", + "delete": "Supprimer", + "noBans": "Pas encore de bannissements", + "confirmDelete": "Supprimer ce bannissement ?", + "colId": "ID", + "colValue": "Valeur", + "colType": "Type", + "colReason": "Raison", + "colBannedBy": "Banni par", + "colExpires": "Expire", + "colCreated": "Créé", + "colActions": "Actions", + "form": { + "value": "Valeur", + "valuePlaceholder": "Nom d'utilisateur, IP ou ID machine", + "type": "Type", + "typeUser": "Utilisateur", + "typeIp": "IP", + "typeMachine": "Machine", + "reason": "Raison", + "reasonPlaceholder": "Motif du bannissement", + "expiresAt": "Expire le", + "permanent": "Permanent", + "save": "Enregistrer le bannissement", + "saving": "Enregistrement…", + "cancel": "Annuler" + }, + "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": "Gestion IP", + "subtitle": "Gérer la liste blanche et la liste noire des IP", + "whitelist": "Liste blanche", + "blacklist": "Liste noire", + "addIp": "Ajouter une IP", + "ipAddress": "Adresse IP", + "ipAddressPlaceholder": "ex. 127.0.0.1", + "reason": "Raison", + "reasonPlaceholder": "Motif de l'inscription", + "add": "Ajouter", + "remove": "Retirer", + "confirmRemove": "Retirer cette IP de la {list} ?", + "noWhitelistedIps": "Aucune IP en liste blanche", + "noBlacklistedIps": "Aucune IP en liste noire", + "colIp": "IP", + "colReason": "Raison", + "colAdded": "Ajouté", + "colActions": "Actions", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "Détection VPN / Proxy", + "subtitle": "Configurer les paramètres de détection VPN et proxy", + "enabled": "Activé", + "apiKey": "Clé API", + "apiKeyPlaceholder": "Votre clé API de détection VPN", + "apiKeyHint": "Laisser vide pour désactiver", + "blockOnDetect": "Bloquer à la détection", + "blockOnDetectHint": "Bloquer automatiquement les utilisateurs détectés derrière un VPN ou proxy", + "save": "Enregistrer les paramètres", + "saving": "Enregistrement…", + "settingsSaved": "Paramètres VPN enregistrés avec succès", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Candidatures au personnel", + "subtitle": "Candidatures en attente et examinées", + "pending": "En attente", + "approved": "Approuvée", + "rejected": "Rejetée", + "noApplications": "Pas encore de candidatures", + "colId": "ID", + "colApplicant": "Candidat", + "colPosition": "Poste", + "colStatus": "Statut", + "colSubmitted": "Soumise", + "colActions": "Actions", + "review": "Examiner", + "approve": "Approuver", + "reject": "Rejeter", + "confirmApprove": "Approuver {username} pour {position} ?", + "confirmReject": "Rejeter la candidature de {username} pour {position} ?", + "detail": { + "title": "Candidature de {username}", + "subtitle": "Pour {position}", + "about": "À propos du candidat", + "message": "Message de candidature", + "status": "Statut", + "submitted": "Soumise", + "noMessage": "Aucun message fourni" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Équipes", + "subtitle": "Définir les noms et descriptions des rangs du personnel", + "addRank": "Ajouter un rang", + "editRank": "Modifier le rang", + "deleteRank": "Supprimer le rang", + "noTeams": "Pas encore de définitions de rangs", + "confirmDelete": "Supprimer la définition du rang {id} ?", + "colId": "ID", + "colRank": "Rang", + "colName": "Nom", + "colBadge": "Badge", + "colColour": "Couleur", + "colActions": "Actions", + "form": { + "rankId": "ID du rang", + "rankIdPlaceholder": "ID numérique du rang", + "name": "Nom", + "namePlaceholder": "ex. Administrateur", + "badge": "Code du badge", + "badgePlaceholder": "ex. ADM001", + "colour": "Couleur", + "colourPlaceholder": "ex. #ff0000", + "save": "Enregistrer la définition d'équipe", + "saving": "Enregistrement…", + "cancel": "Annuler" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Permissions", + "subtitle": "Gérer les permissions basées sur les rangs pour le panneau d'administration", + "addPermission": "Ajouter une permission", + "editPermission": "Modifier la permission", + "deletePermission": "Supprimer la permission", + "noPermissions": "Aucune permission configurée pour le moment", + "confirmDelete": "Supprimer cette permission ?", + "colId": "ID", + "colRank": "Rang", + "colPermission": "Permission", + "colCreated": "Créé", + "colActions": "Actions", + "form": { + "rankId": "ID du rang", + "rankIdPlaceholder": "Rang minimum requis", + "permission": "Clé de permission", + "permissionPlaceholder": "ex. admin.articles.manage", + "save": "Enregistrer la permission", + "saving": "Enregistrement…", + "cancel": "Annuler" + } + }, + "catalog": { + "title": "Catalogue", + "subtitle": "Parcourir et gérer les pages et articles du catalogue", + "pages": "Pages", + "items": "Articles", + "addPage": "Ajouter une page", + "editPage": "Modifier la page", + "deletePage": "Supprimer la page", + "addItem": "Ajouter un article", + "editItem": "Modifier l'article", + "deleteItem": "Supprimer l'article", + "noPages": "Pas encore de pages catalogue", + "noItems": "Aucun article sur cette page", + "confirmDeletePage": "Supprimer la page catalogue « {name} » ?", + "confirmDeleteItem": "Supprimer cet article ?", + "colId": "ID", + "colName": "Nom", + "colIcon": "Icône", + "colOrder": "Ordre", + "colItems": "Articles", + "colEnabled": "Activé", + "colActions": "Actions", + "colItemId": "ID article", + "colItemName": "Nom de l'article", + "colCostCredits": "Coût (crédits)", + "colCostPoints": "Coût (points)", + "colLimited": "Limité", + "pageForm": { + "name": "Nom", + "namePlaceholder": "Nom de la page", + "icon": "ID icône", + "iconPlaceholder": "ID numérique de l'icône", + "order": "Ordre", + "enabled": "Activée", + "parent": "Page parente", + "parentNone": "Aucune (racine)", + "save": "Enregistrer la page", + "saving": "Enregistrement…", + "cancel": "Annuler" + }, + "itemForm": { + "itemId": "ID article", + "itemName": "Nom de l'article", + "costCredits": "Coût en crédits", + "costDuckets": "Coût en duckets", + "costDiamonds": "Coût en diamants", + "limitedStack": "Taille du stock limité", + "limitedSold": "Limité vendu", + "save": "Enregistrer l'article", + "saving": "Enregistrement…", + "cancel": "Annuler" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Boutique", + "subtitle": "Gérer les packs et les commandes", + "packages": "Packs", + "orders": "Commandes", + "newPackage": "+ Nouveau pack", + "edit": "Modifier", + "delete": "Supprimer", + "viewOrder": "Voir", + "noPackages": "Pas encore de packs boutique", + "noOrders": "Pas encore de commandes", + "confirmDelete": "Supprimer ce pack ?", + "colId": "ID", + "colName": "Nom", + "colPrice": "Prix", + "colCurrency": "Devise", + "colType": "Type", + "colSold": "Vendu", + "colEnabled": "Activé", + "colActions": "Actions", + "colOrderId": "ID commande", + "colCustomer": "Client", + "colPackage": "Pack", + "colAmount": "Montant", + "colStatus": "Statut", + "colDate": "Date", + "statusPending": "En attente", + "statusCompleted": "Terminée", + "statusRefunded": "Remboursée", + "form": { + "name": "Nom", + "namePlaceholder": "Nom du pack", + "description": "Description", + "descriptionPlaceholder": "Description du pack", + "price": "Prix", + "currency": "Devise", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Type", + "typeCredits": "Crédits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamants", + "typeBadge": "Badge", + "typeFurni": "Meuble", + "typeRank": "Rang", + "amount": "Quantité", + "badgeCode": "Code du badge", + "badgeCodePlaceholder": "ex. VIP001", + "rankId": "ID du rang", + "furniItems": "Articles meubles", + "enabled": "Activé", + "save": "Enregistrer le pack", + "saving": "Enregistrement…", + "cancel": "Annuler", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "Transactions", + "subtitle": "Journal des paiements PayPal", + "noTransactions": "Pas encore de transactions", + "colId": "ID", + "colUser": "Utilisateur", + "colAmount": "Montant", + "colCurrency": "Devise", + "colPackage": "Pack", + "colStatus": "Statut", + "colDate": "Date", + "colActions": "Actions", + "statusCompleted": "Terminée", + "statusPending": "En attente", + "statusFailed": "Échouée", + "statusRefunded": "Remboursée", + "detail": { + "title": "Transaction #{id}", + "paypalId": "ID PayPal", + "payerEmail": "E-mail du payeur", + "grossAmount": "Montant brut", + "fee": "Frais", + "netAmount": "Montant net" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Bons d'achat", + "subtitle": "Gérer les codes de bons échangeables", + "newVoucher": "+ Nouveau bon", + "edit": "Modifier", + "delete": "Supprimer", + "noVouchers": "Pas encore de bons", + "confirmDelete": "Supprimer le bon « {code} » ?", + "colId": "ID", + "colCode": "Code", + "colValue": "Valeur", + "colType": "Type", + "colUses": "Utilisations / Max", + "colExpires": "Expire", + "colCreated": "Créé", + "colActions": "Actions", + "form": { + "code": "Code", + "codePlaceholder": "ex. ETE2025", + "value": "Valeur", + "type": "Type", + "typeCredits": "Crédits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamants", + "typeBadge": "Badge", + "typeFurni": "Meuble", + "typeRank": "Rang", + "badgeCode": "Code du badge", + "badgeCodePlaceholder": "ex. VIP001", + "rankId": "ID du rang", + "maxUses": "Utilisations max", + "maxUsesPlaceholder": "0 = illimité", + "expiresAt": "Expire le", + "enabled": "Activé", + "save": "Enregistrer le bon", + "saving": "Enregistrement…", + "cancel": "Annuler", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Abonnements", + "subtitle": "Abonnements récurrents actifs", + "noSubscriptions": "Aucun abonnement actif", + "cancel": "Résilier", + "confirmCancel": "Résilier l'abonnement de {username} ?", + "colId": "ID", + "colUser": "Utilisateur", + "colPackage": "Pack", + "colAmount": "Montant", + "colInterval": "Intervalle", + "colStarted": "Démarré", + "colNextBilling": "Prochaine facturation", + "colStatus": "Statut", + "colActions": "Actions", + "statusActive": "Actif", + "statusCancelled": "Résilié", + "statusExpired": "Expiré", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Valeurs rares", + "subtitle": "Gérer les catégories de valeurs rares et les prix des articles", + "categories": "Catégories", + "items": "Articles", + "addCategory": "Ajouter une catégorie", + "editCategory": "Modifier la catégorie", + "deleteCategory": "Supprimer la catégorie", + "noCategories": "Pas encore de catégories de valeurs rares", + "confirmDeleteCategory": "Supprimer la catégorie « {name} » et tous ses articles ?", + "colId": "ID", + "colName": "Nom", + "colItems": "Articles", + "colUpdated": "Mis à jour", + "colActions": "Actions", + "colItemName": "Nom de l'article", + "colCredits": "Crédits", + "colPoints": "Points", + "colPointType": "Type de points", + "categoryForm": { + "name": "Nom", + "namePlaceholder": "Nom de la catégorie", + "save": "Enregistrer la catégorie", + "saving": "Enregistrement…", + "cancel": "Annuler" + }, + "itemForm": { + "itemName": "Nom de l'article", + "itemNamePlaceholder": "ex. Trône", + "credits": "Valeur en crédits", + "points": "Valeur en points", + "pointType": "Type de points", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Diamants", + "save": "Enregistrer l'article", + "saving": "Enregistrement…", + "cancel": "Annuler", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Badges", + "subtitle": "Télécharger, attribuer et gérer le catalogue de badges", + "upload": "Télécharger", + "giveBadge": "Attribuer un badge", + "catalogue": "Catalogue", + "uploadTitle": "Télécharger un nouveau badge", + "uploadSubtitle": "Télécharger un fichier image de badge", + "badgeCode": "Code du badge", + "badgeCodePlaceholder": "ex. VIP001", + "badgeFile": "Fichier du badge", + "badgeFileHint": "PNG ou GIF, recommandé 40x40", + "uploadButton": "Choisir un fichier", + "uploading": "Téléchargement…", + "giveTitle": "Attribuer un badge à un utilisateur", + "giveSubtitle": "Accorder un badge à un utilisateur spécifique", + "username": "Nom d'utilisateur", + "usernamePlaceholder": "Nom d'utilisateur cible", + "giveButton": "Attribuer le badge", + "giving": "Attribution…", + "catalogueTitle": "Catalogue des badges", + "catalogueSubtitle": "Tous les badges disponibles dans l'hôtel", + "noBadges": "Aucun badge dans le catalogue", + "search": "Rechercher des badges", + "searchPlaceholder": "Rechercher par code ou nom…", + "colCode": "Code", + "colImage": "Image", + "colName": "Nom", + "colDescription": "Description", + "colActions": "Actions", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Succès", + "subtitle": "Lecture seule de la liste des succès du jeu", + "noAchievements": "Aucun succès configuré", + "colId": "ID", + "colName": "Nom", + "colCategory": "Catégorie", + "colLevels": "Niveaux", + "colReward": "Récompense", + "colProgress": "Progression", + "levelLabel": "Niveau {level}", + "rewardCredits": "{count} crédits", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Campagnes du calendrier", + "subtitle": "Lecture seule de la liste des campagnes et événements du calendrier", + "noCampaigns": "Pas encore de campagnes calendrier", + "colId": "ID", + "colName": "Nom", + "colStart": "Début", + "colEnd": "Fin", + "colType": "Type", + "colReward": "Récompense", + "colActions": "Actions", + "detail": { + "title": "Campagne : {name}", + "subtitle": "Détails de l'événement calendrier", + "days": "Jours", + "dayLabel": "Jour {day}", + "reward": "Récompense", + "noDays": "Aucun jour configuré pour cette campagne", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Modération radio", + "subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).", + "moderation": "Moderation", + "shouts": "Dédicaces", + "applications": "Candidatures", + "schedules": "Programmations", + "settings": "Paramètres", + "embed": "Intégration", + "ranks": "Rangs", + "history": "Historique", + "apiKeys": "Clés API", + "points": "Points", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Surveillance radio", + "subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.", + "stream": "Stream", + "online": "En ligne", + "offline": "Hors ligne", + "notConfigured": "Not configured", + "nowPlaying": "Now playing", + "nowPlayingApi": "Now-playing API", + "listenersApi": "Listeners API", + "listeners": "Auditeurs", + "currentSong": "Chanson en cours", + "bitrate": "Débit", + "status": "Statut", + "noNowPlayingHint": "no now-playing API set", + "noListenersHint": "no listeners API set", + "endpointDiagnostics": "Endpoint diagnostics", + "diagnosticsLegend": "OK : accessible · WARN : non configuré · ERROR : échec de la requête ou délai dépassé.", + "streamUrl": "Stream URL", + "unreachable": "unreachable", + "refresh": "Actualiser" + }, + "user": "User", + "message": "Message", + "posted": "Posted", + "realName": "Real Name", + "age": "Age", + "style": "Style", + "applied": "Applied", + "day": "Day", + "start": "Start", + "end": "End", + "show": "Show", + "status": "Statut", + "active": "active", + "inactive": "inactive", + "hidden": "hidden", + "activeSchedules": "Active schedules", + "noShouts": "Aucune dédicace à modérer", + "noApplications": "No applications submitted.", + "noSchedules": "No schedules configured.", + "deleteShout": "Supprimer", + "confirmDeleteShout": "Supprimer cette dédicace ?", + "pendingApplications": "Candidatures en attente", + "settingsForm": { + "title": "Radio Settings", + "subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "enabled": "Enabled", + "disabled": "Disabled", + "totalKeys": "Total keys", + "configured": "Configured", + "curatedHint": "curated keys with a value", + "customKeys": "Custom keys", + "saveAll": "Save all", + "singleKey": "Add / overwrite a single key", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "value", + "commentPlaceholder": "comment (optional)", + "saveSingle": "Save", + "otherSettings": "Other radio settings", + "dbError": "Could not load settings (database unavailable). Defaults will be created on save." + }, + "embedPage": { + "title": "Radio Embed", + "subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).", + "streamUrl": "Stream URL", + "configured": "Configured", + "missing": "Missing", + "radioName": "Radio name", + "nowPlayingApi": "Now-playing API", + "set": "Set", + "notSet": "Not set", + "noStreamUrl": "No stream URL configured", + "noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.", + "goToSettings": "Go to Radio Settings", + "livePreview": "Live preview", + "livePreviewText": "This is the bare audio player as visitors will see it. Press play to confirm the stream is reachable.", + "source": "Source", + "audioSnippet": "Audio player snippet", + "audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.", + "iframeSnippet": "Iframe wrapper snippet", + "iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.", + "audioUnsupported": "Your browser does not support the audio element." + }, + "banners": { + "title": "Bannières", + "heading": "Radio Banners", + "description": "Promotional banners shown on the radio page, ordered by sort order.", + "addBanner": "Ajouter une bannière", + "createBanner": "Create banner", + "deleteBanner": "Supprimer la bannière", + "noBanners": "No banners yet — add one above.", + "existing": "Existing banners ({count})", + "save": "Save", + "delete": "Delete", + "byUser": "by user {id}", + "active": "active", + "hidden": "hidden", + "bannerAlt": "Radio banner", + "statusActive": "Active", + "statusHidden": "Hidden", + "dbError": "Could not load banners (database unavailable).", + "form": { + "imagePath": "Image path / URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Title", + "description": "Description", + "sortOrder": "Sort order", + "active": "Active" + } + }, + "ranksForm": { + "title": "Rangs radio", + "subtitle": "DJ / staff ranks assignable on radio applications.", + "dbError": "Could not load ranks (database unavailable).", + "active": "Active", + "addRank": "Add rank", + "name": "Name", + "badgeCode": "Badge code", + "description": "Description", + "createRank": "Create rank", + "existing": "Existing ranks ({count})", + "noRanks": "No ranks yet — add one above.", + "activeLabel": "active", + "inactiveLabel": "inactive", + "save": "Save", + "deleteRank": "Delete rank #{id}" + }, + "historyPage": { + "title": "Radio Play History", + "subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.", + "dbError": "Could not load radio history (database unavailable).", + "showsLogged": "Shows logged", + "onAirNow": "On air now", + "uniqueDjs": "Unique DJs", + "peakListeners": "Peak listeners", + "empty": "No radio history recorded yet.", + "showLog": "Show log ({count})", + "colDj": "DJ", + "colShow": "Show", + "colStarted": "Started", + "colEnded": "Ended", + "colAirtime": "Airtime", + "colListeners": "Listeners", + "colNotes": "Notes", + "onAir": "on air" + }, + "apiKeysForm": { + "title": "Clés API", + "subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.", + "dbError": "Could not load API keys (database unavailable).", + "totalKeys": "Total keys", + "active": "Active", + "inactive": "Inactive", + "generateKey": "Générer une nouvelle clé", + "generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.", + "name": "Name", + "namePlaceholder": "AzureCast bridge", + "rateLimit": "Rate limit (requests/min)", + "allowedIps": "Allowed IPs (optional)", + "allowedIpsPlaceholder": "comma-separated, blank = any", + "generate": "Générer", + "existingKeys": "Existing keys ({count})", + "noKeys": "No API keys yet — generate one above.", + "colName": "Name", + "colKey": "Clé", + "colAllowedIps": "Allowed IPs", + "colRateLimit": "Rate limit", + "colLastUsed": "Last used", + "colExpires": "Expires", + "colStatus": "Status", + "colActions": "Actions", + "maskedHint": "Only the first 8 characters are shown", + "any": "any", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete" + }, + "pointsForm": { + "title": "Configuration des points d'écoute", + "subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "saved": "Saved", + "points": "Points", + "enabled": "Enabled", + "disabled": "Disabled", + "perMinute": "Per minute", + "paidIn": "paid in {currency}", + "maxPerDay": "Max / day", + "unlimited": "Unlimited", + "minListeners": "Min listeners", + "settings": "Settings", + "pointsEnabled": "Points enabled", + "pointsEnabledHint": "Master switch for awarding listener points.", + "currency": "Currency", + "currencyHint": "Which wallet the points are paid into.", + "pointsPerMinute": "Points per minute", + "pointsPerMinuteHint": "Amount awarded for each full minute of listening.", + "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", + "minListenersHint": "Points are only awarded when at least this many people are tuned in.", + "save": "Enregistrer les paramètres de points" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.", + "dbError": "Could not load the AutoDJ playlist (database unavailable).", + "tracks": "Tracks", + "active": "Active", + "inactive": "Inactive", + "addTrack": "Add track", + "titlePlaceholder": "Track title", + "artist": "Artist", + "album": "Album", + "artworkUrl": "Artwork URL", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Duration (seconds)", + "durationPlaceholder": "e.g. 215", + "sortOrder": "Sort order", + "playlist": "Playlist ({count})", + "noTracks": "No AutoDJ tracks yet — add one above.", + "colOrder": "Order", + "colTitle": "Title", + "colArtist": "Artist", + "colAlbum": "Album", + "colDuration": "Duration", + "colPlays": "Plays", + "colLastPlayed": "Last played", + "colStatus": "Status", + "colActions": "Actions", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete", + "trackTitle": "Title" + }, + "moderationPage": { + "title": "DJ Moderation", + "subtitle": "Review and remove radio shouts (50 most recent).", + "recentShouts": "Recent Shouts ({count})" + } + }, + "commandocentrum": { + "title": "Commandocentrum", + "subtitle": "Diagnostics, contrôles RCON et gestion des utilisateurs", + "diagnostics": "Diagnostics", + "rcon": "RCON", + "userActions": "Actions utilisateur", + "diagnosticsTitle": "Diagnostics de l'émulateur", + "memoryUsage": "Utilisation mémoire", + "uptime": "Temps de fonctionnement", + "onlineUsers": "Utilisateurs en ligne", + "roomsLoaded": "Salons chargés", + "refresh": "Actualiser", + "rconTitle": "Commandes RCON", + "rconPlaceholder": "Saisir une commande RCON…", + "rconSend": "Envoyer", + "rconSending": "Envoi…", + "rconResponse": "Réponse", + "userActionsTitle": "Actions utilisateur", + "username": "Nom d'utilisateur", + "usernamePlaceholder": "Nom d'utilisateur cible", + "action": "Action", + "execute": "Exécuter", + "actions": { + "disconnect": "Déconnecter", + "alert": "Envoyer une alerte", + "giveCredits": "Donner des crédits", + "giveBadge": "Donner un badge", + "givePoints": "Donner des points", + "ban": "Bannir", + "kick": "Expulser" + }, + "messagePlaceholder": "Message (pour les alertes)…", + "amountPlaceholder": "Montant…", + "badgePlaceholder": "Code du badge…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Configuration de l'émulateur", + "subtitle": "Voir et modifier les paramètres de l'émulateur et les textes de localisation", + "settings": "Paramètres", + "texts": "Textes", + "search": "Rechercher", + "searchPlaceholder": "Rechercher des clés…", + "noSettings": "Aucun paramètre trouvé", + "noTexts": "Aucun texte trouvé", + "edit": "Modifier", + "save": "Enregistrer", + "saving": "Enregistrement…", + "cancel": "Annuler", + "colKey": "Clé", + "colValue": "Valeur", + "colType": "Type", + "colActions": "Actions", + "editDialog": { + "title": "Modifier : {key}", + "value": "Valeur", + "valuePlaceholder": "Saisir la valeur…", + "save": "Enregistrer les modifications", + "cancel": "Annuler" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Alertes", + "subtitle": "Envoyer des alertes à tout l'hôtel et voir les alertes récentes", + "sendAlert": "Envoyer une alerte à l'hôtel", + "recentAlerts": "Alertes récentes ({count})", + "noRecentAlerts": "Aucune alerte récente", + "form": { + "title": "Titre de l'alerte", + "titlePlaceholder": "ex. Maintenance du serveur dans 10 minutes", + "message": "Message d'alerte", + "messagePlaceholder": "Rédigez le message d'alerte…", + "type": "Type", + "typeHotel": "Alerte à tout l'hôtel", + "typeStaff": "Personnel uniquement", + "urgent": "Urgent", + "send": "Envoyer l'alerte", + "sending": "Envoi…", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "ID", + "colTitle": "Titre", + "colSentBy": "Envoyé par", + "colType": "Type", + "colDate": "Date", + "colActions": "Actions", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Activités du personnel", + "subtitle": "Piste d'audit des actions du personnel dans le panneau d'administration", + "noLogs": "Aucune activité du personnel enregistrée", + "colId": "ID", + "colUser": "Utilisateur", + "colAction": "Action", + "colTarget": "Cible", + "colDescription": "Description", + "colIp": "IP", + "colTimestamp": "Horodatage", + "filterByUser": "Filtrer par utilisateur…", + "filterByAction": "Filtrer par action…", + "clearFilters": "Effacer les filtres", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Filtre de mots", + "subtitle": "Gérer les mots et expressions filtrés dans l'hôtel", + "addWord": "Ajouter un mot", + "addWords": "Ajouter des mots", + "noWords": "Aucun mot filtré pour le moment", + "confirmDelete": "Retirer « {word} » du filtre ?", + "colId": "ID", + "colWord": "Mot", + "colAddedBy": "Ajouté par", + "colCreated": "Créé", + "colActions": "Actions", + "form": { + "word": "Mot", + "wordPlaceholder": "ex. grosmot", + "addMore": "Ajouter plusieurs mots (un par ligne)", + "save": "Ajouter au filtre", + "saving": "Enregistrement…", + "cancel": "Annuler" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Mode maintenance", + "subtitle": "Activer ou désactiver la maintenance de tout l'hôtel", + "enabled": "Le mode maintenance est activé", + "disabled": "Le mode maintenance est désactivé", + "enable": "Activer la maintenance", + "disable": "Désactiver la maintenance", + "message": "Message de maintenance", + "messagePlaceholder": "Nous revenons bientôt !", + "staffAccess": "Autoriser l'accès du personnel pendant la maintenance", + "save": "Enregistrer les paramètres", + "saving": "Enregistrement…", + "confirmEnable": "L'activation de la maintenance empêchera tous les utilisateurs non-personnel d'accéder à l'hôtel. Continuer ?", + "confirmDisable": "Désactiver le mode maintenance et restaurer l'accès pour tous les utilisateurs ?", + "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": "Permissions de gouvernance", + "subtitle": "Configurer quels rangs peuvent accéder à quelles sections d'administration", + "addPermission": "Ajouter une permission", + "editPermission": "Modifier la permission", + "deletePermission": "Supprimer la permission", + "noPermissions": "Aucune permission de gouvernance configurée", + "confirmDelete": "Supprimer cette permission ?", + "colId": "ID", + "colRank": "Rang", + "colSection": "Section", + "colActions": "Actions", + "form": { + "rankId": "ID du rang", + "rankIdPlaceholder": "Rang minimum", + "section": "Clé de section", + "sectionPlaceholder": "ex. admin.dashboard", + "save": "Enregistrer la permission", + "saving": "Enregistrement…", + "cancel": "Annuler" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset applied!", + "cleared": "All permissions cleared!", + "invalidRank": "Invalid Rang", + "testDone": "Test done: {count} permissions found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Supprimer ALL permissions? This action cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Permission", + "colDescription": "Description", + "colMinRank": "Min. Rang", + "permissionKey": "Clé de permission", + "minRank": "Min. Rang", + "description": "Description", + "permissions": "Permissions", + "permissionsCount": "{count} permissions", + "permission": "permission", + "highestMinRank": "Highest min. Rang: {rank}", + "totalMinRank": "Total min. Rang sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Rangs", + "missingDeps": "{count} missing dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(missing)", + "rank": "Rang", + "count": "Count", + "searchPermission": "Rechercher permissions…", + "search": "Rechercher", + "manage": "Manage", + "importSelection": "Importer selection", + "noGroup": "Non group", + "allGroups": "All groups", + "perGroup": "Permissions per group", + "perRank": "Permissions per Rang", + "rankOverviewHint": "All permissions grouped by the Rang they are assigned to.", + "tabOverview": "Aperçu", + "tabManage": "Manage", + "tabImport": "Importer / Export", + "tabRanks": "Rang Aperçu", + "tabPresets": "Préréglages", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "Importer permissions", + "importHint": "Paste a JSON array of permission objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "Importer", + "exportTitle": "Export permissions", + "exportHint": "Export all permissions as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Permission Préréglages", + "presetsHint": "Appliquer a predefined set of permissions for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Modération tools: Utilisateur lookup, Bannissements, CFH handling, chat Journaux.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Utilisateurs, Salons, news, Paramètres, Boutique, events, radio & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including permission management and asset Importer.", + "applyPreset": "Appliquer preset", + "clearAll": "Clear all permissions", + "testTitle": "Test Rang access", + "testHint": "Enter a Rang number to see which permissions would be granted.", + "test": "Test", + "auditTitle": "Permission audit log", + "auditHint": "All changes to Gouvernance permissions are logged.", + "auditLogsAt": "Audit Journaux are available on the Audit log page.", + "viewAuditLogs": "Voir audit Journaux", + "importedWithErrors": "Imported {count} permissions with {errors} errors", + "confirmClearAllDesc": "This will Retirer every permission entry from the Base de données. Are you sure?", + "confirmDeletePermission": "Supprimer this permission permanently?", + "confirmBulkDelete": "Supprimer {count} selected permissions?", + "deleteSelected": "Supprimer {count} selected", + "cancel": "Annuler", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Utilisateur", + "auditAction": "Action", + "auditTarget": "Cible", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Salons", + "subtitle": "Rechercher et gérer les salons de l'hôtel", + "search": "Rechercher", + "searchPlaceholder": "Rechercher par nom, propriétaire ou ID…", + "searchResults": "{count, plural, one {# salon} other {# salons}} trouvé(s) pour « {query} »", + "noResults": "Aucun salon trouvé", + "colId": "ID", + "colName": "Nom", + "colOwner": "Propriétaire", + "colUsers": "Utilisateurs", + "colState": "État", + "colCategory": "Catégorie", + "colCreated": "Créé", + "colActions": "Actions", + "stateOpen": "Ouvert", + "stateClosed": "Fermé", + "stateLocked": "Verrouillé", + "stateInvisible": "Invisible", + "detail": { + "title": "Salon : {name}", + "subtitle": "Appartient à {owner}", + "overview": "Aperçu", + "actions": "Actions", + "description": "Description", + "noDescription": "Aucune description", + "owner": "Propriétaire", + "users": "Utilisateurs en ligne", + "maxUsers": "Utilisateurs max", + "category": "Catégorie", + "state": "État", + "tags": "Étiquettes", + "noTags": "Aucune étiquette", + "created": "Créé", + "deleteRoom": "Supprimer le salon", + "confirmDelete": "Supprimer le salon « {name} » ? Cette action est irréversible.", + "enterRoom": "Entrer dans le salon", + "changeOwner": "Changer le propriétaire", + "changeOwnerPlaceholder": "Nom du nouveau propriétaire" + } + }, + "emailTemplates": { + "title": "Modèles d'e-mail", + "subtitle": "Gérer les modèles d'e-mail transactionnels", + "newTemplate": "+ Nouveau modèle", + "edit": "Modifier", + "delete": "Supprimer", + "noTemplates": "Pas encore de modèles d'e-mail", + "confirmDelete": "Supprimer le modèle « {name} » ?", + "colId": "ID", + "colName": "Nom", + "colSubject": "Objet", + "colKey": "Clé", + "colUpdated": "Mis à jour", + "colActions": "Actions", + "form": { + "name": "Nom", + "namePlaceholder": "ex. E-mail de bienvenue", + "key": "Clé", + "keyPlaceholder": "ex. email_bienvenue", + "subject": "Objet", + "subjectPlaceholder": "Ligne d'objet de l'e-mail", + "body": "Corps (HTML)", + "bodyPlaceholder": "

Cher/Chère {username},

", + "variables": "Variables disponibles", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Enregistrer le modèle", + "saving": "Enregistrement…", + "cancel": "Annuler", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Thème", + "subtitle": "Personnaliser l'apparence du CMS", + "presets": "Préréglages", + "colours": "Couleurs", + "css": "CSS", + "presetsTitle": "Préréglages de thème", + "presetsSubtitle": "Choisir un jeu de couleurs prédéfini", + "applyPreset": "Appliquer", + "presetApplied": "Préréglage appliqué: {preset}", + "customiseTitle": "Couleurs personnalisées", + "primary": "Primaire", + "secondary": "Secondaire", + "accent": "Accent", + "background": "Arrière-plan", + "surface": "Surface", + "text": "Texte", + "saveColours": "Enregistrer les couleurs", + "savingColours": "Enregistrement…", + "cssTitle": "CSS personnalisé", + "cssSubtitle": "Ajouter du CSS personnalisé pour surcharger les styles du thème", + "cssPlaceholder": "/* Votre CSS personnalisé ici */", + "saveCss": "Enregistrer le CSS", + "savingCss": "Enregistrement…", + "reset": "Réinitialiser aux valeurs par défaut", + "confirmReset": "Réinitialiser le thème aux valeurs par défaut ?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Médiathèque", + "subtitle": "Télécharger et gérer les fichiers médias", + "upload": "Télécharger", + "uploadTitle": "Télécharger un fichier", + "uploadSubtitle": "Glisser-déposer ou cliquer pour télécharger", + "uploadButton": "Choisir un fichier", + "uploading": "Téléchargement…", + "noFiles": "Pas encore de fichiers médias", + "delete": "Supprimer", + "confirmDelete": "Supprimer ce fichier définitivement ?", + "search": "Rechercher", + "searchPlaceholder": "Rechercher par nom de fichier…", + "colPreview": "Aperçu", + "colName": "Nom", + "colSize": "Taille", + "colType": "Type", + "colUploaded": "Téléchargé", + "colActions": "Actions", + "copyUrl": "Copier l'URL", + "urlCopied": "URL copiée dans le presse-papier" + }, + "settings": { + "title": "Paramètres CMS", + "subtitle": "Gérer la configuration clé/valeur du CMS", + "addSetting": "Ajouter un paramètre", + "edit": "Modifier", + "delete": "Supprimer", + "noSettings": "Aucun paramètre trouvé", + "confirmDelete": "Supprimer le paramètre « {key} » ?", + "colKey": "Clé", + "colValue": "Valeur", + "colUpdated": "Mis à jour", + "colActions": "Actions", + "form": { + "key": "Clé", + "keyPlaceholder": "ex. hotel_name", + "value": "Valeur", + "valuePlaceholder": "Valeur du paramètre", + "save": "Enregistrer le paramètre", + "saving": "Enregistrement…", + "cancel": "Annuler" + }, + "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." + }, + "favicon": { + "title": "Favicon", + "subtitle": "Upload and manage the site favicon", + "current": "Current favicon", + "uploadLabel": "Upload favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.", + "upload": "Upload", + "uploading": "Uploading…", + "delete": "Remove", + "deleting": "Removing…", + "saved": "Favicon saved successfully!", + "deleted": "Favicon removed successfully!", + "error": "Something went wrong", + "confirmDelete": "Remove the favicon? The site will no longer show a custom favicon.", + "generator": { + "title": "Generate favicon", + "text": "Text", + "bgColor": "Background color", + "textColor": "Text color", + "rounded": "Rounded corners", + "save": "Save as favicon" + }, + "cancel": "Cancel" + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Accueil", + "reload": "Recharger", + "fullscreen": "Plein écran", + "logout": "Déconnexion", + "onlineUsers": "Utilisateurs en ligne", + "emulatorOnline": "Émulateur en ligne", + "emulatorOffline": "Émulateur hors ligne", + "dragToMove": "Glissez pour déplacer", + "hide": "Masquer la barre", + "fullscreenExit": "Quitter le plein écran", + "show": "Afficher la barre", + "emulatorUnknown": "État de l'émulateur inconnu" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Diagnostic des fichiers", + "preliminary": "Vérification préliminaire des adresses ; le contenu sera validé à l’importation.", + "http": "HTTP {status}", + "network": "Échec de la connexion", + "timeout": "La source n’a pas répondu à temps", + "invalidResponse": "La source a renvoyé une page web au lieu d’un fichier", + "available": "Fichier trouvé ; validation en attente", + "recover": "Joindre l’original et reprendre", + "recoveryHint": "Choisissez {file} (50 MB maximum). Son identité est vérifiée. Les éléments échoués sont relancés ; les imports terminés sont conservés.", + "attach": "Choisir le fichier .nitro original", + "working": "Validation ou reprise en cours...", + "attached": "Fichier original correspondant joint", + "resume": "Reprendre les imports échoués avec ce fichier", + "invalidFile": "Choisissez un .nitro original correspondant de 50 MB maximum et réessayez.", + "resumeError": "Actualisez l’historique et utilisez la dernière tentative ; vérifiez le fichier et réessayez.", + "mismatchedFile": "Ce fichier appartient à un autre meuble.", + "alreadyStarted": "La reprise a déjà commencé. Actualisez l’historique et utilisez la dernière tentative.", + "notEligible": "Cet élément ne permet pas la récupération par pièce jointe." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/hr.json b/src/messages/hr.json index ad3e1010..aea63104 100644 --- a/src/messages/hr.json +++ b/src/messages/hr.json @@ -1,3918 +1,4913 @@ { - "draftRecovery": { - "ready": "Kopija za oporavak čuvat će se u ovom pregledniku 7 dana.", - "saved": "Kopija za oporavak spremljena je u ovom pregledniku na 7 dana.", - "unavailable": "Oporavak u pregledniku nije dostupan. Ostavi ovu stranicu otvorenom dok se promjene ne spreme.", - "found": "U ovom pregledniku dostupna je kopija za oporavak, spremljena", - "restore": "Vrati kopiju iz preglednika", - "discard": "Izbriši kopiju iz preglednika", - "confirmRestore": "Zamijeniti trenutačni obrazac kopijom iz preglednika? Provjeri sadržaj prije spremanja.", - "confirmDiscard": "Izbrisati ovu kopiju iz preglednika? Trenutačni obrazac ostat će nepromijenjen." - }, - "nav": { - "home": "Dom", - "community": "zajednica", - "articles": "Članci", - "photos": "Fotografije", - "staff": "Osoblje", - "rankings": "rangiranje", - "guilds": "Cehovi", - "leaderboards": "Ploče s najboljim rezultatima", - "rareValues": "Rijetke vrijednosti", - "shop": "Trgovina", - "market": "tržište", - "assistance": "Pomoć", - "helpCenter": "Centar za pomoć", - "myTickets": "Moje karte", - "badges": "Značke", - "radio": "radio", - "friends": "Prijatelji", - "messages": "Poruke", - "admin": "Administrator", - "openMenu": "Otvori izbornik", - "closeMenu": "Zatvori izbornik", - "drawBadge": "Nacrtajte značku", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} online", - "nitroClient": "Nitro klijent", - "tagline": "Internetski virtualni svijet u kojem možete stvoriti vlastiti avatar, sklapati prijateljstva, razgovarati, stvarati sobe i još mnogo toga!", - "login": "Prijava", - "or": "ili", - "createAccount": "Napravi račun" - }, - "footer": { - "copyright": "© {year} - {hotel} je neprofitni obrazovni projekt" - }, - "pages": { - "staff": { - "title": "Osoblje", - "subtitle": "Tim koji stoji iza hotela", - "ranksTitle": "Činovi", - "ranksSubtitle": "O čemu svaki dio tima brine", - "membersTitle": "Članovi tima", - "membersEmptySubtitle": "Trenutno nema nikoga za pokazati", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "Nema članova osoblja za pokazati.", - "colUsername": "Korisničko ime", - "colRank": "rang", - "colMotto": "Moto" - }, - "leaderboard": { - "title": "Leaderboard", - "subtitle": "20 najboljih igrača prema {currency}", - "tab_credits": "Zasluge", - "tab_diamonds": "Dijamanti", - "tab_duckets": "Duckets", - "tab_achievement": "Postignuća", - "tab_respects": "Poštovanje", - "tab_onlinetime": "Online vrijeme", - "emptyState": "Još nema rangiranja za prikaz.", - "colAvatar": "Avatar", - "colPlayer": "Igrač" - }, - "friends": { - "title": "Prijatelji", - "emptySubtitle": "Još nemate dodanih prijatelja", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Dodajte prijatelje u hotel i oni će se pojaviti ovdje.", - "noMotto": "Bez mota", - "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": "Poruke", - "subtitle": "Zahtjevi za prijateljstvo i offline poruke čekaju na vas", - "requestsTitle": "Zahtjevi za prijateljstvo", - "requestsEmptySubtitle": "Još nitko nije tražio da bude tvoj prijatelj", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "Nema neriješenih zahtjeva za prijateljstvo.", - "wantsToBeFriend": "želi biti tvoj prijatelj.", - "accept": "Prihvati", - "offlineTitle": "Offline poruke", - "offlineEmptySubtitle": "Vaš inbox je prazan", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "Nemate nijednu izvanmrežnu poruku.", - "unknownUser": "Korisnik #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Bez mota", - "statRank": "rang", - "statCredits": "Zasluge", - "statRegistered": "Registriran", - "badgesTitle": "Značke", - "badgesEmpty": "Još nema bedževa.", - "photosTitle": "Fotografije", - "photosEmpty": "Još nema fotografija.", - "guestbookTitle": "Knjiga gostiju", - "guestbookSubtitle": "Poruke na zidu korisnika {username}", - "leaveMessage": "Ostavite poruku", - "guestbookPlaceholder": "Napišite nešto u knjigu gostiju korisnika {username}…", - "post": "Post", - "loginToPost": "Prijavite se da biste ostavili poruku u knjizi gostiju.", - "guestbookEmpty": "Još nema unosa u knjigu gostiju.", - "unknownUser": "Korisnik #{id}", - "statDuckets": "Duckets", - "statDiamonds": "Dijamanti", - "walletTitle": "Novčanik", - "friendsTitle": "Prijatelji", - "friendsSubtitle": "Ljudi u hotelu s kojima se druže", - "friendsEmpty": "Nema prijatelja za pokazati.", - "roomsTitle": "Sobe", - "roomsSubtitle": "Sobe koje posjeduju", - "roomsEmpty": "Nema soba za pokazati.", - "roomUntitled": "Soba bez naslova", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "rangiranje", - "subtitle": "Prvih 12 igrača poredanih po kreditima", - "emptyState": "Još nema igrača za rangiranje." - }, - "home": { - "welcome": "Dobro došli u {hotelName}", - "welcomeSubtitle": "Vaš retro hotel, sada pokreće Next.js", - "welcomeBody": "Družite se, skupljajte namještaj i upoznajte prijatelje.", - "enterHotel": "Unesite {hotelName}", - "onlineFriends": "Online prijatelji", - "noFriendsOnline": "Nema prijatelja na mreži", - "register": "REGISTRIRAJTE SE SADA", - "joinNow": "Pridružite se {hotelName} danas!", - "recentUsers": "Nedavni korisnici", - "recentPhotos": "Najnovije fotografije", - "latestNews": "Najnovije vijesti", - "newsTitle": "Najnovije vijesti", - "newsSubtitle": "Svježe iz hotela", - "allNews": "Sve novosti →", - "allUsers": "Zajednica →", - "noArticles": "Još nema članaka.", - "noPhotos": "Još nema fotografija.", - "noUsers": "Nema korisnika na mreži", - "latestArticle": "Najnoviji članak", - "latestUsers": "Najnoviji građani ({count} ukupno)", - "statsOnline": "Online", - "statsCitizens": "Građani", - "statsRooms": "Sobe", - "statsArticles": "Članci", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Stvori svoj jedinstveni izgled", - "featuresFurniture": "Namještaj", - "featuresFurnitureDesc": "Uredi sobe predmetima", - "featuresCommunity": "Zajednica", - "featuresCommunityDesc": "Stvori prijatelje i čavrljaj", - "featuresGames": "Igre", - "featuresGamesDesc": "Natječi se i zabavi" - }, - "news": { - "title": "Vijesti", - "subtitle": "Najnovije najave, događaji i novosti iz hotela", - "noArticles": "Još nema članaka." - }, - "article": { - "backToNews": "← Vijesti", - "reactionsTitle": "Reakcije", - "reactionsSubtitle": "Recite nam što mislite", - "reaction": { - "like": "Sviđa mi se", - "love": "ljubavi", - "wow": "Vau" - }, - "removeReaction": "Kliknite da uklonite svoju reakciju", - "reactWith": "Reagirajte s {reaction}", - "noReactions": "Još nema reakcija.", - "logIn": "Prijavite se", - "toReact": "reagirati.", - "commentsTitle": "Komentari", - "commentsSubtitle": "Pridružite se razgovoru", - "commentsCount": "{count} do sada", - "noComments": "Još nema komentara. Budite prvi koji će komentirati.", - "userNumber": "Korisnik #{id}", - "addComment": "Dodajte komentar", - "commentPlaceholder": "Napišite svoj komentar…", - "postComment": "Objavite komentar", - "toComment": "ostaviti komentar.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Fotografije", - "subtitle": "Najnovije fotografije snimljene u hotelu", - "noPhotos": "Još nema fotografija.", - "photoAlt": "Fotografija korisnika #{id}", - "byUser": "korisnik #{id}" - }, - "badges": { - "title": "Značke", - "subtitle": "Značke koje možete zaraditi i pokazati po hotelu", - "noBadges": "Još nema dostupnih bedževa." - }, - "community": { - "title": "zajednica", - "subtitle": "Sve što se događa oko hotela na jednom mjestu", - "open": "Otvori →", - "links": { - "rankings": { - "title": "rangiranje", - "text": "Pogledajte najbogatije igrače u hotelu, rangirane prema kreditima." - }, - "staff": { - "title": "Osoblje", - "text": "Upoznajte tim koji svakodnevno održava rad hotela." - }, - "news": { - "title": "Vijesti", - "text": "Najnovije najave, događaji i ažuriranja." - }, - "photos": { - "title": "Fotografije", - "text": "Snimke koje dijeli zajednica iz cijelog hotela." - }, - "guilds": { - "title": "Cehovi", - "text": "Pregledajte grupe koje su igrači stvorili i kojima su se pridružili." - }, - "leaderboards": { - "title": "Ploče s najboljim rezultatima", - "text": "Tko je na vrhu ove sezone u statistici hotela." - } - } - }, - "guilds": { - "title": "Cehovi", - "subtitle": "Pregledajte grupe koje su igrači stvorili i kojima su se pridružili", - "empty": "Još nema cehova.", - "unnamedGuild": "Neimenovani ceh", - "noDescription": "Nema opisa" - }, - "guild": { - "allGuilds": "← Svi cehovi", - "unnamedGuild": "Neimenovani ceh", - "noDescription": "Nema opisa", - "memberSingular": "član", - "memberPlural": "članovi", - "founded": "Osnovano", - "forumLink": "Forum →", - "discussion": "Rasprava", - "membersTitle": "članovi", - "memberLowerSingular": "član", - "memberLowerPlural": "članova", - "noMembers": "Nema članova.", - "owner": "Vlasnik", - "noMotto": "Bez mota" - }, - "guildForum": { - "backToGuild": "← Povratak na ceh", - "unnamedGuild": "Neimenovani ceh", - "forumTitle": "{guild} — Forum", - "threadSingular": "nit", - "threadPlural": "niti", - "newThread": "+ Nova nit", - "empty": "Još nema niti na ovom forumu.", - "colSubject": "Predmet", - "colAuthor": "Autor", - "colPosts": "Postovi", - "colDate": "Datum", - "noSubject": "(bez predmeta)", - "pinned": "Prikvačeno", - "locked": "Zaključano", - "userNumber": "Korisnik #{id}", - "unknown": "Nepoznato", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Povratak na forum", - "unnamedGuild": "Neimenovani ceh", - "title": "Nova nit", - "subtitle": "na forumu {guild}", - "subjectLabel": "Predmet", - "subjectPlaceholder": "Tema teme", - "messageLabel": "Poruka", - "messagePlaceholder": "Napišite svoj uvodni post...", - "postThread": "Objavi nit", - "cancel": "Odustani", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Trgovina", - "subtitle": "Nadopunite svoj račun i zgrabite ekskluzivne pakete, valutu i značke.", - "browsingCategory": "Pregledavanje paketa {category}.", - "all": "sve", - "allPackages": "Svi paketi", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "Trenutačno nema dostupnih paketa.", - "buy": "Kupiti", - "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": "Nadoplatite PayPal", - "subtitle": "Plaćajte sigurno s PayPal-om i vaši krediti se dodaju u trenutku kada se plaćanje izvrši.", - "cancelled": "Odjava je otkazana — plaćanje nije izvršeno.", - "chooseAmount": "Odaberite iznos", - "notConfiguredPre": "PayPal još nije konfiguriran. Administrator treba postaviti", - "notConfiguredAnd": "i", - "notConfiguredOptional": "(i po izboru", - "notConfiguredPost": "za sandbox naspram uživo).", - "balanceTitle": "Vaša ravnoteža", - "signedInAs": "Prijavljeni ste kao {username}", - "credits": "Zasluge", - "creditsPerUnit": "Krediti po 1,00 {currency}", - "rateLine": "Dobivate {amount} kredita za 1,00 {currency}. Krediti se pojavljuju u igri sljedeći put kada se prijavite." - }, - "marketplace": { - "title": "Tržnica", - "subtitle": "Pregledajte namještaj i rijetke predmete koje su popisali igrači. Popisi se postavljaju u igri i ažuriraju uživo — idite u hotel da napravite ponudu.", - "activeOffers": "Aktivne ponude", - "sellers": "Prodavači", - "totalValue": "Ukupna vrijednost", - "activeListings": "Aktivni oglasi", - "mostRecentFirst": "Najnoviji prvi na popisu", - "empty": "Trenutačno nema aktivnih ponuda na tržištu. Provjerite kasnije.", - "colOffer": "ponuda", - "colItem": "Stavka", - "colSeller": "Prodavač", - "colPrice": "Cijena", - "colListed": "Na popisu", - "itemLabel": "Stavka #{id}", - "userLabel": "Korisnik #{id}", - "justNow": "upravo sada", - "minutesAgo": "Prije {count} min", - "hoursAgo": "Prije {count} h", - "daysAgo": "Prije {count} d" - }, - "rares": { - "title": "Rijetke vrijednosti", - "subtitle": "Dobijte pregled svih rijetkih sadržaja u hotelu, grupiranih po kategorijama.", - "empty": "Trenutno nemamo ovdje navedenih rijetkih proizvoda.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Pogledajte rijetke →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Sve rijetko", - "empty": "U ovoj kategoriji još nema rijetkih proizvoda.", - "colRare": "Rijetko", - "colCredits": "Zasluge", - "colCurrency": "valuta", - "creditsValue": "{value} kredita", - "duckets": "Duckets", - "diamonds": "Dijamanti", - "credits": "Zasluge" - }, - "redeem": { - "title": "Iskoristite vaučer", - "subtitle": "Imate kod kupona? Unesite ga ispod kako biste dodali nagradu na svoj račun.", - "enterCode": "Unesite svoj kod", - "oncePerAccount": "Svaki vaučer može se iskoristiti samo jednom po računu.", - "balanceTitle": "Vaša ravnoteža", - "signedInAs": "Prijavljeni ste kao {username}", - "credits": "Zasluge", - "instantCredit": "Iskorištene nagrade odmah se pripisuju i pojavljuju se u igri sljedeći put kada se prijavite." - }, - "help": { - "title": "Centar za pomoć", - "subtitle": "Pronađite vodiče, teme podrške i hotelska pravila — sve što vam je potrebno za pomoć.", - "myTickets": "Moje karte →", - "topicsTitle": "Teme podrške", - "topicsSubtitle": "Pregledajte vodiče i odgovore na uobičajena pitanja", - "topicsEmpty": "Još nema tema za pomoć.", - "rulesTitle": "Pravila hotela", - "rulesSubtitle": "Molimo vas da ih pročitate prije druženja u hotelu", - "rulesEmpty": "Još nema objavljenih pravila.", - "categoryEmpty": "U ovoj kategoriji nema pravila." - }, - "helpCategory": { - "back": "← Centar za pomoć", - "topicSubtitle": "Tema centra za pomoć", - "moreTitle": "Više tema za pomoć", - "moreSubtitle": "Prijeđite na drugu temu podrške" - }, - "helpTickets": { - "title": "Pomoć Ulaznice", - "subtitle": "Pošaljite kartu osoblju i pratite svoje otvorene zahtjeve.", - "statTotal": "Ukupno ulaznica", - "statOpen": "Otvoreno", - "statClosed": "Zatvoreno", - "newTitle": "Nova karta", - "newSubtitle": "Opišite svoj problem i osoblje će vam odgovoriti", - "subjectPlaceholder": "Predmet", - "contentPlaceholder": "Opišite svoj problem…", - "submit": "Predajte kartu", - "listTitle": "Vaše ulaznice", - "listSubtitle": "Svaki zahtjev koji ste poslali osoblju", - "listEmpty": "Još nemate ulaznica.", - "colId": "ID", - "colSubject": "Predmet", - "colStatus": "Status", - "colCreated": "Stvoreno", - "statusOpen": "Otvoreno", - "statusClosed": "Zatvoreno", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Prijavite se za osoblje {hotel}", - "subtitle": "Svako malo otvaramo prijave za osoblje. Ako naiđete na poziciju za koju mislite da biste se savršeno uklopili, nemojte se ustručavati prijaviti se za nju.", - "noPositionsTitle": "Nema otvorenih pozicija", - "noPositionsBody": "Trenutno nema otvorenih pozicija. Molimo vas da se vratite kasnije da provjerite imamo li slobodnih mjesta do tada. Hvala vam na interesu.", - "noDeadline": "Nije postavljen rok", - "deadline": "Rok za prijavu: {date}", - "alreadyApplied": "Već ste se prijavili za {rank}", - "aboutYou": "O tebi", - "aboutPlaceholder": "Recite nam zašto biste bili izvrstan {rank}…", - "applyFor": "Prijavite se za {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": "Prijavite se za {hotel} tim", - "subtitle": "Povremeno otvaramo timske prijave. Ako vidite tim koji vam odgovara, nemojte se ustručavati prijaviti se!", - "noPositionsTitle": "Nema otvorenih timskih pozicija", - "noPositionsBody": "Trenutno nema otvorenih timskih pozicija. Vratite se kasnije da provjerite ima li novih radnih mjesta. Hvala!", - "pending": "Vaša prijava je na čekanju", - "aboutYou": "O tebi", - "aboutPlaceholder": "Recite nam zašto bi baš vama odgovarao {rank}…", - "applyFor": "Prijavite se za {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": "Uključite hotelski radio — DJ setovi uživo, zahtjevi i dovikivanje.", - "nowPlaying": "Sada svira", - "nothingPlaying": "Trenutačno se ništa ne reproducira.", - "onAir": "U eteru: {dj}", - "noDj": "Nema DJ-a u eteru.", - "audioUnsupported": "Vaš preglednik ne podržava audio element.", - "streamOffline": "Stream je trenutno izvan mreže.", - "exploreTitle": "Istražite radio", - "exploreSubtitle": "Raspored, povici, zahtjevi i više", - "linkSchedule": "Raspored", - "linkScheduleText": "Naš tjedni sastav DJ-a i nastupa.", - "linkShouts": "Uzvici", - "linkShoutsText": "Pozivi i zahtjevi zajednice.", - "linkRequests": "Zahtjevi", - "linkRequestsText": "Zamolite DJ-a da zavrti vašu omiljenu pjesmu.", - "linkApply": "Prijavi se kao DJ", - "linkApplyText": "Pridružite se timu i krenite u eter.", - "linkLeaderboard": "Leaderboard", - "linkLeaderboardText": "Najbolji slušatelji rangirani prema zarađenim bodovima.", - "todayTitle": "Današnji raspored", - "todayTitleWithDay": "Današnji raspored · {day}", - "todaySubtitle": "Što je danas u eteru", - "fullWeek": "Cijeli tjedan →", - "noShowsToday": "Nema zakazanih predstava za danas.", - "colTime": "Vrijeme", - "colShow": "pokazati", - "colDj": "DJ", - "untitledShow": "Emisija bez naslova", - "userNumber": "Korisnik #{id}" - }, - "radioSchedule": { - "title": "Raspored radija", - "subtitle": "Naš tjedni sastav DJ-a i nastupa", - "empty": "Još nema zakazanih predstava.", - "colDay": "dan", - "colTime": "Vrijeme", - "colDj": "DJ", - "colShow": "pokazati", - "noShows": "Nema predstava" - }, - "radioShouts": { - "title": "Radio uzvici", - "subtitle": "Pozivi i zahtjevi zajednice", - "postTitle": "Objavite krik", - "postSubtitle": "Pošaljite poruku DJ-u u eteru", - "messageLabel": "Vaša poruka", - "messagePlaceholder": "Pozovite DJ-a...", - "shoutButton": "vikati", - "loginToPost": "Prijavite se da biste objavili shout.", - "latestTitle": "Najnoviji uzvici", - "latestSubtitle": "Najnovije poruke slušatelja", - "empty": "Još nema povika. Budite prvi!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Radijska natjecanja", - "subtitle": "Uključite se i sudjelujte u našim najnovijim natjecanjima u eteru", - "empty": "Još nema natječaja.", - "contestLabel": "Natječaj #{id}", - "dateUnknown": "Datum nepoznat" - }, - "radioGiveaways": { - "title": "Radio pokloni", - "subtitle": "Poslušajte svoju priliku za dobitak u našim radio darivanjima", - "empty": "Još nema poklona.", - "giveawayLabel": "Podijela #{id}", - "dateUnknown": "Datum nepoznat" - }, - "radioLeaderboard": { - "title": "Ploča s najboljim slušateljima radija", - "subtitle": "Top 50 slušatelja po bodovima zarađenim slušanjem radija", - "empty": "Još nema slušateljskih bodova za prikaz.", - "colRank": "rang", - "colAvatar": "Avatar", - "colListener": "Slušatelj", - "colPoints": "Bodovi" - }, - "radioRequests": { - "formTitle": "Pošaljite zahtjev", - "formSubtitle": "Zamolite DJ-a da pusti vašu omiljenu pjesmu", - "songLabel": "pjesma", - "songPlaceholder": "Naslov pjesme", - "artistLabel": "Umjetnik", - "artistPlaceholder": "Ime umjetnika (nije obavezno)", - "submitButton": "Pošalji zahtjev", - "loginToRequest": "Prijavite se za slanje zahtjeva.", - "latestTitle": "Nedavni zahtjevi", - "latestSubtitle": "Najnovije tražene pjesme", - "empty": "Još nema zahtjeva.", - "colSong": "pjesma", - "colArtist": "Umjetnik", - "colRequester": "Podnositelj zahtjeva", - "colDate": "Datum", - "colStatus": "Status", - "statusPending": "Na čekanju", - "statusApproved": "Odobreno", - "statusPlayed": "Igrano", - "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": "Prijavite se za radio DJ-a", - "subtitle": "Recite nam nešto o sebi i zašto biste se odlično uklopili u eter", - "latestTitle": "Vaša najnovija aplikacija", - "statusLabel": "Status:", - "submittedOn": "· poslano {date}", - "submitAgain": "Možete ga ponovno poslati ispod ako su se vaši podaci promijenili.", - "formTitle": "Obrazac za prijavu", - "formSubtitle": "Sva polja označena kao obavezna moraju biti popunjena", - "realNameLabel": "Pravo ime", - "realNamePlaceholder": "Vaše puno ime", - "ageLabel": "Dob", - "availabilityLabel": "Dostupnost", - "availabilityPlaceholder": "Koje dane i sate možete emitirati?", - "musicStyleLabel": "Glazbeni stil", - "musicStylePlaceholder": "npr. House, pop, hip-hop", - "experienceLabel": "Iskustvo", - "optional": "(neobavezno)", - "experiencePlaceholder": "Ima li prethodnog iskustva s DJ-em ili hostingom?", - "motivationLabel": "Motivacija", - "motivationPlaceholder": "Zašto se želiš pridružiti radijskom timu?", - "submitButton": "Pošaljite prijavu", - "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": "Postavke računa", - "accountSettingsSubtitle": "Upravljajte svojim profilom, sigurnošću i povezanim računima", - "publicProfile": "Vaš javni profil", - "noMotto": "Bez mota", - "noEmail": "Nema e-pošte u evidenciji", - "changeMotto": "Promjena mota", - "changeMottoSubtitle": "Ažurira se odmah u igri ako ste na mreži", - "mottoPlaceholder": "Vaš moto", - "saveMotto": "Save moto", - "securityTitle": "Sigurnost", - "securitySubtitle": "Dvofaktorska autentifikacija", - "securityDescription": "Dodajte drugi sloj zaštite svom računu.", - "twoFactorLink": "Dvofaktorska autentifikacija" - }, - "settings2fa": { - "backToSettings": "← Postavke", - "title": "Dvofaktorska autentifikacija", - "subtitle": "Dodajte drugi sloj sigurnosti pomoću aplikacije za autentifikaciju", - "nowEnabled": "2FA je sada omogućen. 🔒", - "disabledNotice": "2FA je onemogućen.", - "badCode": "Taj kod nije valjan — pokušajte ponovo.", - "noAppKeyPrefix": "2FA nije dostupan do", - "noAppKeyMiddle": "je konfiguriran (isti Laravel", - "noAppKeySuffix": "dok instalirate AtomCMS, tako da postojeće tajne ostaju čitljive).", - "isEnabled": "2FA je omogućen", - "onYourAccount": "na vašem računu.", - "disable": "Onemogući 2FA", - "scanOrEnter": "Skenirajte ili unesite ovaj ključ", - "scanInstructions": "Dodajte ovo u Google Authenticator / Authy, zatim unesite 6-znamenkasti kod za potvrdu.", - "manualKey": "Ručni ključ:", - "codePlaceholder": "6-znamenkasti kod", - "confirm": "Potvrdi", - "enableIntro": "Dodajte drugi sloj sigurnosti pomoću aplikacije za autentifikaciju.", - "enable": "Omogućite 2FA" - }, - "title": "Povezani računi", - "subtitle": "Povežite društveni račun kako biste se mogli prijaviti jednim klikom", - "connected": "Povezan", - "unavailable": "Nedostupan", - "login": { - "title": "Prijavite se", - "subtitle": "Dobrodošli nazad — prijavite se za ulazak u hotel.", - "subtitle2fa": "Unesite 6-znamenkasti kod iz autentifikatora.", - "usernamePlaceholder": "Korisničko ime", - "passwordPlaceholder": "Lozinka", - "codePlaceholder": "2FA kod", - "pleaseWait": "Molimo pričekajte…", - "verify": "Potvrdi", - "signIn": "Prijavite se", - "or": "ili", - "noAccount": "Nemate račun?", - "createOne": "Stvorite jedan", - "forgotPassword": "Zaboravili ste lozinku?", - "errorInvalidCredentials": "Nevažeće korisničko ime ili lozinka", - "errorInvalid2fa": "Nevažeći 2FA kod", - "welcomeBack": "Dobrodošao natrag", - "welcomeBackSub": "Prijavi se za nastavak u {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Napravi račun", - "subtitle": "Pridružite se hotelu - potreban je samo trenutak.", - "username": "Korisničko ime", - "email": "E-mail", - "password": "Lozinka", - "confirmPassword": "Ponovi lozinku", - "usernamePlaceholder": "Korisničko ime", - "emailPlaceholder": "E-mail", - "passwordPlaceholder": "Lozinka (najmanje 6 znakova)", - "confirmPasswordPlaceholder": "Ponovi lozinku", - "selectOutfit": "Odaberite svoju odjeću", - "termsAccept": "Imam 18+ godina i prihvaćam odredbe i pravila hotela {hotel}.", - "createAccount": "Napravi račun", - "creatingAccount": "Izrada računa...", - "redirecting": "Preusmjeravanje na vaš račun...", - "alreadyHaveAccount": "Već imate račun? Prijava!", - "register": "Registrirajte se", - "termsError": "Za registraciju morate prihvatiti uvjete i pravila.", - "usernameError": "Korisničko ime je potrebno.", - "emailError": "Potrebna je valjana adresa e-pošte.", - "passwordError": "Lozinka mora imati najmanje 6 znakova.", - "confirmPasswordError": "Lozinke se ne podudaraju.", - "termsRequired": "Morate prihvatiti uvjete i pravila.", - "usernameRequired": "Korisničko ime je potrebno.", - "emailRequired": "Email je obavezan.", - "passwordRequired": "Lozinka je obavezna.", - "passwordsDontMatch": "Lozinke se ne podudaraju.", - "alreadyHaveAccountPre": "Već imaš račun?", - "alreadyHaveAccountLink": "Prijavi se", - "whoIsOnline": "Tko je online", - "usersOnline": "{count} online" - }, - "forgot": { - "title": "Resetiraj lozinku", - "subtitle": "E-poštom ćemo vam poslati sigurnu vezu za postavljanje nove lozinke.", - "sentNotice": "Ako je ta e-pošta registrirana, poslana je veza za poništavanje. Provjerite svoju pristiglu poštu.", - "emailPlaceholder": "Vaš email", - "sendResetLink": "Pošalji link za resetiranje", - "backToLogin": "Natrag na prijavu", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Postavite novu lozinku", - "subtitle": "Odaberite jaku lozinku koju ne koristite drugdje.", - "passwordPlaceholder": "Nova lozinka (najmanje 6 znakova)", - "resetPassword": "Resetiraj lozinku", - "backToLogin": "Natrag na prijavu" - }, - "verify": { - "verifiedTitle": "Sve je spremno", - "verifiedSubtitle": "Email potvrđen", - "verifiedBody": "Vaša email adresa je potvrđena. Sada se možete prijaviti i igrati.", - "goToLogin": "Idi na prijavu", - "alreadyTitle": "Već provjereno", - "alreadySubtitle": "Ne preostaje ništa za napraviti", - "alreadyBody": "Ova email adresa je već potvrđena.", - "unavailableTitle": "Pokušajte ponovo uskoro", - "unavailableSubtitle": "Poslužitelj nedostupan", - "unavailableBody": "Nismo uspjeli doći do poslužitelja kako bismo potvrdili vašu e-poštu. Pokušajte ponovo s vezom za trenutak.", - "invalidTitle": "Potvrda e-pošte", - "invalidSubtitle": "Veza je nevažeća ili je istekla", - "invalidBody": "Ova veza za potvrdu nije važeća. Provjerite jeste li otvorili cijelu vezu iz svoje e-pošte ili zatražite novu.", - "backToLogin": "Natrag na prijavu" - }, - "banned": { - "title": "Zabranjeni ste", - "subtitle": "Račun obustavljen", - "body": "Vaš račun je suspendiran iz hotela.", - "reasonLabel": "razlog:", - "permanent": "Ova zabrana je trajna.", - "expires": "Istječe {date}.", - "contactStaff": "Ako mislite da je ovo pogreška, kontaktirajte tim osoblja." - }, - "maintenance": { - "title": "{hotel} je u fazi održavanja", - "subtitle": "Uskoro se vraćamo", - "staffCanLogIn": "Osoblje se još uvijek može prijaviti." - }, - "admin": { - "nav": { - "overview": "Pregled", - "dashboard": "Nadzorna ploča", - "content": "Sadržaj", - "articles": "Članci", - "tags": "oznake", - "navigator": "Navigator", - "helpCenter": "Centar za pomoć", - "advertisements": "Oglasi", - "writeableBoxes": "Kutije za pisanje", - "photos": "Fotografije", - "tickets": "Ulaznice", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Korisnici i pristup", - "users": "Korisnici", - "bans": "Zabrane", - "ipManagement": "IP upravljanje", - "vpn": "VPN", - "applications": "Prijave", - "teams": "Timovi", - "permissions": "Dozvole", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Gospodarstvo", - "catalog": "Katalog", - "shop": "Trgovina", - "transactions": "Transakcije", - "vouchers": "Vaučeri", - "subscriptions": "Pretplate", - "rareValues": "Rijetke vrijednosti", - "badges": "Značke", - "achievements": "Postignuća", - "calendar": "Kalendar", - "radio": "radio", - "radioHistory": "Povijest radija", - "radioBanners": "Transparenti", - "radioEmbed": "Ugraditi", - "radioApiKeys": "API ključevi", - "radioModeration": "Umjerenost", - "radioSettings": "postavke", - "radioMonitoring": "Praćenje", - "radioPoints": "Bodovi", - "radioRanks": "Činovi", - "radioAutodj": "Auto DJ", - "system": "sustav", - "commandocentrum": "Commandocentrum", - "emulator": "Emulator", - "alerts": "upozorenja", - "logs": "Dnevnici", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Filter riječi", - "maintenance": "Održavanje", - "rooms": "Sobe", - "emailTemplates": "Predlošci e-pošte", - "theme": "Tema", - "media": "Mediji", - "favicon": "Favicon", - "sounds": "Zvukovi", - "translations": "Prijevodi", - "import": "uvoz", - "settings": "postavke", - "backToSite": "Povratak na stranicu", - "housekeeping": "Domaćinstvo", - "hotelManagementPanel": "Upravljačka ploča hotela", - "rankLabel": "Rang {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Nadzorna ploča", - "subtitle": "Pregled hotela i status uživo", - "playersOnline": "Igrači online", - "articles": "Članci", - "activeBans": "Aktivne zabrane", - "database": "Baza podataka", - "databaseConnected": "Povezan", - "databaseDown": "dolje", - "usersByRank": "Korisnici prema rangu", - "noAccountsToBreakDown": "Još nema računa za raščlambu", - "rankLabel": "Rang {rank}", - "rankWithCount": "Rang {rank}: {count} računa", - "recentStaffActivity": "Nedavna aktivnost osoblja", - "viewAll": "Pogledaj sve", - "noStaffActivityLogged": "Još nije zabilježena aktivnost osoblja" - }, - "articles": { - "title": "Članci", - "subtitle": "Novinski članci — 50 najnovijih", - "newArticle": "+ Novi članak", - "edit": "Uredi", - "delete": "Izbriši", - "noArticles": "Još nema članaka", - "confirmDelete": "Jeste li sigurni da želite izbrisati \"{title}\"?", - "colTitle": "Naslov", - "colSlug": "Puž", - "colAuthor": "Autor", - "colCreated": "Stvoreno", - "colActions": "Radnje", - "form": { - "title": "Naslov", - "titlePlaceholder": "Naslov članka", - "slug": "Puž", - "slugPlaceholder": "članak-url-slug", - "category": "Kategorija", - "categoryPlaceholder": "Odaberite kategoriju", - "body": "Tijelo", - "bodyPlaceholder": "Napišite sadržaj svog članka...", - "image": "Slika", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Sličica", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Objavljeno", - "featured": "Istaknuto", - "save": "Spremi članak", - "saving": "Spremanje...", - "deleteArticle": "Izbriši članak", - "deleteConfirm": "Ova se radnja ne može poništiti. Članak će biti trajno uklonjen.", - "cancel": "Odustani", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "oznake", - "subtitle": "Oznake / kategorije članaka", - "addTag": "Dodaj oznaku", - "name": "Ime", - "namePlaceholder": "Naziv oznake", - "backgroundColour": "Boja pozadine", - "createTag": "Stvori oznaku", - "editTag": "Uredi oznaku", - "updateTag": "Ažuriraj oznaku", - "deleteTag": "Izbriši oznaku", - "confirmDelete": "Izbrisati \"{name}\"?", - "noTags": "Još nema oznaka", - "colId": "ID", - "colTag": "Oznaka", - "colColour": "Boja", - "colUsedBy": "Koristi ga", - "colCreated": "Stvoreno", - "colActions": "Radnje" - }, - "navigation": { - "title": "Navigator", - "flatCategories": "Ravne kategorije", - "publicRooms": "Javne prostorije", - "addCategory": "Dodajte kategoriju", - "editCategory": "Uredi kategoriju", - "deleteCategory": "Izbriši kategoriju", - "categoryName": "Naziv kategorije", - "categoryNamePlaceholder": "npr. Opustite se i razgovarajte", - "categoryOrder": "Red", - "roomName": "Ime sobe", - "roomNamePlaceholder": "npr. Salon dobrodošlice", - "roomId": "ID sobe", - "roomIdPlaceholder": "Numerički ID sobe", - "save": "spremiti", - "cancel": "Odustani", - "noCategories": "Još nema kategorija", - "noPublicRooms": "Još nema javnih prostorija", - "colId": "ID", - "colName": "Ime", - "colOrder": "Red", - "colRooms": "Sobe", - "colActions": "Radnje" - }, - "helpCenter": { - "title": "Centar za pomoć", - "subtitle": "Unosi podrške i upravljanje FAQ-om", - "entries": "Upisi", - "newEntry": "+ Novi unos", - "edit": "Uredi", - "delete": "Izbriši", - "noEntries": "Još nema unosa", - "confirmDelete": "Izbrisati \"{title}\"?", - "colId": "ID", - "colTitle": "Naslov", - "colCategory": "Kategorija", - "colCreated": "Stvoreno", - "colActions": "Radnje", - "form": { - "title": "Naslov", - "titlePlaceholder": "Naslov unosa", - "category": "Kategorija", - "categoryPlaceholder": "Odaberite kategoriju", - "body": "Tijelo", - "bodyPlaceholder": "Napiši odgovor…", - "save": "Spremi unos", - "saving": "Spremanje...", - "deleteEntry": "Izbriši unos", - "cancel": "Odustani" - } - }, - "ads": { - "title": "Oglasi", - "subtitle": "Upravljajte hotelskim oglasima i promotivnim natpisima", - "newAd": "+ Novi oglas", - "edit": "Uredi", - "delete": "Izbriši", - "noAds": "Još nema reklama", - "confirmDelete": "Izbrisati ovaj oglas?", - "colId": "ID", - "colName": "Ime", - "colImage": "Slika", - "colUrl": "URL", - "colViews": "Pogledi", - "colStatus": "Status", - "colCreated": "Stvoreno", - "colActions": "Radnje", - "form": { - "name": "Ime", - "namePlaceholder": "Naziv oglasa", - "image": "URL slike", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Ciljani URL", - "urlPlaceholder": "https://example.com", - "enabled": "Omogućeno", - "save": "Spremi oglas", - "saving": "Spremanje...", - "deleteAd": "Izbriši oglas", - "cancel": "Odustani" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Kutije za pisanje", - "subtitle": "Ploče sa sadržajem prikazane u hotelu i CMS-u", - "newBox": "Nova kutija", - "edit": "Uredi", - "delete": "Izbriši", - "noBoxes": "Još nema kutija za pisanje", - "confirmDelete": "Izbrisati ovaj okvir?", - "colId": "ID", - "colName": "Ime", - "colLocation": "Lokacija", - "colUpdated": "Ažurirano", - "colActions": "Radnje", - "form": { - "name": "Ime", - "namePlaceholder": "Naziv kutije", - "location": "Lokacija", - "locationPlaceholder": "npr. početna stranica, bočna traka", - "content": "Sadržaj", - "contentPlaceholder": "Napišite sadržaj kutije…", - "enabled": "Omogućeno", - "save": "Kutija za spremanje", - "saving": "Spremanje...", - "deleteBox": "Okvir za brisanje", - "cancel": "Odustani" - } - }, - "photos": { - "title": "Moderacija fotografije", - "subtitle": "Najnovije fotografije kamere u igri", - "delete": "Izbriši", - "approve": "odobriti", - "noPhotos": "Nema fotografija za moderiranje", - "confirmDelete": "Želite li trajno izbrisati ovu fotografiju?", - "colId": "ID", - "colPreview": "Pregled", - "colUser": "Korisnik", - "colRoom": "Soba", - "colTimestamp": "Vremenska oznaka", - "colActions": "Radnje", - "photoAlt": "Korisnička fotografija #{id}", - "byUser": "od {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Korisnici", - "subtitle": "Pregledavajte, pretražujte i upravljajte hotelskim računima", - "search": "Traži", - "searchPlaceholder": "Pretraživanje po korisničkom imenu, e-pošti ili ID-u…", - "searchResults": "{count, plural, one {# result} other {# results}} za \"{query}\"", - "noResults": "Nema pronađenih korisnika", - "colId": "ID", - "colUsername": "Korisničko ime", - "colEmail": "E-mail", - "colRank": "rang", - "colOnline": "Online", - "colRegistered": "Registriran", - "colLastOnline": "Zadnji put online", - "colActions": "Radnje", - "yes": "da", - "no": "br", - "edit": "Uredi", - "setRank": "Postavi rang", - "disconnect": "Prekini vezu", - "alert": "uzbuna", - "ban": "zabrana", - "detail": { - "title": "Korisnik: {username}", - "subtitle": "Podaci o računu i upravljanje", - "overview": "Pregled", - "actions": "Radnje", - "username": "Korisničko ime", - "email": "E-mail", - "motto": "Moto", - "rank": "rang", - "credits": "Zasluge", - "duckets": "Duckets", - "diamonds": "Dijamanti", - "online": "Online", - "registered": "Registriran", - "lastOnline": "Zadnji put online", - "ipAddress": "IP adresa", - "machineId": "ID stroja", - "sendAlert": "Pošalji upozorenje", - "sendMessage": "Pošalji poruku", - "disconnectUser": "Odspojite korisnika", - "banUser": "Ban korisnika", - "resetPassword": "Resetiraj lozinku", - "deleteUser": "Izbriši korisnika", - "confirmDelete": "Jeste li sigurni da želite izbrisati {username}? Ovo se ne može poništiti.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Uredi korisnika: {username}", - "subtitle": "Izmijenite detalje računa", - "username": "Korisničko ime", - "usernamePlaceholder": "Korisničko ime", - "email": "E-mail", - "emailPlaceholder": "korisnik@primjer.com", - "motto": "Moto", - "mottoPlaceholder": "Moto korisnika", - "rank": "rang", - "credits": "Zasluge", - "duckets": "Duckets", - "diamonds": "Dijamanti", - "save": "Spremite promjene", - "saving": "Spremanje...", - "cancel": "Odustani" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Zabrane", - "subtitle": "Upravljajte zabranama računa, IP-a i računala", - "newBan": "Nova zabrana", - "edit": "Uredi", - "delete": "Izbriši", - "noBans": "Još nema zabrana", - "confirmDelete": "Ukloniti ovu zabranu?", - "colId": "ID", - "colValue": "Vrijednost", - "colType": "Vrsta", - "colReason": "razum", - "colBannedBy": "Zabranio", - "colExpires": "ističe", - "colCreated": "Stvoreno", - "colActions": "Radnje", - "form": { - "value": "Vrijednost", - "valuePlaceholder": "Korisničko ime, IP ili ID stroja", - "type": "Vrsta", - "typeUser": "Korisnik", - "typeIp": "IP", - "typeMachine": "Stroj", - "reason": "razum", - "reasonPlaceholder": "Razlog zabrane", - "expiresAt": "Istječe u", - "permanent": "Trajna", - "save": "Spremi zabranu", - "saving": "Spremanje...", - "cancel": "Odustani" - } - }, - "ip": { - "title": "IP upravljanje", - "subtitle": "Upravljajte popisom dopuštenih i crnih IP adresa", - "whitelist": "Popis dopuštenih", - "blacklist": "Crna lista", - "addIp": "Dodaj IP", - "ipAddress": "IP adresa", - "ipAddressPlaceholder": "npr. 127.0.0.1", - "reason": "razum", - "reasonPlaceholder": "Razlog uvrštavanja na popis", - "add": "Dodaj", - "remove": "Ukloniti", - "confirmRemove": "Ukloniti ovu IP adresu s {list}?", - "noWhitelistedIps": "Nema IP adresa na bijelom popisu", - "noBlacklistedIps": "Nema IP adresa na crnoj listi", - "colIp": "IP", - "colReason": "razum", - "colAdded": "Dodano", - "colActions": "Radnje" - }, - "vpn": { - "title": "VPN / Proxy otkrivanje", - "subtitle": "Konfigurirajte postavke otkrivanja VPN-a i proxyja", - "enabled": "Omogućeno", - "apiKey": "API ključ", - "apiKeyPlaceholder": "Vaš API ključ za otkrivanje VPN-a", - "apiKeyHint": "Ostavite prazno za onemogućavanje", - "blockOnDetect": "Blokiraj pri otkrivanju", - "blockOnDetectHint": "Automatski blokirajte korisnike otkrivene iza VPN-a ili proxyja", - "save": "Spremi postavke", - "saving": "Spremanje...", - "settingsSaved": "VPN postavke uspješno su spremljene" - }, - "applications": { - "title": "Prijave osoblja", - "subtitle": "Prijave osoblja na čekanju i pregledane", - "pending": "Na čekanju", - "approved": "Odobreno", - "rejected": "Odbijen", - "noApplications": "Još nema prijava", - "colId": "ID", - "colApplicant": "Podnositelj zahtjeva", - "colPosition": "Pozicija", - "colStatus": "Status", - "colSubmitted": "Poslano", - "colActions": "Radnje", - "review": "pregled", - "approve": "odobriti", - "reject": "Odbiti", - "confirmApprove": "Želite li odobriti {username} za {position}?", - "confirmReject": "Odbiti prijavu korisnika {username} za {position}?", - "detail": { - "title": "Prijava od {username}", - "subtitle": "Za {position}", - "about": "O podnositelju zahtjeva", - "message": "Poruka aplikacije", - "status": "Status", - "submitted": "Poslano", - "noMessage": "Nije navedena poruka" - } - }, - "teams": { - "title": "Timovi", - "subtitle": "Definirajte imena i opise činova osoblja", - "addRank": "Dodajte rang", - "editRank": "Uredi poredak", - "deleteRank": "Izbriši rang", - "noTeams": "Još nema definicija ranga", - "confirmDelete": "Izbrisati definiciju ranga {id}?", - "colId": "ID", - "colRank": "rang", - "colName": "Ime", - "colBadge": "Značka", - "colColour": "Boja", - "colActions": "Radnje", - "form": { - "rankId": "ID ranga", - "rankIdPlaceholder": "Brojčani ID ranga", - "name": "Ime", - "namePlaceholder": "npr. Administrator", - "badge": "Šifra značke", - "badgePlaceholder": "npr. ADM001", - "colour": "Boja", - "colourPlaceholder": "npr. #ff0000", - "save": "Spremi definiciju tima", - "saving": "Spremanje...", - "cancel": "Odustani" - } - }, - "permissions": { - "title": "Dozvole", - "subtitle": "Upravljajte dopuštenjima na temelju ranga za administrativnu ploču", - "addPermission": "Dodaj dopuštenje", - "editPermission": "Dozvola za uređivanje", - "deletePermission": "Brisanje dopuštenja", - "noPermissions": "Još nema konfiguriranih dopuštenja", - "confirmDelete": "Izbrisati ovu dozvolu?", - "colId": "ID", - "colRank": "rang", - "colPermission": "Dozvola", - "colCreated": "Stvoreno", - "colActions": "Radnje", - "form": { - "rankId": "ID ranga", - "rankIdPlaceholder": "Potreban minimalni rang", - "permission": "Ključ dopuštenja", - "permissionPlaceholder": "npr. admin.članci.upravljati", - "save": "Spremi dopuštenje", - "saving": "Spremanje...", - "cancel": "Odustani" - } - }, - "catalog": { - "title": "Katalog", - "subtitle": "Pregledajte i upravljajte kataloškim stranicama i artiklima", - "pages": "Stranice", - "items": "Predmeti", - "addPage": "Dodaj stranicu", - "editPage": "Uredi stranicu", - "deletePage": "Izbriši stranicu", - "addItem": "Dodaj stavku", - "editItem": "Uredi stavku", - "deleteItem": "Izbriši stavku", - "noPages": "Još nema stranica kataloga", - "noItems": "Nema stavki na ovoj stranici", - "confirmDeletePage": "Izbrisati stranicu kataloga \"{name}\"?", - "confirmDeleteItem": "Izbrisati ovu stavku?", - "colId": "ID", - "colName": "Ime", - "colIcon": "Ikona", - "colOrder": "Red", - "colItems": "Predmeti", - "colEnabled": "Omogućeno", - "colActions": "Radnje", - "colItemId": "ID stavke", - "colItemName": "Naziv artikla", - "colCostCredits": "Trošak (krediti)", - "colCostPoints": "Cijena (bodovi)", - "colLimited": "ograničeno", - "pageForm": { - "name": "Ime", - "namePlaceholder": "Naziv stranice", - "icon": "ID ikone", - "iconPlaceholder": "ID numeričke ikone", - "order": "Red", - "enabled": "Omogućeno", - "parent": "Matična stranica", - "parentNone": "Ništa (root)", - "save": "Spremi stranicu", - "saving": "Spremanje...", - "cancel": "Odustani" - }, - "itemForm": { - "itemId": "ID stavke", - "itemName": "Naziv artikla", - "costCredits": "Trošak u kreditima", - "costDuckets": "Cijena u patkama", - "costDiamonds": "Cijena u dijamantima", - "limitedStack": "Ograničena veličina hrpe", - "limitedSold": "Ograničeno prodano", - "save": "Spremi stavku", - "saving": "Spremanje...", - "cancel": "Odustani" - }, - "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." - } - }, - "shop": { - "title": "Trgovina", - "subtitle": "Upravljajte paketima i narudžbama", - "packages": "Paketi", - "orders": "Narudžbe", - "newPackage": "+ Novi paket", - "edit": "Uredi", - "delete": "Izbriši", - "viewOrder": "pogled", - "noPackages": "Još nema paketa za trgovinu", - "noOrders": "Još nema narudžbi", - "confirmDelete": "Izbrisati ovaj paket?", - "colId": "ID", - "colName": "Ime", - "colPrice": "Cijena", - "colCurrency": "valuta", - "colType": "Vrsta", - "colSold": "prodano", - "colEnabled": "Omogućeno", - "colActions": "Radnje", - "colOrderId": "ID narudžbe", - "colCustomer": "Kupac", - "colPackage": "Paket", - "colAmount": "Iznos", - "colStatus": "Status", - "colDate": "Datum", - "statusPending": "Na čekanju", - "statusCompleted": "Završeno", - "statusRefunded": "Vraćeno", - "form": { - "name": "Ime", - "namePlaceholder": "Naziv paketa", - "description": "Opis", - "descriptionPlaceholder": "Opis paketa", - "price": "Cijena", - "currency": "valuta", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Vrsta", - "typeCredits": "Zasluge", - "typeDuckets": "Duckets", - "typeDiamonds": "Dijamanti", - "typeBadge": "Značka", - "typeFurni": "Namještaj", - "typeRank": "rang", - "amount": "Iznos", - "badgeCode": "Šifra značke", - "badgeCodePlaceholder": "npr. VIP001", - "rankId": "ID ranga", - "furniItems": "Predmeti namještaja", - "enabled": "Omogućeno", - "save": "Spremi paket", - "saving": "Spremanje...", - "cancel": "Odustani" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Transakcije", - "subtitle": "PayPal dnevnik plaćanja", - "noTransactions": "Još nema transakcija", - "colId": "ID", - "colUser": "Korisnik", - "colAmount": "Iznos", - "colCurrency": "valuta", - "colPackage": "Paket", - "colStatus": "Status", - "colDate": "Datum", - "colActions": "Radnje", - "statusCompleted": "Završeno", - "statusPending": "Na čekanju", - "statusFailed": "nije uspjelo", - "statusRefunded": "Vraćeno", - "detail": { - "title": "Transakcija #{id}", - "paypalId": "PayPal ID", - "payerEmail": "Email platitelja", - "grossAmount": "Bruto iznos", - "fee": "naknada", - "netAmount": "Neto iznos" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Kupujte bonove", - "subtitle": "Upravljajte kodovima vaučera koji se mogu iskoristiti", - "newVoucher": "+ Novi vaučer", - "edit": "Uredi", - "delete": "Izbriši", - "noVouchers": "Još nema kupona", - "confirmDelete": "Izbrisati vaučer \"{code}\"?", - "colId": "ID", - "colCode": "Šifra", - "colValue": "Vrijednost", - "colType": "Vrsta", - "colUses": "Upotreba / Maks", - "colExpires": "ističe", - "colCreated": "Stvoreno", - "colActions": "Radnje", - "form": { - "code": "Šifra", - "codePlaceholder": "npr. LJETO2025", - "value": "Vrijednost", - "type": "Vrsta", - "typeCredits": "Zasluge", - "typeDuckets": "Duckets", - "typeDiamonds": "Dijamanti", - "typeBadge": "Značka", - "typeFurni": "Namještaj", - "typeRank": "rang", - "badgeCode": "Šifra značke", - "badgeCodePlaceholder": "npr. VIP001", - "rankId": "ID ranga", - "maxUses": "Max koristi", - "maxUsesPlaceholder": "0 = neograničeno", - "expiresAt": "Istječe u", - "enabled": "Omogućeno", - "save": "Sačuvaj vaučer", - "saving": "Spremanje...", - "cancel": "Odustani", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Pretplate", - "subtitle": "Aktivne ponavljajuće pretplate", - "noSubscriptions": "Nema aktivnih pretplata", - "cancel": "Odustani", - "confirmCancel": "Otkazati pretplatu za {username}?", - "colId": "ID", - "colUser": "Korisnik", - "colPackage": "Paket", - "colAmount": "Iznos", - "colInterval": "Interval", - "colStarted": "Započelo", - "colNextBilling": "Sljedeća naplata", - "colStatus": "Status", - "colActions": "Radnje", - "statusActive": "Aktivno", - "statusCancelled": "Otkazano", - "statusExpired": "isteklo" - }, - "rareValues": { - "title": "Rijetke vrijednosti", - "subtitle": "Upravljajte rijetkim vrijednosnim kategorijama i cijenama predmeta", - "categories": "kategorije", - "items": "Predmeti", - "addCategory": "Dodajte kategoriju", - "editCategory": "Uredi kategoriju", - "deleteCategory": "Izbriši kategoriju", - "noCategories": "Još nema rijetkih vrijednosnih kategorija", - "confirmDeleteCategory": "Izbrisati kategoriju \"{name}\" i sve njezine stavke?", - "colId": "ID", - "colName": "Ime", - "colItems": "Predmeti", - "colUpdated": "Ažurirano", - "colActions": "Radnje", - "colItemName": "Naziv artikla", - "colCredits": "Zasluge", - "colPoints": "Bodovi", - "colPointType": "Vrsta točke", - "categoryForm": { - "name": "Ime", - "namePlaceholder": "Naziv kategorije", - "save": "Spremi kategoriju", - "saving": "Spremanje...", - "cancel": "Odustani" - }, - "itemForm": { - "itemName": "Naziv artikla", - "itemNamePlaceholder": "npr. Prijestolje", - "credits": "Vrijednost kredita", - "points": "Vrijednost bodova", - "pointType": "Vrsta točke", - "pointTypeDuckets": "Duckets", - "pointTypeDiamonds": "Dijamanti", - "save": "Spremi stavku", - "saving": "Spremanje...", - "cancel": "Odustani" - } - }, - "badges": { - "title": "Značke", - "subtitle": "Učitajte, dajte i upravljajte katalogom bedževa", - "upload": "Upload", - "giveBadge": "Dajte značku", - "catalogue": "Katalog", - "uploadTitle": "Prenesi novu značku", - "uploadSubtitle": "Prenesite datoteku slike značke", - "badgeCode": "Šifra značke", - "badgeCodePlaceholder": "npr. VIP001", - "badgeFile": "Datoteka značke", - "badgeFileHint": "PNG ili GIF, preporučeno 40x40", - "uploadButton": "Upload", - "uploading": "Prijenos…", - "giveTitle": "Dajte bedž korisniku", - "giveSubtitle": "Dodijelite bedž određenom korisniku", - "username": "Korisničko ime", - "usernamePlaceholder": "Ciljano korisničko ime", - "giveButton": "Dajte značku", - "giving": "Davanje…", - "catalogueTitle": "Katalog znački", - "catalogueSubtitle": "Sve dostupne značke u hotelu", - "noBadges": "Nema bedževa u katalogu", - "search": "Značke za pretraživanje", - "searchPlaceholder": "Traži po šifri ili nazivu…", - "colCode": "Šifra", - "colImage": "Slika", - "colName": "Ime", - "colDescription": "Opis", - "colActions": "Radnje" - }, - "achievements": { - "title": "Postignuća", - "subtitle": "Popis postignuća u igri samo za čitanje", - "noAchievements": "Nema konfiguriranih postignuća", - "colId": "ID", - "colName": "Ime", - "colCategory": "Kategorija", - "colLevels": "Razine", - "colReward": "Nagrada", - "colProgress": "napredak", - "levelLabel": "Razina {level}", - "rewardCredits": "{count} kredita", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Kalendarske kampanje", - "subtitle": "Popis kalendarskih kampanja i događaja samo za čitanje", - "noCampaigns": "Još nema kalendarskih kampanja", - "colId": "ID", - "colName": "Ime", - "colStart": "Start", - "colEnd": "Kraj", - "colType": "Vrsta", - "colReward": "Nagrada", - "colActions": "Radnje", - "detail": { - "title": "Kampanja: {name}", - "subtitle": "Detalji događaja u kalendaru", - "days": "dana", - "dayLabel": "dan {day}", - "reward": "Nagrada", - "noDays": "Za ovu kampanju nisu konfigurirani dani" - } - }, - "radio": { - "title": "Radio moderiranje", - "subtitle": "Najnoviji oglasi, prijave DJ-a i rasporedi emitiranja (25 najnovijih od svakog).", - "moderation": "Umjerenost", - "shouts": "Uzvici", - "applications": "Prijave", - "schedules": "Rasporedi", - "settings": "postavke", - "embed": "Ugraditi", - "ranks": "Činovi", - "history": "Povijest", - "apiKeys": "API ključevi", - "points": "Bodovi", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Radio nadzor", - "subtitle": "Proba uživo samo za čitanje konfiguriranih radijskih krajnjih točaka (radio_now_playing_api_url, radio_listeners_api_url). Svaki zahtjev ne uspijeva meko s vremenskim ograničenjem {timeout} — podaci se ne upisuju. Konfigurirajte URL-ove pod Postavkama.", - "stream": "Stream", - "online": "Online", - "offline": "Izvan mreže", - "notConfigured": "Nije konfigurirano", - "nowPlaying": "Sada svira", - "nowPlayingApi": "API koji se sada igra", - "listenersApi": "API slušatelja", - "listeners": "Slušatelji", - "currentSong": "Aktualna pjesma", - "bitrate": "Bitrate", - "status": "Status", - "noNowPlayingHint": "nema postavljenog API-ja koji se sada igra", - "noListenersHint": "nije postavljen API slušatelja", - "endpointDiagnostics": "Dijagnostika krajnje točke", - "diagnosticsLegend": "OK: dostupno · WARN: nije konfigurirano · ERROR: zahtjev nije uspio ili je istekao.", - "streamUrl": "URL streama", - "unreachable": "nedostižan", - "refresh": "Osvježi" - }, - "user": "Korisnik", - "message": "Poruka", - "posted": "Objavljeno", - "realName": "Pravo ime", - "age": "Dob", - "style": "Stil", - "applied": "Primijenjeno", - "day": "dan", - "start": "Start", - "end": "Kraj", - "show": "pokazati", - "status": "Status", - "active": "aktivan", - "inactive": "neaktivan", - "hidden": "skriveni", - "activeSchedules": "Aktivni rasporedi", - "noShouts": "Nema vike za moderiranje", - "noApplications": "Nije poslana nijedna prijava.", - "noSchedules": "Nema konfiguriranih rasporeda.", - "deleteShout": "Izbriši", - "confirmDeleteShout": "Izbrisati ovaj uzvik?", - "pendingApplications": "Prijave na čekanju", - "settingsForm": { - "title": "Postavke radija", - "subtitle": "Uređivanja se zapisuju u web_settings (tipke radio_*) i uništavaju predmemoriju postavki vremena izvođenja. Booleovi koriste 0/1.", - "enabled": "Omogućeno", - "disabled": "Onesposobljeno", - "totalKeys": "Ukupni ključevi", - "configured": "Konfigurirano", - "curatedHint": "odabrani ključevi s vrijednošću", - "customKeys": "Prilagođeni ključevi", - "saveAll": "Spremi sve", - "singleKey": "Dodajte / prebrišite jedan ključ", - "keyPlaceholder": "radio_prilagođeni_ključ", - "valuePlaceholder": "vrijednost", - "commentPlaceholder": "komentar (nije obavezno)", - "saveSingle": "spremiti", - "otherSettings": "Ostale postavke radija", - "dbError": "Nije moguće učitati postavke (baza podataka nije dostupna). Zadane postavke bit će stvorene prilikom spremanja." - }, - "embedPage": { - "title": "Radio Embed", - "subtitle": "Kod za ugradnju spreman za kopiranje za prijenos uživo. Samo za čitanje — ovdje ništa ne piše u bazu podataka. Konfigurirajte URL streama u postavkama radija (radio_stream_url).", - "streamUrl": "URL streama", - "configured": "Konfigurirano", - "missing": "Nedostaje", - "radioName": "Naziv radija", - "nowPlayingApi": "API koji se sada igra", - "set": "set", - "notSet": "Nije postavljeno", - "noStreamUrl": "URL streama nije konfiguriran", - "noStreamUrlText": "Nije postavljen radio_stream_url, tako da još nema ništa za ugraditi.", - "goToSettings": "Idite na Radio Settings", - "livePreview": "Pregled uživo", - "livePreviewText": "Ovo je goli audio player kako će ga posjetitelji vidjeti. Pritisnite play kako biste potvrdili da je stream dostupan.", - "source": "Izvor", - "audioSnippet": "Isječak audio playera", - "audioSnippetDesc": "Umetnuti HTML5 audio player usmjeren ravno prema streamu. Radi svugdje gdje je dopušten obični HTML.", - "iframeSnippet": "Isječak omota iframea", - "iframeSnippetDesc": "Ugrađuje vlastitu stranicu radijskog playera web-mjesta u iframe — čuva vaš stil i informacije o trenutnoj reprodukciji. Prilagodite širinu/visinu prema ukusu.", - "audioUnsupported": "Vaš preglednik ne podržava audio element." - }, - "banners": { - "title": "Transparenti", - "heading": "Radio banneri", - "description": "Promotivni banneri prikazani na radijskoj stranici, poredani po redoslijedu.", - "addBanner": "Dodajte natpis", - "createBanner": "Napravi banner", - "deleteBanner": "Izbriši banner", - "noBanners": "Još nema bannera — dodajte jedan iznad.", - "existing": "Postojeći natpisi ({count})", - "save": "spremiti", - "delete": "Izbriši", - "byUser": "korisnik {id}", - "active": "aktivan", - "hidden": "skriveni", - "bannerAlt": "Radio banner", - "statusActive": "Aktivno", - "statusHidden": "Skriveno", - "dbError": "Nije moguće učitati bannere (baza podataka nije dostupna).", - "form": { - "imagePath": "Put / URL slike", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Naslov", - "description": "Opis", - "sortOrder": "Redoslijed sortiranja", - "active": "Aktivno" - } - }, - "ranksForm": { - "title": "Radio Činovi", - "subtitle": "DJ/osoblje se može dodijeliti na radijskim prijavama.", - "dbError": "Nije moguće učitati rangove (baza podataka nije dostupna).", - "active": "Aktivno", - "addRank": "Dodajte rang", - "name": "Ime", - "badgeCode": "Šifra značke", - "description": "Opis", - "createRank": "Stvorite rang", - "existing": "Postojeći rangovi ({count})", - "noRanks": "Još nema činova — dodajte jedan iznad.", - "activeLabel": "aktivan", - "inactiveLabel": "neaktivan", - "save": "spremiti", - "deleteRank": "Izbriši rang #{id}" - }, - "historyPage": { - "title": "Povijest radijskih igara", - "subtitle": "Prošle DJ emisije i vrijeme emitiranja (radio_history), prvo najnovije. Dnevnik samo za čitanje o tome tko je bio u eteru, kada i koliko se slušatelja uključilo.", - "dbError": "Nije moguće učitati radio povijest (baza podataka nije dostupna).", - "showsLogged": "Emisije zabilježene", - "onAirNow": "Sada u eteru", - "uniqueDjs": "Jedinstveni DJ-i", - "peakListeners": "Vrhunac slušanosti", - "empty": "Još nije zabilježena povijest radija.", - "showLog": "Prikaži dnevnik ({count})", - "colDj": "DJ", - "colShow": "pokazati", - "colStarted": "Započelo", - "colEnded": "Završeno", - "colAirtime": "Vrijeme emitiranja", - "colListeners": "Slušatelji", - "colNotes": "Bilješke", - "onAir": "u eteru" - }, - "apiKeysForm": { - "title": "Radio API ključevi", - "subtitle": "API ključevi za vanjske radijske integracije (radio_api_keys). Ključevi se generiraju na strani poslužitelja i prikazuju maskirani — kopirajte punu vrijednost iz baze podataka kada su prvi put izdani.", - "dbError": "Nije moguće učitati API ključeve (baza podataka nije dostupna).", - "totalKeys": "Ukupni ključevi", - "active": "Aktivno", - "inactive": "Neaktivan", - "generateKey": "Generiraj ključ", - "generateHint": "Tajni ključ se generira automatski kriptografskom slučajnošću - ne unosite ga.", - "name": "Ime", - "namePlaceholder": "AzureCast most", - "rateLimit": "Ograničenje brzine (zahtjevi/min)", - "allowedIps": "Dopuštene IP adrese (izborno)", - "allowedIpsPlaceholder": "odvojeni zarezom, prazno = bilo koje", - "generate": "Generiraj ključ", - "existingKeys": "Postojeći ključevi ({count})", - "noKeys": "Još nema API ključeva — generirajte jedan iznad.", - "colName": "Ime", - "colKey": "Ključ", - "colAllowedIps": "Dopuštene IP adrese", - "colRateLimit": "Ograničenje stope", - "colLastUsed": "Zadnje korišteno", - "colExpires": "ističe", - "colStatus": "Status", - "colActions": "Radnje", - "maskedHint": "Prikazuje se samo prvih 8 znakova", - "any": "bilo koji", - "activeLabel": "aktivan", - "inactiveLabel": "neaktivan", - "deactivate": "Deaktiviraj", - "activate": "Aktiviraj", - "delete": "Izbriši" - }, - "pointsForm": { - "title": "Bodovi radijskih slušatelja", - "subtitle": "Nagradite slušatelje valutom za vrijeme provedeno na radiju. Uređivanja se zapisuju u web_settings (radio_points_* tipke) i uništavaju predmemoriju postavki vremena izvođenja. Booleovi koriste 0/1.", - "saved": "Spremljeno", - "points": "Bodovi", - "enabled": "Omogućeno", - "disabled": "Onesposobljeno", - "perMinute": "Po minuti", - "paidIn": "plaćeno u {currency}", - "maxPerDay": "Max / dan", - "unlimited": "Neograničeno", - "minListeners": "Min slušatelja", - "settings": "postavke", - "pointsEnabled": "Bodovi omogućeni", - "pointsEnabledHint": "Glavni prekidač za dodjelu slušateljskih bodova.", - "currency": "valuta", - "currencyHint": "U koji novčanik se uplaćuju bodovi.", - "pointsPerMinute": "Bodovi u minuti", - "pointsPerMinuteHint": "Iznos koji se dodjeljuje za svaku punu minutu slušanja.", - "maxPerDayHint": "Dnevno ograničenje po korisniku. Koristite 0 za neograničeno.", - "minListenersHint": "Bodovi se dodjeljuju samo ako je barem ovoliko ljudi uključeno.", - "save": "Spremi postavke bodova" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Zamjenski popis za reprodukciju (radio_auto_dj_playlist) kroz koji se radio vrti kada nijedan DJ ne emitira uživo. Poredano prema redoslijedu sortiranja pa naslovu.", - "dbError": "Nije moguće učitati AutoDJ popis za reprodukciju (baza podataka nije dostupna).", - "tracks": "Pjesme", - "active": "Aktivno", - "inactive": "Neaktivan", - "addTrack": "Dodaj pjesmu", - "titlePlaceholder": "Naslov pjesme", - "artist": "Umjetnik", - "album": "Album", - "artworkUrl": "URL umjetničkog djela", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Trajanje (sekunde)", - "durationPlaceholder": "npr. 215", - "sortOrder": "Redoslijed sortiranja", - "playlist": "Popis za reprodukciju ({count})", - "noTracks": "Još nema AutoDJ zapisa — dodajte jedan iznad.", - "colOrder": "Red", - "colTitle": "Naslov", - "colArtist": "Umjetnik", - "colAlbum": "Album", - "colDuration": "Trajanje", - "colPlays": "Igra", - "colLastPlayed": "Zadnje igrano", - "colStatus": "Status", - "colActions": "Radnje", - "activeLabel": "aktivan", - "inactiveLabel": "neaktivan", - "deactivate": "Deaktiviraj", - "activate": "Aktiviraj", - "delete": "Izbriši", - "trackTitle": "Naslov" - }, - "moderationPage": { - "title": "DJ moderiranje", - "subtitle": "Pregledajte i uklonite radijske povike (50 najnovijih).", - "recentShouts": "Nedavni uzvici ({count})" - } - }, - "commandocentrum": { - "title": "Commandocentrum", - "subtitle": "Dijagnostika, RCON kontrole i upravljanje korisnicima", - "diagnostics": "Dijagnostika", - "rcon": "RCON", - "userActions": "Radnje korisnika", - "diagnosticsTitle": "Dijagnostika emulatora", - "memoryUsage": "Upotreba memorije", - "uptime": "Vrijeme rada", - "onlineUsers": "Online korisnici", - "roomsLoaded": "Sobe su učitane", - "refresh": "Osvježi", - "rconTitle": "RCON naredbe", - "rconPlaceholder": "Unesite RCON naredbu…", - "rconSend": "poslati", - "rconSending": "Slanje...", - "rconResponse": "Odgovor", - "userActionsTitle": "Radnje korisnika", - "username": "Korisničko ime", - "usernamePlaceholder": "Ciljano korisničko ime", - "action": "Akcija", - "execute": "izvršiti", - "actions": { - "disconnect": "Prekini vezu", - "alert": "Pošalji upozorenje", - "giveCredits": "Dajte kredite", - "giveBadge": "Dajte značku", - "givePoints": "Dajte bodove", - "ban": "zabrana", - "kick": "Udarac" - }, - "messagePlaceholder": "Poruka (za upozorenja)…", - "amountPlaceholder": "Iznos…", - "badgePlaceholder": "Šifra značke…" - }, - "emulator": { - "title": "Konfiguracija emulatora", - "subtitle": "Pregledajte i uredite postavke emulatora i tekstove na lokalnom jeziku", - "settings": "postavke", - "texts": "Tekstovi", - "search": "Traži", - "searchPlaceholder": "Ključevi za pretraživanje…", - "noSettings": "Nema pronađenih postavki", - "noTexts": "Nema pronađenih tekstova", - "edit": "Uredi", - "save": "spremiti", - "saving": "Spremanje...", - "cancel": "Odustani", - "colKey": "Ključ", - "colValue": "Vrijednost", - "colType": "Vrsta", - "colActions": "Radnje", - "editDialog": { - "title": "Uredi: {key}", - "value": "Vrijednost", - "valuePlaceholder": "Unesite vrijednost…", - "save": "Spremite promjene", - "cancel": "Odustani" - } - }, - "alerts": { - "title": "upozorenja", - "subtitle": "Šaljite upozorenja cijelom hotelu i pogledajte nedavna upozorenja", - "sendAlert": "Pošalji hotelsko upozorenje", - "recentAlerts": "Nedavna upozorenja ({count})", - "noRecentAlerts": "Nema nedavnih upozorenja", - "form": { - "title": "Naslov upozorenja", - "titlePlaceholder": "npr. Održavanje servera za 10 minuta", - "message": "Poruka upozorenja", - "messagePlaceholder": "Napišite poruku upozorenja...", - "type": "Vrsta", - "typeHotel": "Upozorenje za cijeli hotel", - "typeStaff": "Samo osoblje", - "urgent": "Hitno", - "send": "Pošalji upozorenje", - "sending": "Slanje...", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Naslov", - "colSentBy": "Poslao", - "colType": "Vrsta", - "colDate": "Datum", - "colActions": "Radnje", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Aktivnosti osoblja", - "subtitle": "Revizijski trag radnji osoblja u administrativnoj ploči", - "noLogs": "Još nije zabilježena aktivnost osoblja", - "colId": "ID", - "colUser": "Korisnik", - "colAction": "Akcija", - "colTarget": "cilj", - "colDescription": "Opis", - "colIp": "IP", - "colTimestamp": "Vremenska oznaka", - "filterByUser": "Filtriraj po korisniku…", - "filterByAction": "Filtriraj prema radnji...", - "clearFilters": "Očisti filtre", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Filtar riječi", - "subtitle": "Upravljajte filtriranim riječima i frazama u hotelu", - "addWord": "Dodaj riječ", - "addWords": "Dodajte riječi", - "noWords": "Još nema filtriranih riječi", - "confirmDelete": "Ukloniti \"{word}\" iz filtra?", - "colId": "ID", - "colWord": "Riječ", - "colAddedBy": "Dodao", - "colCreated": "Stvoreno", - "colActions": "Radnje", - "form": { - "word": "Riječ", - "wordPlaceholder": "npr. ružna riječ", - "addMore": "Dodajte više riječi (jednu po retku)", - "save": "Dodaj u filter", - "saving": "Spremanje...", - "cancel": "Odustani" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Način održavanja", - "subtitle": "Omogućite ili onemogućite održavanje u cijelom hotelu", - "enabled": "Način održavanja je omogućen", - "disabled": "Način održavanja je onemogućen", - "enable": "Omogući održavanje", - "disable": "Onemogući održavanje", - "message": "Poruka o održavanju", - "messagePlaceholder": "Vraćamo se uskoro!", - "staffAccess": "Omogućite pristup osoblju tijekom održavanja", - "save": "Spremi postavke", - "saving": "Spremanje...", - "confirmEnable": "Omogućavanje održavanja onemogućit će svim korisnicima koji nisu zaposlenici pristup hotelu. Nastaviti?", - "confirmDisable": "Onemogućiti način održavanja i vratiti pristup svim korisnicima?" - }, - "housekeeping": { - "title": "Dozvole za održavanje", - "subtitle": "Konfigurirajte koji činovi mogu pristupiti kojim administratorskim odjeljcima", - "addPermission": "Dodaj dopuštenje", - "editPermission": "Dozvola za uređivanje", - "deletePermission": "Brisanje dopuštenja", - "noPermissions": "Nema konfiguriranih dozvola za održavanje", - "confirmDelete": "Izbrisati ovu dozvolu?", - "colId": "ID", - "colRank": "rang", - "colSection": "odjeljak", - "colActions": "Radnje", - "form": { - "rankId": "ID ranga", - "rankIdPlaceholder": "Minimalni rang", - "section": "Ključ odjeljka", - "sectionPlaceholder": "npr. admin.kontrolna ploča", - "save": "Spremi dopuštenje", - "saving": "Spremanje...", - "cancel": "Odustani" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset Primijenjeno!", - "cleared": "All Dozvole cleared!", - "invalidRank": "Invalid rang", - "testDone": "Test done: {count} Dozvole found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Izbriši ALL Dozvole? This Akcija cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Dozvola", - "colDescription": "Opis", - "colMinRank": "Min. Rang", - "permissionKey": "Ključ dopuštenja", - "minRank": "Min. rang", - "description": "Opis", - "permissions": "Dozvole", - "permissionsCount": "{count} Dozvole", - "permission": "Dozvola", - "highestMinRank": "Highest min. rang: {rank}", - "totalMinRank": "Total min. rang sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Činovi", - "missingDeps": "{count} Nedostaje dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Nedostaje)", - "rank": "rang", - "count": "Count", - "searchPermission": "Traži Dozvole…", - "search": "Traži", - "manage": "Manage", - "importSelection": "Uvoz selection", - "noGroup": "Br group", - "allGroups": "All groups", - "perGroup": "Dozvole per group", - "perRank": "Dozvole per rang", - "rankOverviewHint": "All Dozvole grouped by the rang they are assigned to.", - "tabOverview": "Pregled", - "tabManage": "Manage", - "tabImport": "Uvoz / Export", - "tabRanks": "Rang Pregled", - "tabPresets": "Unaprijed postavljene postavke", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Uvoz Dozvole", - "importHint": "Paste a JSON array of Dozvola objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "uvoz", - "exportTitle": "Export Dozvole", - "exportHint": "Export all Dozvole as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Dozvola Unaprijed postavljene postavke", - "presetsHint": "Primijeniti a predefined set of Dozvole for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Umjerenost tools: Korisnik lookup, Zabrane, CFH handling, chat Dnevnici.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Korisnici, Sobe, news, postavke, Trgovina, events, radio & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Dozvola management and asset uvoz.", - "applyPreset": "Primijeniti preset", - "clearAll": "Clear all Dozvole", - "testTitle": "Test rang access", - "testHint": "Enter a rang number to see which Dozvole would be granted.", - "test": "Test", - "auditTitle": "Dozvola audit log", - "auditHint": "All changes to Domaćinstvo Dozvole are logged.", - "auditLogsAt": "Audit Dnevnici are available on the Audit log page.", - "viewAuditLogs": "Pogled audit Dnevnici", - "importedWithErrors": "Imported {count} Dozvole with {errors} errors", - "confirmClearAllDesc": "This will Ukloniti every Dozvola entry from the Baza podataka. Are you sure?", - "confirmDeletePermission": "Izbriši this Dozvola permanently?", - "confirmBulkDelete": "Izbriši {count} selected Dozvole?", - "deleteSelected": "Izbriši {count} selected", - "cancel": "Odustani", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Korisnik", - "auditAction": "Akcija", - "auditTarget": "cilj", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Sobe", - "subtitle": "Pretražujte i upravljajte hotelskim sobama", - "search": "Traži", - "searchPlaceholder": "Traži po imenu, vlasniku ili ID-u…", - "searchResults": "{count, plural, one {# room} other {# rooms}} pronađeno za \"{query}\"", - "noResults": "Nije pronađena nijedna soba", - "colId": "ID", - "colName": "Ime", - "colOwner": "Vlasnik", - "colUsers": "Korisnici", - "colState": "Država", - "colCategory": "Kategorija", - "colCreated": "Stvoreno", - "colActions": "Radnje", - "stateOpen": "Otvoreno", - "stateClosed": "Zatvoreno", - "stateLocked": "Zaključano", - "stateInvisible": "Nevidljivi", - "detail": { - "title": "Soba: {name}", - "subtitle": "U vlasništvu {owner}", - "overview": "Pregled", - "actions": "Radnje", - "description": "Opis", - "noDescription": "Nema opisa", - "owner": "Vlasnik", - "users": "Korisnici na mreži", - "maxUsers": "Maks. korisnika", - "category": "Kategorija", - "state": "Država", - "tags": "oznake", - "noTags": "Nema oznaka", - "created": "Stvoreno", - "deleteRoom": "Izbriši sobu", - "confirmDelete": "Izbrisati sobu \"{name}\"? Ovo se ne može poništiti.", - "enterRoom": "Uđi u sobu", - "changeOwner": "Promjena vlasnika", - "changeOwnerPlaceholder": "Korisničko ime novog vlasnika" - } - }, - "emailTemplates": { - "title": "Predlošci e-pošte", - "subtitle": "Upravljajte predlošcima transakcijske e-pošte", - "newTemplate": "+ Novi predložak", - "edit": "Uredi", - "delete": "Izbriši", - "noTemplates": "Još nema predložaka e-pošte", - "confirmDelete": "Izbrisati predložak \"{name}\"?", - "colId": "ID", - "colName": "Ime", - "colSubject": "Predmet", - "colKey": "Ključ", - "colUpdated": "Ažurirano", - "colActions": "Radnje", - "form": { - "name": "Ime", - "namePlaceholder": "npr. E-pošta dobrodošlice", - "key": "Ključ", - "keyPlaceholder": "npr. dobrodošli_e-mail", - "subject": "Predmet", - "subjectPlaceholder": "Predmet e-pošte", - "body": "Tijelo (HTML)", - "bodyPlaceholder": "

Poštovani {username},

", - "variables": "Dostupne varijable", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Spremi predložak", - "saving": "Spremanje...", - "cancel": "Odustani" - } - }, - "theme": { - "title": "Tema", - "subtitle": "Prilagodite izgled CMS-a", - "presets": "Unaprijed postavljene postavke", - "colours": "Boje", - "css": "CSS", - "presetsTitle": "Unaprijed postavljene teme", - "presetsSubtitle": "Odaberite unaprijed pripremljenu shemu boja", - "applyPreset": "primijeniti", - "presetApplied": "Unaprijed postavljeno: {preset}", - "customiseTitle": "Prilagođene boje", - "primary": "Primarni", - "secondary": "Sekundarna", - "accent": "Naglasak", - "background": "Pozadina", - "surface": "Površina", - "text": "Tekst", - "saveColours": "Sačuvajte boje", - "savingColours": "Spremanje...", - "cssTitle": "Prilagođeni CSS", - "cssSubtitle": "Dodajte prilagođeni CSS za nadjačavanje stilova tema", - "cssPlaceholder": "/* Vaš prilagođeni CSS ovdje */", - "saveCss": "Spremi CSS", - "savingCss": "Spremanje...", - "reset": "Vrati na zadane postavke", - "confirmReset": "Vratiti temu na zadane vrijednosti?" - }, - "media": { - "title": "Mediateka", - "subtitle": "Učitajte i upravljajte medijskim datotekama", - "upload": "Upload", - "uploadTitle": "Učitajte datoteku", - "uploadSubtitle": "Povucite i ispustite ili kliknite za prijenos", - "uploadButton": "Odaberite datoteku", - "uploading": "Prijenos…", - "noFiles": "Još nema medijskih datoteka", - "delete": "Izbriši", - "confirmDelete": "Želite li trajno izbrisati ovu datoteku?", - "search": "Traži", - "searchPlaceholder": "Traži po nazivu datoteke…", - "colPreview": "Pregled", - "colName": "Ime", - "colSize": "Veličina", - "colType": "Vrsta", - "colUploaded": "Učitano", - "colActions": "Radnje", - "copyUrl": "Kopiraj URL", - "urlCopied": "URL kopiran u međuspremnik" - }, - "favicon": { - "title": "Favicon", - "subtitle": "Učitajte favicon stranice i upravljajte njome", - "current": "Trenutačni favicon", - "uploadLabel": "Prenesi favicon", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO ili SVG. Maksimalno 2 MB.", - "upload": "Upload", - "uploading": "Prijenos…", - "delete": "Ukloniti", - "deleting": "Uklanjanje...", - "saved": "Favicon je uspješno spremljen!", - "deleted": "Favicon je uspješno uklonjen!", - "error": "Nešto nije u redu", - "confirmDelete": "Ukloniti favicon? Stranica više neće prikazivati ​​prilagođeni favicon.", - "generator": { - "title": "Generiraj favicon", - "text": "Tekst", - "bgColor": "Boja pozadine", - "textColor": "Boja teksta", - "rounded": "Zaobljeni kutovi", - "save": "Spremi kao favicon" - }, - "cancel": "Cancel" - }, - "settings": { - "title": "CMS postavke", - "subtitle": "Upravljanje CMS konfiguracijom ključ/vrijednost", - "addSetting": "Dodaj postavku", - "edit": "Uredi", - "delete": "Izbriši", - "noSettings": "Nema pronađenih postavki", - "confirmDelete": "Izbrisati postavku \"{key}\"?", - "colKey": "Ključ", - "colValue": "Vrijednost", - "colUpdated": "Ažurirano", - "colActions": "Radnje", - "form": { - "key": "Ključ", - "keyPlaceholder": "npr. hotel_name", - "value": "Vrijednost", - "valuePlaceholder": "Postavljanje vrijednosti", - "save": "Spremi postavku", - "saving": "Spremanje...", - "cancel": "Odustani" - }, - "keysInDatabase": "{count} keys in database", - "managedInForm": "{count} managed in form", - "documented": "{count} documented", - "saved": "Settings saved.", - "saveFailed": "Could not save settings.", - "saveSettings": "Save settings", - "viewOnly": "You can view settings but need edit permission to change them." - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Početna", - "reload": "Ponovno učitaj", - "fullscreen": "Cijeli zaslon", - "logout": "Odjava", - "onlineUsers": "Korisnici online", - "emulatorOnline": "Emulator je online", - "emulatorOffline": "Emulator je offline", - "dragToMove": "Povucite za pomicanje", - "hide": "Sakrij traku", - "fullscreenExit": "Izađi iz cijelog zaslona", - "show": "Prikaži traku", - "emulatorUnknown": "Status emulatora nepoznat" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Dijagnostika datoteka", - "preliminary": "Preliminarna provjera adresa; sadržaj se provjerava pri uvozu.", - "http": "HTTP {status}", - "network": "Povezivanje nije uspjelo", - "timeout": "Izvor nije odgovorio na vrijeme", - "invalidResponse": "Izvor je vratio web-stranicu umjesto datoteke", - "available": "Datoteka pronađena; čeka provjeru", - "recover": "Priloži izvornik i nastavi", - "recoveryHint": "Odaberite {file} (do 50 MB). Provjerava se identitet. Ponavljaju se neuspjele stavke; dovršeni uvozi ostaju sačuvani.", - "attach": "Odaberite izvornu .nitro datoteku", - "working": "Provjera ili nastavak...", - "attached": "Odgovarajuća datoteka priložena", - "resume": "Nastavi neuspjele uvoze s datotekom", - "invalidFile": "Odaberite odgovarajuću izvornu .nitro datoteku do 50 MB i pokušajte ponovno.", - "resumeError": "Osvježite povijest i koristite posljednji pokušaj; provjerite datoteku i pokušajte ponovno.", - "mismatchedFile": "Ova datoteka pripada drugom komadu namještaja.", - "alreadyStarted": "Oporavak je već pokrenut. Osvježite povijest i koristite posljednji pokušaj.", - "notEligible": "Ova stavka ne podržava oporavak prilogom." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "Kopija za oporavak čuvat će se u ovom pregledniku 7 dana.", + "saved": "Kopija za oporavak spremljena je u ovom pregledniku na 7 dana.", + "unavailable": "Oporavak u pregledniku nije dostupan. Ostavi ovu stranicu otvorenom dok se promjene ne spreme.", + "found": "U ovom pregledniku dostupna je kopija za oporavak, spremljena", + "restore": "Vrati kopiju iz preglednika", + "discard": "Izbriši kopiju iz preglednika", + "confirmRestore": "Zamijeniti trenutačni obrazac kopijom iz preglednika? Provjeri sadržaj prije spremanja.", + "confirmDiscard": "Izbrisati ovu kopiju iz preglednika? Trenutačni obrazac ostat će nepromijenjen." + }, + "nav": { + "home": "Dom", + "community": "zajednica", + "articles": "Članci", + "photos": "Fotografije", + "staff": "Osoblje", + "rankings": "rangiranje", + "guilds": "Cehovi", + "leaderboards": "Ploče s najboljim rezultatima", + "rareValues": "Rijetke vrijednosti", + "shop": "Trgovina", + "market": "tržište", + "assistance": "Pomoć", + "helpCenter": "Centar za pomoć", + "myTickets": "Moje karte", + "badges": "Značke", + "radio": "radio", + "friends": "Prijatelji", + "messages": "Poruke", + "admin": "Administrator", + "openMenu": "Otvori izbornik", + "closeMenu": "Zatvori izbornik", + "drawBadge": "Nacrtajte značku", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} online", + "nitroClient": "Nitro klijent", + "tagline": "Internetski virtualni svijet u kojem možete stvoriti vlastiti avatar, sklapati prijateljstva, razgovarati, stvarati sobe i još mnogo toga!", + "login": "Prijava", + "or": "ili", + "createAccount": "Napravi račun" + }, + "footer": { + "copyright": "© {year} - {hotel} je neprofitni obrazovni projekt" + }, + "pages": { + "staff": { + "title": "Osoblje", + "subtitle": "Tim koji stoji iza hotela", + "ranksTitle": "Činovi", + "ranksSubtitle": "O čemu svaki dio tima brine", + "membersTitle": "Članovi tima", + "membersEmptySubtitle": "Trenutno nema nikoga za pokazati", + "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", + "emptyState": "Nema članova osoblja za pokazati.", + "colUsername": "Korisničko ime", + "colRank": "rang", + "colMotto": "Moto", + "viewProfile": "View profile", + "noMotto": "No motto set", + "loadError": "Unable to load staff members. Please try again shortly.", + "retry": "Try again" + }, + "leaderboard": { + "title": "Leaderboard", + "subtitle": "20 najboljih igrača prema {currency}", + "tab_credits": "Zasluge", + "tab_diamonds": "Dijamanti", + "tab_duckets": "Duckets", + "tab_achievement": "Postignuća", + "tab_respects": "Poštovanje", + "tab_onlinetime": "Online vrijeme", + "emptyState": "Još nema rangiranja za prikaz.", + "colAvatar": "Avatar", + "colPlayer": "Igrač" + }, + "friends": { + "title": "Prijatelji", + "emptySubtitle": "Još nemate dodanih prijatelja", + "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", + "emptyState": "Dodajte prijatelje u hotel i oni će se pojaviti ovdje.", + "noMotto": "Bez mota", + "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": "Poruke", + "subtitle": "Zahtjevi za prijateljstvo i offline poruke čekaju na vas", + "requestsTitle": "Zahtjevi za prijateljstvo", + "requestsEmptySubtitle": "Još nitko nije tražio da bude tvoj prijatelj", + "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", + "requestsEmptyState": "Nema neriješenih zahtjeva za prijateljstvo.", + "wantsToBeFriend": "želi biti tvoj prijatelj.", + "accept": "Prihvati", + "offlineTitle": "Offline poruke", + "offlineEmptySubtitle": "Vaš inbox je prazan", + "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", + "offlineEmptyState": "Nemate nijednu izvanmrežnu poruku.", + "unknownUser": "Korisnik #{id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Bez mota", + "statRank": "rang", + "statCredits": "Zasluge", + "statRegistered": "Registriran", + "badgesTitle": "Značke", + "badgesEmpty": "Još nema bedževa.", + "photosTitle": "Fotografije", + "photosEmpty": "Još nema fotografija.", + "guestbookTitle": "Knjiga gostiju", + "guestbookSubtitle": "Poruke na zidu korisnika {username}", + "leaveMessage": "Ostavite poruku", + "guestbookPlaceholder": "Napišite nešto u knjigu gostiju korisnika {username}…", + "post": "Post", + "loginToPost": "Prijavite se da biste ostavili poruku u knjizi gostiju.", + "guestbookEmpty": "Još nema unosa u knjigu gostiju.", + "unknownUser": "Korisnik #{id}", + "statDuckets": "Duckets", + "statDiamonds": "Dijamanti", + "walletTitle": "Novčanik", + "friendsTitle": "Prijatelji", + "friendsSubtitle": "Ljudi u hotelu s kojima se druže", + "friendsEmpty": "Nema prijatelja za pokazati.", + "roomsTitle": "Sobe", + "roomsSubtitle": "Sobe koje posjeduju", + "roomsEmpty": "Nema soba za pokazati.", + "roomUntitled": "Soba bez naslova", + "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": "rangiranje", + "subtitle": "Prvih 12 igrača poredanih po kreditima", + "emptyState": "Još nema igrača za rangiranje." + }, + "home": { + "welcome": "Dobro došli u {hotelName}", + "welcomeSubtitle": "Vaš retro hotel, sada pokreće Next.js", + "welcomeBody": "Družite se, skupljajte namještaj i upoznajte prijatelje.", + "enterHotel": "Unesite {hotelName}", + "onlineFriends": "Online prijatelji", + "noFriendsOnline": "Nema prijatelja na mreži", + "register": "REGISTRIRAJTE SE SADA", + "joinNow": "Pridružite se {hotelName} danas!", + "recentUsers": "Nedavni korisnici", + "recentPhotos": "Najnovije fotografije", + "latestNews": "Najnovije vijesti", + "newsTitle": "Najnovije vijesti", + "newsSubtitle": "Svježe iz hotela", + "allNews": "Sve novosti →", + "allUsers": "Zajednica →", + "noArticles": "Još nema članaka.", + "noPhotos": "Još nema fotografija.", + "noUsers": "Nema korisnika na mreži", + "latestArticle": "Najnoviji članak", + "latestUsers": "Najnoviji građani ({count} ukupno)", + "statsOnline": "Online", + "statsCitizens": "Građani", + "statsRooms": "Sobe", + "statsArticles": "Članci", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Stvori svoj jedinstveni izgled", + "featuresFurniture": "Namještaj", + "featuresFurnitureDesc": "Uredi sobe predmetima", + "featuresCommunity": "Zajednica", + "featuresCommunityDesc": "Stvori prijatelje i čavrljaj", + "featuresGames": "Igre", + "featuresGamesDesc": "Natječi se i zabavi", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Vijesti", + "subtitle": "Najnovije najave, događaji i novosti iz hotela", + "noArticles": "Još nema članaka.", + "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": "← Vijesti", + "reactionsTitle": "Reakcije", + "reactionsSubtitle": "Recite nam što mislite", + "reaction": { + "like": "Sviđa mi se", + "love": "ljubavi", + "wow": "Vau" + }, + "removeReaction": "Kliknite da uklonite svoju reakciju", + "reactWith": "Reagirajte s {reaction}", + "noReactions": "Još nema reakcija.", + "logIn": "Prijavite se", + "toReact": "reagirati.", + "commentsTitle": "Komentari", + "commentsSubtitle": "Pridružite se razgovoru", + "commentsCount": "{count} do sada", + "noComments": "Još nema komentara. Budite prvi koji će komentirati.", + "userNumber": "Korisnik #{id}", + "addComment": "Dodajte komentar", + "commentPlaceholder": "Napišite svoj komentar…", + "postComment": "Objavite komentar", + "toComment": "ostaviti komentar.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Fotografije", + "subtitle": "Najnovije fotografije snimljene u hotelu", + "noPhotos": "Još nema fotografija.", + "photoAlt": "Fotografija korisnika #{id}", + "byUser": "korisnik #{id}" + }, + "badges": { + "title": "Značke", + "subtitle": "Značke koje možete zaraditi i pokazati po hotelu", + "noBadges": "Još nema dostupnih bedževa." + }, + "community": { + "title": "zajednica", + "subtitle": "Sve što se događa oko hotela na jednom mjestu", + "open": "Otvori →", + "links": { + "rankings": { + "title": "rangiranje", + "text": "Pogledajte najbogatije igrače u hotelu, rangirane prema kreditima." + }, + "staff": { + "title": "Osoblje", + "text": "Upoznajte tim koji svakodnevno održava rad hotela." + }, + "news": { + "title": "Vijesti", + "text": "Najnovije najave, događaji i ažuriranja." + }, + "photos": { + "title": "Fotografije", + "text": "Snimke koje dijeli zajednica iz cijelog hotela." + }, + "guilds": { + "title": "Cehovi", + "text": "Pregledajte grupe koje su igrači stvorili i kojima su se pridružili." + }, + "leaderboards": { + "title": "Ploče s najboljim rezultatima", + "text": "Tko je na vrhu ove sezone u statistici hotela." + } + } + }, + "guilds": { + "title": "Cehovi", + "subtitle": "Pregledajte grupe koje su igrači stvorili i kojima su se pridružili", + "empty": "Još nema cehova.", + "unnamedGuild": "Neimenovani ceh", + "noDescription": "Nema opisa" + }, + "guild": { + "allGuilds": "← Svi cehovi", + "unnamedGuild": "Neimenovani ceh", + "noDescription": "Nema opisa", + "memberSingular": "član", + "memberPlural": "članovi", + "founded": "Osnovano", + "forumLink": "Forum →", + "discussion": "Rasprava", + "membersTitle": "članovi", + "memberLowerSingular": "član", + "memberLowerPlural": "članova", + "noMembers": "Nema članova.", + "owner": "Vlasnik", + "noMotto": "Bez mota" + }, + "guildForum": { + "backToGuild": "← Povratak na ceh", + "unnamedGuild": "Neimenovani ceh", + "forumTitle": "{guild} — Forum", + "threadSingular": "nit", + "threadPlural": "niti", + "newThread": "+ Nova nit", + "empty": "Još nema niti na ovom forumu.", + "colSubject": "Predmet", + "colAuthor": "Autor", + "colPosts": "Postovi", + "colDate": "Datum", + "noSubject": "(bez predmeta)", + "pinned": "Prikvačeno", + "locked": "Zaključano", + "userNumber": "Korisnik #{id}", + "unknown": "Nepoznato", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Povratak na forum", + "unnamedGuild": "Neimenovani ceh", + "title": "Nova nit", + "subtitle": "na forumu {guild}", + "subjectLabel": "Predmet", + "subjectPlaceholder": "Tema teme", + "messageLabel": "Poruka", + "messagePlaceholder": "Napišite svoj uvodni post...", + "postThread": "Objavi nit", + "cancel": "Odustani", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Trgovina", + "subtitle": "Nadopunite svoj račun i zgrabite ekskluzivne pakete, valutu i značke.", + "browsingCategory": "Pregledavanje paketa {category}.", + "all": "sve", + "allPackages": "Svi paketi", + "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", + "empty": "Trenutačno nema dostupnih paketa.", + "buy": "Kupiti", + "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": "Nadoplatite PayPal", + "subtitle": "Plaćajte sigurno s PayPal-om i vaši krediti se dodaju u trenutku kada se plaćanje izvrši.", + "cancelled": "Odjava je otkazana — plaćanje nije izvršeno.", + "chooseAmount": "Odaberite iznos", + "notConfiguredPre": "PayPal još nije konfiguriran. Administrator treba postaviti", + "notConfiguredAnd": "i", + "notConfiguredOptional": "(i po izboru", + "notConfiguredPost": "za sandbox naspram uživo).", + "balanceTitle": "Vaša ravnoteža", + "signedInAs": "Prijavljeni ste kao {username}", + "credits": "Zasluge", + "creditsPerUnit": "Krediti po 1,00 {currency}", + "rateLine": "Dobivate {amount} kredita za 1,00 {currency}. Krediti se pojavljuju u igri sljedeći put kada se prijavite." + }, + "marketplace": { + "title": "Tržnica", + "subtitle": "Pregledajte namještaj i rijetke predmete koje su popisali igrači. Popisi se postavljaju u igri i ažuriraju uživo — idite u hotel da napravite ponudu.", + "activeOffers": "Aktivne ponude", + "sellers": "Prodavači", + "totalValue": "Ukupna vrijednost", + "activeListings": "Aktivni oglasi", + "mostRecentFirst": "Najnoviji prvi na popisu", + "empty": "Trenutačno nema aktivnih ponuda na tržištu. Provjerite kasnije.", + "colOffer": "ponuda", + "colItem": "Stavka", + "colSeller": "Prodavač", + "colPrice": "Cijena", + "colListed": "Na popisu", + "itemLabel": "Stavka #{id}", + "userLabel": "Korisnik #{id}", + "justNow": "upravo sada", + "minutesAgo": "Prije {count} min", + "hoursAgo": "Prije {count} h", + "daysAgo": "Prije {count} d" + }, + "rares": { + "title": "Rijetke vrijednosti", + "subtitle": "Dobijte pregled svih rijetkih sadržaja u hotelu, grupiranih po kategorijama.", + "empty": "Trenutno nemamo ovdje navedenih rijetkih proizvoda.", + "rareCount": "{count, plural, one {# rare} other {# rares}}", + "viewRares": "Pogledajte rijetke →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", + "allRares": "← Sve rijetko", + "empty": "U ovoj kategoriji još nema rijetkih proizvoda.", + "colRare": "Rijetko", + "colCredits": "Zasluge", + "colCurrency": "valuta", + "creditsValue": "{value} kredita", + "duckets": "Duckets", + "diamonds": "Dijamanti", + "credits": "Zasluge" + }, + "redeem": { + "title": "Iskoristite vaučer", + "subtitle": "Imate kod kupona? Unesite ga ispod kako biste dodali nagradu na svoj račun.", + "enterCode": "Unesite svoj kod", + "oncePerAccount": "Svaki vaučer može se iskoristiti samo jednom po računu.", + "balanceTitle": "Vaša ravnoteža", + "signedInAs": "Prijavljeni ste kao {username}", + "credits": "Zasluge", + "instantCredit": "Iskorištene nagrade odmah se pripisuju i pojavljuju se u igri sljedeći put kada se prijavite." + }, + "help": { + "title": "Centar za pomoć", + "subtitle": "Pronađite vodiče, teme podrške i hotelska pravila — sve što vam je potrebno za pomoć.", + "myTickets": "Moje karte →", + "topicsTitle": "Teme podrške", + "topicsSubtitle": "Pregledajte vodiče i odgovore na uobičajena pitanja", + "topicsEmpty": "Još nema tema za pomoć.", + "rulesTitle": "Pravila hotela", + "rulesSubtitle": "Molimo vas da ih pročitate prije druženja u hotelu", + "rulesEmpty": "Još nema objavljenih pravila.", + "categoryEmpty": "U ovoj kategoriji nema pravila." + }, + "helpCategory": { + "back": "← Centar za pomoć", + "topicSubtitle": "Tema centra za pomoć", + "moreTitle": "Više tema za pomoć", + "moreSubtitle": "Prijeđite na drugu temu podrške" + }, + "helpTickets": { + "title": "Pomoć Ulaznice", + "subtitle": "Pošaljite kartu osoblju i pratite svoje otvorene zahtjeve.", + "statTotal": "Ukupno ulaznica", + "statOpen": "Otvoreno", + "statClosed": "Zatvoreno", + "newTitle": "Nova karta", + "newSubtitle": "Opišite svoj problem i osoblje će vam odgovoriti", + "subjectPlaceholder": "Predmet", + "contentPlaceholder": "Opišite svoj problem…", + "submit": "Predajte kartu", + "listTitle": "Vaše ulaznice", + "listSubtitle": "Svaki zahtjev koji ste poslali osoblju", + "listEmpty": "Još nemate ulaznica.", + "colId": "ID", + "colSubject": "Predmet", + "colStatus": "Status", + "colCreated": "Stvoreno", + "statusOpen": "Otvoreno", + "statusClosed": "Zatvoreno", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "Prijavite se za osoblje {hotel}", + "subtitle": "Svako malo otvaramo prijave za osoblje. Ako naiđete na poziciju za koju mislite da biste se savršeno uklopili, nemojte se ustručavati prijaviti se za nju.", + "noPositionsTitle": "Nema otvorenih pozicija", + "noPositionsBody": "Trenutno nema otvorenih pozicija. Molimo vas da se vratite kasnije da provjerite imamo li slobodnih mjesta do tada. Hvala vam na interesu.", + "noDeadline": "Nije postavljen rok", + "deadline": "Rok za prijavu: {date}", + "alreadyApplied": "Već ste se prijavili za {rank}", + "aboutYou": "O tebi", + "aboutPlaceholder": "Recite nam zašto biste bili izvrstan {rank}…", + "applyFor": "Prijavite se za {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": "Prijavite se za {hotel} tim", + "subtitle": "Povremeno otvaramo timske prijave. Ako vidite tim koji vam odgovara, nemojte se ustručavati prijaviti se!", + "noPositionsTitle": "Nema otvorenih timskih pozicija", + "noPositionsBody": "Trenutno nema otvorenih timskih pozicija. Vratite se kasnije da provjerite ima li novih radnih mjesta. Hvala!", + "pending": "Vaša prijava je na čekanju", + "aboutYou": "O tebi", + "aboutPlaceholder": "Recite nam zašto bi baš vama odgovarao {rank}…", + "applyFor": "Prijavite se za {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": "Uključite hotelski radio — DJ setovi uživo, zahtjevi i dovikivanje.", + "nowPlaying": "Sada svira", + "nothingPlaying": "Trenutačno se ništa ne reproducira.", + "onAir": "U eteru: {dj}", + "noDj": "Nema DJ-a u eteru.", + "audioUnsupported": "Vaš preglednik ne podržava audio element.", + "streamOffline": "Stream je trenutno izvan mreže.", + "exploreTitle": "Istražite radio", + "exploreSubtitle": "Raspored, povici, zahtjevi i više", + "linkSchedule": "Raspored", + "linkScheduleText": "Naš tjedni sastav DJ-a i nastupa.", + "linkShouts": "Uzvici", + "linkShoutsText": "Pozivi i zahtjevi zajednice.", + "linkRequests": "Zahtjevi", + "linkRequestsText": "Zamolite DJ-a da zavrti vašu omiljenu pjesmu.", + "linkApply": "Prijavi se kao DJ", + "linkApplyText": "Pridružite se timu i krenite u eter.", + "linkLeaderboard": "Leaderboard", + "linkLeaderboardText": "Najbolji slušatelji rangirani prema zarađenim bodovima.", + "todayTitle": "Današnji raspored", + "todayTitleWithDay": "Današnji raspored · {day}", + "todaySubtitle": "Što je danas u eteru", + "fullWeek": "Cijeli tjedan →", + "noShowsToday": "Nema zakazanih predstava za danas.", + "colTime": "Vrijeme", + "colShow": "pokazati", + "colDj": "DJ", + "untitledShow": "Emisija bez naslova", + "userNumber": "Korisnik #{id}" + }, + "radioSchedule": { + "title": "Raspored radija", + "subtitle": "Naš tjedni sastav DJ-a i nastupa", + "empty": "Još nema zakazanih predstava.", + "colDay": "dan", + "colTime": "Vrijeme", + "colDj": "DJ", + "colShow": "pokazati", + "noShows": "Nema predstava" + }, + "radioShouts": { + "title": "Radio uzvici", + "subtitle": "Pozivi i zahtjevi zajednice", + "postTitle": "Objavite krik", + "postSubtitle": "Pošaljite poruku DJ-u u eteru", + "messageLabel": "Vaša poruka", + "messagePlaceholder": "Pozovite DJ-a...", + "shoutButton": "vikati", + "loginToPost": "Prijavite se da biste objavili shout.", + "latestTitle": "Najnoviji uzvici", + "latestSubtitle": "Najnovije poruke slušatelja", + "empty": "Još nema povika. Budite prvi!", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Radijska natjecanja", + "subtitle": "Uključite se i sudjelujte u našim najnovijim natjecanjima u eteru", + "empty": "Još nema natječaja.", + "contestLabel": "Natječaj #{id}", + "dateUnknown": "Datum nepoznat" + }, + "radioGiveaways": { + "title": "Radio pokloni", + "subtitle": "Poslušajte svoju priliku za dobitak u našim radio darivanjima", + "empty": "Još nema poklona.", + "giveawayLabel": "Podijela #{id}", + "dateUnknown": "Datum nepoznat" + }, + "radioLeaderboard": { + "title": "Ploča s najboljim slušateljima radija", + "subtitle": "Top 50 slušatelja po bodovima zarađenim slušanjem radija", + "empty": "Još nema slušateljskih bodova za prikaz.", + "colRank": "rang", + "colAvatar": "Avatar", + "colListener": "Slušatelj", + "colPoints": "Bodovi" + }, + "radioRequests": { + "formTitle": "Pošaljite zahtjev", + "formSubtitle": "Zamolite DJ-a da pusti vašu omiljenu pjesmu", + "songLabel": "pjesma", + "songPlaceholder": "Naslov pjesme", + "artistLabel": "Umjetnik", + "artistPlaceholder": "Ime umjetnika (nije obavezno)", + "submitButton": "Pošalji zahtjev", + "loginToRequest": "Prijavite se za slanje zahtjeva.", + "latestTitle": "Nedavni zahtjevi", + "latestSubtitle": "Najnovije tražene pjesme", + "empty": "Još nema zahtjeva.", + "colSong": "pjesma", + "colArtist": "Umjetnik", + "colRequester": "Podnositelj zahtjeva", + "colDate": "Datum", + "colStatus": "Status", + "statusPending": "Na čekanju", + "statusApproved": "Odobreno", + "statusPlayed": "Igrano", + "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": "Prijavite se za radio DJ-a", + "subtitle": "Recite nam nešto o sebi i zašto biste se odlično uklopili u eter", + "latestTitle": "Vaša najnovija aplikacija", + "statusLabel": "Status:", + "submittedOn": "· poslano {date}", + "submitAgain": "Možete ga ponovno poslati ispod ako su se vaši podaci promijenili.", + "formTitle": "Obrazac za prijavu", + "formSubtitle": "Sva polja označena kao obavezna moraju biti popunjena", + "realNameLabel": "Pravo ime", + "realNamePlaceholder": "Vaše puno ime", + "ageLabel": "Dob", + "availabilityLabel": "Dostupnost", + "availabilityPlaceholder": "Koje dane i sate možete emitirati?", + "musicStyleLabel": "Glazbeni stil", + "musicStylePlaceholder": "npr. House, pop, hip-hop", + "experienceLabel": "Iskustvo", + "optional": "(neobavezno)", + "experiencePlaceholder": "Ima li prethodnog iskustva s DJ-em ili hostingom?", + "motivationLabel": "Motivacija", + "motivationPlaceholder": "Zašto se želiš pridružiti radijskom timu?", + "submitButton": "Pošaljite prijavu", + "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": "Postavke računa", + "accountSettingsSubtitle": "Upravljajte svojim profilom, sigurnošću i povezanim računima", + "publicProfile": "Vaš javni profil", + "noMotto": "Bez mota", + "noEmail": "Nema e-pošte u evidenciji", + "changeMotto": "Promjena mota", + "changeMottoSubtitle": "Ažurira se odmah u igri ako ste na mreži", + "mottoPlaceholder": "Vaš moto", + "saveMotto": "Save moto", + "securityTitle": "Sigurnost", + "securitySubtitle": "Dvofaktorska autentifikacija", + "securityDescription": "Dodajte drugi sloj zaštite svom računu.", + "twoFactorLink": "Dvofaktorska autentifikacija" + }, + "settings2fa": { + "backToSettings": "← Postavke", + "title": "Dvofaktorska autentifikacija", + "subtitle": "Dodajte drugi sloj sigurnosti pomoću aplikacije za autentifikaciju", + "nowEnabled": "2FA je sada omogućen. 🔒", + "disabledNotice": "2FA je onemogućen.", + "badCode": "Taj kod nije valjan — pokušajte ponovo.", + "noAppKeyPrefix": "2FA nije dostupan do", + "noAppKeyMiddle": "je konfiguriran (isti Laravel", + "noAppKeySuffix": "dok instalirate AtomCMS, tako da postojeće tajne ostaju čitljive).", + "isEnabled": "2FA je omogućen", + "onYourAccount": "na vašem računu.", + "disable": "Onemogući 2FA", + "scanOrEnter": "Skenirajte ili unesite ovaj ključ", + "scanInstructions": "Dodajte ovo u Google Authenticator / Authy, zatim unesite 6-znamenkasti kod za potvrdu.", + "manualKey": "Ručni ključ:", + "codePlaceholder": "6-znamenkasti kod", + "confirm": "Potvrdi", + "enableIntro": "Dodajte drugi sloj sigurnosti pomoću aplikacije za autentifikaciju.", + "enable": "Omogućite 2FA", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Povezani računi", + "subtitle": "Povežite društveni račun kako biste se mogli prijaviti jednim klikom", + "connected": "Povezan", + "unavailable": "Nedostupan", + "login": { + "title": "Prijavite se", + "subtitle": "Dobrodošli nazad — prijavite se za ulazak u hotel.", + "subtitle2fa": "Unesite 6-znamenkasti kod iz autentifikatora.", + "usernamePlaceholder": "Korisničko ime", + "passwordPlaceholder": "Lozinka", + "codePlaceholder": "2FA kod", + "pleaseWait": "Molimo pričekajte…", + "verify": "Potvrdi", + "signIn": "Prijavite se", + "or": "ili", + "noAccount": "Nemate račun?", + "createOne": "Stvorite jedan", + "forgotPassword": "Zaboravili ste lozinku?", + "errorInvalidCredentials": "Nevažeće korisničko ime ili lozinka", + "errorInvalid2fa": "Nevažeći 2FA kod", + "welcomeBack": "Dobrodošao natrag", + "welcomeBackSub": "Prijavi se za nastavak u {hotelName}", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Napravi račun", + "subtitle": "Pridružite se hotelu - potreban je samo trenutak.", + "username": "Korisničko ime", + "email": "E-mail", + "password": "Lozinka", + "confirmPassword": "Ponovi lozinku", + "usernamePlaceholder": "Korisničko ime", + "emailPlaceholder": "E-mail", + "passwordPlaceholder": "Lozinka (najmanje 6 znakova)", + "confirmPasswordPlaceholder": "Ponovi lozinku", + "selectOutfit": "Odaberite svoju odjeću", + "termsAccept": "Imam 18+ godina i prihvaćam odredbe i pravila hotela {hotel}.", + "createAccount": "Napravi račun", + "creatingAccount": "Izrada računa...", + "redirecting": "Preusmjeravanje na vaš račun...", + "alreadyHaveAccount": "Već imate račun? Prijava!", + "register": "Registrirajte se", + "termsError": "Za registraciju morate prihvatiti uvjete i pravila.", + "usernameError": "Korisničko ime je potrebno.", + "emailError": "Potrebna je valjana adresa e-pošte.", + "passwordError": "Lozinka mora imati najmanje 6 znakova.", + "confirmPasswordError": "Lozinke se ne podudaraju.", + "termsRequired": "Morate prihvatiti uvjete i pravila.", + "usernameRequired": "Korisničko ime je potrebno.", + "emailRequired": "Email je obavezan.", + "passwordRequired": "Lozinka je obavezna.", + "passwordsDontMatch": "Lozinke se ne podudaraju.", + "alreadyHaveAccountPre": "Već imaš račun?", + "alreadyHaveAccountLink": "Prijavi se", + "whoIsOnline": "Tko je online", + "usersOnline": "{count} online", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Resetiraj lozinku", + "subtitle": "E-poštom ćemo vam poslati sigurnu vezu za postavljanje nove lozinke.", + "sentNotice": "Ako je ta e-pošta registrirana, poslana je veza za poništavanje. Provjerite svoju pristiglu poštu.", + "emailPlaceholder": "Vaš email", + "sendResetLink": "Pošalji link za resetiranje", + "backToLogin": "Natrag na prijavu", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Postavite novu lozinku", + "subtitle": "Odaberite jaku lozinku koju ne koristite drugdje.", + "passwordPlaceholder": "Nova lozinka (najmanje 6 znakova)", + "resetPassword": "Resetiraj lozinku", + "backToLogin": "Natrag na prijavu" + }, + "verify": { + "verifiedTitle": "Sve je spremno", + "verifiedSubtitle": "Email potvrđen", + "verifiedBody": "Vaša email adresa je potvrđena. Sada se možete prijaviti i igrati.", + "goToLogin": "Idi na prijavu", + "alreadyTitle": "Već provjereno", + "alreadySubtitle": "Ne preostaje ništa za napraviti", + "alreadyBody": "Ova email adresa je već potvrđena.", + "unavailableTitle": "Pokušajte ponovo uskoro", + "unavailableSubtitle": "Poslužitelj nedostupan", + "unavailableBody": "Nismo uspjeli doći do poslužitelja kako bismo potvrdili vašu e-poštu. Pokušajte ponovo s vezom za trenutak.", + "invalidTitle": "Potvrda e-pošte", + "invalidSubtitle": "Veza je nevažeća ili je istekla", + "invalidBody": "Ova veza za potvrdu nije važeća. Provjerite jeste li otvorili cijelu vezu iz svoje e-pošte ili zatražite novu.", + "backToLogin": "Natrag na prijavu" + }, + "banned": { + "title": "Zabranjeni ste", + "subtitle": "Račun obustavljen", + "body": "Vaš račun je suspendiran iz hotela.", + "reasonLabel": "razlog:", + "permanent": "Ova zabrana je trajna.", + "expires": "Istječe {date}.", + "contactStaff": "Ako mislite da je ovo pogreška, kontaktirajte tim osoblja." + }, + "maintenance": { + "title": "{hotel} je u fazi održavanja", + "subtitle": "Uskoro se vraćamo", + "staffCanLogIn": "Osoblje se još uvijek može prijaviti." + }, + "admin": { + "nav": { + "overview": "Pregled", + "dashboard": "Nadzorna ploča", + "content": "Sadržaj", + "articles": "Članci", + "tags": "oznake", + "navigator": "Navigator", + "helpCenter": "Centar za pomoć", + "advertisements": "Oglasi", + "writeableBoxes": "Kutije za pisanje", + "photos": "Fotografije", + "tickets": "Ulaznice", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Korisnici i pristup", + "users": "Korisnici", + "bans": "Zabrane", + "ipManagement": "IP upravljanje", + "vpn": "VPN", + "applications": "Prijave", + "teams": "Timovi", + "permissions": "Dozvole", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "Gospodarstvo", + "catalog": "Katalog", + "shop": "Trgovina", + "transactions": "Transakcije", + "vouchers": "Vaučeri", + "subscriptions": "Pretplate", + "rareValues": "Rijetke vrijednosti", + "badges": "Značke", + "achievements": "Postignuća", + "calendar": "Kalendar", + "radio": "radio", + "radioHistory": "Povijest radija", + "radioBanners": "Transparenti", + "radioEmbed": "Ugraditi", + "radioApiKeys": "API ključevi", + "radioModeration": "Umjerenost", + "radioSettings": "postavke", + "radioMonitoring": "Praćenje", + "radioPoints": "Bodovi", + "radioRanks": "Činovi", + "radioAutodj": "Auto DJ", + "system": "sustav", + "commandocentrum": "Commandocentrum", + "emulator": "Emulator", + "alerts": "upozorenja", + "logs": "Dnevnici", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Filter riječi", + "maintenance": "Održavanje", + "rooms": "Sobe", + "emailTemplates": "Predlošci e-pošte", + "theme": "Tema", + "media": "Mediji", + "favicon": "Favicon", + "sounds": "Zvukovi", + "translations": "Prijevodi", + "import": "uvoz", + "settings": "postavke", + "backToSite": "Povratak na stranicu", + "housekeeping": "Domaćinstvo", + "hotelManagementPanel": "Upravljačka ploča hotela", + "rankLabel": "Rang {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Search menu…", + "clearMenuSearch": "Clear menu search", + "noMenuResults": "No matching pages.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "studio": "Studio", + "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" + }, + "dashboard": { + "title": "Nadzorna ploča", + "subtitle": "Pregled hotela i status uživo", + "playersOnline": "Igrači online", + "articles": "Članci", + "activeBans": "Aktivne zabrane", + "database": "Baza podataka", + "databaseConnected": "Povezan", + "databaseDown": "dolje", + "usersByRank": "Korisnici prema rangu", + "noAccountsToBreakDown": "Još nema računa za raščlambu", + "rankLabel": "Rang {rank}", + "rankWithCount": "Rang {rank}: {count} računa", + "recentStaffActivity": "Nedavna aktivnost osoblja", + "viewAll": "Pogledaj sve", + "noStaffActivityLogged": "Još nije zabilježena aktivnost osoblja", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "Članci", + "subtitle": "Novinski članci — 50 najnovijih", + "newArticle": "+ Novi članak", + "edit": "Uredi", + "delete": "Izbriši", + "noArticles": "Još nema članaka", + "confirmDelete": "Jeste li sigurni da želite izbrisati \"{title}\"?", + "colTitle": "Naslov", + "colSlug": "Puž", + "colAuthor": "Autor", + "colCreated": "Stvoreno", + "colActions": "Radnje", + "form": { + "title": "Naslov", + "titlePlaceholder": "Naslov članka", + "slug": "Puž", + "slugPlaceholder": "članak-url-slug", + "category": "Kategorija", + "categoryPlaceholder": "Odaberite kategoriju", + "body": "Tijelo", + "bodyPlaceholder": "Napišite sadržaj svog članka...", + "image": "Slika", + "imagePlaceholder": "https://example.com/image.png", + "thumbnail": "Sličica", + "thumbnailPlaceholder": "https://example.com/thumb.png", + "published": "Objavljeno", + "featured": "Istaknuto", + "save": "Spremi članak", + "saving": "Spremanje...", + "deleteArticle": "Izbriši članak", + "deleteConfirm": "Ova se radnja ne može poništiti. Članak će biti trajno uklonjen.", + "cancel": "Odustani", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "oznake", + "subtitle": "Oznake / kategorije članaka", + "addTag": "Dodaj oznaku", + "name": "Ime", + "namePlaceholder": "Naziv oznake", + "backgroundColour": "Boja pozadine", + "createTag": "Stvori oznaku", + "editTag": "Uredi oznaku", + "updateTag": "Ažuriraj oznaku", + "deleteTag": "Izbriši oznaku", + "confirmDelete": "Izbrisati \"{name}\"?", + "noTags": "Još nema oznaka", + "colId": "ID", + "colTag": "Oznaka", + "colColour": "Boja", + "colUsedBy": "Koristi ga", + "colCreated": "Stvoreno", + "colActions": "Radnje", + "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": "Ravne kategorije", + "publicRooms": "Javne prostorije", + "addCategory": "Dodajte kategoriju", + "editCategory": "Uredi kategoriju", + "deleteCategory": "Izbriši kategoriju", + "categoryName": "Naziv kategorije", + "categoryNamePlaceholder": "npr. Opustite se i razgovarajte", + "categoryOrder": "Red", + "roomName": "Ime sobe", + "roomNamePlaceholder": "npr. Salon dobrodošlice", + "roomId": "ID sobe", + "roomIdPlaceholder": "Numerički ID sobe", + "save": "spremiti", + "cancel": "Odustani", + "noCategories": "Još nema kategorija", + "noPublicRooms": "Još nema javnih prostorija", + "colId": "ID", + "colName": "Ime", + "colOrder": "Red", + "colRooms": "Sobe", + "colActions": "Radnje", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Centar za pomoć", + "subtitle": "Unosi podrške i upravljanje FAQ-om", + "entries": "Upisi", + "newEntry": "+ Novi unos", + "edit": "Uredi", + "delete": "Izbriši", + "noEntries": "Još nema unosa", + "confirmDelete": "Izbrisati \"{title}\"?", + "colId": "ID", + "colTitle": "Naslov", + "colCategory": "Kategorija", + "colCreated": "Stvoreno", + "colActions": "Radnje", + "form": { + "title": "Naslov", + "titlePlaceholder": "Naslov unosa", + "category": "Kategorija", + "categoryPlaceholder": "Odaberite kategoriju", + "body": "Tijelo", + "bodyPlaceholder": "Napiši odgovor…", + "save": "Spremi unos", + "saving": "Spremanje...", + "deleteEntry": "Izbriši unos", + "cancel": "Odustani" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Oglasi", + "subtitle": "Upravljajte hotelskim oglasima i promotivnim natpisima", + "newAd": "+ Novi oglas", + "edit": "Uredi", + "delete": "Izbriši", + "noAds": "Još nema reklama", + "confirmDelete": "Izbrisati ovaj oglas?", + "colId": "ID", + "colName": "Ime", + "colImage": "Slika", + "colUrl": "URL", + "colViews": "Pogledi", + "colStatus": "Status", + "colCreated": "Stvoreno", + "colActions": "Radnje", + "form": { + "name": "Ime", + "namePlaceholder": "Naziv oglasa", + "image": "URL slike", + "imagePlaceholder": "https://example.com/banner.png", + "url": "Ciljani URL", + "urlPlaceholder": "https://example.com", + "enabled": "Omogućeno", + "save": "Spremi oglas", + "saving": "Spremanje...", + "deleteAd": "Izbriši oglas", + "cancel": "Odustani" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Kutije za pisanje", + "subtitle": "Ploče sa sadržajem prikazane u hotelu i CMS-u", + "newBox": "Nova kutija", + "edit": "Uredi", + "delete": "Izbriši", + "noBoxes": "Još nema kutija za pisanje", + "confirmDelete": "Izbrisati ovaj okvir?", + "colId": "ID", + "colName": "Ime", + "colLocation": "Lokacija", + "colUpdated": "Ažurirano", + "colActions": "Radnje", + "form": { + "name": "Ime", + "namePlaceholder": "Naziv kutije", + "location": "Lokacija", + "locationPlaceholder": "npr. početna stranica, bočna traka", + "content": "Sadržaj", + "contentPlaceholder": "Napišite sadržaj kutije…", + "enabled": "Omogućeno", + "save": "Kutija za spremanje", + "saving": "Spremanje...", + "deleteBox": "Okvir za brisanje", + "cancel": "Odustani", + "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": "Moderacija fotografije", + "subtitle": "Najnovije fotografije kamere u igri", + "delete": "Izbriši", + "approve": "odobriti", + "noPhotos": "Nema fotografija za moderiranje", + "confirmDelete": "Želite li trajno izbrisati ovu fotografiju?", + "colId": "ID", + "colPreview": "Pregled", + "colUser": "Korisnik", + "colRoom": "Soba", + "colTimestamp": "Vremenska oznaka", + "colActions": "Radnje", + "photoAlt": "Korisnička fotografija #{id}", + "byUser": "od {username}", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Korisnici", + "subtitle": "Pregledavajte, pretražujte i upravljajte hotelskim računima", + "search": "Traži", + "searchPlaceholder": "Pretraživanje po korisničkom imenu, e-pošti ili ID-u…", + "searchResults": "{count, plural, one {# result} other {# results}} za \"{query}\"", + "noResults": "Nema pronađenih korisnika", + "colId": "ID", + "colUsername": "Korisničko ime", + "colEmail": "E-mail", + "colRank": "rang", + "colOnline": "Online", + "colRegistered": "Registriran", + "colLastOnline": "Zadnji put online", + "colActions": "Radnje", + "yes": "da", + "no": "br", + "edit": "Uredi", + "setRank": "Postavi rang", + "disconnect": "Prekini vezu", + "alert": "uzbuna", + "ban": "zabrana", + "detail": { + "title": "Korisnik: {username}", + "subtitle": "Podaci o računu i upravljanje", + "overview": "Pregled", + "actions": "Radnje", + "username": "Korisničko ime", + "email": "E-mail", + "motto": "Moto", + "rank": "rang", + "credits": "Zasluge", + "duckets": "Duckets", + "diamonds": "Dijamanti", + "online": "Online", + "registered": "Registriran", + "lastOnline": "Zadnji put online", + "ipAddress": "IP adresa", + "machineId": "ID stroja", + "sendAlert": "Pošalji upozorenje", + "sendMessage": "Pošalji poruku", + "disconnectUser": "Odspojite korisnika", + "banUser": "Ban korisnika", + "resetPassword": "Resetiraj lozinku", + "deleteUser": "Izbriši korisnika", + "confirmDelete": "Jeste li sigurni da želite izbrisati {username}? Ovo se ne može poništiti.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Uredi korisnika: {username}", + "subtitle": "Izmijenite detalje računa", + "username": "Korisničko ime", + "usernamePlaceholder": "Korisničko ime", + "email": "E-mail", + "emailPlaceholder": "korisnik@primjer.com", + "motto": "Moto", + "mottoPlaceholder": "Moto korisnika", + "rank": "rang", + "credits": "Zasluge", + "duckets": "Duckets", + "diamonds": "Dijamanti", + "save": "Spremite promjene", + "saving": "Spremanje...", + "cancel": "Odustani" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Zabrane", + "subtitle": "Upravljajte zabranama računa, IP-a i računala", + "newBan": "Nova zabrana", + "edit": "Uredi", + "delete": "Izbriši", + "noBans": "Još nema zabrana", + "confirmDelete": "Ukloniti ovu zabranu?", + "colId": "ID", + "colValue": "Vrijednost", + "colType": "Vrsta", + "colReason": "razum", + "colBannedBy": "Zabranio", + "colExpires": "ističe", + "colCreated": "Stvoreno", + "colActions": "Radnje", + "form": { + "value": "Vrijednost", + "valuePlaceholder": "Korisničko ime, IP ili ID stroja", + "type": "Vrsta", + "typeUser": "Korisnik", + "typeIp": "IP", + "typeMachine": "Stroj", + "reason": "razum", + "reasonPlaceholder": "Razlog zabrane", + "expiresAt": "Istječe u", + "permanent": "Trajna", + "save": "Spremi zabranu", + "saving": "Spremanje...", + "cancel": "Odustani" + }, + "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 upravljanje", + "subtitle": "Upravljajte popisom dopuštenih i crnih IP adresa", + "whitelist": "Popis dopuštenih", + "blacklist": "Crna lista", + "addIp": "Dodaj IP", + "ipAddress": "IP adresa", + "ipAddressPlaceholder": "npr. 127.0.0.1", + "reason": "razum", + "reasonPlaceholder": "Razlog uvrštavanja na popis", + "add": "Dodaj", + "remove": "Ukloniti", + "confirmRemove": "Ukloniti ovu IP adresu s {list}?", + "noWhitelistedIps": "Nema IP adresa na bijelom popisu", + "noBlacklistedIps": "Nema IP adresa na crnoj listi", + "colIp": "IP", + "colReason": "razum", + "colAdded": "Dodano", + "colActions": "Radnje", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "VPN / Proxy otkrivanje", + "subtitle": "Konfigurirajte postavke otkrivanja VPN-a i proxyja", + "enabled": "Omogućeno", + "apiKey": "API ključ", + "apiKeyPlaceholder": "Vaš API ključ za otkrivanje VPN-a", + "apiKeyHint": "Ostavite prazno za onemogućavanje", + "blockOnDetect": "Blokiraj pri otkrivanju", + "blockOnDetectHint": "Automatski blokirajte korisnike otkrivene iza VPN-a ili proxyja", + "save": "Spremi postavke", + "saving": "Spremanje...", + "settingsSaved": "VPN postavke uspješno su spremljene", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Prijave osoblja", + "subtitle": "Prijave osoblja na čekanju i pregledane", + "pending": "Na čekanju", + "approved": "Odobreno", + "rejected": "Odbijen", + "noApplications": "Još nema prijava", + "colId": "ID", + "colApplicant": "Podnositelj zahtjeva", + "colPosition": "Pozicija", + "colStatus": "Status", + "colSubmitted": "Poslano", + "colActions": "Radnje", + "review": "pregled", + "approve": "odobriti", + "reject": "Odbiti", + "confirmApprove": "Želite li odobriti {username} za {position}?", + "confirmReject": "Odbiti prijavu korisnika {username} za {position}?", + "detail": { + "title": "Prijava od {username}", + "subtitle": "Za {position}", + "about": "O podnositelju zahtjeva", + "message": "Poruka aplikacije", + "status": "Status", + "submitted": "Poslano", + "noMessage": "Nije navedena poruka" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Timovi", + "subtitle": "Definirajte imena i opise činova osoblja", + "addRank": "Dodajte rang", + "editRank": "Uredi poredak", + "deleteRank": "Izbriši rang", + "noTeams": "Još nema definicija ranga", + "confirmDelete": "Izbrisati definiciju ranga {id}?", + "colId": "ID", + "colRank": "rang", + "colName": "Ime", + "colBadge": "Značka", + "colColour": "Boja", + "colActions": "Radnje", + "form": { + "rankId": "ID ranga", + "rankIdPlaceholder": "Brojčani ID ranga", + "name": "Ime", + "namePlaceholder": "npr. Administrator", + "badge": "Šifra značke", + "badgePlaceholder": "npr. ADM001", + "colour": "Boja", + "colourPlaceholder": "npr. #ff0000", + "save": "Spremi definiciju tima", + "saving": "Spremanje...", + "cancel": "Odustani" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Dozvole", + "subtitle": "Upravljajte dopuštenjima na temelju ranga za administrativnu ploču", + "addPermission": "Dodaj dopuštenje", + "editPermission": "Dozvola za uređivanje", + "deletePermission": "Brisanje dopuštenja", + "noPermissions": "Još nema konfiguriranih dopuštenja", + "confirmDelete": "Izbrisati ovu dozvolu?", + "colId": "ID", + "colRank": "rang", + "colPermission": "Dozvola", + "colCreated": "Stvoreno", + "colActions": "Radnje", + "form": { + "rankId": "ID ranga", + "rankIdPlaceholder": "Potreban minimalni rang", + "permission": "Ključ dopuštenja", + "permissionPlaceholder": "npr. admin.članci.upravljati", + "save": "Spremi dopuštenje", + "saving": "Spremanje...", + "cancel": "Odustani" + } + }, + "catalog": { + "title": "Katalog", + "subtitle": "Pregledajte i upravljajte kataloškim stranicama i artiklima", + "pages": "Stranice", + "items": "Predmeti", + "addPage": "Dodaj stranicu", + "editPage": "Uredi stranicu", + "deletePage": "Izbriši stranicu", + "addItem": "Dodaj stavku", + "editItem": "Uredi stavku", + "deleteItem": "Izbriši stavku", + "noPages": "Još nema stranica kataloga", + "noItems": "Nema stavki na ovoj stranici", + "confirmDeletePage": "Izbrisati stranicu kataloga \"{name}\"?", + "confirmDeleteItem": "Izbrisati ovu stavku?", + "colId": "ID", + "colName": "Ime", + "colIcon": "Ikona", + "colOrder": "Red", + "colItems": "Predmeti", + "colEnabled": "Omogućeno", + "colActions": "Radnje", + "colItemId": "ID stavke", + "colItemName": "Naziv artikla", + "colCostCredits": "Trošak (krediti)", + "colCostPoints": "Cijena (bodovi)", + "colLimited": "ograničeno", + "pageForm": { + "name": "Ime", + "namePlaceholder": "Naziv stranice", + "icon": "ID ikone", + "iconPlaceholder": "ID numeričke ikone", + "order": "Red", + "enabled": "Omogućeno", + "parent": "Matična stranica", + "parentNone": "Ništa (root)", + "save": "Spremi stranicu", + "saving": "Spremanje...", + "cancel": "Odustani" + }, + "itemForm": { + "itemId": "ID stavke", + "itemName": "Naziv artikla", + "costCredits": "Trošak u kreditima", + "costDuckets": "Cijena u patkama", + "costDiamonds": "Cijena u dijamantima", + "limitedStack": "Ograničena veličina hrpe", + "limitedSold": "Ograničeno prodano", + "save": "Spremi stavku", + "saving": "Spremanje...", + "cancel": "Odustani" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Trgovina", + "subtitle": "Upravljajte paketima i narudžbama", + "packages": "Paketi", + "orders": "Narudžbe", + "newPackage": "+ Novi paket", + "edit": "Uredi", + "delete": "Izbriši", + "viewOrder": "pogled", + "noPackages": "Još nema paketa za trgovinu", + "noOrders": "Još nema narudžbi", + "confirmDelete": "Izbrisati ovaj paket?", + "colId": "ID", + "colName": "Ime", + "colPrice": "Cijena", + "colCurrency": "valuta", + "colType": "Vrsta", + "colSold": "prodano", + "colEnabled": "Omogućeno", + "colActions": "Radnje", + "colOrderId": "ID narudžbe", + "colCustomer": "Kupac", + "colPackage": "Paket", + "colAmount": "Iznos", + "colStatus": "Status", + "colDate": "Datum", + "statusPending": "Na čekanju", + "statusCompleted": "Završeno", + "statusRefunded": "Vraćeno", + "form": { + "name": "Ime", + "namePlaceholder": "Naziv paketa", + "description": "Opis", + "descriptionPlaceholder": "Opis paketa", + "price": "Cijena", + "currency": "valuta", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Vrsta", + "typeCredits": "Zasluge", + "typeDuckets": "Duckets", + "typeDiamonds": "Dijamanti", + "typeBadge": "Značka", + "typeFurni": "Namještaj", + "typeRank": "rang", + "amount": "Iznos", + "badgeCode": "Šifra značke", + "badgeCodePlaceholder": "npr. VIP001", + "rankId": "ID ranga", + "furniItems": "Predmeti namještaja", + "enabled": "Omogućeno", + "save": "Spremi paket", + "saving": "Spremanje...", + "cancel": "Odustani", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "Transakcije", + "subtitle": "PayPal dnevnik plaćanja", + "noTransactions": "Još nema transakcija", + "colId": "ID", + "colUser": "Korisnik", + "colAmount": "Iznos", + "colCurrency": "valuta", + "colPackage": "Paket", + "colStatus": "Status", + "colDate": "Datum", + "colActions": "Radnje", + "statusCompleted": "Završeno", + "statusPending": "Na čekanju", + "statusFailed": "nije uspjelo", + "statusRefunded": "Vraćeno", + "detail": { + "title": "Transakcija #{id}", + "paypalId": "PayPal ID", + "payerEmail": "Email platitelja", + "grossAmount": "Bruto iznos", + "fee": "naknada", + "netAmount": "Neto iznos" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Kupujte bonove", + "subtitle": "Upravljajte kodovima vaučera koji se mogu iskoristiti", + "newVoucher": "+ Novi vaučer", + "edit": "Uredi", + "delete": "Izbriši", + "noVouchers": "Još nema kupona", + "confirmDelete": "Izbrisati vaučer \"{code}\"?", + "colId": "ID", + "colCode": "Šifra", + "colValue": "Vrijednost", + "colType": "Vrsta", + "colUses": "Upotreba / Maks", + "colExpires": "ističe", + "colCreated": "Stvoreno", + "colActions": "Radnje", + "form": { + "code": "Šifra", + "codePlaceholder": "npr. LJETO2025", + "value": "Vrijednost", + "type": "Vrsta", + "typeCredits": "Zasluge", + "typeDuckets": "Duckets", + "typeDiamonds": "Dijamanti", + "typeBadge": "Značka", + "typeFurni": "Namještaj", + "typeRank": "rang", + "badgeCode": "Šifra značke", + "badgeCodePlaceholder": "npr. VIP001", + "rankId": "ID ranga", + "maxUses": "Max koristi", + "maxUsesPlaceholder": "0 = neograničeno", + "expiresAt": "Istječe u", + "enabled": "Omogućeno", + "save": "Sačuvaj vaučer", + "saving": "Spremanje...", + "cancel": "Odustani", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Pretplate", + "subtitle": "Aktivne ponavljajuće pretplate", + "noSubscriptions": "Nema aktivnih pretplata", + "cancel": "Odustani", + "confirmCancel": "Otkazati pretplatu za {username}?", + "colId": "ID", + "colUser": "Korisnik", + "colPackage": "Paket", + "colAmount": "Iznos", + "colInterval": "Interval", + "colStarted": "Započelo", + "colNextBilling": "Sljedeća naplata", + "colStatus": "Status", + "colActions": "Radnje", + "statusActive": "Aktivno", + "statusCancelled": "Otkazano", + "statusExpired": "isteklo", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Rijetke vrijednosti", + "subtitle": "Upravljajte rijetkim vrijednosnim kategorijama i cijenama predmeta", + "categories": "kategorije", + "items": "Predmeti", + "addCategory": "Dodajte kategoriju", + "editCategory": "Uredi kategoriju", + "deleteCategory": "Izbriši kategoriju", + "noCategories": "Još nema rijetkih vrijednosnih kategorija", + "confirmDeleteCategory": "Izbrisati kategoriju \"{name}\" i sve njezine stavke?", + "colId": "ID", + "colName": "Ime", + "colItems": "Predmeti", + "colUpdated": "Ažurirano", + "colActions": "Radnje", + "colItemName": "Naziv artikla", + "colCredits": "Zasluge", + "colPoints": "Bodovi", + "colPointType": "Vrsta točke", + "categoryForm": { + "name": "Ime", + "namePlaceholder": "Naziv kategorije", + "save": "Spremi kategoriju", + "saving": "Spremanje...", + "cancel": "Odustani" + }, + "itemForm": { + "itemName": "Naziv artikla", + "itemNamePlaceholder": "npr. Prijestolje", + "credits": "Vrijednost kredita", + "points": "Vrijednost bodova", + "pointType": "Vrsta točke", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Dijamanti", + "save": "Spremi stavku", + "saving": "Spremanje...", + "cancel": "Odustani", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Značke", + "subtitle": "Učitajte, dajte i upravljajte katalogom bedževa", + "upload": "Upload", + "giveBadge": "Dajte značku", + "catalogue": "Katalog", + "uploadTitle": "Prenesi novu značku", + "uploadSubtitle": "Prenesite datoteku slike značke", + "badgeCode": "Šifra značke", + "badgeCodePlaceholder": "npr. VIP001", + "badgeFile": "Datoteka značke", + "badgeFileHint": "PNG ili GIF, preporučeno 40x40", + "uploadButton": "Upload", + "uploading": "Prijenos…", + "giveTitle": "Dajte bedž korisniku", + "giveSubtitle": "Dodijelite bedž određenom korisniku", + "username": "Korisničko ime", + "usernamePlaceholder": "Ciljano korisničko ime", + "giveButton": "Dajte značku", + "giving": "Davanje…", + "catalogueTitle": "Katalog znački", + "catalogueSubtitle": "Sve dostupne značke u hotelu", + "noBadges": "Nema bedževa u katalogu", + "search": "Značke za pretraživanje", + "searchPlaceholder": "Traži po šifri ili nazivu…", + "colCode": "Šifra", + "colImage": "Slika", + "colName": "Ime", + "colDescription": "Opis", + "colActions": "Radnje", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Postignuća", + "subtitle": "Popis postignuća u igri samo za čitanje", + "noAchievements": "Nema konfiguriranih postignuća", + "colId": "ID", + "colName": "Ime", + "colCategory": "Kategorija", + "colLevels": "Razine", + "colReward": "Nagrada", + "colProgress": "napredak", + "levelLabel": "Razina {level}", + "rewardCredits": "{count} kredita", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Kalendarske kampanje", + "subtitle": "Popis kalendarskih kampanja i događaja samo za čitanje", + "noCampaigns": "Još nema kalendarskih kampanja", + "colId": "ID", + "colName": "Ime", + "colStart": "Start", + "colEnd": "Kraj", + "colType": "Vrsta", + "colReward": "Nagrada", + "colActions": "Radnje", + "detail": { + "title": "Kampanja: {name}", + "subtitle": "Detalji događaja u kalendaru", + "days": "dana", + "dayLabel": "dan {day}", + "reward": "Nagrada", + "noDays": "Za ovu kampanju nisu konfigurirani dani", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Radio moderiranje", + "subtitle": "Najnoviji oglasi, prijave DJ-a i rasporedi emitiranja (25 najnovijih od svakog).", + "moderation": "Umjerenost", + "shouts": "Uzvici", + "applications": "Prijave", + "schedules": "Rasporedi", + "settings": "postavke", + "embed": "Ugraditi", + "ranks": "Činovi", + "history": "Povijest", + "apiKeys": "API ključevi", + "points": "Bodovi", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Radio nadzor", + "subtitle": "Proba uživo samo za čitanje konfiguriranih radijskih krajnjih točaka (radio_now_playing_api_url, radio_listeners_api_url). Svaki zahtjev ne uspijeva meko s vremenskim ograničenjem {timeout} — podaci se ne upisuju. Konfigurirajte URL-ove pod Postavkama.", + "stream": "Stream", + "online": "Online", + "offline": "Izvan mreže", + "notConfigured": "Nije konfigurirano", + "nowPlaying": "Sada svira", + "nowPlayingApi": "API koji se sada igra", + "listenersApi": "API slušatelja", + "listeners": "Slušatelji", + "currentSong": "Aktualna pjesma", + "bitrate": "Bitrate", + "status": "Status", + "noNowPlayingHint": "nema postavljenog API-ja koji se sada igra", + "noListenersHint": "nije postavljen API slušatelja", + "endpointDiagnostics": "Dijagnostika krajnje točke", + "diagnosticsLegend": "OK: dostupno · WARN: nije konfigurirano · ERROR: zahtjev nije uspio ili je istekao.", + "streamUrl": "URL streama", + "unreachable": "nedostižan", + "refresh": "Osvježi" + }, + "user": "Korisnik", + "message": "Poruka", + "posted": "Objavljeno", + "realName": "Pravo ime", + "age": "Dob", + "style": "Stil", + "applied": "Primijenjeno", + "day": "dan", + "start": "Start", + "end": "Kraj", + "show": "pokazati", + "status": "Status", + "active": "aktivan", + "inactive": "neaktivan", + "hidden": "skriveni", + "activeSchedules": "Aktivni rasporedi", + "noShouts": "Nema vike za moderiranje", + "noApplications": "Nije poslana nijedna prijava.", + "noSchedules": "Nema konfiguriranih rasporeda.", + "deleteShout": "Izbriši", + "confirmDeleteShout": "Izbrisati ovaj uzvik?", + "pendingApplications": "Prijave na čekanju", + "settingsForm": { + "title": "Postavke radija", + "subtitle": "Uređivanja se zapisuju u web_settings (tipke radio_*) i uništavaju predmemoriju postavki vremena izvođenja. Booleovi koriste 0/1.", + "enabled": "Omogućeno", + "disabled": "Onesposobljeno", + "totalKeys": "Ukupni ključevi", + "configured": "Konfigurirano", + "curatedHint": "odabrani ključevi s vrijednošću", + "customKeys": "Prilagođeni ključevi", + "saveAll": "Spremi sve", + "singleKey": "Dodajte / prebrišite jedan ključ", + "keyPlaceholder": "radio_prilagođeni_ključ", + "valuePlaceholder": "vrijednost", + "commentPlaceholder": "komentar (nije obavezno)", + "saveSingle": "spremiti", + "otherSettings": "Ostale postavke radija", + "dbError": "Nije moguće učitati postavke (baza podataka nije dostupna). Zadane postavke bit će stvorene prilikom spremanja." + }, + "embedPage": { + "title": "Radio Embed", + "subtitle": "Kod za ugradnju spreman za kopiranje za prijenos uživo. Samo za čitanje — ovdje ništa ne piše u bazu podataka. Konfigurirajte URL streama u postavkama radija (radio_stream_url).", + "streamUrl": "URL streama", + "configured": "Konfigurirano", + "missing": "Nedostaje", + "radioName": "Naziv radija", + "nowPlayingApi": "API koji se sada igra", + "set": "set", + "notSet": "Nije postavljeno", + "noStreamUrl": "URL streama nije konfiguriran", + "noStreamUrlText": "Nije postavljen radio_stream_url, tako da još nema ništa za ugraditi.", + "goToSettings": "Idite na Radio Settings", + "livePreview": "Pregled uživo", + "livePreviewText": "Ovo je goli audio player kako će ga posjetitelji vidjeti. Pritisnite play kako biste potvrdili da je stream dostupan.", + "source": "Izvor", + "audioSnippet": "Isječak audio playera", + "audioSnippetDesc": "Umetnuti HTML5 audio player usmjeren ravno prema streamu. Radi svugdje gdje je dopušten obični HTML.", + "iframeSnippet": "Isječak omota iframea", + "iframeSnippetDesc": "Ugrađuje vlastitu stranicu radijskog playera web-mjesta u iframe — čuva vaš stil i informacije o trenutnoj reprodukciji. Prilagodite širinu/visinu prema ukusu.", + "audioUnsupported": "Vaš preglednik ne podržava audio element." + }, + "banners": { + "title": "Transparenti", + "heading": "Radio banneri", + "description": "Promotivni banneri prikazani na radijskoj stranici, poredani po redoslijedu.", + "addBanner": "Dodajte natpis", + "createBanner": "Napravi banner", + "deleteBanner": "Izbriši banner", + "noBanners": "Još nema bannera — dodajte jedan iznad.", + "existing": "Postojeći natpisi ({count})", + "save": "spremiti", + "delete": "Izbriši", + "byUser": "korisnik {id}", + "active": "aktivan", + "hidden": "skriveni", + "bannerAlt": "Radio banner", + "statusActive": "Aktivno", + "statusHidden": "Skriveno", + "dbError": "Nije moguće učitati bannere (baza podataka nije dostupna).", + "form": { + "imagePath": "Put / URL slike", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Naslov", + "description": "Opis", + "sortOrder": "Redoslijed sortiranja", + "active": "Aktivno" + } + }, + "ranksForm": { + "title": "Radio Činovi", + "subtitle": "DJ/osoblje se može dodijeliti na radijskim prijavama.", + "dbError": "Nije moguće učitati rangove (baza podataka nije dostupna).", + "active": "Aktivno", + "addRank": "Dodajte rang", + "name": "Ime", + "badgeCode": "Šifra značke", + "description": "Opis", + "createRank": "Stvorite rang", + "existing": "Postojeći rangovi ({count})", + "noRanks": "Još nema činova — dodajte jedan iznad.", + "activeLabel": "aktivan", + "inactiveLabel": "neaktivan", + "save": "spremiti", + "deleteRank": "Izbriši rang #{id}" + }, + "historyPage": { + "title": "Povijest radijskih igara", + "subtitle": "Prošle DJ emisije i vrijeme emitiranja (radio_history), prvo najnovije. Dnevnik samo za čitanje o tome tko je bio u eteru, kada i koliko se slušatelja uključilo.", + "dbError": "Nije moguće učitati radio povijest (baza podataka nije dostupna).", + "showsLogged": "Emisije zabilježene", + "onAirNow": "Sada u eteru", + "uniqueDjs": "Jedinstveni DJ-i", + "peakListeners": "Vrhunac slušanosti", + "empty": "Još nije zabilježena povijest radija.", + "showLog": "Prikaži dnevnik ({count})", + "colDj": "DJ", + "colShow": "pokazati", + "colStarted": "Započelo", + "colEnded": "Završeno", + "colAirtime": "Vrijeme emitiranja", + "colListeners": "Slušatelji", + "colNotes": "Bilješke", + "onAir": "u eteru" + }, + "apiKeysForm": { + "title": "Radio API ključevi", + "subtitle": "API ključevi za vanjske radijske integracije (radio_api_keys). Ključevi se generiraju na strani poslužitelja i prikazuju maskirani — kopirajte punu vrijednost iz baze podataka kada su prvi put izdani.", + "dbError": "Nije moguće učitati API ključeve (baza podataka nije dostupna).", + "totalKeys": "Ukupni ključevi", + "active": "Aktivno", + "inactive": "Neaktivan", + "generateKey": "Generiraj ključ", + "generateHint": "Tajni ključ se generira automatski kriptografskom slučajnošću - ne unosite ga.", + "name": "Ime", + "namePlaceholder": "AzureCast most", + "rateLimit": "Ograničenje brzine (zahtjevi/min)", + "allowedIps": "Dopuštene IP adrese (izborno)", + "allowedIpsPlaceholder": "odvojeni zarezom, prazno = bilo koje", + "generate": "Generiraj ključ", + "existingKeys": "Postojeći ključevi ({count})", + "noKeys": "Još nema API ključeva — generirajte jedan iznad.", + "colName": "Ime", + "colKey": "Ključ", + "colAllowedIps": "Dopuštene IP adrese", + "colRateLimit": "Ograničenje stope", + "colLastUsed": "Zadnje korišteno", + "colExpires": "ističe", + "colStatus": "Status", + "colActions": "Radnje", + "maskedHint": "Prikazuje se samo prvih 8 znakova", + "any": "bilo koji", + "activeLabel": "aktivan", + "inactiveLabel": "neaktivan", + "deactivate": "Deaktiviraj", + "activate": "Aktiviraj", + "delete": "Izbriši" + }, + "pointsForm": { + "title": "Bodovi radijskih slušatelja", + "subtitle": "Nagradite slušatelje valutom za vrijeme provedeno na radiju. Uređivanja se zapisuju u web_settings (radio_points_* tipke) i uništavaju predmemoriju postavki vremena izvođenja. Booleovi koriste 0/1.", + "saved": "Spremljeno", + "points": "Bodovi", + "enabled": "Omogućeno", + "disabled": "Onesposobljeno", + "perMinute": "Po minuti", + "paidIn": "plaćeno u {currency}", + "maxPerDay": "Max / dan", + "unlimited": "Neograničeno", + "minListeners": "Min slušatelja", + "settings": "postavke", + "pointsEnabled": "Bodovi omogućeni", + "pointsEnabledHint": "Glavni prekidač za dodjelu slušateljskih bodova.", + "currency": "valuta", + "currencyHint": "U koji novčanik se uplaćuju bodovi.", + "pointsPerMinute": "Bodovi u minuti", + "pointsPerMinuteHint": "Iznos koji se dodjeljuje za svaku punu minutu slušanja.", + "maxPerDayHint": "Dnevno ograničenje po korisniku. Koristite 0 za neograničeno.", + "minListenersHint": "Bodovi se dodjeljuju samo ako je barem ovoliko ljudi uključeno.", + "save": "Spremi postavke bodova" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Zamjenski popis za reprodukciju (radio_auto_dj_playlist) kroz koji se radio vrti kada nijedan DJ ne emitira uživo. Poredano prema redoslijedu sortiranja pa naslovu.", + "dbError": "Nije moguće učitati AutoDJ popis za reprodukciju (baza podataka nije dostupna).", + "tracks": "Pjesme", + "active": "Aktivno", + "inactive": "Neaktivan", + "addTrack": "Dodaj pjesmu", + "titlePlaceholder": "Naslov pjesme", + "artist": "Umjetnik", + "album": "Album", + "artworkUrl": "URL umjetničkog djela", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Trajanje (sekunde)", + "durationPlaceholder": "npr. 215", + "sortOrder": "Redoslijed sortiranja", + "playlist": "Popis za reprodukciju ({count})", + "noTracks": "Još nema AutoDJ zapisa — dodajte jedan iznad.", + "colOrder": "Red", + "colTitle": "Naslov", + "colArtist": "Umjetnik", + "colAlbum": "Album", + "colDuration": "Trajanje", + "colPlays": "Igra", + "colLastPlayed": "Zadnje igrano", + "colStatus": "Status", + "colActions": "Radnje", + "activeLabel": "aktivan", + "inactiveLabel": "neaktivan", + "deactivate": "Deaktiviraj", + "activate": "Aktiviraj", + "delete": "Izbriši", + "trackTitle": "Naslov" + }, + "moderationPage": { + "title": "DJ moderiranje", + "subtitle": "Pregledajte i uklonite radijske povike (50 najnovijih).", + "recentShouts": "Nedavni uzvici ({count})" + } + }, + "commandocentrum": { + "title": "Commandocentrum", + "subtitle": "Dijagnostika, RCON kontrole i upravljanje korisnicima", + "diagnostics": "Dijagnostika", + "rcon": "RCON", + "userActions": "Radnje korisnika", + "diagnosticsTitle": "Dijagnostika emulatora", + "memoryUsage": "Upotreba memorije", + "uptime": "Vrijeme rada", + "onlineUsers": "Online korisnici", + "roomsLoaded": "Sobe su učitane", + "refresh": "Osvježi", + "rconTitle": "RCON naredbe", + "rconPlaceholder": "Unesite RCON naredbu…", + "rconSend": "poslati", + "rconSending": "Slanje...", + "rconResponse": "Odgovor", + "userActionsTitle": "Radnje korisnika", + "username": "Korisničko ime", + "usernamePlaceholder": "Ciljano korisničko ime", + "action": "Akcija", + "execute": "izvršiti", + "actions": { + "disconnect": "Prekini vezu", + "alert": "Pošalji upozorenje", + "giveCredits": "Dajte kredite", + "giveBadge": "Dajte značku", + "givePoints": "Dajte bodove", + "ban": "zabrana", + "kick": "Udarac" + }, + "messagePlaceholder": "Poruka (za upozorenja)…", + "amountPlaceholder": "Iznos…", + "badgePlaceholder": "Šifra značke…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Konfiguracija emulatora", + "subtitle": "Pregledajte i uredite postavke emulatora i tekstove na lokalnom jeziku", + "settings": "postavke", + "texts": "Tekstovi", + "search": "Traži", + "searchPlaceholder": "Ključevi za pretraživanje…", + "noSettings": "Nema pronađenih postavki", + "noTexts": "Nema pronađenih tekstova", + "edit": "Uredi", + "save": "spremiti", + "saving": "Spremanje...", + "cancel": "Odustani", + "colKey": "Ključ", + "colValue": "Vrijednost", + "colType": "Vrsta", + "colActions": "Radnje", + "editDialog": { + "title": "Uredi: {key}", + "value": "Vrijednost", + "valuePlaceholder": "Unesite vrijednost…", + "save": "Spremite promjene", + "cancel": "Odustani" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "upozorenja", + "subtitle": "Šaljite upozorenja cijelom hotelu i pogledajte nedavna upozorenja", + "sendAlert": "Pošalji hotelsko upozorenje", + "recentAlerts": "Nedavna upozorenja ({count})", + "noRecentAlerts": "Nema nedavnih upozorenja", + "form": { + "title": "Naslov upozorenja", + "titlePlaceholder": "npr. Održavanje servera za 10 minuta", + "message": "Poruka upozorenja", + "messagePlaceholder": "Napišite poruku upozorenja...", + "type": "Vrsta", + "typeHotel": "Upozorenje za cijeli hotel", + "typeStaff": "Samo osoblje", + "urgent": "Hitno", + "send": "Pošalji upozorenje", + "sending": "Slanje...", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "ID", + "colTitle": "Naslov", + "colSentBy": "Poslao", + "colType": "Vrsta", + "colDate": "Datum", + "colActions": "Radnje", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Aktivnosti osoblja", + "subtitle": "Revizijski trag radnji osoblja u administrativnoj ploči", + "noLogs": "Još nije zabilježena aktivnost osoblja", + "colId": "ID", + "colUser": "Korisnik", + "colAction": "Akcija", + "colTarget": "cilj", + "colDescription": "Opis", + "colIp": "IP", + "colTimestamp": "Vremenska oznaka", + "filterByUser": "Filtriraj po korisniku…", + "filterByAction": "Filtriraj prema radnji...", + "clearFilters": "Očisti filtre", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Filtar riječi", + "subtitle": "Upravljajte filtriranim riječima i frazama u hotelu", + "addWord": "Dodaj riječ", + "addWords": "Dodajte riječi", + "noWords": "Još nema filtriranih riječi", + "confirmDelete": "Ukloniti \"{word}\" iz filtra?", + "colId": "ID", + "colWord": "Riječ", + "colAddedBy": "Dodao", + "colCreated": "Stvoreno", + "colActions": "Radnje", + "form": { + "word": "Riječ", + "wordPlaceholder": "npr. ružna riječ", + "addMore": "Dodajte više riječi (jednu po retku)", + "save": "Dodaj u filter", + "saving": "Spremanje...", + "cancel": "Odustani" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Način održavanja", + "subtitle": "Omogućite ili onemogućite održavanje u cijelom hotelu", + "enabled": "Način održavanja je omogućen", + "disabled": "Način održavanja je onemogućen", + "enable": "Omogući održavanje", + "disable": "Onemogući održavanje", + "message": "Poruka o održavanju", + "messagePlaceholder": "Vraćamo se uskoro!", + "staffAccess": "Omogućite pristup osoblju tijekom održavanja", + "save": "Spremi postavke", + "saving": "Spremanje...", + "confirmEnable": "Omogućavanje održavanja onemogućit će svim korisnicima koji nisu zaposlenici pristup hotelu. Nastaviti?", + "confirmDisable": "Onemogućiti način održavanja i vratiti pristup svim korisnicima?", + "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": "Dozvole za održavanje", + "subtitle": "Konfigurirajte koji činovi mogu pristupiti kojim administratorskim odjeljcima", + "addPermission": "Dodaj dopuštenje", + "editPermission": "Dozvola za uređivanje", + "deletePermission": "Brisanje dopuštenja", + "noPermissions": "Nema konfiguriranih dozvola za održavanje", + "confirmDelete": "Izbrisati ovu dozvolu?", + "colId": "ID", + "colRank": "rang", + "colSection": "odjeljak", + "colActions": "Radnje", + "form": { + "rankId": "ID ranga", + "rankIdPlaceholder": "Minimalni rang", + "section": "Ključ odjeljka", + "sectionPlaceholder": "npr. admin.kontrolna ploča", + "save": "Spremi dopuštenje", + "saving": "Spremanje...", + "cancel": "Odustani" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset Primijenjeno!", + "cleared": "All Dozvole cleared!", + "invalidRank": "Invalid rang", + "testDone": "Test done: {count} Dozvole found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Izbriši ALL Dozvole? This Akcija cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Dozvola", + "colDescription": "Opis", + "colMinRank": "Min. Rang", + "permissionKey": "Ključ dopuštenja", + "minRank": "Min. rang", + "description": "Opis", + "permissions": "Dozvole", + "permissionsCount": "{count} Dozvole", + "permission": "Dozvola", + "highestMinRank": "Highest min. rang: {rank}", + "totalMinRank": "Total min. rang sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Činovi", + "missingDeps": "{count} Nedostaje dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(Nedostaje)", + "rank": "rang", + "count": "Count", + "searchPermission": "Traži Dozvole…", + "search": "Traži", + "manage": "Manage", + "importSelection": "Uvoz selection", + "noGroup": "Br group", + "allGroups": "All groups", + "perGroup": "Dozvole per group", + "perRank": "Dozvole per rang", + "rankOverviewHint": "All Dozvole grouped by the rang they are assigned to.", + "tabOverview": "Pregled", + "tabManage": "Manage", + "tabImport": "Uvoz / Export", + "tabRanks": "Rang Pregled", + "tabPresets": "Unaprijed postavljene postavke", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "Uvoz Dozvole", + "importHint": "Paste a JSON array of Dozvola objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "uvoz", + "exportTitle": "Export Dozvole", + "exportHint": "Export all Dozvole as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Dozvola Unaprijed postavljene postavke", + "presetsHint": "Primijeniti a predefined set of Dozvole for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Umjerenost tools: Korisnik lookup, Zabrane, CFH handling, chat Dnevnici.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Korisnici, Sobe, news, postavke, Trgovina, events, radio & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including Dozvola management and asset uvoz.", + "applyPreset": "Primijeniti preset", + "clearAll": "Clear all Dozvole", + "testTitle": "Test rang access", + "testHint": "Enter a rang number to see which Dozvole would be granted.", + "test": "Test", + "auditTitle": "Dozvola audit log", + "auditHint": "All changes to Domaćinstvo Dozvole are logged.", + "auditLogsAt": "Audit Dnevnici are available on the Audit log page.", + "viewAuditLogs": "Pogled audit Dnevnici", + "importedWithErrors": "Imported {count} Dozvole with {errors} errors", + "confirmClearAllDesc": "This will Ukloniti every Dozvola entry from the Baza podataka. Are you sure?", + "confirmDeletePermission": "Izbriši this Dozvola permanently?", + "confirmBulkDelete": "Izbriši {count} selected Dozvole?", + "deleteSelected": "Izbriši {count} selected", + "cancel": "Odustani", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Korisnik", + "auditAction": "Akcija", + "auditTarget": "cilj", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Sobe", + "subtitle": "Pretražujte i upravljajte hotelskim sobama", + "search": "Traži", + "searchPlaceholder": "Traži po imenu, vlasniku ili ID-u…", + "searchResults": "{count, plural, one {# room} other {# rooms}} pronađeno za \"{query}\"", + "noResults": "Nije pronađena nijedna soba", + "colId": "ID", + "colName": "Ime", + "colOwner": "Vlasnik", + "colUsers": "Korisnici", + "colState": "Država", + "colCategory": "Kategorija", + "colCreated": "Stvoreno", + "colActions": "Radnje", + "stateOpen": "Otvoreno", + "stateClosed": "Zatvoreno", + "stateLocked": "Zaključano", + "stateInvisible": "Nevidljivi", + "detail": { + "title": "Soba: {name}", + "subtitle": "U vlasništvu {owner}", + "overview": "Pregled", + "actions": "Radnje", + "description": "Opis", + "noDescription": "Nema opisa", + "owner": "Vlasnik", + "users": "Korisnici na mreži", + "maxUsers": "Maks. korisnika", + "category": "Kategorija", + "state": "Država", + "tags": "oznake", + "noTags": "Nema oznaka", + "created": "Stvoreno", + "deleteRoom": "Izbriši sobu", + "confirmDelete": "Izbrisati sobu \"{name}\"? Ovo se ne može poništiti.", + "enterRoom": "Uđi u sobu", + "changeOwner": "Promjena vlasnika", + "changeOwnerPlaceholder": "Korisničko ime novog vlasnika" + } + }, + "emailTemplates": { + "title": "Predlošci e-pošte", + "subtitle": "Upravljajte predlošcima transakcijske e-pošte", + "newTemplate": "+ Novi predložak", + "edit": "Uredi", + "delete": "Izbriši", + "noTemplates": "Još nema predložaka e-pošte", + "confirmDelete": "Izbrisati predložak \"{name}\"?", + "colId": "ID", + "colName": "Ime", + "colSubject": "Predmet", + "colKey": "Ključ", + "colUpdated": "Ažurirano", + "colActions": "Radnje", + "form": { + "name": "Ime", + "namePlaceholder": "npr. E-pošta dobrodošlice", + "key": "Ključ", + "keyPlaceholder": "npr. dobrodošli_e-mail", + "subject": "Predmet", + "subjectPlaceholder": "Predmet e-pošte", + "body": "Tijelo (HTML)", + "bodyPlaceholder": "

Poštovani {username},

", + "variables": "Dostupne varijable", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Spremi predložak", + "saving": "Spremanje...", + "cancel": "Odustani", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Tema", + "subtitle": "Prilagodite izgled CMS-a", + "presets": "Unaprijed postavljene postavke", + "colours": "Boje", + "css": "CSS", + "presetsTitle": "Unaprijed postavljene teme", + "presetsSubtitle": "Odaberite unaprijed pripremljenu shemu boja", + "applyPreset": "primijeniti", + "presetApplied": "Unaprijed postavljeno: {preset}", + "customiseTitle": "Prilagođene boje", + "primary": "Primarni", + "secondary": "Sekundarna", + "accent": "Naglasak", + "background": "Pozadina", + "surface": "Površina", + "text": "Tekst", + "saveColours": "Sačuvajte boje", + "savingColours": "Spremanje...", + "cssTitle": "Prilagođeni CSS", + "cssSubtitle": "Dodajte prilagođeni CSS za nadjačavanje stilova tema", + "cssPlaceholder": "/* Vaš prilagođeni CSS ovdje */", + "saveCss": "Spremi CSS", + "savingCss": "Spremanje...", + "reset": "Vrati na zadane postavke", + "confirmReset": "Vratiti temu na zadane vrijednosti?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Mediateka", + "subtitle": "Učitajte i upravljajte medijskim datotekama", + "upload": "Upload", + "uploadTitle": "Učitajte datoteku", + "uploadSubtitle": "Povucite i ispustite ili kliknite za prijenos", + "uploadButton": "Odaberite datoteku", + "uploading": "Prijenos…", + "noFiles": "Još nema medijskih datoteka", + "delete": "Izbriši", + "confirmDelete": "Želite li trajno izbrisati ovu datoteku?", + "search": "Traži", + "searchPlaceholder": "Traži po nazivu datoteke…", + "colPreview": "Pregled", + "colName": "Ime", + "colSize": "Veličina", + "colType": "Vrsta", + "colUploaded": "Učitano", + "colActions": "Radnje", + "copyUrl": "Kopiraj URL", + "urlCopied": "URL kopiran u međuspremnik" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Učitajte favicon stranice i upravljajte njome", + "current": "Trenutačni favicon", + "uploadLabel": "Prenesi favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO ili SVG. Maksimalno 2 MB.", + "upload": "Upload", + "uploading": "Prijenos…", + "delete": "Ukloniti", + "deleting": "Uklanjanje...", + "saved": "Favicon je uspješno spremljen!", + "deleted": "Favicon je uspješno uklonjen!", + "error": "Nešto nije u redu", + "confirmDelete": "Ukloniti favicon? Stranica više neće prikazivati ​​prilagođeni favicon.", + "generator": { + "title": "Generiraj favicon", + "text": "Tekst", + "bgColor": "Boja pozadine", + "textColor": "Boja teksta", + "rounded": "Zaobljeni kutovi", + "save": "Spremi kao favicon" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "CMS postavke", + "subtitle": "Upravljanje CMS konfiguracijom ključ/vrijednost", + "addSetting": "Dodaj postavku", + "edit": "Uredi", + "delete": "Izbriši", + "noSettings": "Nema pronađenih postavki", + "confirmDelete": "Izbrisati postavku \"{key}\"?", + "colKey": "Ključ", + "colValue": "Vrijednost", + "colUpdated": "Ažurirano", + "colActions": "Radnje", + "form": { + "key": "Ključ", + "keyPlaceholder": "npr. hotel_name", + "value": "Vrijednost", + "valuePlaceholder": "Postavljanje vrijednosti", + "save": "Spremi postavku", + "saving": "Spremanje...", + "cancel": "Odustani" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Početna", + "reload": "Ponovno učitaj", + "fullscreen": "Cijeli zaslon", + "logout": "Odjava", + "onlineUsers": "Korisnici online", + "emulatorOnline": "Emulator je online", + "emulatorOffline": "Emulator je offline", + "dragToMove": "Povucite za pomicanje", + "hide": "Sakrij traku", + "fullscreenExit": "Izađi iz cijelog zaslona", + "show": "Prikaži traku", + "emulatorUnknown": "Status emulatora nepoznat" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Dijagnostika datoteka", + "preliminary": "Preliminarna provjera adresa; sadržaj se provjerava pri uvozu.", + "http": "HTTP {status}", + "network": "Povezivanje nije uspjelo", + "timeout": "Izvor nije odgovorio na vrijeme", + "invalidResponse": "Izvor je vratio web-stranicu umjesto datoteke", + "available": "Datoteka pronađena; čeka provjeru", + "recover": "Priloži izvornik i nastavi", + "recoveryHint": "Odaberite {file} (do 50 MB). Provjerava se identitet. Ponavljaju se neuspjele stavke; dovršeni uvozi ostaju sačuvani.", + "attach": "Odaberite izvornu .nitro datoteku", + "working": "Provjera ili nastavak...", + "attached": "Odgovarajuća datoteka priložena", + "resume": "Nastavi neuspjele uvoze s datotekom", + "invalidFile": "Odaberite odgovarajuću izvornu .nitro datoteku do 50 MB i pokušajte ponovno.", + "resumeError": "Osvježite povijest i koristite posljednji pokušaj; provjerite datoteku i pokušajte ponovno.", + "mismatchedFile": "Ova datoteka pripada drugom komadu namještaja.", + "alreadyStarted": "Oporavak je već pokrenut. Osvježite povijest i koristite posljednji pokušaj.", + "notEligible": "Ova stavka ne podržava oporavak prilogom." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/hu.json b/src/messages/hu.json index fb8634b7..4d66de37 100644 --- a/src/messages/hu.json +++ b/src/messages/hu.json @@ -1,3918 +1,4913 @@ { - "draftRecovery": { - "ready": "A helyreállítási másolat 7 napig megmarad ebben a böngészőben.", - "saved": "A helyreállítási másolat 7 napra elmentve ebben a böngészőben.", - "unavailable": "A böngészőből történő helyreállítás nem érhető el. Tartsd nyitva ezt az oldalt a módosítások mentéséig.", - "found": "Ebben a böngészőben elérhető egy helyreállítási másolat. Mentés ideje:", - "restore": "Böngészőmásolat visszaállítása", - "discard": "Böngészőmásolat törlése", - "confirmRestore": "Lecseréled a jelenlegi űrlapot a böngészőben tárolt helyreállítási másolatra? Mentés előtt ellenőrizd a tartalmát.", - "confirmDiscard": "Törlöd ezt a helyreállítási másolatot a böngészőből? A jelenlegi űrlap változatlan marad." - }, - "nav": { - "home": "Otthon", - "community": "közösség", - "articles": "Cikkek", - "photos": "Fényképek", - "staff": "Személyzet", - "rankings": "Rangsorok", - "guilds": "Céhek", - "leaderboards": "Ranglisták", - "rareValues": "Ritka értékek", - "shop": "Bolt", - "market": "Piac", - "assistance": "Segítségnyújtás", - "helpCenter": "Súgó", - "myTickets": "A jegyeim", - "badges": "Jelvények", - "radio": "Rádió", - "friends": "Barátok", - "messages": "Üzenetek", - "admin": "Admin", - "openMenu": "Menü megnyitása", - "closeMenu": "Menü bezárása", - "drawBadge": "Rajzolj jelvényt", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} online", - "nitroClient": "Nitro kliens", - "tagline": "Egy online virtuális világ, ahol létrehozhatod saját avatarod, barátokat köthetsz, chatelhetsz, szobákat hozhatsz létre és még sok mást!", - "login": "Bejelentkezés", - "or": "Or", - "createAccount": "Hozzon létre egy fiókot" - }, - "footer": { - "copyright": "© {year} – a {hotel} egy nonprofit oktatási projekt" - }, - "pages": { - "staff": { - "title": "Személyzet", - "subtitle": "A szálloda mögött álló csapat", - "ranksTitle": "Rangok", - "ranksSubtitle": "Amiről a csapat egyes részei gondoskodnak", - "membersTitle": "A csapat tagjai", - "membersEmptySubtitle": "Jelenleg nincs kit mutatni", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "Nincsenek megjeleníthető munkatársak.", - "colUsername": "Felhasználónév", - "colRank": "Rang", - "colMotto": "Mottó" - }, - "leaderboard": { - "title": "Ranglista", - "subtitle": "A legjobb 20 játékos {currency} szerint", - "tab_credits": "Kredit", - "tab_diamonds": "Gyémántok", - "tab_duckets": "Duckets", - "tab_achievement": "Eredmények", - "tab_respects": "Tisztelet", - "tab_onlinetime": "Online idő", - "emptyState": "Még nincs megjeleníthető rangsor.", - "colAvatar": "Avatar", - "colPlayer": "Játékos" - }, - "friends": { - "title": "Barátok", - "emptySubtitle": "Még nincsenek hozzáadott barátaid", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Adjon hozzá barátokat a szállodában, és itt megjelennek.", - "noMotto": "Nincs mottó", - "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": "Üzenetek", - "subtitle": "Baráti felkérések és offline üzenetek várnak rád", - "requestsTitle": "Baráti kérések", - "requestsEmptySubtitle": "Még senki sem kérte, hogy legyen a barátod", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "Nincsenek függőben lévő baráti kérések.", - "wantsToBeFriend": "a barátod akar lenni.", - "accept": "Elfogadás", - "offlineTitle": "Offline üzenetek", - "offlineEmptySubtitle": "Beérkezett üzenetei üresek", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "Nincsenek offline üzenetei.", - "unknownUser": "Felhasználó #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Nincs mottó", - "statRank": "Rang", - "statCredits": "Kredit", - "statRegistered": "Regisztrált", - "badgesTitle": "Jelvények", - "badgesEmpty": "Még nincsenek jelvények.", - "photosTitle": "Fényképek", - "photosEmpty": "Még nincsenek fényképek.", - "guestbookTitle": "Vendégkönyv", - "guestbookSubtitle": "Üzenetek {username} falán", - "leaveMessage": "Hagyj üzenetet", - "guestbookPlaceholder": "Írj valamit {username} vendégkönyvébe…", - "post": "Hozzászólás", - "loginToPost": "Jelentkezzen be, hogy üzenetet hagyjon a vendégkönyvben.", - "guestbookEmpty": "Még nincsenek bejegyzések a vendégkönyvben.", - "unknownUser": "Felhasználó #{id}", - "statDuckets": "Duckets", - "statDiamonds": "Gyémántok", - "walletTitle": "Pénztárca", - "friendsTitle": "Barátok", - "friendsSubtitle": "Emberek a szállodában, akikkel együtt lógnak", - "friendsEmpty": "Nincsenek megmutatható barátok.", - "roomsTitle": "Szobák", - "roomsSubtitle": "Saját szobák", - "roomsEmpty": "Nincs megjeleníthető szoba.", - "roomUntitled": "Névtelen szoba", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Rangsorok", - "subtitle": "A legjobb 12 játékos kreditek alapján rangsorolva", - "emptyState": "Még nincs rangsorolandó játékos." - }, - "home": { - "welcome": "Üdvözöljük itt: {hotelName}", - "welcomeSubtitle": "Az Ön retro szállodája, amelyet most a Next.js üzemeltet", - "welcomeBody": "Tárcsázz, gyűjts bútorokat és találkozz barátokkal.", - "enterHotel": "Írja be a következőt: {hotelName}", - "onlineFriends": "Online Barátok", - "noFriendsOnline": "Nincsenek online barátok", - "register": "REGISZTRÁLJ MOST", - "joinNow": "Csatlakozzon még ma a {hotelName} szolgáltatáshoz!", - "recentUsers": "Legutóbbi felhasználók", - "recentPhotos": "Legutóbbi fotók", - "latestNews": "Friss hírek", - "newsTitle": "Friss hírek", - "newsSubtitle": "Frissen a szállodából", - "allNews": "Minden hír →", - "allUsers": "Közösség →", - "noArticles": "Még nincsenek cikkek.", - "noPhotos": "Még nincsenek fényképek.", - "noUsers": "Nincsenek online felhasználók", - "latestArticle": "Legújabb cikk", - "latestUsers": "Legújabb polgárok ({count} összesen)", - "statsOnline": "Online", - "statsCitizens": "Polgárok", - "statsRooms": "Szobák", - "statsArticles": "Cikkek", - "featuresAvatar": "Avatár", - "featuresAvatarDesc": "Hozd létre egyedi megjelenésed", - "featuresFurniture": "Bútorok", - "featuresFurnitureDesc": "Díszítsd fel a szobákat tárgyakkal", - "featuresCommunity": "Közösség", - "featuresCommunityDesc": "Szerezz barátokat és csevegj", - "featuresGames": "Játékok", - "featuresGamesDesc": "Versenyezz és érezd jól magad" - }, - "news": { - "title": "Hírek", - "subtitle": "A szálloda legújabb bejelentései, eseményei és frissítései", - "noArticles": "Még nincsenek cikkek." - }, - "article": { - "backToNews": "← Hírek", - "reactionsTitle": "Reakciók", - "reactionsSubtitle": "Mondja el, mit gondol", - "reaction": { - "like": "tetszik", - "love": "Szerelem", - "wow": "Hűha" - }, - "removeReaction": "Kattintson a reakció eltávolításához", - "reactWith": "Reakció a következővel: {reaction}", - "noReactions": "Még nincsenek reakciók.", - "logIn": "Jelentkezzen be", - "toReact": "reagálni.", - "commentsTitle": "Megjegyzések", - "commentsSubtitle": "Csatlakozzon a beszélgetéshez", - "commentsCount": "eddig {count}", - "noComments": "Még nincsenek megjegyzések. Legyen Ön az első, aki hozzászól.", - "userNumber": "Felhasználó #{id}", - "addComment": "Megjegyzés hozzáadása", - "commentPlaceholder": "Írja meg véleményét…", - "postComment": "Megjegyzés közzététele", - "toComment": "megjegyzést hagyni.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Fényképek", - "subtitle": "A szállodában készült legújabb pillanatképek", - "noPhotos": "Még nincsenek fényképek.", - "photoAlt": "Fotó: #{id} felhasználó", - "byUser": "felhasználó #{id}" - }, - "badges": { - "title": "Jelvények", - "subtitle": "A jelvények, amelyeket megszerezhet és megmutathat a szállodában", - "noBadges": "Még nincsenek jelvények." - }, - "community": { - "title": "közösség", - "subtitle": "Minden, ami a szálloda körül történik, egy helyen", - "open": "Nyissa meg a → lehetőséget", - "links": { - "rankings": { - "title": "Rangsorok", - "text": "Tekintse meg a szálloda leggazdagabb játékosait kreditek szerint rangsorolva." - }, - "staff": { - "title": "Személyzet", - "text": "Találkozzon a csapattal, amely minden nap fenntartja a szállodát." - }, - "news": { - "title": "Hírek", - "text": "A legújabb bejelentések, események és frissítések." - }, - "photos": { - "title": "Fényképek", - "text": "A közösség által megosztott pillanatképek a szálloda körül." - }, - "guilds": { - "title": "Céhek", - "text": "Böngésszen a játékosok által létrehozott és csatlakozott csoportok között." - }, - "leaderboards": { - "title": "Ranglisták", - "text": "Ki áll az élen ebben a szezonban a szálloda statisztikáiban." - } - } - }, - "guilds": { - "title": "Céhek", - "subtitle": "Böngésszen a játékosok által létrehozott és csatlakozott csoportok között", - "empty": "Még nincsenek céhek.", - "unnamedGuild": "Névtelen céh", - "noDescription": "Nincs leírás" - }, - "guild": { - "allGuilds": "← Minden céh", - "unnamedGuild": "Névtelen céh", - "noDescription": "Nincs leírás", - "memberSingular": "tag", - "memberPlural": "tagok", - "founded": "Alapítva", - "forumLink": "Fórum →", - "discussion": "Megbeszélés", - "membersTitle": "tagok", - "memberLowerSingular": "tagja", - "memberLowerPlural": "tagjai", - "noMembers": "Nincsenek tagok.", - "owner": "Tulajdonos", - "noMotto": "Nincs mottó" - }, - "guildForum": { - "backToGuild": "← Vissza a céhhez", - "unnamedGuild": "Névtelen céh", - "forumTitle": "{guild} — Fórum", - "threadSingular": "szál", - "threadPlural": "szálak", - "newThread": "+ Új szál", - "empty": "Még nincs téma ezen a fórumon.", - "colSubject": "Tárgy", - "colAuthor": "Szerző", - "colPosts": "Hozzászólások", - "colDate": "Dátum", - "noSubject": "(nincs tárgy)", - "pinned": "Rögzítve", - "locked": "Lezárva", - "userNumber": "Felhasználó #{id}", - "unknown": "Ismeretlen", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Vissza a fórumhoz", - "unnamedGuild": "Névtelen céh", - "title": "Új szál", - "subtitle": "a {guild} fórumban", - "subjectLabel": "Tárgy", - "subjectPlaceholder": "Téma tárgya", - "messageLabel": "Üzenet", - "messagePlaceholder": "Írd meg a nyitó bejegyzésedet…", - "postThread": "Tegye fel a szálat", - "cancel": "Mégse", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Bolt", - "subtitle": "Töltse fel számláját, és vegyen exkluzív csomagokat, valutát és jelvényeket.", - "browsingCategory": "Böngészés a {category} csomagok között.", - "all": "Mind", - "allPackages": "Minden csomag", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "Jelenleg nincs elérhető csomag.", - "buy": "Vásároljon", - "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": "Töltse fel PayPal-lal", - "subtitle": "Fizessen biztonságosan a PayPal segítségével, és a jóváírások a fizetés törlésének pillanatában hozzáadódnak.", - "cancelled": "A fizetést törölték – nem történt fizetés.", - "chooseAmount": "Válasszon egy összeget", - "notConfiguredPre": "A PayPal még nincs konfigurálva. Rendszergazdának kell beállítania", - "notConfiguredAnd": "és", - "notConfiguredOptional": "(és opcionálisan", - "notConfiguredPost": "sandbox vs. live esetén).", - "balanceTitle": "Az egyensúlyod", - "signedInAs": "Bejelentkezve mint {username}", - "credits": "Kredit", - "creditsPerUnit": "Jóváírások 1,00 {currency} után", - "rateLine": "1,00 {currency} után {amount} jóváírást kap. A kreditek a következő bejelentkezéskor jelennek meg a játékban." - }, - "marketplace": { - "title": "Piactér", - "subtitle": "Böngésszen a játékosok által felsorolt bútorok és ritkaságok között. A listákat a játékban helyezik el, és élőben frissülnek – menjen be a szállodába, és tegyen ajánlatot.", - "activeOffers": "Aktív ajánlatok", - "sellers": "Eladók", - "totalValue": "Teljes érték", - "activeListings": "Aktív listák", - "mostRecentFirst": "Legutóbb szerepel az első helyen", - "empty": "Jelenleg nincsenek aktív piaci ajánlatok. Nézz vissza később.", - "colOffer": "Ajánlat", - "colItem": "Tétel", - "colSeller": "Eladó", - "colPrice": "Ár", - "colListed": "Felsorolt", - "itemLabel": "{id}. tétel", - "userLabel": "Felhasználó #{id}", - "justNow": "csak most", - "minutesAgo": "{count} perce", - "hoursAgo": "{count} órája", - "daysAgo": "{count} napja" - }, - "rares": { - "title": "Ritka értékek", - "subtitle": "Kapjon áttekintést a szállodában található összes ritkaságról, kategóriák szerint csoportosítva.", - "empty": "Jelenleg nincs itt felsorolva ritkaság.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Ritkák megtekintése →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Minden ritka", - "empty": "Ebben a kategóriában még nem szerepel ritkaság.", - "colRare": "Ritka", - "colCredits": "Kredit", - "colCurrency": "Pénznem", - "creditsValue": "{value} kredit", - "duckets": "Duckets", - "diamonds": "Gyémántok", - "credits": "Kredit" - }, - "redeem": { - "title": "Voucher beváltása", - "subtitle": "Van utalványkódod? Írja be alább, hogy hozzáadja a jutalmat a fiókjához.", - "enterCode": "Írja be a kódját", - "oncePerAccount": "Minden utalvány számlánként csak egyszer váltható be.", - "balanceTitle": "Az egyensúlyod", - "signedInAs": "Bejelentkezve mint {username}", - "credits": "Kredit", - "instantCredit": "A beváltott jutalmak azonnal jóváírásra kerülnek, és a következő bejelentkezéskor megjelennek a játékban." - }, - "help": { - "title": "Súgó", - "subtitle": "Útmutatókat, támogatási témákat és szállodai szabályokat találhat – mindent, amire segítségre van szüksége.", - "myTickets": "Jegyeim →", - "topicsTitle": "Támogatási témák", - "topicsSubtitle": "Böngésszen útmutatókban és a gyakori kérdésekre adott válaszokban", - "topicsEmpty": "Még nincs súgótéma.", - "rulesTitle": "Szállodai szabályok", - "rulesSubtitle": "Kérjük, olvassa el ezeket, mielőtt a szállodában lógna", - "rulesEmpty": "Még nincsenek közzétett szabályok.", - "categoryEmpty": "Ebben a kategóriában nincsenek szabályok." - }, - "helpCategory": { - "back": "← Súgó", - "topicSubtitle": "Súgó téma", - "moreTitle": "További súgótémák", - "moreSubtitle": "Ugrás egy másik támogatási témához" - }, - "helpTickets": { - "title": "Súgó Jegyek", - "subtitle": "Nyújtsa be jegyét a személyzetnek, és kövesse nyomon a nyitott kéréseket.", - "statTotal": "Összes jegy", - "statOpen": "Nyissa meg", - "statClosed": "Zárva", - "newTitle": "Új jegy", - "newSubtitle": "Írja le a problémát, és a személyzet követni fogja", - "subjectPlaceholder": "Tárgy", - "contentPlaceholder": "Írja le a problémát…", - "submit": "Jegy benyújtása", - "listTitle": "A jegyeid", - "listSubtitle": "Minden kérés, amelyet a személyzetnek küldött", - "listEmpty": "Még nincs jegyed.", - "colId": "ID", - "colSubject": "Tárgy", - "colStatus": "Állapot", - "colCreated": "Létrehozva", - "statusOpen": "Nyissa meg", - "statusClosed": "Zárva", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Jelentkezzen a {hotel} személyzetére", - "subtitle": "Időnként megnyitjuk a személyzeti jelentkezéseket. Ha olyan pozícióval találkozik, amelyre úgy érzi, hogy tökéletesen beilleszkedne, ne habozzon jelentkezni rá.", - "noPositionsTitle": "Nincs nyitott pozíció", - "noPositionsBody": "Jelenleg nincs nyitott pozíció. Kérjük, jöjjön vissza egy későbbi időpontban, és ellenőrizze, hogy van-e szabad időpontunk addig. Köszönjük érdeklődését.", - "noDeadline": "Nincs kitűzött határidő", - "deadline": "Jelentkezési határidő: {date}", - "alreadyApplied": "Már jelentkezett a(z) {rank}", - "aboutYou": "Rólad", - "aboutPlaceholder": "Mondd el, miért lennél jó {rank}…", - "applyFor": "Jelentkezés {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": "Jelentkezzen a {hotel} csapatába", - "subtitle": "Csoportos jelentkezéseket rendszeres időközönként nyitunk meg. Ha találsz megfelelő csapatot, ne habozz jelentkezni!", - "noPositionsTitle": "Nincs nyitott csapat pozíció", - "noPositionsBody": "Jelenleg nincs nyitott csapat pozíció. Kérjük, jöjjön vissza később, hogy ellenőrizze az új nyitvatartásokat. Köszönöm!", - "pending": "Jelentkezése függőben van", - "aboutYou": "Rólad", - "aboutPlaceholder": "Mondd el, miért lennél kiválóan alkalmas {rank}…", - "applyFor": "Jelentkezés {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": "Rádió", - "subtitle": "Hangoljon a szállodai rádióra – élő DJ-szettek, kérések és kiáltások.", - "nowPlaying": "Most játszik", - "nothingPlaying": "Jelenleg nem játszik semmi.", - "onAir": "adásban: {dj}", - "noDj": "Nincs DJ az adásban.", - "audioUnsupported": "Az Ön böngészője nem támogatja az audio elemet.", - "streamOffline": "Az adatfolyam jelenleg offline.", - "exploreTitle": "Fedezze fel a rádiót", - "exploreSubtitle": "Ütemezés, kiáltások, kérések és egyebek", - "linkSchedule": "Ütemezés", - "linkScheduleText": "Heti kínálatunk DJ-kből és műsorokból.", - "linkShouts": "Kiáltások", - "linkShoutsText": "Kiáltások és kérések a közösségtől.", - "linkRequests": "Kérések", - "linkRequestsText": "Kérd meg a DJ-t, hogy pörgesse fel kedvenc számodat.", - "linkApply": "Jelentkezz DJ-nek", - "linkApplyText": "Csatlakozz a csapathoz, és lépj be az éterbe.", - "linkLeaderboard": "Ranglista", - "linkLeaderboardText": "A legjobb hallgatók a szerzett pontok alapján rangsorolva.", - "todayTitle": "A mai menetrend", - "todayTitleWithDay": "Mai menetrend · {day}", - "todaySubtitle": "Mi megy ma az éterben", - "fullWeek": "Teljes hét →", - "noShowsToday": "Mára nincsenek műsorok.", - "colTime": "Idő", - "colShow": "Megjelenítés", - "colDj": "DJ", - "untitledShow": "Cím nélküli műsor", - "userNumber": "Felhasználó #{id}" - }, - "radioSchedule": { - "title": "Rádió menetrend", - "subtitle": "Heti kínálatunk DJ-kből és műsorokból", - "empty": "Még nincsenek betervezve előadások.", - "colDay": "nap", - "colTime": "Idő", - "colDj": "DJ", - "colShow": "Megjelenítés", - "noShows": "Nincsenek műsorok" - }, - "radioShouts": { - "title": "Rádió kiáltások", - "subtitle": "Kiáltások és kérések a közösségtől", - "postTitle": "Tegyen közzé egy kiáltást", - "postSubtitle": "Küldj üzenetet a DJ-nek az adásban", - "messageLabel": "Az Ön üzenete", - "messagePlaceholder": "Küldj egy kiáltást a DJ-nek…", - "shoutButton": "Kiálts", - "loginToPost": "Jelentkezzen be, hogy kiabálást küldjön.", - "latestTitle": "Legújabb kiáltások", - "latestSubtitle": "A hallgatók legújabb üzenetei", - "empty": "Még nincs kiáltás. Legyen Ön az első!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Rádióversenyek", - "subtitle": "Hangolódjon be és vegyen részt legújabb on-air versenyeinken", - "empty": "Még nincsenek versenyek.", - "contestLabel": "Verseny #{id}", - "dateUnknown": "Ismeretlen dátum" - }, - "radioGiveaways": { - "title": "Rádiós ajándékok", - "subtitle": "Hallgassa meg a lehetőséget, hogy nyerjen rádiós nyereményjátékunkban", - "empty": "Még nincs ajándék.", - "giveawayLabel": "Nyereményjáték #{id}", - "dateUnknown": "Ismeretlen dátum" - }, - "radioLeaderboard": { - "title": "Rádióhallgató ranglista", - "subtitle": "Az 50 legjobb rádióhallgató pontok alapján szerzett rádióhallgatást", - "empty": "Még nincsenek megjeleníthető hallgatói pontok.", - "colRank": "Rang", - "colAvatar": "Avatar", - "colListener": "Hallgató", - "colPoints": "Pontok" - }, - "radioRequests": { - "formTitle": "Kérelmet benyújtani", - "formSubtitle": "Kérd meg a DJ-t, hogy játssza le kedvenc számodat", - "songLabel": "Song", - "songPlaceholder": "A dal címe", - "artistLabel": "Művész", - "artistPlaceholder": "Az előadó neve (nem kötelező)", - "submitButton": "Kérelem benyújtása", - "loginToRequest": "Kérelem benyújtásához jelentkezzen be.", - "latestTitle": "Legutóbbi kérések", - "latestSubtitle": "A legutóbb kért dalok", - "empty": "Még nincsenek kérések.", - "colSong": "Song", - "colArtist": "Művész", - "colRequester": "Kérelmező", - "colDate": "Dátum", - "colStatus": "Állapot", - "statusPending": "Függőben", - "statusApproved": "Jóváhagyva", - "statusPlayed": "Játszott", - "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": "Jelentkezz rádiós DJ-nek", - "subtitle": "Mesélj magadról, és arról, hogy miért lennél kiválóan alkalmas az éterben", - "latestTitle": "A legújabb jelentkezésed", - "statusLabel": "Állapot:", - "submittedOn": "· benyújtva: {date}", - "submitAgain": "Az alábbiakban újra beküldheti, ha adatai megváltoztak.", - "formTitle": "Pályázati űrlap", - "formSubtitle": "Minden kötelezően megjelölt mezőt ki kell tölteni", - "realNameLabel": "Valódi név", - "realNamePlaceholder": "A teljes neved", - "ageLabel": "Életkor", - "availabilityLabel": "Elérhetőség", - "availabilityPlaceholder": "Melyik napokon és időpontokban lehet közvetíteni?", - "musicStyleLabel": "Zenei stílus", - "musicStylePlaceholder": "pl. House, pop, hip-hop", - "experienceLabel": "Tapasztalat", - "optional": "(nem kötelező)", - "experiencePlaceholder": "Van előzetes DJ-s vagy házigazdai tapasztalatod?", - "motivationLabel": "Motiváció", - "motivationPlaceholder": "Miért akarsz csatlakozni a rádió csapatához?", - "submitButton": "Pályázat benyújtása", - "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": "Fiókbeállítások", - "accountSettingsSubtitle": "Kezelje profilját, biztonságát és kapcsolódó fiókjait", - "publicProfile": "Nyilvános profilod", - "noMotto": "Nincs mottó", - "noEmail": "Nincs e-mail a fájlban", - "changeMotto": "Mottóváltás", - "changeMottoSubtitle": "Azonnali frissítések a játékban, ha online vagy", - "mottoPlaceholder": "A mottód", - "saveMotto": "Mentés mottója", - "securityTitle": "Biztonság", - "securitySubtitle": "Kéttényezős hitelesítés", - "securityDescription": "Adjon hozzá egy második védelmi réteget fiókjához.", - "twoFactorLink": "Kéttényezős hitelesítés" - }, - "settings2fa": { - "backToSettings": "← Beállítások", - "title": "Kéttényezős hitelesítés", - "subtitle": "Adjon hozzá egy második biztonsági réteget egy hitelesítő alkalmazással", - "nowEnabled": "A 2FA most engedélyezve van. 🔒", - "disabledNotice": "A 2FA le van tiltva.", - "badCode": "A kód nem volt érvényes – próbálja újra.", - "noAppKeyPrefix": "A 2FA eddig nem érhető el", - "noAppKeyMiddle": "be van állítva (ugyanaz a Laravel", - "noAppKeySuffix": "ahogy az AtomCMS telepítve van, így a meglévő titkok olvashatóak maradnak).", - "isEnabled": "A 2FA engedélyezve van", - "onYourAccount": "fiókjában.", - "disable": "A 2FA letiltása", - "scanOrEnter": "Olvassa be vagy írja be ezt a kulcsot", - "scanInstructions": "Adja hozzá ezt a Google Authenticator/Authy szolgáltatáshoz, majd adja meg a 6 számjegyű kódot a megerősítéshez.", - "manualKey": "Kézi kulcs:", - "codePlaceholder": "6 számjegyű kód", - "confirm": "Erősítse meg", - "enableIntro": "Adjon hozzá egy második biztonsági réteget egy hitelesítő alkalmazással.", - "enable": "2FA engedélyezése" - }, - "title": "Kapcsolt fiókok", - "subtitle": "Kapcsoljon össze egy közösségi fiókot, hogy egyetlen kattintással bejelentkezhessen", - "connected": "Csatlakozva", - "unavailable": "Nem elérhető", - "login": { - "title": "Jelentkezzen be", - "subtitle": "Üdvözöljük újra – jelentkezzen be a szállodába való belépéshez.", - "subtitle2fa": "Írja be a hitelesítőtől kapott 6 számjegyű kódot.", - "usernamePlaceholder": "Felhasználónév", - "passwordPlaceholder": "Jelszó", - "codePlaceholder": "2FA kód", - "pleaseWait": "Kérjük, várjon…", - "verify": "Ellenőrizze", - "signIn": "Jelentkezzen be", - "or": "vagy", - "noAccount": "Nincs fiók?", - "createOne": "Hozzon létre egyet", - "forgotPassword": "Elfelejtetted a jelszavad?", - "errorInvalidCredentials": "Érvénytelen felhasználónév vagy jelszó", - "errorInvalid2fa": "Érvénytelen 2FA kód", - "welcomeBack": "Üdvözöllek újra", - "welcomeBackSub": "Jelentkezz be a {hotelName} folytatáshoz", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Hozzon létre fiókot", - "subtitle": "Csatlakozzon a szállodához – csak egy pillanatig tart.", - "username": "Felhasználónév", - "email": "E-mail", - "password": "Jelszó", - "confirmPassword": "Ismételje meg a jelszót", - "usernamePlaceholder": "Felhasználónév", - "emailPlaceholder": "E-mail", - "passwordPlaceholder": "Jelszó (minimum 6 karakter)", - "confirmPasswordPlaceholder": "Ismételje meg a jelszót", - "selectOutfit": "Válassza ki az öltözékét", - "termsAccept": "18 évesnél idősebb vagyok, és elfogadom a {hotel} feltételeit és szabályait.", - "createAccount": "Hozzon létre fiókot", - "creatingAccount": "Fiók létrehozása...", - "redirecting": "Átirányítás a fiókjához...", - "alreadyHaveAccount": "Már van fiókja? Bejelentkezés!", - "register": "Regisztráció", - "termsError": "A regisztrációhoz el kell fogadnia a feltételeket és szabályokat.", - "usernameError": "Felhasználónév megadása kötelező.", - "emailError": "Érvényes e-mail-cím szükséges.", - "passwordError": "A jelszónak legalább 6 karakterből kell állnia.", - "confirmPasswordError": "A jelszavak nem egyeznek.", - "termsRequired": "El kell fogadnia a feltételeket és szabályokat.", - "usernameRequired": "Felhasználónév megadása kötelező.", - "emailRequired": "E-mail megadása kötelező.", - "passwordRequired": "Jelszó szükséges.", - "passwordsDontMatch": "A jelszavak nem egyeznek.", - "alreadyHaveAccountPre": "Már van fiókod?", - "alreadyHaveAccountLink": "Bejelentkezés", - "whoIsOnline": "Ki van online", - "usersOnline": "{count} online" - }, - "forgot": { - "title": "Jelszó visszaállítása", - "subtitle": "E-mailben elküldünk egy biztonságos linket az új jelszó beállításához.", - "sentNotice": "Ha ez az e-mail regisztrálva van, akkor visszaállítási hivatkozást küldtek. Ellenőrizze a beérkező leveleket.", - "emailPlaceholder": "Az Ön email címe", - "sendResetLink": "Reset link küldése", - "backToLogin": "Vissza a bejelentkezéshez", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Állítson be új jelszót", - "subtitle": "Válasszon erős jelszót, amelyet máshol nem használ.", - "passwordPlaceholder": "Új jelszó (minimum 6 karakter)", - "resetPassword": "Jelszó visszaállítása", - "backToLogin": "Vissza a bejelentkezéshez" - }, - "verify": { - "verifiedTitle": "Minden készen áll", - "verifiedSubtitle": "E-mail igazolva", - "verifiedBody": "E-mail címét ellenőriztük. Most már bejelentkezhet és játszhat.", - "goToLogin": "Menjen a bejelentkezéshez", - "alreadyTitle": "Már ellenőrizve", - "alreadySubtitle": "Nincs mit tenni", - "alreadyBody": "Ezt az e-mail címet már megerősítették.", - "unavailableTitle": "Próbálja újra rövidesen", - "unavailableSubtitle": "A szerver nem elérhető", - "unavailableBody": "Nem tudtuk elérni a szervert, hogy ellenőrizzük e-mail-címét. Kérjük, próbálja újra a linket egy pillanat múlva.", - "invalidTitle": "E-mail ellenőrzés", - "invalidSubtitle": "Érvénytelen vagy lejárt link", - "invalidBody": "Ez az ellenőrző link nem érvényes. Győződjön meg arról, hogy a teljes linket az e-mailből nyitotta meg, vagy kérjen újat.", - "backToLogin": "Vissza a bejelentkezéshez" - }, - "banned": { - "title": "Ki vagy tiltva", - "subtitle": "Fiók felfüggesztve", - "body": "Fiókját felfüggesztettük a szállodában.", - "reasonLabel": "Ok:", - "permanent": "Ez a tilalom végleges.", - "expires": "Lejár: {date}.", - "contactStaff": "Ha úgy gondolja, hogy ez tévedés, forduljon a személyzeti csapathoz." - }, - "maintenance": { - "title": "A(z) {hotel} karbantartás alatt áll", - "subtitle": "Hamarosan visszajövünk", - "staffCanLogIn": "A munkatársak továbbra is bejelentkezhetnek." - }, - "admin": { - "nav": { - "overview": "Áttekintés", - "dashboard": "Irányítópult", - "content": "Tartalom", - "articles": "Cikkek", - "tags": "Címkék", - "navigator": "Navigátor", - "helpCenter": "Súgó", - "advertisements": "Reklámok", - "writeableBoxes": "Írható dobozok", - "photos": "Fényképek", - "tickets": "Jegyek", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Felhasználók és hozzáférés", - "users": "Felhasználók", - "bans": "Tiltások", - "ipManagement": "IP-kezelés", - "vpn": "VPN", - "applications": "Alkalmazások", - "teams": "Csapatok", - "permissions": "Engedélyek", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Gazdaság", - "catalog": "Katalógus", - "shop": "Bolt", - "transactions": "Tranzakciók", - "vouchers": "Utalványok", - "subscriptions": "Előfizetések", - "rareValues": "Ritka értékek", - "badges": "Jelvények", - "achievements": "Eredmények", - "calendar": "Naptár", - "radio": "Rádió", - "radioHistory": "Rádiótörténet", - "radioBanners": "Bannerek", - "radioEmbed": "Beágyaz", - "radioApiKeys": "API kulcsok", - "radioModeration": "Moderálás", - "radioSettings": "Beállítások elemre", - "radioMonitoring": "Monitoring", - "radioPoints": "Pontok", - "radioRanks": "Rangok", - "radioAutodj": "Auto DJ", - "system": "Rendszer", - "commandocentrum": "Commandocentrum", - "emulator": "Emulátor", - "alerts": "Figyelmeztetések", - "logs": "Naplók", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Szószűrő", - "maintenance": "Karbantartás", - "rooms": "Szobák", - "emailTemplates": "E-mail sablonok", - "theme": "téma", - "media": "Média", - "favicon": "Favicon", - "sounds": "Hangok", - "translations": "Fordítások", - "import": "Importálás", - "settings": "Beállítások elemre", - "backToSite": "Vissza a webhelyre", - "housekeeping": "Takarítás", - "hotelManagementPanel": "Hotel menedzsment panel", - "rankLabel": "rang {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Irányítópult", - "subtitle": "Szálloda áttekintése és élő állapota", - "playersOnline": "Játékosok online", - "articles": "Cikkek", - "activeBans": "Aktív tiltások", - "database": "Adatbázis", - "databaseConnected": "Csatlakozva", - "databaseDown": "Le", - "usersByRank": "Felhasználók rang szerint", - "noAccountsToBreakDown": "Még nincsenek bontható fiókok", - "rankLabel": "rang {rank}", - "rankWithCount": "Rang {rank}: {count} fiók", - "recentStaffActivity": "A személyzet legutóbbi tevékenysége", - "viewAll": "Az összes megtekintése", - "noStaffActivityLogged": "Még nincs naplózott személyzeti tevékenység" - }, - "articles": { - "title": "Cikkek", - "subtitle": "Hírcikkek – 50 legfrissebb", - "newArticle": "+ Új cikk", - "edit": "Szerkesztés", - "delete": "Törölje", - "noArticles": "Még nincsenek cikkek", - "confirmDelete": "Biztosan törli a következőt: \"{title}\"?", - "colTitle": "Cím", - "colSlug": "Slug", - "colAuthor": "Szerző", - "colCreated": "Létrehozva", - "colActions": "Akciók", - "form": { - "title": "Cím", - "titlePlaceholder": "Cikk címe", - "slug": "Slug", - "slugPlaceholder": "cikk-url-slug", - "category": "Kategória", - "categoryPlaceholder": "Válasszon egy kategóriát", - "body": "Test", - "bodyPlaceholder": "Írja meg cikkének tartalmát…", - "image": "Kép", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Miniatűr", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Megjelent", - "featured": "Kiemelt", - "save": "Cikk mentése", - "saving": "Mentés…", - "deleteArticle": "Cikk törlése", - "deleteConfirm": "Ez a művelet nem vonható vissza. A cikket véglegesen eltávolítjuk.", - "cancel": "Mégse", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Címkék", - "subtitle": "Cikkcímkék / kategóriák", - "addTag": "Címke hozzáadása", - "name": "Név", - "namePlaceholder": "Címke neve", - "backgroundColour": "Háttérszín", - "createTag": "Címke létrehozása", - "editTag": "Címke szerkesztése", - "updateTag": "Címke frissítése", - "deleteTag": "Címke törlése", - "confirmDelete": "Törli a következőt: \"{name}\"?", - "noTags": "Még nincsenek címkék", - "colId": "ID", - "colTag": "Címke", - "colColour": "Szín", - "colUsedBy": "által használt", - "colCreated": "Létrehozva", - "colActions": "Akciók" - }, - "navigation": { - "title": "Navigátor", - "flatCategories": "Lapos kategóriák", - "publicRooms": "Nyilvános helyiségek", - "addCategory": "Kategória hozzáadása", - "editCategory": "Kategória szerkesztése", - "deleteCategory": "Kategória törlése", - "categoryName": "Kategória neve", - "categoryNamePlaceholder": "pl. Chill & Chat", - "categoryOrder": "Rendeljen", - "roomName": "Szoba neve", - "roomNamePlaceholder": "pl. Welcome Lounge", - "roomId": "Szobaazonosító", - "roomIdPlaceholder": "Numerikus szobaazonosító", - "save": "Mentés", - "cancel": "Mégse", - "noCategories": "Még nincsenek kategóriák", - "noPublicRooms": "Még nincsenek nyilvános helyiségek", - "colId": "ID", - "colName": "Név", - "colOrder": "Rendeljen", - "colRooms": "Szobák", - "colActions": "Akciók" - }, - "helpCenter": { - "title": "Súgó", - "subtitle": "Támogatási bejegyzések és GYIK kezelése", - "entries": "Bejegyzések", - "newEntry": "+ Új bejegyzés", - "edit": "Szerkesztés", - "delete": "Törölje", - "noEntries": "Még nincsenek bejegyzések", - "confirmDelete": "Törli a következőt: „{title}”?", - "colId": "ID", - "colTitle": "Cím", - "colCategory": "Kategória", - "colCreated": "Létrehozva", - "colActions": "Akciók", - "form": { - "title": "Cím", - "titlePlaceholder": "Bejegyzés címe", - "category": "Kategória", - "categoryPlaceholder": "Válasszon kategóriát", - "body": "Test", - "bodyPlaceholder": "Írd meg a választ…", - "save": "Bejegyzés mentése", - "saving": "Mentés…", - "deleteEntry": "Bejegyzés törlése", - "cancel": "Mégse" - } - }, - "ads": { - "title": "Reklámok", - "subtitle": "Szállodahirdetések és promóciós bannerek kezelése", - "newAd": "+ Új hirdetés", - "edit": "Szerkesztés", - "delete": "Törölje", - "noAds": "Még nincsenek hirdetések", - "confirmDelete": "Törli ezt a hirdetést?", - "colId": "ID", - "colName": "Név", - "colImage": "Kép", - "colUrl": "URL", - "colViews": "Nézetek", - "colStatus": "Állapot", - "colCreated": "Létrehozva", - "colActions": "Akciók", - "form": { - "name": "Név", - "namePlaceholder": "Hirdetés neve", - "image": "Kép URL-je", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Cél URL", - "urlPlaceholder": "https://example.com", - "enabled": "Engedélyezve", - "save": "Hirdetés mentése", - "saving": "Mentés…", - "deleteAd": "Hirdetés törlése", - "cancel": "Mégse" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Írható dobozok", - "subtitle": "Tartalmi panelek láthatók a szállodában és a CMS-ben", - "newBox": "Új doboz", - "edit": "Szerkesztés", - "delete": "Törölje", - "noBoxes": "Még nincs írható doboz", - "confirmDelete": "Törli ezt a mezőt?", - "colId": "ID", - "colName": "Név", - "colLocation": "Helyszín", - "colUpdated": "Frissítve", - "colActions": "Akciók", - "form": { - "name": "Név", - "namePlaceholder": "Doboz neve", - "location": "Helyszín", - "locationPlaceholder": "pl. kezdőlap, oldalsáv", - "content": "Tartalom", - "contentPlaceholder": "Írd be a doboz tartalmát…", - "enabled": "Engedélyezve", - "save": "Mentés doboz", - "saving": "Mentés…", - "deleteBox": "Doboz törlése", - "cancel": "Mégse" - } - }, - "photos": { - "title": "Fotó moderálása", - "subtitle": "Legutóbbi játékbeli kamerás fotók", - "delete": "Törölje", - "approve": "Jóváhagyni", - "noPhotos": "Nincsenek moderálandó fényképek", - "confirmDelete": "Véglegesen törlöd ezt a fotót?", - "colId": "ID", - "colPreview": "Előnézet", - "colUser": "Felhasználó", - "colRoom": "Szoba", - "colTimestamp": "Időbélyeg", - "colActions": "Akciók", - "photoAlt": "Felhasználói fotó #{id}", - "byUser": "szerző: {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Felhasználók", - "subtitle": "Böngésszen, keressen és kezeljen szállodafiókokat", - "search": "Keresés", - "searchPlaceholder": "Keresés felhasználónév, e-mail vagy azonosító alapján…", - "searchResults": "{count, plural, one {# result} other {# results}} for \"{query}\"", - "noResults": "Nem található felhasználó", - "colId": "ID", - "colUsername": "Felhasználónév", - "colEmail": "E-mail", - "colRank": "Rang", - "colOnline": "Online", - "colRegistered": "Regisztrált", - "colLastOnline": "Utoljára online", - "colActions": "Akciók", - "yes": "Igen", - "no": "Nem", - "edit": "Szerkesztés", - "setRank": "Állítsa be a rangot", - "disconnect": "Leválasztás", - "alert": "Figyelmeztetés", - "ban": "Ban", - "detail": { - "title": "Felhasználó: {username}", - "subtitle": "Számlaadatok és kezelés", - "overview": "Áttekintés", - "actions": "Akciók", - "username": "Felhasználónév", - "email": "E-mail", - "motto": "Mottó", - "rank": "Rang", - "credits": "Kredit", - "duckets": "Duckets", - "diamonds": "Gyémántok", - "online": "Online", - "registered": "Regisztrált", - "lastOnline": "Utoljára online", - "ipAddress": "IP-cím", - "machineId": "Gépazonosító", - "sendAlert": "Figyelmeztetés küldése", - "sendMessage": "Üzenet küldése", - "disconnectUser": "Felhasználó leválasztása", - "banUser": "Felhasználó kitiltása", - "resetPassword": "Jelszó visszaállítása", - "deleteUser": "Felhasználó törlése", - "confirmDelete": "Biztosan törli a következőt: {username}? Ezt nem lehet visszavonni.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Felhasználó szerkesztése: {username}", - "subtitle": "Módosítsa a fiók adatait", - "username": "Felhasználónév", - "usernamePlaceholder": "Felhasználónév", - "email": "E-mail", - "emailPlaceholder": "felhasznalo@example.com", - "motto": "Mottó", - "mottoPlaceholder": "Felhasználói mottó", - "rank": "Rang", - "credits": "Kredit", - "duckets": "Duckets", - "diamonds": "Gyémántok", - "save": "Módosítások mentése", - "saving": "Mentés…", - "cancel": "Mégse" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Tiltások", - "subtitle": "Fiók-, IP- és géptiltások kezelése", - "newBan": "Új kitiltás", - "edit": "Szerkesztés", - "delete": "Törölje", - "noBans": "Még nincs tiltás", - "confirmDelete": "Eltávolítja ezt a kitiltást?", - "colId": "ID", - "colValue": "Érték", - "colType": "Írja be", - "colReason": "Ok", - "colBannedBy": "Kitiltotta", - "colExpires": "Lejár", - "colCreated": "Létrehozva", - "colActions": "Akciók", - "form": { - "value": "Érték", - "valuePlaceholder": "Felhasználónév, IP vagy gépazonosító", - "type": "Írja be", - "typeUser": "Felhasználó", - "typeIp": "IP", - "typeMachine": "Gép", - "reason": "Ok", - "reasonPlaceholder": "Tiltás ok", - "expiresAt": "Lejár:", - "permanent": "Állandó", - "save": "Tiltás mentése", - "saving": "Mentés…", - "cancel": "Mégse" - } - }, - "ip": { - "title": "IP-kezelés", - "subtitle": "Kezelje az IP fehérlistát és a feketelistát", - "whitelist": "Fehérlista", - "blacklist": "Feketelista", - "addIp": "IP hozzáadása", - "ipAddress": "IP-cím", - "ipAddressPlaceholder": "pl. 127.0.0.1", - "reason": "Ok", - "reasonPlaceholder": "A listázás oka", - "add": "Hozzáadás", - "remove": "Távolítsa el", - "confirmRemove": "Eltávolítja ezt az IP-t a {list}-ról?", - "noWhitelistedIps": "Nincsenek engedélyezőlistán szereplő IP-címek", - "noBlacklistedIps": "Nincsenek tiltólistán szereplő IP-címek", - "colIp": "IP", - "colReason": "Ok", - "colAdded": "Hozzáadva", - "colActions": "Akciók" - }, - "vpn": { - "title": "VPN / Proxy észlelés", - "subtitle": "Konfigurálja a VPN és a proxy észlelési beállításait", - "enabled": "Engedélyezve", - "apiKey": "API kulcs", - "apiKeyPlaceholder": "Az Ön VPN-észlelési API-kulcsa", - "apiKeyHint": "A letiltáshoz hagyja üresen", - "blockOnDetect": "Blokkolás észleléskor", - "blockOnDetectHint": "A VPN vagy proxy mögött észlelt felhasználók automatikus blokkolása", - "save": "Mentse el a beállításokat", - "saving": "Mentés…", - "settingsSaved": "A VPN beállítások sikeresen mentve" - }, - "applications": { - "title": "Személyzeti jelentkezések", - "subtitle": "Függőben lévő és felülvizsgált személyzeti jelentkezések", - "pending": "Függőben", - "approved": "Jóváhagyva", - "rejected": "Elutasítva", - "noApplications": "Még nincs jelentkezés", - "colId": "ID", - "colApplicant": "Kérelmező", - "colPosition": "Pozíció", - "colStatus": "Állapot", - "colSubmitted": "Beküldve", - "colActions": "Akciók", - "review": "Tekintse át", - "approve": "Jóváhagyni", - "reject": "Elutasítás", - "confirmApprove": "Jóváhagyja {username} felhasználót a {position} pozícióra?", - "confirmReject": "Elutasítja {username} jelentkezését a(z) {position} pozícióra?", - "detail": { - "title": "Jelentkezés: {username}", - "subtitle": "{position}", - "about": "A jelentkezőről", - "message": "Alkalmazási üzenet", - "status": "Állapot", - "submitted": "Beküldve", - "noMessage": "Nincs üzenet" - } - }, - "teams": { - "title": "Csapatok", - "subtitle": "Határozza meg az alkalmazottak rangnevét és leírását", - "addRank": "Rang hozzáadása", - "editRank": "Rang szerkesztése", - "deleteRank": "Törölje a rangot", - "noTeams": "Még nincsenek rangmeghatározások", - "confirmDelete": "Törli a rang {id} definícióját?", - "colId": "ID", - "colRank": "Rang", - "colName": "Név", - "colBadge": "Jelvény", - "colColour": "Szín", - "colActions": "Akciók", - "form": { - "rankId": "Rang azonosító", - "rankIdPlaceholder": "Numerikus rangazonosító", - "name": "Név", - "namePlaceholder": "pl. Rendszergazda", - "badge": "Jelvény kódja", - "badgePlaceholder": "pl. ADM001", - "colour": "Szín", - "colourPlaceholder": "pl. #ff0000", - "save": "Csapatdefiníció mentése", - "saving": "Mentés…", - "cancel": "Mégse" - } - }, - "permissions": { - "title": "Engedélyek", - "subtitle": "Az adminisztrációs panel rang alapú engedélyeinek kezelése", - "addPermission": "Engedély hozzáadása", - "editPermission": "Szerkesztési engedély", - "deletePermission": "Engedély törlése", - "noPermissions": "Még nincsenek konfigurálva engedélyek", - "confirmDelete": "Törli ezt az engedélyt?", - "colId": "ID", - "colRank": "Rang", - "colPermission": "Engedély", - "colCreated": "Létrehozva", - "colActions": "Akciók", - "form": { - "rankId": "Rang azonosító", - "rankIdPlaceholder": "Minimális rang szükséges", - "permission": "Engedélykulcs", - "permissionPlaceholder": "pl. admin.cikkek.kezelés", - "save": "Mentse el az engedélyt", - "saving": "Mentés…", - "cancel": "Mégse" - } - }, - "catalog": { - "title": "Katalógus", - "subtitle": "Böngésszen és kezeljen katalógusoldalakat és tételeket", - "pages": "Oldalak", - "items": "Tételek", - "addPage": "Oldal hozzáadása", - "editPage": "Oldal szerkesztése", - "deletePage": "Oldal törlése", - "addItem": "Elem hozzáadása", - "editItem": "Elem szerkesztése", - "deleteItem": "Elem törlése", - "noPages": "Még nincsenek katalógusoldalak", - "noItems": "Nincsenek tételek ezen az oldalon", - "confirmDeletePage": "Törli a(z) „{name}” katalógusoldalt?", - "confirmDeleteItem": "Törli ezt az elemet?", - "colId": "ID", - "colName": "Név", - "colIcon": "Ikonra", - "colOrder": "Rendeljen", - "colItems": "Tételek", - "colEnabled": "Engedélyezve", - "colActions": "Akciók", - "colItemId": "Tételazonosító", - "colItemName": "Elem neve", - "colCostCredits": "Költség (jóváírások)", - "colCostPoints": "Költség (pont)", - "colLimited": "Korlátozott", - "pageForm": { - "name": "Név", - "namePlaceholder": "Az oldal neve", - "icon": "Ikonazonosító", - "iconPlaceholder": "Numerikus ikonazonosító", - "order": "Rendeljen", - "enabled": "Engedélyezve", - "parent": "Szülőoldal", - "parentNone": "Nincs (gyökér)", - "save": "Oldal mentése", - "saving": "Mentés…", - "cancel": "Mégse" - }, - "itemForm": { - "itemId": "Tételazonosító", - "itemName": "Elem neve", - "costCredits": "Költség kreditben", - "costDuckets": "Költség résben", - "costDiamonds": "Költség gyémántban", - "limitedStack": "Korlátozott kötegméret", - "limitedSold": "Korlátozottan eladó", - "save": "Mentse el az elemet", - "saving": "Mentés…", - "cancel": "Mégse" - }, - "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." - } - }, - "shop": { - "title": "Bolt", - "subtitle": "Csomagok és rendelések kezelése", - "packages": "Csomagok", - "orders": "Megrendelések", - "newPackage": "+ Új csomag", - "edit": "Szerkesztés", - "delete": "Törölje", - "viewOrder": "Megtekintés", - "noPackages": "Még nincsenek bolti csomagok", - "noOrders": "Még nincs rendelés", - "confirmDelete": "Törli ezt a csomagot?", - "colId": "ID", - "colName": "Név", - "colPrice": "Ár", - "colCurrency": "Pénznem", - "colType": "Írja be", - "colSold": "Eladva", - "colEnabled": "Engedélyezve", - "colActions": "Akciók", - "colOrderId": "Rendelési azonosító", - "colCustomer": "Ügyfél", - "colPackage": "csomag", - "colAmount": "Összeg", - "colStatus": "Állapot", - "colDate": "Dátum", - "statusPending": "Függőben", - "statusCompleted": "Befejezve", - "statusRefunded": "Visszatérítve", - "form": { - "name": "Név", - "namePlaceholder": "Csomag neve", - "description": "Leírás", - "descriptionPlaceholder": "Csomag leírása", - "price": "Ár", - "currency": "Pénznem", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Írja be", - "typeCredits": "Kredit", - "typeDuckets": "Duckets", - "typeDiamonds": "Gyémántok", - "typeBadge": "Jelvény", - "typeFurni": "Bútorok", - "typeRank": "Rang", - "amount": "Összeg", - "badgeCode": "Jelvény kódja", - "badgeCodePlaceholder": "pl. VIP001", - "rankId": "Rang azonosító", - "furniItems": "Bútorelemek", - "enabled": "Engedélyezve", - "save": "Csomag mentése", - "saving": "Mentés…", - "cancel": "Mégse" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Tranzakciók", - "subtitle": "PayPal fizetési napló", - "noTransactions": "Még nincsenek tranzakciók", - "colId": "ID", - "colUser": "Felhasználó", - "colAmount": "Összeg", - "colCurrency": "Pénznem", - "colPackage": "csomag", - "colStatus": "Állapot", - "colDate": "Dátum", - "colActions": "Akciók", - "statusCompleted": "Befejezve", - "statusPending": "Függőben", - "statusFailed": "Sikertelen", - "statusRefunded": "Visszatérítve", - "detail": { - "title": "Tranzakció #{id}", - "paypalId": "PayPal azonosító", - "payerEmail": "Fizető e-mail", - "grossAmount": "Bruttó összeg", - "fee": "Díj", - "netAmount": "Nettó összeg" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Vásárlási utalványok", - "subtitle": "A beváltható utalványkódok kezelése", - "newVoucher": "+ Új utalvány", - "edit": "Szerkesztés", - "delete": "Törölje", - "noVouchers": "Még nincsenek utalványok", - "confirmDelete": "Törli a(z) „{code}” utalványt?", - "colId": "ID", - "colCode": "kód", - "colValue": "Érték", - "colType": "Írja be", - "colUses": "Felhasználás / Max", - "colExpires": "Lejár", - "colCreated": "Létrehozva", - "colActions": "Akciók", - "form": { - "code": "kód", - "codePlaceholder": "pl. NYÁR 2025", - "value": "Érték", - "type": "Írja be", - "typeCredits": "Kredit", - "typeDuckets": "Duckets", - "typeDiamonds": "Gyémántok", - "typeBadge": "Jelvény", - "typeFurni": "Bútorok", - "typeRank": "Rang", - "badgeCode": "Jelvény kódja", - "badgeCodePlaceholder": "pl. VIP001", - "rankId": "Rang azonosító", - "maxUses": "Max használat", - "maxUsesPlaceholder": "0 = korlátlan", - "expiresAt": "Lejár:", - "enabled": "Engedélyezve", - "save": "Mentse el az utalványt", - "saving": "Mentés…", - "cancel": "Mégse", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Előfizetések", - "subtitle": "Aktív ismétlődő előfizetések", - "noSubscriptions": "Nincs aktív előfizetés", - "cancel": "Mégse", - "confirmCancel": "Lemondja a(z) {username} előfizetését?", - "colId": "ID", - "colUser": "Felhasználó", - "colPackage": "csomag", - "colAmount": "Összeg", - "colInterval": "Intervallum", - "colStarted": "Elindult", - "colNextBilling": "Következő számlázás", - "colStatus": "Állapot", - "colActions": "Akciók", - "statusActive": "Aktív", - "statusCancelled": "Törölve", - "statusExpired": "Lejárt" - }, - "rareValues": { - "title": "Ritka értékek", - "subtitle": "Ritka értékkategóriák és cikkárak kezelése", - "categories": "Kategóriák", - "items": "Tételek", - "addCategory": "Kategória hozzáadása", - "editCategory": "Kategória szerkesztése", - "deleteCategory": "Kategória törlése", - "noCategories": "Még nincsenek ritka értékkategóriák", - "confirmDeleteCategory": "Törli a(z) \"{name}\" kategóriát és annak összes elemét?", - "colId": "ID", - "colName": "Név", - "colItems": "Tételek", - "colUpdated": "Frissítve", - "colActions": "Akciók", - "colItemName": "Elem neve", - "colCredits": "Kredit", - "colPoints": "Pontok", - "colPointType": "Pont típusa", - "categoryForm": { - "name": "Név", - "namePlaceholder": "Kategória neve", - "save": "Kategória mentése", - "saving": "Mentés…", - "cancel": "Mégse" - }, - "itemForm": { - "itemName": "Elem neve", - "itemNamePlaceholder": "pl. Trón", - "credits": "Kredit értéke", - "points": "Pontérték", - "pointType": "Pont típusa", - "pointTypeDuckets": "Duckets", - "pointTypeDiamonds": "Gyémántok", - "save": "Mentse el az elemet", - "saving": "Mentés…", - "cancel": "Mégse" - } - }, - "badges": { - "title": "Jelvények", - "subtitle": "Jelvénykatalógus feltöltése, megadása és kezelése", - "upload": "Feltöltés", - "giveBadge": "Adj jelvényt", - "catalogue": "Katalógus", - "uploadTitle": "Új jelvény feltöltése", - "uploadSubtitle": "Töltsön fel egy jelvény képfájlt", - "badgeCode": "Jelvény kódja", - "badgeCodePlaceholder": "pl. VIP001", - "badgeFile": "Jelvényfájl", - "badgeFileHint": "PNG vagy GIF, ajánlott 40x40", - "uploadButton": "Feltöltés", - "uploading": "Feltöltés…", - "giveTitle": "Adj jelvényt a felhasználónak", - "giveSubtitle": "Adjon jelvényt egy adott felhasználónak", - "username": "Felhasználónév", - "usernamePlaceholder": "Cél felhasználónév", - "giveButton": "Adj jelvényt", - "giving": "Adom…", - "catalogueTitle": "Jelvénykatalógus", - "catalogueSubtitle": "Minden elérhető jelvény a szállodában", - "noBadges": "Nincsenek jelvények a katalógusban", - "search": "Keresési jelvények", - "searchPlaceholder": "Keresés kód vagy név alapján…", - "colCode": "kód", - "colImage": "Kép", - "colName": "Név", - "colDescription": "Leírás", - "colActions": "Akciók" - }, - "achievements": { - "title": "Eredmények", - "subtitle": "A játékon belüli jutalmak csak olvasható listája", - "noAchievements": "Nincsenek konfigurált jutalmak", - "colId": "ID", - "colName": "Név", - "colCategory": "Kategória", - "colLevels": "Szintek", - "colReward": "Jutalom", - "colProgress": "Haladás", - "levelLabel": "{level}. szint", - "rewardCredits": "{count} kredit", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Naptári kampányok", - "subtitle": "Naptárkampányok és események írásvédett listája", - "noCampaigns": "Még nincsenek naptárkampányok", - "colId": "ID", - "colName": "Név", - "colStart": "Indítsa el", - "colEnd": "Vége", - "colType": "Írja be", - "colReward": "Jutalom", - "colActions": "Akciók", - "detail": { - "title": "Kampány: {name}", - "subtitle": "A naptári esemény részletei", - "days": "Napok", - "dayLabel": "{day}. nap", - "reward": "Jutalom", - "noDays": "Nincsenek beállítva napok ehhez a kampányhoz" - } - }, - "radio": { - "title": "Rádió moderálása", - "subtitle": "Legfrissebb kiáltások, DJ-alkalmazások és közvetített menetrendek (25 legfrissebb mindegyikből).", - "moderation": "Moderálás", - "shouts": "Kiáltások", - "applications": "Alkalmazások", - "schedules": "Menetrendek", - "settings": "Beállítások elemre", - "embed": "Beágyaz", - "ranks": "Rangok", - "history": "Történelem", - "apiKeys": "API kulcsok", - "points": "Pontok", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Rádiófigyelés", - "subtitle": "A konfigurált rádióvégpontok (radio_now_playing_api_url, radio_listeners_api_url) csak olvasható élő vizsgálata. Minden kérés meghiúsul egy {timeout} másodperces időtúllépéssel – nem íródik adat. Konfigurálja az URL-eket a Beállítások alatt.", - "stream": "Stream", - "online": "Online", - "offline": "Offline", - "notConfigured": "Nincs konfigurálva", - "nowPlaying": "Most játszik", - "nowPlayingApi": "Most játszó API", - "listenersApi": "Listeners API", - "listeners": "Hallgatók", - "currentSong": "Aktuális dal", - "bitrate": "Bitráta", - "status": "Állapot", - "noNowPlayingHint": "nincs jelenleg lejátszott API-készlet", - "noListenersHint": "nincs hallgató API beállítva", - "endpointDiagnostics": "Végpont diagnosztika", - "diagnosticsLegend": "OK: elérhető · WARN: nincs beállítva · ERROR: sikertelen kérés vagy időtúllépés.", - "streamUrl": "Stream URL", - "unreachable": "elérhetetlen", - "refresh": "Frissítés" - }, - "user": "Felhasználó", - "message": "Üzenet", - "posted": "Elküldve", - "realName": "Valódi Név", - "age": "Életkor", - "style": "Stílus", - "applied": "Alkalmazva", - "day": "nap", - "start": "Indítsa el", - "end": "Vége", - "show": "Megjelenítés", - "status": "Állapot", - "active": "aktív", - "inactive": "inaktív", - "hidden": "rejtett", - "activeSchedules": "Aktív menetrendek", - "noShouts": "Nincs kiáltás a moderálásra", - "noApplications": "Nem nyújtottak be pályázatot.", - "noSchedules": "Nincs beállítva ütemezés.", - "deleteShout": "Törölje", - "confirmDeleteShout": "Törli ezt a kiáltást?", - "pendingApplications": "Függőben lévő jelentkezések", - "settingsForm": { - "title": "Rádióbeállítások", - "subtitle": "A szerkesztések a website_settings (rádió_* kulcsok) mappába írnak, és kiiktatják a futásidejű beállítások gyorsítótárát. A logikai értékek 0/1-et használnak.", - "enabled": "Engedélyezve", - "disabled": "Letiltva", - "totalKeys": "Összes kulcs", - "configured": "Beállítva", - "curatedHint": "kurált kulcsok értékkel", - "customKeys": "Egyedi kulcsok", - "saveAll": "Az összes mentése", - "singleKey": "Egyetlen kulcs hozzáadása/felülírása", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "értéket", - "commentPlaceholder": "megjegyzés (nem kötelező)", - "saveSingle": "Mentés", - "otherSettings": "Egyéb rádióbeállítások", - "dbError": "Nem sikerült betölteni a beállításokat (az adatbázis nem érhető el). Az alapértelmezett értékek mentéskor jönnek létre." - }, - "embedPage": { - "title": "Radio Embed", - "subtitle": "Másolásra kész beágyazási kód az élő közvetítéshez. Csak olvasható – itt semmi sem ír az adatbázisba. Konfigurálja a stream URL-címét a Rádióbeállításokban (radio_stream_url).", - "streamUrl": "Stream URL", - "configured": "Beállítva", - "missing": "Hiányzik", - "radioName": "Rádió neve", - "nowPlayingApi": "Most játszó API", - "set": "Állítsa be", - "notSet": "Nincs beállítva", - "noStreamUrl": "Nincs konfigurálva az adatfolyam URL-je", - "noStreamUrlText": "Nincs beállítva radio_stream_url, így még nincs mit beágyazni.", - "goToSettings": "Menjen a Rádióbeállításokhoz", - "livePreview": "Élő előnézet", - "livePreviewText": "Ez a csupasz audio lejátszó, ahogy a látogatók látni fogják. Nyomja meg a lejátszás gombot, hogy megerősítse, hogy az adatfolyam elérhető.", - "source": "Forrás", - "audioSnippet": "Hanglejátszó részlet", - "audioSnippetDesc": "A beugró HTML5 audiolejátszó egyenesen a streamre mutatott. Mindenhol működik, ahol a sima HTML megengedett.", - "iframeSnippet": "Iframe burkoló kódrészlet", - "iframeSnippetDesc": "Beágyazza a webhely saját rádiólejátszó-oldalát egy iframe-be – megőrzi a stílust és a jelenleg lejátszott információkat. Ízlés szerint állítsa be a szélességet/magasságot.", - "audioUnsupported": "Az Ön böngészője nem támogatja az audio elemet." - }, - "banners": { - "title": "Bannerek", - "heading": "Rádió bannerek", - "description": "A rádió oldalán látható promóciós bannerek rendezési sorrendben.", - "addBanner": "Banner hozzáadása", - "createBanner": "Banner létrehozása", - "deleteBanner": "Banner törlése", - "noBanners": "Még nincsenek szalaghirdetések – adjon hozzá egyet fent.", - "existing": "Meglévő szalaghirdetések ({count})", - "save": "Mentés", - "delete": "Törölje", - "byUser": "felhasználó: {id}", - "active": "aktív", - "hidden": "rejtett", - "bannerAlt": "Rádió banner", - "statusActive": "Aktív", - "statusHidden": "Rejtett", - "dbError": "Nem sikerült betölteni a szalaghirdetéseket (az adatbázis nem érhető el).", - "form": { - "imagePath": "Kép elérési útja / URL-je", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Cím", - "description": "Leírás", - "sortOrder": "Rendezési sorrend", - "active": "Aktív" - } - }, - "ranksForm": { - "title": "Rádió rangok", - "subtitle": "A rádióalkalmazásokon kiosztható DJ/stáb rangok.", - "dbError": "Nem sikerült betölteni a rangsorokat (az adatbázis nem érhető el).", - "active": "Aktív", - "addRank": "Rang hozzáadása", - "name": "Név", - "badgeCode": "Jelvény kódja", - "description": "Leírás", - "createRank": "Hozzon létre rangot", - "existing": "Meglévő rangok ({count})", - "noRanks": "Még nincsenek rangok – adjon hozzá egyet fent.", - "activeLabel": "aktív", - "inactiveLabel": "inaktív", - "save": "Mentés", - "deleteRank": "#{id}. rang törlése" - }, - "historyPage": { - "title": "Rádiójáték története", - "subtitle": "Korábbi DJ-műsorok és műsoridő (radio_history), a legutóbbi az első. Csak olvasható napló arról, hogy ki, mikor és hány hallgató volt adásban.", - "dbError": "Nem sikerült betölteni a rádióelőzményeket (az adatbázis nem érhető el).", - "showsLogged": "Naplózott műsorok", - "onAirNow": "Most adásban", - "uniqueDjs": "Egyedi DJ-k", - "peakListeners": "Csúcs hallgatók", - "empty": "Még nem rögzítették a rádióelőzményeket.", - "showLog": "Napló megjelenítése ({count})", - "colDj": "DJ", - "colShow": "Megjelenítés", - "colStarted": "Elindult", - "colEnded": "Véget ért", - "colAirtime": "Műsoridő", - "colListeners": "Hallgatók", - "colNotes": "Megjegyzések", - "onAir": "adásban" - }, - "apiKeysForm": { - "title": "Rádió API kulcsok", - "subtitle": "API-kulcsok külső rádiós integrációkhoz (radio_api_keys). A kulcsok szerveroldalon jönnek létre, és maszkolva jelennek meg – másolja ki a teljes értéket az adatbázisból az első kiadáskor.", - "dbError": "Nem sikerült betölteni az API-kulcsokat (az adatbázis nem érhető el).", - "totalKeys": "Összes kulcs", - "active": "Aktív", - "inactive": "Inaktív", - "generateKey": "Kulcs generálása", - "generateHint": "A titkos kulcs automatikusan generálódik kriptográfiai véletlenszerűséggel – nem kell megadni.", - "name": "Név", - "namePlaceholder": "AzureCast híd", - "rateLimit": "Díjkorlát (kérések/perc)", - "allowedIps": "Engedélyezett IP-k (opcionális)", - "allowedIpsPlaceholder": "vesszővel elválasztva, üres = tetszőleges", - "generate": "Kulcs generálása", - "existingKeys": "Meglévő kulcsok ({count})", - "noKeys": "Még nincs API-kulcs – hozzon létre egyet fent.", - "colName": "Név", - "colKey": "Kulcs", - "colAllowedIps": "Engedélyezett IP-k", - "colRateLimit": "Díjkorlát", - "colLastUsed": "Utoljára használt", - "colExpires": "Lejár", - "colStatus": "Állapot", - "colActions": "Akciók", - "maskedHint": "Csak az első 8 karakter jelenik meg", - "any": "bármelyik", - "activeLabel": "aktív", - "inactiveLabel": "inaktív", - "deactivate": "Deaktiválás", - "activate": "Aktiválja", - "delete": "Törölje" - }, - "pointsForm": { - "title": "Rádióhallgató pontok", - "subtitle": "Jutalmazd pénzzel a hallgatókat a rádiózásban eltöltött időért. A szerkesztések a website_settings (radio_points_* kulcsok) mappába írnak, és a futásidejű beállítások gyorsítótárát kiiktatják. A logikai értékek 0/1-et használnak.", - "saved": "Mentve", - "points": "Pontok", - "enabled": "Engedélyezve", - "disabled": "Letiltva", - "perMinute": "Percenként", - "paidIn": "{currency} pénznemben fizetve", - "maxPerDay": "Max / nap", - "unlimited": "Korlátlan", - "minListeners": "Min hallgatók", - "settings": "Beállítások elemre", - "pointsEnabled": "Pontok engedélyezve", - "pointsEnabledHint": "Főkapcsoló a hallgatói pontok odaítéléséhez.", - "currency": "Pénznem", - "currencyHint": "Melyik pénztárcába fizetik be a pontokat.", - "pointsPerMinute": "Pontok percenként", - "pointsPerMinuteHint": "Minden egyes teljes hallgatási percért odaítélt összeg.", - "maxPerDayHint": "Napi korlát felhasználónként. Használja a 0-t a korlátlanul.", - "minListenersHint": "Csak akkor jár pont, ha legalább ennyi ember jelentkezik.", - "save": "Mentse el a pontbeállításokat" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Tartalék lejátszási lista (radio_auto_dj_playlist) a rádió végigpörög, ha nincs élő DJ. Rendezési sorrend, majd cím szerint.", - "dbError": "Nem sikerült betölteni az AutoDJ lejátszási listát (az adatbázis nem érhető el).", - "tracks": "Pályák", - "active": "Aktív", - "inactive": "Inaktív", - "addTrack": "Szám hozzáadása", - "titlePlaceholder": "A szám címe", - "artist": "Művész", - "album": "Album", - "artworkUrl": "A műalkotás URL-je", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Időtartam (másodperc)", - "durationPlaceholder": "pl. 215", - "sortOrder": "Rendezési sorrend", - "playlist": "Lejátszási lista ({count})", - "noTracks": "Még nincsenek AutoDJ-sávok – adjon hozzá egyet fent.", - "colOrder": "Rendeljen", - "colTitle": "Cím", - "colArtist": "Művész", - "colAlbum": "Album", - "colDuration": "Időtartam", - "colPlays": "Játszik", - "colLastPlayed": "Utoljára játszott", - "colStatus": "Állapot", - "colActions": "Akciók", - "activeLabel": "aktív", - "inactiveLabel": "inaktív", - "deactivate": "Deaktiválás", - "activate": "Aktiválja", - "delete": "Törölje", - "trackTitle": "Cím" - }, - "moderationPage": { - "title": "DJ moderálás", - "subtitle": "Tekintse át és távolítsa el a rádiókiáltásokat (50 legutóbbi).", - "recentShouts": "Legutóbbi kiáltások ({count})" - } - }, - "commandocentrum": { - "title": "Commandocentrum", - "subtitle": "Diagnosztika, RCON vezérlők és felhasználókezelés", - "diagnostics": "Diagnosztika", - "rcon": "RCON", - "userActions": "Felhasználói műveletek", - "diagnosticsTitle": "Emulátor diagnosztika", - "memoryUsage": "Memóriahasználat", - "uptime": "Üzemidő", - "onlineUsers": "Online felhasználók", - "roomsLoaded": "A szobák feltöltve", - "refresh": "Frissítés", - "rconTitle": "RCON parancsokat", - "rconPlaceholder": "Írja be az RCON parancsot…", - "rconSend": "Küldés", - "rconSending": "Küldés…", - "rconResponse": "Válasz", - "userActionsTitle": "Felhasználói műveletek", - "username": "Felhasználónév", - "usernamePlaceholder": "Cél felhasználónév", - "action": "Akció", - "execute": "Végrehajtás", - "actions": { - "disconnect": "Leválasztás", - "alert": "Figyelmeztetés küldése", - "giveCredits": "Adj krediteket", - "giveBadge": "Adj jelvényt", - "givePoints": "Adj pontokat", - "ban": "Ban", - "kick": "Rúgd" - }, - "messagePlaceholder": "Üzenet (figyelmeztetésért)…", - "amountPlaceholder": "Összeg…", - "badgePlaceholder": "Jelvény kódja…" - }, - "emulator": { - "title": "Emulátor konfig", - "subtitle": "Megtekintheti és szerkesztheti az emulátor beállításait és a területi beállításokat", - "settings": "Beállítások elemre", - "texts": "Szövegek", - "search": "Keresés", - "searchPlaceholder": "Keresési billentyűk…", - "noSettings": "Nem találhatók beállítások", - "noTexts": "Nem található szöveg", - "edit": "Szerkesztés", - "save": "Mentés", - "saving": "Mentés…", - "cancel": "Mégse", - "colKey": "Kulcs", - "colValue": "Érték", - "colType": "Írja be", - "colActions": "Akciók", - "editDialog": { - "title": "Szerkesztés: {key}", - "value": "Érték", - "valuePlaceholder": "Adja meg az értéket…", - "save": "Módosítások mentése", - "cancel": "Mégse" - } - }, - "alerts": { - "title": "Figyelmeztetések", - "subtitle": "A szálloda egészére kiterjedő figyelmeztetések küldése és a legutóbbi figyelmeztetések megtekintése", - "sendAlert": "Szállodai figyelmeztetés küldése", - "recentAlerts": "Legutóbbi figyelmeztetések ({count})", - "noRecentAlerts": "Nincsenek friss figyelmeztetések", - "form": { - "title": "Figyelmeztetés címe", - "titlePlaceholder": "pl. Szerver karbantartás 10 perc alatt", - "message": "Figyelmeztető üzenet", - "messagePlaceholder": "Írja meg a figyelmeztető üzenetet…", - "type": "Írja be", - "typeHotel": "A szálloda egészére kiterjedő riasztás", - "typeStaff": "Csak személyzet", - "urgent": "Sürgős", - "send": "Figyelmeztetés küldése", - "sending": "Küldés…", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Cím", - "colSentBy": "Küldte", - "colType": "Írja be", - "colDate": "Dátum", - "colActions": "Akciók", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Személyzeti tevékenységek", - "subtitle": "A személyzeti műveletek ellenőrzési nyomvonala az adminisztrációs panelen", - "noLogs": "Még nincs naplózott személyzeti tevékenység", - "colId": "ID", - "colUser": "Felhasználó", - "colAction": "Akció", - "colTarget": "Cél", - "colDescription": "Leírás", - "colIp": "IP", - "colTimestamp": "Időbélyeg", - "filterByUser": "Szűrés felhasználó szerint…", - "filterByAction": "Szűrés művelet szerint…", - "clearFilters": "Tiszta szűrők", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Szószűrő", - "subtitle": "Kezelje a szűrt szavakat és kifejezéseket a szállodában", - "addWord": "Szó hozzáadása", - "addWords": "Szavak hozzáadása", - "noWords": "Még nincsenek szűrt szavak", - "confirmDelete": "Eltávolítja a „{word}” kifejezést a szűrőből?", - "colId": "ID", - "colWord": "Szó", - "colAddedBy": "Hozzáadta", - "colCreated": "Létrehozva", - "colActions": "Akciók", - "form": { - "word": "Szó", - "wordPlaceholder": "pl. rossz szó", - "addMore": "Több szó hozzáadása (soronként egy)", - "save": "Hozzáadás a szűrőhöz", - "saving": "Mentés…", - "cancel": "Mégse" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Karbantartási mód", - "subtitle": "A szállodaszintű karbantartás engedélyezése vagy letiltása", - "enabled": "A karbantartási mód engedélyezve van", - "disabled": "A karbantartási mód le van tiltva", - "enable": "Karbantartás engedélyezése", - "disable": "A karbantartás letiltása", - "message": "Karbantartási üzenet", - "messagePlaceholder": "Hamarosan visszatérünk!", - "staffAccess": "A karbantartás során engedje meg a személyzet hozzáférését", - "save": "Mentse el a beállításokat", - "saving": "Mentés…", - "confirmEnable": "A karbantartás engedélyezése megakadályozza, hogy a személyzeten kívüli felhasználók hozzáférjenek a szállodához. Folytatja?", - "confirmDisable": "Letiltja a karbantartási módot, és visszaállítja az összes felhasználó hozzáférését?" - }, - "housekeeping": { - "title": "Háztartási engedélyek", - "subtitle": "Konfigurálja, hogy mely rangok mely adminisztrátori szakaszokhoz férhetnek hozzá", - "addPermission": "Engedély hozzáadása", - "editPermission": "Szerkesztési engedély", - "deletePermission": "Engedély törlése", - "noPermissions": "Nincsenek konfigurálva takarítási engedélyek", - "confirmDelete": "Törli ezt az engedélyt?", - "colId": "ID", - "colRank": "Rang", - "colSection": "szakasz", - "colActions": "Akciók", - "form": { - "rankId": "Rang azonosító", - "rankIdPlaceholder": "Minimális rang", - "section": "Szakaszkulcs", - "sectionPlaceholder": "pl. admin.dashboard", - "save": "Mentse el az engedélyt", - "saving": "Mentés…", - "cancel": "Mégse" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset Alkalmazva!", - "cleared": "All Engedélyek cleared!", - "invalidRank": "Invalid Rang", - "testDone": "Test done: {count} Engedélyek found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Törölje ALL Engedélyek? This Akció cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Engedély", - "colDescription": "Leírás", - "colMinRank": "Min. Rang", - "permissionKey": "Engedélykulcs", - "minRank": "Min. Rang", - "description": "Leírás", - "permissions": "Engedélyek", - "permissionsCount": "{count} Engedélyek", - "permission": "Engedély", - "highestMinRank": "Highest min. Rang: {rank}", - "totalMinRank": "Total min. Rang sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Rangok", - "missingDeps": "{count} Hiányzik dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Hiányzik)", - "rank": "Rang", - "count": "Count", - "searchPermission": "Keresés Engedélyek…", - "search": "Keresés", - "manage": "Manage", - "importSelection": "Importálás selection", - "noGroup": "Nem group", - "allGroups": "All groups", - "perGroup": "Engedélyek per group", - "perRank": "Engedélyek per Rang", - "rankOverviewHint": "All Engedélyek grouped by the Rang they are assigned to.", - "tabOverview": "Áttekintés", - "tabManage": "Manage", - "tabImport": "Importálás / Export", - "tabRanks": "Rang Áttekintés", - "tabPresets": "Előbeállítások", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Importálás Engedélyek", - "importHint": "Paste a JSON array of Engedély objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Importálás", - "exportTitle": "Export Engedélyek", - "exportHint": "Export all Engedélyek as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Engedély Előbeállítások", - "presetsHint": "Alkalmazni a predefined Állítsa be of Engedélyek for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Moderálás tools: Felhasználó lookup, Tiltások, CFH handling, chat Naplók.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Felhasználók, Szobák, news, Beállítások elemre, Bolt, events, Rádió & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Engedély management and asset Importálás.", - "applyPreset": "Alkalmazni preset", - "clearAll": "Clear all Engedélyek", - "testTitle": "Test Rang access", - "testHint": "Enter a Rang number to see which Engedélyek would be granted.", - "test": "Test", - "auditTitle": "Engedély audit log", - "auditHint": "All changes to Takarítás Engedélyek are logged.", - "auditLogsAt": "Audit Naplók are available on the Audit log page.", - "viewAuditLogs": "Megtekintés audit Naplók", - "importedWithErrors": "Imported {count} Engedélyek with {errors} errors", - "confirmClearAllDesc": "This will Távolítsa el every Engedély entry from the Adatbázis. Are you sure?", - "confirmDeletePermission": "Törölje this Engedély permanently?", - "confirmBulkDelete": "Törölje {count} selected Engedélyek?", - "deleteSelected": "Törölje {count} selected", - "cancel": "Mégse", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Felhasználó", - "auditAction": "Akció", - "auditTarget": "Cél", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Szobák", - "subtitle": "Szállodai szobák keresése és kezelése", - "search": "Keresés", - "searchPlaceholder": "Keresés név, tulajdonos vagy azonosító alapján…", - "searchResults": "{count, plural, one {# room} other {# rooms}} található a következőre: \"{query}\"", - "noResults": "Nem található szoba", - "colId": "ID", - "colName": "Név", - "colOwner": "Tulajdonos", - "colUsers": "Felhasználók", - "colState": "állam", - "colCategory": "Kategória", - "colCreated": "Létrehozva", - "colActions": "Akciók", - "stateOpen": "Nyissa meg", - "stateClosed": "Zárva", - "stateLocked": "Lezárva", - "stateInvisible": "Láthatatlan", - "detail": { - "title": "Szoba: {name}", - "subtitle": "{owner} tulajdona", - "overview": "Áttekintés", - "actions": "Akciók", - "description": "Leírás", - "noDescription": "Nincs leírás", - "owner": "Tulajdonos", - "users": "Online felhasználók", - "maxUsers": "Max felhasználók", - "category": "Kategória", - "state": "állam", - "tags": "Címkék", - "noTags": "Nincsenek címkék", - "created": "Létrehozva", - "deleteRoom": "Szoba törlése", - "confirmDelete": "Törli a \"{name}\" szobát? Ezt nem lehet visszavonni.", - "enterRoom": "Lépjen be a szobába", - "changeOwner": "Tulajdonosváltás", - "changeOwnerPlaceholder": "Új tulajdonos felhasználónév" - } - }, - "emailTemplates": { - "title": "E-mail sablonok", - "subtitle": "Tranzakciós e-mail-sablonok kezelése", - "newTemplate": "+ Új sablon", - "edit": "Szerkesztés", - "delete": "Törölje", - "noTemplates": "Még nincsenek e-mail sablonok", - "confirmDelete": "Törli a(z) „{name}” sablont?", - "colId": "ID", - "colName": "Név", - "colSubject": "Tárgy", - "colKey": "Kulcs", - "colUpdated": "Frissítve", - "colActions": "Akciók", - "form": { - "name": "Név", - "namePlaceholder": "pl. Üdvözlő e-mail", - "key": "Kulcs", - "keyPlaceholder": "pl. welcome_email", - "subject": "Tárgy", - "subjectPlaceholder": "E-mail tárgysora", - "body": "Törzs (HTML)", - "bodyPlaceholder": "

Kedves {username}!

", - "variables": "Elérhető változók", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Sablon mentése", - "saving": "Mentés…", - "cancel": "Mégse" - } - }, - "theme": { - "title": "téma", - "subtitle": "Testreszabhatja a CMS megjelenését", - "presets": "Előbeállítások", - "colours": "Színek", - "css": "CSS", - "presetsTitle": "Előre beállított téma", - "presetsSubtitle": "Válasszon egy előre elkészített színsémát", - "applyPreset": "Alkalmazni", - "presetApplied": "Előbeállítás alkalmazva: {preset}", - "customiseTitle": "Egyedi színek", - "primary": "Elsődleges", - "secondary": "Másodlagos", - "accent": "Akcent", - "background": "Háttér", - "surface": "Felület", - "text": "Szöveg", - "saveColours": "Mentse el a színeket", - "savingColours": "Mentés…", - "cssTitle": "Egyedi CSS", - "cssSubtitle": "Adjon hozzá egyéni CSS-t a témastílusok felülbírálásához", - "cssPlaceholder": "/* Az Ön egyéni CSS-je itt */", - "saveCss": "CSS mentése", - "savingCss": "Mentés…", - "reset": "Állítsa vissza az alapértelmezett értékeket", - "confirmReset": "Visszaállítja a témát az alapértelmezett értékekre?" - }, - "media": { - "title": "Médiatár", - "subtitle": "Médiafájlok feltöltése és kezelése", - "upload": "Feltöltés", - "uploadTitle": "Tölts fel egy fájlt", - "uploadSubtitle": "Húzással vagy kattintással feltöltheti", - "uploadButton": "Válasszon fájlt", - "uploading": "Feltöltés…", - "noFiles": "Még nincsenek médiafájlok", - "delete": "Törölje", - "confirmDelete": "Véglegesen törli ezt a fájlt?", - "search": "Keresés", - "searchPlaceholder": "Keresés fájlnév szerint…", - "colPreview": "Előnézet", - "colName": "Név", - "colSize": "Méret", - "colType": "Írja be", - "colUploaded": "Feltöltve", - "colActions": "Akciók", - "copyUrl": "URL másolása", - "urlCopied": "Az URL a vágólapra másolva" - }, - "favicon": { - "title": "Favicon", - "subtitle": "Töltse fel és kezelje a webhely faviconját", - "current": "Aktuális kedvenc", - "uploadLabel": "Favicon feltöltése", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO vagy SVG. Max 2MB.", - "upload": "Feltöltés", - "uploading": "Feltöltés…", - "delete": "Távolítsa el", - "deleting": "Eltávolítás…", - "saved": "Favicon sikeresen elmentve!", - "deleted": "Favicon sikeresen eltávolítva!", - "error": "Valami elromlott", - "confirmDelete": "Eltávolítja a favicont? A webhely többé nem jelenít meg egyéni kedvenc ikont.", - "generator": { - "title": "Favicon létrehozása", - "text": "Szöveg", - "bgColor": "Háttérszín", - "textColor": "Szöveg színe", - "rounded": "Lekerekített sarkok", - "save": "Mentés faviconként" - }, - "cancel": "Cancel" - }, - "settings": { - "title": "CMS beállítások", - "subtitle": "Kulcs/érték CMS-konfiguráció kezelése", - "addSetting": "Beállítás hozzáadása", - "edit": "Szerkesztés", - "delete": "Törölje", - "noSettings": "Nem találhatók beállítások", - "confirmDelete": "Törli a „{key}” beállítást?", - "colKey": "Kulcs", - "colValue": "Érték", - "colUpdated": "Frissítve", - "colActions": "Akciók", - "form": { - "key": "Kulcs", - "keyPlaceholder": "pl. hotel_name", - "value": "Érték", - "valuePlaceholder": "Beállítási érték", - "save": "Beállítás mentése", - "saving": "Mentés…", - "cancel": "Mégse" - }, - "keysInDatabase": "{count} keys in database", - "managedInForm": "{count} managed in form", - "documented": "{count} documented", - "saved": "Settings saved.", - "saveFailed": "Could not save settings.", - "saveSettings": "Save settings", - "viewOnly": "You can view settings but need edit permission to change them." - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Kezdőlap", - "reload": "Újratöltés", - "fullscreen": "Teljes képernyő", - "logout": "Kijelentkezés", - "onlineUsers": "Online felhasználók", - "emulatorOnline": "Emulátor online", - "emulatorOffline": "Emulátor offline", - "dragToMove": "Húzás a mozgatáshoz", - "hide": "Sáv elrejtése", - "fullscreenExit": "Kilépés a teljes képernyőből", - "show": "Sáv megjelenítése", - "emulatorUnknown": "Az emulátor állapota ismeretlen" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Fájldiagnosztika", - "preliminary": "A címek előzetes ellenőrzése; a tartalmat az importálás ellenőrzi.", - "http": "HTTP {status}", - "network": "Sikertelen kapcsolódás", - "timeout": "A forrás nem válaszolt időben", - "invalidResponse": "A forrás fájl helyett weboldalt adott vissza", - "available": "Fájl megtalálva; ellenőrzésre vár", - "recover": "Eredeti csatolása és folytatás", - "recoveryHint": "Válassza ki: {file} (legfeljebb 50 MB). Az azonosságát ellenőrizzük. A sikertelen elemek újrapróbálhatók; a kész importok megmaradnak.", - "attach": "Válassza ki az eredeti .nitro fájlt", - "working": "Ellenőrzés vagy folytatás...", - "attached": "Megfelelő eredeti fájl csatolva", - "resume": "Sikertelen importok folytatása ezzel a fájllal", - "invalidFile": "Válasszon megfelelő eredeti .nitro fájlt legfeljebb 50 MB méretben, és próbálja újra.", - "resumeError": "Frissítse az előzményeket, és használja a legutóbbi próbálkozást; ellenőrizze a fájlt, és próbálja újra.", - "mismatchedFile": "Ez a fájl másik bútorhoz tartozik.", - "alreadyStarted": "A helyreállítás már elindult. Frissítse az előzményeket, és használja a legutóbbi próbálkozást.", - "notEligible": "Ez az elem nem állítható helyre csatolmánnyal." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "A helyreállítási másolat 7 napig megmarad ebben a böngészőben.", + "saved": "A helyreállítási másolat 7 napra elmentve ebben a böngészőben.", + "unavailable": "A böngészőből történő helyreállítás nem érhető el. Tartsd nyitva ezt az oldalt a módosítások mentéséig.", + "found": "Ebben a böngészőben elérhető egy helyreállítási másolat. Mentés ideje:", + "restore": "Böngészőmásolat visszaállítása", + "discard": "Böngészőmásolat törlése", + "confirmRestore": "Lecseréled a jelenlegi űrlapot a böngészőben tárolt helyreállítási másolatra? Mentés előtt ellenőrizd a tartalmát.", + "confirmDiscard": "Törlöd ezt a helyreállítási másolatot a böngészőből? A jelenlegi űrlap változatlan marad." + }, + "nav": { + "home": "Otthon", + "community": "közösség", + "articles": "Cikkek", + "photos": "Fényképek", + "staff": "Személyzet", + "rankings": "Rangsorok", + "guilds": "Céhek", + "leaderboards": "Ranglisták", + "rareValues": "Ritka értékek", + "shop": "Bolt", + "market": "Piac", + "assistance": "Segítségnyújtás", + "helpCenter": "Súgó", + "myTickets": "A jegyeim", + "badges": "Jelvények", + "radio": "Rádió", + "friends": "Barátok", + "messages": "Üzenetek", + "admin": "Admin", + "openMenu": "Menü megnyitása", + "closeMenu": "Menü bezárása", + "drawBadge": "Rajzolj jelvényt", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} online", + "nitroClient": "Nitro kliens", + "tagline": "Egy online virtuális világ, ahol létrehozhatod saját avatarod, barátokat köthetsz, chatelhetsz, szobákat hozhatsz létre és még sok mást!", + "login": "Bejelentkezés", + "or": "Or", + "createAccount": "Hozzon létre egy fiókot" + }, + "footer": { + "copyright": "© {year} – a {hotel} egy nonprofit oktatási projekt" + }, + "pages": { + "staff": { + "title": "Személyzet", + "subtitle": "A szálloda mögött álló csapat", + "ranksTitle": "Rangok", + "ranksSubtitle": "Amiről a csapat egyes részei gondoskodnak", + "membersTitle": "A csapat tagjai", + "membersEmptySubtitle": "Jelenleg nincs kit mutatni", + "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", + "emptyState": "Nincsenek megjeleníthető munkatársak.", + "colUsername": "Felhasználónév", + "colRank": "Rang", + "colMotto": "Mottó", + "viewProfile": "View profile", + "noMotto": "No motto set", + "loadError": "Unable to load staff members. Please try again shortly.", + "retry": "Try again" + }, + "leaderboard": { + "title": "Ranglista", + "subtitle": "A legjobb 20 játékos {currency} szerint", + "tab_credits": "Kredit", + "tab_diamonds": "Gyémántok", + "tab_duckets": "Duckets", + "tab_achievement": "Eredmények", + "tab_respects": "Tisztelet", + "tab_onlinetime": "Online idő", + "emptyState": "Még nincs megjeleníthető rangsor.", + "colAvatar": "Avatar", + "colPlayer": "Játékos" + }, + "friends": { + "title": "Barátok", + "emptySubtitle": "Még nincsenek hozzáadott barátaid", + "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", + "emptyState": "Adjon hozzá barátokat a szállodában, és itt megjelennek.", + "noMotto": "Nincs mottó", + "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": "Üzenetek", + "subtitle": "Baráti felkérések és offline üzenetek várnak rád", + "requestsTitle": "Baráti kérések", + "requestsEmptySubtitle": "Még senki sem kérte, hogy legyen a barátod", + "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", + "requestsEmptyState": "Nincsenek függőben lévő baráti kérések.", + "wantsToBeFriend": "a barátod akar lenni.", + "accept": "Elfogadás", + "offlineTitle": "Offline üzenetek", + "offlineEmptySubtitle": "Beérkezett üzenetei üresek", + "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", + "offlineEmptyState": "Nincsenek offline üzenetei.", + "unknownUser": "Felhasználó #{id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Nincs mottó", + "statRank": "Rang", + "statCredits": "Kredit", + "statRegistered": "Regisztrált", + "badgesTitle": "Jelvények", + "badgesEmpty": "Még nincsenek jelvények.", + "photosTitle": "Fényképek", + "photosEmpty": "Még nincsenek fényképek.", + "guestbookTitle": "Vendégkönyv", + "guestbookSubtitle": "Üzenetek {username} falán", + "leaveMessage": "Hagyj üzenetet", + "guestbookPlaceholder": "Írj valamit {username} vendégkönyvébe…", + "post": "Hozzászólás", + "loginToPost": "Jelentkezzen be, hogy üzenetet hagyjon a vendégkönyvben.", + "guestbookEmpty": "Még nincsenek bejegyzések a vendégkönyvben.", + "unknownUser": "Felhasználó #{id}", + "statDuckets": "Duckets", + "statDiamonds": "Gyémántok", + "walletTitle": "Pénztárca", + "friendsTitle": "Barátok", + "friendsSubtitle": "Emberek a szállodában, akikkel együtt lógnak", + "friendsEmpty": "Nincsenek megmutatható barátok.", + "roomsTitle": "Szobák", + "roomsSubtitle": "Saját szobák", + "roomsEmpty": "Nincs megjeleníthető szoba.", + "roomUntitled": "Névtelen szoba", + "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": "Rangsorok", + "subtitle": "A legjobb 12 játékos kreditek alapján rangsorolva", + "emptyState": "Még nincs rangsorolandó játékos." + }, + "home": { + "welcome": "Üdvözöljük itt: {hotelName}", + "welcomeSubtitle": "Az Ön retro szállodája, amelyet most a Next.js üzemeltet", + "welcomeBody": "Tárcsázz, gyűjts bútorokat és találkozz barátokkal.", + "enterHotel": "Írja be a következőt: {hotelName}", + "onlineFriends": "Online Barátok", + "noFriendsOnline": "Nincsenek online barátok", + "register": "REGISZTRÁLJ MOST", + "joinNow": "Csatlakozzon még ma a {hotelName} szolgáltatáshoz!", + "recentUsers": "Legutóbbi felhasználók", + "recentPhotos": "Legutóbbi fotók", + "latestNews": "Friss hírek", + "newsTitle": "Friss hírek", + "newsSubtitle": "Frissen a szállodából", + "allNews": "Minden hír →", + "allUsers": "Közösség →", + "noArticles": "Még nincsenek cikkek.", + "noPhotos": "Még nincsenek fényképek.", + "noUsers": "Nincsenek online felhasználók", + "latestArticle": "Legújabb cikk", + "latestUsers": "Legújabb polgárok ({count} összesen)", + "statsOnline": "Online", + "statsCitizens": "Polgárok", + "statsRooms": "Szobák", + "statsArticles": "Cikkek", + "featuresAvatar": "Avatár", + "featuresAvatarDesc": "Hozd létre egyedi megjelenésed", + "featuresFurniture": "Bútorok", + "featuresFurnitureDesc": "Díszítsd fel a szobákat tárgyakkal", + "featuresCommunity": "Közösség", + "featuresCommunityDesc": "Szerezz barátokat és csevegj", + "featuresGames": "Játékok", + "featuresGamesDesc": "Versenyezz és érezd jól magad", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Hírek", + "subtitle": "A szálloda legújabb bejelentései, eseményei és frissítései", + "noArticles": "Még nincsenek cikkek.", + "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": "← Hírek", + "reactionsTitle": "Reakciók", + "reactionsSubtitle": "Mondja el, mit gondol", + "reaction": { + "like": "tetszik", + "love": "Szerelem", + "wow": "Hűha" + }, + "removeReaction": "Kattintson a reakció eltávolításához", + "reactWith": "Reakció a következővel: {reaction}", + "noReactions": "Még nincsenek reakciók.", + "logIn": "Jelentkezzen be", + "toReact": "reagálni.", + "commentsTitle": "Megjegyzések", + "commentsSubtitle": "Csatlakozzon a beszélgetéshez", + "commentsCount": "eddig {count}", + "noComments": "Még nincsenek megjegyzések. Legyen Ön az első, aki hozzászól.", + "userNumber": "Felhasználó #{id}", + "addComment": "Megjegyzés hozzáadása", + "commentPlaceholder": "Írja meg véleményét…", + "postComment": "Megjegyzés közzététele", + "toComment": "megjegyzést hagyni.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Fényképek", + "subtitle": "A szállodában készült legújabb pillanatképek", + "noPhotos": "Még nincsenek fényképek.", + "photoAlt": "Fotó: #{id} felhasználó", + "byUser": "felhasználó #{id}" + }, + "badges": { + "title": "Jelvények", + "subtitle": "A jelvények, amelyeket megszerezhet és megmutathat a szállodában", + "noBadges": "Még nincsenek jelvények." + }, + "community": { + "title": "közösség", + "subtitle": "Minden, ami a szálloda körül történik, egy helyen", + "open": "Nyissa meg a → lehetőséget", + "links": { + "rankings": { + "title": "Rangsorok", + "text": "Tekintse meg a szálloda leggazdagabb játékosait kreditek szerint rangsorolva." + }, + "staff": { + "title": "Személyzet", + "text": "Találkozzon a csapattal, amely minden nap fenntartja a szállodát." + }, + "news": { + "title": "Hírek", + "text": "A legújabb bejelentések, események és frissítések." + }, + "photos": { + "title": "Fényképek", + "text": "A közösség által megosztott pillanatképek a szálloda körül." + }, + "guilds": { + "title": "Céhek", + "text": "Böngésszen a játékosok által létrehozott és csatlakozott csoportok között." + }, + "leaderboards": { + "title": "Ranglisták", + "text": "Ki áll az élen ebben a szezonban a szálloda statisztikáiban." + } + } + }, + "guilds": { + "title": "Céhek", + "subtitle": "Böngésszen a játékosok által létrehozott és csatlakozott csoportok között", + "empty": "Még nincsenek céhek.", + "unnamedGuild": "Névtelen céh", + "noDescription": "Nincs leírás" + }, + "guild": { + "allGuilds": "← Minden céh", + "unnamedGuild": "Névtelen céh", + "noDescription": "Nincs leírás", + "memberSingular": "tag", + "memberPlural": "tagok", + "founded": "Alapítva", + "forumLink": "Fórum →", + "discussion": "Megbeszélés", + "membersTitle": "tagok", + "memberLowerSingular": "tagja", + "memberLowerPlural": "tagjai", + "noMembers": "Nincsenek tagok.", + "owner": "Tulajdonos", + "noMotto": "Nincs mottó" + }, + "guildForum": { + "backToGuild": "← Vissza a céhhez", + "unnamedGuild": "Névtelen céh", + "forumTitle": "{guild} — Fórum", + "threadSingular": "szál", + "threadPlural": "szálak", + "newThread": "+ Új szál", + "empty": "Még nincs téma ezen a fórumon.", + "colSubject": "Tárgy", + "colAuthor": "Szerző", + "colPosts": "Hozzászólások", + "colDate": "Dátum", + "noSubject": "(nincs tárgy)", + "pinned": "Rögzítve", + "locked": "Lezárva", + "userNumber": "Felhasználó #{id}", + "unknown": "Ismeretlen", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Vissza a fórumhoz", + "unnamedGuild": "Névtelen céh", + "title": "Új szál", + "subtitle": "a {guild} fórumban", + "subjectLabel": "Tárgy", + "subjectPlaceholder": "Téma tárgya", + "messageLabel": "Üzenet", + "messagePlaceholder": "Írd meg a nyitó bejegyzésedet…", + "postThread": "Tegye fel a szálat", + "cancel": "Mégse", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Bolt", + "subtitle": "Töltse fel számláját, és vegyen exkluzív csomagokat, valutát és jelvényeket.", + "browsingCategory": "Böngészés a {category} csomagok között.", + "all": "Mind", + "allPackages": "Minden csomag", + "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", + "empty": "Jelenleg nincs elérhető csomag.", + "buy": "Vásároljon", + "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": "Töltse fel PayPal-lal", + "subtitle": "Fizessen biztonságosan a PayPal segítségével, és a jóváírások a fizetés törlésének pillanatában hozzáadódnak.", + "cancelled": "A fizetést törölték – nem történt fizetés.", + "chooseAmount": "Válasszon egy összeget", + "notConfiguredPre": "A PayPal még nincs konfigurálva. Rendszergazdának kell beállítania", + "notConfiguredAnd": "és", + "notConfiguredOptional": "(és opcionálisan", + "notConfiguredPost": "sandbox vs. live esetén).", + "balanceTitle": "Az egyensúlyod", + "signedInAs": "Bejelentkezve mint {username}", + "credits": "Kredit", + "creditsPerUnit": "Jóváírások 1,00 {currency} után", + "rateLine": "1,00 {currency} után {amount} jóváírást kap. A kreditek a következő bejelentkezéskor jelennek meg a játékban." + }, + "marketplace": { + "title": "Piactér", + "subtitle": "Böngésszen a játékosok által felsorolt bútorok és ritkaságok között. A listákat a játékban helyezik el, és élőben frissülnek – menjen be a szállodába, és tegyen ajánlatot.", + "activeOffers": "Aktív ajánlatok", + "sellers": "Eladók", + "totalValue": "Teljes érték", + "activeListings": "Aktív listák", + "mostRecentFirst": "Legutóbb szerepel az első helyen", + "empty": "Jelenleg nincsenek aktív piaci ajánlatok. Nézz vissza később.", + "colOffer": "Ajánlat", + "colItem": "Tétel", + "colSeller": "Eladó", + "colPrice": "Ár", + "colListed": "Felsorolt", + "itemLabel": "{id}. tétel", + "userLabel": "Felhasználó #{id}", + "justNow": "csak most", + "minutesAgo": "{count} perce", + "hoursAgo": "{count} órája", + "daysAgo": "{count} napja" + }, + "rares": { + "title": "Ritka értékek", + "subtitle": "Kapjon áttekintést a szállodában található összes ritkaságról, kategóriák szerint csoportosítva.", + "empty": "Jelenleg nincs itt felsorolva ritkaság.", + "rareCount": "{count, plural, one {# rare} other {# rares}}", + "viewRares": "Ritkák megtekintése →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", + "allRares": "← Minden ritka", + "empty": "Ebben a kategóriában még nem szerepel ritkaság.", + "colRare": "Ritka", + "colCredits": "Kredit", + "colCurrency": "Pénznem", + "creditsValue": "{value} kredit", + "duckets": "Duckets", + "diamonds": "Gyémántok", + "credits": "Kredit" + }, + "redeem": { + "title": "Voucher beváltása", + "subtitle": "Van utalványkódod? Írja be alább, hogy hozzáadja a jutalmat a fiókjához.", + "enterCode": "Írja be a kódját", + "oncePerAccount": "Minden utalvány számlánként csak egyszer váltható be.", + "balanceTitle": "Az egyensúlyod", + "signedInAs": "Bejelentkezve mint {username}", + "credits": "Kredit", + "instantCredit": "A beváltott jutalmak azonnal jóváírásra kerülnek, és a következő bejelentkezéskor megjelennek a játékban." + }, + "help": { + "title": "Súgó", + "subtitle": "Útmutatókat, támogatási témákat és szállodai szabályokat találhat – mindent, amire segítségre van szüksége.", + "myTickets": "Jegyeim →", + "topicsTitle": "Támogatási témák", + "topicsSubtitle": "Böngésszen útmutatókban és a gyakori kérdésekre adott válaszokban", + "topicsEmpty": "Még nincs súgótéma.", + "rulesTitle": "Szállodai szabályok", + "rulesSubtitle": "Kérjük, olvassa el ezeket, mielőtt a szállodában lógna", + "rulesEmpty": "Még nincsenek közzétett szabályok.", + "categoryEmpty": "Ebben a kategóriában nincsenek szabályok." + }, + "helpCategory": { + "back": "← Súgó", + "topicSubtitle": "Súgó téma", + "moreTitle": "További súgótémák", + "moreSubtitle": "Ugrás egy másik támogatási témához" + }, + "helpTickets": { + "title": "Súgó Jegyek", + "subtitle": "Nyújtsa be jegyét a személyzetnek, és kövesse nyomon a nyitott kéréseket.", + "statTotal": "Összes jegy", + "statOpen": "Nyissa meg", + "statClosed": "Zárva", + "newTitle": "Új jegy", + "newSubtitle": "Írja le a problémát, és a személyzet követni fogja", + "subjectPlaceholder": "Tárgy", + "contentPlaceholder": "Írja le a problémát…", + "submit": "Jegy benyújtása", + "listTitle": "A jegyeid", + "listSubtitle": "Minden kérés, amelyet a személyzetnek küldött", + "listEmpty": "Még nincs jegyed.", + "colId": "ID", + "colSubject": "Tárgy", + "colStatus": "Állapot", + "colCreated": "Létrehozva", + "statusOpen": "Nyissa meg", + "statusClosed": "Zárva", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "Jelentkezzen a {hotel} személyzetére", + "subtitle": "Időnként megnyitjuk a személyzeti jelentkezéseket. Ha olyan pozícióval találkozik, amelyre úgy érzi, hogy tökéletesen beilleszkedne, ne habozzon jelentkezni rá.", + "noPositionsTitle": "Nincs nyitott pozíció", + "noPositionsBody": "Jelenleg nincs nyitott pozíció. Kérjük, jöjjön vissza egy későbbi időpontban, és ellenőrizze, hogy van-e szabad időpontunk addig. Köszönjük érdeklődését.", + "noDeadline": "Nincs kitűzött határidő", + "deadline": "Jelentkezési határidő: {date}", + "alreadyApplied": "Már jelentkezett a(z) {rank}", + "aboutYou": "Rólad", + "aboutPlaceholder": "Mondd el, miért lennél jó {rank}…", + "applyFor": "Jelentkezés {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": "Jelentkezzen a {hotel} csapatába", + "subtitle": "Csoportos jelentkezéseket rendszeres időközönként nyitunk meg. Ha találsz megfelelő csapatot, ne habozz jelentkezni!", + "noPositionsTitle": "Nincs nyitott csapat pozíció", + "noPositionsBody": "Jelenleg nincs nyitott csapat pozíció. Kérjük, jöjjön vissza később, hogy ellenőrizze az új nyitvatartásokat. Köszönöm!", + "pending": "Jelentkezése függőben van", + "aboutYou": "Rólad", + "aboutPlaceholder": "Mondd el, miért lennél kiválóan alkalmas {rank}…", + "applyFor": "Jelentkezés {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": "Rádió", + "subtitle": "Hangoljon a szállodai rádióra – élő DJ-szettek, kérések és kiáltások.", + "nowPlaying": "Most játszik", + "nothingPlaying": "Jelenleg nem játszik semmi.", + "onAir": "adásban: {dj}", + "noDj": "Nincs DJ az adásban.", + "audioUnsupported": "Az Ön böngészője nem támogatja az audio elemet.", + "streamOffline": "Az adatfolyam jelenleg offline.", + "exploreTitle": "Fedezze fel a rádiót", + "exploreSubtitle": "Ütemezés, kiáltások, kérések és egyebek", + "linkSchedule": "Ütemezés", + "linkScheduleText": "Heti kínálatunk DJ-kből és műsorokból.", + "linkShouts": "Kiáltások", + "linkShoutsText": "Kiáltások és kérések a közösségtől.", + "linkRequests": "Kérések", + "linkRequestsText": "Kérd meg a DJ-t, hogy pörgesse fel kedvenc számodat.", + "linkApply": "Jelentkezz DJ-nek", + "linkApplyText": "Csatlakozz a csapathoz, és lépj be az éterbe.", + "linkLeaderboard": "Ranglista", + "linkLeaderboardText": "A legjobb hallgatók a szerzett pontok alapján rangsorolva.", + "todayTitle": "A mai menetrend", + "todayTitleWithDay": "Mai menetrend · {day}", + "todaySubtitle": "Mi megy ma az éterben", + "fullWeek": "Teljes hét →", + "noShowsToday": "Mára nincsenek műsorok.", + "colTime": "Idő", + "colShow": "Megjelenítés", + "colDj": "DJ", + "untitledShow": "Cím nélküli műsor", + "userNumber": "Felhasználó #{id}" + }, + "radioSchedule": { + "title": "Rádió menetrend", + "subtitle": "Heti kínálatunk DJ-kből és műsorokból", + "empty": "Még nincsenek betervezve előadások.", + "colDay": "nap", + "colTime": "Idő", + "colDj": "DJ", + "colShow": "Megjelenítés", + "noShows": "Nincsenek műsorok" + }, + "radioShouts": { + "title": "Rádió kiáltások", + "subtitle": "Kiáltások és kérések a közösségtől", + "postTitle": "Tegyen közzé egy kiáltást", + "postSubtitle": "Küldj üzenetet a DJ-nek az adásban", + "messageLabel": "Az Ön üzenete", + "messagePlaceholder": "Küldj egy kiáltást a DJ-nek…", + "shoutButton": "Kiálts", + "loginToPost": "Jelentkezzen be, hogy kiabálást küldjön.", + "latestTitle": "Legújabb kiáltások", + "latestSubtitle": "A hallgatók legújabb üzenetei", + "empty": "Még nincs kiáltás. Legyen Ön az első!", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Rádióversenyek", + "subtitle": "Hangolódjon be és vegyen részt legújabb on-air versenyeinken", + "empty": "Még nincsenek versenyek.", + "contestLabel": "Verseny #{id}", + "dateUnknown": "Ismeretlen dátum" + }, + "radioGiveaways": { + "title": "Rádiós ajándékok", + "subtitle": "Hallgassa meg a lehetőséget, hogy nyerjen rádiós nyereményjátékunkban", + "empty": "Még nincs ajándék.", + "giveawayLabel": "Nyereményjáték #{id}", + "dateUnknown": "Ismeretlen dátum" + }, + "radioLeaderboard": { + "title": "Rádióhallgató ranglista", + "subtitle": "Az 50 legjobb rádióhallgató pontok alapján szerzett rádióhallgatást", + "empty": "Még nincsenek megjeleníthető hallgatói pontok.", + "colRank": "Rang", + "colAvatar": "Avatar", + "colListener": "Hallgató", + "colPoints": "Pontok" + }, + "radioRequests": { + "formTitle": "Kérelmet benyújtani", + "formSubtitle": "Kérd meg a DJ-t, hogy játssza le kedvenc számodat", + "songLabel": "Song", + "songPlaceholder": "A dal címe", + "artistLabel": "Művész", + "artistPlaceholder": "Az előadó neve (nem kötelező)", + "submitButton": "Kérelem benyújtása", + "loginToRequest": "Kérelem benyújtásához jelentkezzen be.", + "latestTitle": "Legutóbbi kérések", + "latestSubtitle": "A legutóbb kért dalok", + "empty": "Még nincsenek kérések.", + "colSong": "Song", + "colArtist": "Művész", + "colRequester": "Kérelmező", + "colDate": "Dátum", + "colStatus": "Állapot", + "statusPending": "Függőben", + "statusApproved": "Jóváhagyva", + "statusPlayed": "Játszott", + "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": "Jelentkezz rádiós DJ-nek", + "subtitle": "Mesélj magadról, és arról, hogy miért lennél kiválóan alkalmas az éterben", + "latestTitle": "A legújabb jelentkezésed", + "statusLabel": "Állapot:", + "submittedOn": "· benyújtva: {date}", + "submitAgain": "Az alábbiakban újra beküldheti, ha adatai megváltoztak.", + "formTitle": "Pályázati űrlap", + "formSubtitle": "Minden kötelezően megjelölt mezőt ki kell tölteni", + "realNameLabel": "Valódi név", + "realNamePlaceholder": "A teljes neved", + "ageLabel": "Életkor", + "availabilityLabel": "Elérhetőség", + "availabilityPlaceholder": "Melyik napokon és időpontokban lehet közvetíteni?", + "musicStyleLabel": "Zenei stílus", + "musicStylePlaceholder": "pl. House, pop, hip-hop", + "experienceLabel": "Tapasztalat", + "optional": "(nem kötelező)", + "experiencePlaceholder": "Van előzetes DJ-s vagy házigazdai tapasztalatod?", + "motivationLabel": "Motiváció", + "motivationPlaceholder": "Miért akarsz csatlakozni a rádió csapatához?", + "submitButton": "Pályázat benyújtása", + "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": "Fiókbeállítások", + "accountSettingsSubtitle": "Kezelje profilját, biztonságát és kapcsolódó fiókjait", + "publicProfile": "Nyilvános profilod", + "noMotto": "Nincs mottó", + "noEmail": "Nincs e-mail a fájlban", + "changeMotto": "Mottóváltás", + "changeMottoSubtitle": "Azonnali frissítések a játékban, ha online vagy", + "mottoPlaceholder": "A mottód", + "saveMotto": "Mentés mottója", + "securityTitle": "Biztonság", + "securitySubtitle": "Kéttényezős hitelesítés", + "securityDescription": "Adjon hozzá egy második védelmi réteget fiókjához.", + "twoFactorLink": "Kéttényezős hitelesítés" + }, + "settings2fa": { + "backToSettings": "← Beállítások", + "title": "Kéttényezős hitelesítés", + "subtitle": "Adjon hozzá egy második biztonsági réteget egy hitelesítő alkalmazással", + "nowEnabled": "A 2FA most engedélyezve van. 🔒", + "disabledNotice": "A 2FA le van tiltva.", + "badCode": "A kód nem volt érvényes – próbálja újra.", + "noAppKeyPrefix": "A 2FA eddig nem érhető el", + "noAppKeyMiddle": "be van állítva (ugyanaz a Laravel", + "noAppKeySuffix": "ahogy az AtomCMS telepítve van, így a meglévő titkok olvashatóak maradnak).", + "isEnabled": "A 2FA engedélyezve van", + "onYourAccount": "fiókjában.", + "disable": "A 2FA letiltása", + "scanOrEnter": "Olvassa be vagy írja be ezt a kulcsot", + "scanInstructions": "Adja hozzá ezt a Google Authenticator/Authy szolgáltatáshoz, majd adja meg a 6 számjegyű kódot a megerősítéshez.", + "manualKey": "Kézi kulcs:", + "codePlaceholder": "6 számjegyű kód", + "confirm": "Erősítse meg", + "enableIntro": "Adjon hozzá egy második biztonsági réteget egy hitelesítő alkalmazással.", + "enable": "2FA engedélyezése", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Kapcsolt fiókok", + "subtitle": "Kapcsoljon össze egy közösségi fiókot, hogy egyetlen kattintással bejelentkezhessen", + "connected": "Csatlakozva", + "unavailable": "Nem elérhető", + "login": { + "title": "Jelentkezzen be", + "subtitle": "Üdvözöljük újra – jelentkezzen be a szállodába való belépéshez.", + "subtitle2fa": "Írja be a hitelesítőtől kapott 6 számjegyű kódot.", + "usernamePlaceholder": "Felhasználónév", + "passwordPlaceholder": "Jelszó", + "codePlaceholder": "2FA kód", + "pleaseWait": "Kérjük, várjon…", + "verify": "Ellenőrizze", + "signIn": "Jelentkezzen be", + "or": "vagy", + "noAccount": "Nincs fiók?", + "createOne": "Hozzon létre egyet", + "forgotPassword": "Elfelejtetted a jelszavad?", + "errorInvalidCredentials": "Érvénytelen felhasználónév vagy jelszó", + "errorInvalid2fa": "Érvénytelen 2FA kód", + "welcomeBack": "Üdvözöllek újra", + "welcomeBackSub": "Jelentkezz be a {hotelName} folytatáshoz", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Hozzon létre fiókot", + "subtitle": "Csatlakozzon a szállodához – csak egy pillanatig tart.", + "username": "Felhasználónév", + "email": "E-mail", + "password": "Jelszó", + "confirmPassword": "Ismételje meg a jelszót", + "usernamePlaceholder": "Felhasználónév", + "emailPlaceholder": "E-mail", + "passwordPlaceholder": "Jelszó (minimum 6 karakter)", + "confirmPasswordPlaceholder": "Ismételje meg a jelszót", + "selectOutfit": "Válassza ki az öltözékét", + "termsAccept": "18 évesnél idősebb vagyok, és elfogadom a {hotel} feltételeit és szabályait.", + "createAccount": "Hozzon létre fiókot", + "creatingAccount": "Fiók létrehozása...", + "redirecting": "Átirányítás a fiókjához...", + "alreadyHaveAccount": "Már van fiókja? Bejelentkezés!", + "register": "Regisztráció", + "termsError": "A regisztrációhoz el kell fogadnia a feltételeket és szabályokat.", + "usernameError": "Felhasználónév megadása kötelező.", + "emailError": "Érvényes e-mail-cím szükséges.", + "passwordError": "A jelszónak legalább 6 karakterből kell állnia.", + "confirmPasswordError": "A jelszavak nem egyeznek.", + "termsRequired": "El kell fogadnia a feltételeket és szabályokat.", + "usernameRequired": "Felhasználónév megadása kötelező.", + "emailRequired": "E-mail megadása kötelező.", + "passwordRequired": "Jelszó szükséges.", + "passwordsDontMatch": "A jelszavak nem egyeznek.", + "alreadyHaveAccountPre": "Már van fiókod?", + "alreadyHaveAccountLink": "Bejelentkezés", + "whoIsOnline": "Ki van online", + "usersOnline": "{count} online", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Jelszó visszaállítása", + "subtitle": "E-mailben elküldünk egy biztonságos linket az új jelszó beállításához.", + "sentNotice": "Ha ez az e-mail regisztrálva van, akkor visszaállítási hivatkozást küldtek. Ellenőrizze a beérkező leveleket.", + "emailPlaceholder": "Az Ön email címe", + "sendResetLink": "Reset link küldése", + "backToLogin": "Vissza a bejelentkezéshez", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Állítson be új jelszót", + "subtitle": "Válasszon erős jelszót, amelyet máshol nem használ.", + "passwordPlaceholder": "Új jelszó (minimum 6 karakter)", + "resetPassword": "Jelszó visszaállítása", + "backToLogin": "Vissza a bejelentkezéshez" + }, + "verify": { + "verifiedTitle": "Minden készen áll", + "verifiedSubtitle": "E-mail igazolva", + "verifiedBody": "E-mail címét ellenőriztük. Most már bejelentkezhet és játszhat.", + "goToLogin": "Menjen a bejelentkezéshez", + "alreadyTitle": "Már ellenőrizve", + "alreadySubtitle": "Nincs mit tenni", + "alreadyBody": "Ezt az e-mail címet már megerősítették.", + "unavailableTitle": "Próbálja újra rövidesen", + "unavailableSubtitle": "A szerver nem elérhető", + "unavailableBody": "Nem tudtuk elérni a szervert, hogy ellenőrizzük e-mail-címét. Kérjük, próbálja újra a linket egy pillanat múlva.", + "invalidTitle": "E-mail ellenőrzés", + "invalidSubtitle": "Érvénytelen vagy lejárt link", + "invalidBody": "Ez az ellenőrző link nem érvényes. Győződjön meg arról, hogy a teljes linket az e-mailből nyitotta meg, vagy kérjen újat.", + "backToLogin": "Vissza a bejelentkezéshez" + }, + "banned": { + "title": "Ki vagy tiltva", + "subtitle": "Fiók felfüggesztve", + "body": "Fiókját felfüggesztettük a szállodában.", + "reasonLabel": "Ok:", + "permanent": "Ez a tilalom végleges.", + "expires": "Lejár: {date}.", + "contactStaff": "Ha úgy gondolja, hogy ez tévedés, forduljon a személyzeti csapathoz." + }, + "maintenance": { + "title": "A(z) {hotel} karbantartás alatt áll", + "subtitle": "Hamarosan visszajövünk", + "staffCanLogIn": "A munkatársak továbbra is bejelentkezhetnek." + }, + "admin": { + "nav": { + "overview": "Áttekintés", + "dashboard": "Irányítópult", + "content": "Tartalom", + "articles": "Cikkek", + "tags": "Címkék", + "navigator": "Navigátor", + "helpCenter": "Súgó", + "advertisements": "Reklámok", + "writeableBoxes": "Írható dobozok", + "photos": "Fényképek", + "tickets": "Jegyek", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Felhasználók és hozzáférés", + "users": "Felhasználók", + "bans": "Tiltások", + "ipManagement": "IP-kezelés", + "vpn": "VPN", + "applications": "Alkalmazások", + "teams": "Csapatok", + "permissions": "Engedélyek", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "Gazdaság", + "catalog": "Katalógus", + "shop": "Bolt", + "transactions": "Tranzakciók", + "vouchers": "Utalványok", + "subscriptions": "Előfizetések", + "rareValues": "Ritka értékek", + "badges": "Jelvények", + "achievements": "Eredmények", + "calendar": "Naptár", + "radio": "Rádió", + "radioHistory": "Rádiótörténet", + "radioBanners": "Bannerek", + "radioEmbed": "Beágyaz", + "radioApiKeys": "API kulcsok", + "radioModeration": "Moderálás", + "radioSettings": "Beállítások elemre", + "radioMonitoring": "Monitoring", + "radioPoints": "Pontok", + "radioRanks": "Rangok", + "radioAutodj": "Auto DJ", + "system": "Rendszer", + "commandocentrum": "Commandocentrum", + "emulator": "Emulátor", + "alerts": "Figyelmeztetések", + "logs": "Naplók", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Szószűrő", + "maintenance": "Karbantartás", + "rooms": "Szobák", + "emailTemplates": "E-mail sablonok", + "theme": "téma", + "media": "Média", + "favicon": "Favicon", + "sounds": "Hangok", + "translations": "Fordítások", + "import": "Importálás", + "settings": "Beállítások elemre", + "backToSite": "Vissza a webhelyre", + "housekeeping": "Takarítás", + "hotelManagementPanel": "Hotel menedzsment panel", + "rankLabel": "rang {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Search menu…", + "clearMenuSearch": "Clear menu search", + "noMenuResults": "No matching pages.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "studio": "Studio", + "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" + }, + "dashboard": { + "title": "Irányítópult", + "subtitle": "Szálloda áttekintése és élő állapota", + "playersOnline": "Játékosok online", + "articles": "Cikkek", + "activeBans": "Aktív tiltások", + "database": "Adatbázis", + "databaseConnected": "Csatlakozva", + "databaseDown": "Le", + "usersByRank": "Felhasználók rang szerint", + "noAccountsToBreakDown": "Még nincsenek bontható fiókok", + "rankLabel": "rang {rank}", + "rankWithCount": "Rang {rank}: {count} fiók", + "recentStaffActivity": "A személyzet legutóbbi tevékenysége", + "viewAll": "Az összes megtekintése", + "noStaffActivityLogged": "Még nincs naplózott személyzeti tevékenység", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "Cikkek", + "subtitle": "Hírcikkek – 50 legfrissebb", + "newArticle": "+ Új cikk", + "edit": "Szerkesztés", + "delete": "Törölje", + "noArticles": "Még nincsenek cikkek", + "confirmDelete": "Biztosan törli a következőt: \"{title}\"?", + "colTitle": "Cím", + "colSlug": "Slug", + "colAuthor": "Szerző", + "colCreated": "Létrehozva", + "colActions": "Akciók", + "form": { + "title": "Cím", + "titlePlaceholder": "Cikk címe", + "slug": "Slug", + "slugPlaceholder": "cikk-url-slug", + "category": "Kategória", + "categoryPlaceholder": "Válasszon egy kategóriát", + "body": "Test", + "bodyPlaceholder": "Írja meg cikkének tartalmát…", + "image": "Kép", + "imagePlaceholder": "https://example.com/image.png", + "thumbnail": "Miniatűr", + "thumbnailPlaceholder": "https://example.com/thumb.png", + "published": "Megjelent", + "featured": "Kiemelt", + "save": "Cikk mentése", + "saving": "Mentés…", + "deleteArticle": "Cikk törlése", + "deleteConfirm": "Ez a művelet nem vonható vissza. A cikket véglegesen eltávolítjuk.", + "cancel": "Mégse", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "Címkék", + "subtitle": "Cikkcímkék / kategóriák", + "addTag": "Címke hozzáadása", + "name": "Név", + "namePlaceholder": "Címke neve", + "backgroundColour": "Háttérszín", + "createTag": "Címke létrehozása", + "editTag": "Címke szerkesztése", + "updateTag": "Címke frissítése", + "deleteTag": "Címke törlése", + "confirmDelete": "Törli a következőt: \"{name}\"?", + "noTags": "Még nincsenek címkék", + "colId": "ID", + "colTag": "Címke", + "colColour": "Szín", + "colUsedBy": "által használt", + "colCreated": "Létrehozva", + "colActions": "Akciók", + "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": "Navigátor", + "flatCategories": "Lapos kategóriák", + "publicRooms": "Nyilvános helyiségek", + "addCategory": "Kategória hozzáadása", + "editCategory": "Kategória szerkesztése", + "deleteCategory": "Kategória törlése", + "categoryName": "Kategória neve", + "categoryNamePlaceholder": "pl. Chill & Chat", + "categoryOrder": "Rendeljen", + "roomName": "Szoba neve", + "roomNamePlaceholder": "pl. Welcome Lounge", + "roomId": "Szobaazonosító", + "roomIdPlaceholder": "Numerikus szobaazonosító", + "save": "Mentés", + "cancel": "Mégse", + "noCategories": "Még nincsenek kategóriák", + "noPublicRooms": "Még nincsenek nyilvános helyiségek", + "colId": "ID", + "colName": "Név", + "colOrder": "Rendeljen", + "colRooms": "Szobák", + "colActions": "Akciók", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Súgó", + "subtitle": "Támogatási bejegyzések és GYIK kezelése", + "entries": "Bejegyzések", + "newEntry": "+ Új bejegyzés", + "edit": "Szerkesztés", + "delete": "Törölje", + "noEntries": "Még nincsenek bejegyzések", + "confirmDelete": "Törli a következőt: „{title}”?", + "colId": "ID", + "colTitle": "Cím", + "colCategory": "Kategória", + "colCreated": "Létrehozva", + "colActions": "Akciók", + "form": { + "title": "Cím", + "titlePlaceholder": "Bejegyzés címe", + "category": "Kategória", + "categoryPlaceholder": "Válasszon kategóriát", + "body": "Test", + "bodyPlaceholder": "Írd meg a választ…", + "save": "Bejegyzés mentése", + "saving": "Mentés…", + "deleteEntry": "Bejegyzés törlése", + "cancel": "Mégse" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Reklámok", + "subtitle": "Szállodahirdetések és promóciós bannerek kezelése", + "newAd": "+ Új hirdetés", + "edit": "Szerkesztés", + "delete": "Törölje", + "noAds": "Még nincsenek hirdetések", + "confirmDelete": "Törli ezt a hirdetést?", + "colId": "ID", + "colName": "Név", + "colImage": "Kép", + "colUrl": "URL", + "colViews": "Nézetek", + "colStatus": "Állapot", + "colCreated": "Létrehozva", + "colActions": "Akciók", + "form": { + "name": "Név", + "namePlaceholder": "Hirdetés neve", + "image": "Kép URL-je", + "imagePlaceholder": "https://example.com/banner.png", + "url": "Cél URL", + "urlPlaceholder": "https://example.com", + "enabled": "Engedélyezve", + "save": "Hirdetés mentése", + "saving": "Mentés…", + "deleteAd": "Hirdetés törlése", + "cancel": "Mégse" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Írható dobozok", + "subtitle": "Tartalmi panelek láthatók a szállodában és a CMS-ben", + "newBox": "Új doboz", + "edit": "Szerkesztés", + "delete": "Törölje", + "noBoxes": "Még nincs írható doboz", + "confirmDelete": "Törli ezt a mezőt?", + "colId": "ID", + "colName": "Név", + "colLocation": "Helyszín", + "colUpdated": "Frissítve", + "colActions": "Akciók", + "form": { + "name": "Név", + "namePlaceholder": "Doboz neve", + "location": "Helyszín", + "locationPlaceholder": "pl. kezdőlap, oldalsáv", + "content": "Tartalom", + "contentPlaceholder": "Írd be a doboz tartalmát…", + "enabled": "Engedélyezve", + "save": "Mentés doboz", + "saving": "Mentés…", + "deleteBox": "Doboz törlése", + "cancel": "Mégse", + "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": "Fotó moderálása", + "subtitle": "Legutóbbi játékbeli kamerás fotók", + "delete": "Törölje", + "approve": "Jóváhagyni", + "noPhotos": "Nincsenek moderálandó fényképek", + "confirmDelete": "Véglegesen törlöd ezt a fotót?", + "colId": "ID", + "colPreview": "Előnézet", + "colUser": "Felhasználó", + "colRoom": "Szoba", + "colTimestamp": "Időbélyeg", + "colActions": "Akciók", + "photoAlt": "Felhasználói fotó #{id}", + "byUser": "szerző: {username}", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Felhasználók", + "subtitle": "Böngésszen, keressen és kezeljen szállodafiókokat", + "search": "Keresés", + "searchPlaceholder": "Keresés felhasználónév, e-mail vagy azonosító alapján…", + "searchResults": "{count, plural, one {# result} other {# results}} for \"{query}\"", + "noResults": "Nem található felhasználó", + "colId": "ID", + "colUsername": "Felhasználónév", + "colEmail": "E-mail", + "colRank": "Rang", + "colOnline": "Online", + "colRegistered": "Regisztrált", + "colLastOnline": "Utoljára online", + "colActions": "Akciók", + "yes": "Igen", + "no": "Nem", + "edit": "Szerkesztés", + "setRank": "Állítsa be a rangot", + "disconnect": "Leválasztás", + "alert": "Figyelmeztetés", + "ban": "Ban", + "detail": { + "title": "Felhasználó: {username}", + "subtitle": "Számlaadatok és kezelés", + "overview": "Áttekintés", + "actions": "Akciók", + "username": "Felhasználónév", + "email": "E-mail", + "motto": "Mottó", + "rank": "Rang", + "credits": "Kredit", + "duckets": "Duckets", + "diamonds": "Gyémántok", + "online": "Online", + "registered": "Regisztrált", + "lastOnline": "Utoljára online", + "ipAddress": "IP-cím", + "machineId": "Gépazonosító", + "sendAlert": "Figyelmeztetés küldése", + "sendMessage": "Üzenet küldése", + "disconnectUser": "Felhasználó leválasztása", + "banUser": "Felhasználó kitiltása", + "resetPassword": "Jelszó visszaállítása", + "deleteUser": "Felhasználó törlése", + "confirmDelete": "Biztosan törli a következőt: {username}? Ezt nem lehet visszavonni.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Felhasználó szerkesztése: {username}", + "subtitle": "Módosítsa a fiók adatait", + "username": "Felhasználónév", + "usernamePlaceholder": "Felhasználónév", + "email": "E-mail", + "emailPlaceholder": "felhasznalo@example.com", + "motto": "Mottó", + "mottoPlaceholder": "Felhasználói mottó", + "rank": "Rang", + "credits": "Kredit", + "duckets": "Duckets", + "diamonds": "Gyémántok", + "save": "Módosítások mentése", + "saving": "Mentés…", + "cancel": "Mégse" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Tiltások", + "subtitle": "Fiók-, IP- és géptiltások kezelése", + "newBan": "Új kitiltás", + "edit": "Szerkesztés", + "delete": "Törölje", + "noBans": "Még nincs tiltás", + "confirmDelete": "Eltávolítja ezt a kitiltást?", + "colId": "ID", + "colValue": "Érték", + "colType": "Írja be", + "colReason": "Ok", + "colBannedBy": "Kitiltotta", + "colExpires": "Lejár", + "colCreated": "Létrehozva", + "colActions": "Akciók", + "form": { + "value": "Érték", + "valuePlaceholder": "Felhasználónév, IP vagy gépazonosító", + "type": "Írja be", + "typeUser": "Felhasználó", + "typeIp": "IP", + "typeMachine": "Gép", + "reason": "Ok", + "reasonPlaceholder": "Tiltás ok", + "expiresAt": "Lejár:", + "permanent": "Állandó", + "save": "Tiltás mentése", + "saving": "Mentés…", + "cancel": "Mégse" + }, + "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-kezelés", + "subtitle": "Kezelje az IP fehérlistát és a feketelistát", + "whitelist": "Fehérlista", + "blacklist": "Feketelista", + "addIp": "IP hozzáadása", + "ipAddress": "IP-cím", + "ipAddressPlaceholder": "pl. 127.0.0.1", + "reason": "Ok", + "reasonPlaceholder": "A listázás oka", + "add": "Hozzáadás", + "remove": "Távolítsa el", + "confirmRemove": "Eltávolítja ezt az IP-t a {list}-ról?", + "noWhitelistedIps": "Nincsenek engedélyezőlistán szereplő IP-címek", + "noBlacklistedIps": "Nincsenek tiltólistán szereplő IP-címek", + "colIp": "IP", + "colReason": "Ok", + "colAdded": "Hozzáadva", + "colActions": "Akciók", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "VPN / Proxy észlelés", + "subtitle": "Konfigurálja a VPN és a proxy észlelési beállításait", + "enabled": "Engedélyezve", + "apiKey": "API kulcs", + "apiKeyPlaceholder": "Az Ön VPN-észlelési API-kulcsa", + "apiKeyHint": "A letiltáshoz hagyja üresen", + "blockOnDetect": "Blokkolás észleléskor", + "blockOnDetectHint": "A VPN vagy proxy mögött észlelt felhasználók automatikus blokkolása", + "save": "Mentse el a beállításokat", + "saving": "Mentés…", + "settingsSaved": "A VPN beállítások sikeresen mentve", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Személyzeti jelentkezések", + "subtitle": "Függőben lévő és felülvizsgált személyzeti jelentkezések", + "pending": "Függőben", + "approved": "Jóváhagyva", + "rejected": "Elutasítva", + "noApplications": "Még nincs jelentkezés", + "colId": "ID", + "colApplicant": "Kérelmező", + "colPosition": "Pozíció", + "colStatus": "Állapot", + "colSubmitted": "Beküldve", + "colActions": "Akciók", + "review": "Tekintse át", + "approve": "Jóváhagyni", + "reject": "Elutasítás", + "confirmApprove": "Jóváhagyja {username} felhasználót a {position} pozícióra?", + "confirmReject": "Elutasítja {username} jelentkezését a(z) {position} pozícióra?", + "detail": { + "title": "Jelentkezés: {username}", + "subtitle": "{position}", + "about": "A jelentkezőről", + "message": "Alkalmazási üzenet", + "status": "Állapot", + "submitted": "Beküldve", + "noMessage": "Nincs üzenet" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Csapatok", + "subtitle": "Határozza meg az alkalmazottak rangnevét és leírását", + "addRank": "Rang hozzáadása", + "editRank": "Rang szerkesztése", + "deleteRank": "Törölje a rangot", + "noTeams": "Még nincsenek rangmeghatározások", + "confirmDelete": "Törli a rang {id} definícióját?", + "colId": "ID", + "colRank": "Rang", + "colName": "Név", + "colBadge": "Jelvény", + "colColour": "Szín", + "colActions": "Akciók", + "form": { + "rankId": "Rang azonosító", + "rankIdPlaceholder": "Numerikus rangazonosító", + "name": "Név", + "namePlaceholder": "pl. Rendszergazda", + "badge": "Jelvény kódja", + "badgePlaceholder": "pl. ADM001", + "colour": "Szín", + "colourPlaceholder": "pl. #ff0000", + "save": "Csapatdefiníció mentése", + "saving": "Mentés…", + "cancel": "Mégse" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Engedélyek", + "subtitle": "Az adminisztrációs panel rang alapú engedélyeinek kezelése", + "addPermission": "Engedély hozzáadása", + "editPermission": "Szerkesztési engedély", + "deletePermission": "Engedély törlése", + "noPermissions": "Még nincsenek konfigurálva engedélyek", + "confirmDelete": "Törli ezt az engedélyt?", + "colId": "ID", + "colRank": "Rang", + "colPermission": "Engedély", + "colCreated": "Létrehozva", + "colActions": "Akciók", + "form": { + "rankId": "Rang azonosító", + "rankIdPlaceholder": "Minimális rang szükséges", + "permission": "Engedélykulcs", + "permissionPlaceholder": "pl. admin.cikkek.kezelés", + "save": "Mentse el az engedélyt", + "saving": "Mentés…", + "cancel": "Mégse" + } + }, + "catalog": { + "title": "Katalógus", + "subtitle": "Böngésszen és kezeljen katalógusoldalakat és tételeket", + "pages": "Oldalak", + "items": "Tételek", + "addPage": "Oldal hozzáadása", + "editPage": "Oldal szerkesztése", + "deletePage": "Oldal törlése", + "addItem": "Elem hozzáadása", + "editItem": "Elem szerkesztése", + "deleteItem": "Elem törlése", + "noPages": "Még nincsenek katalógusoldalak", + "noItems": "Nincsenek tételek ezen az oldalon", + "confirmDeletePage": "Törli a(z) „{name}” katalógusoldalt?", + "confirmDeleteItem": "Törli ezt az elemet?", + "colId": "ID", + "colName": "Név", + "colIcon": "Ikonra", + "colOrder": "Rendeljen", + "colItems": "Tételek", + "colEnabled": "Engedélyezve", + "colActions": "Akciók", + "colItemId": "Tételazonosító", + "colItemName": "Elem neve", + "colCostCredits": "Költség (jóváírások)", + "colCostPoints": "Költség (pont)", + "colLimited": "Korlátozott", + "pageForm": { + "name": "Név", + "namePlaceholder": "Az oldal neve", + "icon": "Ikonazonosító", + "iconPlaceholder": "Numerikus ikonazonosító", + "order": "Rendeljen", + "enabled": "Engedélyezve", + "parent": "Szülőoldal", + "parentNone": "Nincs (gyökér)", + "save": "Oldal mentése", + "saving": "Mentés…", + "cancel": "Mégse" + }, + "itemForm": { + "itemId": "Tételazonosító", + "itemName": "Elem neve", + "costCredits": "Költség kreditben", + "costDuckets": "Költség résben", + "costDiamonds": "Költség gyémántban", + "limitedStack": "Korlátozott kötegméret", + "limitedSold": "Korlátozottan eladó", + "save": "Mentse el az elemet", + "saving": "Mentés…", + "cancel": "Mégse" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Bolt", + "subtitle": "Csomagok és rendelések kezelése", + "packages": "Csomagok", + "orders": "Megrendelések", + "newPackage": "+ Új csomag", + "edit": "Szerkesztés", + "delete": "Törölje", + "viewOrder": "Megtekintés", + "noPackages": "Még nincsenek bolti csomagok", + "noOrders": "Még nincs rendelés", + "confirmDelete": "Törli ezt a csomagot?", + "colId": "ID", + "colName": "Név", + "colPrice": "Ár", + "colCurrency": "Pénznem", + "colType": "Írja be", + "colSold": "Eladva", + "colEnabled": "Engedélyezve", + "colActions": "Akciók", + "colOrderId": "Rendelési azonosító", + "colCustomer": "Ügyfél", + "colPackage": "csomag", + "colAmount": "Összeg", + "colStatus": "Állapot", + "colDate": "Dátum", + "statusPending": "Függőben", + "statusCompleted": "Befejezve", + "statusRefunded": "Visszatérítve", + "form": { + "name": "Név", + "namePlaceholder": "Csomag neve", + "description": "Leírás", + "descriptionPlaceholder": "Csomag leírása", + "price": "Ár", + "currency": "Pénznem", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Írja be", + "typeCredits": "Kredit", + "typeDuckets": "Duckets", + "typeDiamonds": "Gyémántok", + "typeBadge": "Jelvény", + "typeFurni": "Bútorok", + "typeRank": "Rang", + "amount": "Összeg", + "badgeCode": "Jelvény kódja", + "badgeCodePlaceholder": "pl. VIP001", + "rankId": "Rang azonosító", + "furniItems": "Bútorelemek", + "enabled": "Engedélyezve", + "save": "Csomag mentése", + "saving": "Mentés…", + "cancel": "Mégse", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "Tranzakciók", + "subtitle": "PayPal fizetési napló", + "noTransactions": "Még nincsenek tranzakciók", + "colId": "ID", + "colUser": "Felhasználó", + "colAmount": "Összeg", + "colCurrency": "Pénznem", + "colPackage": "csomag", + "colStatus": "Állapot", + "colDate": "Dátum", + "colActions": "Akciók", + "statusCompleted": "Befejezve", + "statusPending": "Függőben", + "statusFailed": "Sikertelen", + "statusRefunded": "Visszatérítve", + "detail": { + "title": "Tranzakció #{id}", + "paypalId": "PayPal azonosító", + "payerEmail": "Fizető e-mail", + "grossAmount": "Bruttó összeg", + "fee": "Díj", + "netAmount": "Nettó összeg" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Vásárlási utalványok", + "subtitle": "A beváltható utalványkódok kezelése", + "newVoucher": "+ Új utalvány", + "edit": "Szerkesztés", + "delete": "Törölje", + "noVouchers": "Még nincsenek utalványok", + "confirmDelete": "Törli a(z) „{code}” utalványt?", + "colId": "ID", + "colCode": "kód", + "colValue": "Érték", + "colType": "Írja be", + "colUses": "Felhasználás / Max", + "colExpires": "Lejár", + "colCreated": "Létrehozva", + "colActions": "Akciók", + "form": { + "code": "kód", + "codePlaceholder": "pl. NYÁR 2025", + "value": "Érték", + "type": "Írja be", + "typeCredits": "Kredit", + "typeDuckets": "Duckets", + "typeDiamonds": "Gyémántok", + "typeBadge": "Jelvény", + "typeFurni": "Bútorok", + "typeRank": "Rang", + "badgeCode": "Jelvény kódja", + "badgeCodePlaceholder": "pl. VIP001", + "rankId": "Rang azonosító", + "maxUses": "Max használat", + "maxUsesPlaceholder": "0 = korlátlan", + "expiresAt": "Lejár:", + "enabled": "Engedélyezve", + "save": "Mentse el az utalványt", + "saving": "Mentés…", + "cancel": "Mégse", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Előfizetések", + "subtitle": "Aktív ismétlődő előfizetések", + "noSubscriptions": "Nincs aktív előfizetés", + "cancel": "Mégse", + "confirmCancel": "Lemondja a(z) {username} előfizetését?", + "colId": "ID", + "colUser": "Felhasználó", + "colPackage": "csomag", + "colAmount": "Összeg", + "colInterval": "Intervallum", + "colStarted": "Elindult", + "colNextBilling": "Következő számlázás", + "colStatus": "Állapot", + "colActions": "Akciók", + "statusActive": "Aktív", + "statusCancelled": "Törölve", + "statusExpired": "Lejárt", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Ritka értékek", + "subtitle": "Ritka értékkategóriák és cikkárak kezelése", + "categories": "Kategóriák", + "items": "Tételek", + "addCategory": "Kategória hozzáadása", + "editCategory": "Kategória szerkesztése", + "deleteCategory": "Kategória törlése", + "noCategories": "Még nincsenek ritka értékkategóriák", + "confirmDeleteCategory": "Törli a(z) \"{name}\" kategóriát és annak összes elemét?", + "colId": "ID", + "colName": "Név", + "colItems": "Tételek", + "colUpdated": "Frissítve", + "colActions": "Akciók", + "colItemName": "Elem neve", + "colCredits": "Kredit", + "colPoints": "Pontok", + "colPointType": "Pont típusa", + "categoryForm": { + "name": "Név", + "namePlaceholder": "Kategória neve", + "save": "Kategória mentése", + "saving": "Mentés…", + "cancel": "Mégse" + }, + "itemForm": { + "itemName": "Elem neve", + "itemNamePlaceholder": "pl. Trón", + "credits": "Kredit értéke", + "points": "Pontérték", + "pointType": "Pont típusa", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Gyémántok", + "save": "Mentse el az elemet", + "saving": "Mentés…", + "cancel": "Mégse", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Jelvények", + "subtitle": "Jelvénykatalógus feltöltése, megadása és kezelése", + "upload": "Feltöltés", + "giveBadge": "Adj jelvényt", + "catalogue": "Katalógus", + "uploadTitle": "Új jelvény feltöltése", + "uploadSubtitle": "Töltsön fel egy jelvény képfájlt", + "badgeCode": "Jelvény kódja", + "badgeCodePlaceholder": "pl. VIP001", + "badgeFile": "Jelvényfájl", + "badgeFileHint": "PNG vagy GIF, ajánlott 40x40", + "uploadButton": "Feltöltés", + "uploading": "Feltöltés…", + "giveTitle": "Adj jelvényt a felhasználónak", + "giveSubtitle": "Adjon jelvényt egy adott felhasználónak", + "username": "Felhasználónév", + "usernamePlaceholder": "Cél felhasználónév", + "giveButton": "Adj jelvényt", + "giving": "Adom…", + "catalogueTitle": "Jelvénykatalógus", + "catalogueSubtitle": "Minden elérhető jelvény a szállodában", + "noBadges": "Nincsenek jelvények a katalógusban", + "search": "Keresési jelvények", + "searchPlaceholder": "Keresés kód vagy név alapján…", + "colCode": "kód", + "colImage": "Kép", + "colName": "Név", + "colDescription": "Leírás", + "colActions": "Akciók", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Eredmények", + "subtitle": "A játékon belüli jutalmak csak olvasható listája", + "noAchievements": "Nincsenek konfigurált jutalmak", + "colId": "ID", + "colName": "Név", + "colCategory": "Kategória", + "colLevels": "Szintek", + "colReward": "Jutalom", + "colProgress": "Haladás", + "levelLabel": "{level}. szint", + "rewardCredits": "{count} kredit", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Naptári kampányok", + "subtitle": "Naptárkampányok és események írásvédett listája", + "noCampaigns": "Még nincsenek naptárkampányok", + "colId": "ID", + "colName": "Név", + "colStart": "Indítsa el", + "colEnd": "Vége", + "colType": "Írja be", + "colReward": "Jutalom", + "colActions": "Akciók", + "detail": { + "title": "Kampány: {name}", + "subtitle": "A naptári esemény részletei", + "days": "Napok", + "dayLabel": "{day}. nap", + "reward": "Jutalom", + "noDays": "Nincsenek beállítva napok ehhez a kampányhoz", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Rádió moderálása", + "subtitle": "Legfrissebb kiáltások, DJ-alkalmazások és közvetített menetrendek (25 legfrissebb mindegyikből).", + "moderation": "Moderálás", + "shouts": "Kiáltások", + "applications": "Alkalmazások", + "schedules": "Menetrendek", + "settings": "Beállítások elemre", + "embed": "Beágyaz", + "ranks": "Rangok", + "history": "Történelem", + "apiKeys": "API kulcsok", + "points": "Pontok", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Rádiófigyelés", + "subtitle": "A konfigurált rádióvégpontok (radio_now_playing_api_url, radio_listeners_api_url) csak olvasható élő vizsgálata. Minden kérés meghiúsul egy {timeout} másodperces időtúllépéssel – nem íródik adat. Konfigurálja az URL-eket a Beállítások alatt.", + "stream": "Stream", + "online": "Online", + "offline": "Offline", + "notConfigured": "Nincs konfigurálva", + "nowPlaying": "Most játszik", + "nowPlayingApi": "Most játszó API", + "listenersApi": "Listeners API", + "listeners": "Hallgatók", + "currentSong": "Aktuális dal", + "bitrate": "Bitráta", + "status": "Állapot", + "noNowPlayingHint": "nincs jelenleg lejátszott API-készlet", + "noListenersHint": "nincs hallgató API beállítva", + "endpointDiagnostics": "Végpont diagnosztika", + "diagnosticsLegend": "OK: elérhető · WARN: nincs beállítva · ERROR: sikertelen kérés vagy időtúllépés.", + "streamUrl": "Stream URL", + "unreachable": "elérhetetlen", + "refresh": "Frissítés" + }, + "user": "Felhasználó", + "message": "Üzenet", + "posted": "Elküldve", + "realName": "Valódi Név", + "age": "Életkor", + "style": "Stílus", + "applied": "Alkalmazva", + "day": "nap", + "start": "Indítsa el", + "end": "Vége", + "show": "Megjelenítés", + "status": "Állapot", + "active": "aktív", + "inactive": "inaktív", + "hidden": "rejtett", + "activeSchedules": "Aktív menetrendek", + "noShouts": "Nincs kiáltás a moderálásra", + "noApplications": "Nem nyújtottak be pályázatot.", + "noSchedules": "Nincs beállítva ütemezés.", + "deleteShout": "Törölje", + "confirmDeleteShout": "Törli ezt a kiáltást?", + "pendingApplications": "Függőben lévő jelentkezések", + "settingsForm": { + "title": "Rádióbeállítások", + "subtitle": "A szerkesztések a website_settings (rádió_* kulcsok) mappába írnak, és kiiktatják a futásidejű beállítások gyorsítótárát. A logikai értékek 0/1-et használnak.", + "enabled": "Engedélyezve", + "disabled": "Letiltva", + "totalKeys": "Összes kulcs", + "configured": "Beállítva", + "curatedHint": "kurált kulcsok értékkel", + "customKeys": "Egyedi kulcsok", + "saveAll": "Az összes mentése", + "singleKey": "Egyetlen kulcs hozzáadása/felülírása", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "értéket", + "commentPlaceholder": "megjegyzés (nem kötelező)", + "saveSingle": "Mentés", + "otherSettings": "Egyéb rádióbeállítások", + "dbError": "Nem sikerült betölteni a beállításokat (az adatbázis nem érhető el). Az alapértelmezett értékek mentéskor jönnek létre." + }, + "embedPage": { + "title": "Radio Embed", + "subtitle": "Másolásra kész beágyazási kód az élő közvetítéshez. Csak olvasható – itt semmi sem ír az adatbázisba. Konfigurálja a stream URL-címét a Rádióbeállításokban (radio_stream_url).", + "streamUrl": "Stream URL", + "configured": "Beállítva", + "missing": "Hiányzik", + "radioName": "Rádió neve", + "nowPlayingApi": "Most játszó API", + "set": "Állítsa be", + "notSet": "Nincs beállítva", + "noStreamUrl": "Nincs konfigurálva az adatfolyam URL-je", + "noStreamUrlText": "Nincs beállítva radio_stream_url, így még nincs mit beágyazni.", + "goToSettings": "Menjen a Rádióbeállításokhoz", + "livePreview": "Élő előnézet", + "livePreviewText": "Ez a csupasz audio lejátszó, ahogy a látogatók látni fogják. Nyomja meg a lejátszás gombot, hogy megerősítse, hogy az adatfolyam elérhető.", + "source": "Forrás", + "audioSnippet": "Hanglejátszó részlet", + "audioSnippetDesc": "A beugró HTML5 audiolejátszó egyenesen a streamre mutatott. Mindenhol működik, ahol a sima HTML megengedett.", + "iframeSnippet": "Iframe burkoló kódrészlet", + "iframeSnippetDesc": "Beágyazza a webhely saját rádiólejátszó-oldalát egy iframe-be – megőrzi a stílust és a jelenleg lejátszott információkat. Ízlés szerint állítsa be a szélességet/magasságot.", + "audioUnsupported": "Az Ön böngészője nem támogatja az audio elemet." + }, + "banners": { + "title": "Bannerek", + "heading": "Rádió bannerek", + "description": "A rádió oldalán látható promóciós bannerek rendezési sorrendben.", + "addBanner": "Banner hozzáadása", + "createBanner": "Banner létrehozása", + "deleteBanner": "Banner törlése", + "noBanners": "Még nincsenek szalaghirdetések – adjon hozzá egyet fent.", + "existing": "Meglévő szalaghirdetések ({count})", + "save": "Mentés", + "delete": "Törölje", + "byUser": "felhasználó: {id}", + "active": "aktív", + "hidden": "rejtett", + "bannerAlt": "Rádió banner", + "statusActive": "Aktív", + "statusHidden": "Rejtett", + "dbError": "Nem sikerült betölteni a szalaghirdetéseket (az adatbázis nem érhető el).", + "form": { + "imagePath": "Kép elérési útja / URL-je", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Cím", + "description": "Leírás", + "sortOrder": "Rendezési sorrend", + "active": "Aktív" + } + }, + "ranksForm": { + "title": "Rádió rangok", + "subtitle": "A rádióalkalmazásokon kiosztható DJ/stáb rangok.", + "dbError": "Nem sikerült betölteni a rangsorokat (az adatbázis nem érhető el).", + "active": "Aktív", + "addRank": "Rang hozzáadása", + "name": "Név", + "badgeCode": "Jelvény kódja", + "description": "Leírás", + "createRank": "Hozzon létre rangot", + "existing": "Meglévő rangok ({count})", + "noRanks": "Még nincsenek rangok – adjon hozzá egyet fent.", + "activeLabel": "aktív", + "inactiveLabel": "inaktív", + "save": "Mentés", + "deleteRank": "#{id}. rang törlése" + }, + "historyPage": { + "title": "Rádiójáték története", + "subtitle": "Korábbi DJ-műsorok és műsoridő (radio_history), a legutóbbi az első. Csak olvasható napló arról, hogy ki, mikor és hány hallgató volt adásban.", + "dbError": "Nem sikerült betölteni a rádióelőzményeket (az adatbázis nem érhető el).", + "showsLogged": "Naplózott műsorok", + "onAirNow": "Most adásban", + "uniqueDjs": "Egyedi DJ-k", + "peakListeners": "Csúcs hallgatók", + "empty": "Még nem rögzítették a rádióelőzményeket.", + "showLog": "Napló megjelenítése ({count})", + "colDj": "DJ", + "colShow": "Megjelenítés", + "colStarted": "Elindult", + "colEnded": "Véget ért", + "colAirtime": "Műsoridő", + "colListeners": "Hallgatók", + "colNotes": "Megjegyzések", + "onAir": "adásban" + }, + "apiKeysForm": { + "title": "Rádió API kulcsok", + "subtitle": "API-kulcsok külső rádiós integrációkhoz (radio_api_keys). A kulcsok szerveroldalon jönnek létre, és maszkolva jelennek meg – másolja ki a teljes értéket az adatbázisból az első kiadáskor.", + "dbError": "Nem sikerült betölteni az API-kulcsokat (az adatbázis nem érhető el).", + "totalKeys": "Összes kulcs", + "active": "Aktív", + "inactive": "Inaktív", + "generateKey": "Kulcs generálása", + "generateHint": "A titkos kulcs automatikusan generálódik kriptográfiai véletlenszerűséggel – nem kell megadni.", + "name": "Név", + "namePlaceholder": "AzureCast híd", + "rateLimit": "Díjkorlát (kérések/perc)", + "allowedIps": "Engedélyezett IP-k (opcionális)", + "allowedIpsPlaceholder": "vesszővel elválasztva, üres = tetszőleges", + "generate": "Kulcs generálása", + "existingKeys": "Meglévő kulcsok ({count})", + "noKeys": "Még nincs API-kulcs – hozzon létre egyet fent.", + "colName": "Név", + "colKey": "Kulcs", + "colAllowedIps": "Engedélyezett IP-k", + "colRateLimit": "Díjkorlát", + "colLastUsed": "Utoljára használt", + "colExpires": "Lejár", + "colStatus": "Állapot", + "colActions": "Akciók", + "maskedHint": "Csak az első 8 karakter jelenik meg", + "any": "bármelyik", + "activeLabel": "aktív", + "inactiveLabel": "inaktív", + "deactivate": "Deaktiválás", + "activate": "Aktiválja", + "delete": "Törölje" + }, + "pointsForm": { + "title": "Rádióhallgató pontok", + "subtitle": "Jutalmazd pénzzel a hallgatókat a rádiózásban eltöltött időért. A szerkesztések a website_settings (radio_points_* kulcsok) mappába írnak, és a futásidejű beállítások gyorsítótárát kiiktatják. A logikai értékek 0/1-et használnak.", + "saved": "Mentve", + "points": "Pontok", + "enabled": "Engedélyezve", + "disabled": "Letiltva", + "perMinute": "Percenként", + "paidIn": "{currency} pénznemben fizetve", + "maxPerDay": "Max / nap", + "unlimited": "Korlátlan", + "minListeners": "Min hallgatók", + "settings": "Beállítások elemre", + "pointsEnabled": "Pontok engedélyezve", + "pointsEnabledHint": "Főkapcsoló a hallgatói pontok odaítéléséhez.", + "currency": "Pénznem", + "currencyHint": "Melyik pénztárcába fizetik be a pontokat.", + "pointsPerMinute": "Pontok percenként", + "pointsPerMinuteHint": "Minden egyes teljes hallgatási percért odaítélt összeg.", + "maxPerDayHint": "Napi korlát felhasználónként. Használja a 0-t a korlátlanul.", + "minListenersHint": "Csak akkor jár pont, ha legalább ennyi ember jelentkezik.", + "save": "Mentse el a pontbeállításokat" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Tartalék lejátszási lista (radio_auto_dj_playlist) a rádió végigpörög, ha nincs élő DJ. Rendezési sorrend, majd cím szerint.", + "dbError": "Nem sikerült betölteni az AutoDJ lejátszási listát (az adatbázis nem érhető el).", + "tracks": "Pályák", + "active": "Aktív", + "inactive": "Inaktív", + "addTrack": "Szám hozzáadása", + "titlePlaceholder": "A szám címe", + "artist": "Művész", + "album": "Album", + "artworkUrl": "A műalkotás URL-je", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Időtartam (másodperc)", + "durationPlaceholder": "pl. 215", + "sortOrder": "Rendezési sorrend", + "playlist": "Lejátszási lista ({count})", + "noTracks": "Még nincsenek AutoDJ-sávok – adjon hozzá egyet fent.", + "colOrder": "Rendeljen", + "colTitle": "Cím", + "colArtist": "Művész", + "colAlbum": "Album", + "colDuration": "Időtartam", + "colPlays": "Játszik", + "colLastPlayed": "Utoljára játszott", + "colStatus": "Állapot", + "colActions": "Akciók", + "activeLabel": "aktív", + "inactiveLabel": "inaktív", + "deactivate": "Deaktiválás", + "activate": "Aktiválja", + "delete": "Törölje", + "trackTitle": "Cím" + }, + "moderationPage": { + "title": "DJ moderálás", + "subtitle": "Tekintse át és távolítsa el a rádiókiáltásokat (50 legutóbbi).", + "recentShouts": "Legutóbbi kiáltások ({count})" + } + }, + "commandocentrum": { + "title": "Commandocentrum", + "subtitle": "Diagnosztika, RCON vezérlők és felhasználókezelés", + "diagnostics": "Diagnosztika", + "rcon": "RCON", + "userActions": "Felhasználói műveletek", + "diagnosticsTitle": "Emulátor diagnosztika", + "memoryUsage": "Memóriahasználat", + "uptime": "Üzemidő", + "onlineUsers": "Online felhasználók", + "roomsLoaded": "A szobák feltöltve", + "refresh": "Frissítés", + "rconTitle": "RCON parancsokat", + "rconPlaceholder": "Írja be az RCON parancsot…", + "rconSend": "Küldés", + "rconSending": "Küldés…", + "rconResponse": "Válasz", + "userActionsTitle": "Felhasználói műveletek", + "username": "Felhasználónév", + "usernamePlaceholder": "Cél felhasználónév", + "action": "Akció", + "execute": "Végrehajtás", + "actions": { + "disconnect": "Leválasztás", + "alert": "Figyelmeztetés küldése", + "giveCredits": "Adj krediteket", + "giveBadge": "Adj jelvényt", + "givePoints": "Adj pontokat", + "ban": "Ban", + "kick": "Rúgd" + }, + "messagePlaceholder": "Üzenet (figyelmeztetésért)…", + "amountPlaceholder": "Összeg…", + "badgePlaceholder": "Jelvény kódja…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Emulátor konfig", + "subtitle": "Megtekintheti és szerkesztheti az emulátor beállításait és a területi beállításokat", + "settings": "Beállítások elemre", + "texts": "Szövegek", + "search": "Keresés", + "searchPlaceholder": "Keresési billentyűk…", + "noSettings": "Nem találhatók beállítások", + "noTexts": "Nem található szöveg", + "edit": "Szerkesztés", + "save": "Mentés", + "saving": "Mentés…", + "cancel": "Mégse", + "colKey": "Kulcs", + "colValue": "Érték", + "colType": "Írja be", + "colActions": "Akciók", + "editDialog": { + "title": "Szerkesztés: {key}", + "value": "Érték", + "valuePlaceholder": "Adja meg az értéket…", + "save": "Módosítások mentése", + "cancel": "Mégse" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Figyelmeztetések", + "subtitle": "A szálloda egészére kiterjedő figyelmeztetések küldése és a legutóbbi figyelmeztetések megtekintése", + "sendAlert": "Szállodai figyelmeztetés küldése", + "recentAlerts": "Legutóbbi figyelmeztetések ({count})", + "noRecentAlerts": "Nincsenek friss figyelmeztetések", + "form": { + "title": "Figyelmeztetés címe", + "titlePlaceholder": "pl. Szerver karbantartás 10 perc alatt", + "message": "Figyelmeztető üzenet", + "messagePlaceholder": "Írja meg a figyelmeztető üzenetet…", + "type": "Írja be", + "typeHotel": "A szálloda egészére kiterjedő riasztás", + "typeStaff": "Csak személyzet", + "urgent": "Sürgős", + "send": "Figyelmeztetés küldése", + "sending": "Küldés…", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "ID", + "colTitle": "Cím", + "colSentBy": "Küldte", + "colType": "Írja be", + "colDate": "Dátum", + "colActions": "Akciók", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Személyzeti tevékenységek", + "subtitle": "A személyzeti műveletek ellenőrzési nyomvonala az adminisztrációs panelen", + "noLogs": "Még nincs naplózott személyzeti tevékenység", + "colId": "ID", + "colUser": "Felhasználó", + "colAction": "Akció", + "colTarget": "Cél", + "colDescription": "Leírás", + "colIp": "IP", + "colTimestamp": "Időbélyeg", + "filterByUser": "Szűrés felhasználó szerint…", + "filterByAction": "Szűrés művelet szerint…", + "clearFilters": "Tiszta szűrők", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Szószűrő", + "subtitle": "Kezelje a szűrt szavakat és kifejezéseket a szállodában", + "addWord": "Szó hozzáadása", + "addWords": "Szavak hozzáadása", + "noWords": "Még nincsenek szűrt szavak", + "confirmDelete": "Eltávolítja a „{word}” kifejezést a szűrőből?", + "colId": "ID", + "colWord": "Szó", + "colAddedBy": "Hozzáadta", + "colCreated": "Létrehozva", + "colActions": "Akciók", + "form": { + "word": "Szó", + "wordPlaceholder": "pl. rossz szó", + "addMore": "Több szó hozzáadása (soronként egy)", + "save": "Hozzáadás a szűrőhöz", + "saving": "Mentés…", + "cancel": "Mégse" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Karbantartási mód", + "subtitle": "A szállodaszintű karbantartás engedélyezése vagy letiltása", + "enabled": "A karbantartási mód engedélyezve van", + "disabled": "A karbantartási mód le van tiltva", + "enable": "Karbantartás engedélyezése", + "disable": "A karbantartás letiltása", + "message": "Karbantartási üzenet", + "messagePlaceholder": "Hamarosan visszatérünk!", + "staffAccess": "A karbantartás során engedje meg a személyzet hozzáférését", + "save": "Mentse el a beállításokat", + "saving": "Mentés…", + "confirmEnable": "A karbantartás engedélyezése megakadályozza, hogy a személyzeten kívüli felhasználók hozzáférjenek a szállodához. Folytatja?", + "confirmDisable": "Letiltja a karbantartási módot, és visszaállítja az összes felhasználó hozzáférését?", + "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": "Háztartási engedélyek", + "subtitle": "Konfigurálja, hogy mely rangok mely adminisztrátori szakaszokhoz férhetnek hozzá", + "addPermission": "Engedély hozzáadása", + "editPermission": "Szerkesztési engedély", + "deletePermission": "Engedély törlése", + "noPermissions": "Nincsenek konfigurálva takarítási engedélyek", + "confirmDelete": "Törli ezt az engedélyt?", + "colId": "ID", + "colRank": "Rang", + "colSection": "szakasz", + "colActions": "Akciók", + "form": { + "rankId": "Rang azonosító", + "rankIdPlaceholder": "Minimális rang", + "section": "Szakaszkulcs", + "sectionPlaceholder": "pl. admin.dashboard", + "save": "Mentse el az engedélyt", + "saving": "Mentés…", + "cancel": "Mégse" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset Alkalmazva!", + "cleared": "All Engedélyek cleared!", + "invalidRank": "Invalid Rang", + "testDone": "Test done: {count} Engedélyek found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Törölje ALL Engedélyek? This Akció cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Engedély", + "colDescription": "Leírás", + "colMinRank": "Min. Rang", + "permissionKey": "Engedélykulcs", + "minRank": "Min. Rang", + "description": "Leírás", + "permissions": "Engedélyek", + "permissionsCount": "{count} Engedélyek", + "permission": "Engedély", + "highestMinRank": "Highest min. Rang: {rank}", + "totalMinRank": "Total min. Rang sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Rangok", + "missingDeps": "{count} Hiányzik dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(Hiányzik)", + "rank": "Rang", + "count": "Count", + "searchPermission": "Keresés Engedélyek…", + "search": "Keresés", + "manage": "Manage", + "importSelection": "Importálás selection", + "noGroup": "Nem group", + "allGroups": "All groups", + "perGroup": "Engedélyek per group", + "perRank": "Engedélyek per Rang", + "rankOverviewHint": "All Engedélyek grouped by the Rang they are assigned to.", + "tabOverview": "Áttekintés", + "tabManage": "Manage", + "tabImport": "Importálás / Export", + "tabRanks": "Rang Áttekintés", + "tabPresets": "Előbeállítások", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "Importálás Engedélyek", + "importHint": "Paste a JSON array of Engedély objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "Importálás", + "exportTitle": "Export Engedélyek", + "exportHint": "Export all Engedélyek as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Engedély Előbeállítások", + "presetsHint": "Alkalmazni a predefined Állítsa be of Engedélyek for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Moderálás tools: Felhasználó lookup, Tiltások, CFH handling, chat Naplók.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Felhasználók, Szobák, news, Beállítások elemre, Bolt, events, Rádió & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including Engedély management and asset Importálás.", + "applyPreset": "Alkalmazni preset", + "clearAll": "Clear all Engedélyek", + "testTitle": "Test Rang access", + "testHint": "Enter a Rang number to see which Engedélyek would be granted.", + "test": "Test", + "auditTitle": "Engedély audit log", + "auditHint": "All changes to Takarítás Engedélyek are logged.", + "auditLogsAt": "Audit Naplók are available on the Audit log page.", + "viewAuditLogs": "Megtekintés audit Naplók", + "importedWithErrors": "Imported {count} Engedélyek with {errors} errors", + "confirmClearAllDesc": "This will Távolítsa el every Engedély entry from the Adatbázis. Are you sure?", + "confirmDeletePermission": "Törölje this Engedély permanently?", + "confirmBulkDelete": "Törölje {count} selected Engedélyek?", + "deleteSelected": "Törölje {count} selected", + "cancel": "Mégse", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Felhasználó", + "auditAction": "Akció", + "auditTarget": "Cél", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Szobák", + "subtitle": "Szállodai szobák keresése és kezelése", + "search": "Keresés", + "searchPlaceholder": "Keresés név, tulajdonos vagy azonosító alapján…", + "searchResults": "{count, plural, one {# room} other {# rooms}} található a következőre: \"{query}\"", + "noResults": "Nem található szoba", + "colId": "ID", + "colName": "Név", + "colOwner": "Tulajdonos", + "colUsers": "Felhasználók", + "colState": "állam", + "colCategory": "Kategória", + "colCreated": "Létrehozva", + "colActions": "Akciók", + "stateOpen": "Nyissa meg", + "stateClosed": "Zárva", + "stateLocked": "Lezárva", + "stateInvisible": "Láthatatlan", + "detail": { + "title": "Szoba: {name}", + "subtitle": "{owner} tulajdona", + "overview": "Áttekintés", + "actions": "Akciók", + "description": "Leírás", + "noDescription": "Nincs leírás", + "owner": "Tulajdonos", + "users": "Online felhasználók", + "maxUsers": "Max felhasználók", + "category": "Kategória", + "state": "állam", + "tags": "Címkék", + "noTags": "Nincsenek címkék", + "created": "Létrehozva", + "deleteRoom": "Szoba törlése", + "confirmDelete": "Törli a \"{name}\" szobát? Ezt nem lehet visszavonni.", + "enterRoom": "Lépjen be a szobába", + "changeOwner": "Tulajdonosváltás", + "changeOwnerPlaceholder": "Új tulajdonos felhasználónév" + } + }, + "emailTemplates": { + "title": "E-mail sablonok", + "subtitle": "Tranzakciós e-mail-sablonok kezelése", + "newTemplate": "+ Új sablon", + "edit": "Szerkesztés", + "delete": "Törölje", + "noTemplates": "Még nincsenek e-mail sablonok", + "confirmDelete": "Törli a(z) „{name}” sablont?", + "colId": "ID", + "colName": "Név", + "colSubject": "Tárgy", + "colKey": "Kulcs", + "colUpdated": "Frissítve", + "colActions": "Akciók", + "form": { + "name": "Név", + "namePlaceholder": "pl. Üdvözlő e-mail", + "key": "Kulcs", + "keyPlaceholder": "pl. welcome_email", + "subject": "Tárgy", + "subjectPlaceholder": "E-mail tárgysora", + "body": "Törzs (HTML)", + "bodyPlaceholder": "

Kedves {username}!

", + "variables": "Elérhető változók", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Sablon mentése", + "saving": "Mentés…", + "cancel": "Mégse", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "téma", + "subtitle": "Testreszabhatja a CMS megjelenését", + "presets": "Előbeállítások", + "colours": "Színek", + "css": "CSS", + "presetsTitle": "Előre beállított téma", + "presetsSubtitle": "Válasszon egy előre elkészített színsémát", + "applyPreset": "Alkalmazni", + "presetApplied": "Előbeállítás alkalmazva: {preset}", + "customiseTitle": "Egyedi színek", + "primary": "Elsődleges", + "secondary": "Másodlagos", + "accent": "Akcent", + "background": "Háttér", + "surface": "Felület", + "text": "Szöveg", + "saveColours": "Mentse el a színeket", + "savingColours": "Mentés…", + "cssTitle": "Egyedi CSS", + "cssSubtitle": "Adjon hozzá egyéni CSS-t a témastílusok felülbírálásához", + "cssPlaceholder": "/* Az Ön egyéni CSS-je itt */", + "saveCss": "CSS mentése", + "savingCss": "Mentés…", + "reset": "Állítsa vissza az alapértelmezett értékeket", + "confirmReset": "Visszaállítja a témát az alapértelmezett értékekre?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Médiatár", + "subtitle": "Médiafájlok feltöltése és kezelése", + "upload": "Feltöltés", + "uploadTitle": "Tölts fel egy fájlt", + "uploadSubtitle": "Húzással vagy kattintással feltöltheti", + "uploadButton": "Válasszon fájlt", + "uploading": "Feltöltés…", + "noFiles": "Még nincsenek médiafájlok", + "delete": "Törölje", + "confirmDelete": "Véglegesen törli ezt a fájlt?", + "search": "Keresés", + "searchPlaceholder": "Keresés fájlnév szerint…", + "colPreview": "Előnézet", + "colName": "Név", + "colSize": "Méret", + "colType": "Írja be", + "colUploaded": "Feltöltve", + "colActions": "Akciók", + "copyUrl": "URL másolása", + "urlCopied": "Az URL a vágólapra másolva" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Töltse fel és kezelje a webhely faviconját", + "current": "Aktuális kedvenc", + "uploadLabel": "Favicon feltöltése", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO vagy SVG. Max 2MB.", + "upload": "Feltöltés", + "uploading": "Feltöltés…", + "delete": "Távolítsa el", + "deleting": "Eltávolítás…", + "saved": "Favicon sikeresen elmentve!", + "deleted": "Favicon sikeresen eltávolítva!", + "error": "Valami elromlott", + "confirmDelete": "Eltávolítja a favicont? A webhely többé nem jelenít meg egyéni kedvenc ikont.", + "generator": { + "title": "Favicon létrehozása", + "text": "Szöveg", + "bgColor": "Háttérszín", + "textColor": "Szöveg színe", + "rounded": "Lekerekített sarkok", + "save": "Mentés faviconként" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "CMS beállítások", + "subtitle": "Kulcs/érték CMS-konfiguráció kezelése", + "addSetting": "Beállítás hozzáadása", + "edit": "Szerkesztés", + "delete": "Törölje", + "noSettings": "Nem találhatók beállítások", + "confirmDelete": "Törli a „{key}” beállítást?", + "colKey": "Kulcs", + "colValue": "Érték", + "colUpdated": "Frissítve", + "colActions": "Akciók", + "form": { + "key": "Kulcs", + "keyPlaceholder": "pl. hotel_name", + "value": "Érték", + "valuePlaceholder": "Beállítási érték", + "save": "Beállítás mentése", + "saving": "Mentés…", + "cancel": "Mégse" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Kezdőlap", + "reload": "Újratöltés", + "fullscreen": "Teljes képernyő", + "logout": "Kijelentkezés", + "onlineUsers": "Online felhasználók", + "emulatorOnline": "Emulátor online", + "emulatorOffline": "Emulátor offline", + "dragToMove": "Húzás a mozgatáshoz", + "hide": "Sáv elrejtése", + "fullscreenExit": "Kilépés a teljes képernyőből", + "show": "Sáv megjelenítése", + "emulatorUnknown": "Az emulátor állapota ismeretlen" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Fájldiagnosztika", + "preliminary": "A címek előzetes ellenőrzése; a tartalmat az importálás ellenőrzi.", + "http": "HTTP {status}", + "network": "Sikertelen kapcsolódás", + "timeout": "A forrás nem válaszolt időben", + "invalidResponse": "A forrás fájl helyett weboldalt adott vissza", + "available": "Fájl megtalálva; ellenőrzésre vár", + "recover": "Eredeti csatolása és folytatás", + "recoveryHint": "Válassza ki: {file} (legfeljebb 50 MB). Az azonosságát ellenőrizzük. A sikertelen elemek újrapróbálhatók; a kész importok megmaradnak.", + "attach": "Válassza ki az eredeti .nitro fájlt", + "working": "Ellenőrzés vagy folytatás...", + "attached": "Megfelelő eredeti fájl csatolva", + "resume": "Sikertelen importok folytatása ezzel a fájllal", + "invalidFile": "Válasszon megfelelő eredeti .nitro fájlt legfeljebb 50 MB méretben, és próbálja újra.", + "resumeError": "Frissítse az előzményeket, és használja a legutóbbi próbálkozást; ellenőrizze a fájlt, és próbálja újra.", + "mismatchedFile": "Ez a fájl másik bútorhoz tartozik.", + "alreadyStarted": "A helyreállítás már elindult. Frissítse az előzményeket, és használja a legutóbbi próbálkozást.", + "notEligible": "Ez az elem nem állítható helyre csatolmánnyal." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/it.json b/src/messages/it.json index 111b1040..f168a970 100644 --- a/src/messages/it.json +++ b/src/messages/it.json @@ -1,4804 +1,4913 @@ { - "draftRecovery": { - "ready": "Una copia di recupero sarà conservata in questo browser per 7 giorni.", - "saved": "Copia di recupero salvata in questo browser per 7 giorni.", - "unavailable": "Recupero nel browser non disponibile. Tieni aperta questa pagina fino al salvataggio delle modifiche.", - "found": "È disponibile una copia di recupero in questo browser, salvata il", - "restore": "Ripristina copia del browser", - "discard": "Elimina copia del browser", - "confirmRestore": "Sostituire il modulo attuale con la copia di recupero del browser? Controlla il contenuto prima di salvare.", - "confirmDiscard": "Eliminare questa copia di recupero del browser? Il modulo attuale resterà invariato." - }, - "nav": { - "home": "Home", - "community": "Community", - "articles": "Articoli", - "photos": "Foto", - "staff": "Staff", - "rankings": "Classifiche", - "guilds": "Gruppi", - "events": "Eventi", - "polls": "Sondaggi", - "leaderboards": "Classifiche", - "rareValues": "Valori rari", - "shop": "Negozio", - "market": "Mercato", - "assistance": "Assistenza", - "helpCenter": "Centro assistenza", - "myTickets": "I miei ticket", - "badges": "Distintivi", - "radio": "Radio", - "friends": "Amici", - "messages": "Messaggi", - "admin": "Admin", - "openMenu": "Apri menu", - "closeMenu": "Chiudi menu", - "drawBadge": "Crea distintivo", - "mod": "Mod" - }, - "header": { - "online": "{count} online su {hotel}", - "nitroClient": "Client Nitro", - "tagline": "Un mondo virtuale online dove puoi creare il tuo avatar, fare amicizia, chattare, creare stanze e molto altro!", - "login": "Accedi", - "or": "Oppure", - "createAccount": "Crea un account" - }, - "footer": { - "copyright": "© {year} - {hotel} è un progetto educativo senza scopo di lucro" - }, - "emails": { - "verify": { - "subject": "Verifica la tua email · {hotel}", - "heading": "Verifica la tua email", - "body": "Benvenuto su {hotel}! Conferma questo indirizzo email per completare la creazione del tuo account.", - "button": "Verifica email", - "fallback": "Se il pulsante non funziona, incolla questo link nel browser:" - } - }, - "pages": { - "error": { - "code": "Errore", - "title": "Qualcosa è andato storto", - "subtitle": "L'hotel ha incontrato un imprevisto.", - "body": "Riprova tra poco. Se continua, contatta lo staff indicando il riferimento qui sotto.", - "tryAgain": "Riprova", - "backHome": "Torna alla home", - "reference": "Riferimento: {digest}" - }, - "notFound": { - "code": "404", - "title": "Pagina non trovata", - "subtitle": "Questa stanza non esiste — o i mobili sono stati spostati.", - "body": "Controlla il link, oppure torna alla lobby.", - "backHome": "Torna alla home", - "latestNews": "Ultime notizie" - }, - "staff": { - "title": "Staff", - "subtitle": "Il team dietro l'hotel", - "ranksTitle": "I nostri team", - "ranksSubtitle": "Di cosa si occupa ogni parte del team", - "membersTitle": "Membri del team", - "membersEmptySubtitle": "Nessuno da mostrare al momento", - "membersSubtitle": "{count, plural, one {# membro che tiene tutto in funzione} other {# membri che tengono tutto in funzione}}", - "emptyState": "Nessun membro dello staff da mostrare.", - "colUsername": "Nome utente", - "colRank": "Ruolo", - "colMotto": "Motto", - "viewProfile": "Visita il profilo", - "noMotto": "Nessun motto impostato", - "loadError": "Impossibile caricare i membri dello staff. Riprova tra poco.", - "retry": "Riprova" - }, - "leaderboard": { - "title": "Classifica", - "subtitle": "I 20 migliori giocatori per {currency}", - "tab_credits": "Crediti", - "tab_diamonds": "Diamanti", - "tab_duckets": "Duckets", - "tab_achievement": "Trofei", - "tab_respects": "Rispetti", - "tab_onlinetime": "Tempo online", - "emptyState": "Ancora nessuna classifica da mostrare.", - "colAvatar": "Avatar", - "colPlayer": "Giocatore" - }, - "friends": { - "title": "Amici", - "emptySubtitle": "Non hai ancora aggiunto nessun amico", - "subtitle": "{count, plural, one {Hai # amico} other {Hai # amici}}", - "emptyState": "Aggiungi amici nell'hotel e compariranno qui.", - "noMotto": "Nessun motto", - "remove": "Rimuovi", - "success": { - "removed": "Amico rimosso." - }, - "errors": { - "notFound": "Quell'amicizia non è stata trovata.", - "invalid": "Amico non valido.", - "error": "Qualcosa è andato storto. Riprova." - } - }, - "messages": { - "title": "Messaggi", - "subtitle": "Richieste di amicizia, inbox offline e messaggi agli amici", - "requestsTitle": "Richieste di amicizia", - "requestsEmptySubtitle": "Nessuno ti ha ancora chiesto l'amicizia", - "requestsSubtitle": "{count, plural, one {# richiesta in sospeso} other {# richieste in sospeso}}", - "requestsEmptyState": "Nessuna richiesta di amicizia in sospeso.", - "wantsToBeFriend": "vuole essere tuo amico.", - "accept": "Accetta", - "decline": "Rifiuta", - "offlineTitle": "Messaggi offline", - "offlineEmptySubtitle": "La tua casella è vuota", - "offlineSubtitle": "{count, plural, one {# messaggio ricevuto} other {# messaggi ricevuti}}", - "offlineEmptyState": "Non hai messaggi offline.", - "composeTitle": "Invia messaggio offline", - "composeSubtitle": "Consegnato nel messenger dell'hotel quando l'amico è offline", - "composeEmptyFriends": "Aggiungi amici in hotel per inviare messaggi offline.", - "composeFriendLabel": "Amico", - "composeFriendPlaceholder": "Scegli un amico", - "composeMessageLabel": "Messaggio", - "composeMessagePlaceholder": "Scrivi il messaggio (max 500 caratteri)…", - "composeSend": "Invia messaggio", - "unknownUser": "Utente #{id}", - "success": { - "accepted": "Richiesta di amicizia accettata.", - "declined": "Richiesta di amicizia rifiutata.", - "sent": "Messaggio offline inviato." - }, - "errors": { - "notFound": "Quella richiesta di amicizia non è stata trovata.", - "unauthorized": "Non puoi gestire questa richiesta di amicizia.", - "invalid": "Richiesta di amicizia non valida.", - "error": "Qualcosa è andato storto. Riprova.", - "notFriend": "Puoi scrivere solo agli amici.", - "emptyMessage": "Scrivi un messaggio.", - "rateLimited": "Troppi messaggi. Attendi un momento e riprova." - } - }, - "sessions": { - "title": "Attività di accesso", - "subtitle": "Accessi recenti e tentativi falliti sul tuo account", - "recentTitle": "Accessi recenti", - "recentEmpty": "Nessun accesso registrato.", - "colWhen": "Quando", - "colIp": "IP", - "colDevice": "Dispositivo", - "failedTitle": "Tentativi falliti", - "failedSubtitle": "Password errata per il tuo username", - "unknownDevice": "Dispositivo sconosciuto", - "signOutEverywhereTitle": "Esci ovunque", - "signOutEverywhereDescription": "Termina tutte le sessioni del sito su ogni dispositivo. Dovrai accedere di nuovo anche qui.", - "signOutEverywhereButton": "Esci da tutte le sessioni", - "successSignedOutAll": "Tutte le sessioni sono state terminate." - }, - "profile": { - "noMotto": "Nessun motto", - "statRank": "Ruolo", - "statCredits": "Crediti", - "statRegistered": "Registrato", - "badgesTitle": "Distintivi", - "badgesEmpty": "Ancora nessun distintivo.", - "photosTitle": "Foto", - "photosEmpty": "Ancora nessuna foto.", - "guestbookTitle": "Bacheca", - "guestbookSubtitle": "Messaggi sulla bacheca di {username}", - "leaveMessage": "Lascia un messaggio", - "guestbookPlaceholder": "Scrivi qualcosa sulla bacheca di {username}…", - "post": "Pubblica", - "loginToPost": "Accedi per lasciare un messaggio sulla bacheca.", - "guestbookEmpty": "Ancora nessun messaggio in bacheca.", - "unknownUser": "Utente #{id}", - "statDuckets": "Duckets", - "statDiamonds": "Diamanti", - "walletTitle": "Portafoglio", - "friendsTitle": "Amici", - "friendsSubtitle": "Le persone con cui passa il tempo nell’hotel", - "friendsEmpty": "Nessun amico da mostrare.", - "roomsTitle": "Stanze", - "roomsSubtitle": "Le stanze che possiede", - "roomsEmpty": "Nessuna stanza da mostrare.", - "roomUntitled": "Stanza senza nome", - "addFriend": "Aggiungi amico", - "alreadyFriends": "Siete amici", - "requestPending": "Richiesta in sospeso", - "respondInMessages": "Rispondi nei Messaggi", - "success": { - "sent": "Richiesta di amicizia inviata.", - "guestbook": "Messaggio in bacheca pubblicato." - }, - "errors": { - "self": "Non puoi inviarti una richiesta di amicizia.", - "alreadyFriends": "Siete già amici.", - "alreadyPending": "Hai già inviato una richiesta a questo utente.", - "incomingPending": "Questo utente ti ha già inviato una richiesta — accettala o rifiutala nei Messaggi.", - "empty": "Scrivi un messaggio prima di pubblicare.", - "moderated": "Quel messaggio è stato bloccato dalla moderazione.", - "ratelimit": "Stai pubblicando troppo in fretta. Attendi un momento e riprova.", - "invalid": "Richiesta non valida.", - "error": "Qualcosa è andato storto. Riprova." - }, - "noRoomPreview": "Anteprima non disponibile", - "viewRoom": "Vedi stanza", - "roomStates": { - "open": "Aperta", - "locked": "Campanello", - "password": "Password", - "invisible": "Nascosta" - }, - "privacy": { - "title": "Visibilità del profilo", - "hint": "Scegli cosa possono vedere i visitatori sul tuo profilo pubblico. La tua email non viene mai mostrata qui. Tu continui a vedere i tuoi dati. Questi controlli si applicano alla pagina del profilo.", - "wallet": "Mostra il mio portafoglio", - "online": "Mostra il mio stato online", - "friends": "Mostra i miei amici", - "photos": "Mostra le mie foto", - "registered": "Mostra la mia data di iscrizione", - "save": "Salva visibilità", - "saved": "Visibilità del profilo salvata.", - "error": "Non è stato possibile caricare o salvare la visibilità del profilo. Riprova.", - "ownerHint": "Stai visualizzando i tuoi dati, comprese le sezioni nascoste." - }, - "morePhotos": "Mostra altre foto (fino alle 24 più recenti)", - "openPhoto": "Apri la foto completa in una nuova scheda", - "photosUnavailable": "Non è stato possibile caricare le foto. Riprova più tardi." - }, - "rankings": { - "title": "Classifica", - "subtitle": "I 12 migliori giocatori ordinati per crediti", - "emptyState": "Ancora nessun giocatore da classificare." - }, - "home": { - "welcome": "Benvenuto su {hotelName}", - "welcomeSubtitle": "Il tuo hotel retrò, ora con tecnologia Next.js", - "welcomeBody": "Rilassati, colleziona furni e fai nuove amicizie.", - "enterHotel": "Entra in {hotelName}", - "onlineFriends": "Amici online", - "noFriendsOnline": "Nessun amico online", - "register": "REGISTRATI ORA", - "joinNow": "Unisciti a {hotelName} oggi!", - "recentUsers": "Utenti recenti", - "recentPhotos": "Foto recenti", - "latestNews": "Ultime notizie", - "newsTitle": "Ultime notizie", - "newsSubtitle": "Appena arrivate dall'hotel", - "allNews": "Tutte le notizie →", - "allUsers": "Community →", - "noArticles": "Ancora nessun articolo.", - "noPhotos": "Ancora nessuna foto.", - "noUsers": "Nessun utente online", - "latestArticle": "Ultimo articolo", - "latestUsers": "Nuovi cittadini ({count} totale)", - "statsOnline": "Online", - "statsCitizens": "Cittadini", - "statsRooms": "Stanze", - "statsArticles": "Articoli", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Crea il tuo look unico", - "featuresFurniture": "Arredi", - "featuresFurnitureDesc": "Decora le stanze con oggetti", - "featuresCommunity": "Community", - "featuresCommunityDesc": "Fai amicizia e chatta", - "featuresGames": "Giochi", - "featuresGamesDesc": "Competi e divertiti" - }, - "news": { - "title": "Notizie", - "subtitle": "Gli ultimi annunci, eventi e aggiornamenti dall'hotel", - "noArticles": "Ancora nessun articolo.", - "searchLabel": "Cerca notizie", - "orderLabel": "Ordine", - "newest": "Prima le più recenti", - "oldest": "Prima le meno recenti", - "apply": "Applica", - "loadError": "Non è stato possibile caricare le notizie. Riprova.", - "pagination": "Pagine delle notizie", - "previous": "Precedente", - "next": "Successiva", - "pageSummary": "Pagina {page} di {pages} · {total} articoli" - }, - "article": { - "backToNews": "← Notizie", - "reactionsTitle": "Reazioni", - "reactionsSubtitle": "Dicci cosa ne pensi", - "reaction": { - "like": "Mi piace", - "love": "Adoro", - "wow": "Wow" - }, - "removeReaction": "Clicca per rimuovere la tua reazione", - "reactWith": "Reagisci con {reaction}", - "noReactions": "Ancora nessuna reazione.", - "logIn": "Accedi", - "toReact": "per reagire.", - "commentsTitle": "Commenti", - "commentsSubtitle": "Partecipa alla conversazione", - "commentsCount": "{count} finora", - "noComments": "Ancora nessun commento. Scrivi il primo.", - "userNumber": "Utente #{id}", - "addComment": "Aggiungi un commento", - "commentPlaceholder": "Scrivi il tuo commento…", - "postComment": "Pubblica commento", - "toComment": "per lasciare un commento.", - "success": { - "posted": "Commento pubblicato.", - "reaction": "Reazione aggiornata." - }, - "errors": { - "empty": "Scrivi un commento prima di pubblicare.", - "moderated": "Quel commento è stato bloccato dalla moderazione.", - "ratelimit": "Stai commentando troppo in fretta. Attendi un momento e riprova.", - "invalid": "Commento non valido.", - "notFound": "Articolo non trovato.", - "error": "Qualcosa è andato storto. Riprova." - } - }, - "photos": { - "title": "Foto", - "subtitle": "Gli ultimi scatti realizzati nell'hotel", - "noPhotos": "Ancora nessuna foto.", - "photoAlt": "Foto dell'utente #{id}", - "byUser": "dell'utente #{id}" - }, - "badges": { - "title": "Distintivi", - "subtitle": "I distintivi che puoi ottenere e sfoggiare in giro per l'hotel", - "noBadges": "Ancora nessun distintivo disponibile." - }, - "community": { - "title": "Community", - "subtitle": "Tutto ciò che accade nell'hotel in un unico posto", - "open": "Apri →", - "links": { - "rankings": { - "title": "Classifiche", - "text": "Scopri i giocatori più ricchi dell'hotel, ordinati per crediti." - }, - "staff": { - "title": "Staff", - "text": "Conosci il team che ogni giorno fa funzionare l'hotel." - }, - "news": { - "title": "Notizie", - "text": "Gli ultimi annunci, eventi e aggiornamenti." - }, - "photos": { - "title": "Foto", - "text": "Scatti condivisi dalla community in giro per l'hotel." - }, - "guilds": { - "title": "Gilde", - "text": "Esplora i gruppi creati e a cui si sono uniti i giocatori." - }, - "leaderboards": { - "title": "Classifiche generali", - "text": "Chi è in testa questa stagione nelle statistiche dell'hotel." - } - } - }, - "guilds": { - "title": "Gilde", - "subtitle": "Esplora i gruppi creati e frequentati dai giocatori", - "empty": "Ancora nessuna gilda.", - "unnamedGuild": "Gilda senza nome", - "noDescription": "Nessuna descrizione" - }, - "guild": { - "allGuilds": "← Tutte le gilde", - "unnamedGuild": "Gilda senza nome", - "noDescription": "Nessuna descrizione", - "memberSingular": "Membro", - "memberPlural": "Membri", - "founded": "Fondata", - "forumLink": "Forum →", - "discussion": "Discussione", - "membersTitle": "Membri", - "memberLowerSingular": "membro", - "memberLowerPlural": "membri", - "noMembers": "Nessun membro.", - "owner": "Proprietario", - "noMotto": "Nessun motto" - }, - "guildForum": { - "backToGuild": "← Torna alla gilda", - "unnamedGuild": "Gilda senza nome", - "forumTitle": "{guild} — Forum", - "threadSingular": "discussione", - "threadPlural": "discussioni", - "newThread": "+ Nuova discussione", - "empty": "Ancora nessuna discussione in questo forum.", - "colSubject": "Oggetto", - "colAuthor": "Autore", - "colPosts": "Messaggi", - "colDate": "Data", - "noSubject": "(senza oggetto)", - "pinned": "In evidenza", - "locked": "Bloccata", - "userNumber": "Utente #{id}", - "unknown": "Sconosciuto", - "success": { - "posted": "Discussione pubblicata." - } - }, - "guildForumNew": { - "backToForum": "← Torna al forum", - "unnamedGuild": "Gilda senza nome", - "title": "Nuova discussione", - "subtitle": "nel forum di {guild}", - "subjectLabel": "Oggetto", - "subjectPlaceholder": "Oggetto della discussione", - "messageLabel": "Messaggio", - "messagePlaceholder": "Scrivi il tuo primo messaggio…", - "postThread": "Pubblica discussione", - "cancel": "Annulla", - "errors": { - "invalid": "Oggetto e messaggio sono obbligatori.", - "notFound": "Gilda non trovata.", - "ratelimit": "Stai pubblicando troppo in fretta. Attendi un momento e riprova.", - "error": "Qualcosa è andato storto. Riprova." - } - }, - "guildForumThread": { - "backToForum": "← Torna al forum", - "unnamedGuild": "Gilda senza nome", - "noSubject": "(senza oggetto)", - "inGuildForum": "Forum di {guild}", - "pinned": "In evidenza", - "locked": "Bloccata", - "postsTitle": "Messaggi", - "postsSubtitle": "{count, plural, one {# messaggio} other {# messaggi}}", - "postsEmpty": "Nessun messaggio in questa discussione.", - "userNumber": "Utente #{id}", - "replyTitle": "Rispondi", - "replySubtitle": "Aggiungi un messaggio a questa discussione", - "replyPlaceholder": "Scrivi la tua risposta…", - "replySubmit": "Pubblica risposta", - "lockedHint": "Questa discussione è bloccata: non è possibile rispondere.", - "loginToReply": "Accedi per rispondere.", - "loginLink": "Accedi", - "success": { - "replied": "Risposta pubblicata." - }, - "errors": { - "invalid": "Inserisci un messaggio.", - "notFound": "Discussione non trovata.", - "locked": "Questa discussione è bloccata.", - "ratelimit": "Stai pubblicando troppo in fretta. Attendi un momento e riprova.", - "error": "Qualcosa è andato storto. Riprova." - } - }, - "shop": { - "title": "Negozio", - "subtitle": "Ricarica il tuo account e accaparrati pacchetti esclusivi, valute e distintivi.", - "browsingCategory": "Stai sfogliando i pacchetti {category}.", - "all": "Tutti", - "allPackages": "Tutti i pacchetti", - "packagesAvailable": "{count, plural, one {# pacchetto disponibile} other {# pacchetti disponibili}}", - "empty": "Al momento non ci sono pacchetti disponibili.", - "buy": "Acquista", - "loginToBuy": "Accedi per acquistare", - "creditsHint": "I pacchetti si pagano con crediti di gioco. Ricarica prima se ti servono altri crediti.", - "topUpLink": "Ricarica crediti", - "priceCredits": "{credits} crediti (≈ {usd})", - "priceCreditsShort": "{credits} cr", - "success": { - "bought": "Pacchetto acquistato — le ricompense sono state aggiunte al tuo account.", - "boughtNamed": "Hai acquistato \"{name}\" — le ricompense sono state aggiunte al tuo account." - }, - "errors": { - "invalid": "Questo pacchetto non è più disponibile.", - "credits": "Non hai abbastanza crediti per questo pacchetto.", - "ratelimit": "Stai acquistando troppo velocemente. Attendi un momento e riprova.", - "error": "Qualcosa è andato storto. Riprova." - } - }, - "topup": { - "title": "Ricarica con PayPal", - "subtitle": "Paga in sicurezza con PayPal e i tuoi crediti vengono aggiunti non appena il pagamento va a buon fine.", - "cancelled": "Il pagamento è stato annullato — non è stato addebitato nulla.", - "chooseAmount": "Scegli un importo", - "notConfiguredPre": "PayPal non è ancora configurato. Un amministratore deve impostare", - "notConfiguredAnd": "e", - "notConfiguredOptional": "(e facoltativamente", - "notConfiguredPost": "per la modalità sandbox o live).", - "balanceTitle": "Il tuo saldo", - "signedInAs": "Hai effettuato l'accesso come {username}", - "credits": "Crediti", - "creditsPerUnit": "Crediti per 1,00 {currency}", - "rateLine": "Ricevi {amount} crediti per 1,00 {currency}. I crediti compaiono nel gioco al tuo prossimo accesso." - }, - "marketplace": { - "title": "Mercatino", - "subtitle": "Sfoglia mobili e rari messi in vendita dai giocatori. Le inserzioni vengono create nel gioco e si aggiornano in tempo reale — entra nell'hotel per fare un'offerta.", - "activeOffers": "Offerte attive", - "sellers": "Venditori", - "totalValue": "Valore totale", - "activeListings": "Inserzioni attive", - "mostRecentFirst": "Prima le più recenti", - "empty": "Al momento non ci sono offerte attive nel mercatino. Riprova più tardi.", - "colOffer": "Offerta", - "colItem": "Oggetto", - "colSeller": "Venditore", - "colPrice": "Prezzo", - "colListed": "Pubblicata", - "itemLabel": "Oggetto #{id}", - "userLabel": "Utente #{id}", - "justNow": "proprio ora", - "minutesAgo": "{count} min fa", - "hoursAgo": "{count} h fa", - "daysAgo": "{count} g fa" - }, - "rares": { - "title": "Valori dei rari", - "subtitle": "Ottieni una panoramica di tutti i rari dell'hotel, raggruppati per categoria.", - "empty": "Al momento non abbiamo rari elencati qui.", - "rareCount": "{count, plural, one {# raro} other {# rari}}", - "viewRares": "Vedi i rari →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# raro in questa categoria} other {# rari in questa categoria}}", - "allRares": "← Tutti i rari", - "empty": "Ancora nessun raro elencato in questa categoria.", - "colRare": "Raro", - "colCredits": "Crediti", - "colCurrency": "Valuta", - "creditsValue": "{value} crediti", - "duckets": "Duckets", - "diamonds": "Diamanti", - "credits": "Crediti" - }, - "redeem": { - "title": "Riscatta un buono", - "subtitle": "Hai un codice buono? Inseriscilo qui sotto per aggiungere la ricompensa al tuo account.", - "enterCode": "Inserisci il tuo codice", - "oncePerAccount": "Ogni buono può essere riscattato una sola volta per account.", - "balanceTitle": "Il tuo saldo", - "signedInAs": "Hai effettuato l'accesso come {username}", - "credits": "Crediti", - "instantCredit": "Le ricompense riscattate vengono accreditate immediatamente e compaiono nel gioco al tuo prossimo accesso." - }, - "help": { - "title": "Centro assistenza", - "subtitle": "Trova guide, argomenti di supporto e le regole dell'hotel: tutto ciò che ti serve per ricevere aiuto.", - "myTickets": "I miei ticket →", - "topicsTitle": "Argomenti di supporto", - "topicsSubtitle": "Sfoglia guide e risposte alle domande più comuni", - "topicsEmpty": "Ancora nessun argomento di aiuto.", - "rulesTitle": "Regole dell'hotel", - "rulesSubtitle": "Leggile prima di trascorrere del tempo nell'hotel", - "rulesEmpty": "Ancora nessuna regola pubblicata.", - "categoryEmpty": "Nessuna regola in questa categoria." - }, - "helpCategory": { - "back": "← Centro assistenza", - "topicSubtitle": "Argomento del centro assistenza", - "moreTitle": "Altri argomenti di aiuto", - "moreSubtitle": "Passa a un altro argomento di supporto" - }, - "helpTickets": { - "title": "Ticket di assistenza", - "subtitle": "Invia un ticket allo staff e tieni traccia delle tue richieste aperte.", - "statTotal": "Ticket totali", - "statOpen": "Aperti", - "statClosed": "Chiusi", - "newTitle": "Nuovo ticket", - "newSubtitle": "Descrivi il tuo problema e lo staff ti ricontatterà", - "subjectPlaceholder": "Oggetto", - "contentPlaceholder": "Descrivi il tuo problema…", - "submit": "Invia ticket", - "listTitle": "I tuoi ticket", - "listSubtitle": "Tutte le richieste che hai inviato allo staff", - "listEmpty": "Non hai ancora nessun ticket.", - "colId": "ID", - "colSubject": "Oggetto", - "colStatus": "Stato", - "colCreated": "Creato", - "statusOpen": "Aperto", - "statusClosed": "Chiuso", - "success": { - "created": "Ticket inviato." - }, - "errors": { - "invalid": "Compila oggetto e descrizione.", - "moderated": "Quel ticket è stato bloccato dalla moderazione.", - "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", - "error": "Qualcosa è andato storto. Riprova." - }, - "banAppealLabel": "This is a ban appeal" - }, - "helpTicketDetail": { - "backToList": "← I tuoi ticket", - "ticketId": "Ticket #{id}", - "statusOpen": "Aperto", - "statusClosed": "Chiuso", - "messagesTitle": "Conversazione", - "messagesSubtitle": "{count, plural, one {# messaggio} other {# messaggi}}", - "you": "Tu", - "userNumber": "Utente #{id}", - "replyTitle": "Rispondi", - "replySubtitle": "Invia un aggiornamento allo staff", - "replyPlaceholder": "Scrivi il tuo messaggio…", - "replySubmit": "Invia risposta", - "closeTitle": "Chiudi ticket", - "closeSubtitle": "Segna la richiesta come risolta se non ti serve più aiuto", - "closeSubmit": "Chiudi ticket", - "closedHint": "Questo ticket è chiuso. Apri un nuovo ticket se hai bisogno di altro aiuto.", - "success": { - "replied": "Risposta inviata.", - "closed": "Ticket chiuso." - }, - "errors": { - "invalid": "Inserisci un messaggio.", - "notFound": "Ticket non trovato.", - "closedTicket": "Questo ticket è chiuso.", - "moderated": "Quel messaggio è stato bloccato dalla moderazione.", - "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", - "error": "Qualcosa è andato storto. Riprova." - } - }, - "applyStaff": { - "title": "Candidati per lo staff di {hotel}", - "subtitle": "Apriamo le candidature per lo staff di tanto in tanto. Se trovi una posizione che senti perfetta per te, non esitare a candidarti.", - "noPositionsTitle": "Nessuna posizione aperta", - "noPositionsBody": "Al momento non ci sono posizioni aperte. Torna più tardi per verificare se nel frattempo ci sono nuove opportunità. Grazie per il tuo interesse.", - "noDeadline": "Nessuna scadenza impostata", - "deadline": "Scadenza candidatura: {date}", - "alreadyApplied": "Ti sei già candidato per {rank}", - "aboutYou": "Parlaci di te", - "aboutPlaceholder": "Raccontaci perché saresti un ottimo {rank}…", - "applyFor": "Candidati per {rank}", - "success": { - "submitted": "Candidatura inviata — lo staff la esaminerà a breve." - }, - "errors": { - "empty": "Scrivi almeno 10 caratteri su di te.", - "invalid": "Candidatura non valida.", - "duplicate": "Ti sei già candidato per questa posizione.", - "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", - "error": "Qualcosa è andato storto. Riprova." - } - }, - "applyTeam": { - "title": "Candidati per il team di {hotel}", - "subtitle": "Apriamo le candidature per il team periodicamente. Se vedi un team adatto a te, non esitare a candidarti!", - "noPositionsTitle": "Nessuna posizione nel team aperta", - "noPositionsBody": "Al momento non ci sono posizioni aperte nel team. Torna più tardi per verificare se ci sono nuove opportunità. Grazie!", - "pending": "La tua candidatura è in attesa", - "aboutYou": "Parlaci di te", - "aboutPlaceholder": "Raccontaci perché saresti perfetto per {rank}…", - "applyFor": "Candidati per {rank}", - "success": { - "submitted": "Candidatura inviata — lo staff la esaminerà a breve." - }, - "errors": { - "empty": "Scrivi almeno 10 caratteri su di te.", - "invalid": "Candidatura non valida.", - "duplicate": "Ti sei già candidato per questo team.", - "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", - "error": "Qualcosa è andato storto. Riprova." - } - }, - "radio": { - "title": "Radio", - "subtitle": "Sintonizzati sulla radio dell'hotel — set DJ in diretta, richieste e saluti.", - "nowPlaying": "In riproduzione", - "nothingPlaying": "Nessun brano in riproduzione al momento.", - "onAir": "In onda: {dj}", - "noDj": "Nessun DJ in onda.", - "audioUnsupported": "Il tuo browser non supporta l'elemento audio.", - "streamOffline": "Lo streaming è al momento offline.", - "exploreTitle": "Esplora la radio", - "exploreSubtitle": "Programmazione, saluti, richieste e altro", - "linkSchedule": "Programmazione", - "linkScheduleText": "La nostra programmazione settimanale di DJ e show.", - "linkShouts": "Saluti", - "linkShoutsText": "Saluti e richieste dalla community.", - "linkRequests": "Richieste", - "linkRequestsText": "Chiedi al DJ di mettere il tuo brano preferito.", - "linkApply": "Candidati come DJ", - "linkApplyText": "Unisciti al team e va' in onda.", - "linkLeaderboard": "Classifica", - "linkLeaderboardText": "I migliori ascoltatori in base ai punti guadagnati.", - "todayTitle": "Programmazione di oggi", - "todayTitleWithDay": "Programmazione di oggi · {day}", - "todaySubtitle": "Cosa c'è in onda oggi", - "fullWeek": "Settimana intera →", - "noShowsToday": "Nessuno show in programma per oggi.", - "colTime": "Orario", - "colShow": "Show", - "colDj": "DJ", - "untitledShow": "Show senza titolo", - "userNumber": "Utente #{id}" - }, - "radioSchedule": { - "title": "Programmazione radio", - "subtitle": "La nostra programmazione settimanale di DJ e show", - "empty": "Nessuno show ancora in programma.", - "colDay": "Giorno", - "colTime": "Orario", - "colDj": "DJ", - "colShow": "Show", - "noShows": "Nessuno show" - }, - "radioShouts": { - "title": "Saluti radio", - "subtitle": "Saluti e richieste dalla community", - "postTitle": "Pubblica un saluto", - "postSubtitle": "Invia un messaggio al DJ in onda", - "messageLabel": "Il tuo messaggio", - "messagePlaceholder": "Invia un saluto al DJ…", - "shoutButton": "Invia", - "loginToPost": "Accedi per pubblicare un saluto.", - "latestTitle": "Ultimi saluti", - "latestSubtitle": "I messaggi più recenti degli ascoltatori", - "empty": "Ancora nessun saluto. Sii il primo!", - "success": { - "posted": "Saluto pubblicato." - }, - "errors": { - "invalid": "Scrivi un messaggio prima di inviare.", - "moderated": "Quel saluto è stato bloccato dalla moderazione.", - "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", - "error": "Qualcosa è andato storto. Riprova." - } - }, - "events": { - "title": "Eventi", - "subtitle": "Eventi dell'hotel in arrivo e recenti a cui puoi partecipare", - "empty": "Ancora nessun evento.", - "back": "← Eventi", - "when": "Quando", - "status": "Stato", - "statusPublished": "Aperto", - "statusCompleted": "Completato", - "registrations": "Iscrizioni", - "registered": "{count} iscritti", - "spots": "{count} / {max} posti", - "registerTitle": "Iscriviti", - "registerSubtitle": "Prenota il tuo posto per questo evento", - "register": "Iscriviti all'evento", - "registering": "Iscrizione in corso…", - "registerSuccess": "Sei iscritto!", - "registerError": "Impossibile iscriversi a questo evento.", - "loginToRegister": "Accedi per iscriverti a questo evento.", - "alreadyRegistered": "Sei già iscritto.", - "eventEnded": "Questo evento è terminato.", - "eventFull": "Questo evento è al completo.", - "cannotRegister": "Le iscrizioni non sono disponibili.", - "prizesTitle": "Premi", - "winnersTitle": "Vincitori", - "unknownUser": "Utente #{id}", - "filterStatus": "Stato", - "allEvents": "Tutti gli eventi", - "statusOngoing": "In corso", - "statusUpcoming": "In programma", - "weekStarting": "Settimana dal (UTC)", - "myRegistrations": "Le mie iscrizioni", - "apply": "Applica", - "reset": "Reimposta", - "timeZoneHint": "Gli orari sono nel tuo fuso locale. Il filtro di sette giorni usa date UTC.", - "loginForRegistrations": "Accedi per vedere le tue iscrizioni.", - "loadError": "Non è stato possibile caricare gli eventi. Riprova.", - "youRegistered": "Sei iscritto", - "pagination": "Pagine eventi", - "previous": "Precedente", - "next": "Successiva", - "pageSummary": "Pagina {page} di {pages} · {total} eventi", - "weeklyView": "Vista settimanale", - "previousWeek": "Settimana precedente", - "nextWeek": "Settimana successiva" - }, - "polls": { - "title": "Sondaggi", - "subtitle": "Condividi la tua opinione nei sondaggi della community", - "empty": "Ancora nessun sondaggio.", - "back": "← Sondaggi", - "statusActive": "Aperto", - "statusClosed": "Chiuso", - "questionsCount": "{count} domande", - "ends": "Termina {date}", - "voteTitle": "Esprimi il voto", - "voteSubtitle": "Rispondi a ogni domanda qui sotto", - "submitVote": "Invia voto", - "voting": "Invio in corso…", - "voteSuccess": "Grazie per aver votato!", - "voteError": "Impossibile inviare il voto.", - "loginToVote": "Accedi per votare in questo sondaggio.", - "alreadyVoted": "Hai già votato.", - "pollClosed": "Questo sondaggio è chiuso.", - "cannotVote": "Il voto non è disponibile.", - "textPlaceholder": "La tua risposta…", - "resultsTitle": "Risultati", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} voti totali", - "textResponses": "{count} risposte libere" - }, - "radioContests": { - "title": "Concorsi radio", - "subtitle": "Sintonizzati e partecipa ai nostri ultimi concorsi in onda", - "empty": "Ancora nessun concorso.", - "contestLabel": "Concorso #{id}", - "dateUnknown": "Data sconosciuta" - }, - "radioGiveaways": { - "title": "Omaggi radio", - "subtitle": "Resta in ascolto per avere la possibilità di vincere ai nostri omaggi radio", - "empty": "Ancora nessun omaggio.", - "giveawayLabel": "Omaggio #{id}", - "dateUnknown": "Data sconosciuta" - }, - "radioLeaderboard": { - "title": "Classifica ascoltatori radio", - "subtitle": "I 50 migliori ascoltatori per punti guadagnati sintonizzandosi sulla radio", - "empty": "Ancora nessun punto ascoltatore da mostrare.", - "colRank": "Posizione", - "colAvatar": "Avatar", - "colListener": "Ascoltatore", - "colPoints": "Punti" - }, - "radioApply": { - "title": "Candidati come DJ radiofonico", - "subtitle": "Raccontaci di te e perché saresti perfetto per andare in onda", - "latestTitle": "La tua ultima candidatura", - "statusLabel": "Stato:", - "submittedOn": "· inviata il {date}", - "submitAgain": "Puoi inviare di nuovo qui sotto se i tuoi dati sono cambiati.", - "formTitle": "Modulo di candidatura", - "formSubtitle": "Tutti i campi contrassegnati come obbligatori devono essere compilati", - "realNameLabel": "Nome reale", - "realNamePlaceholder": "Il tuo nome completo", - "ageLabel": "Età", - "availabilityLabel": "Disponibilità", - "availabilityPlaceholder": "In quali giorni e orari puoi trasmettere?", - "musicStyleLabel": "Stile musicale", - "musicStylePlaceholder": "es. House, Pop, Hip-Hop", - "experienceLabel": "Esperienza", - "optional": "(facoltativo)", - "experiencePlaceholder": "Hai esperienze precedenti come DJ o conduttore?", - "motivationLabel": "Motivazione", - "motivationPlaceholder": "Perché vuoi entrare nel team della radio?", - "submitButton": "Invia candidatura", - "success": { - "submitted": "Candidatura inviata — ti ricontatteremo presto." - }, - "errors": { - "invalid": "Compila tutti i campi obbligatori.", - "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", - "error": "Qualcosa è andato storto. Riprova." - } - }, - "settings": { - "accountSettings": "Impostazioni account", - "accountSettingsSubtitle": "Gestisci il tuo profilo, la sicurezza e gli account collegati", - "publicProfile": "Il tuo profilo pubblico", - "noMotto": "Nessun motto", - "noEmail": "Nessuna e-mail registrata", - "changeMotto": "Cambia motto", - "changeMottoSubtitle": "Si aggiorna subito in gioco se sei online", - "mottoPlaceholder": "Il tuo motto", - "saveMotto": "Salva motto", - "securityTitle": "Sicurezza", - "securitySubtitle": "Autenticazione a due fattori", - "securityDescription": "Aggiungi un ulteriore livello di protezione al tuo account.", - "twoFactorLink": "Autenticazione a due fattori" - }, - "settings2fa": { - "backToSettings": "← Impostazioni", - "title": "Autenticazione a due fattori", - "subtitle": "Aggiungi un livello di sicurezza in più con un'app di autenticazione", - "nowEnabled": "L'autenticazione a due fattori è ora attiva. 🔒", - "disabledNotice": "L'autenticazione a due fattori è stata disattivata.", - "badCode": "Codice non valido, riprova.", - "noAppKeyPrefix": "L'autenticazione a due fattori non è disponibile finché non è configurata", - "noAppKeyMiddle": "(la stessa", - "noAppKeySuffix": "Laravel del tuo AtomCMS, così i segreti esistenti restano leggibili).", - "isEnabled": "L'autenticazione a due fattori è attiva", - "onYourAccount": "sul tuo account.", - "disable": "Disattiva 2FA", - "scanOrEnter": "Scansiona o inserisci questa chiave", - "scanInstructions": "Aggiungila a Google Authenticator / Authy, poi inserisci il codice a 6 cifre per confermare.", - "manualKey": "Chiave manuale:", - "codePlaceholder": "Codice a 6 cifre", - "confirm": "Conferma", - "enableIntro": "Aggiungi un livello di sicurezza in più con un'app di autenticazione.", - "enable": "Attiva 2FA", - "rateLimit": "Troppi tentativi. Attendi prima di riprovare." - }, - "title": "Account collegati", - "subtitle": "Collega un account social per poter accedere con un clic", - "connected": "Collegato", - "unavailable": "Non disponibile", - "login": { - "title": "Accedi", - "subtitle": "Bentornato — accedi per entrare nell'hotel.", - "subtitle2fa": "Inserisci il codice a 6 cifre della tua app di autenticazione.", - "usernamePlaceholder": "Nome utente", - "passwordPlaceholder": "Password", - "codePlaceholder": "Codice 2FA", - "pleaseWait": "Attendi…", - "verify": "Verifica", - "signIn": "Accedi", - "or": "oppure", - "noAccount": "Non hai un account?", - "createOne": "Creane uno", - "forgotPassword": "Password dimenticata?", - "errorInvalidCredentials": "Nome utente o password non validi", - "errorInvalid2fa": "Codice 2FA non valido", - "errorUnverified": "Verifica la tua email prima di accedere.", - "errorCaptcha": "Verifica captcha non riuscita. Riprova.", - "welcomeBack": "Bentornato", - "welcomeBackSub": "Accedi per continuare su {hotelName}" - }, - "register": { - "title": "Crea un account", - "subtitle": "Entra nell'hotel — bastano pochi istanti.", - "username": "Nome utente", - "email": "Email", - "password": "Password", - "confirmPassword": "Ripeti la password", - "usernamePlaceholder": "Nome utente", - "emailPlaceholder": "Email", - "passwordPlaceholder": "Password (min 6 caratteri)", - "confirmPasswordPlaceholder": "Ripeti la password", - "selectOutfit": "Scegli il tuo outfit", - "termsAccept": "Ho 18+ anni e accetto i termini e regole di {hotel}.", - "createAccount": "Crea account", - "creatingAccount": "Creazione account...", - "redirecting": "Reindirizzamento al tuo account...", - "alreadyHaveAccount": "Hai già un account? Accedi!", - "register": "Registrati", - "termsError": "Devi accettare i termini e regole per registrarti.", - "usernameError": "Il nome utente è obbligatorio.", - "emailError": "Email valida obbligatoria.", - "passwordError": "La password deve essere di almeno 6 caratteri.", - "confirmPasswordError": "Le password non coincidono.", - "termsRequired": "Devi accettare i termini e le regole.", - "usernameRequired": "Il nome utente è obbligatorio.", - "emailRequired": "Email è obbligatoria.", - "passwordRequired": "La password è obbligatoria.", - "passwordsDontMatch": "Le password non coincidono.", - "alreadyHaveAccountPre": "Hai già un account?", - "alreadyHaveAccountLink": "Accedi", - "whoIsOnline": "Chi è online", - "usersOnline": "{count} online", - "accepted": "Accettato e confermato", - "showPassword": "Mostra", - "hidePassword": "Nascondi", - "accountDetails": "Dettagli dell’account", - "credentials": "Credenziali e sicurezza" - }, - "forgot": { - "title": "Reimposta password", - "subtitle": "Ti invieremo via e-mail un link sicuro per impostare una nuova password.", - "sentNotice": "Se l'indirizzo è registrato, ti abbiamo inviato un link per il reset. Controlla la posta in arrivo.", - "emailPlaceholder": "La tua email", - "sendResetLink": "Invia link di reset", - "backToLogin": "Torna all'accesso", - "errorCaptcha": "Verifica captcha non riuscita. Riprova." - }, - "reset": { - "title": "Imposta una nuova password", - "subtitle": "Scegli una password robusta che non usi altrove.", - "passwordPlaceholder": "Nuova password (min 6 caratteri)", - "resetPassword": "Reimposta password", - "backToLogin": "Torna all'accesso" - }, - "verify": { - "verifiedTitle": "È tutto pronto", - "verifiedSubtitle": "Email verificata", - "verifiedBody": "Il tuo indirizzo email è stato verificato. Ora puoi accedere e giocare.", - "goToLogin": "Vai all'accesso", - "alreadyTitle": "Già verificata", - "alreadySubtitle": "Niente da fare", - "alreadyBody": "Questo indirizzo email è già stato confermato.", - "unavailableTitle": "Riprova tra poco", - "unavailableSubtitle": "Server irraggiungibile", - "unavailableBody": "Non siamo riusciti a raggiungere il server per verificare la tua email. Riprova il link tra un momento.", - "invalidTitle": "Verifica email", - "invalidSubtitle": "Link non valido o scaduto", - "invalidBody": "Questo link di verifica non è valido. Assicurati di aver aperto il link completo della tua email, oppure richiedine uno nuovo.", - "backToLogin": "Torna all'accesso" - }, - "banned": { - "title": "Sei stato bannato", - "subtitle": "Account sospeso", - "body": "Il tuo account è stato sospeso dall'hotel.", - "reasonLabel": "Motivo:", - "permanent": "Questo ban è permanente.", - "expires": "Scade il {date}.", - "contactStaff": "Se ritieni che si tratti di un errore, contatta lo staff." - }, - "maintenance": { - "title": "{hotel} è in manutenzione", - "subtitle": "Torneremo a breve", - "staffCanLogIn": "Lo staff può comunque accedere." - }, - "admin": { - "nav": { - "overview": "Panoramica", - "dashboard": "Dashboard", - "content": "Contenuti", - "articles": "Articoli", - "tags": "Tag", - "navigator": "Navigazione", - "helpCenter": "Centro assistenza", - "advertisements": "Pubblicità", - "writeableBoxes": "Box modificabili", - "photos": "Foto", - "tickets": "Ticket", - "helpTickets": "Ticket centro assistenza", - "events": "Eventi", - "polls": "Sondaggi", - "banners": "Banner", - "prefixes": "Prefissi", - "usersAndAccess": "Utenti e accesso", - "users": "Utenti", - "bans": "Ban", - "ipManagement": "Gestione IP", - "vpn": "VPN", - "applications": "Candidature", - "teams": "Team", - "permissions": "Permessi", - "onlineUsers": "Utenti online", - "moderation": "Moderazione", - "economy": "Economia", - "catalog": "Catalogo", - "shop": "Negozio", - "marketplace": "Mercatino", - "transactions": "Transazioni", - "vouchers": "Buoni", - "subscriptions": "Abbonamenti", - "rareValues": "Valori rari", - "badges": "Distintivi", - "achievements": "Trofei", - "calendar": "Calendario", - "radio": "Radio", - "radioHistory": "Cronologia radio", - "radioBanners": "Banner", - "radioEmbed": "Incorpora", - "radioApiKeys": "Chiavi API", - "radioModeration": "Moderazione", - "radioSettings": "Impostazioni", - "radioMonitoring": "Monitoraggio", - "radioPoints": "Punti", - "radioRanks": "Gradi", - "radioAutodj": "Auto DJ", - "system": "Sistema", - "commandocentrum": "Centro comandi", - "emulator": "Emulatore", - "alerts": "Avvisi", - "logs": "Registri", - "auditLog": "Log di audit", - "analytics": "Analitiche", - "devops": "DevOps", - "wordFilter": "Filtro parole", - "maintenance": "Manutenzione", - "housekeeping": "Archivio permessi", - "rooms": "Stanze", - "emailTemplates": "Template email", - "theme": "Tema", - "media": "Media", - "favicon": "Favicon", - "sounds": "Suoni", - "translations": "Traduzioni", - "import": "Importa", - "settings": "Impostazioni", - "adminMenu": "Menu admin", - "backToSite": "Torna al sito", - "expandAll": "Apri tutte", - "collapseAll": "Chiudi tutte", - "searchMenu": "Cerca nel menu…", - "clearMenuSearch": "Cancella ricerca menu", - "noMenuResults": "Nessuna pagina trovata.", - "hotelManagementPanel": "Pannello di gestione hotel", - "rankLabel": "Grado {rank}", - "hubNewsMedia": "Notizie e media", - "hubSiteContent": "Contenuti sito", - "hubEngagement": "Community", - "hubUsers": "Utenti", - "hubAccess": "Accesso e sicurezza", - "hubCatalog": "Catalogo e rari", - "hubShop": "Negozio e pagamenti", - "hubTools": "Strumenti", - "hubObservability": "Monitoraggio e diagnostica", - "community": "Community", - "monitoring": "Monitoraggio", - "staffAccess": "Gradi e permessi", - "multiAccounts": "Multi-account", - "chatLog": "Log chat", - "commandLog": "Log comandi", - "tradeLog": "Log trade", - "tools": "Strumenti", - "guilds": "Gruppi", - "itemsBase": "Definizioni furni", - "studio": "Studio", - "peopleSupport": "Utenti e assistenza", - "catalogFurniture": "Catalogo e furni", - "communityContent": "Community e contenuti", - "staffPermissions": "Staff e accessi", - "cmsErrors": "Errori CMS", - "themeBuilder": "Editor del tema", - "catalogMaintenance": "Manutenzione catalogo", - "openSidebar": "Apri menu", - "closeSidebar": "Chiudi menu", - "search": { - "placeholder": "Cerca…", - "noResults": "Nessun risultato trovato", - "users": "Utenti", - "articles": "Articoli", - "rooms": "Stanze", - "guilds": "Gruppi", - "shop": "Negozio", - "hint": "Inizia a scrivere per cercare tra utenti, articoli, stanze, gruppi e articoli del negozio" - }, - "operationsCenter": "Centro operazioni" - }, - "dashboard": { - "title": "Dashboard", - "subtitle": "Panoramica hotel e stato in tempo reale", - "playersOnline": "Giocatori online", - "articles": "Articoli", - "activeBans": "Ban attivi", - "database": "Database", - "databaseConnected": "Connesso", - "databaseDown": "Giù", - "usersByRank": "Utenti per grado", - "noAccountsToBreakDown": "Ancora nessun account da analizzare", - "rankLabel": "Grado {rank}", - "rankWithCount": "Grado {rank}: {count} account", - "recentStaffActivity": "Attività recente dello staff", - "viewAll": "Vedi tutto", - "noStaffActivityLogged": "Nessuna attività dello staff ancora registrata", - "totalAccounts": "{count} account totali" - }, - "articles": { - "title": "Articoli", - "subtitle": "Articoli delle news — 50 più recenti", - "newArticle": "+ Nuovo articolo", - "edit": "Modifica", - "delete": "Elimina", - "noArticles": "Ancora nessun articolo", - "confirmDelete": "Sei sicuro di voler eliminare \"{title}\"?", - "colTitle": "Titolo", - "colSlug": "Slug", - "colAuthor": "Autore", - "colCreated": "Creato", - "colActions": "Azioni", - "form": { - "title": "Titolo", - "titlePlaceholder": "Titolo dell'articolo", - "slug": "Slug", - "slugPlaceholder": "slug-url-articolo", - "category": "Categoria", - "categoryPlaceholder": "Seleziona una categoria", - "body": "Corpo", - "bodyPlaceholder": "Scrivi il contenuto dell'articolo…", - "image": "Immagine", - "imagePlaceholder": "https://example.com/immagine.png", - "thumbnail": "Miniatura", - "thumbnailPlaceholder": "https://example.com/miniatura.png", - "published": "Pubblicato", - "featured": "In evidenza", - "save": "Salva articolo", - "saving": "Salvataggio…", - "deleteArticle": "Elimina articolo", - "deleteConfirm": "Questa azione è irreversibile. L'articolo verrà rimosso permanentemente.", - "cancel": "Annulla", - "status": "Stato", - "statusDraft": "Bozza", - "statusScheduled": "Programmato", - "statusPublished": "Pubblicato", - "publishAt": "Data di pubblicazione", - "publishedAt": "Pubblicato il", - "titleRequired": "Inserisci un titolo.", - "titleTooLong": "Il titolo può contenere al massimo 255 caratteri.", - "summaryTooLong": "Il sommario può contenere al massimo 255 caratteri.", - "imageTooLong": "L’URL dell’immagine può contenere al massimo 255 caratteri.", - "invalidStatus": "Seleziona uno stato di pubblicazione valido.", - "publishDateRequired": "Scegli una data di pubblicazione valida.", - "saveFailedReference": "Impossibile salvare la news. Il contenuto è conservato. Riferimento errore: {reference}", - "articleNotFound": "News non trovata.", - "summary": "Sommario", - "imageNotFound": "Immagine non trovata. Inserisci un URL valido o sfoglia i media.", - "imagePreview": "Anteprima immagine della news", - "previewTitle": "Anteprima news", - "previewDescription": "Anteprima del contenuto. La pagina pubblicata usa il tema del sito.", - "previewFrame": "Anteprima contenuto della news", - "autosaveLoading": "Caricamento delle bozze salvate…", - "autosaveReady": "Salvataggio automatico della bozza privata attivo.", - "autosaveSaving": "Salvataggio della bozza privata…", - "autosaveSaved": "Bozza privata salvata. Per applicare le modifiche alla pubblicazione premi Salva.", - "autosaveFailed": "Recupero della bozza non disponibile. Mantieni aperta la pagina e usa Salva; ricarica per riprovare il recupero.", - "autosaveConflict": "Un’altra scheda ha modificato questa bozza. Salvataggio automatico sospeso: ricarica per esaminare la versione più recente.", - "recoveryFound": "È disponibile una bozza privata non completata. Recuperala o eliminala per attivare il salvataggio automatico.", - "recoverDraft": "Recupera bozza", - "discardDraft": "Elimina bozza salvata", - "confirmRecovery": "Sostituire il contenuto nell’editor con la bozza recuperata? Le modifiche non saranno pubblicate finché non salvi.", - "confirmDiscardDraft": "Eliminare definitivamente la bozza di recupero salvata? Il contenuto corrente dell’editor resterà disponibile.", - "revisionHistory": "Versioni salvate precedenti (ultime 20)", - "restoreRevision": "Ripristina nell’editor", - "confirmRevision": "Sostituire il contenuto corrente con questa versione precedente come bozza? Controllala e scegli lo stato di pubblicazione prima di salvare.", - "editConflict": "Questo articolo è stato modificato dopo la tua apertura. Le tue modifiche non sono state applicate. Copia il lavoro, ricarica l’articolo e integra le modifiche prima di salvare di nuovo.", - "retryRecovery": "Ricarica il recupero senza modificare il modulo", - "imageInvalid": "Usa un percorso locale o un URL immagine HTTP/HTTPS senza credenziali.", - "linksInvalid": "Controlla i link del contenuto: sono ammessi link locali, HTTP/HTTPS ed email." - }, - "articlesShown": "Articoli mostrati", - "latest": "Ultimo articolo", - "mostRecentPost": "Pubblicazione più recente", - "recentArticles": "Articoli recenti", - "listActionError": "Non è stato possibile completare l’operazione sulla news.", - "listStatus": "Stato di pubblicazione", - "listStatus_all": "Tutte le news", - "listStatus_draft": "Bozza", - "listStatus_published": "Pubblicata", - "listStatus_scheduled": "Programmata", - "listSearch": "Cerca nel titolo o nel sommario", - "listApply": "Applica", - "listLoading": "Caricamento…", - "listReset": "Reimposta filtri", - "listUnavailable": "Le news non sono al momento disponibili. Riprova.", - "listRetry": "Riprova", - "listTotal": "{count, plural, one {# news trovata} other {# news trovate}}", - "listNoMatches": "Nessuna news corrisponde ai filtri. Modifica la ricerca o reimposta i filtri.", - "listPagination": "Pagine delle news", - "listPrevious": "Precedente", - "listNext": "Successiva", - "listPage": "Pagina {page} di {total}" - }, - "events": { - "newEvent": "+ Nuovo evento", - "createTitle": "Crea evento", - "createSubtitle": "Programma un nuovo evento dell'hotel", - "searchPlaceholder": "Cerca eventi…", - "colId": "ID", - "colTitle": "Titolo", - "colType": "Tipo", - "colStarts": "Inizio", - "colStatus": "Stato", - "colActions": "Azioni", - "statusPublished": "Pubblicato", - "statusDraft": "Bozza", - "statusCancelled": "Annullato", - "statusCompleted": "Completato", - "statRegistrations": "Iscrizioni", - "statPrizes": "Premi", - "statWinners": "Vincitori", - "statTime": "Orario", - "maxPlayers": "Max: {count}", - "timeUpcoming": "In arrivo", - "timePast": "Passato", - "endsAt": "Fine: {date}", - "userFallback": "Utente #{id}", - "registrationsTitle": "Iscrizioni ({count})", - "noRegistrations": "Nessuna iscrizione ancora.", - "noPrizes": "Nessun premio configurato.", - "noWinners": "Nessun vincitore ancora.", - "addPrize": "Aggiungi premio", - "addWinner": "Aggiungi vincitore", - "formEditTitle": "Modifica evento", - "formDetailsTitle": "Dettagli evento", - "formTitle": "Titolo", - "formEventType": "Tipo evento", - "formSelectType": "Seleziona tipo", - "formDescription": "Descrizione", - "formStartsAt": "Inizio", - "formEndsAt": "Fine", - "formSelectStart": "Seleziona data di inizio", - "formSelectEnd": "Seleziona data di fine", - "formMaxPlayers": "Max giocatori", - "formUnlimited": "Illimitato", - "formRoomId": "ID stanza", - "formOptional": "Opzionale", - "formImageUrl": "URL immagine", - "formSaving": "Salvataggio…", - "formUpdate": "Aggiorna evento", - "formCreate": "Crea evento", - "toastUpdated": "Evento aggiornato!", - "toastCreated": "Evento creato!" - }, - "polls": { - "newPoll": "+ Nuovo sondaggio", - "createTitle": "Crea sondaggio", - "createSubtitle": "Crea un nuovo sondaggio o survey della community", - "searchPlaceholder": "Cerca sondaggi…", - "colId": "ID", - "colTitle": "Titolo", - "colStatus": "Stato", - "colType": "Tipo", - "colCreated": "Creato", - "colActions": "Azioni", - "statusActive": "Attivo", - "statusDraft": "Bozza", - "statusClosed": "Chiuso", - "typeMultiple": "Scelta multipla", - "typeSingle": "Scelta singola", - "statVoters": "Votanti totali", - "statQuestions": "Domande", - "statVotes": "Voti totali", - "questionsTitle": "Domande ({count})", - "addQuestion": "Aggiungi domanda", - "noQuestions": "Nessuna domanda ancora. Aggiungi la prima sopra.", - "resultsTitle": "Risultati", - "formEditTitle": "Modifica sondaggio", - "formDetailsTitle": "Dettagli sondaggio", - "formTitle": "Titolo", - "formDescription": "Descrizione", - "formStartsAt": "Inizio", - "formEndsAt": "Fine", - "formSelectStart": "Seleziona data di inizio", - "formSelectEnd": "Seleziona data di fine", - "formShowResults": "Mostra risultati ai votanti", - "formAllowMultiple": "Consenti risposte multiple", - "formSaving": "Salvataggio…", - "formUpdate": "Aggiorna sondaggio", - "formCreate": "Crea sondaggio", - "toastUpdated": "Sondaggio aggiornato!", - "toastCreated": "Sondaggio creato!" - }, - "multiAccounts": { - "minAccounts": "Min. account per cluster", - "resultLimit": "Limite risultati", - "refresh": "Aggiorna", - "noClusters": "Nessun cluster trovato con le soglie attuali." - }, - "devops": { - "noEmulatorErrors": "Nessun errore emulator trovato", - "noRecentErrors": "Nessun errore recente", - "cmsErrors": "Centro errori CMS" - }, - "tags": { - "title": "Tag", - "subtitle": "Tag / categorie degli articoli", - "addTag": "Aggiungi tag", - "name": "Nome", - "namePlaceholder": "Nome del tag", - "backgroundColour": "Colore di sfondo", - "createTag": "Crea tag", - "editTag": "Modifica tag", - "updateTag": "Aggiorna tag", - "deleteTag": "Elimina tag", - "confirmDelete": "Eliminare \"{name}\"?", - "noTags": "Ancora nessun tag", - "colId": "ID", - "colTag": "Tag", - "colColour": "Colore", - "colUsedBy": "Usato da", - "colCreated": "Creato", - "colActions": "Azioni", - "databaseError": "Impossibile caricare i tag. Riprova.", - "totalTags": "Tag totali", - "inUse": "In uso", - "attachedToContent": "Associati a contenuti", - "unused": "Non utilizzati", - "allTags": "Tutti i tag" - }, - "navigation": { - "title": "Navigatore", - "flatCategories": "Categorie piatte", - "publicRooms": "Stanze pubbliche", - "addCategory": "Aggiungi categoria", - "editCategory": "Modifica categoria", - "deleteCategory": "Elimina categoria", - "categoryName": "Nome categoria", - "categoryNamePlaceholder": "es. Relax e Chat", - "categoryOrder": "Ordine", - "roomName": "Nome stanza", - "roomNamePlaceholder": "es. Sala Benvenuto", - "roomId": "ID stanza", - "roomIdPlaceholder": "ID numerico della stanza", - "save": "Salva", - "cancel": "Annulla", - "noCategories": "Ancora nessuna categoria", - "noPublicRooms": "Ancora nessuna stanza pubblica", - "colId": "ID", - "colName": "Nome", - "colOrder": "Ordine", - "colRooms": "Stanze", - "colActions": "Azioni", - "publicFlatcats": "Categorie delle stanze pubbliche", - "markedPublic": "Categorie contrassegnate come pubbliche", - "visibleRooms": "Stanze visibili", - "rows": "righe", - "unnamed": "Stanza senza nome" - }, - "helpCenter": { - "title": "Centro assistenza", - "subtitle": "Gestione voci di supporto e FAQ", - "entries": "Voci", - "newEntry": "+ Nuova voce", - "edit": "Modifica", - "delete": "Elimina", - "noEntries": "Ancora nessuna voce", - "confirmDelete": "Eliminare \"{title}\"?", - "colId": "ID", - "colTitle": "Titolo", - "colCategory": "Categoria", - "colCreated": "Creato", - "colActions": "Azioni", - "form": { - "title": "Titolo", - "titlePlaceholder": "Titolo della voce", - "category": "Categoria", - "categoryPlaceholder": "Seleziona categoria", - "body": "Corpo", - "bodyPlaceholder": "Scrivi la risposta…", - "save": "Salva voce", - "saving": "Salvataggio…", - "deleteEntry": "Elimina voce", - "cancel": "Annulla" - }, - "withButton": "Con pulsante", - "smallBoxes": "Riquadri piccoli" - }, - "ads": { - "title": "Pubblicità", - "subtitle": "Gestisci annunci dell'hotel e banner promozionali", - "newAd": "+ Nuovo annuncio", - "edit": "Modifica", - "delete": "Elimina", - "noAds": "Ancora nessun annuncio", - "confirmDelete": "Eliminare questo annuncio?", - "deleteSuccess": "Annuncio eliminato!", - "deleteError": "Eliminazione annuncio non riuscita.", - "adsCount": "Annunci totali", - "latest": "Ultimo", - "mostRecentAd": "Annuncio più recente", - "allAds": "Tutti gli annunci", - "colPreview": "Anteprima", - "colId": "ID", - "colName": "Nome", - "colImage": "Immagine", - "colUrl": "URL", - "colViews": "Visualizzazioni", - "colStatus": "Stato", - "colCreated": "Creato", - "colActions": "Azioni", - "form": { - "name": "Nome", - "namePlaceholder": "Nome annuncio", - "image": "URL immagine", - "imagePlaceholder": "https://example.com/banner.png", - "url": "URL di destinazione", - "urlPlaceholder": "https://example.com", - "enabled": "Attivo", - "save": "Salva annuncio", - "saving": "Salvataggio…", - "deleteAd": "Elimina annuncio", - "cancel": "Annulla" - } - }, - "writeableBoxes": { - "title": "Box modificabili", - "subtitle": "Pannelli di contenuto mostrati nell'hotel e nel CMS", - "newBox": "Nuovo box", - "edit": "Modifica", - "delete": "Elimina", - "noBoxes": "Ancora nessun box modificabile", - "confirmDelete": "Eliminare questo box?", - "colId": "ID", - "colName": "Nome", - "colLocation": "Posizione", - "colUpdated": "Aggiornato", - "colActions": "Azioni", - "form": { - "name": "Nome", - "namePlaceholder": "Nome del box", - "location": "Posizione", - "locationPlaceholder": "es. homepage, sidebar", - "content": "Contenuto", - "contentPlaceholder": "Scrivi il contenuto del box…", - "enabled": "Attivo", - "save": "Salva box", - "saving": "Salvataggio…", - "deleteBox": "Elimina box", - "cancel": "Annulla", - "iconEmoji": "Icona o emoji" - }, - "totalBoxes": "Riquadri totali", - "active": "Attivo", - "shownOnHomePage": "Mostrato nella pagina iniziale", - "position": "Posizione", - "boxes": "Riquadri di contenuto", - "hidden": "Nascosto", - "hide": "Nascondi", - "activate": "Attiva" - }, - "photos": { - "title": "Moderazione foto", - "subtitle": "Foto recenti dalla fotocamera di gioco", - "purgeHint": "L'eliminazione rimuove la riga DB e, se possibile, il file locale sotto /public. Gli URL CDN esterni non vengono purgati.", - "delete": "Elimina", - "approve": "Approva", - "noPhotos": "Nessuna foto da moderare", - "confirmDelete": "Eliminare questa foto permanentemente?", - "colId": "ID", - "colPreview": "Anteprima", - "colUser": "Utente", - "colRoom": "Stanza", - "colTimestamp": "Data", - "colActions": "Azioni", - "photoAlt": "Foto utente #{id}", - "byUser": "di {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" - }, - "users": { - "title": "Utenti", - "subtitle": "Sfoglia, cerca e gestisci account dell'hotel", - "search": "Cerca", - "searchPlaceholder": "Cerca per nome utente, email o ID…", - "searchResults": "{count, plural, one {# risultato} other {# risultati}} per \"{query}\"", - "noResults": "Nessun utente trovato", - "colId": "ID", - "colUsername": "Nome utente", - "colEmail": "Email", - "colRank": "Grado", - "colOnline": "Online", - "colRegistered": "Registrato", - "colLastOnline": "Ultimo accesso", - "colActions": "Azioni", - "yes": "Sì", - "no": "No", - "edit": "Modifica", - "setRank": "Imposta grado", - "disconnect": "Disconnetti", - "alert": "Avviso", - "ban": "Banna", - "detail": { - "title": "Utente: {username}", - "subtitle": "Dettagli account e gestione", - "overview": "Panoramica", - "actions": "Azioni", - "username": "Nome utente", - "email": "Email", - "motto": "Motto", - "rank": "Grado", - "credits": "Crediti", - "duckets": "Duckets", - "diamonds": "Diamanti", - "online": "Online", - "registered": "Registrato", - "lastOnline": "Ultimo accesso", - "ipAddress": "Indirizzo IP", - "machineId": "ID macchina", - "sendAlert": "Invia avviso", - "sendMessage": "Invia messaggio", - "disconnectUser": "Disconnetti utente", - "banUser": "Banna utente", - "resetPassword": "Reimposta password", - "deleteUser": "Elimina utente", - "confirmDelete": "Sei sicuro di voler eliminare {username}? Questa azione è irreversibile.", - "tabInfo": "Informazioni account", - "tabBadges": "Distintivi ({count})", - "tabRooms": "Stanze ({count})", - "tabSanctions": "Sanzioni ({count})", - "tabActivity": "Attività" - }, - "editForm": { - "title": "Modifica utente: {username}", - "subtitle": "Modifica dettagli account", - "username": "Nome utente", - "usernamePlaceholder": "Nome utente", - "email": "Email", - "emailPlaceholder": "utente@example.com", - "motto": "Motto", - "mottoPlaceholder": "Motto utente", - "rank": "Grado", - "credits": "Crediti", - "duckets": "Duckets", - "diamonds": "Diamanti", - "save": "Salva modifiche", - "saving": "Salvataggio…", - "cancel": "Annulla" - }, - "presentation": { - "users": "Utenti", - "edit": "Modifica", - "view": "Visualizza", - "rank": "Grado {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Bannato", - "credits": "crediti", - "diamonds": "diamanti", - "duckets": "duckets", - "pixels": "pixel", - "rooms": "Stanze", - "messages": "Messaggi", - "trades": "Scambi", - "accountDetails": "Dettagli account", - "registered": "Registrazione", - "lastLogin": "Ultimo accesso", - "ipRegister": "IP di registrazione", - "ipCurrent": "IP attuale", - "machineId": "ID dispositivo", - "email": "Email", - "gender": "Genere", - "never": "Mai", - "findIp": "Cerca utenti con questo IP", - "enabled": "Attiva", - "disabled": "Disattiva", - "unavailable": "Non disponibile", - "noBadges": "Nessun distintivo assegnato" - }, - "create": { - "newUser": "Nuovo utente", - "title": "Crea utente", - "description": "Crea subito l’account con un avatar predefinito e 5.000 crediti, pixel, duckets e diamanti.", - "username": "Nome utente", - "email": "Email", - "password": "Password", - "rank": "Grado", - "rankOption": "Grado {rank}", - "motto": "Motto (facoltativo)", - "usernamePlaceholder": "NuovoHabbo", - "passwordPlaceholder": "Almeno 6 caratteri", - "mottoPlaceholder": "Sono nuovo qui!", - "generate": "Genera", - "passwordGenerated": "Password generata nel campo password.", - "required": "Nome utente, email e password sono obbligatori.", - "invalidUsername": "Usa da 3 a 20 caratteri: lettere, numeri, _ o -.", - "passwordLength": "La password deve contenere almeno 6 caratteri.", - "created": "Utente {username} creato." - }, - "overview": { - "title": "Riepilogo", - "hint": "Fino a 5 record recenti per fonte. Sono mostrate solo le sezioni a cui hai accesso.", - "restricted": "Non hai i permessi per visualizzare i dati operativi.", - "sanctions": "Ban recenti", - "mute": "Mute attivo", - "tickets": "Ticket di assistenza", - "help": "Richieste al centro assistenza", - "reports": "Segnalazioni in gioco", - "transactions": "Pagamenti", - "purchases": "Acquisti dal catalogo", - "activity": "Azioni dello staff registrate", - "openModule": "Apri gestione", - "purchaseHint": "Quantità e costi nelle valute registrate.", - "purchaseDetail": "Quantità: {amount} · Crediti: {credits} · Punti: {points} (tipo {type})", - "activityHint": "Voci del registro staff relative a questo account. Non è la cronologia completa delle attività del giocatore.", - "muteUntil": "Mute fino al {date}", - "error": "Impossibile caricare questa fonte. Ricarica la pagina per riprovare.", - "empty": "Nessun record trovato.", - "status": { - "active": "Attivo", - "expired": "Scaduto", - "open": "Aperto", - "closed": "Chiuso", - "reported": "Utente segnalato", - "reporter": "Segnalante" - } - } - }, - "bans": { - "title": "Ban", - "subtitle": "Gestisci ban di account, IP e macchina", - "newBan": "Nuovo ban", - "edit": "Modifica", - "delete": "Elimina", - "noBans": "Ancora nessun ban", - "confirmDelete": "Rimuovere questo ban?", - "colId": "ID", - "colValue": "Valore", - "colType": "Tipo", - "colReason": "Motivo", - "colBannedBy": "Bannato da", - "colExpires": "Scade", - "colCreated": "Creato", - "colActions": "Azioni", - "form": { - "value": "Valore", - "valuePlaceholder": "Nome utente, IP o ID macchina", - "type": "Tipo", - "typeUser": "Utente", - "typeIp": "IP", - "typeMachine": "Macchina", - "reason": "Motivo", - "reasonPlaceholder": "Motivo del ban", - "expiresAt": "Scade il", - "permanent": "Permanente", - "save": "Salva ban", - "saving": "Salvataggio…", - "cancel": "Annulla" - }, - "activeBans": "Ban attivi", - "permanent": "Ban permanenti", - "accountBans": "Ban degli account", - "userIdPlaceholder": "ID utente", - "typeAccount": "Account", - "typeIp": "Indirizzo IP", - "typeMachine": "Dispositivo", - "typeSuper": "Account, IP e dispositivo", - "hoursPlaceholder": "Durata in ore", - "reasonPlaceholder": "Motivo del ban", - "ban": "Banna utente", - "colUserId": "ID utente", - "lift": "Revoca ban" - }, - "ip": { - "title": "Gestione IP", - "subtitle": "Gestisci whitelist e blacklist IP", - "whitelist": "Whitelist", - "blacklist": "Blacklist", - "addIp": "Aggiungi IP", - "ipAddress": "Indirizzo IP", - "ipAddressPlaceholder": "es. 127.0.0.1", - "reason": "Motivo", - "reasonPlaceholder": "Motivo dell'inserimento", - "add": "Aggiungi", - "remove": "Rimuovi", - "confirmRemove": "Rimuovere questo IP dalla {list}?", - "noWhitelistedIps": "Nessun IP in whitelist", - "noBlacklistedIps": "Nessun IP in blacklist", - "colIp": "IP", - "colReason": "Motivo", - "colAdded": "Aggiunto", - "colActions": "Azioni", - "whitelisted": "Indirizzi IP consentiti", - "blacklisted": "Indirizzi IP bloccati", - "asnPlaceholder": "ASN (facoltativo)", - "colAsn": "ASN" - }, - "vpn": { - "title": "Rilevamento VPN / Proxy", - "subtitle": "Configura le impostazioni di rilevamento VPN e proxy", - "enabled": "Attivo", - "apiKey": "Chiave API", - "apiKeyPlaceholder": "La tua chiave API per il rilevamento VPN", - "apiKeyHint": "Lascia vuoto per disattivare", - "blockOnDetect": "Blocca al rilevamento", - "blockOnDetectHint": "Blocca automaticamente gli utenti rilevati dietro VPN o proxy", - "save": "Salva impostazioni", - "saving": "Salvataggio…", - "settingsSaved": "Impostazioni VPN salvate con successo", - "protection": "Protezione VPN", - "on": "Attiva", - "off": "Disattivata", - "providerLabel": "Provider: {provider}", - "notScreened": "Le connessioni non vengono controllate per l’uso di VPN.", - "settings": "Impostazioni VPN", - "provider": "Provider", - "providerHint": "Scegli il servizio per controllare le connessioni in entrata.", - "blockMessage": "Messaggio per le connessioni bloccate", - "blockMessagePlaceholder": "Disattiva la VPN e riprova.", - "blockMessageHint": "Mostrato quando una connessione viene bloccata dalla protezione VPN.", - "rawIpTitle": "Elenchi degli indirizzi IP", - "rawIpDescription": "Gestisci i singoli indirizzi in Gestione IP.", - "openIpManagement": "Apri gestione IP" - }, - "tickets": { - "title": "Supporto CMS", - "subtitle": "Ticket interni CMS (assegnatario, priorita, workflow staff). Non sono i ticket del help center /help.", - "noTickets": "Nessun ticket attivo", - "searchPlaceholder": "Cerca oggetto, utente, categoria o ID…", - "presetActive": "Attivi", - "statusOpen": "Aperti", - "statusInProgress": "In corso", - "statusWaiting": "In attesa", - "statusClosed": "Chiusi", - "colTicket": "Ticket", - "colStatus": "Stato", - "colPriority": "Priorità", - "colAssigned": "Assegnato", - "colDate": "Data", - "meta": "di {user} · {count} msg · {category}", - "queueHint": "Questa coda e il supporto CMS. I ticket del help center pubblici stanno nella tab Help center.", - "queueOtherCta": "Apri help center", - "queueCounts": "Aperti qui: {here} · Help center: {other}", - "awaitingStaff": "In attesa dello staff", - "assignedMine": "Assegnati a me", - "unassigned": "Non assegnati", - "assignedAny": "Assegnati", - "lastReplyAge": "Dall’ultima risposta", - "ageMinutes": "{count} min fa", - "ageHours": "{count} ore fa", - "ageDays": "{count} giorni fa" - }, - "helpTickets": { - "title": "Ticket help center", - "subtitle": "Ticket aperti dai player su /help/tickets. Separati dal supporto CMS.", - "noTickets": "Nessun ticket aperto nel centro assistenza", - "searchPlaceholder": "Cerca titolo, utente o ID…", - "presetOpen": "Aperti", - "presetAll": "Tutti", - "statusOpen": "Aperti", - "statusClosed": "Chiusi", - "colTicket": "Ticket", - "colStatus": "Stato", - "colUser": "Utente", - "colCreated": "Creato", - "colUpdated": "Aggiornato", - "meta": "di {user} · {count} risposte", - "backToList": "Torna all'elenco", - "threadTitle": "Conversazione", - "staffBadge": "Staff", - "replyPlaceholder": "Rispondi come staff…", - "replySubmit": "Invia risposta", - "replyHint": "Ctrl+Invio per inviare.", - "closeSubmit": "Chiudi ticket", - "reopenSubmit": "Riapri ticket", - "closedHint": "Questo ticket è chiuso.", - "actionsTitle": "Azioni", - "requesterTitle": "Richiedente", - "detailsTitle": "Dettagli", - "rankLabel": "Grado {rank}", - "messageCountLabel": "Messaggi", - "success": { - "replied": "Risposta inviata.", - "closed": "Ticket chiuso.", - "reopened": "Ticket riaperto.", - "banLifted": "Ban revocato e ticket chiuso." - }, - "queueHint": "Questa coda e il help center pubblico. I ticket del supporto CMS stanno nella tab Supporto CMS.", - "queueOtherCta": "Apri supporto CMS", - "queueCounts": "Aperti qui: {here} · Supporto CMS: {other}", - "liftBanSubmit": "Revoca il ban del richiedente e chiudi", - "requesterBanned": "Richiedente bannato" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "Ticket CFH in-game", - "noTickets": "Nessun ticket CFH", - "searchPlaceholder": "Cerca problema, utente o ID…", - "noDescription": "Nessuna descrizione", - "roomMeta": "Stanza #{room} · {when}", - "stateOpen": "Aperti", - "statePicked": "Presi in carico", - "stateClosed": "Chiusi", - "colId": "ID", - "colIssue": "Problema", - "colSender": "Mittente", - "colReported": "Segnalato", - "colMod": "Mod", - "colStatus": "Stato" - }, - "applications": { - "title": "Candidature staff", - "subtitle": "Candidature allo staff in sospeso e revisionate", - "pending": "In sospeso", - "approved": "Approvate", - "rejected": "Respinte", - "noApplications": "Ancora nessuna candidatura", - "colId": "ID", - "colApplicant": "Candidato", - "colPosition": "Posizione", - "colStatus": "Stato", - "colSubmitted": "Inviata", - "colActions": "Azioni", - "review": "Revisiona", - "approve": "Approva", - "reject": "Respindi", - "confirmApprove": "Approvare {username} per {position}?", - "confirmReject": "Respindere la candidatura di {username} per {position}?", - "detail": { - "title": "Candidatura di {username}", - "subtitle": "Per {position}", - "about": "Informazioni sul candidato", - "message": "Messaggio di candidatura", - "status": "Stato", - "submitted": "Inviata", - "noMessage": "Nessun messaggio fornito" - }, - "applicationsTitle": "Candidature ({count})", - "userNumber": "Utente #{id}", - "rankLabel": "Grado {rank}" - }, - "teams": { - "title": "Team", - "subtitle": "Definisci nomi e descrizioni dei gradi dello staff", - "addRank": "Aggiungi grado", - "editRank": "Modifica grado", - "deleteRank": "Elimina grado", - "noTeams": "Ancora nessuna definizione di grado", - "confirmDelete": "Eliminare la definizione del grado {id}?", - "colId": "ID", - "colRank": "Grado", - "colName": "Nome", - "colBadge": "Distintivo", - "colColour": "Colore", - "colActions": "Azioni", - "form": { - "rankId": "ID grado", - "rankIdPlaceholder": "ID numerico del grado", - "name": "Nome", - "namePlaceholder": "es. Amministratore", - "badge": "Codice distintivo", - "badgePlaceholder": "es. ADM001", - "colour": "Colore", - "colourPlaceholder": "es. #ff0000", - "save": "Salva definizione team", - "saving": "Salvataggio…", - "cancel": "Annulla" - }, - "teamRanks": "Gradi dello staff", - "visible": "Visibili", - "hidden": "Nascosti", - "newTeamRank": "Nuovo grado dello staff", - "rankName": "Nome del grado", - "rankNamePlaceholder": "Ad esempio: Moderatore", - "badgeCode": "Codice del distintivo", - "badgeCodePlaceholder": "Ad esempio: ADM", - "jobDescription": "Descrizione dell’incarico", - "jobDescriptionPlaceholder": "Descrivi questo incarico dello staff", - "staffColor": "Colore dello staff", - "staffColorPlaceholder": "Ad esempio: #3366cc", - "hiddenRank": "Nascondi dalla pagina staff", - "createTeam": "Crea grado dello staff", - "ranksTitle": "Gradi dello staff ({count})", - "badge": "Distintivo", - "color": "Colore", - "visibility": "Visibilità", - "delete": "Elimina" - }, - "permissions": { - "title": "Permessi", - "subtitle": "Questo e il controllo accessi live per pannelli admin e mod", - "addPermission": "Aggiungi permesso", - "editPermission": "Modifica permesso", - "deletePermission": "Elimina permesso", - "noPermissions": "Ancora nessun permesso configurato", - "confirmDelete": "Eliminare questo permesso?", - "colId": "ID", - "colRank": "Grado", - "colPermission": "Permesso", - "colCreated": "Creato", - "colActions": "Azioni", - "form": { - "rankId": "ID grado", - "rankIdPlaceholder": "Grado minimo richiesto", - "permission": "Chiave permesso", - "permissionPlaceholder": "es. admin.articles.manage", - "save": "Salva permesso", - "saving": "Salvataggio…", - "cancel": "Annulla" - } - }, - "catalog": { - "title": "Catalogo", - "subtitle": "Sfoglia e gestisci pagine e articoli del catalogo", - "pages": "Pagine", - "items": "Articoli", - "addPage": "Aggiungi pagina", - "editPage": "Modifica pagina", - "deletePage": "Elimina pagina", - "addItem": "Aggiungi articolo", - "editItem": "Modifica articolo", - "deleteItem": "Elimina articolo", - "noPages": "Ancora nessuna pagina catalogo", - "noItems": "Nessun articolo in questa pagina", - "confirmDeletePage": "Eliminare la pagina catalogo \"{name}\"?", - "confirmDeleteItem": "Eliminare questo articolo?", - "colId": "ID", - "colName": "Nome", - "colIcon": "Icona", - "colOrder": "Ordine", - "colItems": "Articoli", - "colEnabled": "Attivo", - "colActions": "Azioni", - "colItemId": "ID articolo", - "colItemName": "Nome articolo", - "colCostCredits": "Costo (crediti)", - "colCostPoints": "Costo (punti)", - "colLimited": "Limitato", - "pageForm": { - "name": "Nome", - "namePlaceholder": "Nome pagina", - "icon": "ID icona", - "iconPlaceholder": "ID numerico icona", - "order": "Ordine", - "enabled": "Attivo", - "parent": "Pagina padre", - "parentNone": "Nessuna (radice)", - "save": "Salva pagina", - "saving": "Salvataggio…", - "cancel": "Annulla" - }, - "itemForm": { - "itemId": "ID articolo", - "itemName": "Nome articolo", - "costCredits": "Costo in crediti", - "costDuckets": "Costo in duckets", - "costDiamonds": "Costo in diamanti", - "limitedStack": "Dimensione lotto limitato", - "limitedSold": "Limitati venduti", - "save": "Salva articolo", - "saving": "Salvataggio…", - "cancel": "Annulla" - }, - "workspace": { - "diagnostics": "Diagnostica", - "editor": "Editor", - "normal": "Catalogo", - "tree": "Albero", - "table": "Tabella", - "manager": "Gestione catalogo", - "backToCategories": "Torna alle categorie", - "retryPage": "Riprova caricamento pagina", - "retryItems": "Riprova caricamento offerte", - "hotel": "Hotel", - "sent": "Richiesta di aggiornamento inviata", - "sendFailed": "Invio aggiornamento fallito", - "unknown": "Stato non ancora disponibile", - "disabled": "Non configurato", - "exportFailed": "Esportazione fallita", - "queued": "Esportazione in attesa", - "exported": "Esportazione completata", - "retryHotel": "Riprova aggiornamento hotel", - "retryStatus": "Stato non disponibile — riprova", - "saved": "Salvato", - "globalSearch": "Cerca nel catalogo", - "searchPlaceholder": "Categoria, offerta, classname o ID", - "searchNoResults": "Nessun risultato", - "searchFailed": "Ricerca non riuscita. Riprova.", - "searching": "Ricerca in corso...", - "category": "Categoria", - "offer": "Offerta", - "duplicate": { - "title": "Duplica categoria", - "description": "Copia questa categoria, tutte le sottocategorie e le relative offerte.", - "name": "Nome della nuova categoria", - "destination": "Categoria di destinazione", - "disabled": "La radice copiata parte disabilitata e nascosta. Le sottocategorie mantengono le impostazioni; definizioni degli arredi e asset sono condivisi.", - "counts": "{pages} categorie e {offers} offerte", - "summary": "“{name}” sotto {destination}", - "cancel": "Annulla", - "working": "Operazione in corso…", - "confirm": "Conferma duplicazione", - "preview": "Anteprima copia", - "saved": "Categoria e offerte duplicate", - "savedPending": "Copia salvata; aggiornamento hotel in attesa", - "failed": "Duplicazione non riuscita", - "root": "Radice del catalogo", - "search": "Cerca categorie…", - "empty": "Nessuna categoria trovata", - "suggested": "Suggerite", - "all": "Tutte le categorie", - "draftBlocked": "Salva o annulla le modifiche alla categoria prima di duplicarla." - }, - "unsaved": "Modifiche non salvate", - "fullEditor": "Editor completo", - "saveHint": "Le modifiche alla categoria non sono salvate. Usa Salva o Ctrl+S.", - "access": { - "enabled": "Categoria attiva", - "enabledHint": "Rende questa categoria disponibile nel catalogo.", - "visible": "Visibile nel menu", - "visibleHint": "Mostra questa categoria nel menu del catalogo.", - "club": "Solo utenti HC", - "clubHint": "Limita l’accesso agli utenti con abbonamento HC.", - "yes": "Sì", - "no": "No" - } - }, - "bulk": { - "previewCount": "Verranno modificate {count} offerte su {total}.", - "success": "{count} offerte aggiornate.", - "selectOffer": "Seleziona offerta {name} (#{id})", - "pageEmpty": "Nessuna categoria trovata.", - "clearSelection": "Svuota selezione", - "disabledReason": "Salva o annulla le modifiche in sospeso e attendi la fine delle operazioni prima di modificare in blocco.", - "operation": "Operazione", - "loadingDestinations": "Caricamento categorie…", - "cancel": "Annulla", - "pagePlaceholder": "Seleziona la categoria di destinazione…", - "noChanges": "I valori selezionati corrispondono già. Nessuna modifica da salvare.", - "costPoints": "Prezzo in punti", - "chooseFields": "Seleziona almeno un campo da modificare.", - "pageAll": "Tutte le categorie", - "offer": "Offerta", - "costCredits": "Crediti", - "invalidPrice": "Inserisci un numero valido. Le operazioni di impostazione e aggiunta richiedono numeri interi.", - "modes": { - "set": "Imposta valore", - "add": "Aggiungi o sottrai", - "percent": "Varia in percentuale" - }, - "fieldHint": "Verranno modificati solo i campi selezionati.", - "currencies": { - "0": "Duckets", - "5": "Diamanti", - "101": "Fiocchi di neve", - "103": "Cuori", - "104": "Stelle", - "105": "Conchiglie" - }, - "currency": "Valuta dei punti", - "button": "Modifica in blocco ({count})", - "description": "{count} offerte selezionate. Controlla l'anteprima prima di salvare.", - "confirm": "Conferma e salva {count} offerte", - "beforeAfter": "Ogni cella mostra il valore attuale → il nuovo valore.", - "requestFailed": "Richiesta non riuscita. Aggiorna l'anteprima prima di riprovare.", - "priceHint": "Usa valori o percentuali negativi per ridurre i prezzi. Le percentuali vengono arrotondate all'intero più vicino; i prezzi finali non possono essere negativi.", - "selectedCount": "{count} offerte selezionate tra le categorie", - "value": "Valore", - "unknownCurrency": "Tipo {type}", - "becomes": "diventa", - "title": "Modifica le offerte selezionate", - "preview": "Anteprima modifiche", - "retryDestinations": "Riprova a caricare le categorie", - "chooseDestination": "Seleziona una categoria di destinazione.", - "pageSuggested": "Suggerite", - "previewTitle": "Controlla le modifiche in blocco", - "visibilityHint": "La visibilità dipende dalla categoria. Le offerte spostate seguono la visibilità della categoria di destinazione.", - "percentage": "Percentuale (%)", - "destination": "Categoria di destinazione", - "pageSearch": "Cerca categorie…", - "back": "Rivedi le modifiche", - "selectionLimit": "Seleziona al massimo 500 offerte per operazione.", - "refreshing": "Aggiornamento delle offerte modificate…", - "undo": "Annulla", - "undoHint": "Puoi ripristinare le singole offerte anche dalla cronologia delle modifiche.", - "undoSuccess": "Ripristinate {count} offerte." - }, - "discovery": { - "searchPlaceholder": "Nome, classname, ID furni o #ID offerta…", - "filterLabel": "Filtra offerte", - "filters": { - "all": "Tutte le offerte", - "free": "Gratuite", - "paid": "A pagamento", - "bundles": "Pacchetti", - "limited": "Edizioni limitate" - }, - "shown": "({count} visibili)", - "selected": "{count} selezionate", - "reset": "Reimposta filtri", - "results": "{count} offerte visibili su {total}.", - "selectionHint": "Cambiare ricerca o filtro azzera la selezione.", - "noResults": "Nessuna offerta corrisponde alla ricerca e al filtro attuali.", - "selectVisible": "Seleziona tutte le offerte visibili" - }, - "packages": { - "openPackages": "Pacchetti catalogo", - "title": "Pacchetti catalogo", - "description": "Prepara modifiche a categorie e prezzi in una bozza separata. Controlla il catalogo prima di pubblicare.", - "createPackage": "Nuovo pacchetto", - "createDraft": "Crea bozza", - "draftCreated": "Bozza del pacchetto creata. Il catalogo live non è stato modificato.", - "refresh": "Aggiorna elenco", - "searchPackages": "Cerca pacchetti", - "noPackages": "Nessun pacchetto corrisponde alla ricerca.", - "choosePackage": "Apri un pacchetto o crea una bozza dalle categorie esistenti.", - "name": "Nome pacchetto", - "mode": "Modalità pubblicazione", - "update": "Aggiorna categorie esistenti", - "copy": "Crea copie", - "updateHint": "La pubblicazione applica il pacchetto alle categorie e offerte esistenti.", - "copyHint": "La pubblicazione crea nuove categorie e offerte sotto il genitore scelto. I riferimenti ai furni vengono mantenuti.", - "sourceCategories": "Categorie di origine", - "packageLimits": "Sono incluse le sottocategorie. Ogni pacchetto supporta fino a 200 categorie e 500 offerte.", - "searchCategories": "Cerca categorie", - "selectedCategories": "Selezionate: {count}", - "targetParent": "Categoria genitore di destinazione", - "rootCategory": "Radice del catalogo", - "draft": "Bozza", - "published": "Pubblicato", - "editDraft": "Modifica bozza", - "catalogPreview": "Anteprima catalogo", - "showBaseline": "Mostra l’istantanea originale salvata", - "changes": "Prima e dopo", - "entry": "Voce", - "field": "Campo", - "before": "Prima", - "after": "Dopo", - "noChanges": "Nessun campo modificato rispetto all’istantanea originale.", - "copyReview": "Alla pubblicazione sarà copiato l’intero pacchetto, anche senza campi modificati. La tabella elenca le modifiche all’istantanea originale.", - "updateReview": "Queste modifiche della bozza aggiorneranno le voci esistenti dopo la pubblicazione.", - "saveDraft": "Salva bozza", - "saveHint": "Il salvataggio mantiene il pacchetto come bozza. Salva tutte le modifiche prima di richiedere la verifica di pubblicazione.", - "draftSaved": "Bozza salvata. La pubblicazione è un passaggio separato.", - "reviewPublication": "Verifica pubblicazione", - "publicationImpact": "La pubblicazione interessa {pages} categorie e {offers} offerte.", - "conflicts": "La pubblicazione è bloccata da conflitti. Risolvili prima di richiedere una nuova verifica.", - "readyToPublish": "La versione salvata ha superato la verifica. La pubblicazione modifica il catalogo live.", - "publish": "Pubblica pacchetto", - "confirmPublish": "Pubblicare ora questo pacchetto verificato nel catalogo live?", - "publishedSuccess": "Pacchetto pubblicato: {pages} categorie e {offers} offerte.", - "staleReview": "Questo pacchetto è cambiato in un’altra sessione. Riaprilo per verificare l’ultima versione salvata.", - "unsaved": "Modifiche non salvate", - "discardChanges": "Scartare le modifiche non salvate al pacchetto e continuare?", - "working": "Operazione in corso…", - "requestFailed": "La richiesta non è riuscita. Riprova.", - "invalidFields": "Controlla nomi obbligatori, layout e campi numerici interi prima di salvare.", - "category": "Categoria", - "caption": "Nome categoria", - "iconImage": "ID icona categoria", - "minRank": "Rango minimo", - "orderNum": "Ordine di visualizzazione", - "pageLayout": "Layout pagina", - "enabled": "Abilitata", - "visible": "Visibile", - "clubOnly": "Solo membri Club", - "vipOnly": "Solo membri VIP", - "offers": "Offerte ({count})", - "offer": "Offerta", - "catalogName": "Nome offerta", - "costCredits": "Crediti", - "costPoints": "Punti", - "pointsType": "ID valuta punti", - "amount": "Quantità", - "searchOffers": "Cerca offerte", - "currentCategoryOffers": "Solo la categoria selezionata", - "selectMatching": "Seleziona tutte le offerte filtrate ({count})", - "clearSelection": "Svuota selezione", - "selectedOffers": "Offerte selezionate: {count}", - "select": "Seleziona", - "selectOffer": "Seleziona offerta #{id}", - "noOffers": "Nessuna offerta corrisponde ai filtri.", - "bulkPrices": "Prezzi della bozza in blocco ({count} selezionate)", - "bulkHint": "Controlla i prezzi selezionati, poi accettali nella bozza. Il catalogo live resta invariato fino alla pubblicazione.", - "operation": "Operazione", - "set": "Imposta valore", - "add": "Aggiungi o sottrai", - "percent": "Variazione percentuale", - "value": "Valore", - "reviewBulk": "Anteprima prezzi", - "invalidBulk": "Scegli numeri validi e almeno un’offerta. I prezzi risultanti devono essere non negativi e nell’intervallo supportato.", - "acceptBulk": "Accetta prezzi nella bozza", - "previous": "Precedente", - "next": "Successiva" - }, - "integrity": { - "title": "Integrità del catalogo", - "description": "Controlla riferimenti, percorsi delle categorie, identificativi e icone dei furni. Il controllo non modifica i record.", - "catalog": "Catalogo", - "normal": "Catalogo normale", - "bc": "Builders Club", - "refresh": "Ripeti controllo", - "working": "Controllo in corso…", - "failed": "Non è stato possibile completare l’operazione. Riprova.", - "stalePreview": "Il catalogo è cambiato dopo l’anteprima. Genera una nuova anteprima prima di applicare le correzioni.", - "applied": "{count} categorie ricollegate alla radice del catalogo.", - "iconsUnavailable": "Impossibile leggere la cartella delle icone. La disponibilità delle icone non è stata verificata.", - "healthy": "Nessun problema rilevato nei controlli completati.", - "total": "Rilevati {count} problemi. Visualizzati {shown}.", - "open": "Apri", - "reference": "Riferimento: {value}", - "repairHint": "Visualizza le categorie il cui genitore non esiste più. L’applicazione sposta solo queste categorie alla radice e conserva tutti i record. Cicli, furni mancanti, icone e conflitti di identificativi richiedono una verifica individuale.", - "preview": "Anteprima correzioni sicure", - "planned": "Verranno spostate {count} categorie:", - "parentChange": "genitore #{from} → radice del catalogo", - "apply": "Applica le correzioni mostrate", - "legacyTitle": "Azioni di manutenzione avanzata", - "legacyHint": "Questi strumenti di manutenzione esistenti possono riscrivere identificativi e unire o rimuovere record duplicati. Sono separati dal controllo di integrità non distruttivo e dalla correzione dei genitori mostrata in anteprima.", - "issues": { - "missing_furniture": "Offerta con furni mancanti", - "invalid_item_ids": "Identificativi furni non validi", - "missing_page": "Offerta con categoria mancante", - "unreachable_page": "Categoria non raggiungibile", - "category_cycle": "Percorso categoria con ciclo", - "missing_icon": "Icona furni mancante", - "invalid_offer_id": "Identificativo offerta non valido", - "duplicate_offer_id": "Identificativo offerta ripetuto" - } - } - }, - "shop": { - "title": "Negozio", - "subtitle": "Gestisci pacchetti e ordini", - "packages": "Pacchetti", - "orders": "Ordini", - "recentOrders": "Ordini recenti", - "paidOrders": "Ordini pagati", - "ordersHint": "Ultime transazioni PayPal (ultime 25)", - "pageOf": "Pagina {page} di {lastPage}", - "packagesTotal": "{count} pacchetti", - "newPackage": "+ Nuovo pacchetto", - "edit": "Modifica", - "delete": "Elimina", - "viewOrder": "Vedi", - "noPackages": "Ancora nessun pacchetto nel negozio", - "noOrders": "Ancora nessun ordine", - "confirmDelete": "Eliminare questo pacchetto?", - "colId": "ID", - "colName": "Nome", - "colPrice": "Prezzo", - "colCredits": "Crediti", - "colDuckets": "Duckets", - "colDiamonds": "Diamanti", - "colRank": "Grado", - "colPosition": "Posizione", - "colCurrency": "Valuta", - "colType": "Tipo", - "colSold": "Venduti", - "colEnabled": "Attivo", - "colActions": "Azioni", - "colOrderId": "ID ordine", - "colCustomer": "Cliente", - "colPackage": "Pacchetto", - "colTransaction": "Transazione", - "colUser": "Utente", - "colDescription": "Descrizione", - "colAmount": "Importo", - "colStatus": "Stato", - "colDate": "Data", - "statusPending": "In sospeso", - "statusCompleted": "Completato", - "statusRefunded": "Rimborsato", - "form": { - "name": "Nome", - "namePlaceholder": "Nome pacchetto", - "description": "Descrizione", - "descriptionPlaceholder": "Descrizione pacchetto", - "price": "Prezzo", - "currency": "Valuta", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Tipo", - "typeCredits": "Crediti", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamanti", - "typeBadge": "Distintivo", - "typeFurni": "Mobile", - "typeRank": "Grado", - "amount": "Importo", - "badgeCode": "Codice distintivo", - "badgeCodePlaceholder": "es. VIP001", - "rankId": "ID grado", - "furniItems": "Mobili", - "enabled": "Attivo", - "save": "Salva pacchetto", - "saving": "Salvataggio…", - "cancel": "Annulla", - "infoPlaceholder": "Descrivi il contenuto del pacchetto", - "iconPlaceholder": "URL dell’icona", - "colorPlaceholder": "Ad esempio: #3366cc", - "costsPlaceholder": "Prezzo", - "creditsPlaceholder": "Numero di crediti", - "ducketsPlaceholder": "Numero di duckets", - "diamondsPlaceholder": "Numero di diamanti", - "giveRankPlaceholder": "ID grado (0 per nessuno)", - "badgesPlaceholder": "Codici dei distintivi separati da punto e virgola", - "positionPlaceholder": "Ordine di visualizzazione", - "create": "Crea pacchetto", - "deletePackage": "Elimina pacchetto" - }, - "newPackageTitle": "Nuovo pacchetto del negozio", - "backToShop": "Torna al negozio", - "editPackageTitle": "Modifica pacchetto del negozio" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Annunci marketplace hotel", - "activeListings": "Annunci attivi", - "soldListings": "Venduti", - "filterActive": "Attivi", - "filterSold": "Venduti", - "empty": "Nessun annuncio marketplace da mostrare.", - "loadError": "Impossibile caricare i dati marketplace (database non disponibile).", - "cancel": "Annulla annuncio", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Venditore", - "colPrice": "Prezzo", - "colListed": "Pubblicato", - "colSold": "Venduto il", - "colActions": "Azioni" - }, - "guilds": { - "title": "Gruppi", - "subtitle": "Gruppi hotel e membri", - "totalGuilds": "Gruppi", - "searchPlaceholder": "Cerca per nome, descrizione o ID…", - "search": "Cerca", - "empty": "Nessun gruppo trovato.", - "loadError": "Impossibile caricare i gruppi (database non disponibile).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Nome", - "colOwner": "Proprietario", - "colMembers": "Membri", - "colCreated": "Creato", - "colThreads": "Thread forum", - "colRoom": "Stanza", - "colUser": "Utente", - "colLevel": "Livello", - "colJoined": "Iscritto", - "members": "Membri", - "noMembers": "Nessun membro.", - "back": "Torna ai gruppi", - "viewPublic": "Apri pagina pubblica", - "disband": "Sciogli gruppo", - "listHeading": "Guilds ({count})", - "edit": "Modifica gruppo", - "save": "Salva", - "saving": "Salvataggio…", - "updated": "Gruppo aggiornato", - "updateError": "Impossibile aggiornare il gruppo", - "formName": "Nome", - "formDescription": "Descrizione", - "formState": "Stato", - "formForum": "Forum", - "formReadForum": "Leggere il forum", - "formPostMessages": "Pubblicare messaggi", - "formPostThreads": "Creare discussioni", - "formModForum": "Moderare il forum" - }, - "transactions": { - "title": "Transazioni", - "subtitle": "Registro pagamenti PayPal", - "noTransactions": "Ancora nessuna transazione", - "totalTransactions": "Transazioni totali", - "pagePaid": "Pagate (questa pagina)", - "pageFailed": "Fallite (questa pagina)", - "searchPlaceholder": "Cerca per utente, ID transazione o pacchetto…", - "presetPaid": "Pagate", - "presetFailed": "Fallite", - "colId": "ID", - "colUser": "Utente", - "colPayer": "Pagatore", - "colAmount": "Importo", - "colCurrency": "Valuta", - "colPackage": "Pacchetto", - "colStatus": "Stato", - "colTransaction": "ID transazione", - "colDate": "Data", - "colActions": "Azioni", - "statusCompleted": "Completato", - "statusPending": "In sospeso", - "statusFailed": "Fallito", - "statusRefunded": "Rimborsato", - "detail": { - "title": "Transazione #{id}", - "paypalId": "ID PayPal", - "payerEmail": "Email pagatore", - "grossAmount": "Importo lordo", - "fee": "Commissione", - "netAmount": "Importo netto" - } - }, - "vouchers": { - "title": "Buoni negozio", - "subtitle": "Gestisci codici buono riscattabili", - "vouchers": "Buoni", - "active": "Attivi", - "usedUp": "Esauriti", - "expired": "Scaduti", - "newVoucher": "+ Nuovo buono", - "edit": "Modifica", - "delete": "Elimina", - "noVouchers": "Ancora nessun buono", - "confirmDeleteTitle": "Elimina buono", - "confirmDelete": "Eliminare il buono \"{code}\"?", - "created": "Buono creato", - "deleted": "Buono eliminato", - "createError": "Impossibile creare il buono", - "deleteError": "Impossibile eliminare il buono", - "statusActive": "Attivo", - "statusUsedUp": "Esaurito", - "statusExpired": "Scaduto", - "colId": "ID", - "colCode": "Codice", - "colValue": "Valore", - "colAmount": "Importo", - "colType": "Tipo", - "colUses": "Usi / Max", - "colStatus": "Stato", - "colExpires": "Scade", - "colCreated": "Creato", - "colActions": "Azioni", - "form": { - "code": "Codice", - "codePlaceholder": "es. ESTATE2025", - "value": "Valore", - "amount": "Crediti", - "amountPlaceholder": "es. 100", - "type": "Tipo", - "typeCredits": "Crediti", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamanti", - "typeBadge": "Distintivo", - "typeFurni": "Mobile", - "typeRank": "Grado", - "badgeCode": "Codice distintivo", - "badgeCodePlaceholder": "es. VIP001", - "rankId": "ID grado", - "maxUses": "Usi massimi", - "maxUsesPlaceholder": "0 = illimitato", - "expiresAt": "Scade il", - "enabled": "Attivo", - "create": "Crea buono", - "save": "Salva buono", - "saving": "Salvataggio…", - "cancel": "Annulla" - }, - "updated": "Voucher aggiornato", - "updateError": "Impossibile aggiornare il voucher" - }, - "subscriptions": { - "title": "Abbonamenti", - "subtitle": "Abbonamenti ricorrenti attivi", - "noSubscriptions": "Nessun abbonamento attivo", - "cancel": "Annulla", - "confirmCancel": "Annullare l'abbonamento di {username}?", - "colId": "ID", - "colUser": "Utente", - "colPackage": "Pacchetto", - "colAmount": "Importo", - "colInterval": "Intervallo", - "colStarted": "Iniziato", - "colNextBilling": "Prossima fatturazione", - "colStatus": "Stato", - "colActions": "Azioni", - "statusActive": "Attivo", - "statusCancelled": "Annullato", - "statusExpired": "Scaduto", - "activeSubs": "Abbonamenti attivi", - "types": "Tipi di abbonamento", - "expiringSoon": "In scadenza", - "activeSubscriptions": "Abbonamenti attivi", - "colSubId": "ID abbonamento", - "colUserId": "ID utente", - "colType": "Tipo", - "colExpires": "Scadenza" - }, - "rareValues": { - "title": "Valori rari", - "subtitle": "Gestisci categorie di valori rari e prezzi articoli", - "categories": "Categorie", - "items": "Articoli", - "addCategory": "Aggiungi categoria", - "editCategory": "Modifica categoria", - "deleteCategory": "Elimina categoria", - "noCategories": "Ancora nessuna categoria di valori rari", - "confirmDeleteCategory": "Eliminare la categoria \"{name}\" e tutti i suoi articoli?", - "colId": "ID", - "colName": "Nome", - "colItems": "Articoli", - "colUpdated": "Aggiornato", - "colActions": "Azioni", - "colItemName": "Nome articolo", - "colCredits": "Crediti", - "colPoints": "Punti", - "colPointType": "Tipo punti", - "categoryForm": { - "name": "Nome", - "namePlaceholder": "Nome categoria", - "save": "Salva categoria", - "saving": "Salvataggio…", - "cancel": "Annulla" - }, - "itemForm": { - "itemName": "Nome articolo", - "itemNamePlaceholder": "es. Trono", - "credits": "Valore in crediti", - "points": "Valore in punti", - "pointType": "Tipo punti", - "pointTypeDuckets": "Duckets", - "pointTypeDiamonds": "Diamanti", - "save": "Salva articolo", - "saving": "Salvataggio…", - "cancel": "Annulla", - "itemIdPlaceholder": "ID furni", - "iconPlaceholder": "URL dell’icona", - "creditsPlaceholder": "Crediti", - "currencyValuePlaceholder": "Valore in valuta", - "addValue": "Aggiungi valore" - }, - "badgePlaceholder": "Codice del distintivo della categoria", - "priorityPlaceholder": "Priorità", - "addCategoryButton": "Aggiungi categoria", - "badgeLabel": "Distintivo: {badge}", - "priorityLabel": "Priorità: {priority}", - "itemCount": "{count} furni", - "colItemId": "ID furni", - "colCurrencyValue": "Valore in valuta", - "colCurrency": "Valuta", - "colIcon": "Icona", - "noValuesInCategory": "Nessun valore ancora presente in questa categoria.", - "editValue": "Modifica valore" - }, - "badges": { - "title": "Distintivi", - "subtitle": "Carica, assegna e gestisci il catalogo distintivi", - "upload": "Carica", - "giveBadge": "Assegna distintivo", - "catalogue": "Catalogo", - "uploadTitle": "Carica un nuovo distintivo", - "uploadSubtitle": "Carica un file immagine del distintivo", - "badgeCode": "Codice distintivo", - "badgeCodePlaceholder": "es. VIP001", - "badgeFile": "File distintivo", - "badgeFileHint": "PNG o GIF, consigliato 40x40", - "uploadButton": "Carica", - "uploading": "Caricamento…", - "giveTitle": "Assegna distintivo a utente", - "giveSubtitle": "Concedi un distintivo a un utente specifico", - "username": "Nome utente", - "usernamePlaceholder": "Nome utente destinatario", - "giveButton": "Assegna distintivo", - "giving": "Assegnazione…", - "catalogueTitle": "Catalogo distintivi", - "catalogueSubtitle": "Tutti i distintivi disponibili nell'hotel", - "noBadges": "Nessun distintivo nel catalogo", - "search": "Cerca distintivi", - "searchPlaceholder": "Cerca per codice o nome…", - "colCode": "Codice", - "colImage": "Immagine", - "colName": "Nome", - "colDescription": "Descrizione", - "colActions": "Azioni", - "uploadedMessage": "Distintivo {code} caricato.", - "errorMessage": "Caricamento non riuscito: {error}", - "userIdPlaceholder": "ID utente" - }, - "achievements": { - "title": "Trofei", - "subtitle": "Elenco di sola lettura dei trofei di gioco", - "noAchievements": "Nessun trofeo configurato", - "colId": "ID", - "colName": "Nome", - "colCategory": "Categoria", - "colLevels": "Livelli", - "colReward": "Ricompensa", - "colProgress": "Progresso", - "levelLabel": "Livello {level}", - "rewardCredits": "{count} crediti", - "rewardPoints": "{count} {points}", - "achievementRows": "Livelli dei traguardi", - "distinctAchievements": "Traguardi distinti", - "categories": "Categorie", - "colLevel": "Livello", - "colRewardType": "Tipo di ricompensa", - "colRewardAmount": "Quantità della ricompensa", - "colPoints": "Punti" - }, - "calendar": { - "title": "Campagne calendario", - "subtitle": "Elenco di sola lettura delle campagne ed eventi del calendario", - "noCampaigns": "Ancora nessuna campagna calendario", - "colId": "ID", - "colName": "Nome", - "colStart": "Inizio", - "colEnd": "Fine", - "colType": "Tipo", - "colReward": "Ricompensa", - "colActions": "Azioni", - "detail": { - "title": "Campagna: {name}", - "subtitle": "Dettagli evento calendario", - "days": "Giorni", - "dayLabel": "Giorno {day}", - "reward": "Ricompensa", - "noDays": "Nessun giorno configurato per questa campagna", - "campaignMeta": "#{id} · {days} giorni · inizio {date}", - "disabled": "Disattivata", - "enabled": "Attiva", - "locksExpired": "Giorni scaduti bloccati", - "rewards": "Ricompense", - "noRewards": "Nessuna ricompensa configurata.", - "colId": "ID", - "colProduct": "Prodotto", - "colItem": "Furni", - "colCredits": "Crediti", - "colPixels": "Duckets", - "colPoints": "Punti", - "colBadge": "Distintivo", - "colSubscription": "Abbonamento", - "typeLabel": "Tipo {type}", - "rewardCount": "{count} ricompense" - }, - "campaigns": "Campagne", - "enabled": "Campagne attive", - "totalRewards": "Ricompense totali", - "statusEnabled": "Attiva", - "statusDisabled": "Disattivata", - "campaignMeta": "#{id} · {days} giorni · {rewards} ricompense", - "startsAt": "Inizio: {date}", - "locksExpired": "Giorni scaduti bloccati" - }, - "radio": { - "title": "Moderazione radio", - "subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).", - "moderation": "Moderation", - "shouts": "Saluti", - "applications": "Candidature", - "schedules": "Programmazioni", - "settings": "Impostazioni", - "embed": "Incorpora", - "ranks": "Gradi", - "history": "Cronologia", - "apiKeys": "Chiavi API", - "points": "Punti", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Monitoraggio radio", - "subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.", - "stream": "Stream", - "online": "Online", - "offline": "Offline", - "notConfigured": "Not configured", - "nowPlaying": "Now playing", - "nowPlayingApi": "Now-playing API", - "listenersApi": "Listeners API", - "listeners": "Ascoltatori", - "currentSong": "Brano in corso", - "bitrate": "Bitrate", - "status": "Stato", - "noNowPlayingHint": "no now-playing API set", - "noListenersHint": "no listeners API set", - "endpointDiagnostics": "Endpoint diagnostics", - "diagnosticsLegend": "OK: raggiungibile · WARN: non configurato · ERROR: richiesta non riuscita o scaduta.", - "streamUrl": "Stream URL", - "unreachable": "unreachable", - "refresh": "Aggiorna" - }, - "user": "User", - "message": "Message", - "posted": "Posted", - "realName": "Real Name", - "age": "Age", - "style": "Style", - "applied": "Applied", - "day": "Day", - "start": "Start", - "end": "End", - "show": "Show", - "status": "Stato", - "active": "active", - "inactive": "inactive", - "hidden": "hidden", - "activeSchedules": "Active schedules", - "noShouts": "Nessun saluto da moderare", - "noApplications": "No applications submitted.", - "noSchedules": "No schedules configured.", - "deleteShout": "Elimina", - "confirmDeleteShout": "Eliminare questo saluto?", - "pendingApplications": "Candidature in sospeso", - "settingsForm": { - "title": "Radio Settings", - "subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", - "enabled": "Enabled", - "disabled": "Disabled", - "totalKeys": "Total keys", - "configured": "Configured", - "curatedHint": "curated keys with a value", - "customKeys": "Custom keys", - "saveAll": "Save all", - "singleKey": "Add / overwrite a single key", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "value", - "commentPlaceholder": "comment (optional)", - "saveSingle": "Save", - "otherSettings": "Other radio settings", - "dbError": "Could not load settings (database unavailable). Defaults will be created on save." - }, - "embedPage": { - "title": "Radio Embed", - "subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).", - "streamUrl": "Stream URL", - "configured": "Configured", - "missing": "Missing", - "radioName": "Radio name", - "nowPlayingApi": "Now-playing API", - "set": "Set", - "notSet": "Not set", - "noStreamUrl": "No stream URL configured", - "noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.", - "goToSettings": "Go to Radio Settings", - "livePreview": "Live preview", - "livePreviewText": "Questo è il lettore audio mostrato ai visitatori. Avvia la riproduzione per verificare che lo streaming sia raggiungibile.", - "source": "Source", - "audioSnippet": "Audio player snippet", - "audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.", - "iframeSnippet": "Iframe wrapper snippet", - "iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.", - "audioUnsupported": "Your browser does not support the audio element." - }, - "banners": { - "title": "Banner", - "heading": "Radio Banners", - "description": "Promotional banners shown on the radio page, ordered by sort order.", - "addBanner": "Aggiungi banner", - "createBanner": "Create banner", - "deleteBanner": "Elimina banner", - "noBanners": "No banners yet — add one above.", - "existing": "Existing banners ({count})", - "save": "Save", - "delete": "Delete", - "byUser": "by user {id}", - "active": "active", - "hidden": "hidden", - "bannerAlt": "Radio banner", - "statusActive": "Active", - "statusHidden": "Hidden", - "dbError": "Could not load banners (database unavailable).", - "form": { - "imagePath": "Image path / URL", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Title", - "description": "Description", - "sortOrder": "Sort order", - "active": "Active" - } - }, - "ranksForm": { - "title": "Gradi radio", - "subtitle": "DJ / staff ranks assignable on radio applications.", - "dbError": "Could not load ranks (database unavailable).", - "active": "Active", - "addRank": "Add rank", - "name": "Name", - "badgeCode": "Badge code", - "description": "Description", - "createRank": "Create rank", - "existing": "Existing ranks ({count})", - "noRanks": "No ranks yet — add one above.", - "activeLabel": "active", - "inactiveLabel": "inactive", - "save": "Save", - "deleteRank": "Delete rank #{id}" - }, - "historyPage": { - "title": "Radio Play History", - "subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.", - "dbError": "Could not load radio history (database unavailable).", - "showsLogged": "Shows logged", - "onAirNow": "On air now", - "uniqueDjs": "Unique DJs", - "peakListeners": "Peak listeners", - "empty": "No radio history recorded yet.", - "showLog": "Show log ({count})", - "colDj": "DJ", - "colShow": "Show", - "colStarted": "Started", - "colEnded": "Ended", - "colAirtime": "Airtime", - "colListeners": "Listeners", - "colNotes": "Notes", - "onAir": "on air" - }, - "apiKeysForm": { - "title": "Chiavi API", - "subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.", - "dbError": "Could not load API keys (database unavailable).", - "totalKeys": "Total keys", - "active": "Active", - "inactive": "Inactive", - "generateKey": "Genera nuova chiave", - "generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.", - "name": "Name", - "namePlaceholder": "AzureCast bridge", - "rateLimit": "Rate limit (requests/min)", - "allowedIps": "Allowed IPs (optional)", - "allowedIpsPlaceholder": "comma-separated, blank = any", - "generate": "Genera", - "existingKeys": "Existing keys ({count})", - "noKeys": "No API keys yet — generate one above.", - "colName": "Name", - "colKey": "Chiave", - "colAllowedIps": "Allowed IPs", - "colRateLimit": "Rate limit", - "colLastUsed": "Last used", - "colExpires": "Expires", - "colStatus": "Status", - "colActions": "Azioni", - "maskedHint": "Only the first 8 characters are shown", - "any": "any", - "activeLabel": "active", - "inactiveLabel": "inactive", - "deactivate": "Deactivate", - "activate": "Activate", - "delete": "Delete" - }, - "pointsForm": { - "title": "Configurazione punti ascoltatore", - "subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", - "saved": "Impostazioni salvate.", - "points": "Points", - "enabled": "Enabled", - "disabled": "Disabled", - "perMinute": "Per minute", - "paidIn": "paid in {currency}", - "maxPerDay": "Max / day", - "unlimited": "Unlimited", - "minListeners": "Min listeners", - "settings": "Settings", - "pointsEnabled": "Points enabled", - "pointsEnabledHint": "Master switch for awarding listener points.", - "currency": "Currency", - "currencyHint": "Which wallet the points are paid into.", - "pointsPerMinute": "Points per minute", - "pointsPerMinuteHint": "Amount awarded for each full minute of listening.", - "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", - "minListenersHint": "Points are only awarded when at least this many people are tuned in.", - "save": "Salva impostazioni punti" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.", - "dbError": "Could not load the AutoDJ playlist (database unavailable).", - "tracks": "Tracks", - "active": "Active", - "inactive": "Inactive", - "addTrack": "Add track", - "titlePlaceholder": "Track title", - "artist": "Artist", - "album": "Album", - "artworkUrl": "Artwork URL", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Duration (seconds)", - "durationPlaceholder": "e.g. 215", - "sortOrder": "Sort order", - "playlist": "Playlist ({count})", - "noTracks": "No AutoDJ tracks yet — add one above.", - "colOrder": "Order", - "colTitle": "Title", - "colArtist": "Artist", - "colAlbum": "Album", - "colDuration": "Duration", - "colPlays": "Plays", - "colLastPlayed": "Last played", - "colStatus": "Status", - "colActions": "Actions", - "activeLabel": "active", - "inactiveLabel": "inactive", - "deactivate": "Deactivate", - "activate": "Activate", - "delete": "Delete", - "trackTitle": "Title" - }, - "moderationPage": { - "title": "DJ Moderation", - "subtitle": "Review and remove radio shouts (50 most recent).", - "recentShouts": "Recent Shouts ({count})" - } - }, - "commandocentrum": { - "title": "Centro comandi", - "subtitle": "Diagnostica, controlli RCON e gestione utenti", - "diagnostics": "Diagnostica", - "rcon": "RCON", - "userActions": "Azioni utente", - "diagnosticsTitle": "Diagnostica emulatore", - "memoryUsage": "Utilizzo memoria", - "uptime": "Uptime", - "onlineUsers": "Utenti online", - "roomsLoaded": "Stanze caricate", - "refresh": "Aggiorna", - "rconTitle": "Comandi RCON", - "rconPlaceholder": "Inserisci comando RCON…", - "rconSend": "Invia", - "rconSending": "Invio…", - "rconResponse": "Risposta", - "userActionsTitle": "Azioni utente", - "username": "Nome utente", - "usernamePlaceholder": "Nome utente destinatario", - "action": "Azione", - "execute": "Esegui", - "actions": { - "disconnect": "Disconnetti", - "alert": "Invia avviso", - "giveCredits": "Dai crediti", - "giveBadge": "Dai distintivo", - "givePoints": "Dai punti", - "ban": "Banna", - "kick": "Espelli" - }, - "messagePlaceholder": "Messaggio (per avvisi)…", - "amountPlaceholder": "Importo…", - "badgePlaceholder": "Codice distintivo…", - "commandCategories": "Categorie comandi", - "groups": { - "hotel": "Hotel", - "players": "Giocatori", - "rewards": "Valute e regali", - "advanced": "Avanzati" - }, - "executing": "Esecuzione comando…", - "chooseCommand": "Scegli un’operazione. I valori inseriti restano salvati cambiando categoria.", - "refreshStatus": "Aggiorna stato", - "checkedAt": "Verificato alle {time}", - "serviceAttention": "Alcuni servizi richiedono attenzione", - "servicesHealthy": "I servizi principali rispondono", - "cmsErrors": "Centro errori CMS", - "readFailed": "Impossibile caricare i dati", - "emulatorConfig": "Connessione emulatore", - "emailConfig": "Invio email", - "configured": "Configurato", - "playersOnline": "Giocatori online", - "totalAccounts": "{count} account totali", - "dbUnavailable": "Database non disponibile", - "emulator": "Emulatore", - "online": "Online", - "offline": "Offline", - "rconReachable": "Connessione all’emulatore disponibile", - "rconNotResponding": "L’emulatore non risponde", - "database": "Database", - "connected": "Connesso", - "down": "Non disponibile", - "queriesResponding": "Il database risponde alle richieste", - "cannotReachDb": "Impossibile connettersi al database", - "emulatorErrors": "Errori emulatore", - "last50Logged": "Fino agli ultimi 50 eventi registrati", - "serverInfo": "Informazioni server", - "node": "Node.js", - "platform": "Piattaforma", - "appUptime": "Tempo di attività applicazione", - "heapUsed": "Memoria heap utilizzata", - "rss": "Memoria processo (RSS)", - "hostUptime": "Tempo di attività server", - "load1m": "Carico medio (1 min)", - "cpus": "CPU logiche", - "systemDiagnostics": "Diagnostica sistema", - "connectionHealthy": "Connessione funzionante", - "unreachable": "Non raggiungibile", - "emulatorRcon": "Connessione emulatore", - "respondingToPing": "Risponde ai controlli di stato", - "noResponse": "Nessuna risposta", - "notConfigured": "Non configurato", - "twoFaEncryptionKey": "Chiave di cifratura 2FA", - "appKeyConfigured": "Chiave di cifratura configurata", - "appKeyMissing": "Chiave di cifratura mancante", - "maintenanceMode": "Modalità manutenzione", - "siteIsInMaintenance": "Il sito è in manutenzione", - "siteIsLive": "Il sito è aperto", - "recentStaffActivity": "Attività recenti dello staff", - "noStaffActivity": "Nessuna attività recente dello staff", - "colWhen": "Data e ora", - "colStaff": "Membro dello staff", - "colAction": "Azione", - "colDescription": "Descrizione", - "recentEmulatorErrors": "Errori recenti dell’emulatore", - "noEmulatorErrors": "Nessun errore dell’emulatore registrato", - "colType": "Tipo", - "colVersion": "Versione", - "colStacktrace": "Dettagli errore", - "truncated": "Ulteriori righe omesse", - "empty": "Nessun dettaglio disponibile", - "defaultGiftMessage": "Un regalo per te!", - "emulatorControls": "Comandi emulatore", - "updateCatalog": "Ricarica catalogo", - "updateCatalogDesc": "Ricarica il catalogo dal database.", - "updateWordFilter": "Ricarica filtro parole", - "updateWordFilterDesc": "Applica le ultime impostazioni del filtro parole.", - "updateNavigator": "Ricarica navigatore", - "updateNavigatorDesc": "Ricarica i dati del navigatore stanze.", - "hotelAlert": "Avviso hotel", - "hotelAlertDesc": "Invia un messaggio a tutti i giocatori online.", - "messageToBroadcast": "Messaggio per tutti i giocatori", - "sendAlert": "Invia avviso", - "disconnectDesc": "Disconnetti il giocatore selezionato dall’hotel.", - "userId": "ID utente", - "usernameRequired": "Nome utente (obbligatorio)", - "alertDesc": "Invia un avviso privato a un giocatore.", - "alertMessage": "Messaggio di avviso", - "forwardToRoom": "Sposta giocatore in stanza", - "forwardDesc": "Invia il giocatore selezionato in una stanza specifica.", - "roomId": "ID stanza", - "forwardUser": "Sposta giocatore", - "giveCredits": "Assegna crediti", - "giveCreditsDesc": "Aggiungi crediti al saldo del giocatore selezionato.", - "amount": "Quantità", - "giveDuckets": "Assegna duckets", - "giveDucketsDesc": "Aggiungi duckets al saldo del giocatore selezionato.", - "giveDiamonds": "Assegna diamanti", - "giveDiamondsDesc": "Aggiungi diamanti al saldo del giocatore selezionato.", - "giveBadge": "Assegna distintivo", - "giveBadgeDesc": "Assegna un distintivo al giocatore selezionato.", - "badgeCode": "Codice distintivo", - "setMotto": "Modifica motto", - "setMottoDesc": "Aggiorna il motto del giocatore selezionato.", - "newMotto": "Nuovo motto", - "setRank": "Modifica rank", - "setRankDesc": "Aggiorna il rank del giocatore selezionato.", - "rankPlaceholder": "Rank (1–10)", - "executeCommand": "Esegui comando emulatore", - "executeCommandDesc": "Esegui un comando per il giocatore selezionato.", - "commandPlaceholder": "Comando", - "sendGift": "Invia regalo", - "sendGiftDesc": "Invia un furno in regalo al giocatore selezionato.", - "furniId": "ID furno", - "giftMessage": "Messaggio del regalo" - }, - "emulator": { - "title": "Configurazione emulatore", - "subtitle": "Visualizza e modifica impostazioni emulatore e testi di localizzazione", - "settings": "Impostazioni", - "texts": "Testi", - "search": "Cerca", - "searchPlaceholder": "Cerca chiavi…", - "noSettings": "Nessuna impostazione trovata", - "noTexts": "Nessun testo trovato", - "edit": "Modifica", - "save": "Salva", - "saving": "Salvataggio…", - "cancel": "Annulla", - "colKey": "Chiave", - "colValue": "Valore", - "colType": "Tipo", - "colActions": "Azioni", - "editDialog": { - "title": "Modifica: {key}", - "value": "Valore", - "valuePlaceholder": "Inserisci valore…", - "save": "Salva modifiche", - "cancel": "Annulla" - }, - "settingsKeys": "Impostazioni", - "textKeys": "Voci di testo", - "keysCount": "{count} chiavi", - "addOverwriteSetting": "Aggiungi o aggiorna un’impostazione", - "key": "Chiave", - "value": "Valore", - "showingFirst": "Prime {count} voci mostrate", - "addOverwriteText": "Aggiungi o aggiorna un testo", - "truncatedHint": "Mostrate {shown} voci su {total}." - }, - "alerts": { - "title": "Avvisi", - "subtitle": "Invia avvisi a tutto l'hotel e visualizza avvisi recenti", - "sendAlert": "Invia avviso hotel", - "recentAlerts": "Avvisi recenti ({count})", - "noRecentAlerts": "Nessun avviso recente", - "form": { - "title": "Titolo avviso", - "titlePlaceholder": "es. Manutenzione server tra 10 minuti", - "message": "Messaggio avviso", - "messagePlaceholder": "Scrivi il messaggio dell'avviso…", - "type": "Tipo", - "typeHotel": "Avviso a tutto l'hotel", - "typeStaff": "Solo staff", - "urgent": "Urgente", - "send": "Invia avviso", - "sending": "Invio…", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Titolo", - "colSentBy": "Inviato da", - "colType": "Tipo", - "colDate": "Data", - "colActions": "Azioni", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Attività dello staff", - "subtitle": "Traccia di controllo delle azioni dello staff nel pannello admin", - "noLogs": "Nessuna attività dello staff ancora registrata", - "colId": "ID", - "colUser": "Utente", - "colAction": "Azione", - "colTarget": "Destinatario", - "colDescription": "Descrizione", - "colIp": "IP", - "colTimestamp": "Data", - "filterByUser": "Filtra per utente…", - "filterByAction": "Filtra per azione…", - "clearFilters": "Pulisci filtri", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "sconosciuto", - "emptyValue": "-", - "colTime": "Ora", - "audit": { - "colTargetId": "ID destinazione", - "colDetails": "Dettagli", - "colDate": "Data", - "searchPlaceholder": "Cerca per azione o destinazione…", - "changesCount": "{count} modifiche", - "notAvailable": "N/D", - "filtersTitle": "Filtra il registro attività", - "filterActor": "Autore (nome esatto o ID)", - "filterAction": "Azione esatta", - "filterFrom": "Dal giorno (UTC)", - "filterTo": "Fino al giorno (UTC)", - "filtersHint": "Le date includono l’intera giornata in UTC. Azioni e nomi utente devono corrispondere esattamente. Le attività più recenti compaiono per prime.", - "applyFilters": "Applica filtri", - "resetFilters": "Reimposta filtri", - "invalidDetails": "I dettagli di questa vecchia registrazione non sono visualizzabili.", - "beforeValue": "Prima", - "afterValue": "Dopo", - "exportHint": "Il CSV esporta la pagina filtrata corrente, fino a 100 registrazioni.", - "operation": "Operazione" - }, - "chat": { - "colMessage": "Messaggio", - "colRoomId": "ID stanza", - "searchPlaceholder": "Cerca per username o messaggio…" - }, - "commands": { - "colCommand": "Comando", - "colParams": "Parametri", - "searchPlaceholder": "Cerca per username, comando o parametri…" - }, - "trades": { - "colUserOne": "Utente uno", - "colUserTwo": "Utente due", - "colStatus": "Stato", - "statusUnknown": "sconosciuto", - "searchPlaceholder": "Cerca per username…" - }, - "history": { - "preview": "Anteprima ripristino", - "title": "Ripristina una modifica registrata", - "description": "Confronta i valori attuali con quelli precedenti prima di confermare. Vengono ripristinati solo impostazioni della categoria, prezzi dell’offerta o contenuto della notizia. Record eliminati e gerarchia delle categorie sono esclusi.", - "loading": "Caricamento…", - "unavailable": "La revisione non è disponibile oppure non hai il permesso di ripristinarla.", - "conflict": "Questo record è cambiato dopo la modifica selezionata. Aggiorna e controlla lo storico più recente prima di ripristinare.", - "failed": "Ripristino non completato. Ricarica la pagina e riprova.", - "field": "Campo", - "current": "Valore attuale", - "restore": "Valore da ripristinare", - "confirm": "Conferma ripristino", - "restoring": "Ripristino in corso…", - "fields": { - "caption": "Nome categoria", - "captionSave": "Nome interno categoria", - "pageLayout": "Layout categoria", - "enabled": "Abilitata", - "visible": "Visibile", - "clubOnly": "Solo membri Club", - "vipOnly": "Solo membri VIP", - "minRank": "Grado minimo", - "iconImage": "Icona categoria", - "iconColor": "Colore icona", - "pageHeadline": "Immagine intestazione", - "pageTeaser": "Immagine anteprima", - "pageSpecial": "Immagine speciale", - "pageText1": "Testo principale", - "pageText2": "Testo secondario", - "pageTextDetails": "Testo dettagli", - "pageTextTeaser": "Testo anteprima", - "includes": "Categorie incluse", - "costCredits": "Prezzo in crediti", - "costPoints": "Prezzo in punti", - "pointsType": "Valuta dei punti", - "title": "Titolo notizia", - "slug": "Indirizzo notizia", - "image": "Immagine notizia", - "shortStory": "Sommario", - "fullStory": "Contenuto articolo", - "status": "Stato pubblicazione", - "publishAt": "Pubblicazione programmata", - "publishedAt": "Data pubblicazione", - "pageId": "Categoria" - } - } - }, - "wordfilter": { - "title": "Filtro parole", - "subtitle": "Gestisci parole e frasi filtrate nell'hotel", - "filteredWords": "Parole filtrate", - "addWord": "Aggiungi parola", - "addWords": "Aggiungi parole", - "words": "Parole", - "noWords": "Ancora nessuna parola filtrata", - "delete": "Elimina", - "confirmDeleteTitle": "Rimuovi parola", - "confirmDelete": "Rimuovere \"{word}\" dal filtro?", - "added": "Parola aggiunta al filtro", - "deleted": "Parola rimossa dal filtro", - "addError": "Impossibile aggiungere la parola (potrebbe già esistere)", - "deleteError": "Impossibile rimuovere la parola", - "colId": "ID", - "colWord": "Parola", - "colAddedBy": "Aggiunto da", - "colCreated": "Creato", - "colActions": "Azioni", - "form": { - "word": "Parola", - "wordPlaceholder": "es. parolaccia", - "addMore": "Aggiungi più parole (una per riga)", - "save": "Aggiungi al filtro", - "saving": "Salvataggio…", - "cancel": "Annulla" - } - }, - "maintenance": { - "title": "Modalità manutenzione", - "subtitle": "Attiva o disattiva la manutenzione dell'hotel", - "enabled": "La modalità manutenzione è attiva", - "disabled": "La modalità manutenzione è disattiva", - "enable": "Attiva manutenzione", - "disable": "Disattiva manutenzione", - "message": "Messaggio di manutenzione", - "messagePlaceholder": "Torneremo a breve!", - "staffAccess": "Consenti accesso allo staff durante la manutenzione", - "save": "Salva impostazioni", - "saving": "Salvataggio…", - "confirmEnable": "Attivare la manutenzione impedirà a tutti gli utenti non dello staff di accedere all'hotel. Continuare?", - "confirmDisable": "Disattivare la modalità manutenzione e ripristinare l'accesso per tutti gli utenti?", - "maintenance": "Manutenzione", - "hotelLockedDown": "Accesso all’hotel limitato.", - "hotelOpen": "L’hotel è aperto.", - "minLoginRank": "Grado minimo per accedere", - "duringMaintenance": "Durante la manutenzione", - "splashMessage": "Messaggio di manutenzione", - "set": "Configurato", - "empty": "Vuoto", - "currentState": "Stato attuale", - "maintenanceCurrently": "Manutenzione: {status}", - "onlyRankCanLogin": "Possono accedere solo gli utenti con grado {rank} o superiore.", - "hotelOpenToEveryone": "Tutti gli utenti abilitati possono accedere.", - "settings": "Impostazioni", - "enableMaintenance": "Attiva la modalità manutenzione", - "minLoginRankLabel": "Grado minimo consentito durante la manutenzione", - "maintenanceMessageLabel": "Messaggio mostrato ai visitatori", - "maintenanceMessagePlaceholder": "Spiega perché l’hotel non è disponibile.", - "saveChanges": "Salva modifiche" - }, - "housekeeping": { - "title": "Archivio permessi", - "subtitle": "Vecchia tabella di backup. L'accesso reale si gestisce in Permessi — qui solo confronto ed export.", - "addPermission": "Aggiungi permesso", - "editPermission": "Modifica permesso", - "deletePermission": "Elimina permesso", - "noPermissions": "Nessun permesso housekeeping configurato", - "confirmDelete": "Eliminare questo permesso?", - "colId": "ID", - "colRank": "Grado", - "colSection": "Sezione", - "colActions": "Azioni", - "form": { - "rankId": "ID grado", - "rankIdPlaceholder": "Grado minimo", - "section": "Chiave sezione", - "sectionPlaceholder": "es. admin.dashboard", - "save": "Salva permesso", - "saving": "Salvataggio…", - "cancel": "Annulla" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset applied!", - "cleared": "All Permessi cleared!", - "invalidRank": "Invalid Grado", - "testDone": "Test done: {count} Permessi found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Elimina ALL Permessi? This Azione cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Permesso", - "colDescription": "Descrizione", - "colMinRank": "Min. Grado", - "permissionKey": "Chiave permesso", - "minRank": "Min. Grado", - "description": "Descrizione", - "permissions": "Permessi", - "permissionsCount": "{count} Permessi", - "permission": "Permesso", - "highestMinRank": "Highest min. Grado: {rank}", - "totalMinRank": "Total min. Grado sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Gradi", - "missingDeps": "{count} missing dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(missing)", - "rank": "Grado", - "count": "Count", - "searchPermission": "Cerca Permessi…", - "search": "Cerca", - "manage": "Manage", - "importSelection": "Importa selection", - "noGroup": "No group", - "allGroups": "All groups", - "perGroup": "Permessi per group", - "perRank": "Permessi per Grado", - "rankOverviewHint": "All Permessi grouped by the Grado they are assigned to.", - "tabOverview": "Panoramica", - "tabManage": "Manage", - "tabImport": "Importa / Export", - "tabRanks": "Grado Panoramica", - "tabPresets": "Preimpostazioni", - "tabTest": "Test", - "tabAudit": "Log di audit", - "importPermissions": "Importa Permessi", - "importHint": "Incolla un array JSON di permessi con i campi permission, minRank, description, groupName e dependsOn.", - "importPlaceholder": "Paste JSON here…", - "import": "Importa", - "exportTitle": "Export Permessi", - "exportHint": "Export all Permessi as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Permesso Preimpostazioni", - "presetsHint": "Applica a predefined set of Permessi for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Moderazione tools: Utente lookup, Ban, CFH handling, chat Registri.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Utenti, Stanze, news, Impostazioni, Negozio, Eventi, radio & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Permesso management and asset Importa.", - "applyPreset": "Applica preset", - "clearAll": "Clear all Permessi", - "testTitle": "Test Grado access", - "testHint": "Enter a Grado number to see which Permessi would be granted.", - "test": "Test", - "auditTitle": "Permesso audit log", - "auditHint": "All changes to housekeeping Permessi are logged.", - "auditLogsAt": "Audit Registri are available on the Audit log page.", - "viewAuditLogs": "Vedi audit Registri", - "importedWithErrors": "Imported {count} Permessi with {errors} errors", - "confirmClearAllDesc": "This will Rimuovi every Permesso entry from the database. Are you sure?", - "confirmDeletePermission": "Elimina this Permesso permanently?", - "confirmBulkDelete": "Elimina {count} selected Permessi?", - "deleteSelected": "Elimina {count} selected", - "cancel": "Annulla", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Utente", - "auditAction": "Azione", - "auditTarget": "Destinatario", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Per cambiare chi puo fare cosa usa Permessi", - "legacyBannerBody": "Questo archivio non controlla il sito. Apri Permessi per dare o togliere accesso ai gradi.", - "legacyBannerCta": "Apri Permessi", - "writesRetired": "Qui non si modifica piu nulla di proposito. Cambia l'accesso solo in Permessi.", - "tabCompare": "Confronto ACL", - "tabExportOnly": "Esporta archivio", - "compareHint": "Confronta le righe legacy housekeeping con i grant ACL live rank_* (grado minimo con lo slug).", - "compareAligned": "{count} allineati", - "compareMissingAcl": "{count} mancanti in ACL", - "compareMismatch": "{count} mismatch grado", - "colAclPresent": "In ACL", - "colAclMinRank": "Min grado ACL", - "colStatus": "Stato", - "statusAligned": "Allineato", - "statusMissingAcl": "Manca in ACL", - "statusMismatch": "Grado diverso", - "exportOnlyHint": "Le scritture sono disabilitate. Puoi ancora esportare la tabella legacy per archivio." - }, - "rooms": { - "title": "Stanze", - "subtitle": "Cerca e gestisci stanze dell'hotel", - "search": "Cerca", - "searchPlaceholder": "Cerca per nome, proprietario o ID…", - "searchResults": "{count, plural, one {# stanza} other {# stanze}} trovate per \"{query}\"", - "noResults": "Nessuna stanza trovata", - "colId": "ID", - "colName": "Nome", - "colOwner": "Proprietario", - "colUsers": "Utenti", - "colState": "Stato", - "colCategory": "Categoria", - "colCreated": "Creata", - "colActions": "Azioni", - "stateOpen": "Aperta", - "stateClosed": "Chiusa", - "stateLocked": "Bloccata", - "stateInvisible": "Invisibile", - "detail": { - "title": "Stanza: {name}", - "subtitle": "Di proprietà di {owner}", - "overview": "Panoramica", - "actions": "Azioni", - "description": "Descrizione", - "noDescription": "Nessuna descrizione", - "owner": "Proprietario", - "users": "Utenti online", - "maxUsers": "Utenti massimi", - "category": "Categoria", - "state": "Stato", - "tags": "Tag", - "noTags": "Nessun tag", - "created": "Creata", - "deleteRoom": "Elimina stanza", - "confirmDelete": "Eliminare la stanza \"{name}\"? Questa azione è irreversibile.", - "enterRoom": "Entra nella stanza", - "changeOwner": "Cambia proprietario", - "changeOwnerPlaceholder": "Nome utente nuovo proprietario" - } - }, - "emailTemplates": { - "title": "Template email", - "subtitle": "Gestisci template email transazionali", - "newTemplate": "+ Nuovo template", - "edit": "Modifica", - "delete": "Elimina", - "noTemplates": "Ancora nessun template email", - "confirmDelete": "Eliminare il template \"{name}\"?", - "colId": "ID", - "colName": "Nome", - "colSubject": "Oggetto", - "colKey": "Chiave", - "colUpdated": "Aggiornato", - "colActions": "Azioni", - "form": { - "name": "Nome", - "namePlaceholder": "es. Email di benvenuto", - "key": "Chiave", - "keyPlaceholder": "es. welcome_email", - "subject": "Oggetto", - "subjectPlaceholder": "Riga oggetto email", - "body": "Corpo (HTML)", - "bodyPlaceholder": "

Gentile {username},

", - "variables": "Variabili disponibili", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Salva template", - "saving": "Salvataggio…", - "cancel": "Annulla", - "variablesPlaceholder": "Variabili separate da virgole", - "active": "Attivo" - }, - "create": "Crea modello", - "save": "Salva modello", - "updated": "Aggiornato: {date}" - }, - "theme": { - "title": "Tema", - "subtitle": "Personalizza l'aspetto del CMS", - "presets": "Preimpostazioni", - "colours": "Colori", - "css": "CSS", - "presetsTitle": "Preimpostazioni tema", - "presetsSubtitle": "Scegli una combinazione di colori predefinita", - "applyPreset": "Applica", - "presetApplied": "Preset applicato: {preset}", - "customiseTitle": "Colori personalizzati", - "primary": "Primario", - "secondary": "Secondario", - "accent": "Accento", - "background": "Sfondo", - "surface": "Superficie", - "text": "Testo", - "saveColours": "Salva colori", - "savingColours": "Salvataggio…", - "cssTitle": "CSS personalizzato", - "cssSubtitle": "Aggiungi CSS personalizzato per sovrascrivere gli stili del tema", - "cssPlaceholder": "/* Il tuo CSS personalizzato qui */", - "saveCss": "Salva CSS", - "savingCss": "Salvataggio…", - "reset": "Ripristina valori predefiniti", - "confirmReset": "Ripristinare il tema ai valori predefiniti?", - "saved": "Impostazioni del tema salvate.", - "typographyLayout": "Tipografia e impaginazione", - "font": "Carattere", - "borderRadius": "Raggio degli angoli" - }, - "media": { - "title": "Libreria media", - "subtitle": "Carica e gestisci file media", - "upload": "Carica", - "uploadTitle": "Carica un file", - "uploadSubtitle": "Trascina e rilascia o clicca per caricare", - "uploadButton": "Scegli file", - "uploading": "Caricamento…", - "noFiles": "Ancora nessun file media", - "delete": "Elimina", - "confirmDelete": "Eliminare questo file permanentemente?", - "search": "Cerca", - "searchPlaceholder": "Cerca per nome file…", - "colPreview": "Anteprima", - "colName": "Nome", - "colSize": "Dimensione", - "colType": "Tipo", - "colUploaded": "Caricato", - "colActions": "Azioni", - "copyUrl": "Copia URL", - "urlCopied": "URL copiato negli appunti" - }, - "hubs": { - "newsMedia": "Notizie e contenuti multimediali", - "newsMediaSubtitle": "Articoli, foto, banner, ads e media library", - "siteContent": "Contenuti sito", - "siteContentSubtitle": "Navigazione, help, box, tag e prefissi", - "engagement": "Attività della community", - "engagementSubtitle": "Eventi, sondaggi e ticket di supporto", - "users": "Utenti", - "usersSubtitle": "Directory, online, candidature e team", - "access": "Accesso e sicurezza", - "accessSubtitle": "Ban, IP, VPN, permessi e word filter", - "moderation": "Moderazione", - "moderationSubtitle": "Report, azioni e team moderazione", - "catalog": "Catalogo e rare", - "catalogSubtitle": "Catalogo, rare, badge, achievement e suoni", - "shop": "Shop e pagamenti", - "shopSubtitle": "Shop, transazioni, voucher, abbonamenti e calendario", - "radio": "Radio", - "radioSubtitle": "Stream, tool DJ, embed e monitoring", - "settings": "Impostazioni", - "settingsSubtitle": "CMS, tema, manutenzione e strumenti correlati", - "tools": "Strumenti", - "toolsSubtitle": "RCON, stanze, import e traduzioni", - "observability": "Osservabilità", - "observabilitySubtitle": "Log, analytics, DevOps e alert hotel", - "tabs": { - "articles": "Articoli", - "photos": "Foto", - "banners": "Banner", - "ads": "Pubblicità", - "media": "Media", - "navigator": "Navigatore", - "help": "Assistenza", - "boxes": "Box", - "tags": "Tag", - "prefixes": "Prefissi", - "events": "Eventi", - "eventTypes": "Tipi evento", - "polls": "Sondaggi", - "tickets": "Supporto CMS", - "helpTickets": "Centro assistenza", - "templates": "Template", - "directory": "Elenco utenti", - "multiAccounts": "Multi-account", - "online": "Online", - "applications": "Candidature", - "teams": "Team", - "bans": "Ban", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permessi", - "wordFilter": "Filtro parole", - "overview": "Panoramica", - "actions": "Azioni", - "cfh": "Richieste di moderazione", - "team": "Team", - "catalogTab": "Catalogo", - "rares": "Rare", - "badges": "Badge", - "achievements": "Achievement", - "sounds": "Suoni", - "shopTab": "Negozio", - "transactions": "Transazioni", - "vouchers": "Voucher", - "subscriptions": "Abbonamenti", - "calendar": "Calendario", - "history": "Cronologia", - "moderationTab": "Moderazione", - "monitoring": "Monitoraggio", - "settingsTab": "Impostazioni", - "embed": "Incorporamento", - "apiKeys": "API key", - "points": "Punti", - "ranks": "Rank", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Tema", - "maintenance": "Manutenzione", - "favicon": "Favicon", - "emulator": "Emulatore", - "email": "Email", - "housekeeping": "Archivio permessi", - "commando": "Centro operativo", - "rooms": "Stanze", - "import": "Importazione", - "importOverview": "Panoramica", - "importBadges": "Badge", - "importFurni": "Furni", - "importUpload": "Caricamento", - "importClothing": "Abbigliamento", - "importEffects": "Effetti", - "importPets": "Pet", - "importClone": "Clonazione", - "importSync": "Sincronizzazione", - "importRepairIcons": "Ripara icone", - "importAudit": "Verifica dati", - "translations": "Traduzioni", - "logs": "Log", - "audit": "Registro modifiche", - "chat": "Chat", - "commands": "Comandi", - "trades": "Trade", - "analytics": "Statistiche", - "activity": "Attività", - "economy": "Economia", - "devops": "DevOps", - "errors": "Errori", - "alerts": "Alert", - "toolsGroup": "Strumenti", - "ticketInbox": "Ticket ricevuti", - "cmsErrors": "Errori CMS", - "themeBuilder": "Editor del tema", - "studio": "Studio" - }, - "events": "Eventi", - "eventsSubtitle": "Eventi hotel e tipi evento", - "tickets": "Ticket", - "ticketsSubtitle": "Inbox unificata su supporto CMS e help center", - "staffAccess": "Gradi e permessi", - "staffAccessSubtitle": "Gradi staff e accesso live. L'archivio e solo confronto/export.", - "analytics": "Analitiche", - "analyticsSubtitle": "Attività hotel, retention ed economia", - "devops": "DevOps", - "devopsSubtitle": "Salute servizi ed errori emulator", - "import": "Importazione", - "importSubtitle": "Furni, badge, abbigliamento e strumenti asset" - }, - "settings": { - "title": "Impostazioni CMS", - "subtitle": "Gestisci configurazione chiave/valore del CMS", - "addSetting": "Aggiungi impostazione", - "edit": "Modifica", - "delete": "Elimina", - "noSettings": "Nessuna impostazione trovata", - "confirmDelete": "Eliminare l'impostazione \"{key}\"?", - "keysInDatabase": "{count} chiavi nel database", - "managedInForm": "{count} gestite nel form", - "documented": "{count} documentate", - "saved": "Impostazioni salvate.", - "saveFailed": "Impossibile salvare le impostazioni.", - "saveSettings": "Salva impostazioni", - "viewOnly": "Puoi visualizzare le impostazioni ma serve il permesso di modifica.", - "colKey": "Chiave", - "colValue": "Valore", - "colUpdated": "Aggiornato", - "colActions": "Azioni", - "form": { - "key": "Chiave", - "keyPlaceholder": "es. hotel_name", - "value": "Valore", - "valuePlaceholder": "Valore impostazione", - "save": "Salva impostazione", - "saving": "Salvataggio…", - "cancel": "Annulla" - } - }, - "menu": { - "title": "Menu admin", - "subtitle": "Riordina e nascondi gruppi e voci della sidebar. Route e permessi restano nel codice.", - "save": "Salva menu", - "saving": "Salvataggio…", - "saved": "Menu admin salvato.", - "saveFailed": "Impossibile salvare il menu admin.", - "reset": "Ripristina default", - "viewOnly": "Puoi vedere il layout del menu ma serve il permesso di modifica impostazioni.", - "hint": "Dashboard e questa pagina restano visibili. L'ACL continua a filtrare per grado.", - "moveUp": "Sposta su", - "moveDown": "Sposta giù", - "hideGroup": "Nascondi gruppo", - "showGroup": "Mostra gruppo", - "hideItem": "Nascondi voce", - "showItem": "Mostra voce", - "pinned": "Fisso" - }, - "favicon": { - "title": "Favicon", - "subtitle": "Upload and manage the site favicon", - "current": "Current favicon", - "uploadLabel": "Upload favicon", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.", - "upload": "Upload", - "uploading": "Uploading…", - "delete": "Remove", - "deleting": "Removing…", - "cancel": "Annulla", - "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": "Importa asset da fonti esterne nel tuo hotel.", - "badges": "Distintivi", - "badgesDescription": "Importa e gestisci asset dei distintivi da fonti esterne.", - "furni": "Mobili", - "furniDescription": "Importa definizioni mobili, file SWF e icone.", - "clothing": "Abbigliamento", - "clothingDescription": "Importa abiti e indossabili per gli avatar.", - "effects": "Effetti", - "effectsDescription": "Importa effetti e animazioni avatar.", - "pets": "Animali", - "petsDescription": "Importa dati e icone degli animali.", - "clone": "Clona", - "cloneDescription": "Clona elementi esistenti da una fonte all'altra.", - "upload": "Carica .nitro", - "uploadDescription": "Carica bundle .nitro e icone direttamente, senza conversione SWF.", - "sync": "Sincronizzazione automatica", - "syncDescription": "Importa automaticamente i mobili mancanti da tutte le fonti configurate.", - "repairIcons": "Ripara icone", - "repairIconsDescription": "Scarica le icone mancanti per i mobili già presenti nel database.", - "audit": "Audit catalogo", - "auditDescription": "Scansiona il catalogo per voci mancanti, riferimenti rotti ed elementi assenti dalle fonti clone." - }, - "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": "Traduzioni del CMS", - "description": "Modifica i testi del sito e dell’housekeeping. Le modifiche salvate vengono applicate al caricamento successivo della pagina e restano dopo i deploy.", - "export": "Esporta JSON", - "saving": "Salvataggio…", - "saveLocale": "Salva {locale}", - "saved": "Traduzioni salvate e applicate.", - "readOnly": "Puoi consultare ed esportare le traduzioni. Per modificarle serve il permesso di modifica delle impostazioni.", - "language": "Lingua", - "coverage": "{total} chiavi · {missing} mancanti · {identical} identiche all’inglese", - "search": "Cerca", - "searchPlaceholder": "Chiave, traduzione o testo inglese…", - "group": "Gruppo", - "allGroups": "Tutti i gruppi", - "status": "Mostra", - "all": "Tutti i testi", - "missing": "Traduzioni mancanti", - "identical": "Identiche all’inglese", - "modified": "Modifiche non salvate", - "fallbackHint": "Le traduzioni mancanti usano l’inglese. Un testo identico può essere intenzionale. Mantieni invariati i nomi delle variabili tra parentesi graffe.", - "unsaved": "{count} modifiche non salvate in questa lingua", - "discard": "Annulla modifiche", - "discardConfirm": "Annullare le modifiche non salvate in questa lingua?", - "fixErrors": "Correggi {count} messaggi non validi prima di salvare.", - "noResults": "Nessun testo corrisponde ai filtri.", - "source": "Riferimento inglese", - "missingPlaceholder": "Traduzione mancante: viene usato l’inglese.", - "page": "Pagina {page} di {total} · {count} chiavi", - "previous": "Precedente", - "next": "Successiva", - "leaveWarning": "Ci sono traduzioni non salvate. Vuoi uscire dalla pagina?", - "conflict": "Queste traduzioni sono cambiate dopo l’apertura dell’editor. Esporta le modifiche e ricarica la pagina prima di salvare.", - "unknownKey": "Chiave di traduzione sconosciuta: {key}", - "empty": "Inserisci una traduzione per {key} oppure annulla questa modifica.", - "invalid": "Sintassi del messaggio non valida in {key}. Controlla le parentesi graffe e i tag del testo.", - "variables": "Mantieni gli stessi nomi delle variabili e tag del testo inglese in {key}." - } - }, - "analytics": { - "loadError": "Alcune query analytics sono fallite. I numeri sotto possono essere incompleti — controlla DB e tabelle emulator.", - "totalUsers": "Utenti totali", - "onlineNow": "{count} online ora", - "weekRegistrations": "Registrazioni della settimana", - "thisMonth": "{count} questo mese", - "activeRooms": "Stanze attive", - "totalRooms": "{count} stanze totali", - "weeklyActivity": "Attività settimanale", - "tradesAndBans": "{trades} trade, {bans} ban", - "registrationsChartTitle": "Registrazioni (30 giorni)", - "registrationsChartDescription": "Nuove registrazioni utenti negli ultimi 30 giorni", - "chatActivity": "Attività chat", - "messagesLast7Days": "Messaggi negli ultimi 7 giorni", - "trades": "Trade", - "tradesLast7Days": "Trade negli ultimi 7 giorni", - "retention": "Retention", - "usersOnlineOverTotal": "Utenti online / totale", - "activity": { - "chatMessages": "Messaggi chat", - "commands": "Comandi", - "bans": "Ban", - "registrations": "Registrazioni", - "last7Days": "Ultimi 7 giorni", - "dailyBreakdownTitle": "Ripartizione giornaliera (7 giorni)", - "colDay": "Giorno", - "colChats": "Chat", - "colCmds": "Cmd", - "colBans": "Ban", - "colRegs": "Reg", - "mostActiveUsersTitle": "Utenti più attivi (7 giorni)", - "noChatActivity": "Nessuna attività chat", - "msgCount": "{count} msg", - "userFallback": "Utente #{id}" - }, - "economy": { - "creditsInCirculation": "Crediti in circolazione", - "creditsDescription": "Crediti totali di tutti gli utenti", - "pixelsInCirculation": "Pixel in circolazione", - "pixelsDescription": "Pixel totali di tutti gli utenti", - "pointsInCirculation": "Punti in circolazione", - "pointsDescription": "Punti totali di tutti gli utenti", - "weeklyTrades": "Trade settimanali", - "marketplaceListings": "{count} annunci marketplace", - "shopRevenueTitle": "Ricavi shop (7g)", - "purchases": "Acquisti", - "creditsSpent": "Crediti spesi", - "pointsSpent": "Punti spesi", - "marketplaceTitle": "Marketplace", - "activeListings": "Annunci attivi", - "sold7d": "Venduti (7g)", - "currencyDistributionTitle": "Distribuzione valute", - "credits": "Crediti", - "pixels": "Pixel", - "points": "Punti", - "catalogSpendingTitle": "Spesa catalogo", - "creditsTooltip": "{count} crediti", - "pointsTooltip": "{count} punti" - }, - "peakHours": { - "title": "Ore di punta", - "description": "Attività utenti per giorno e ora (ultimi 7 giorni)", - "days": { - "mon": "lun", - "tue": "mar", - "wed": "mer", - "thu": "gio", - "fri": "ven", - "sat": "sab", - "sun": "dom" - }, - "tooltip": "{day} {hour}:00 — {count} utenti", - "less": "Meno", - "more": "Più" - } - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Vista unificata dei ticket aperti CMS e help center. I dettagli restano sulle route di ciascun prodotto.", - "noTickets": "Nessun ticket aperto in nessuna coda", - "searchPlaceholder": "Cerca oggetto, titolo, utente o ID…", - "statCmsOpen": "CMS aperti", - "statHelpOpen": "Help aperti", - "statTotal": "Totale aperti", - "colTicket": "Ticket", - "colStatus": "Stato", - "colType": "Coda", - "colUpdated": "Aggiornato", - "meta": "di {user}", - "typeAll": "Tutte le code", - "typeCms": "Supporto CMS", - "typeHelp": "Help center", - "statusOpen": "Aperti", - "statusClosed": "Chiusi", - "statusAll": "Tutti gli stati", - "presetOpen": "Solo aperti", - "modNavLabel": "Code:", - "modNavInbox": "Inbox", - "modNavDesk": "Supporto CMS", - "modNavHelp": "Help center" - }, - "search": { - "pages": "Pagine e strumenti", - "description": "Cerca pagine, utenti, furni, categorie del catalogo, articoli e ticket di assistenza.", - "loadError": "Impossibile caricare i risultati. Puoi comunque aprire le pagine elencate.", - "placeholder": "Cerca pagine, utenti, stanze…", - "users": "Utenti", - "articles": "Articoli", - "rooms": "Stanze", - "guilds": "Gruppi", - "shop": "Negozio", - "rareValues": "Valori dei rari", - "noResults": "Nessun risultato trovato.", - "furniture": "Furni", - "catalog": "Categorie del catalogo", - "tickets": "Ticket di assistenza", - "loading": "Ricerca in corso…", - "hint": "Inserisci un ID numerico o almeno 2 caratteri oppure scegli una pagina.", - "retry": "Riprova", - "partialError": "Alcuni risultati non sono disponibili. Riprova." - }, - "table": { - "search": "Cerca…", - "clearSearch": "Cancella ricerca", - "filters": "Filtri", - "clearAll": "Rimuovi tutti", - "all": "Tutti", - "columns": "Colonne", - "perPage": "{count} / pagina", - "selected": "{count} selezionati", - "results": "{count} risultati", - "empty": "Nessun risultato corrisponde alla ricerca o ai filtri.", - "selectAll": "Seleziona tutte le righe di questa pagina", - "selectRow": "Seleziona riga {id}", - "removeFilter": "Rimuovi filtro: {name}", - "previous": "Pagina precedente", - "next": "Pagina successiva", - "page": "Pagina {page}", - "pageOf": "Pagina {page} di {last}", - "bulkError": "Operazione non riuscita. La selezione è stata mantenuta: verifica il risultato prima di riprovare.", - "confirmBulk": "Eseguire {action} su {count} righe selezionate?", - "views": { - "title": "Viste salvate", - "hint": "Salva filtri, ordinamento e colonne sul tuo account. Fino a 20 viste per tabella.", - "saved": "Vista salvata", - "error": "Le viste salvate non sono disponibili. Riprova.", - "retry": "Riprova", - "loading": "Caricamento viste...", - "empty": "Nessuna vista salvata.", - "deleteNamed": "Elimina {name}", - "delete": "Elimina", - "name": "Nome della vista", - "replace": "Sostituisci questa vista", - "save": "Salva vista attuale" - } - }, - "actions": { - "saved": "Salvato correttamente.", - "error": "Impossibile completare l’operazione.", - "saving": "Salvataggio…", - "saveError": "Salvataggio non riuscito. Le modifiche sono ancora qui: riprova.", - "unsaved": "Modifiche non salvate", - "leaveUnsaved": "Hai modifiche non salvate. Vuoi lasciare la pagina?", - "preview": "Anteprima" - }, - "workQueue": { - "title": "Da controllare", - "tickets": "Ticket aperti", - "ticketsHint": "Code del CMS e del centro assistenza", - "imports": "Import da verificare", - "importsHint": "I tuoi processi interrotti o con furni non importati", - "errors": "Gruppi di errori CMS aperti", - "errorsHint": "Nello storico diagnostico conservato", - "unavailable": "Stato non disponibile — apri per verificare" - }, - "cmsErrors": { - "title": "Centro errori CMS", - "storageError": "Impossibile leggere gli errori. Verifica volume di archiviazione e permessi.", - "subtitle": "Errori server e browser degli ultimi 7 giorni. Le segnalazioni browser sono osservazioni del client non verificate.", - "emulator": "Errori emulatore", - "refresh": "Aggiorna / azzera filtri", - "search": "Cerca errori", - "allSources": "Tutte le origini", - "empty": "Nessun errore registrato corrisponde ai filtri. I vecchi log della console non vengono importati.", - "resolve": "Segna come risolto", - "reopenHint": "Una nuova occorrenza riapre automaticamente il gruppo.", - "references": "Riferimenti delle occorrenze", - "stackHint": "Gli stack del browser possono riferirsi a file compilati. Usa il riferimento per indagare; i contenuti delle richieste non vengono salvati.", - "previous": "Precedente", - "next": "Successiva", - "searchHint": "Riferimento, digest, messaggio, percorso o versione", - "source": "Origine errore", - "pages": "Pagine errori", - "resolved": "Risolto", - "open": "Aperto", - "occurrences": "{count} occorrenze", - "reference": "Riferimento", - "release": "Versione", - "noStack": "Stack non disponibile. Usa riferimento o digest per cercare nei log del server.", - "truncated": "Sono mostrati gli ultimi 1.000 eventi: i filtri cercano in questa finestra.", - "counts": "{count} occorrenze · {groups} gruppi.", - "retention": "Limite di archiviazione: 10 MB al giorno. Gli eventi eccedenti restano nei log server, dove disponibili.", - "status": "Stato", - "allStatuses": "Tutti gli stati", - "firstSeen": "Prima occorrenza nei dati conservati", - "lastSeen": "Ultima occorrenza", - "affectedUsers": "Utenti identificati distinti", - "unidentifiedEvents": "Eventi senza ID utente verificato", - "metricsScope": "I conteggi riguardano solo i dati conservati caricati qui. Gli utenti sono conteggiati solo tramite ID numerici del server; le segnalazioni anonime e del browser non vengono attribuite.", - "assignedStaff": "Assegnato allo staff #{id}", - "unassigned": "Non assegnato", - "assignSelf": "Assegna a me", - "clearAssignment": "Rimuovi assegnazione", - "openOperation": "Apri area collegata", - "releaseOccurrences": "Occorrenze per release", - "releaseScope": "Queste release compaiono nei dati conservati. La prima occorrenza disponibile non dimostra quale release abbia introdotto l’errore.", - "releaseFilter": "Versione", - "allReleases": "Tutte le versioni", - "period": "Periodo", - "allRetained": "Tutti gli eventi conservati", - "last24h": "Ultime 24 ore", - "last7d": "Ultimi 7 giorni", - "sort": "Ordine", - "recentFirst": "Prima i più recenti", - "frequentFirst": "Prima i più frequenti", - "filterScope": "I conteggi riguardano gli eventi conservati che corrispondono ai filtri. Stato e dettagli più recenti del gruppo restano aggiornati tra le versioni.", - "auditTrail": "Cronologia collegata" - }, - "importHistory": { - "summary": "Storico importazioni · {count} attive", - "empty": "Nessuna importazione in background.", - "result": "{done}/{total} importati · {failed} falliti", - "progress": "Avanzamento importazione", - "queued": "In coda", - "running": "In corso", - "completed": "Completato", - "interrupted": "Interrotto", - "done": "Importato", - "failed": "Non riuscito", - "pending": "In attesa", - "retryFailed": "Riprova solo i furni falliti", - "retryUnfinished": "Riprendi i furni non completati", - "cancelled": "Annullato", - "cancelFailed": "Impossibile richiedere l’annullamento. Riprova o aggiorna la cronologia.", - "cancelRequested": "Annullamento richiesto. L’elemento corrente verrà completato; quelli rimanenti non verranno avviati.", - "cancelHint": "L’annullamento conserva gli elementi completati e lascia terminare quello corrente.", - "cancelRemaining": "Annulla elementi rimanenti", - "historyLimit": "Sono mostrati fino a 30 processi aggiornati più di recente.", - "refreshHistory": "Aggiorna cronologia", - "showMoreItems": "Mostra altri 50 elementi", - "uncertainOutcome": "Un elemento interrotto potrebbe avere già modificato i dati locali. È escluso dai tentativi successivi.", - "reviewLocalData": "Controlla i dati locali", - "ownerHistory": "Le tue importazioni e riparazioni, dalla più recente. Il retry non ripete elementi completati o dall’esito incerto.", - "previousPage": "Precedente", - "nextPage": "Successiva", - "page": "Pagina {page}" - }, - "installation": { - "title": "Diagnostica installazione", - "hint": "Controlli in sola lettura di questa installazione. Non verificato indica evidenza insufficiente; una configurazione presente non prova la raggiungibilità esterna.", - "checked": "Controllato alle {time} · verifiche completate in {ms} ms", - "recheck": "Ricontrolla", - "ok": "Controllo superato", - "failed": "Da verificare", - "unknown": "Non verificato", - "missing": "Non configurato", - "release": "Versione in esecuzione", - "database": "Database", - "redis": "Redis", - "emulator": "Emulatore", - "storage": "Archiviazione scrivibile", - "migrations": "Migrazioni database", - "worker": "Worker in background", - "renderer": "Configurazione renderer", - "registry": "Registro delle immagini", - "releaseHint": "Identificativo completo della build in esecuzione. Permette di confrontare installazioni e scegliere una versione precedente per il ripristino.", - "databaseHint": "Connessione e tempo misurato della query SELECT 1.", - "redisHint": "Opzionale per alcune pagine; necessario per le importazioni in coda.", - "emulatorHint": "Risposta al ping dell’emulatore configurato.", - "storageHint": "Permessi di lettura e scrittura nelle cartelle storage, risorse Nitro e SWF.", - "migrationsHint": "Numero di migrazioni incluse nella versione e assenti dalla cronologia del database. Applicale attraverso il processo di rilascio.", - "workerHint": "Ultimo segnale del worker in Redis. Oltre due minuti richiede verifica; nessun segnale non permette di stabilire se il worker sia attivo.", - "rendererHint": "Il client usa l’indirizzo configurato oppure /nitro-client/ come percorso predefinito. Apri separatamente il gioco per controllare rendering e risorse.", - "registryHint": "Le credenziali del registro sono nella CI, non nel CMS. Controlla il lavoro di pubblicazione e il tag immutabile della versione in Gitea." - }, - "operations": { - "title": "Da controllare", - "hint": "Attività accessibili: importazioni negli ultimi 30 lavori personali; errori in un massimo di 1.000 eventi conservati. Attività precedenti possono restare fuori da questi conteggi.", - "empty": "Nessuna attività in sospeso trovata nei dati controllati.", - "errors": "Gruppi di errori CMS aperti", - "imports": "Le tue importazioni da verificare", - "tickets": "Ticket di assistenza aperti", - "publications": "Bozze delle news", - "unavailable": "{source}: dati temporaneamente non disponibili.", - "installation": "Diagnostica installazione" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Le categorie o le offerte sorgenti sono cambiate. Crea un nuovo pacchetto per includere i dati aggiornati.", - "saveConflict": "Il pacchetto è cambiato. Ricaricalo prima di salvare.", - "publishConflict": "Il pacchetto è cambiato. Aggiorna l’anteprima di pubblicazione.", - "catalogChanged": "Il catalogo è cambiato. Aggiorna l’anteprima di pubblicazione.", - "missing": "Pacchetto catalogo non trovato.", - "pageLimit": "Un pacchetto supporta al massimo 200 categorie, incluse le sottocategorie.", - "offerLimit": "Un pacchetto supporta al massimo 500 offerte.", - "payloadLimit": "I dati del pacchetto superano il limite di 8 MB.", - "membership": "Non puoi aggiungere o rimuovere elementi dal pacchetto.", - "hierarchy": "Non puoi modificare la gerarchia del pacchetto.", - "references": "Non puoi modificare i riferimenti ai furni del pacchetto.", - "furnitureMissing": "Un furni referenziato dal pacchetto non esiste più.", - "auditWarning": "Pacchetto pubblicato, ma la registrazione nell’audit non è riuscita.", - "hotelWarning": "Pacchetto pubblicato, ma l’aggiornamento non è stato inviato all’hotel.", - "exportWarning": "Pacchetto pubblicato, ma la pianificazione dell’esportazione non è riuscita.", - "refreshWarning": "Pacchetto pubblicato. Aggiorna la pagina per vedere il catalogo aggiornato." - } - }, - "catalogPackagePreview": { - "title": "Anteprima catalogo", - "hint": "Sfoglia le pagine e le offerte reali del pacchetto. Questa è un’anteprima del catalogo, non la riproduzione completa del client di gioco. Non vengono effettuati acquisti.", - "search": "Cerca categorie o offerte", - "playerMode": "Accesso giocatore", - "rank": "Rango", - "club": "Club", - "vip": "VIP", - "externalParents": "La selezione appartiene a un catalogo più ampio. Non è possibile valutare le restrizioni delle categorie superiori esterne a questa istantanea.", - "invalidHierarchy": "{count} pagine hanno una gerarchia ciclica e non sono navigabili.", - "snapshotLimit": "Anteprima limitata a 200 pagine e 500 offerte.", - "restricted": "{count} pagine sono nascoste dalle impostazioni di accesso selezionate.", - "categories": "Categorie del catalogo", - "noPages": "Questa istantanea non contiene categorie.", - "inaccessible": "Nessuna categoria è accessibile con queste impostazioni. Modifica l’accesso giocatore o disattivalo per esaminare la bozza.", - "noMatches": "Nessun risultato per questa ricerca.", - "offerCount": "{count} offerte", - "layout": "Layout: {layout}", - "missingLayout": "Non specificato", - "unsupportedLayout": "Questo layout non ha un’anteprima dedicata. La griglia mostra le offerte reali; componenti e immagini del layout personalizzato non vengono riprodotti.", - "loadingIcons": "Caricamento delle icone dei furni…", - "assetsUnavailable": "I dettagli dei furni non sono al momento disponibili. I dati delle offerte restano visibili.", - "assetLimit": "Icone e nomi dei furni sono limitati ai primi 200 ID di questa vista.", - "emptyPage": "Questa categoria non contiene offerte dirette. Sfoglia le sottocategorie.", - "missingIcon": "Icona non disponibile", - "amount": "Quantità: {count}", - "bundle": "{count} tipi di furni", - "changed": "Modificato rispetto alla versione iniziale salvata", - "previous": "Precedente", - "next": "Successiva", - "page": "Pagina {page} di {total}", - "offerId": "Offerta #{id}", - "unknownFurniture": "Nome del furni non disponibile", - "selectOffer": "Seleziona un’offerta per esaminare il prezzo e i furni inclusi.", - "credits": "Crediti", - "duckets": "Duckets", - "diamonds": "Diamanti", - "pointsType": "Punti (tipo {type}):", - "free": "Gratis", - "specialPricing": "Prezzo speciale: {credits} crediti, {points} punti (tipo {type})", - "restrictedOffers": "{count} offerte in questa categoria richiedono l’iscrizione al Club.", - "clubOffer": "Offerta Club" - }, - "permissionPreview": { - "title": "Anteprima accessi del ruolo", - "description": "Verifica gli accessi CMS senza modificare sessioni o impersonare utenti.", - "back": "Torna ai permessi", - "role": "Ruolo", - "show": "Mostra accessi", - "missing": "Seleziona un ruolo esistente.", - "entryAllowed": "Accesso HK consentito", - "entryDenied": "Accesso HK negato: manca il permesso dashboard", - "superAdmin": "Questo grado riceve attualmente i privilegi del grado più alto.", - "scope": "Questa anteprima considera un solo ruolo. Un utente può avere altri ruoli. La navigazione personalizzata può nascondere sezioni consentite; singoli dati e azioni possono richiedere ulteriori controlli.", - "sections": "Sezioni", - "allowed": "Consentito", - "denied": "Negato", - "actions": "Permessi CMS", - "actionScope": "Un permesso concesso non supera i controlli di accesso HK, gerarchia dei gradi, proprietà dei dati o validazione della singola azione.", - "granted": "Concesso", - "notGranted": "Non concesso" - }, - "operationsCenter": { - "title": "Centro operazioni", - "hint": "Segui le tue importazioni e riparazioni persistenti e la coda condivisa di esportazione catalogo.", - "syncTitle": "Sincronizzazione sorgenti", - "syncHint": "La sincronizzazione delle sorgenti avviene nella sua pagina. Qui non dispone di cronologia persistente o ripetizione automatica degli elementi falliti. L’esportazione catalogo mostra coda condivisa e ultimo esito; non supporta retry dei singoli elementi.", - "openSync": "Apri sincronizzazione ed esportazione", - "openImports": "Apri importazioni furni" - }, - "operationsExport": { - "title": "Esportazione repository catalogo", - "hint": "Esportazione automatica di bundle, icone, gamedata, traduzioni e SQL catalogo. Coda e ultimo esito sono condivisi tra operatori.", - "loadError": "Impossibile caricare lo stato esportazione", - "queueError": "Impossibile accodare l’esportazione", - "loading": "Caricamento…", - "disabled": "Esportazione disabilitata. Apri sincronizzazione per verificarne la configurazione.", - "active": "In attesa del completamento di {count} operazioni.", - "running": "Esportazione in corso…", - "pending": "{count} aggiornamenti in coda per esportazione.", - "idle": "Nessun aggiornamento in attesa.", - "lastCommit": "Ultimo commit pubblicato:", - "lastAttempt": "Ultimo tentativo: {date}", - "queuing": "Accodamento…", - "queue": "Esporta ora / riprova" - }, - "syncQueue": { - "preparing": "Preparazione sincronizzazione...", - "queued": "Sincronizzazione salvata. Segui i progressi nello storico qui sotto.", - "start": "Avvia sincronizzazione", - "description": "La sincronizzazione prosegue in background. Avanzamento e tentativi sicuri restano nello storico anche dopo aver chiuso la pagina.", - "failed": "Impossibile accodare la sincronizzazione" - }, - "publicationPreflight": { - "affectedPages": "Pagine pubbliche interessate", - "scheduleInvalid": "Scegli una data valida. La fine di un evento deve seguire il suo inizio.", - "description": "I controlli usano i valori del modulo. La disponibilita remota di immagini e link non viene verificata.", - "slugNormalized": "Il percorso pubblico usera lo slug normalizzato indicato sotto.", - "imageInvalid": "Usa un percorso locale o un URL immagine HTTP/HTTPS senza credenziali.", - "imageMissing": "Nessuna copertina selezionata. La pagina usera la propria immagine alternativa.", - "title": "Controlli pubblicazione", - "ready": "Immagine, link e date hanno superato i controlli locali.", - "linksInvalid": "Controlla i link del contenuto: sono ammessi link locali, HTTP/HTTPS ed email.", - "schedulePast": "La data selezionata e nel passato. Controllala prima di pubblicare.", - "previewHint": "I link mostrano le pagine pubbliche attuali. Usa Anteprima per vedere il contenuto non salvato. Lo slug finale potrebbe ricevere un suffisso se gia utilizzato." - }, - "performance": { - "title": "Prestazioni delle richieste", - "scope": "Misure server delle API HK autenticate e di alcune pagine pubbliche. Scegli un gruppo qui sotto.", - "refresh": "Aggiorna", - "shared": "Diagnostica condivisa tramite Redis.", - "local": "Diagnostica locale di questa istanza; si azzera al riavvio.", - "retention": "Fino a 200 campioni per gruppo, conservati per un’ora. La raccolta non è garantita per ogni richiesta.", - "search": "Percorso o ID operazione", - "sort": "Ordine", - "slowest": "Prima le più lente", - "recent": "Prima le più recenti", - "threshold": "Filtro durata", - "all": "Tutte le durate", - "slow": "Almeno 1 secondo", - "explanation": "Il tempo database include le query completate e le attese del pool. Il tempo esterno copre solo i download curl monitorati. Le chiamate simultanee possono sommare più della durata totale: questi valori non sono parti esclusive del totale.", - "empty": "Nessuna richiesta corrispondente. Usa l’HK, poi aggiorna questa pagina.", - "database": "Database", - "external": "Download monitorati", - "calls": "{count} chiamate", - "failures": "{count} errori", - "streaming": "Risposta in streaming: la misura termina alla creazione della risposta, non alla fine dell’operazione.", - "operation": "ID operazione", - "kind": "Gruppo di misurazione", - "adminApi": "API HK", - "publicPage": "Pagine pubbliche", - "applyFilters": "Applica filtri", - "publicBoundary": "Le misure pubbliche coprono il componente server principale di /me, news, profili, eventi e ricerca. Escludono metadati, componenti figli renderizzati separatamente, rete e rendering nel browser. Gli esiti non sono codici HTTP. Le esecuzioni durante la build statica sono escluse.", - "outcomes": { - "completed": "Componente completato", - "failed": "Componente fallito", - "redirect": "Reindirizzamento", - "not-found": "Pagina non trovata" - } - }, - "importProgress": { - "validating": "Verifica dati locali", - "downloading": "Download dei file", - "converting": "Conversione in Nitro", - "checking_sources": "Ricerca nelle sorgenti configurate", - "writing_db": "Salvataggio SQL e catalogo", - "writing_furnidata": "Aggiornamento furnidata", - "translating": "Aggiornamento traduzioni", - "current": "Fase attuale: {phase}", - "last": "Ultima fase: {phase}", - "elapsed": "{seconds}s in questa fase", - "recovered": "Bundle recuperato da {source} · revisione {revision}. Classname, tipo e revisione corrispondenti; identità del bundle verificata.", - "recoveryHint": "Puoi continuare. Se i file originali non sono disponibili, l’importatore cercherà nelle sorgenti attive lo stesso classname, tipo e revisione, verificando poi il bundle Nitro. Puoi comunque allegare manualmente i file mancanti." - } - }, - "radioRequests": { - "formTitle": "Invia una richiesta", - "formSubtitle": "Chiedi al DJ di passare la tua traccia preferita", - "songLabel": "Brano", - "songPlaceholder": "Titolo del brano", - "artistLabel": "Artista", - "artistPlaceholder": "Nome dell'artista (facoltativo)", - "submitButton": "Invia richiesta", - "loginToRequest": "Accedi per inviare una richiesta.", - "latestTitle": "Richieste recenti", - "latestSubtitle": "I brani richiesti più di recente", - "empty": "Ancora nessuna richiesta.", - "colSong": "Brano", - "colArtist": "Artista", - "colRequester": "Richiedente", - "colDate": "Data", - "colStatus": "Stato", - "statusPending": "In attesa", - "statusApproved": "Approvata", - "statusPlayed": "Passata", - "success": { - "posted": "Richiesta inviata." - }, - "errors": { - "empty": "Inserisci il titolo del brano o l'artista.", - "invalid": "Richiesta non valida.", - "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", - "error": "Qualcosa è andato storto. Riprova." - } - }, - "mod": { - "title": "Pannello moderazione", - "badge": "Mod", - "overviewTitle": "Panoramica moderatore", - "overviewSubtitle": "CFH, azioni rapide e ban senza accesso admin completo.", - "shortcutsTitle": "Collegamenti", - "nav": { - "overview": "Panoramica", - "cfh": "Call for Help", - "actions": "Azioni rapide", - "bans": "Ban", - "fullAdmin": "Admin completo", - "backToSite": "Torna al sito", - "tickets": "Supporto CMS", - "helpTickets": "Help center", - "users": "Utenti", - "team": "Team" - }, - "usersTitle": "Giocatori", - "usersSubtitle": "Lookup senza email o IP — usa l’admin completo per i campi sensibili.", - "usersEmpty": "Nessun giocatore trovato", - "usersSearchPlaceholder": "Cerca username, motto o ID…", - "usersRank": "rank", - "usersPublicProfile": "Profilo pubblico", - "usersPiiNote": "Email, IP e valuta sono nascosti nel pannello mod. Apri l’admin completo se hai accesso.", - "usersJoined": "Iscrizione", - "usersLastLogin": "Ultimo login", - "usersLastOnline": "Ultima presenza", - "stats": { - "openCfh": "CFH aperti", - "bansToday": "Ban oggi", - "modsOnline": "Mod online", - "quickActions": "Azioni rapide", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Ticket CMS aperti", - "openHelpTickets": "Help ticket aperti", - "team": "Team mod", - "teamHint": "Staff online e carico" - } - }, - "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": "Anteprima della struttura", - "commandDisabled": "Ricerca e comandi saranno abilitati in un sottoprogetto successivo.", - "backToSite": "Torna al sito" - }, - "navigation": { - "skipToContent": "Vai al contenuto", - "primary": "Aree housekeeping", - "contextual": "Navigazione del dominio" - }, - "domains": { - "operations": { - "title": "Operazioni", - "description": "Panoramica operativa e code giornaliere" - }, - "people": { - "title": "Persone", - "description": "Utenti, moderazione e supporto" - }, - "content": { - "title": "Contenuti", - "description": "Contenuti editoriali e coinvolgimento della community" - }, - "economy": { - "title": "Economia", - "description": "Operazioni di catalogo e shop" - }, - "hotel": { - "title": "Hotel", - "description": "Stanze, radio e strumenti per gli asset" - }, - "system": { - "title": "Sistema", - "description": "Configurazione, osservabilità e accesso" - } - }, - "states": { - "loading": { - "title": "Caricamento in corso", - "description": "Stiamo preparando gli strumenti di housekeeping disponibili." - }, - "empty": { - "title": "Nessun contenuto disponibile", - "description": "Non ci sono contenuti housekeeping disponibili per questo dominio." - }, - "partial": { - "label": "Dati parziali", - "title": "Alcune informazioni non sono disponibili", - "description": "Controlla le informazioni disponibili e riprova più tardi." - }, - "error": { - "title": "Impossibile caricare housekeeping", - "description": "Riprova più tardi o contatta un amministratore." - } - } - }, - "myDashboard": { - "title": "La mia pagina", - "loadError": "Impossibile caricare la tua pagina. Riprova.", - "retry": "Riprova", - "login": "Accedi", - "never": "Mai", - "claimed": "Premio riscattato!", - "welcome": "Il tuo spazio su {hotel}", - "noMotto": "Nessun motto", - "registered": "Iscritto dal {date}", - "lastOnline": "Ultima presenza: {date}", - "enter": "Entra in {hotel}", - "quickLinks": "Collegamenti rapidi", - "messages": "Messaggi", - "profile": "Il mio profilo", - "settings": "Impostazioni", - "shop": "Negozio", - "unread": "{count} messaggi non letti", - "wallet": "Il tuo portafoglio", - "currencies": { - "credits": "Crediti", - "duckets": "Duckets", - "diamonds": "Diamanti", - "points": "Punti" - }, - "onlineFriends": "Amici online", - "allFriends": "Tutti gli amici", - "noOnlineFriends": "Nessuno dei tuoi amici è online al momento.", - "recentRooms": "Nuove stanze", - "community": "Community", - "roomsHint": "Le ultime stanze create nell’hotel.", - "noRooms": "Nessuna stanza disponibile.", - "activity": "La tua attività", - "achievements": "Punti traguardo", - "respects": "Rispetti ricevuti", - "friends": "Amici", - "lastLogin": "Ultimo accesso", - "referrals": "Invita i tuoi amici", - "referralHint": "Condividi il tuo link e ricevi premi quando si registrano nuovi giocatori.", - "referralProgress": "Progressi verso il premio", - "reward": "{amount} {currency} ogni {count} nuovi giocatori.", - "rewardHint": "Invita {count} giocatori per sbloccare il premio.", - "referralLink": "Il tuo link di invito", - "claim": "Riscatta premio", - "remaining": "{count, plural, one {Invita ancora # giocatore per sbloccare il premio.} other {Invita ancora # giocatori per sbloccare il premio.}}", - "rules": "Regole degli inviti", - "rulesText": "Creare altri account per aumentare gli inviti può comportare la rimozione di progressi, valute e inventario e il ban.", - "badges": "Distintivi indossati", - "noBadges": "Non stai ancora indossando distintivi.", - "copy": "Copia link", - "copied": "Copiato!", - "copyFailed": "Copia non riuscita. Seleziona il link e copialo manualmente.", - "errors": { - "not_enough": "Servono altri inviti per riscattare il premio.", - "no_referrals": "Condividi il link per invitare il tuo primo amico.", - "bad_config": "Il premio non è configurato correttamente. Contatta lo staff.", - "ratelimit": "Troppi tentativi. Attendi un momento e riprova.", - "error": "Non è stato possibile riscattare il premio. Riprova." - }, - "messagesCaughtUp": "Nessun messaggio da leggere", - "messagesUnavailable": "Apri la posta per controllare", - "eventTitle": "In programma", - "allEvents": "Tutti gli eventi", - "eventsUnavailable": "Il calendario non è al momento disponibile. Apri tutti gli eventi per riprovare.", - "eventOngoing": "In corso", - "eventUpcoming": "Prossimo evento", - "eventDetails": "Scopri l’evento", - "noUpcomingEvents": "Non sono ancora stati annunciati nuovi eventi.", - "roomsUnavailable": "Le stanze non sono al momento disponibili. Apri la community per riprovare.", - "tasks": { - "title": "Da fare", - "support": "{count, plural, one {# ticket con risposta del supporto} other {# ticket con risposte del supporto}}", - "friends": "{count, plural, one {# richiesta di amicizia da controllare} other {# richieste di amicizia da controllare}}", - "event": "Il prossimo evento a cui sei iscritto: {title} · {date}", - "reward": "Il premio per gli inviti è pronto da ritirare", - "empty": "Tutto a posto. Nessuna azione in attesa.", - "unavailable": "Non è stato possibile verificare alcune azioni. Quelle disponibili sono mostrate sopra.", - "retry": "Riprova", - "rewardUnavailable": "Il progresso degli inviti non è al momento disponibile. Riprova." - } - }, - "search": { - "title": "Ricerca", - "subtitle": "Trova utenti, stanze aperte, notizie ed eventi.", - "queryLabel": "Termine di ricerca", - "submit": "Cerca", - "enterQuery": "Inserisci un termine per trovare utenti, stanze, notizie ed eventi.", - "resultsFor": "Risultati per “{query}”", - "users": "Utenti", - "rooms": "Stanze aperte", - "news": "Notizie", - "events": "Eventi", - "loadError": "Non è stato possibile caricare questi risultati. Riprova.", - "empty": "Nessun risultato trovato.", - "online": "Online", - "offline": "Offline", - "pagination": "Pagine: {category}", - "previous": "Precedente", - "next": "Successiva", - "pageSummary": "Pagina {page} di {pages} · {total} risultati" - } - }, - "toolbar": { - "home": "Home", - "reload": "Ricarica", - "fullscreen": "Schermo intero", - "logout": "Esci", - "onlineUsers": "Utenti online", - "emulatorOnline": "Emulatore online", - "emulatorOffline": "Emulatore offline", - "dragToMove": "Trascina per spostare", - "hide": "Nascondi barra", - "fullscreenExit": "Esci dalla schermo intero", - "show": "Mostra barra", - "emulatorUnknown": "Stato dell'emulatore sconosciuto" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Diagnostica file sorgente", - "preliminary": "Controllo preliminare: questi indirizzi sono stati verificati senza scaricare i file. L'importazione validerà i file originali.", - "http": "HTTP {status}", - "network": "Connessione alla sorgente non riuscita", - "timeout": "La sorgente non ha risposto in tempo", - "invalidResponse": "La sorgente ha restituito una pagina web invece di un file", - "available": "File trovato; il contenuto sarà verificato durante l'importazione", - "recover": "Carica il file originale e riprendi", - "recoveryHint": "Scegli {file} per questo furni (massimo 50 MB). L'identità viene verificata prima dell'uso. La ripresa ritenta gli elementi falliti e preserva le importazioni completate.", - "attach": "Scegli il file .nitro originale", - "working": "Validazione del file o ripresa dell'importazione...", - "attached": "File originale corrispondente allegato", - "resume": "Riprendi gli import falliti con questo file", - "invalidFile": "Impossibile allegare il file. Scegli un .nitro originale valido per questo furni, fino a 50 MB, e riprova.", - "resumeError": "Impossibile riprendere. Aggiorna la cronologia e usa l'ultimo tentativo; controlla il file originale e riprova.", - "mismatchedFile": "Questo file appartiene a un altro furni.", - "alreadyStarted": "Ripresa già avviata. Aggiorna la cronologia e usa l’ultimo tentativo.", - "notEligible": "Questo elemento non consente il recupero tramite allegato." - }, - "completeness": { - "title": "Completezza e prossimi passi", - "parts": { - "sql": "Elemento SQL", - "catalog": "Offerta catalogo", - "furnidata": "Furnidata", - "icon": "Icona locale", - "nitro": "File Nitro" - }, - "statuses": { - "present": "Presente", - "missing": "Mancante", - "unknown": "Non verificato", - "conflict": "Da controllare" - }, - "actions": { - "sql": "Importa o ripara questo furni per creare il record mancante.", - "catalog": "Importa o ripara questo furni per aggiungere un’offerta con la categoria e il prezzo automatici.", - "furnidata": "Importa o ripara questo furni per aggiungere i dati mancanti.", - "icon": "Importa o ripara questo furni per recuperare l’icona locale mancante.", - "nitro": "Importa o ripara questo furni per recuperare il file. Per un elemento esistente puoi anche usare Rigenera .nitro.", - "recheck": "Ricontrolla lo stato locale prima della riparazione. Se il problema persiste, verifica l’accesso ai file locali.", - "audit": "Controlla i duplicati e la corrispondenza degli ID sprite e dei tipi in Audit catalogo prima della riparazione." - }, - "openAudit": "Apri Audit catalogo per risolvere i conflitti", - "excludedConflicts": "{count, plural, one {# elemento richiede un controllo ed è escluso da questa importazione.} other {# elementi richiedono un controllo e sono esclusi da questa importazione.}}" - }, - "preflight": { - "filterLabel": "Filtra i controlli di importazione", - "filters": { - "all": "Tutti ({count})", - "complete": "Da completare ({count})", - "conflict": "Conflitti ({count})", - "verify": "Da verificare ({count})" - }, - "empty": "Nessun furni in questo gruppo.", - "actions": { - "complete": "Suggerimento: completa il furni esistente", - "import": "Suggerimento: importa il nuovo furni", - "refresh": "Il furni esistente è completo; aggiorna i dati dalla fonte", - "conflict": "Risolvi i conflitti nei dati locali prima di importare", - "verify": "Controlla i componenti non verificati prima di proseguire" - }, - "missing": "Mancanti: {parts}", - "unknown": "Non verificati: {parts}" - } - } - }, - "publicData": { - "loadError": "Non è stato possibile caricare questa sezione. Riprova.", - "retry": "Riprova", - "unavailable": "Non disponibile" - } + "draftRecovery": { + "ready": "Una copia di recupero sarà conservata in questo browser per 7 giorni.", + "saved": "Copia di recupero salvata in questo browser per 7 giorni.", + "unavailable": "Recupero nel browser non disponibile. Tieni aperta questa pagina fino al salvataggio delle modifiche.", + "found": "È disponibile una copia di recupero in questo browser, salvata il", + "restore": "Ripristina copia del browser", + "discard": "Elimina copia del browser", + "confirmRestore": "Sostituire il modulo attuale con la copia di recupero del browser? Controlla il contenuto prima di salvare.", + "confirmDiscard": "Eliminare questa copia di recupero del browser? Il modulo attuale resterà invariato." + }, + "nav": { + "home": "Home", + "community": "Community", + "articles": "Articoli", + "photos": "Foto", + "staff": "Staff", + "rankings": "Classifiche", + "guilds": "Gruppi", + "events": "Eventi", + "polls": "Sondaggi", + "leaderboards": "Classifiche", + "rareValues": "Valori rari", + "shop": "Negozio", + "market": "Mercato", + "assistance": "Assistenza", + "helpCenter": "Centro assistenza", + "myTickets": "I miei ticket", + "badges": "Distintivi", + "radio": "Radio", + "friends": "Amici", + "messages": "Messaggi", + "admin": "Admin", + "openMenu": "Apri menu", + "closeMenu": "Chiudi menu", + "drawBadge": "Crea distintivo", + "mod": "Mod" + }, + "header": { + "online": "{count} online su {hotel}", + "nitroClient": "Client Nitro", + "tagline": "Un mondo virtuale online dove puoi creare il tuo avatar, fare amicizia, chattare, creare stanze e molto altro!", + "login": "Accedi", + "or": "Oppure", + "createAccount": "Crea un account" + }, + "footer": { + "copyright": "© {year} - {hotel} è un progetto educativo senza scopo di lucro" + }, + "emails": { + "verify": { + "subject": "Verifica la tua email · {hotel}", + "heading": "Verifica la tua email", + "body": "Benvenuto su {hotel}! Conferma questo indirizzo email per completare la creazione del tuo account.", + "button": "Verifica email", + "fallback": "Se il pulsante non funziona, incolla questo link nel browser:" + } + }, + "pages": { + "error": { + "code": "Errore", + "title": "Qualcosa è andato storto", + "subtitle": "L'hotel ha incontrato un imprevisto.", + "body": "Riprova tra poco. Se continua, contatta lo staff indicando il riferimento qui sotto.", + "tryAgain": "Riprova", + "backHome": "Torna alla home", + "reference": "Riferimento: {digest}" + }, + "notFound": { + "code": "404", + "title": "Pagina non trovata", + "subtitle": "Questa stanza non esiste — o i mobili sono stati spostati.", + "body": "Controlla il link, oppure torna alla lobby.", + "backHome": "Torna alla home", + "latestNews": "Ultime notizie" + }, + "staff": { + "title": "Staff", + "subtitle": "Il team dietro l'hotel", + "ranksTitle": "I nostri team", + "ranksSubtitle": "Di cosa si occupa ogni parte del team", + "membersTitle": "Membri del team", + "membersEmptySubtitle": "Nessuno da mostrare al momento", + "membersSubtitle": "{count, plural, one {# membro che tiene tutto in funzione} other {# membri che tengono tutto in funzione}}", + "emptyState": "Nessun membro dello staff da mostrare.", + "colUsername": "Nome utente", + "colRank": "Ruolo", + "colMotto": "Motto", + "viewProfile": "Visita il profilo", + "noMotto": "Nessun motto impostato", + "loadError": "Impossibile caricare i membri dello staff. Riprova tra poco.", + "retry": "Riprova" + }, + "leaderboard": { + "title": "Classifica", + "subtitle": "I 20 migliori giocatori per {currency}", + "tab_credits": "Crediti", + "tab_diamonds": "Diamanti", + "tab_duckets": "Duckets", + "tab_achievement": "Trofei", + "tab_respects": "Rispetti", + "tab_onlinetime": "Tempo online", + "emptyState": "Ancora nessuna classifica da mostrare.", + "colAvatar": "Avatar", + "colPlayer": "Giocatore" + }, + "friends": { + "title": "Amici", + "emptySubtitle": "Non hai ancora aggiunto nessun amico", + "subtitle": "{count, plural, one {Hai # amico} other {Hai # amici}}", + "emptyState": "Aggiungi amici nell'hotel e compariranno qui.", + "noMotto": "Nessun motto", + "remove": "Rimuovi", + "success": { + "removed": "Amico rimosso." + }, + "errors": { + "notFound": "Quell'amicizia non è stata trovata.", + "invalid": "Amico non valido.", + "error": "Qualcosa è andato storto. Riprova." + } + }, + "messages": { + "title": "Messaggi", + "subtitle": "Richieste di amicizia, inbox offline e messaggi agli amici", + "requestsTitle": "Richieste di amicizia", + "requestsEmptySubtitle": "Nessuno ti ha ancora chiesto l'amicizia", + "requestsSubtitle": "{count, plural, one {# richiesta in sospeso} other {# richieste in sospeso}}", + "requestsEmptyState": "Nessuna richiesta di amicizia in sospeso.", + "wantsToBeFriend": "vuole essere tuo amico.", + "accept": "Accetta", + "decline": "Rifiuta", + "offlineTitle": "Messaggi offline", + "offlineEmptySubtitle": "La tua casella è vuota", + "offlineSubtitle": "{count, plural, one {# messaggio ricevuto} other {# messaggi ricevuti}}", + "offlineEmptyState": "Non hai messaggi offline.", + "composeTitle": "Invia messaggio offline", + "composeSubtitle": "Consegnato nel messenger dell'hotel quando l'amico è offline", + "composeEmptyFriends": "Aggiungi amici in hotel per inviare messaggi offline.", + "composeFriendLabel": "Amico", + "composeFriendPlaceholder": "Scegli un amico", + "composeMessageLabel": "Messaggio", + "composeMessagePlaceholder": "Scrivi il messaggio (max 500 caratteri)…", + "composeSend": "Invia messaggio", + "unknownUser": "Utente #{id}", + "success": { + "accepted": "Richiesta di amicizia accettata.", + "declined": "Richiesta di amicizia rifiutata.", + "sent": "Messaggio offline inviato." + }, + "errors": { + "notFound": "Quella richiesta di amicizia non è stata trovata.", + "unauthorized": "Non puoi gestire questa richiesta di amicizia.", + "invalid": "Richiesta di amicizia non valida.", + "error": "Qualcosa è andato storto. Riprova.", + "notFriend": "Puoi scrivere solo agli amici.", + "emptyMessage": "Scrivi un messaggio.", + "rateLimited": "Troppi messaggi. Attendi un momento e riprova." + } + }, + "sessions": { + "title": "Attività di accesso", + "subtitle": "Accessi recenti e tentativi falliti sul tuo account", + "recentTitle": "Accessi recenti", + "recentEmpty": "Nessun accesso registrato.", + "colWhen": "Quando", + "colIp": "IP", + "colDevice": "Dispositivo", + "failedTitle": "Tentativi falliti", + "failedSubtitle": "Password errata per il tuo username", + "unknownDevice": "Dispositivo sconosciuto", + "signOutEverywhereTitle": "Esci ovunque", + "signOutEverywhereDescription": "Termina tutte le sessioni del sito su ogni dispositivo. Dovrai accedere di nuovo anche qui.", + "signOutEverywhereButton": "Esci da tutte le sessioni", + "successSignedOutAll": "Tutte le sessioni sono state terminate." + }, + "profile": { + "noMotto": "Nessun motto", + "statRank": "Ruolo", + "statCredits": "Crediti", + "statRegistered": "Registrato", + "badgesTitle": "Distintivi", + "badgesEmpty": "Ancora nessun distintivo.", + "photosTitle": "Foto", + "photosEmpty": "Ancora nessuna foto.", + "guestbookTitle": "Bacheca", + "guestbookSubtitle": "Messaggi sulla bacheca di {username}", + "leaveMessage": "Lascia un messaggio", + "guestbookPlaceholder": "Scrivi qualcosa sulla bacheca di {username}…", + "post": "Pubblica", + "loginToPost": "Accedi per lasciare un messaggio sulla bacheca.", + "guestbookEmpty": "Ancora nessun messaggio in bacheca.", + "unknownUser": "Utente #{id}", + "statDuckets": "Duckets", + "statDiamonds": "Diamanti", + "walletTitle": "Portafoglio", + "friendsTitle": "Amici", + "friendsSubtitle": "Le persone con cui passa il tempo nell’hotel", + "friendsEmpty": "Nessun amico da mostrare.", + "roomsTitle": "Stanze", + "roomsSubtitle": "Le stanze che possiede", + "roomsEmpty": "Nessuna stanza da mostrare.", + "roomUntitled": "Stanza senza nome", + "addFriend": "Aggiungi amico", + "alreadyFriends": "Siete amici", + "requestPending": "Richiesta in sospeso", + "respondInMessages": "Rispondi nei Messaggi", + "success": { + "sent": "Richiesta di amicizia inviata.", + "guestbook": "Messaggio in bacheca pubblicato." + }, + "errors": { + "self": "Non puoi inviarti una richiesta di amicizia.", + "alreadyFriends": "Siete già amici.", + "alreadyPending": "Hai già inviato una richiesta a questo utente.", + "incomingPending": "Questo utente ti ha già inviato una richiesta — accettala o rifiutala nei Messaggi.", + "empty": "Scrivi un messaggio prima di pubblicare.", + "moderated": "Quel messaggio è stato bloccato dalla moderazione.", + "ratelimit": "Stai pubblicando troppo in fretta. Attendi un momento e riprova.", + "invalid": "Richiesta non valida.", + "error": "Qualcosa è andato storto. Riprova." + }, + "noRoomPreview": "Anteprima non disponibile", + "viewRoom": "Vedi stanza", + "roomStates": { + "open": "Aperta", + "locked": "Campanello", + "password": "Password", + "invisible": "Nascosta" + }, + "privacy": { + "title": "Visibilità del profilo", + "hint": "Scegli cosa possono vedere i visitatori sul tuo profilo pubblico. La tua email non viene mai mostrata qui. Tu continui a vedere i tuoi dati. Questi controlli si applicano alla pagina del profilo.", + "wallet": "Mostra il mio portafoglio", + "online": "Mostra il mio stato online", + "friends": "Mostra i miei amici", + "photos": "Mostra le mie foto", + "registered": "Mostra la mia data di iscrizione", + "save": "Salva visibilità", + "saved": "Visibilità del profilo salvata.", + "error": "Non è stato possibile caricare o salvare la visibilità del profilo. Riprova.", + "ownerHint": "Stai visualizzando i tuoi dati, comprese le sezioni nascoste." + }, + "morePhotos": "Mostra altre foto (fino alle 24 più recenti)", + "openPhoto": "Apri la foto completa in una nuova scheda", + "photosUnavailable": "Non è stato possibile caricare le foto. Riprova più tardi." + }, + "rankings": { + "title": "Classifica", + "subtitle": "I 12 migliori giocatori ordinati per crediti", + "emptyState": "Ancora nessun giocatore da classificare." + }, + "home": { + "welcome": "Benvenuto su {hotelName}", + "welcomeSubtitle": "Il tuo hotel retrò, ora con tecnologia Next.js", + "welcomeBody": "Rilassati, colleziona furni e fai nuove amicizie.", + "enterHotel": "Entra in {hotelName}", + "onlineFriends": "Amici online", + "noFriendsOnline": "Nessun amico online", + "register": "REGISTRATI ORA", + "joinNow": "Unisciti a {hotelName} oggi!", + "recentUsers": "Utenti recenti", + "recentPhotos": "Foto recenti", + "latestNews": "Ultime notizie", + "newsTitle": "Ultime notizie", + "newsSubtitle": "Appena arrivate dall'hotel", + "allNews": "Tutte le notizie →", + "allUsers": "Community →", + "noArticles": "Ancora nessun articolo.", + "noPhotos": "Ancora nessuna foto.", + "noUsers": "Nessun utente online", + "latestArticle": "Ultimo articolo", + "latestUsers": "Nuovi cittadini ({count} totale)", + "statsOnline": "Online", + "statsCitizens": "Cittadini", + "statsRooms": "Stanze", + "statsArticles": "Articoli", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Crea il tuo look unico", + "featuresFurniture": "Arredi", + "featuresFurnitureDesc": "Decora le stanze con oggetti", + "featuresCommunity": "Community", + "featuresCommunityDesc": "Fai amicizia e chatta", + "featuresGames": "Giochi", + "featuresGamesDesc": "Competi e divertiti", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Notizie", + "subtitle": "Gli ultimi annunci, eventi e aggiornamenti dall'hotel", + "noArticles": "Ancora nessun articolo.", + "searchLabel": "Cerca notizie", + "orderLabel": "Ordine", + "newest": "Prima le più recenti", + "oldest": "Prima le meno recenti", + "apply": "Applica", + "loadError": "Non è stato possibile caricare le notizie. Riprova.", + "pagination": "Pagine delle notizie", + "previous": "Precedente", + "next": "Successiva", + "pageSummary": "Pagina {page} di {pages} · {total} articoli" + }, + "article": { + "backToNews": "← Notizie", + "reactionsTitle": "Reazioni", + "reactionsSubtitle": "Dicci cosa ne pensi", + "reaction": { + "like": "Mi piace", + "love": "Adoro", + "wow": "Wow" + }, + "removeReaction": "Clicca per rimuovere la tua reazione", + "reactWith": "Reagisci con {reaction}", + "noReactions": "Ancora nessuna reazione.", + "logIn": "Accedi", + "toReact": "per reagire.", + "commentsTitle": "Commenti", + "commentsSubtitle": "Partecipa alla conversazione", + "commentsCount": "{count} finora", + "noComments": "Ancora nessun commento. Scrivi il primo.", + "userNumber": "Utente #{id}", + "addComment": "Aggiungi un commento", + "commentPlaceholder": "Scrivi il tuo commento…", + "postComment": "Pubblica commento", + "toComment": "per lasciare un commento.", + "success": { + "posted": "Commento pubblicato.", + "reaction": "Reazione aggiornata." + }, + "errors": { + "empty": "Scrivi un commento prima di pubblicare.", + "moderated": "Quel commento è stato bloccato dalla moderazione.", + "ratelimit": "Stai commentando troppo in fretta. Attendi un momento e riprova.", + "invalid": "Commento non valido.", + "notFound": "Articolo non trovato.", + "error": "Qualcosa è andato storto. Riprova." + } + }, + "photos": { + "title": "Foto", + "subtitle": "Gli ultimi scatti realizzati nell'hotel", + "noPhotos": "Ancora nessuna foto.", + "photoAlt": "Foto dell'utente #{id}", + "byUser": "dell'utente #{id}" + }, + "badges": { + "title": "Distintivi", + "subtitle": "I distintivi che puoi ottenere e sfoggiare in giro per l'hotel", + "noBadges": "Ancora nessun distintivo disponibile." + }, + "community": { + "title": "Community", + "subtitle": "Tutto ciò che accade nell'hotel in un unico posto", + "open": "Apri →", + "links": { + "rankings": { + "title": "Classifiche", + "text": "Scopri i giocatori più ricchi dell'hotel, ordinati per crediti." + }, + "staff": { + "title": "Staff", + "text": "Conosci il team che ogni giorno fa funzionare l'hotel." + }, + "news": { + "title": "Notizie", + "text": "Gli ultimi annunci, eventi e aggiornamenti." + }, + "photos": { + "title": "Foto", + "text": "Scatti condivisi dalla community in giro per l'hotel." + }, + "guilds": { + "title": "Gilde", + "text": "Esplora i gruppi creati e a cui si sono uniti i giocatori." + }, + "leaderboards": { + "title": "Classifiche generali", + "text": "Chi è in testa questa stagione nelle statistiche dell'hotel." + } + } + }, + "guilds": { + "title": "Gilde", + "subtitle": "Esplora i gruppi creati e frequentati dai giocatori", + "empty": "Ancora nessuna gilda.", + "unnamedGuild": "Gilda senza nome", + "noDescription": "Nessuna descrizione" + }, + "guild": { + "allGuilds": "← Tutte le gilde", + "unnamedGuild": "Gilda senza nome", + "noDescription": "Nessuna descrizione", + "memberSingular": "Membro", + "memberPlural": "Membri", + "founded": "Fondata", + "forumLink": "Forum →", + "discussion": "Discussione", + "membersTitle": "Membri", + "memberLowerSingular": "membro", + "memberLowerPlural": "membri", + "noMembers": "Nessun membro.", + "owner": "Proprietario", + "noMotto": "Nessun motto" + }, + "guildForum": { + "backToGuild": "← Torna alla gilda", + "unnamedGuild": "Gilda senza nome", + "forumTitle": "{guild} — Forum", + "threadSingular": "discussione", + "threadPlural": "discussioni", + "newThread": "+ Nuova discussione", + "empty": "Ancora nessuna discussione in questo forum.", + "colSubject": "Oggetto", + "colAuthor": "Autore", + "colPosts": "Messaggi", + "colDate": "Data", + "noSubject": "(senza oggetto)", + "pinned": "In evidenza", + "locked": "Bloccata", + "userNumber": "Utente #{id}", + "unknown": "Sconosciuto", + "success": { + "posted": "Discussione pubblicata." + } + }, + "guildForumNew": { + "backToForum": "← Torna al forum", + "unnamedGuild": "Gilda senza nome", + "title": "Nuova discussione", + "subtitle": "nel forum di {guild}", + "subjectLabel": "Oggetto", + "subjectPlaceholder": "Oggetto della discussione", + "messageLabel": "Messaggio", + "messagePlaceholder": "Scrivi il tuo primo messaggio…", + "postThread": "Pubblica discussione", + "cancel": "Annulla", + "errors": { + "invalid": "Oggetto e messaggio sono obbligatori.", + "notFound": "Gilda non trovata.", + "ratelimit": "Stai pubblicando troppo in fretta. Attendi un momento e riprova.", + "error": "Qualcosa è andato storto. Riprova." + } + }, + "guildForumThread": { + "backToForum": "← Torna al forum", + "unnamedGuild": "Gilda senza nome", + "noSubject": "(senza oggetto)", + "inGuildForum": "Forum di {guild}", + "pinned": "In evidenza", + "locked": "Bloccata", + "postsTitle": "Messaggi", + "postsSubtitle": "{count, plural, one {# messaggio} other {# messaggi}}", + "postsEmpty": "Nessun messaggio in questa discussione.", + "userNumber": "Utente #{id}", + "replyTitle": "Rispondi", + "replySubtitle": "Aggiungi un messaggio a questa discussione", + "replyPlaceholder": "Scrivi la tua risposta…", + "replySubmit": "Pubblica risposta", + "lockedHint": "Questa discussione è bloccata: non è possibile rispondere.", + "loginToReply": "Accedi per rispondere.", + "loginLink": "Accedi", + "success": { + "replied": "Risposta pubblicata." + }, + "errors": { + "invalid": "Inserisci un messaggio.", + "notFound": "Discussione non trovata.", + "locked": "Questa discussione è bloccata.", + "ratelimit": "Stai pubblicando troppo in fretta. Attendi un momento e riprova.", + "error": "Qualcosa è andato storto. Riprova." + } + }, + "shop": { + "title": "Negozio", + "subtitle": "Ricarica il tuo account e accaparrati pacchetti esclusivi, valute e distintivi.", + "browsingCategory": "Stai sfogliando i pacchetti {category}.", + "all": "Tutti", + "allPackages": "Tutti i pacchetti", + "packagesAvailable": "{count, plural, one {# pacchetto disponibile} other {# pacchetti disponibili}}", + "empty": "Al momento non ci sono pacchetti disponibili.", + "buy": "Acquista", + "loginToBuy": "Accedi per acquistare", + "creditsHint": "I pacchetti si pagano con crediti di gioco. Ricarica prima se ti servono altri crediti.", + "topUpLink": "Ricarica crediti", + "priceCredits": "{credits} crediti (≈ {usd})", + "priceCreditsShort": "{credits} cr", + "success": { + "bought": "Pacchetto acquistato — le ricompense sono state aggiunte al tuo account.", + "boughtNamed": "Hai acquistato \"{name}\" — le ricompense sono state aggiunte al tuo account." + }, + "errors": { + "invalid": "Questo pacchetto non è più disponibile.", + "credits": "Non hai abbastanza crediti per questo pacchetto.", + "ratelimit": "Stai acquistando troppo velocemente. Attendi un momento e riprova.", + "error": "Qualcosa è andato storto. Riprova." + } + }, + "topup": { + "title": "Ricarica con PayPal", + "subtitle": "Paga in sicurezza con PayPal e i tuoi crediti vengono aggiunti non appena il pagamento va a buon fine.", + "cancelled": "Il pagamento è stato annullato — non è stato addebitato nulla.", + "chooseAmount": "Scegli un importo", + "notConfiguredPre": "PayPal non è ancora configurato. Un amministratore deve impostare", + "notConfiguredAnd": "e", + "notConfiguredOptional": "(e facoltativamente", + "notConfiguredPost": "per la modalità sandbox o live).", + "balanceTitle": "Il tuo saldo", + "signedInAs": "Hai effettuato l'accesso come {username}", + "credits": "Crediti", + "creditsPerUnit": "Crediti per 1,00 {currency}", + "rateLine": "Ricevi {amount} crediti per 1,00 {currency}. I crediti compaiono nel gioco al tuo prossimo accesso." + }, + "marketplace": { + "title": "Mercatino", + "subtitle": "Sfoglia mobili e rari messi in vendita dai giocatori. Le inserzioni vengono create nel gioco e si aggiornano in tempo reale — entra nell'hotel per fare un'offerta.", + "activeOffers": "Offerte attive", + "sellers": "Venditori", + "totalValue": "Valore totale", + "activeListings": "Inserzioni attive", + "mostRecentFirst": "Prima le più recenti", + "empty": "Al momento non ci sono offerte attive nel mercatino. Riprova più tardi.", + "colOffer": "Offerta", + "colItem": "Oggetto", + "colSeller": "Venditore", + "colPrice": "Prezzo", + "colListed": "Pubblicata", + "itemLabel": "Oggetto #{id}", + "userLabel": "Utente #{id}", + "justNow": "proprio ora", + "minutesAgo": "{count} min fa", + "hoursAgo": "{count} h fa", + "daysAgo": "{count} g fa" + }, + "rares": { + "title": "Valori dei rari", + "subtitle": "Ottieni una panoramica di tutti i rari dell'hotel, raggruppati per categoria.", + "empty": "Al momento non abbiamo rari elencati qui.", + "rareCount": "{count, plural, one {# raro} other {# rari}}", + "viewRares": "Vedi i rari →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# raro in questa categoria} other {# rari in questa categoria}}", + "allRares": "← Tutti i rari", + "empty": "Ancora nessun raro elencato in questa categoria.", + "colRare": "Raro", + "colCredits": "Crediti", + "colCurrency": "Valuta", + "creditsValue": "{value} crediti", + "duckets": "Duckets", + "diamonds": "Diamanti", + "credits": "Crediti" + }, + "redeem": { + "title": "Riscatta un buono", + "subtitle": "Hai un codice buono? Inseriscilo qui sotto per aggiungere la ricompensa al tuo account.", + "enterCode": "Inserisci il tuo codice", + "oncePerAccount": "Ogni buono può essere riscattato una sola volta per account.", + "balanceTitle": "Il tuo saldo", + "signedInAs": "Hai effettuato l'accesso come {username}", + "credits": "Crediti", + "instantCredit": "Le ricompense riscattate vengono accreditate immediatamente e compaiono nel gioco al tuo prossimo accesso." + }, + "help": { + "title": "Centro assistenza", + "subtitle": "Trova guide, argomenti di supporto e le regole dell'hotel: tutto ciò che ti serve per ricevere aiuto.", + "myTickets": "I miei ticket →", + "topicsTitle": "Argomenti di supporto", + "topicsSubtitle": "Sfoglia guide e risposte alle domande più comuni", + "topicsEmpty": "Ancora nessun argomento di aiuto.", + "rulesTitle": "Regole dell'hotel", + "rulesSubtitle": "Leggile prima di trascorrere del tempo nell'hotel", + "rulesEmpty": "Ancora nessuna regola pubblicata.", + "categoryEmpty": "Nessuna regola in questa categoria." + }, + "helpCategory": { + "back": "← Centro assistenza", + "topicSubtitle": "Argomento del centro assistenza", + "moreTitle": "Altri argomenti di aiuto", + "moreSubtitle": "Passa a un altro argomento di supporto" + }, + "helpTickets": { + "title": "Ticket di assistenza", + "subtitle": "Invia un ticket allo staff e tieni traccia delle tue richieste aperte.", + "statTotal": "Ticket totali", + "statOpen": "Aperti", + "statClosed": "Chiusi", + "newTitle": "Nuovo ticket", + "newSubtitle": "Descrivi il tuo problema e lo staff ti ricontatterà", + "subjectPlaceholder": "Oggetto", + "contentPlaceholder": "Descrivi il tuo problema…", + "submit": "Invia ticket", + "listTitle": "I tuoi ticket", + "listSubtitle": "Tutte le richieste che hai inviato allo staff", + "listEmpty": "Non hai ancora nessun ticket.", + "colId": "ID", + "colSubject": "Oggetto", + "colStatus": "Stato", + "colCreated": "Creato", + "statusOpen": "Aperto", + "statusClosed": "Chiuso", + "success": { + "created": "Ticket inviato." + }, + "errors": { + "invalid": "Compila oggetto e descrizione.", + "moderated": "Quel ticket è stato bloccato dalla moderazione.", + "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", + "error": "Qualcosa è andato storto. Riprova." + }, + "banAppealLabel": "This is a ban appeal" + }, + "helpTicketDetail": { + "backToList": "← I tuoi ticket", + "ticketId": "Ticket #{id}", + "statusOpen": "Aperto", + "statusClosed": "Chiuso", + "messagesTitle": "Conversazione", + "messagesSubtitle": "{count, plural, one {# messaggio} other {# messaggi}}", + "you": "Tu", + "userNumber": "Utente #{id}", + "replyTitle": "Rispondi", + "replySubtitle": "Invia un aggiornamento allo staff", + "replyPlaceholder": "Scrivi il tuo messaggio…", + "replySubmit": "Invia risposta", + "closeTitle": "Chiudi ticket", + "closeSubtitle": "Segna la richiesta come risolta se non ti serve più aiuto", + "closeSubmit": "Chiudi ticket", + "closedHint": "Questo ticket è chiuso. Apri un nuovo ticket se hai bisogno di altro aiuto.", + "success": { + "replied": "Risposta inviata.", + "closed": "Ticket chiuso." + }, + "errors": { + "invalid": "Inserisci un messaggio.", + "notFound": "Ticket non trovato.", + "closedTicket": "Questo ticket è chiuso.", + "moderated": "Quel messaggio è stato bloccato dalla moderazione.", + "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", + "error": "Qualcosa è andato storto. Riprova." + } + }, + "applyStaff": { + "title": "Candidati per lo staff di {hotel}", + "subtitle": "Apriamo le candidature per lo staff di tanto in tanto. Se trovi una posizione che senti perfetta per te, non esitare a candidarti.", + "noPositionsTitle": "Nessuna posizione aperta", + "noPositionsBody": "Al momento non ci sono posizioni aperte. Torna più tardi per verificare se nel frattempo ci sono nuove opportunità. Grazie per il tuo interesse.", + "noDeadline": "Nessuna scadenza impostata", + "deadline": "Scadenza candidatura: {date}", + "alreadyApplied": "Ti sei già candidato per {rank}", + "aboutYou": "Parlaci di te", + "aboutPlaceholder": "Raccontaci perché saresti un ottimo {rank}…", + "applyFor": "Candidati per {rank}", + "success": { + "submitted": "Candidatura inviata — lo staff la esaminerà a breve." + }, + "errors": { + "empty": "Scrivi almeno 10 caratteri su di te.", + "invalid": "Candidatura non valida.", + "duplicate": "Ti sei già candidato per questa posizione.", + "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", + "error": "Qualcosa è andato storto. Riprova." + } + }, + "applyTeam": { + "title": "Candidati per il team di {hotel}", + "subtitle": "Apriamo le candidature per il team periodicamente. Se vedi un team adatto a te, non esitare a candidarti!", + "noPositionsTitle": "Nessuna posizione nel team aperta", + "noPositionsBody": "Al momento non ci sono posizioni aperte nel team. Torna più tardi per verificare se ci sono nuove opportunità. Grazie!", + "pending": "La tua candidatura è in attesa", + "aboutYou": "Parlaci di te", + "aboutPlaceholder": "Raccontaci perché saresti perfetto per {rank}…", + "applyFor": "Candidati per {rank}", + "success": { + "submitted": "Candidatura inviata — lo staff la esaminerà a breve." + }, + "errors": { + "empty": "Scrivi almeno 10 caratteri su di te.", + "invalid": "Candidatura non valida.", + "duplicate": "Ti sei già candidato per questo team.", + "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", + "error": "Qualcosa è andato storto. Riprova." + } + }, + "radio": { + "title": "Radio", + "subtitle": "Sintonizzati sulla radio dell'hotel — set DJ in diretta, richieste e saluti.", + "nowPlaying": "In riproduzione", + "nothingPlaying": "Nessun brano in riproduzione al momento.", + "onAir": "In onda: {dj}", + "noDj": "Nessun DJ in onda.", + "audioUnsupported": "Il tuo browser non supporta l'elemento audio.", + "streamOffline": "Lo streaming è al momento offline.", + "exploreTitle": "Esplora la radio", + "exploreSubtitle": "Programmazione, saluti, richieste e altro", + "linkSchedule": "Programmazione", + "linkScheduleText": "La nostra programmazione settimanale di DJ e show.", + "linkShouts": "Saluti", + "linkShoutsText": "Saluti e richieste dalla community.", + "linkRequests": "Richieste", + "linkRequestsText": "Chiedi al DJ di mettere il tuo brano preferito.", + "linkApply": "Candidati come DJ", + "linkApplyText": "Unisciti al team e va' in onda.", + "linkLeaderboard": "Classifica", + "linkLeaderboardText": "I migliori ascoltatori in base ai punti guadagnati.", + "todayTitle": "Programmazione di oggi", + "todayTitleWithDay": "Programmazione di oggi · {day}", + "todaySubtitle": "Cosa c'è in onda oggi", + "fullWeek": "Settimana intera →", + "noShowsToday": "Nessuno show in programma per oggi.", + "colTime": "Orario", + "colShow": "Show", + "colDj": "DJ", + "untitledShow": "Show senza titolo", + "userNumber": "Utente #{id}" + }, + "radioSchedule": { + "title": "Programmazione radio", + "subtitle": "La nostra programmazione settimanale di DJ e show", + "empty": "Nessuno show ancora in programma.", + "colDay": "Giorno", + "colTime": "Orario", + "colDj": "DJ", + "colShow": "Show", + "noShows": "Nessuno show" + }, + "radioShouts": { + "title": "Saluti radio", + "subtitle": "Saluti e richieste dalla community", + "postTitle": "Pubblica un saluto", + "postSubtitle": "Invia un messaggio al DJ in onda", + "messageLabel": "Il tuo messaggio", + "messagePlaceholder": "Invia un saluto al DJ…", + "shoutButton": "Invia", + "loginToPost": "Accedi per pubblicare un saluto.", + "latestTitle": "Ultimi saluti", + "latestSubtitle": "I messaggi più recenti degli ascoltatori", + "empty": "Ancora nessun saluto. Sii il primo!", + "success": { + "posted": "Saluto pubblicato." + }, + "errors": { + "invalid": "Scrivi un messaggio prima di inviare.", + "moderated": "Quel saluto è stato bloccato dalla moderazione.", + "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", + "error": "Qualcosa è andato storto. Riprova." + } + }, + "events": { + "title": "Eventi", + "subtitle": "Eventi dell'hotel in arrivo e recenti a cui puoi partecipare", + "empty": "Ancora nessun evento.", + "back": "← Eventi", + "when": "Quando", + "status": "Stato", + "statusPublished": "Aperto", + "statusCompleted": "Completato", + "registrations": "Iscrizioni", + "registered": "{count} iscritti", + "spots": "{count} / {max} posti", + "registerTitle": "Iscriviti", + "registerSubtitle": "Prenota il tuo posto per questo evento", + "register": "Iscriviti all'evento", + "registering": "Iscrizione in corso…", + "registerSuccess": "Sei iscritto!", + "registerError": "Impossibile iscriversi a questo evento.", + "loginToRegister": "Accedi per iscriverti a questo evento.", + "alreadyRegistered": "Sei già iscritto.", + "eventEnded": "Questo evento è terminato.", + "eventFull": "Questo evento è al completo.", + "cannotRegister": "Le iscrizioni non sono disponibili.", + "prizesTitle": "Premi", + "winnersTitle": "Vincitori", + "unknownUser": "Utente #{id}", + "filterStatus": "Stato", + "allEvents": "Tutti gli eventi", + "statusOngoing": "In corso", + "statusUpcoming": "In programma", + "weekStarting": "Settimana dal (UTC)", + "myRegistrations": "Le mie iscrizioni", + "apply": "Applica", + "reset": "Reimposta", + "timeZoneHint": "Gli orari sono nel tuo fuso locale. Il filtro di sette giorni usa date UTC.", + "loginForRegistrations": "Accedi per vedere le tue iscrizioni.", + "loadError": "Non è stato possibile caricare gli eventi. Riprova.", + "youRegistered": "Sei iscritto", + "pagination": "Pagine eventi", + "previous": "Precedente", + "next": "Successiva", + "pageSummary": "Pagina {page} di {pages} · {total} eventi", + "weeklyView": "Vista settimanale", + "previousWeek": "Settimana precedente", + "nextWeek": "Settimana successiva" + }, + "polls": { + "title": "Sondaggi", + "subtitle": "Condividi la tua opinione nei sondaggi della community", + "empty": "Ancora nessun sondaggio.", + "back": "← Sondaggi", + "statusActive": "Aperto", + "statusClosed": "Chiuso", + "questionsCount": "{count} domande", + "ends": "Termina {date}", + "voteTitle": "Esprimi il voto", + "voteSubtitle": "Rispondi a ogni domanda qui sotto", + "submitVote": "Invia voto", + "voting": "Invio in corso…", + "voteSuccess": "Grazie per aver votato!", + "voteError": "Impossibile inviare il voto.", + "loginToVote": "Accedi per votare in questo sondaggio.", + "alreadyVoted": "Hai già votato.", + "pollClosed": "Questo sondaggio è chiuso.", + "cannotVote": "Il voto non è disponibile.", + "textPlaceholder": "La tua risposta…", + "resultsTitle": "Risultati", + "voteCount": "{count} ({pct}%)", + "totalVotes": "{count} voti totali", + "textResponses": "{count} risposte libere" + }, + "radioContests": { + "title": "Concorsi radio", + "subtitle": "Sintonizzati e partecipa ai nostri ultimi concorsi in onda", + "empty": "Ancora nessun concorso.", + "contestLabel": "Concorso #{id}", + "dateUnknown": "Data sconosciuta" + }, + "radioGiveaways": { + "title": "Omaggi radio", + "subtitle": "Resta in ascolto per avere la possibilità di vincere ai nostri omaggi radio", + "empty": "Ancora nessun omaggio.", + "giveawayLabel": "Omaggio #{id}", + "dateUnknown": "Data sconosciuta" + }, + "radioLeaderboard": { + "title": "Classifica ascoltatori radio", + "subtitle": "I 50 migliori ascoltatori per punti guadagnati sintonizzandosi sulla radio", + "empty": "Ancora nessun punto ascoltatore da mostrare.", + "colRank": "Posizione", + "colAvatar": "Avatar", + "colListener": "Ascoltatore", + "colPoints": "Punti" + }, + "radioApply": { + "title": "Candidati come DJ radiofonico", + "subtitle": "Raccontaci di te e perché saresti perfetto per andare in onda", + "latestTitle": "La tua ultima candidatura", + "statusLabel": "Stato:", + "submittedOn": "· inviata il {date}", + "submitAgain": "Puoi inviare di nuovo qui sotto se i tuoi dati sono cambiati.", + "formTitle": "Modulo di candidatura", + "formSubtitle": "Tutti i campi contrassegnati come obbligatori devono essere compilati", + "realNameLabel": "Nome reale", + "realNamePlaceholder": "Il tuo nome completo", + "ageLabel": "Età", + "availabilityLabel": "Disponibilità", + "availabilityPlaceholder": "In quali giorni e orari puoi trasmettere?", + "musicStyleLabel": "Stile musicale", + "musicStylePlaceholder": "es. House, Pop, Hip-Hop", + "experienceLabel": "Esperienza", + "optional": "(facoltativo)", + "experiencePlaceholder": "Hai esperienze precedenti come DJ o conduttore?", + "motivationLabel": "Motivazione", + "motivationPlaceholder": "Perché vuoi entrare nel team della radio?", + "submitButton": "Invia candidatura", + "success": { + "submitted": "Candidatura inviata — ti ricontatteremo presto." + }, + "errors": { + "invalid": "Compila tutti i campi obbligatori.", + "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", + "error": "Qualcosa è andato storto. Riprova." + } + }, + "settings": { + "accountSettings": "Impostazioni account", + "accountSettingsSubtitle": "Gestisci il tuo profilo, la sicurezza e gli account collegati", + "publicProfile": "Il tuo profilo pubblico", + "noMotto": "Nessun motto", + "noEmail": "Nessuna e-mail registrata", + "changeMotto": "Cambia motto", + "changeMottoSubtitle": "Si aggiorna subito in gioco se sei online", + "mottoPlaceholder": "Il tuo motto", + "saveMotto": "Salva motto", + "securityTitle": "Sicurezza", + "securitySubtitle": "Autenticazione a due fattori", + "securityDescription": "Aggiungi un ulteriore livello di protezione al tuo account.", + "twoFactorLink": "Autenticazione a due fattori" + }, + "settings2fa": { + "backToSettings": "← Impostazioni", + "title": "Autenticazione a due fattori", + "subtitle": "Aggiungi un livello di sicurezza in più con un'app di autenticazione", + "nowEnabled": "L'autenticazione a due fattori è ora attiva. 🔒", + "disabledNotice": "L'autenticazione a due fattori è stata disattivata.", + "badCode": "Codice non valido, riprova.", + "noAppKeyPrefix": "L'autenticazione a due fattori non è disponibile finché non è configurata", + "noAppKeyMiddle": "(la stessa", + "noAppKeySuffix": "Laravel del tuo AtomCMS, così i segreti esistenti restano leggibili).", + "isEnabled": "L'autenticazione a due fattori è attiva", + "onYourAccount": "sul tuo account.", + "disable": "Disattiva 2FA", + "scanOrEnter": "Scansiona o inserisci questa chiave", + "scanInstructions": "Aggiungila a Google Authenticator / Authy, poi inserisci il codice a 6 cifre per confermare.", + "manualKey": "Chiave manuale:", + "codePlaceholder": "Codice a 6 cifre", + "confirm": "Conferma", + "enableIntro": "Aggiungi un livello di sicurezza in più con un'app di autenticazione.", + "enable": "Attiva 2FA", + "rateLimit": "Troppi tentativi. Attendi prima di riprovare." + }, + "title": "Account collegati", + "subtitle": "Collega un account social per poter accedere con un clic", + "connected": "Collegato", + "unavailable": "Non disponibile", + "login": { + "title": "Accedi", + "subtitle": "Bentornato — accedi per entrare nell'hotel.", + "subtitle2fa": "Inserisci il codice a 6 cifre della tua app di autenticazione.", + "usernamePlaceholder": "Nome utente", + "passwordPlaceholder": "Password", + "codePlaceholder": "Codice 2FA", + "pleaseWait": "Attendi…", + "verify": "Verifica", + "signIn": "Accedi", + "or": "oppure", + "noAccount": "Non hai un account?", + "createOne": "Creane uno", + "forgotPassword": "Password dimenticata?", + "errorInvalidCredentials": "Nome utente o password non validi", + "errorInvalid2fa": "Codice 2FA non valido", + "errorUnverified": "Verifica la tua email prima di accedere.", + "errorCaptcha": "Verifica captcha non riuscita. Riprova.", + "welcomeBack": "Bentornato", + "welcomeBackSub": "Accedi per continuare su {hotelName}" + }, + "register": { + "title": "Crea un account", + "subtitle": "Entra nell'hotel — bastano pochi istanti.", + "username": "Nome utente", + "email": "Email", + "password": "Password", + "confirmPassword": "Ripeti la password", + "usernamePlaceholder": "Nome utente", + "emailPlaceholder": "Email", + "passwordPlaceholder": "Password (min 6 caratteri)", + "confirmPasswordPlaceholder": "Ripeti la password", + "selectOutfit": "Scegli il tuo outfit", + "termsAccept": "Ho 18+ anni e accetto i termini e regole di {hotel}.", + "createAccount": "Crea account", + "creatingAccount": "Creazione account...", + "redirecting": "Reindirizzamento al tuo account...", + "alreadyHaveAccount": "Hai già un account? Accedi!", + "register": "Registrati", + "termsError": "Devi accettare i termini e regole per registrarti.", + "usernameError": "Il nome utente è obbligatorio.", + "emailError": "Email valida obbligatoria.", + "passwordError": "La password deve essere di almeno 6 caratteri.", + "confirmPasswordError": "Le password non coincidono.", + "termsRequired": "Devi accettare i termini e le regole.", + "usernameRequired": "Il nome utente è obbligatorio.", + "emailRequired": "Email è obbligatoria.", + "passwordRequired": "La password è obbligatoria.", + "passwordsDontMatch": "Le password non coincidono.", + "alreadyHaveAccountPre": "Hai già un account?", + "alreadyHaveAccountLink": "Accedi", + "whoIsOnline": "Chi è online", + "usersOnline": "{count} online", + "accepted": "Accettato e confermato", + "showPassword": "Mostra", + "hidePassword": "Nascondi", + "accountDetails": "Dettagli dell’account", + "credentials": "Credenziali e sicurezza" + }, + "forgot": { + "title": "Reimposta password", + "subtitle": "Ti invieremo via e-mail un link sicuro per impostare una nuova password.", + "sentNotice": "Se l'indirizzo è registrato, ti abbiamo inviato un link per il reset. Controlla la posta in arrivo.", + "emailPlaceholder": "La tua email", + "sendResetLink": "Invia link di reset", + "backToLogin": "Torna all'accesso", + "errorCaptcha": "Verifica captcha non riuscita. Riprova." + }, + "reset": { + "title": "Imposta una nuova password", + "subtitle": "Scegli una password robusta che non usi altrove.", + "passwordPlaceholder": "Nuova password (min 6 caratteri)", + "resetPassword": "Reimposta password", + "backToLogin": "Torna all'accesso" + }, + "verify": { + "verifiedTitle": "È tutto pronto", + "verifiedSubtitle": "Email verificata", + "verifiedBody": "Il tuo indirizzo email è stato verificato. Ora puoi accedere e giocare.", + "goToLogin": "Vai all'accesso", + "alreadyTitle": "Già verificata", + "alreadySubtitle": "Niente da fare", + "alreadyBody": "Questo indirizzo email è già stato confermato.", + "unavailableTitle": "Riprova tra poco", + "unavailableSubtitle": "Server irraggiungibile", + "unavailableBody": "Non siamo riusciti a raggiungere il server per verificare la tua email. Riprova il link tra un momento.", + "invalidTitle": "Verifica email", + "invalidSubtitle": "Link non valido o scaduto", + "invalidBody": "Questo link di verifica non è valido. Assicurati di aver aperto il link completo della tua email, oppure richiedine uno nuovo.", + "backToLogin": "Torna all'accesso" + }, + "banned": { + "title": "Sei stato bannato", + "subtitle": "Account sospeso", + "body": "Il tuo account è stato sospeso dall'hotel.", + "reasonLabel": "Motivo:", + "permanent": "Questo ban è permanente.", + "expires": "Scade il {date}.", + "contactStaff": "Se ritieni che si tratti di un errore, contatta lo staff." + }, + "maintenance": { + "title": "{hotel} è in manutenzione", + "subtitle": "Torneremo a breve", + "staffCanLogIn": "Lo staff può comunque accedere." + }, + "admin": { + "nav": { + "overview": "Panoramica", + "dashboard": "Dashboard", + "content": "Contenuti", + "articles": "Articoli", + "tags": "Tag", + "navigator": "Navigazione", + "helpCenter": "Centro assistenza", + "advertisements": "Pubblicità", + "writeableBoxes": "Box modificabili", + "photos": "Foto", + "tickets": "Ticket", + "helpTickets": "Ticket centro assistenza", + "events": "Eventi", + "polls": "Sondaggi", + "banners": "Banner", + "prefixes": "Prefissi", + "usersAndAccess": "Utenti e accesso", + "users": "Utenti", + "bans": "Ban", + "ipManagement": "Gestione IP", + "vpn": "VPN", + "applications": "Candidature", + "teams": "Team", + "permissions": "Permessi", + "onlineUsers": "Utenti online", + "moderation": "Moderazione", + "economy": "Economia", + "catalog": "Catalogo", + "shop": "Negozio", + "marketplace": "Mercatino", + "transactions": "Transazioni", + "vouchers": "Buoni", + "subscriptions": "Abbonamenti", + "rareValues": "Valori rari", + "badges": "Distintivi", + "achievements": "Trofei", + "calendar": "Calendario", + "radio": "Radio", + "radioHistory": "Cronologia radio", + "radioBanners": "Banner", + "radioEmbed": "Incorpora", + "radioApiKeys": "Chiavi API", + "radioModeration": "Moderazione", + "radioSettings": "Impostazioni", + "radioMonitoring": "Monitoraggio", + "radioPoints": "Punti", + "radioRanks": "Gradi", + "radioAutodj": "Auto DJ", + "system": "Sistema", + "commandocentrum": "Centro comandi", + "emulator": "Emulatore", + "alerts": "Avvisi", + "logs": "Registri", + "auditLog": "Log di audit", + "analytics": "Analitiche", + "devops": "DevOps", + "wordFilter": "Filtro parole", + "maintenance": "Manutenzione", + "housekeeping": "Archivio permessi", + "rooms": "Stanze", + "emailTemplates": "Template email", + "theme": "Tema", + "media": "Media", + "favicon": "Favicon", + "sounds": "Suoni", + "translations": "Traduzioni", + "import": "Importa", + "settings": "Impostazioni", + "adminMenu": "Menu admin", + "backToSite": "Torna al sito", + "expandAll": "Apri tutte", + "collapseAll": "Chiudi tutte", + "searchMenu": "Cerca nel menu…", + "clearMenuSearch": "Cancella ricerca menu", + "noMenuResults": "Nessuna pagina trovata.", + "hotelManagementPanel": "Pannello di gestione hotel", + "rankLabel": "Grado {rank}", + "hubNewsMedia": "Notizie e media", + "hubSiteContent": "Contenuti sito", + "hubEngagement": "Community", + "hubUsers": "Utenti", + "hubAccess": "Accesso e sicurezza", + "hubCatalog": "Catalogo e rari", + "hubShop": "Negozio e pagamenti", + "hubTools": "Strumenti", + "hubObservability": "Monitoraggio e diagnostica", + "community": "Community", + "monitoring": "Monitoraggio", + "staffAccess": "Gradi e permessi", + "multiAccounts": "Multi-account", + "chatLog": "Log chat", + "commandLog": "Log comandi", + "tradeLog": "Log trade", + "tools": "Strumenti", + "guilds": "Gruppi", + "itemsBase": "Definizioni furni", + "studio": "Studio", + "peopleSupport": "Utenti e assistenza", + "catalogFurniture": "Catalogo e furni", + "communityContent": "Community e contenuti", + "staffPermissions": "Staff e accessi", + "cmsErrors": "Errori CMS", + "themeBuilder": "Editor del tema", + "catalogMaintenance": "Manutenzione catalogo", + "openSidebar": "Apri menu", + "closeSidebar": "Chiudi menu", + "search": { + "placeholder": "Cerca…", + "noResults": "Nessun risultato trovato", + "users": "Utenti", + "articles": "Articoli", + "rooms": "Stanze", + "guilds": "Gruppi", + "shop": "Negozio", + "hint": "Inizia a scrivere per cercare tra utenti, articoli, stanze, gruppi e articoli del negozio" + }, + "operationsCenter": "Centro operazioni" + }, + "dashboard": { + "title": "Dashboard", + "subtitle": "Panoramica hotel e stato in tempo reale", + "playersOnline": "Giocatori online", + "articles": "Articoli", + "activeBans": "Ban attivi", + "database": "Database", + "databaseConnected": "Connesso", + "databaseDown": "Giù", + "usersByRank": "Utenti per grado", + "noAccountsToBreakDown": "Ancora nessun account da analizzare", + "rankLabel": "Grado {rank}", + "rankWithCount": "Grado {rank}: {count} account", + "recentStaffActivity": "Attività recente dello staff", + "viewAll": "Vedi tutto", + "noStaffActivityLogged": "Nessuna attività dello staff ancora registrata", + "totalAccounts": "{count} account totali" + }, + "articles": { + "title": "Articoli", + "subtitle": "Articoli delle news — 50 più recenti", + "newArticle": "+ Nuovo articolo", + "edit": "Modifica", + "delete": "Elimina", + "noArticles": "Ancora nessun articolo", + "confirmDelete": "Sei sicuro di voler eliminare \"{title}\"?", + "colTitle": "Titolo", + "colSlug": "Slug", + "colAuthor": "Autore", + "colCreated": "Creato", + "colActions": "Azioni", + "form": { + "title": "Titolo", + "titlePlaceholder": "Titolo dell'articolo", + "slug": "Slug", + "slugPlaceholder": "slug-url-articolo", + "category": "Categoria", + "categoryPlaceholder": "Seleziona una categoria", + "body": "Corpo", + "bodyPlaceholder": "Scrivi il contenuto dell'articolo…", + "image": "Immagine", + "imagePlaceholder": "https://example.com/immagine.png", + "thumbnail": "Miniatura", + "thumbnailPlaceholder": "https://example.com/miniatura.png", + "published": "Pubblicato", + "featured": "In evidenza", + "save": "Salva articolo", + "saving": "Salvataggio…", + "deleteArticle": "Elimina articolo", + "deleteConfirm": "Questa azione è irreversibile. L'articolo verrà rimosso permanentemente.", + "cancel": "Annulla", + "status": "Stato", + "statusDraft": "Bozza", + "statusScheduled": "Programmato", + "statusPublished": "Pubblicato", + "publishAt": "Data di pubblicazione", + "publishedAt": "Pubblicato il", + "titleRequired": "Inserisci un titolo.", + "titleTooLong": "Il titolo può contenere al massimo 255 caratteri.", + "summaryTooLong": "Il sommario può contenere al massimo 255 caratteri.", + "imageTooLong": "L’URL dell’immagine può contenere al massimo 255 caratteri.", + "invalidStatus": "Seleziona uno stato di pubblicazione valido.", + "publishDateRequired": "Scegli una data di pubblicazione valida.", + "saveFailedReference": "Impossibile salvare la news. Il contenuto è conservato. Riferimento errore: {reference}", + "articleNotFound": "News non trovata.", + "summary": "Sommario", + "imageNotFound": "Immagine non trovata. Inserisci un URL valido o sfoglia i media.", + "imagePreview": "Anteprima immagine della news", + "previewTitle": "Anteprima news", + "previewDescription": "Anteprima del contenuto. La pagina pubblicata usa il tema del sito.", + "previewFrame": "Anteprima contenuto della news", + "autosaveLoading": "Caricamento delle bozze salvate…", + "autosaveReady": "Salvataggio automatico della bozza privata attivo.", + "autosaveSaving": "Salvataggio della bozza privata…", + "autosaveSaved": "Bozza privata salvata. Per applicare le modifiche alla pubblicazione premi Salva.", + "autosaveFailed": "Recupero della bozza non disponibile. Mantieni aperta la pagina e usa Salva; ricarica per riprovare il recupero.", + "autosaveConflict": "Un’altra scheda ha modificato questa bozza. Salvataggio automatico sospeso: ricarica per esaminare la versione più recente.", + "recoveryFound": "È disponibile una bozza privata non completata. Recuperala o eliminala per attivare il salvataggio automatico.", + "recoverDraft": "Recupera bozza", + "discardDraft": "Elimina bozza salvata", + "confirmRecovery": "Sostituire il contenuto nell’editor con la bozza recuperata? Le modifiche non saranno pubblicate finché non salvi.", + "confirmDiscardDraft": "Eliminare definitivamente la bozza di recupero salvata? Il contenuto corrente dell’editor resterà disponibile.", + "revisionHistory": "Versioni salvate precedenti (ultime 20)", + "restoreRevision": "Ripristina nell’editor", + "confirmRevision": "Sostituire il contenuto corrente con questa versione precedente come bozza? Controllala e scegli lo stato di pubblicazione prima di salvare.", + "editConflict": "Questo articolo è stato modificato dopo la tua apertura. Le tue modifiche non sono state applicate. Copia il lavoro, ricarica l’articolo e integra le modifiche prima di salvare di nuovo.", + "retryRecovery": "Ricarica il recupero senza modificare il modulo", + "imageInvalid": "Usa un percorso locale o un URL immagine HTTP/HTTPS senza credenziali.", + "linksInvalid": "Controlla i link del contenuto: sono ammessi link locali, HTTP/HTTPS ed email." + }, + "articlesShown": "Articoli mostrati", + "latest": "Ultimo articolo", + "mostRecentPost": "Pubblicazione più recente", + "recentArticles": "Articoli recenti", + "listActionError": "Non è stato possibile completare l’operazione sulla news.", + "listStatus": "Stato di pubblicazione", + "listStatus_all": "Tutte le news", + "listStatus_draft": "Bozza", + "listStatus_published": "Pubblicata", + "listStatus_scheduled": "Programmata", + "listSearch": "Cerca nel titolo o nel sommario", + "listApply": "Applica", + "listLoading": "Caricamento…", + "listReset": "Reimposta filtri", + "listUnavailable": "Le news non sono al momento disponibili. Riprova.", + "listRetry": "Riprova", + "listTotal": "{count, plural, one {# news trovata} other {# news trovate}}", + "listNoMatches": "Nessuna news corrisponde ai filtri. Modifica la ricerca o reimposta i filtri.", + "listPagination": "Pagine delle news", + "listPrevious": "Precedente", + "listNext": "Successiva", + "listPage": "Pagina {page} di {total}" + }, + "events": { + "newEvent": "+ Nuovo evento", + "createTitle": "Crea evento", + "createSubtitle": "Programma un nuovo evento dell'hotel", + "searchPlaceholder": "Cerca eventi…", + "colId": "ID", + "colTitle": "Titolo", + "colType": "Tipo", + "colStarts": "Inizio", + "colStatus": "Stato", + "colActions": "Azioni", + "statusPublished": "Pubblicato", + "statusDraft": "Bozza", + "statusCancelled": "Annullato", + "statusCompleted": "Completato", + "statRegistrations": "Iscrizioni", + "statPrizes": "Premi", + "statWinners": "Vincitori", + "statTime": "Orario", + "maxPlayers": "Max: {count}", + "timeUpcoming": "In arrivo", + "timePast": "Passato", + "endsAt": "Fine: {date}", + "userFallback": "Utente #{id}", + "registrationsTitle": "Iscrizioni ({count})", + "noRegistrations": "Nessuna iscrizione ancora.", + "noPrizes": "Nessun premio configurato.", + "noWinners": "Nessun vincitore ancora.", + "addPrize": "Aggiungi premio", + "addWinner": "Aggiungi vincitore", + "formEditTitle": "Modifica evento", + "formDetailsTitle": "Dettagli evento", + "formTitle": "Titolo", + "formEventType": "Tipo evento", + "formSelectType": "Seleziona tipo", + "formDescription": "Descrizione", + "formStartsAt": "Inizio", + "formEndsAt": "Fine", + "formSelectStart": "Seleziona data di inizio", + "formSelectEnd": "Seleziona data di fine", + "formMaxPlayers": "Max giocatori", + "formUnlimited": "Illimitato", + "formRoomId": "ID stanza", + "formOptional": "Opzionale", + "formImageUrl": "URL immagine", + "formSaving": "Salvataggio…", + "formUpdate": "Aggiorna evento", + "formCreate": "Crea evento", + "toastUpdated": "Evento aggiornato!", + "toastCreated": "Evento creato!" + }, + "polls": { + "newPoll": "+ Nuovo sondaggio", + "createTitle": "Crea sondaggio", + "createSubtitle": "Crea un nuovo sondaggio o survey della community", + "searchPlaceholder": "Cerca sondaggi…", + "colId": "ID", + "colTitle": "Titolo", + "colStatus": "Stato", + "colType": "Tipo", + "colCreated": "Creato", + "colActions": "Azioni", + "statusActive": "Attivo", + "statusDraft": "Bozza", + "statusClosed": "Chiuso", + "typeMultiple": "Scelta multipla", + "typeSingle": "Scelta singola", + "statVoters": "Votanti totali", + "statQuestions": "Domande", + "statVotes": "Voti totali", + "questionsTitle": "Domande ({count})", + "addQuestion": "Aggiungi domanda", + "noQuestions": "Nessuna domanda ancora. Aggiungi la prima sopra.", + "resultsTitle": "Risultati", + "formEditTitle": "Modifica sondaggio", + "formDetailsTitle": "Dettagli sondaggio", + "formTitle": "Titolo", + "formDescription": "Descrizione", + "formStartsAt": "Inizio", + "formEndsAt": "Fine", + "formSelectStart": "Seleziona data di inizio", + "formSelectEnd": "Seleziona data di fine", + "formShowResults": "Mostra risultati ai votanti", + "formAllowMultiple": "Consenti risposte multiple", + "formSaving": "Salvataggio…", + "formUpdate": "Aggiorna sondaggio", + "formCreate": "Crea sondaggio", + "toastUpdated": "Sondaggio aggiornato!", + "toastCreated": "Sondaggio creato!" + }, + "multiAccounts": { + "minAccounts": "Min. account per cluster", + "resultLimit": "Limite risultati", + "refresh": "Aggiorna", + "noClusters": "Nessun cluster trovato con le soglie attuali." + }, + "devops": { + "noEmulatorErrors": "Nessun errore emulator trovato", + "noRecentErrors": "Nessun errore recente", + "cmsErrors": "Centro errori CMS" + }, + "tags": { + "title": "Tag", + "subtitle": "Tag / categorie degli articoli", + "addTag": "Aggiungi tag", + "name": "Nome", + "namePlaceholder": "Nome del tag", + "backgroundColour": "Colore di sfondo", + "createTag": "Crea tag", + "editTag": "Modifica tag", + "updateTag": "Aggiorna tag", + "deleteTag": "Elimina tag", + "confirmDelete": "Eliminare \"{name}\"?", + "noTags": "Ancora nessun tag", + "colId": "ID", + "colTag": "Tag", + "colColour": "Colore", + "colUsedBy": "Usato da", + "colCreated": "Creato", + "colActions": "Azioni", + "databaseError": "Impossibile caricare i tag. Riprova.", + "totalTags": "Tag totali", + "inUse": "In uso", + "attachedToContent": "Associati a contenuti", + "unused": "Non utilizzati", + "allTags": "Tutti i tag" + }, + "navigation": { + "title": "Navigatore", + "flatCategories": "Categorie piatte", + "publicRooms": "Stanze pubbliche", + "addCategory": "Aggiungi categoria", + "editCategory": "Modifica categoria", + "deleteCategory": "Elimina categoria", + "categoryName": "Nome categoria", + "categoryNamePlaceholder": "es. Relax e Chat", + "categoryOrder": "Ordine", + "roomName": "Nome stanza", + "roomNamePlaceholder": "es. Sala Benvenuto", + "roomId": "ID stanza", + "roomIdPlaceholder": "ID numerico della stanza", + "save": "Salva", + "cancel": "Annulla", + "noCategories": "Ancora nessuna categoria", + "noPublicRooms": "Ancora nessuna stanza pubblica", + "colId": "ID", + "colName": "Nome", + "colOrder": "Ordine", + "colRooms": "Stanze", + "colActions": "Azioni", + "publicFlatcats": "Categorie delle stanze pubbliche", + "markedPublic": "Categorie contrassegnate come pubbliche", + "visibleRooms": "Stanze visibili", + "rows": "righe", + "unnamed": "Stanza senza nome" + }, + "helpCenter": { + "title": "Centro assistenza", + "subtitle": "Gestione voci di supporto e FAQ", + "entries": "Voci", + "newEntry": "+ Nuova voce", + "edit": "Modifica", + "delete": "Elimina", + "noEntries": "Ancora nessuna voce", + "confirmDelete": "Eliminare \"{title}\"?", + "colId": "ID", + "colTitle": "Titolo", + "colCategory": "Categoria", + "colCreated": "Creato", + "colActions": "Azioni", + "form": { + "title": "Titolo", + "titlePlaceholder": "Titolo della voce", + "category": "Categoria", + "categoryPlaceholder": "Seleziona categoria", + "body": "Corpo", + "bodyPlaceholder": "Scrivi la risposta…", + "save": "Salva voce", + "saving": "Salvataggio…", + "deleteEntry": "Elimina voce", + "cancel": "Annulla" + }, + "withButton": "Con pulsante", + "smallBoxes": "Riquadri piccoli" + }, + "ads": { + "title": "Pubblicità", + "subtitle": "Gestisci annunci dell'hotel e banner promozionali", + "newAd": "+ Nuovo annuncio", + "edit": "Modifica", + "delete": "Elimina", + "noAds": "Ancora nessun annuncio", + "confirmDelete": "Eliminare questo annuncio?", + "deleteSuccess": "Annuncio eliminato!", + "deleteError": "Eliminazione annuncio non riuscita.", + "adsCount": "Annunci totali", + "latest": "Ultimo", + "mostRecentAd": "Annuncio più recente", + "allAds": "Tutti gli annunci", + "colPreview": "Anteprima", + "colId": "ID", + "colName": "Nome", + "colImage": "Immagine", + "colUrl": "URL", + "colViews": "Visualizzazioni", + "colStatus": "Stato", + "colCreated": "Creato", + "colActions": "Azioni", + "form": { + "name": "Nome", + "namePlaceholder": "Nome annuncio", + "image": "URL immagine", + "imagePlaceholder": "https://example.com/banner.png", + "url": "URL di destinazione", + "urlPlaceholder": "https://example.com", + "enabled": "Attivo", + "save": "Salva annuncio", + "saving": "Salvataggio…", + "deleteAd": "Elimina annuncio", + "cancel": "Annulla" + } + }, + "writeableBoxes": { + "title": "Box modificabili", + "subtitle": "Pannelli di contenuto mostrati nell'hotel e nel CMS", + "newBox": "Nuovo box", + "edit": "Modifica", + "delete": "Elimina", + "noBoxes": "Ancora nessun box modificabile", + "confirmDelete": "Eliminare questo box?", + "colId": "ID", + "colName": "Nome", + "colLocation": "Posizione", + "colUpdated": "Aggiornato", + "colActions": "Azioni", + "form": { + "name": "Nome", + "namePlaceholder": "Nome del box", + "location": "Posizione", + "locationPlaceholder": "es. homepage, sidebar", + "content": "Contenuto", + "contentPlaceholder": "Scrivi il contenuto del box…", + "enabled": "Attivo", + "save": "Salva box", + "saving": "Salvataggio…", + "deleteBox": "Elimina box", + "cancel": "Annulla", + "iconEmoji": "Icona o emoji" + }, + "totalBoxes": "Riquadri totali", + "active": "Attivo", + "shownOnHomePage": "Mostrato nella pagina iniziale", + "position": "Posizione", + "boxes": "Riquadri di contenuto", + "hidden": "Nascosto", + "hide": "Nascondi", + "activate": "Attiva" + }, + "photos": { + "title": "Moderazione foto", + "subtitle": "Foto recenti dalla fotocamera di gioco", + "purgeHint": "L'eliminazione rimuove la riga DB e, se possibile, il file locale sotto /public. Gli URL CDN esterni non vengono purgati.", + "delete": "Elimina", + "approve": "Approva", + "noPhotos": "Nessuna foto da moderare", + "confirmDelete": "Eliminare questa foto permanentemente?", + "colId": "ID", + "colPreview": "Anteprima", + "colUser": "Utente", + "colRoom": "Stanza", + "colTimestamp": "Data", + "colActions": "Azioni", + "photoAlt": "Foto utente #{id}", + "byUser": "di {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" + }, + "users": { + "title": "Utenti", + "subtitle": "Sfoglia, cerca e gestisci account dell'hotel", + "search": "Cerca", + "searchPlaceholder": "Cerca per nome utente, email o ID…", + "searchResults": "{count, plural, one {# risultato} other {# risultati}} per \"{query}\"", + "noResults": "Nessun utente trovato", + "colId": "ID", + "colUsername": "Nome utente", + "colEmail": "Email", + "colRank": "Grado", + "colOnline": "Online", + "colRegistered": "Registrato", + "colLastOnline": "Ultimo accesso", + "colActions": "Azioni", + "yes": "Sì", + "no": "No", + "edit": "Modifica", + "setRank": "Imposta grado", + "disconnect": "Disconnetti", + "alert": "Avviso", + "ban": "Banna", + "detail": { + "title": "Utente: {username}", + "subtitle": "Dettagli account e gestione", + "overview": "Panoramica", + "actions": "Azioni", + "username": "Nome utente", + "email": "Email", + "motto": "Motto", + "rank": "Grado", + "credits": "Crediti", + "duckets": "Duckets", + "diamonds": "Diamanti", + "online": "Online", + "registered": "Registrato", + "lastOnline": "Ultimo accesso", + "ipAddress": "Indirizzo IP", + "machineId": "ID macchina", + "sendAlert": "Invia avviso", + "sendMessage": "Invia messaggio", + "disconnectUser": "Disconnetti utente", + "banUser": "Banna utente", + "resetPassword": "Reimposta password", + "deleteUser": "Elimina utente", + "confirmDelete": "Sei sicuro di voler eliminare {username}? Questa azione è irreversibile.", + "tabInfo": "Informazioni account", + "tabBadges": "Distintivi ({count})", + "tabRooms": "Stanze ({count})", + "tabSanctions": "Sanzioni ({count})", + "tabActivity": "Attività" + }, + "editForm": { + "title": "Modifica utente: {username}", + "subtitle": "Modifica dettagli account", + "username": "Nome utente", + "usernamePlaceholder": "Nome utente", + "email": "Email", + "emailPlaceholder": "utente@example.com", + "motto": "Motto", + "mottoPlaceholder": "Motto utente", + "rank": "Grado", + "credits": "Crediti", + "duckets": "Duckets", + "diamonds": "Diamanti", + "save": "Salva modifiche", + "saving": "Salvataggio…", + "cancel": "Annulla" + }, + "presentation": { + "users": "Utenti", + "edit": "Modifica", + "view": "Visualizza", + "rank": "Grado {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Bannato", + "credits": "crediti", + "diamonds": "diamanti", + "duckets": "duckets", + "pixels": "pixel", + "rooms": "Stanze", + "messages": "Messaggi", + "trades": "Scambi", + "accountDetails": "Dettagli account", + "registered": "Registrazione", + "lastLogin": "Ultimo accesso", + "ipRegister": "IP di registrazione", + "ipCurrent": "IP attuale", + "machineId": "ID dispositivo", + "email": "Email", + "gender": "Genere", + "never": "Mai", + "findIp": "Cerca utenti con questo IP", + "enabled": "Attiva", + "disabled": "Disattiva", + "unavailable": "Non disponibile", + "noBadges": "Nessun distintivo assegnato" + }, + "create": { + "newUser": "Nuovo utente", + "title": "Crea utente", + "description": "Crea subito l’account con un avatar predefinito e 5.000 crediti, pixel, duckets e diamanti.", + "username": "Nome utente", + "email": "Email", + "password": "Password", + "rank": "Grado", + "rankOption": "Grado {rank}", + "motto": "Motto (facoltativo)", + "usernamePlaceholder": "NuovoHabbo", + "passwordPlaceholder": "Almeno 6 caratteri", + "mottoPlaceholder": "Sono nuovo qui!", + "generate": "Genera", + "passwordGenerated": "Password generata nel campo password.", + "required": "Nome utente, email e password sono obbligatori.", + "invalidUsername": "Usa da 3 a 20 caratteri: lettere, numeri, _ o -.", + "passwordLength": "La password deve contenere almeno 6 caratteri.", + "created": "Utente {username} creato." + }, + "overview": { + "title": "Riepilogo", + "hint": "Fino a 5 record recenti per fonte. Sono mostrate solo le sezioni a cui hai accesso.", + "restricted": "Non hai i permessi per visualizzare i dati operativi.", + "sanctions": "Ban recenti", + "mute": "Mute attivo", + "tickets": "Ticket di assistenza", + "help": "Richieste al centro assistenza", + "reports": "Segnalazioni in gioco", + "transactions": "Pagamenti", + "purchases": "Acquisti dal catalogo", + "activity": "Azioni dello staff registrate", + "openModule": "Apri gestione", + "purchaseHint": "Quantità e costi nelle valute registrate.", + "purchaseDetail": "Quantità: {amount} · Crediti: {credits} · Punti: {points} (tipo {type})", + "activityHint": "Voci del registro staff relative a questo account. Non è la cronologia completa delle attività del giocatore.", + "muteUntil": "Mute fino al {date}", + "error": "Impossibile caricare questa fonte. Ricarica la pagina per riprovare.", + "empty": "Nessun record trovato.", + "status": { + "active": "Attivo", + "expired": "Scaduto", + "open": "Aperto", + "closed": "Chiuso", + "reported": "Utente segnalato", + "reporter": "Segnalante" + } + } + }, + "bans": { + "title": "Ban", + "subtitle": "Gestisci ban di account, IP e macchina", + "newBan": "Nuovo ban", + "edit": "Modifica", + "delete": "Elimina", + "noBans": "Ancora nessun ban", + "confirmDelete": "Rimuovere questo ban?", + "colId": "ID", + "colValue": "Valore", + "colType": "Tipo", + "colReason": "Motivo", + "colBannedBy": "Bannato da", + "colExpires": "Scade", + "colCreated": "Creato", + "colActions": "Azioni", + "form": { + "value": "Valore", + "valuePlaceholder": "Nome utente, IP o ID macchina", + "type": "Tipo", + "typeUser": "Utente", + "typeIp": "IP", + "typeMachine": "Macchina", + "reason": "Motivo", + "reasonPlaceholder": "Motivo del ban", + "expiresAt": "Scade il", + "permanent": "Permanente", + "save": "Salva ban", + "saving": "Salvataggio…", + "cancel": "Annulla" + }, + "activeBans": "Ban attivi", + "permanent": "Ban permanenti", + "accountBans": "Ban degli account", + "userIdPlaceholder": "ID utente", + "typeAccount": "Account", + "typeIp": "Indirizzo IP", + "typeMachine": "Dispositivo", + "typeSuper": "Account, IP e dispositivo", + "hoursPlaceholder": "Durata in ore", + "reasonPlaceholder": "Motivo del ban", + "ban": "Banna utente", + "colUserId": "ID utente", + "lift": "Revoca ban" + }, + "ip": { + "title": "Gestione IP", + "subtitle": "Gestisci whitelist e blacklist IP", + "whitelist": "Whitelist", + "blacklist": "Blacklist", + "addIp": "Aggiungi IP", + "ipAddress": "Indirizzo IP", + "ipAddressPlaceholder": "es. 127.0.0.1", + "reason": "Motivo", + "reasonPlaceholder": "Motivo dell'inserimento", + "add": "Aggiungi", + "remove": "Rimuovi", + "confirmRemove": "Rimuovere questo IP dalla {list}?", + "noWhitelistedIps": "Nessun IP in whitelist", + "noBlacklistedIps": "Nessun IP in blacklist", + "colIp": "IP", + "colReason": "Motivo", + "colAdded": "Aggiunto", + "colActions": "Azioni", + "whitelisted": "Indirizzi IP consentiti", + "blacklisted": "Indirizzi IP bloccati", + "asnPlaceholder": "ASN (facoltativo)", + "colAsn": "ASN" + }, + "vpn": { + "title": "Rilevamento VPN / Proxy", + "subtitle": "Configura le impostazioni di rilevamento VPN e proxy", + "enabled": "Attivo", + "apiKey": "Chiave API", + "apiKeyPlaceholder": "La tua chiave API per il rilevamento VPN", + "apiKeyHint": "Lascia vuoto per disattivare", + "blockOnDetect": "Blocca al rilevamento", + "blockOnDetectHint": "Blocca automaticamente gli utenti rilevati dietro VPN o proxy", + "save": "Salva impostazioni", + "saving": "Salvataggio…", + "settingsSaved": "Impostazioni VPN salvate con successo", + "protection": "Protezione VPN", + "on": "Attiva", + "off": "Disattivata", + "providerLabel": "Provider: {provider}", + "notScreened": "Le connessioni non vengono controllate per l’uso di VPN.", + "settings": "Impostazioni VPN", + "provider": "Provider", + "providerHint": "Scegli il servizio per controllare le connessioni in entrata.", + "blockMessage": "Messaggio per le connessioni bloccate", + "blockMessagePlaceholder": "Disattiva la VPN e riprova.", + "blockMessageHint": "Mostrato quando una connessione viene bloccata dalla protezione VPN.", + "rawIpTitle": "Elenchi degli indirizzi IP", + "rawIpDescription": "Gestisci i singoli indirizzi in Gestione IP.", + "openIpManagement": "Apri gestione IP" + }, + "tickets": { + "title": "Supporto CMS", + "subtitle": "Ticket interni CMS (assegnatario, priorita, workflow staff). Non sono i ticket del help center /help.", + "noTickets": "Nessun ticket attivo", + "searchPlaceholder": "Cerca oggetto, utente, categoria o ID…", + "presetActive": "Attivi", + "statusOpen": "Aperti", + "statusInProgress": "In corso", + "statusWaiting": "In attesa", + "statusClosed": "Chiusi", + "colTicket": "Ticket", + "colStatus": "Stato", + "colPriority": "Priorità", + "colAssigned": "Assegnato", + "colDate": "Data", + "meta": "di {user} · {count} msg · {category}", + "queueHint": "Questa coda e il supporto CMS. I ticket del help center pubblici stanno nella tab Help center.", + "queueOtherCta": "Apri help center", + "queueCounts": "Aperti qui: {here} · Help center: {other}", + "awaitingStaff": "In attesa dello staff", + "assignedMine": "Assegnati a me", + "unassigned": "Non assegnati", + "assignedAny": "Assegnati", + "lastReplyAge": "Dall’ultima risposta", + "ageMinutes": "{count} min fa", + "ageHours": "{count} ore fa", + "ageDays": "{count} giorni fa" + }, + "helpTickets": { + "title": "Ticket help center", + "subtitle": "Ticket aperti dai player su /help/tickets. Separati dal supporto CMS.", + "noTickets": "Nessun ticket aperto nel centro assistenza", + "searchPlaceholder": "Cerca titolo, utente o ID…", + "presetOpen": "Aperti", + "presetAll": "Tutti", + "statusOpen": "Aperti", + "statusClosed": "Chiusi", + "colTicket": "Ticket", + "colStatus": "Stato", + "colUser": "Utente", + "colCreated": "Creato", + "colUpdated": "Aggiornato", + "meta": "di {user} · {count} risposte", + "backToList": "Torna all'elenco", + "threadTitle": "Conversazione", + "staffBadge": "Staff", + "replyPlaceholder": "Rispondi come staff…", + "replySubmit": "Invia risposta", + "replyHint": "Ctrl+Invio per inviare.", + "closeSubmit": "Chiudi ticket", + "reopenSubmit": "Riapri ticket", + "closedHint": "Questo ticket è chiuso.", + "actionsTitle": "Azioni", + "requesterTitle": "Richiedente", + "detailsTitle": "Dettagli", + "rankLabel": "Grado {rank}", + "messageCountLabel": "Messaggi", + "success": { + "replied": "Risposta inviata.", + "closed": "Ticket chiuso.", + "reopened": "Ticket riaperto.", + "banLifted": "Ban revocato e ticket chiuso." + }, + "queueHint": "Questa coda e il help center pubblico. I ticket del supporto CMS stanno nella tab Supporto CMS.", + "queueOtherCta": "Apri supporto CMS", + "queueCounts": "Aperti qui: {here} · Supporto CMS: {other}", + "liftBanSubmit": "Revoca il ban del richiedente e chiudi", + "requesterBanned": "Richiedente bannato" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "Ticket CFH in-game", + "noTickets": "Nessun ticket CFH", + "searchPlaceholder": "Cerca problema, utente o ID…", + "noDescription": "Nessuna descrizione", + "roomMeta": "Stanza #{room} · {when}", + "stateOpen": "Aperti", + "statePicked": "Presi in carico", + "stateClosed": "Chiusi", + "colId": "ID", + "colIssue": "Problema", + "colSender": "Mittente", + "colReported": "Segnalato", + "colMod": "Mod", + "colStatus": "Stato" + }, + "applications": { + "title": "Candidature staff", + "subtitle": "Candidature allo staff in sospeso e revisionate", + "pending": "In sospeso", + "approved": "Approvate", + "rejected": "Respinte", + "noApplications": "Ancora nessuna candidatura", + "colId": "ID", + "colApplicant": "Candidato", + "colPosition": "Posizione", + "colStatus": "Stato", + "colSubmitted": "Inviata", + "colActions": "Azioni", + "review": "Revisiona", + "approve": "Approva", + "reject": "Respindi", + "confirmApprove": "Approvare {username} per {position}?", + "confirmReject": "Respindere la candidatura di {username} per {position}?", + "detail": { + "title": "Candidatura di {username}", + "subtitle": "Per {position}", + "about": "Informazioni sul candidato", + "message": "Messaggio di candidatura", + "status": "Stato", + "submitted": "Inviata", + "noMessage": "Nessun messaggio fornito" + }, + "applicationsTitle": "Candidature ({count})", + "userNumber": "Utente #{id}", + "rankLabel": "Grado {rank}" + }, + "teams": { + "title": "Team", + "subtitle": "Definisci nomi e descrizioni dei gradi dello staff", + "addRank": "Aggiungi grado", + "editRank": "Modifica grado", + "deleteRank": "Elimina grado", + "noTeams": "Ancora nessuna definizione di grado", + "confirmDelete": "Eliminare la definizione del grado {id}?", + "colId": "ID", + "colRank": "Grado", + "colName": "Nome", + "colBadge": "Distintivo", + "colColour": "Colore", + "colActions": "Azioni", + "form": { + "rankId": "ID grado", + "rankIdPlaceholder": "ID numerico del grado", + "name": "Nome", + "namePlaceholder": "es. Amministratore", + "badge": "Codice distintivo", + "badgePlaceholder": "es. ADM001", + "colour": "Colore", + "colourPlaceholder": "es. #ff0000", + "save": "Salva definizione team", + "saving": "Salvataggio…", + "cancel": "Annulla" + }, + "teamRanks": "Gradi dello staff", + "visible": "Visibili", + "hidden": "Nascosti", + "newTeamRank": "Nuovo grado dello staff", + "rankName": "Nome del grado", + "rankNamePlaceholder": "Ad esempio: Moderatore", + "badgeCode": "Codice del distintivo", + "badgeCodePlaceholder": "Ad esempio: ADM", + "jobDescription": "Descrizione dell’incarico", + "jobDescriptionPlaceholder": "Descrivi questo incarico dello staff", + "staffColor": "Colore dello staff", + "staffColorPlaceholder": "Ad esempio: #3366cc", + "hiddenRank": "Nascondi dalla pagina staff", + "createTeam": "Crea grado dello staff", + "ranksTitle": "Gradi dello staff ({count})", + "badge": "Distintivo", + "color": "Colore", + "visibility": "Visibilità", + "delete": "Elimina" + }, + "permissions": { + "title": "Permessi", + "subtitle": "Questo e il controllo accessi live per pannelli admin e mod", + "addPermission": "Aggiungi permesso", + "editPermission": "Modifica permesso", + "deletePermission": "Elimina permesso", + "noPermissions": "Ancora nessun permesso configurato", + "confirmDelete": "Eliminare questo permesso?", + "colId": "ID", + "colRank": "Grado", + "colPermission": "Permesso", + "colCreated": "Creato", + "colActions": "Azioni", + "form": { + "rankId": "ID grado", + "rankIdPlaceholder": "Grado minimo richiesto", + "permission": "Chiave permesso", + "permissionPlaceholder": "es. admin.articles.manage", + "save": "Salva permesso", + "saving": "Salvataggio…", + "cancel": "Annulla" + } + }, + "catalog": { + "title": "Catalogo", + "subtitle": "Sfoglia e gestisci pagine e articoli del catalogo", + "pages": "Pagine", + "items": "Articoli", + "addPage": "Aggiungi pagina", + "editPage": "Modifica pagina", + "deletePage": "Elimina pagina", + "addItem": "Aggiungi articolo", + "editItem": "Modifica articolo", + "deleteItem": "Elimina articolo", + "noPages": "Ancora nessuna pagina catalogo", + "noItems": "Nessun articolo in questa pagina", + "confirmDeletePage": "Eliminare la pagina catalogo \"{name}\"?", + "confirmDeleteItem": "Eliminare questo articolo?", + "colId": "ID", + "colName": "Nome", + "colIcon": "Icona", + "colOrder": "Ordine", + "colItems": "Articoli", + "colEnabled": "Attivo", + "colActions": "Azioni", + "colItemId": "ID articolo", + "colItemName": "Nome articolo", + "colCostCredits": "Costo (crediti)", + "colCostPoints": "Costo (punti)", + "colLimited": "Limitato", + "pageForm": { + "name": "Nome", + "namePlaceholder": "Nome pagina", + "icon": "ID icona", + "iconPlaceholder": "ID numerico icona", + "order": "Ordine", + "enabled": "Attivo", + "parent": "Pagina padre", + "parentNone": "Nessuna (radice)", + "save": "Salva pagina", + "saving": "Salvataggio…", + "cancel": "Annulla" + }, + "itemForm": { + "itemId": "ID articolo", + "itemName": "Nome articolo", + "costCredits": "Costo in crediti", + "costDuckets": "Costo in duckets", + "costDiamonds": "Costo in diamanti", + "limitedStack": "Dimensione lotto limitato", + "limitedSold": "Limitati venduti", + "save": "Salva articolo", + "saving": "Salvataggio…", + "cancel": "Annulla" + }, + "workspace": { + "diagnostics": "Diagnostica", + "editor": "Editor", + "normal": "Catalogo", + "tree": "Albero", + "table": "Tabella", + "manager": "Gestione catalogo", + "backToCategories": "Torna alle categorie", + "retryPage": "Riprova caricamento pagina", + "retryItems": "Riprova caricamento offerte", + "hotel": "Hotel", + "sent": "Richiesta di aggiornamento inviata", + "sendFailed": "Invio aggiornamento fallito", + "unknown": "Stato non ancora disponibile", + "disabled": "Non configurato", + "exportFailed": "Esportazione fallita", + "queued": "Esportazione in attesa", + "exported": "Esportazione completata", + "retryHotel": "Riprova aggiornamento hotel", + "retryStatus": "Stato non disponibile — riprova", + "saved": "Salvato", + "globalSearch": "Cerca nel catalogo", + "searchPlaceholder": "Categoria, offerta, classname o ID", + "searchNoResults": "Nessun risultato", + "searchFailed": "Ricerca non riuscita. Riprova.", + "searching": "Ricerca in corso...", + "category": "Categoria", + "offer": "Offerta", + "duplicate": { + "title": "Duplica categoria", + "description": "Copia questa categoria, tutte le sottocategorie e le relative offerte.", + "name": "Nome della nuova categoria", + "destination": "Categoria di destinazione", + "disabled": "La radice copiata parte disabilitata e nascosta. Le sottocategorie mantengono le impostazioni; definizioni degli arredi e asset sono condivisi.", + "counts": "{pages} categorie e {offers} offerte", + "summary": "“{name}” sotto {destination}", + "cancel": "Annulla", + "working": "Operazione in corso…", + "confirm": "Conferma duplicazione", + "preview": "Anteprima copia", + "saved": "Categoria e offerte duplicate", + "savedPending": "Copia salvata; aggiornamento hotel in attesa", + "failed": "Duplicazione non riuscita", + "root": "Radice del catalogo", + "search": "Cerca categorie…", + "empty": "Nessuna categoria trovata", + "suggested": "Suggerite", + "all": "Tutte le categorie", + "draftBlocked": "Salva o annulla le modifiche alla categoria prima di duplicarla." + }, + "unsaved": "Modifiche non salvate", + "fullEditor": "Editor completo", + "saveHint": "Le modifiche alla categoria non sono salvate. Usa Salva o Ctrl+S.", + "access": { + "enabled": "Categoria attiva", + "enabledHint": "Rende questa categoria disponibile nel catalogo.", + "visible": "Visibile nel menu", + "visibleHint": "Mostra questa categoria nel menu del catalogo.", + "club": "Solo utenti HC", + "clubHint": "Limita l’accesso agli utenti con abbonamento HC.", + "yes": "Sì", + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "bulk": { + "previewCount": "Verranno modificate {count} offerte su {total}.", + "success": "{count} offerte aggiornate.", + "selectOffer": "Seleziona offerta {name} (#{id})", + "pageEmpty": "Nessuna categoria trovata.", + "clearSelection": "Svuota selezione", + "disabledReason": "Salva o annulla le modifiche in sospeso e attendi la fine delle operazioni prima di modificare in blocco.", + "operation": "Operazione", + "loadingDestinations": "Caricamento categorie…", + "cancel": "Annulla", + "pagePlaceholder": "Seleziona la categoria di destinazione…", + "noChanges": "I valori selezionati corrispondono già. Nessuna modifica da salvare.", + "costPoints": "Prezzo in punti", + "chooseFields": "Seleziona almeno un campo da modificare.", + "pageAll": "Tutte le categorie", + "offer": "Offerta", + "costCredits": "Crediti", + "invalidPrice": "Inserisci un numero valido. Le operazioni di impostazione e aggiunta richiedono numeri interi.", + "modes": { + "set": "Imposta valore", + "add": "Aggiungi o sottrai", + "percent": "Varia in percentuale" + }, + "fieldHint": "Verranno modificati solo i campi selezionati.", + "currencies": { + "0": "Duckets", + "5": "Diamanti", + "101": "Fiocchi di neve", + "103": "Cuori", + "104": "Stelle", + "105": "Conchiglie" + }, + "currency": "Valuta dei punti", + "button": "Modifica in blocco ({count})", + "description": "{count} offerte selezionate. Controlla l'anteprima prima di salvare.", + "confirm": "Conferma e salva {count} offerte", + "beforeAfter": "Ogni cella mostra il valore attuale → il nuovo valore.", + "requestFailed": "Richiesta non riuscita. Aggiorna l'anteprima prima di riprovare.", + "priceHint": "Usa valori o percentuali negativi per ridurre i prezzi. Le percentuali vengono arrotondate all'intero più vicino; i prezzi finali non possono essere negativi.", + "selectedCount": "{count} offerte selezionate tra le categorie", + "value": "Valore", + "unknownCurrency": "Tipo {type}", + "becomes": "diventa", + "title": "Modifica le offerte selezionate", + "preview": "Anteprima modifiche", + "retryDestinations": "Riprova a caricare le categorie", + "chooseDestination": "Seleziona una categoria di destinazione.", + "pageSuggested": "Suggerite", + "previewTitle": "Controlla le modifiche in blocco", + "visibilityHint": "La visibilità dipende dalla categoria. Le offerte spostate seguono la visibilità della categoria di destinazione.", + "percentage": "Percentuale (%)", + "destination": "Categoria di destinazione", + "pageSearch": "Cerca categorie…", + "back": "Rivedi le modifiche", + "selectionLimit": "Seleziona al massimo 500 offerte per operazione.", + "refreshing": "Aggiornamento delle offerte modificate…", + "undo": "Annulla", + "undoHint": "Puoi ripristinare le singole offerte anche dalla cronologia delle modifiche.", + "undoSuccess": "Ripristinate {count} offerte." + }, + "discovery": { + "searchPlaceholder": "Nome, classname, ID furni o #ID offerta…", + "filterLabel": "Filtra offerte", + "filters": { + "all": "Tutte le offerte", + "free": "Gratuite", + "paid": "A pagamento", + "bundles": "Pacchetti", + "limited": "Edizioni limitate" + }, + "shown": "({count} visibili)", + "selected": "{count} selezionate", + "reset": "Reimposta filtri", + "results": "{count} offerte visibili su {total}.", + "selectionHint": "Cambiare ricerca o filtro azzera la selezione.", + "noResults": "Nessuna offerta corrisponde alla ricerca e al filtro attuali.", + "selectVisible": "Seleziona tutte le offerte visibili" + }, + "packages": { + "openPackages": "Pacchetti catalogo", + "title": "Pacchetti catalogo", + "description": "Prepara modifiche a categorie e prezzi in una bozza separata. Controlla il catalogo prima di pubblicare.", + "createPackage": "Nuovo pacchetto", + "createDraft": "Crea bozza", + "draftCreated": "Bozza del pacchetto creata. Il catalogo live non è stato modificato.", + "refresh": "Aggiorna elenco", + "searchPackages": "Cerca pacchetti", + "noPackages": "Nessun pacchetto corrisponde alla ricerca.", + "choosePackage": "Apri un pacchetto o crea una bozza dalle categorie esistenti.", + "name": "Nome pacchetto", + "mode": "Modalità pubblicazione", + "update": "Aggiorna categorie esistenti", + "copy": "Crea copie", + "updateHint": "La pubblicazione applica il pacchetto alle categorie e offerte esistenti.", + "copyHint": "La pubblicazione crea nuove categorie e offerte sotto il genitore scelto. I riferimenti ai furni vengono mantenuti.", + "sourceCategories": "Categorie di origine", + "packageLimits": "Sono incluse le sottocategorie. Ogni pacchetto supporta fino a 200 categorie e 500 offerte.", + "searchCategories": "Cerca categorie", + "selectedCategories": "Selezionate: {count}", + "targetParent": "Categoria genitore di destinazione", + "rootCategory": "Radice del catalogo", + "draft": "Bozza", + "published": "Pubblicato", + "editDraft": "Modifica bozza", + "catalogPreview": "Anteprima catalogo", + "showBaseline": "Mostra l’istantanea originale salvata", + "changes": "Prima e dopo", + "entry": "Voce", + "field": "Campo", + "before": "Prima", + "after": "Dopo", + "noChanges": "Nessun campo modificato rispetto all’istantanea originale.", + "copyReview": "Alla pubblicazione sarà copiato l’intero pacchetto, anche senza campi modificati. La tabella elenca le modifiche all’istantanea originale.", + "updateReview": "Queste modifiche della bozza aggiorneranno le voci esistenti dopo la pubblicazione.", + "saveDraft": "Salva bozza", + "saveHint": "Il salvataggio mantiene il pacchetto come bozza. Salva tutte le modifiche prima di richiedere la verifica di pubblicazione.", + "draftSaved": "Bozza salvata. La pubblicazione è un passaggio separato.", + "reviewPublication": "Verifica pubblicazione", + "publicationImpact": "La pubblicazione interessa {pages} categorie e {offers} offerte.", + "conflicts": "La pubblicazione è bloccata da conflitti. Risolvili prima di richiedere una nuova verifica.", + "readyToPublish": "La versione salvata ha superato la verifica. La pubblicazione modifica il catalogo live.", + "publish": "Pubblica pacchetto", + "confirmPublish": "Pubblicare ora questo pacchetto verificato nel catalogo live?", + "publishedSuccess": "Pacchetto pubblicato: {pages} categorie e {offers} offerte.", + "staleReview": "Questo pacchetto è cambiato in un’altra sessione. Riaprilo per verificare l’ultima versione salvata.", + "unsaved": "Modifiche non salvate", + "discardChanges": "Scartare le modifiche non salvate al pacchetto e continuare?", + "working": "Operazione in corso…", + "requestFailed": "La richiesta non è riuscita. Riprova.", + "invalidFields": "Controlla nomi obbligatori, layout e campi numerici interi prima di salvare.", + "category": "Categoria", + "caption": "Nome categoria", + "iconImage": "ID icona categoria", + "minRank": "Rango minimo", + "orderNum": "Ordine di visualizzazione", + "pageLayout": "Layout pagina", + "enabled": "Abilitata", + "visible": "Visibile", + "clubOnly": "Solo membri Club", + "vipOnly": "Solo membri VIP", + "offers": "Offerte ({count})", + "offer": "Offerta", + "catalogName": "Nome offerta", + "costCredits": "Crediti", + "costPoints": "Punti", + "pointsType": "ID valuta punti", + "amount": "Quantità", + "searchOffers": "Cerca offerte", + "currentCategoryOffers": "Solo la categoria selezionata", + "selectMatching": "Seleziona tutte le offerte filtrate ({count})", + "clearSelection": "Svuota selezione", + "selectedOffers": "Offerte selezionate: {count}", + "select": "Seleziona", + "selectOffer": "Seleziona offerta #{id}", + "noOffers": "Nessuna offerta corrisponde ai filtri.", + "bulkPrices": "Prezzi della bozza in blocco ({count} selezionate)", + "bulkHint": "Controlla i prezzi selezionati, poi accettali nella bozza. Il catalogo live resta invariato fino alla pubblicazione.", + "operation": "Operazione", + "set": "Imposta valore", + "add": "Aggiungi o sottrai", + "percent": "Variazione percentuale", + "value": "Valore", + "reviewBulk": "Anteprima prezzi", + "invalidBulk": "Scegli numeri validi e almeno un’offerta. I prezzi risultanti devono essere non negativi e nell’intervallo supportato.", + "acceptBulk": "Accetta prezzi nella bozza", + "previous": "Precedente", + "next": "Successiva" + }, + "integrity": { + "title": "Integrità del catalogo", + "description": "Controlla riferimenti, percorsi delle categorie, identificativi e icone dei furni. Il controllo non modifica i record.", + "catalog": "Catalogo", + "normal": "Catalogo normale", + "bc": "Builders Club", + "refresh": "Ripeti controllo", + "working": "Controllo in corso…", + "failed": "Non è stato possibile completare l’operazione. Riprova.", + "stalePreview": "Il catalogo è cambiato dopo l’anteprima. Genera una nuova anteprima prima di applicare le correzioni.", + "applied": "{count} categorie ricollegate alla radice del catalogo.", + "iconsUnavailable": "Impossibile leggere la cartella delle icone. La disponibilità delle icone non è stata verificata.", + "healthy": "Nessun problema rilevato nei controlli completati.", + "total": "Rilevati {count} problemi. Visualizzati {shown}.", + "open": "Apri", + "reference": "Riferimento: {value}", + "repairHint": "Visualizza le categorie il cui genitore non esiste più. L’applicazione sposta solo queste categorie alla radice e conserva tutti i record. Cicli, furni mancanti, icone e conflitti di identificativi richiedono una verifica individuale.", + "preview": "Anteprima correzioni sicure", + "planned": "Verranno spostate {count} categorie:", + "parentChange": "genitore #{from} → radice del catalogo", + "apply": "Applica le correzioni mostrate", + "legacyTitle": "Azioni di manutenzione avanzata", + "legacyHint": "Questi strumenti di manutenzione esistenti possono riscrivere identificativi e unire o rimuovere record duplicati. Sono separati dal controllo di integrità non distruttivo e dalla correzione dei genitori mostrata in anteprima.", + "issues": { + "missing_furniture": "Offerta con furni mancanti", + "invalid_item_ids": "Identificativi furni non validi", + "missing_page": "Offerta con categoria mancante", + "unreachable_page": "Categoria non raggiungibile", + "category_cycle": "Percorso categoria con ciclo", + "missing_icon": "Icona furni mancante", + "invalid_offer_id": "Identificativo offerta non valido", + "duplicate_offer_id": "Identificativo offerta ripetuto" + } + } + }, + "shop": { + "title": "Negozio", + "subtitle": "Gestisci pacchetti e ordini", + "packages": "Pacchetti", + "orders": "Ordini", + "recentOrders": "Ordini recenti", + "paidOrders": "Ordini pagati", + "ordersHint": "Ultime transazioni PayPal (ultime 25)", + "pageOf": "Pagina {page} di {lastPage}", + "packagesTotal": "{count} pacchetti", + "newPackage": "+ Nuovo pacchetto", + "edit": "Modifica", + "delete": "Elimina", + "viewOrder": "Vedi", + "noPackages": "Ancora nessun pacchetto nel negozio", + "noOrders": "Ancora nessun ordine", + "confirmDelete": "Eliminare questo pacchetto?", + "colId": "ID", + "colName": "Nome", + "colPrice": "Prezzo", + "colCredits": "Crediti", + "colDuckets": "Duckets", + "colDiamonds": "Diamanti", + "colRank": "Grado", + "colPosition": "Posizione", + "colCurrency": "Valuta", + "colType": "Tipo", + "colSold": "Venduti", + "colEnabled": "Attivo", + "colActions": "Azioni", + "colOrderId": "ID ordine", + "colCustomer": "Cliente", + "colPackage": "Pacchetto", + "colTransaction": "Transazione", + "colUser": "Utente", + "colDescription": "Descrizione", + "colAmount": "Importo", + "colStatus": "Stato", + "colDate": "Data", + "statusPending": "In sospeso", + "statusCompleted": "Completato", + "statusRefunded": "Rimborsato", + "form": { + "name": "Nome", + "namePlaceholder": "Nome pacchetto", + "description": "Descrizione", + "descriptionPlaceholder": "Descrizione pacchetto", + "price": "Prezzo", + "currency": "Valuta", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Tipo", + "typeCredits": "Crediti", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamanti", + "typeBadge": "Distintivo", + "typeFurni": "Mobile", + "typeRank": "Grado", + "amount": "Importo", + "badgeCode": "Codice distintivo", + "badgeCodePlaceholder": "es. VIP001", + "rankId": "ID grado", + "furniItems": "Mobili", + "enabled": "Attivo", + "save": "Salva pacchetto", + "saving": "Salvataggio…", + "cancel": "Annulla", + "infoPlaceholder": "Descrivi il contenuto del pacchetto", + "iconPlaceholder": "URL dell’icona", + "colorPlaceholder": "Ad esempio: #3366cc", + "costsPlaceholder": "Prezzo", + "creditsPlaceholder": "Numero di crediti", + "ducketsPlaceholder": "Numero di duckets", + "diamondsPlaceholder": "Numero di diamanti", + "giveRankPlaceholder": "ID grado (0 per nessuno)", + "badgesPlaceholder": "Codici dei distintivi separati da punto e virgola", + "positionPlaceholder": "Ordine di visualizzazione", + "create": "Crea pacchetto", + "deletePackage": "Elimina pacchetto" + }, + "newPackageTitle": "Nuovo pacchetto del negozio", + "backToShop": "Torna al negozio", + "editPackageTitle": "Modifica pacchetto del negozio" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Annunci marketplace hotel", + "activeListings": "Annunci attivi", + "soldListings": "Venduti", + "filterActive": "Attivi", + "filterSold": "Venduti", + "empty": "Nessun annuncio marketplace da mostrare.", + "loadError": "Impossibile caricare i dati marketplace (database non disponibile).", + "cancel": "Annulla annuncio", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Venditore", + "colPrice": "Prezzo", + "colListed": "Pubblicato", + "colSold": "Venduto il", + "colActions": "Azioni" + }, + "guilds": { + "title": "Gruppi", + "subtitle": "Gruppi hotel e membri", + "totalGuilds": "Gruppi", + "searchPlaceholder": "Cerca per nome, descrizione o ID…", + "search": "Cerca", + "empty": "Nessun gruppo trovato.", + "loadError": "Impossibile caricare i gruppi (database non disponibile).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Nome", + "colOwner": "Proprietario", + "colMembers": "Membri", + "colCreated": "Creato", + "colThreads": "Thread forum", + "colRoom": "Stanza", + "colUser": "Utente", + "colLevel": "Livello", + "colJoined": "Iscritto", + "members": "Membri", + "noMembers": "Nessun membro.", + "back": "Torna ai gruppi", + "viewPublic": "Apri pagina pubblica", + "disband": "Sciogli gruppo", + "listHeading": "Guilds ({count})", + "edit": "Modifica gruppo", + "save": "Salva", + "saving": "Salvataggio…", + "updated": "Gruppo aggiornato", + "updateError": "Impossibile aggiornare il gruppo", + "formName": "Nome", + "formDescription": "Descrizione", + "formState": "Stato", + "formForum": "Forum", + "formReadForum": "Leggere il forum", + "formPostMessages": "Pubblicare messaggi", + "formPostThreads": "Creare discussioni", + "formModForum": "Moderare il forum" + }, + "transactions": { + "title": "Transazioni", + "subtitle": "Registro pagamenti PayPal", + "noTransactions": "Ancora nessuna transazione", + "totalTransactions": "Transazioni totali", + "pagePaid": "Pagate (questa pagina)", + "pageFailed": "Fallite (questa pagina)", + "searchPlaceholder": "Cerca per utente, ID transazione o pacchetto…", + "presetPaid": "Pagate", + "presetFailed": "Fallite", + "colId": "ID", + "colUser": "Utente", + "colPayer": "Pagatore", + "colAmount": "Importo", + "colCurrency": "Valuta", + "colPackage": "Pacchetto", + "colStatus": "Stato", + "colTransaction": "ID transazione", + "colDate": "Data", + "colActions": "Azioni", + "statusCompleted": "Completato", + "statusPending": "In sospeso", + "statusFailed": "Fallito", + "statusRefunded": "Rimborsato", + "detail": { + "title": "Transazione #{id}", + "paypalId": "ID PayPal", + "payerEmail": "Email pagatore", + "grossAmount": "Importo lordo", + "fee": "Commissione", + "netAmount": "Importo netto" + } + }, + "vouchers": { + "title": "Buoni negozio", + "subtitle": "Gestisci codici buono riscattabili", + "vouchers": "Buoni", + "active": "Attivi", + "usedUp": "Esauriti", + "expired": "Scaduti", + "newVoucher": "+ Nuovo buono", + "edit": "Modifica", + "delete": "Elimina", + "noVouchers": "Ancora nessun buono", + "confirmDeleteTitle": "Elimina buono", + "confirmDelete": "Eliminare il buono \"{code}\"?", + "created": "Buono creato", + "deleted": "Buono eliminato", + "createError": "Impossibile creare il buono", + "deleteError": "Impossibile eliminare il buono", + "statusActive": "Attivo", + "statusUsedUp": "Esaurito", + "statusExpired": "Scaduto", + "colId": "ID", + "colCode": "Codice", + "colValue": "Valore", + "colAmount": "Importo", + "colType": "Tipo", + "colUses": "Usi / Max", + "colStatus": "Stato", + "colExpires": "Scade", + "colCreated": "Creato", + "colActions": "Azioni", + "form": { + "code": "Codice", + "codePlaceholder": "es. ESTATE2025", + "value": "Valore", + "amount": "Crediti", + "amountPlaceholder": "es. 100", + "type": "Tipo", + "typeCredits": "Crediti", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamanti", + "typeBadge": "Distintivo", + "typeFurni": "Mobile", + "typeRank": "Grado", + "badgeCode": "Codice distintivo", + "badgeCodePlaceholder": "es. VIP001", + "rankId": "ID grado", + "maxUses": "Usi massimi", + "maxUsesPlaceholder": "0 = illimitato", + "expiresAt": "Scade il", + "enabled": "Attivo", + "create": "Crea buono", + "save": "Salva buono", + "saving": "Salvataggio…", + "cancel": "Annulla" + }, + "updated": "Voucher aggiornato", + "updateError": "Impossibile aggiornare il voucher" + }, + "subscriptions": { + "title": "Abbonamenti", + "subtitle": "Abbonamenti ricorrenti attivi", + "noSubscriptions": "Nessun abbonamento attivo", + "cancel": "Annulla", + "confirmCancel": "Annullare l'abbonamento di {username}?", + "colId": "ID", + "colUser": "Utente", + "colPackage": "Pacchetto", + "colAmount": "Importo", + "colInterval": "Intervallo", + "colStarted": "Iniziato", + "colNextBilling": "Prossima fatturazione", + "colStatus": "Stato", + "colActions": "Azioni", + "statusActive": "Attivo", + "statusCancelled": "Annullato", + "statusExpired": "Scaduto", + "activeSubs": "Abbonamenti attivi", + "types": "Tipi di abbonamento", + "expiringSoon": "In scadenza", + "activeSubscriptions": "Abbonamenti attivi", + "colSubId": "ID abbonamento", + "colUserId": "ID utente", + "colType": "Tipo", + "colExpires": "Scadenza" + }, + "rareValues": { + "title": "Valori rari", + "subtitle": "Gestisci categorie di valori rari e prezzi articoli", + "categories": "Categorie", + "items": "Articoli", + "addCategory": "Aggiungi categoria", + "editCategory": "Modifica categoria", + "deleteCategory": "Elimina categoria", + "noCategories": "Ancora nessuna categoria di valori rari", + "confirmDeleteCategory": "Eliminare la categoria \"{name}\" e tutti i suoi articoli?", + "colId": "ID", + "colName": "Nome", + "colItems": "Articoli", + "colUpdated": "Aggiornato", + "colActions": "Azioni", + "colItemName": "Nome articolo", + "colCredits": "Crediti", + "colPoints": "Punti", + "colPointType": "Tipo punti", + "categoryForm": { + "name": "Nome", + "namePlaceholder": "Nome categoria", + "save": "Salva categoria", + "saving": "Salvataggio…", + "cancel": "Annulla" + }, + "itemForm": { + "itemName": "Nome articolo", + "itemNamePlaceholder": "es. Trono", + "credits": "Valore in crediti", + "points": "Valore in punti", + "pointType": "Tipo punti", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Diamanti", + "save": "Salva articolo", + "saving": "Salvataggio…", + "cancel": "Annulla", + "itemIdPlaceholder": "ID furni", + "iconPlaceholder": "URL dell’icona", + "creditsPlaceholder": "Crediti", + "currencyValuePlaceholder": "Valore in valuta", + "addValue": "Aggiungi valore" + }, + "badgePlaceholder": "Codice del distintivo della categoria", + "priorityPlaceholder": "Priorità", + "addCategoryButton": "Aggiungi categoria", + "badgeLabel": "Distintivo: {badge}", + "priorityLabel": "Priorità: {priority}", + "itemCount": "{count} furni", + "colItemId": "ID furni", + "colCurrencyValue": "Valore in valuta", + "colCurrency": "Valuta", + "colIcon": "Icona", + "noValuesInCategory": "Nessun valore ancora presente in questa categoria.", + "editValue": "Modifica valore" + }, + "badges": { + "title": "Distintivi", + "subtitle": "Carica, assegna e gestisci il catalogo distintivi", + "upload": "Carica", + "giveBadge": "Assegna distintivo", + "catalogue": "Catalogo", + "uploadTitle": "Carica un nuovo distintivo", + "uploadSubtitle": "Carica un file immagine del distintivo", + "badgeCode": "Codice distintivo", + "badgeCodePlaceholder": "es. VIP001", + "badgeFile": "File distintivo", + "badgeFileHint": "PNG o GIF, consigliato 40x40", + "uploadButton": "Carica", + "uploading": "Caricamento…", + "giveTitle": "Assegna distintivo a utente", + "giveSubtitle": "Concedi un distintivo a un utente specifico", + "username": "Nome utente", + "usernamePlaceholder": "Nome utente destinatario", + "giveButton": "Assegna distintivo", + "giving": "Assegnazione…", + "catalogueTitle": "Catalogo distintivi", + "catalogueSubtitle": "Tutti i distintivi disponibili nell'hotel", + "noBadges": "Nessun distintivo nel catalogo", + "search": "Cerca distintivi", + "searchPlaceholder": "Cerca per codice o nome…", + "colCode": "Codice", + "colImage": "Immagine", + "colName": "Nome", + "colDescription": "Descrizione", + "colActions": "Azioni", + "uploadedMessage": "Distintivo {code} caricato.", + "errorMessage": "Caricamento non riuscito: {error}", + "userIdPlaceholder": "ID utente" + }, + "achievements": { + "title": "Trofei", + "subtitle": "Elenco di sola lettura dei trofei di gioco", + "noAchievements": "Nessun trofeo configurato", + "colId": "ID", + "colName": "Nome", + "colCategory": "Categoria", + "colLevels": "Livelli", + "colReward": "Ricompensa", + "colProgress": "Progresso", + "levelLabel": "Livello {level}", + "rewardCredits": "{count} crediti", + "rewardPoints": "{count} {points}", + "achievementRows": "Livelli dei traguardi", + "distinctAchievements": "Traguardi distinti", + "categories": "Categorie", + "colLevel": "Livello", + "colRewardType": "Tipo di ricompensa", + "colRewardAmount": "Quantità della ricompensa", + "colPoints": "Punti" + }, + "calendar": { + "title": "Campagne calendario", + "subtitle": "Elenco di sola lettura delle campagne ed eventi del calendario", + "noCampaigns": "Ancora nessuna campagna calendario", + "colId": "ID", + "colName": "Nome", + "colStart": "Inizio", + "colEnd": "Fine", + "colType": "Tipo", + "colReward": "Ricompensa", + "colActions": "Azioni", + "detail": { + "title": "Campagna: {name}", + "subtitle": "Dettagli evento calendario", + "days": "Giorni", + "dayLabel": "Giorno {day}", + "reward": "Ricompensa", + "noDays": "Nessun giorno configurato per questa campagna", + "campaignMeta": "#{id} · {days} giorni · inizio {date}", + "disabled": "Disattivata", + "enabled": "Attiva", + "locksExpired": "Giorni scaduti bloccati", + "rewards": "Ricompense", + "noRewards": "Nessuna ricompensa configurata.", + "colId": "ID", + "colProduct": "Prodotto", + "colItem": "Furni", + "colCredits": "Crediti", + "colPixels": "Duckets", + "colPoints": "Punti", + "colBadge": "Distintivo", + "colSubscription": "Abbonamento", + "typeLabel": "Tipo {type}", + "rewardCount": "{count} ricompense" + }, + "campaigns": "Campagne", + "enabled": "Campagne attive", + "totalRewards": "Ricompense totali", + "statusEnabled": "Attiva", + "statusDisabled": "Disattivata", + "campaignMeta": "#{id} · {days} giorni · {rewards} ricompense", + "startsAt": "Inizio: {date}", + "locksExpired": "Giorni scaduti bloccati" + }, + "radio": { + "title": "Moderazione radio", + "subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).", + "moderation": "Moderation", + "shouts": "Saluti", + "applications": "Candidature", + "schedules": "Programmazioni", + "settings": "Impostazioni", + "embed": "Incorpora", + "ranks": "Gradi", + "history": "Cronologia", + "apiKeys": "Chiavi API", + "points": "Punti", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Monitoraggio radio", + "subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.", + "stream": "Stream", + "online": "Online", + "offline": "Offline", + "notConfigured": "Not configured", + "nowPlaying": "Now playing", + "nowPlayingApi": "Now-playing API", + "listenersApi": "Listeners API", + "listeners": "Ascoltatori", + "currentSong": "Brano in corso", + "bitrate": "Bitrate", + "status": "Stato", + "noNowPlayingHint": "no now-playing API set", + "noListenersHint": "no listeners API set", + "endpointDiagnostics": "Endpoint diagnostics", + "diagnosticsLegend": "OK: raggiungibile · WARN: non configurato · ERROR: richiesta non riuscita o scaduta.", + "streamUrl": "Stream URL", + "unreachable": "unreachable", + "refresh": "Aggiorna" + }, + "user": "User", + "message": "Message", + "posted": "Posted", + "realName": "Real Name", + "age": "Age", + "style": "Style", + "applied": "Applied", + "day": "Day", + "start": "Start", + "end": "End", + "show": "Show", + "status": "Stato", + "active": "active", + "inactive": "inactive", + "hidden": "hidden", + "activeSchedules": "Active schedules", + "noShouts": "Nessun saluto da moderare", + "noApplications": "No applications submitted.", + "noSchedules": "No schedules configured.", + "deleteShout": "Elimina", + "confirmDeleteShout": "Eliminare questo saluto?", + "pendingApplications": "Candidature in sospeso", + "settingsForm": { + "title": "Radio Settings", + "subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "enabled": "Enabled", + "disabled": "Disabled", + "totalKeys": "Total keys", + "configured": "Configured", + "curatedHint": "curated keys with a value", + "customKeys": "Custom keys", + "saveAll": "Save all", + "singleKey": "Add / overwrite a single key", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "value", + "commentPlaceholder": "comment (optional)", + "saveSingle": "Save", + "otherSettings": "Other radio settings", + "dbError": "Could not load settings (database unavailable). Defaults will be created on save." + }, + "embedPage": { + "title": "Radio Embed", + "subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).", + "streamUrl": "Stream URL", + "configured": "Configured", + "missing": "Missing", + "radioName": "Radio name", + "nowPlayingApi": "Now-playing API", + "set": "Set", + "notSet": "Not set", + "noStreamUrl": "No stream URL configured", + "noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.", + "goToSettings": "Go to Radio Settings", + "livePreview": "Live preview", + "livePreviewText": "Questo è il lettore audio mostrato ai visitatori. Avvia la riproduzione per verificare che lo streaming sia raggiungibile.", + "source": "Source", + "audioSnippet": "Audio player snippet", + "audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.", + "iframeSnippet": "Iframe wrapper snippet", + "iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.", + "audioUnsupported": "Your browser does not support the audio element." + }, + "banners": { + "title": "Banner", + "heading": "Radio Banners", + "description": "Promotional banners shown on the radio page, ordered by sort order.", + "addBanner": "Aggiungi banner", + "createBanner": "Create banner", + "deleteBanner": "Elimina banner", + "noBanners": "No banners yet — add one above.", + "existing": "Existing banners ({count})", + "save": "Save", + "delete": "Delete", + "byUser": "by user {id}", + "active": "active", + "hidden": "hidden", + "bannerAlt": "Radio banner", + "statusActive": "Active", + "statusHidden": "Hidden", + "dbError": "Could not load banners (database unavailable).", + "form": { + "imagePath": "Image path / URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Title", + "description": "Description", + "sortOrder": "Sort order", + "active": "Active" + } + }, + "ranksForm": { + "title": "Gradi radio", + "subtitle": "DJ / staff ranks assignable on radio applications.", + "dbError": "Could not load ranks (database unavailable).", + "active": "Active", + "addRank": "Add rank", + "name": "Name", + "badgeCode": "Badge code", + "description": "Description", + "createRank": "Create rank", + "existing": "Existing ranks ({count})", + "noRanks": "No ranks yet — add one above.", + "activeLabel": "active", + "inactiveLabel": "inactive", + "save": "Save", + "deleteRank": "Delete rank #{id}" + }, + "historyPage": { + "title": "Radio Play History", + "subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.", + "dbError": "Could not load radio history (database unavailable).", + "showsLogged": "Shows logged", + "onAirNow": "On air now", + "uniqueDjs": "Unique DJs", + "peakListeners": "Peak listeners", + "empty": "No radio history recorded yet.", + "showLog": "Show log ({count})", + "colDj": "DJ", + "colShow": "Show", + "colStarted": "Started", + "colEnded": "Ended", + "colAirtime": "Airtime", + "colListeners": "Listeners", + "colNotes": "Notes", + "onAir": "on air" + }, + "apiKeysForm": { + "title": "Chiavi API", + "subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.", + "dbError": "Could not load API keys (database unavailable).", + "totalKeys": "Total keys", + "active": "Active", + "inactive": "Inactive", + "generateKey": "Genera nuova chiave", + "generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.", + "name": "Name", + "namePlaceholder": "AzureCast bridge", + "rateLimit": "Rate limit (requests/min)", + "allowedIps": "Allowed IPs (optional)", + "allowedIpsPlaceholder": "comma-separated, blank = any", + "generate": "Genera", + "existingKeys": "Existing keys ({count})", + "noKeys": "No API keys yet — generate one above.", + "colName": "Name", + "colKey": "Chiave", + "colAllowedIps": "Allowed IPs", + "colRateLimit": "Rate limit", + "colLastUsed": "Last used", + "colExpires": "Expires", + "colStatus": "Status", + "colActions": "Azioni", + "maskedHint": "Only the first 8 characters are shown", + "any": "any", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete" + }, + "pointsForm": { + "title": "Configurazione punti ascoltatore", + "subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "saved": "Impostazioni salvate.", + "points": "Points", + "enabled": "Enabled", + "disabled": "Disabled", + "perMinute": "Per minute", + "paidIn": "paid in {currency}", + "maxPerDay": "Max / day", + "unlimited": "Unlimited", + "minListeners": "Min listeners", + "settings": "Settings", + "pointsEnabled": "Points enabled", + "pointsEnabledHint": "Master switch for awarding listener points.", + "currency": "Currency", + "currencyHint": "Which wallet the points are paid into.", + "pointsPerMinute": "Points per minute", + "pointsPerMinuteHint": "Amount awarded for each full minute of listening.", + "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", + "minListenersHint": "Points are only awarded when at least this many people are tuned in.", + "save": "Salva impostazioni punti" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.", + "dbError": "Could not load the AutoDJ playlist (database unavailable).", + "tracks": "Tracks", + "active": "Active", + "inactive": "Inactive", + "addTrack": "Add track", + "titlePlaceholder": "Track title", + "artist": "Artist", + "album": "Album", + "artworkUrl": "Artwork URL", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Duration (seconds)", + "durationPlaceholder": "e.g. 215", + "sortOrder": "Sort order", + "playlist": "Playlist ({count})", + "noTracks": "No AutoDJ tracks yet — add one above.", + "colOrder": "Order", + "colTitle": "Title", + "colArtist": "Artist", + "colAlbum": "Album", + "colDuration": "Duration", + "colPlays": "Plays", + "colLastPlayed": "Last played", + "colStatus": "Status", + "colActions": "Actions", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete", + "trackTitle": "Title" + }, + "moderationPage": { + "title": "DJ Moderation", + "subtitle": "Review and remove radio shouts (50 most recent).", + "recentShouts": "Recent Shouts ({count})" + } + }, + "commandocentrum": { + "title": "Centro comandi", + "subtitle": "Diagnostica, controlli RCON e gestione utenti", + "diagnostics": "Diagnostica", + "rcon": "RCON", + "userActions": "Azioni utente", + "diagnosticsTitle": "Diagnostica emulatore", + "memoryUsage": "Utilizzo memoria", + "uptime": "Uptime", + "onlineUsers": "Utenti online", + "roomsLoaded": "Stanze caricate", + "refresh": "Aggiorna", + "rconTitle": "Comandi RCON", + "rconPlaceholder": "Inserisci comando RCON…", + "rconSend": "Invia", + "rconSending": "Invio…", + "rconResponse": "Risposta", + "userActionsTitle": "Azioni utente", + "username": "Nome utente", + "usernamePlaceholder": "Nome utente destinatario", + "action": "Azione", + "execute": "Esegui", + "actions": { + "disconnect": "Disconnetti", + "alert": "Invia avviso", + "giveCredits": "Dai crediti", + "giveBadge": "Dai distintivo", + "givePoints": "Dai punti", + "ban": "Banna", + "kick": "Espelli" + }, + "messagePlaceholder": "Messaggio (per avvisi)…", + "amountPlaceholder": "Importo…", + "badgePlaceholder": "Codice distintivo…", + "commandCategories": "Categorie comandi", + "groups": { + "hotel": "Hotel", + "players": "Giocatori", + "rewards": "Valute e regali", + "advanced": "Avanzati" + }, + "executing": "Esecuzione comando…", + "chooseCommand": "Scegli un’operazione. I valori inseriti restano salvati cambiando categoria.", + "refreshStatus": "Aggiorna stato", + "checkedAt": "Verificato alle {time}", + "serviceAttention": "Alcuni servizi richiedono attenzione", + "servicesHealthy": "I servizi principali rispondono", + "cmsErrors": "Centro errori CMS", + "readFailed": "Impossibile caricare i dati", + "emulatorConfig": "Connessione emulatore", + "emailConfig": "Invio email", + "configured": "Configurato", + "playersOnline": "Giocatori online", + "totalAccounts": "{count} account totali", + "dbUnavailable": "Database non disponibile", + "emulator": "Emulatore", + "online": "Online", + "offline": "Offline", + "rconReachable": "Connessione all’emulatore disponibile", + "rconNotResponding": "L’emulatore non risponde", + "database": "Database", + "connected": "Connesso", + "down": "Non disponibile", + "queriesResponding": "Il database risponde alle richieste", + "cannotReachDb": "Impossibile connettersi al database", + "emulatorErrors": "Errori emulatore", + "last50Logged": "Fino agli ultimi 50 eventi registrati", + "serverInfo": "Informazioni server", + "node": "Node.js", + "platform": "Piattaforma", + "appUptime": "Tempo di attività applicazione", + "heapUsed": "Memoria heap utilizzata", + "rss": "Memoria processo (RSS)", + "hostUptime": "Tempo di attività server", + "load1m": "Carico medio (1 min)", + "cpus": "CPU logiche", + "systemDiagnostics": "Diagnostica sistema", + "connectionHealthy": "Connessione funzionante", + "unreachable": "Non raggiungibile", + "emulatorRcon": "Connessione emulatore", + "respondingToPing": "Risponde ai controlli di stato", + "noResponse": "Nessuna risposta", + "notConfigured": "Non configurato", + "twoFaEncryptionKey": "Chiave di cifratura 2FA", + "appKeyConfigured": "Chiave di cifratura configurata", + "appKeyMissing": "Chiave di cifratura mancante", + "maintenanceMode": "Modalità manutenzione", + "siteIsInMaintenance": "Il sito è in manutenzione", + "siteIsLive": "Il sito è aperto", + "recentStaffActivity": "Attività recenti dello staff", + "noStaffActivity": "Nessuna attività recente dello staff", + "colWhen": "Data e ora", + "colStaff": "Membro dello staff", + "colAction": "Azione", + "colDescription": "Descrizione", + "recentEmulatorErrors": "Errori recenti dell’emulatore", + "noEmulatorErrors": "Nessun errore dell’emulatore registrato", + "colType": "Tipo", + "colVersion": "Versione", + "colStacktrace": "Dettagli errore", + "truncated": "Ulteriori righe omesse", + "empty": "Nessun dettaglio disponibile", + "defaultGiftMessage": "Un regalo per te!", + "emulatorControls": "Comandi emulatore", + "updateCatalog": "Ricarica catalogo", + "updateCatalogDesc": "Ricarica il catalogo dal database.", + "updateWordFilter": "Ricarica filtro parole", + "updateWordFilterDesc": "Applica le ultime impostazioni del filtro parole.", + "updateNavigator": "Ricarica navigatore", + "updateNavigatorDesc": "Ricarica i dati del navigatore stanze.", + "hotelAlert": "Avviso hotel", + "hotelAlertDesc": "Invia un messaggio a tutti i giocatori online.", + "messageToBroadcast": "Messaggio per tutti i giocatori", + "sendAlert": "Invia avviso", + "disconnectDesc": "Disconnetti il giocatore selezionato dall’hotel.", + "userId": "ID utente", + "usernameRequired": "Nome utente (obbligatorio)", + "alertDesc": "Invia un avviso privato a un giocatore.", + "alertMessage": "Messaggio di avviso", + "forwardToRoom": "Sposta giocatore in stanza", + "forwardDesc": "Invia il giocatore selezionato in una stanza specifica.", + "roomId": "ID stanza", + "forwardUser": "Sposta giocatore", + "giveCredits": "Assegna crediti", + "giveCreditsDesc": "Aggiungi crediti al saldo del giocatore selezionato.", + "amount": "Quantità", + "giveDuckets": "Assegna duckets", + "giveDucketsDesc": "Aggiungi duckets al saldo del giocatore selezionato.", + "giveDiamonds": "Assegna diamanti", + "giveDiamondsDesc": "Aggiungi diamanti al saldo del giocatore selezionato.", + "giveBadge": "Assegna distintivo", + "giveBadgeDesc": "Assegna un distintivo al giocatore selezionato.", + "badgeCode": "Codice distintivo", + "setMotto": "Modifica motto", + "setMottoDesc": "Aggiorna il motto del giocatore selezionato.", + "newMotto": "Nuovo motto", + "setRank": "Modifica rank", + "setRankDesc": "Aggiorna il rank del giocatore selezionato.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Esegui comando emulatore", + "executeCommandDesc": "Esegui un comando per il giocatore selezionato.", + "commandPlaceholder": "Comando", + "sendGift": "Invia regalo", + "sendGiftDesc": "Invia un furno in regalo al giocatore selezionato.", + "furniId": "ID furno", + "giftMessage": "Messaggio del regalo" + }, + "emulator": { + "title": "Configurazione emulatore", + "subtitle": "Visualizza e modifica impostazioni emulatore e testi di localizzazione", + "settings": "Impostazioni", + "texts": "Testi", + "search": "Cerca", + "searchPlaceholder": "Cerca chiavi…", + "noSettings": "Nessuna impostazione trovata", + "noTexts": "Nessun testo trovato", + "edit": "Modifica", + "save": "Salva", + "saving": "Salvataggio…", + "cancel": "Annulla", + "colKey": "Chiave", + "colValue": "Valore", + "colType": "Tipo", + "colActions": "Azioni", + "editDialog": { + "title": "Modifica: {key}", + "value": "Valore", + "valuePlaceholder": "Inserisci valore…", + "save": "Salva modifiche", + "cancel": "Annulla" + }, + "settingsKeys": "Impostazioni", + "textKeys": "Voci di testo", + "keysCount": "{count} chiavi", + "addOverwriteSetting": "Aggiungi o aggiorna un’impostazione", + "key": "Chiave", + "value": "Valore", + "showingFirst": "Prime {count} voci mostrate", + "addOverwriteText": "Aggiungi o aggiorna un testo", + "truncatedHint": "Mostrate {shown} voci su {total}." + }, + "alerts": { + "title": "Avvisi", + "subtitle": "Invia avvisi a tutto l'hotel e visualizza avvisi recenti", + "sendAlert": "Invia avviso hotel", + "recentAlerts": "Avvisi recenti ({count})", + "noRecentAlerts": "Nessun avviso recente", + "form": { + "title": "Titolo avviso", + "titlePlaceholder": "es. Manutenzione server tra 10 minuti", + "message": "Messaggio avviso", + "messagePlaceholder": "Scrivi il messaggio dell'avviso…", + "type": "Tipo", + "typeHotel": "Avviso a tutto l'hotel", + "typeStaff": "Solo staff", + "urgent": "Urgente", + "send": "Invia avviso", + "sending": "Invio…", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "ID", + "colTitle": "Titolo", + "colSentBy": "Inviato da", + "colType": "Tipo", + "colDate": "Data", + "colActions": "Azioni", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Attività dello staff", + "subtitle": "Traccia di controllo delle azioni dello staff nel pannello admin", + "noLogs": "Nessuna attività dello staff ancora registrata", + "colId": "ID", + "colUser": "Utente", + "colAction": "Azione", + "colTarget": "Destinatario", + "colDescription": "Descrizione", + "colIp": "IP", + "colTimestamp": "Data", + "filterByUser": "Filtra per utente…", + "filterByAction": "Filtra per azione…", + "clearFilters": "Pulisci filtri", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "sconosciuto", + "emptyValue": "-", + "colTime": "Ora", + "audit": { + "colTargetId": "ID destinazione", + "colDetails": "Dettagli", + "colDate": "Data", + "searchPlaceholder": "Cerca per azione o destinazione…", + "changesCount": "{count} modifiche", + "notAvailable": "N/D", + "filtersTitle": "Filtra il registro attività", + "filterActor": "Autore (nome esatto o ID)", + "filterAction": "Azione esatta", + "filterFrom": "Dal giorno (UTC)", + "filterTo": "Fino al giorno (UTC)", + "filtersHint": "Le date includono l’intera giornata in UTC. Azioni e nomi utente devono corrispondere esattamente. Le attività più recenti compaiono per prime.", + "applyFilters": "Applica filtri", + "resetFilters": "Reimposta filtri", + "invalidDetails": "I dettagli di questa vecchia registrazione non sono visualizzabili.", + "beforeValue": "Prima", + "afterValue": "Dopo", + "exportHint": "Il CSV esporta la pagina filtrata corrente, fino a 100 registrazioni.", + "operation": "Operazione" + }, + "chat": { + "colMessage": "Messaggio", + "colRoomId": "ID stanza", + "searchPlaceholder": "Cerca per username o messaggio…" + }, + "commands": { + "colCommand": "Comando", + "colParams": "Parametri", + "searchPlaceholder": "Cerca per username, comando o parametri…" + }, + "trades": { + "colUserOne": "Utente uno", + "colUserTwo": "Utente due", + "colStatus": "Stato", + "statusUnknown": "sconosciuto", + "searchPlaceholder": "Cerca per username…" + }, + "history": { + "preview": "Anteprima ripristino", + "title": "Ripristina una modifica registrata", + "description": "Confronta i valori attuali con quelli precedenti prima di confermare. Vengono ripristinati solo impostazioni della categoria, prezzi dell’offerta o contenuto della notizia. Record eliminati e gerarchia delle categorie sono esclusi.", + "loading": "Caricamento…", + "unavailable": "La revisione non è disponibile oppure non hai il permesso di ripristinarla.", + "conflict": "Questo record è cambiato dopo la modifica selezionata. Aggiorna e controlla lo storico più recente prima di ripristinare.", + "failed": "Ripristino non completato. Ricarica la pagina e riprova.", + "field": "Campo", + "current": "Valore attuale", + "restore": "Valore da ripristinare", + "confirm": "Conferma ripristino", + "restoring": "Ripristino in corso…", + "fields": { + "caption": "Nome categoria", + "captionSave": "Nome interno categoria", + "pageLayout": "Layout categoria", + "enabled": "Abilitata", + "visible": "Visibile", + "clubOnly": "Solo membri Club", + "vipOnly": "Solo membri VIP", + "minRank": "Grado minimo", + "iconImage": "Icona categoria", + "iconColor": "Colore icona", + "pageHeadline": "Immagine intestazione", + "pageTeaser": "Immagine anteprima", + "pageSpecial": "Immagine speciale", + "pageText1": "Testo principale", + "pageText2": "Testo secondario", + "pageTextDetails": "Testo dettagli", + "pageTextTeaser": "Testo anteprima", + "includes": "Categorie incluse", + "costCredits": "Prezzo in crediti", + "costPoints": "Prezzo in punti", + "pointsType": "Valuta dei punti", + "title": "Titolo notizia", + "slug": "Indirizzo notizia", + "image": "Immagine notizia", + "shortStory": "Sommario", + "fullStory": "Contenuto articolo", + "status": "Stato pubblicazione", + "publishAt": "Pubblicazione programmata", + "publishedAt": "Data pubblicazione", + "pageId": "Categoria" + } + } + }, + "wordfilter": { + "title": "Filtro parole", + "subtitle": "Gestisci parole e frasi filtrate nell'hotel", + "filteredWords": "Parole filtrate", + "addWord": "Aggiungi parola", + "addWords": "Aggiungi parole", + "words": "Parole", + "noWords": "Ancora nessuna parola filtrata", + "delete": "Elimina", + "confirmDeleteTitle": "Rimuovi parola", + "confirmDelete": "Rimuovere \"{word}\" dal filtro?", + "added": "Parola aggiunta al filtro", + "deleted": "Parola rimossa dal filtro", + "addError": "Impossibile aggiungere la parola (potrebbe già esistere)", + "deleteError": "Impossibile rimuovere la parola", + "colId": "ID", + "colWord": "Parola", + "colAddedBy": "Aggiunto da", + "colCreated": "Creato", + "colActions": "Azioni", + "form": { + "word": "Parola", + "wordPlaceholder": "es. parolaccia", + "addMore": "Aggiungi più parole (una per riga)", + "save": "Aggiungi al filtro", + "saving": "Salvataggio…", + "cancel": "Annulla" + } + }, + "maintenance": { + "title": "Modalità manutenzione", + "subtitle": "Attiva o disattiva la manutenzione dell'hotel", + "enabled": "La modalità manutenzione è attiva", + "disabled": "La modalità manutenzione è disattiva", + "enable": "Attiva manutenzione", + "disable": "Disattiva manutenzione", + "message": "Messaggio di manutenzione", + "messagePlaceholder": "Torneremo a breve!", + "staffAccess": "Consenti accesso allo staff durante la manutenzione", + "save": "Salva impostazioni", + "saving": "Salvataggio…", + "confirmEnable": "Attivare la manutenzione impedirà a tutti gli utenti non dello staff di accedere all'hotel. Continuare?", + "confirmDisable": "Disattivare la modalità manutenzione e ripristinare l'accesso per tutti gli utenti?", + "maintenance": "Manutenzione", + "hotelLockedDown": "Accesso all’hotel limitato.", + "hotelOpen": "L’hotel è aperto.", + "minLoginRank": "Grado minimo per accedere", + "duringMaintenance": "Durante la manutenzione", + "splashMessage": "Messaggio di manutenzione", + "set": "Configurato", + "empty": "Vuoto", + "currentState": "Stato attuale", + "maintenanceCurrently": "Manutenzione: {status}", + "onlyRankCanLogin": "Possono accedere solo gli utenti con grado {rank} o superiore.", + "hotelOpenToEveryone": "Tutti gli utenti abilitati possono accedere.", + "settings": "Impostazioni", + "enableMaintenance": "Attiva la modalità manutenzione", + "minLoginRankLabel": "Grado minimo consentito durante la manutenzione", + "maintenanceMessageLabel": "Messaggio mostrato ai visitatori", + "maintenanceMessagePlaceholder": "Spiega perché l’hotel non è disponibile.", + "saveChanges": "Salva modifiche" + }, + "housekeeping": { + "title": "Archivio permessi", + "subtitle": "Vecchia tabella di backup. L'accesso reale si gestisce in Permessi — qui solo confronto ed export.", + "addPermission": "Aggiungi permesso", + "editPermission": "Modifica permesso", + "deletePermission": "Elimina permesso", + "noPermissions": "Nessun permesso housekeeping configurato", + "confirmDelete": "Eliminare questo permesso?", + "colId": "ID", + "colRank": "Grado", + "colSection": "Sezione", + "colActions": "Azioni", + "form": { + "rankId": "ID grado", + "rankIdPlaceholder": "Grado minimo", + "section": "Chiave sezione", + "sectionPlaceholder": "es. admin.dashboard", + "save": "Salva permesso", + "saving": "Salvataggio…", + "cancel": "Annulla" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset applied!", + "cleared": "All Permessi cleared!", + "invalidRank": "Invalid Grado", + "testDone": "Test done: {count} Permessi found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Elimina ALL Permessi? This Azione cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Permesso", + "colDescription": "Descrizione", + "colMinRank": "Min. Grado", + "permissionKey": "Chiave permesso", + "minRank": "Min. Grado", + "description": "Descrizione", + "permissions": "Permessi", + "permissionsCount": "{count} Permessi", + "permission": "Permesso", + "highestMinRank": "Highest min. Grado: {rank}", + "totalMinRank": "Total min. Grado sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Gradi", + "missingDeps": "{count} missing dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(missing)", + "rank": "Grado", + "count": "Count", + "searchPermission": "Cerca Permessi…", + "search": "Cerca", + "manage": "Manage", + "importSelection": "Importa selection", + "noGroup": "No group", + "allGroups": "All groups", + "perGroup": "Permessi per group", + "perRank": "Permessi per Grado", + "rankOverviewHint": "All Permessi grouped by the Grado they are assigned to.", + "tabOverview": "Panoramica", + "tabManage": "Manage", + "tabImport": "Importa / Export", + "tabRanks": "Grado Panoramica", + "tabPresets": "Preimpostazioni", + "tabTest": "Test", + "tabAudit": "Log di audit", + "importPermissions": "Importa Permessi", + "importHint": "Incolla un array JSON di permessi con i campi permission, minRank, description, groupName e dependsOn.", + "importPlaceholder": "Paste JSON here…", + "import": "Importa", + "exportTitle": "Export Permessi", + "exportHint": "Export all Permessi as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Permesso Preimpostazioni", + "presetsHint": "Applica a predefined set of Permessi for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Moderazione tools: Utente lookup, Ban, CFH handling, chat Registri.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Utenti, Stanze, news, Impostazioni, Negozio, Eventi, radio & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including Permesso management and asset Importa.", + "applyPreset": "Applica preset", + "clearAll": "Clear all Permessi", + "testTitle": "Test Grado access", + "testHint": "Enter a Grado number to see which Permessi would be granted.", + "test": "Test", + "auditTitle": "Permesso audit log", + "auditHint": "All changes to housekeeping Permessi are logged.", + "auditLogsAt": "Audit Registri are available on the Audit log page.", + "viewAuditLogs": "Vedi audit Registri", + "importedWithErrors": "Imported {count} Permessi with {errors} errors", + "confirmClearAllDesc": "This will Rimuovi every Permesso entry from the database. Are you sure?", + "confirmDeletePermission": "Elimina this Permesso permanently?", + "confirmBulkDelete": "Elimina {count} selected Permessi?", + "deleteSelected": "Elimina {count} selected", + "cancel": "Annulla", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Utente", + "auditAction": "Azione", + "auditTarget": "Destinatario", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Per cambiare chi puo fare cosa usa Permessi", + "legacyBannerBody": "Questo archivio non controlla il sito. Apri Permessi per dare o togliere accesso ai gradi.", + "legacyBannerCta": "Apri Permessi", + "writesRetired": "Qui non si modifica piu nulla di proposito. Cambia l'accesso solo in Permessi.", + "tabCompare": "Confronto ACL", + "tabExportOnly": "Esporta archivio", + "compareHint": "Confronta le righe legacy housekeeping con i grant ACL live rank_* (grado minimo con lo slug).", + "compareAligned": "{count} allineati", + "compareMissingAcl": "{count} mancanti in ACL", + "compareMismatch": "{count} mismatch grado", + "colAclPresent": "In ACL", + "colAclMinRank": "Min grado ACL", + "colStatus": "Stato", + "statusAligned": "Allineato", + "statusMissingAcl": "Manca in ACL", + "statusMismatch": "Grado diverso", + "exportOnlyHint": "Le scritture sono disabilitate. Puoi ancora esportare la tabella legacy per archivio." + }, + "rooms": { + "title": "Stanze", + "subtitle": "Cerca e gestisci stanze dell'hotel", + "search": "Cerca", + "searchPlaceholder": "Cerca per nome, proprietario o ID…", + "searchResults": "{count, plural, one {# stanza} other {# stanze}} trovate per \"{query}\"", + "noResults": "Nessuna stanza trovata", + "colId": "ID", + "colName": "Nome", + "colOwner": "Proprietario", + "colUsers": "Utenti", + "colState": "Stato", + "colCategory": "Categoria", + "colCreated": "Creata", + "colActions": "Azioni", + "stateOpen": "Aperta", + "stateClosed": "Chiusa", + "stateLocked": "Bloccata", + "stateInvisible": "Invisibile", + "detail": { + "title": "Stanza: {name}", + "subtitle": "Di proprietà di {owner}", + "overview": "Panoramica", + "actions": "Azioni", + "description": "Descrizione", + "noDescription": "Nessuna descrizione", + "owner": "Proprietario", + "users": "Utenti online", + "maxUsers": "Utenti massimi", + "category": "Categoria", + "state": "Stato", + "tags": "Tag", + "noTags": "Nessun tag", + "created": "Creata", + "deleteRoom": "Elimina stanza", + "confirmDelete": "Eliminare la stanza \"{name}\"? Questa azione è irreversibile.", + "enterRoom": "Entra nella stanza", + "changeOwner": "Cambia proprietario", + "changeOwnerPlaceholder": "Nome utente nuovo proprietario" + } + }, + "emailTemplates": { + "title": "Template email", + "subtitle": "Gestisci template email transazionali", + "newTemplate": "+ Nuovo template", + "edit": "Modifica", + "delete": "Elimina", + "noTemplates": "Ancora nessun template email", + "confirmDelete": "Eliminare il template \"{name}\"?", + "colId": "ID", + "colName": "Nome", + "colSubject": "Oggetto", + "colKey": "Chiave", + "colUpdated": "Aggiornato", + "colActions": "Azioni", + "form": { + "name": "Nome", + "namePlaceholder": "es. Email di benvenuto", + "key": "Chiave", + "keyPlaceholder": "es. welcome_email", + "subject": "Oggetto", + "subjectPlaceholder": "Riga oggetto email", + "body": "Corpo (HTML)", + "bodyPlaceholder": "

Gentile {username},

", + "variables": "Variabili disponibili", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Salva template", + "saving": "Salvataggio…", + "cancel": "Annulla", + "variablesPlaceholder": "Variabili separate da virgole", + "active": "Attivo" + }, + "create": "Crea modello", + "save": "Salva modello", + "updated": "Aggiornato: {date}" + }, + "theme": { + "title": "Tema", + "subtitle": "Personalizza l'aspetto del CMS", + "presets": "Preimpostazioni", + "colours": "Colori", + "css": "CSS", + "presetsTitle": "Preimpostazioni tema", + "presetsSubtitle": "Scegli una combinazione di colori predefinita", + "applyPreset": "Applica", + "presetApplied": "Preset applicato: {preset}", + "customiseTitle": "Colori personalizzati", + "primary": "Primario", + "secondary": "Secondario", + "accent": "Accento", + "background": "Sfondo", + "surface": "Superficie", + "text": "Testo", + "saveColours": "Salva colori", + "savingColours": "Salvataggio…", + "cssTitle": "CSS personalizzato", + "cssSubtitle": "Aggiungi CSS personalizzato per sovrascrivere gli stili del tema", + "cssPlaceholder": "/* Il tuo CSS personalizzato qui */", + "saveCss": "Salva CSS", + "savingCss": "Salvataggio…", + "reset": "Ripristina valori predefiniti", + "confirmReset": "Ripristinare il tema ai valori predefiniti?", + "saved": "Impostazioni del tema salvate.", + "typographyLayout": "Tipografia e impaginazione", + "font": "Carattere", + "borderRadius": "Raggio degli angoli" + }, + "media": { + "title": "Libreria media", + "subtitle": "Carica e gestisci file media", + "upload": "Carica", + "uploadTitle": "Carica un file", + "uploadSubtitle": "Trascina e rilascia o clicca per caricare", + "uploadButton": "Scegli file", + "uploading": "Caricamento…", + "noFiles": "Ancora nessun file media", + "delete": "Elimina", + "confirmDelete": "Eliminare questo file permanentemente?", + "search": "Cerca", + "searchPlaceholder": "Cerca per nome file…", + "colPreview": "Anteprima", + "colName": "Nome", + "colSize": "Dimensione", + "colType": "Tipo", + "colUploaded": "Caricato", + "colActions": "Azioni", + "copyUrl": "Copia URL", + "urlCopied": "URL copiato negli appunti" + }, + "hubs": { + "newsMedia": "Notizie e contenuti multimediali", + "newsMediaSubtitle": "Articoli, foto, banner, ads e media library", + "siteContent": "Contenuti sito", + "siteContentSubtitle": "Navigazione, help, box, tag e prefissi", + "engagement": "Attività della community", + "engagementSubtitle": "Eventi, sondaggi e ticket di supporto", + "users": "Utenti", + "usersSubtitle": "Directory, online, candidature e team", + "access": "Accesso e sicurezza", + "accessSubtitle": "Ban, IP, VPN, permessi e word filter", + "moderation": "Moderazione", + "moderationSubtitle": "Report, azioni e team moderazione", + "catalog": "Catalogo e rare", + "catalogSubtitle": "Catalogo, rare, badge, achievement e suoni", + "shop": "Shop e pagamenti", + "shopSubtitle": "Shop, transazioni, voucher, abbonamenti e calendario", + "radio": "Radio", + "radioSubtitle": "Stream, tool DJ, embed e monitoring", + "settings": "Impostazioni", + "settingsSubtitle": "CMS, tema, manutenzione e strumenti correlati", + "tools": "Strumenti", + "toolsSubtitle": "RCON, stanze, import e traduzioni", + "observability": "Osservabilità", + "observabilitySubtitle": "Log, analytics, DevOps e alert hotel", + "tabs": { + "articles": "Articoli", + "photos": "Foto", + "banners": "Banner", + "ads": "Pubblicità", + "media": "Media", + "navigator": "Navigatore", + "help": "Assistenza", + "boxes": "Box", + "tags": "Tag", + "prefixes": "Prefissi", + "events": "Eventi", + "eventTypes": "Tipi evento", + "polls": "Sondaggi", + "tickets": "Supporto CMS", + "helpTickets": "Centro assistenza", + "templates": "Template", + "directory": "Elenco utenti", + "multiAccounts": "Multi-account", + "online": "Online", + "applications": "Candidature", + "teams": "Team", + "bans": "Ban", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permessi", + "wordFilter": "Filtro parole", + "overview": "Panoramica", + "actions": "Azioni", + "cfh": "Richieste di moderazione", + "team": "Team", + "catalogTab": "Catalogo", + "rares": "Rare", + "badges": "Badge", + "achievements": "Achievement", + "sounds": "Suoni", + "shopTab": "Negozio", + "transactions": "Transazioni", + "vouchers": "Voucher", + "subscriptions": "Abbonamenti", + "calendar": "Calendario", + "history": "Cronologia", + "moderationTab": "Moderazione", + "monitoring": "Monitoraggio", + "settingsTab": "Impostazioni", + "embed": "Incorporamento", + "apiKeys": "API key", + "points": "Punti", + "ranks": "Rank", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Tema", + "maintenance": "Manutenzione", + "favicon": "Favicon", + "emulator": "Emulatore", + "email": "Email", + "housekeeping": "Archivio permessi", + "commando": "Centro operativo", + "rooms": "Stanze", + "import": "Importazione", + "importOverview": "Panoramica", + "importBadges": "Badge", + "importFurni": "Furni", + "importUpload": "Caricamento", + "importClothing": "Abbigliamento", + "importEffects": "Effetti", + "importPets": "Pet", + "importClone": "Clonazione", + "importSync": "Sincronizzazione", + "importRepairIcons": "Ripara icone", + "importAudit": "Verifica dati", + "translations": "Traduzioni", + "logs": "Log", + "audit": "Registro modifiche", + "chat": "Chat", + "commands": "Comandi", + "trades": "Trade", + "analytics": "Statistiche", + "activity": "Attività", + "economy": "Economia", + "devops": "DevOps", + "errors": "Errori", + "alerts": "Alert", + "toolsGroup": "Strumenti", + "ticketInbox": "Ticket ricevuti", + "cmsErrors": "Errori CMS", + "themeBuilder": "Editor del tema", + "studio": "Studio" + }, + "events": "Eventi", + "eventsSubtitle": "Eventi hotel e tipi evento", + "tickets": "Ticket", + "ticketsSubtitle": "Inbox unificata su supporto CMS e help center", + "staffAccess": "Gradi e permessi", + "staffAccessSubtitle": "Gradi staff e accesso live. L'archivio e solo confronto/export.", + "analytics": "Analitiche", + "analyticsSubtitle": "Attività hotel, retention ed economia", + "devops": "DevOps", + "devopsSubtitle": "Salute servizi ed errori emulator", + "import": "Importazione", + "importSubtitle": "Furni, badge, abbigliamento e strumenti asset" + }, + "settings": { + "title": "Impostazioni CMS", + "subtitle": "Gestisci configurazione chiave/valore del CMS", + "addSetting": "Aggiungi impostazione", + "edit": "Modifica", + "delete": "Elimina", + "noSettings": "Nessuna impostazione trovata", + "confirmDelete": "Eliminare l'impostazione \"{key}\"?", + "keysInDatabase": "{count} chiavi nel database", + "managedInForm": "{count} gestite nel form", + "documented": "{count} documentate", + "saved": "Impostazioni salvate.", + "saveFailed": "Impossibile salvare le impostazioni.", + "saveSettings": "Salva impostazioni", + "viewOnly": "Puoi visualizzare le impostazioni ma serve il permesso di modifica.", + "colKey": "Chiave", + "colValue": "Valore", + "colUpdated": "Aggiornato", + "colActions": "Azioni", + "form": { + "key": "Chiave", + "keyPlaceholder": "es. hotel_name", + "value": "Valore", + "valuePlaceholder": "Valore impostazione", + "save": "Salva impostazione", + "saving": "Salvataggio…", + "cancel": "Annulla" + } + }, + "menu": { + "title": "Menu admin", + "subtitle": "Riordina e nascondi gruppi e voci della sidebar. Route e permessi restano nel codice.", + "save": "Salva menu", + "saving": "Salvataggio…", + "saved": "Menu admin salvato.", + "saveFailed": "Impossibile salvare il menu admin.", + "reset": "Ripristina default", + "viewOnly": "Puoi vedere il layout del menu ma serve il permesso di modifica impostazioni.", + "hint": "Dashboard e questa pagina restano visibili. L'ACL continua a filtrare per grado.", + "moveUp": "Sposta su", + "moveDown": "Sposta giù", + "hideGroup": "Nascondi gruppo", + "showGroup": "Mostra gruppo", + "hideItem": "Nascondi voce", + "showItem": "Mostra voce", + "pinned": "Fisso" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Upload and manage the site favicon", + "current": "Current favicon", + "uploadLabel": "Upload favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.", + "upload": "Upload", + "uploading": "Uploading…", + "delete": "Remove", + "deleting": "Removing…", + "cancel": "Annulla", + "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": "Importa asset da fonti esterne nel tuo hotel.", + "badges": "Distintivi", + "badgesDescription": "Importa e gestisci asset dei distintivi da fonti esterne.", + "furni": "Mobili", + "furniDescription": "Importa definizioni mobili, file SWF e icone.", + "clothing": "Abbigliamento", + "clothingDescription": "Importa abiti e indossabili per gli avatar.", + "effects": "Effetti", + "effectsDescription": "Importa effetti e animazioni avatar.", + "pets": "Animali", + "petsDescription": "Importa dati e icone degli animali.", + "clone": "Clona", + "cloneDescription": "Clona elementi esistenti da una fonte all'altra.", + "upload": "Carica .nitro", + "uploadDescription": "Carica bundle .nitro e icone direttamente, senza conversione SWF.", + "sync": "Sincronizzazione automatica", + "syncDescription": "Importa automaticamente i mobili mancanti da tutte le fonti configurate.", + "repairIcons": "Ripara icone", + "repairIconsDescription": "Scarica le icone mancanti per i mobili già presenti nel database.", + "audit": "Audit catalogo", + "auditDescription": "Scansiona il catalogo per voci mancanti, riferimenti rotti ed elementi assenti dalle fonti clone." + }, + "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": "Traduzioni del CMS", + "description": "Modifica i testi del sito e dell’housekeeping. Le modifiche salvate vengono applicate al caricamento successivo della pagina e restano dopo i deploy.", + "export": "Esporta JSON", + "saving": "Salvataggio…", + "saveLocale": "Salva {locale}", + "saved": "Traduzioni salvate e applicate.", + "readOnly": "Puoi consultare ed esportare le traduzioni. Per modificarle serve il permesso di modifica delle impostazioni.", + "language": "Lingua", + "coverage": "{total} chiavi · {missing} mancanti · {identical} identiche all’inglese", + "search": "Cerca", + "searchPlaceholder": "Chiave, traduzione o testo inglese…", + "group": "Gruppo", + "allGroups": "Tutti i gruppi", + "status": "Mostra", + "all": "Tutti i testi", + "missing": "Traduzioni mancanti", + "identical": "Identiche all’inglese", + "modified": "Modifiche non salvate", + "fallbackHint": "Le traduzioni mancanti usano l’inglese. Un testo identico può essere intenzionale. Mantieni invariati i nomi delle variabili tra parentesi graffe.", + "unsaved": "{count} modifiche non salvate in questa lingua", + "discard": "Annulla modifiche", + "discardConfirm": "Annullare le modifiche non salvate in questa lingua?", + "fixErrors": "Correggi {count} messaggi non validi prima di salvare.", + "noResults": "Nessun testo corrisponde ai filtri.", + "source": "Riferimento inglese", + "missingPlaceholder": "Traduzione mancante: viene usato l’inglese.", + "page": "Pagina {page} di {total} · {count} chiavi", + "previous": "Precedente", + "next": "Successiva", + "leaveWarning": "Ci sono traduzioni non salvate. Vuoi uscire dalla pagina?", + "conflict": "Queste traduzioni sono cambiate dopo l’apertura dell’editor. Esporta le modifiche e ricarica la pagina prima di salvare.", + "unknownKey": "Chiave di traduzione sconosciuta: {key}", + "empty": "Inserisci una traduzione per {key} oppure annulla questa modifica.", + "invalid": "Sintassi del messaggio non valida in {key}. Controlla le parentesi graffe e i tag del testo.", + "variables": "Mantieni gli stessi nomi delle variabili e tag del testo inglese in {key}." + } + }, + "analytics": { + "loadError": "Alcune query analytics sono fallite. I numeri sotto possono essere incompleti — controlla DB e tabelle emulator.", + "totalUsers": "Utenti totali", + "onlineNow": "{count} online ora", + "weekRegistrations": "Registrazioni della settimana", + "thisMonth": "{count} questo mese", + "activeRooms": "Stanze attive", + "totalRooms": "{count} stanze totali", + "weeklyActivity": "Attività settimanale", + "tradesAndBans": "{trades} trade, {bans} ban", + "registrationsChartTitle": "Registrazioni (30 giorni)", + "registrationsChartDescription": "Nuove registrazioni utenti negli ultimi 30 giorni", + "chatActivity": "Attività chat", + "messagesLast7Days": "Messaggi negli ultimi 7 giorni", + "trades": "Trade", + "tradesLast7Days": "Trade negli ultimi 7 giorni", + "retention": "Retention", + "usersOnlineOverTotal": "Utenti online / totale", + "activity": { + "chatMessages": "Messaggi chat", + "commands": "Comandi", + "bans": "Ban", + "registrations": "Registrazioni", + "last7Days": "Ultimi 7 giorni", + "dailyBreakdownTitle": "Ripartizione giornaliera (7 giorni)", + "colDay": "Giorno", + "colChats": "Chat", + "colCmds": "Cmd", + "colBans": "Ban", + "colRegs": "Reg", + "mostActiveUsersTitle": "Utenti più attivi (7 giorni)", + "noChatActivity": "Nessuna attività chat", + "msgCount": "{count} msg", + "userFallback": "Utente #{id}" + }, + "economy": { + "creditsInCirculation": "Crediti in circolazione", + "creditsDescription": "Crediti totali di tutti gli utenti", + "pixelsInCirculation": "Pixel in circolazione", + "pixelsDescription": "Pixel totali di tutti gli utenti", + "pointsInCirculation": "Punti in circolazione", + "pointsDescription": "Punti totali di tutti gli utenti", + "weeklyTrades": "Trade settimanali", + "marketplaceListings": "{count} annunci marketplace", + "shopRevenueTitle": "Ricavi shop (7g)", + "purchases": "Acquisti", + "creditsSpent": "Crediti spesi", + "pointsSpent": "Punti spesi", + "marketplaceTitle": "Marketplace", + "activeListings": "Annunci attivi", + "sold7d": "Venduti (7g)", + "currencyDistributionTitle": "Distribuzione valute", + "credits": "Crediti", + "pixels": "Pixel", + "points": "Punti", + "catalogSpendingTitle": "Spesa catalogo", + "creditsTooltip": "{count} crediti", + "pointsTooltip": "{count} punti" + }, + "peakHours": { + "title": "Ore di punta", + "description": "Attività utenti per giorno e ora (ultimi 7 giorni)", + "days": { + "mon": "lun", + "tue": "mar", + "wed": "mer", + "thu": "gio", + "fri": "ven", + "sat": "sab", + "sun": "dom" + }, + "tooltip": "{day} {hour}:00 — {count} utenti", + "less": "Meno", + "more": "Più" + } + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Vista unificata dei ticket aperti CMS e help center. I dettagli restano sulle route di ciascun prodotto.", + "noTickets": "Nessun ticket aperto in nessuna coda", + "searchPlaceholder": "Cerca oggetto, titolo, utente o ID…", + "statCmsOpen": "CMS aperti", + "statHelpOpen": "Help aperti", + "statTotal": "Totale aperti", + "colTicket": "Ticket", + "colStatus": "Stato", + "colType": "Coda", + "colUpdated": "Aggiornato", + "meta": "di {user}", + "typeAll": "Tutte le code", + "typeCms": "Supporto CMS", + "typeHelp": "Help center", + "statusOpen": "Aperti", + "statusClosed": "Chiusi", + "statusAll": "Tutti gli stati", + "presetOpen": "Solo aperti", + "modNavLabel": "Code:", + "modNavInbox": "Inbox", + "modNavDesk": "Supporto CMS", + "modNavHelp": "Help center" + }, + "search": { + "pages": "Pagine e strumenti", + "description": "Cerca pagine, utenti, furni, categorie del catalogo, articoli e ticket di assistenza.", + "loadError": "Impossibile caricare i risultati. Puoi comunque aprire le pagine elencate.", + "placeholder": "Cerca pagine, utenti, stanze…", + "users": "Utenti", + "articles": "Articoli", + "rooms": "Stanze", + "guilds": "Gruppi", + "shop": "Negozio", + "rareValues": "Valori dei rari", + "noResults": "Nessun risultato trovato.", + "furniture": "Furni", + "catalog": "Categorie del catalogo", + "tickets": "Ticket di assistenza", + "loading": "Ricerca in corso…", + "hint": "Inserisci un ID numerico o almeno 2 caratteri oppure scegli una pagina.", + "retry": "Riprova", + "partialError": "Alcuni risultati non sono disponibili. Riprova." + }, + "table": { + "search": "Cerca…", + "clearSearch": "Cancella ricerca", + "filters": "Filtri", + "clearAll": "Rimuovi tutti", + "all": "Tutti", + "columns": "Colonne", + "perPage": "{count} / pagina", + "selected": "{count} selezionati", + "results": "{count} risultati", + "empty": "Nessun risultato corrisponde alla ricerca o ai filtri.", + "selectAll": "Seleziona tutte le righe di questa pagina", + "selectRow": "Seleziona riga {id}", + "removeFilter": "Rimuovi filtro: {name}", + "previous": "Pagina precedente", + "next": "Pagina successiva", + "page": "Pagina {page}", + "pageOf": "Pagina {page} di {last}", + "bulkError": "Operazione non riuscita. La selezione è stata mantenuta: verifica il risultato prima di riprovare.", + "confirmBulk": "Eseguire {action} su {count} righe selezionate?", + "views": { + "title": "Viste salvate", + "hint": "Salva filtri, ordinamento e colonne sul tuo account. Fino a 20 viste per tabella.", + "saved": "Vista salvata", + "error": "Le viste salvate non sono disponibili. Riprova.", + "retry": "Riprova", + "loading": "Caricamento viste...", + "empty": "Nessuna vista salvata.", + "deleteNamed": "Elimina {name}", + "delete": "Elimina", + "name": "Nome della vista", + "replace": "Sostituisci questa vista", + "save": "Salva vista attuale" + } + }, + "actions": { + "saved": "Salvato correttamente.", + "error": "Impossibile completare l’operazione.", + "saving": "Salvataggio…", + "saveError": "Salvataggio non riuscito. Le modifiche sono ancora qui: riprova.", + "unsaved": "Modifiche non salvate", + "leaveUnsaved": "Hai modifiche non salvate. Vuoi lasciare la pagina?", + "preview": "Anteprima" + }, + "workQueue": { + "title": "Da controllare", + "tickets": "Ticket aperti", + "ticketsHint": "Code del CMS e del centro assistenza", + "imports": "Import da verificare", + "importsHint": "I tuoi processi interrotti o con furni non importati", + "errors": "Gruppi di errori CMS aperti", + "errorsHint": "Nello storico diagnostico conservato", + "unavailable": "Stato non disponibile — apri per verificare" + }, + "cmsErrors": { + "title": "Centro errori CMS", + "storageError": "Impossibile leggere gli errori. Verifica volume di archiviazione e permessi.", + "subtitle": "Errori server e browser degli ultimi 7 giorni. Le segnalazioni browser sono osservazioni del client non verificate.", + "emulator": "Errori emulatore", + "refresh": "Aggiorna / azzera filtri", + "search": "Cerca errori", + "allSources": "Tutte le origini", + "empty": "Nessun errore registrato corrisponde ai filtri. I vecchi log della console non vengono importati.", + "resolve": "Segna come risolto", + "reopenHint": "Una nuova occorrenza riapre automaticamente il gruppo.", + "references": "Riferimenti delle occorrenze", + "stackHint": "Gli stack del browser possono riferirsi a file compilati. Usa il riferimento per indagare; i contenuti delle richieste non vengono salvati.", + "previous": "Precedente", + "next": "Successiva", + "searchHint": "Riferimento, digest, messaggio, percorso o versione", + "source": "Origine errore", + "pages": "Pagine errori", + "resolved": "Risolto", + "open": "Aperto", + "occurrences": "{count} occorrenze", + "reference": "Riferimento", + "release": "Versione", + "noStack": "Stack non disponibile. Usa riferimento o digest per cercare nei log del server.", + "truncated": "Sono mostrati gli ultimi 1.000 eventi: i filtri cercano in questa finestra.", + "counts": "{count} occorrenze · {groups} gruppi.", + "retention": "Limite di archiviazione: 10 MB al giorno. Gli eventi eccedenti restano nei log server, dove disponibili.", + "status": "Stato", + "allStatuses": "Tutti gli stati", + "firstSeen": "Prima occorrenza nei dati conservati", + "lastSeen": "Ultima occorrenza", + "affectedUsers": "Utenti identificati distinti", + "unidentifiedEvents": "Eventi senza ID utente verificato", + "metricsScope": "I conteggi riguardano solo i dati conservati caricati qui. Gli utenti sono conteggiati solo tramite ID numerici del server; le segnalazioni anonime e del browser non vengono attribuite.", + "assignedStaff": "Assegnato allo staff #{id}", + "unassigned": "Non assegnato", + "assignSelf": "Assegna a me", + "clearAssignment": "Rimuovi assegnazione", + "openOperation": "Apri area collegata", + "releaseOccurrences": "Occorrenze per release", + "releaseScope": "Queste release compaiono nei dati conservati. La prima occorrenza disponibile non dimostra quale release abbia introdotto l’errore.", + "releaseFilter": "Versione", + "allReleases": "Tutte le versioni", + "period": "Periodo", + "allRetained": "Tutti gli eventi conservati", + "last24h": "Ultime 24 ore", + "last7d": "Ultimi 7 giorni", + "sort": "Ordine", + "recentFirst": "Prima i più recenti", + "frequentFirst": "Prima i più frequenti", + "filterScope": "I conteggi riguardano gli eventi conservati che corrispondono ai filtri. Stato e dettagli più recenti del gruppo restano aggiornati tra le versioni.", + "auditTrail": "Cronologia collegata" + }, + "importHistory": { + "summary": "Storico importazioni · {count} attive", + "empty": "Nessuna importazione in background.", + "result": "{done}/{total} importati · {failed} falliti", + "progress": "Avanzamento importazione", + "queued": "In coda", + "running": "In corso", + "completed": "Completato", + "interrupted": "Interrotto", + "done": "Importato", + "failed": "Non riuscito", + "pending": "In attesa", + "retryFailed": "Riprova solo i furni falliti", + "retryUnfinished": "Riprendi i furni non completati", + "cancelled": "Annullato", + "cancelFailed": "Impossibile richiedere l’annullamento. Riprova o aggiorna la cronologia.", + "cancelRequested": "Annullamento richiesto. L’elemento corrente verrà completato; quelli rimanenti non verranno avviati.", + "cancelHint": "L’annullamento conserva gli elementi completati e lascia terminare quello corrente.", + "cancelRemaining": "Annulla elementi rimanenti", + "historyLimit": "Sono mostrati fino a 30 processi aggiornati più di recente.", + "refreshHistory": "Aggiorna cronologia", + "showMoreItems": "Mostra altri 50 elementi", + "uncertainOutcome": "Un elemento interrotto potrebbe avere già modificato i dati locali. È escluso dai tentativi successivi.", + "reviewLocalData": "Controlla i dati locali", + "ownerHistory": "Le tue importazioni e riparazioni, dalla più recente. Il retry non ripete elementi completati o dall’esito incerto.", + "previousPage": "Precedente", + "nextPage": "Successiva", + "page": "Pagina {page}" + }, + "installation": { + "title": "Diagnostica installazione", + "hint": "Controlli in sola lettura di questa installazione. Non verificato indica evidenza insufficiente; una configurazione presente non prova la raggiungibilità esterna.", + "checked": "Controllato alle {time} · verifiche completate in {ms} ms", + "recheck": "Ricontrolla", + "ok": "Controllo superato", + "failed": "Da verificare", + "unknown": "Non verificato", + "missing": "Non configurato", + "release": "Versione in esecuzione", + "database": "Database", + "redis": "Redis", + "emulator": "Emulatore", + "storage": "Archiviazione scrivibile", + "migrations": "Migrazioni database", + "worker": "Worker in background", + "renderer": "Configurazione renderer", + "registry": "Registro delle immagini", + "releaseHint": "Identificativo completo della build in esecuzione. Permette di confrontare installazioni e scegliere una versione precedente per il ripristino.", + "databaseHint": "Connessione e tempo misurato della query SELECT 1.", + "redisHint": "Opzionale per alcune pagine; necessario per le importazioni in coda.", + "emulatorHint": "Risposta al ping dell’emulatore configurato.", + "storageHint": "Permessi di lettura e scrittura nelle cartelle storage, risorse Nitro e SWF.", + "migrationsHint": "Numero di migrazioni incluse nella versione e assenti dalla cronologia del database. Applicale attraverso il processo di rilascio.", + "workerHint": "Ultimo segnale del worker in Redis. Oltre due minuti richiede verifica; nessun segnale non permette di stabilire se il worker sia attivo.", + "rendererHint": "Il client usa l’indirizzo configurato oppure /nitro-client/ come percorso predefinito. Apri separatamente il gioco per controllare rendering e risorse.", + "registryHint": "Le credenziali del registro sono nella CI, non nel CMS. Controlla il lavoro di pubblicazione e il tag immutabile della versione in Gitea." + }, + "operations": { + "title": "Da controllare", + "hint": "Attività accessibili: importazioni negli ultimi 30 lavori personali; errori in un massimo di 1.000 eventi conservati. Attività precedenti possono restare fuori da questi conteggi.", + "empty": "Nessuna attività in sospeso trovata nei dati controllati.", + "errors": "Gruppi di errori CMS aperti", + "imports": "Le tue importazioni da verificare", + "tickets": "Ticket di assistenza aperti", + "publications": "Bozze delle news", + "unavailable": "{source}: dati temporaneamente non disponibili.", + "installation": "Diagnostica installazione" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Le categorie o le offerte sorgenti sono cambiate. Crea un nuovo pacchetto per includere i dati aggiornati.", + "saveConflict": "Il pacchetto è cambiato. Ricaricalo prima di salvare.", + "publishConflict": "Il pacchetto è cambiato. Aggiorna l’anteprima di pubblicazione.", + "catalogChanged": "Il catalogo è cambiato. Aggiorna l’anteprima di pubblicazione.", + "missing": "Pacchetto catalogo non trovato.", + "pageLimit": "Un pacchetto supporta al massimo 200 categorie, incluse le sottocategorie.", + "offerLimit": "Un pacchetto supporta al massimo 500 offerte.", + "payloadLimit": "I dati del pacchetto superano il limite di 8 MB.", + "membership": "Non puoi aggiungere o rimuovere elementi dal pacchetto.", + "hierarchy": "Non puoi modificare la gerarchia del pacchetto.", + "references": "Non puoi modificare i riferimenti ai furni del pacchetto.", + "furnitureMissing": "Un furni referenziato dal pacchetto non esiste più.", + "auditWarning": "Pacchetto pubblicato, ma la registrazione nell’audit non è riuscita.", + "hotelWarning": "Pacchetto pubblicato, ma l’aggiornamento non è stato inviato all’hotel.", + "exportWarning": "Pacchetto pubblicato, ma la pianificazione dell’esportazione non è riuscita.", + "refreshWarning": "Pacchetto pubblicato. Aggiorna la pagina per vedere il catalogo aggiornato." + } + }, + "catalogPackagePreview": { + "title": "Anteprima catalogo", + "hint": "Sfoglia le pagine e le offerte reali del pacchetto. Questa è un’anteprima del catalogo, non la riproduzione completa del client di gioco. Non vengono effettuati acquisti.", + "search": "Cerca categorie o offerte", + "playerMode": "Accesso giocatore", + "rank": "Rango", + "club": "Club", + "vip": "VIP", + "externalParents": "La selezione appartiene a un catalogo più ampio. Non è possibile valutare le restrizioni delle categorie superiori esterne a questa istantanea.", + "invalidHierarchy": "{count} pagine hanno una gerarchia ciclica e non sono navigabili.", + "snapshotLimit": "Anteprima limitata a 200 pagine e 500 offerte.", + "restricted": "{count} pagine sono nascoste dalle impostazioni di accesso selezionate.", + "categories": "Categorie del catalogo", + "noPages": "Questa istantanea non contiene categorie.", + "inaccessible": "Nessuna categoria è accessibile con queste impostazioni. Modifica l’accesso giocatore o disattivalo per esaminare la bozza.", + "noMatches": "Nessun risultato per questa ricerca.", + "offerCount": "{count} offerte", + "layout": "Layout: {layout}", + "missingLayout": "Non specificato", + "unsupportedLayout": "Questo layout non ha un’anteprima dedicata. La griglia mostra le offerte reali; componenti e immagini del layout personalizzato non vengono riprodotti.", + "loadingIcons": "Caricamento delle icone dei furni…", + "assetsUnavailable": "I dettagli dei furni non sono al momento disponibili. I dati delle offerte restano visibili.", + "assetLimit": "Icone e nomi dei furni sono limitati ai primi 200 ID di questa vista.", + "emptyPage": "Questa categoria non contiene offerte dirette. Sfoglia le sottocategorie.", + "missingIcon": "Icona non disponibile", + "amount": "Quantità: {count}", + "bundle": "{count} tipi di furni", + "changed": "Modificato rispetto alla versione iniziale salvata", + "previous": "Precedente", + "next": "Successiva", + "page": "Pagina {page} di {total}", + "offerId": "Offerta #{id}", + "unknownFurniture": "Nome del furni non disponibile", + "selectOffer": "Seleziona un’offerta per esaminare il prezzo e i furni inclusi.", + "credits": "Crediti", + "duckets": "Duckets", + "diamonds": "Diamanti", + "pointsType": "Punti (tipo {type}):", + "free": "Gratis", + "specialPricing": "Prezzo speciale: {credits} crediti, {points} punti (tipo {type})", + "restrictedOffers": "{count} offerte in questa categoria richiedono l’iscrizione al Club.", + "clubOffer": "Offerta Club" + }, + "permissionPreview": { + "title": "Anteprima accessi del ruolo", + "description": "Verifica gli accessi CMS senza modificare sessioni o impersonare utenti.", + "back": "Torna ai permessi", + "role": "Ruolo", + "show": "Mostra accessi", + "missing": "Seleziona un ruolo esistente.", + "entryAllowed": "Accesso HK consentito", + "entryDenied": "Accesso HK negato: manca il permesso dashboard", + "superAdmin": "Questo grado riceve attualmente i privilegi del grado più alto.", + "scope": "Questa anteprima considera un solo ruolo. Un utente può avere altri ruoli. La navigazione personalizzata può nascondere sezioni consentite; singoli dati e azioni possono richiedere ulteriori controlli.", + "sections": "Sezioni", + "allowed": "Consentito", + "denied": "Negato", + "actions": "Permessi CMS", + "actionScope": "Un permesso concesso non supera i controlli di accesso HK, gerarchia dei gradi, proprietà dei dati o validazione della singola azione.", + "granted": "Concesso", + "notGranted": "Non concesso" + }, + "operationsCenter": { + "title": "Centro operazioni", + "hint": "Segui le tue importazioni e riparazioni persistenti e la coda condivisa di esportazione catalogo.", + "syncTitle": "Sincronizzazione sorgenti", + "syncHint": "La sincronizzazione delle sorgenti avviene nella sua pagina. Qui non dispone di cronologia persistente o ripetizione automatica degli elementi falliti. L’esportazione catalogo mostra coda condivisa e ultimo esito; non supporta retry dei singoli elementi.", + "openSync": "Apri sincronizzazione ed esportazione", + "openImports": "Apri importazioni furni" + }, + "operationsExport": { + "title": "Esportazione repository catalogo", + "hint": "Esportazione automatica di bundle, icone, gamedata, traduzioni e SQL catalogo. Coda e ultimo esito sono condivisi tra operatori.", + "loadError": "Impossibile caricare lo stato esportazione", + "queueError": "Impossibile accodare l’esportazione", + "loading": "Caricamento…", + "disabled": "Esportazione disabilitata. Apri sincronizzazione per verificarne la configurazione.", + "active": "In attesa del completamento di {count} operazioni.", + "running": "Esportazione in corso…", + "pending": "{count} aggiornamenti in coda per esportazione.", + "idle": "Nessun aggiornamento in attesa.", + "lastCommit": "Ultimo commit pubblicato:", + "lastAttempt": "Ultimo tentativo: {date}", + "queuing": "Accodamento…", + "queue": "Esporta ora / riprova" + }, + "syncQueue": { + "preparing": "Preparazione sincronizzazione...", + "queued": "Sincronizzazione salvata. Segui i progressi nello storico qui sotto.", + "start": "Avvia sincronizzazione", + "description": "La sincronizzazione prosegue in background. Avanzamento e tentativi sicuri restano nello storico anche dopo aver chiuso la pagina.", + "failed": "Impossibile accodare la sincronizzazione" + }, + "publicationPreflight": { + "affectedPages": "Pagine pubbliche interessate", + "scheduleInvalid": "Scegli una data valida. La fine di un evento deve seguire il suo inizio.", + "description": "I controlli usano i valori del modulo. La disponibilita remota di immagini e link non viene verificata.", + "slugNormalized": "Il percorso pubblico usera lo slug normalizzato indicato sotto.", + "imageInvalid": "Usa un percorso locale o un URL immagine HTTP/HTTPS senza credenziali.", + "imageMissing": "Nessuna copertina selezionata. La pagina usera la propria immagine alternativa.", + "title": "Controlli pubblicazione", + "ready": "Immagine, link e date hanno superato i controlli locali.", + "linksInvalid": "Controlla i link del contenuto: sono ammessi link locali, HTTP/HTTPS ed email.", + "schedulePast": "La data selezionata e nel passato. Controllala prima di pubblicare.", + "previewHint": "I link mostrano le pagine pubbliche attuali. Usa Anteprima per vedere il contenuto non salvato. Lo slug finale potrebbe ricevere un suffisso se gia utilizzato." + }, + "performance": { + "title": "Prestazioni delle richieste", + "scope": "Misure server delle API HK autenticate e di alcune pagine pubbliche. Scegli un gruppo qui sotto.", + "refresh": "Aggiorna", + "shared": "Diagnostica condivisa tramite Redis.", + "local": "Diagnostica locale di questa istanza; si azzera al riavvio.", + "retention": "Fino a 200 campioni per gruppo, conservati per un’ora. La raccolta non è garantita per ogni richiesta.", + "search": "Percorso o ID operazione", + "sort": "Ordine", + "slowest": "Prima le più lente", + "recent": "Prima le più recenti", + "threshold": "Filtro durata", + "all": "Tutte le durate", + "slow": "Almeno 1 secondo", + "explanation": "Il tempo database include le query completate e le attese del pool. Il tempo esterno copre solo i download curl monitorati. Le chiamate simultanee possono sommare più della durata totale: questi valori non sono parti esclusive del totale.", + "empty": "Nessuna richiesta corrispondente. Usa l’HK, poi aggiorna questa pagina.", + "database": "Database", + "external": "Download monitorati", + "calls": "{count} chiamate", + "failures": "{count} errori", + "streaming": "Risposta in streaming: la misura termina alla creazione della risposta, non alla fine dell’operazione.", + "operation": "ID operazione", + "kind": "Gruppo di misurazione", + "adminApi": "API HK", + "publicPage": "Pagine pubbliche", + "applyFilters": "Applica filtri", + "publicBoundary": "Le misure pubbliche coprono il componente server principale di /me, news, profili, eventi e ricerca. Escludono metadati, componenti figli renderizzati separatamente, rete e rendering nel browser. Gli esiti non sono codici HTTP. Le esecuzioni durante la build statica sono escluse.", + "outcomes": { + "completed": "Componente completato", + "failed": "Componente fallito", + "redirect": "Reindirizzamento", + "not-found": "Pagina non trovata" + } + }, + "importProgress": { + "validating": "Verifica dati locali", + "downloading": "Download dei file", + "converting": "Conversione in Nitro", + "checking_sources": "Ricerca nelle sorgenti configurate", + "writing_db": "Salvataggio SQL e catalogo", + "writing_furnidata": "Aggiornamento furnidata", + "translating": "Aggiornamento traduzioni", + "current": "Fase attuale: {phase}", + "last": "Ultima fase: {phase}", + "elapsed": "{seconds}s in questa fase", + "recovered": "Bundle recuperato da {source} · revisione {revision}. Classname, tipo e revisione corrispondenti; identità del bundle verificata.", + "recoveryHint": "Puoi continuare. Se i file originali non sono disponibili, l’importatore cercherà nelle sorgenti attive lo stesso classname, tipo e revisione, verificando poi il bundle Nitro. Puoi comunque allegare manualmente i file mancanti." + } + }, + "radioRequests": { + "formTitle": "Invia una richiesta", + "formSubtitle": "Chiedi al DJ di passare la tua traccia preferita", + "songLabel": "Brano", + "songPlaceholder": "Titolo del brano", + "artistLabel": "Artista", + "artistPlaceholder": "Nome dell'artista (facoltativo)", + "submitButton": "Invia richiesta", + "loginToRequest": "Accedi per inviare una richiesta.", + "latestTitle": "Richieste recenti", + "latestSubtitle": "I brani richiesti più di recente", + "empty": "Ancora nessuna richiesta.", + "colSong": "Brano", + "colArtist": "Artista", + "colRequester": "Richiedente", + "colDate": "Data", + "colStatus": "Stato", + "statusPending": "In attesa", + "statusApproved": "Approvata", + "statusPlayed": "Passata", + "success": { + "posted": "Richiesta inviata." + }, + "errors": { + "empty": "Inserisci il titolo del brano o l'artista.", + "invalid": "Richiesta non valida.", + "ratelimit": "Stai inviando troppo in fretta. Attendi un momento e riprova.", + "error": "Qualcosa è andato storto. Riprova." + } + }, + "mod": { + "title": "Pannello moderazione", + "badge": "Mod", + "overviewTitle": "Panoramica moderatore", + "overviewSubtitle": "CFH, azioni rapide e ban senza accesso admin completo.", + "shortcutsTitle": "Collegamenti", + "nav": { + "overview": "Panoramica", + "cfh": "Call for Help", + "actions": "Azioni rapide", + "bans": "Ban", + "fullAdmin": "Admin completo", + "backToSite": "Torna al sito", + "tickets": "Supporto CMS", + "helpTickets": "Help center", + "users": "Utenti", + "team": "Team" + }, + "usersTitle": "Giocatori", + "usersSubtitle": "Lookup senza email o IP — usa l’admin completo per i campi sensibili.", + "usersEmpty": "Nessun giocatore trovato", + "usersSearchPlaceholder": "Cerca username, motto o ID…", + "usersRank": "rank", + "usersPublicProfile": "Profilo pubblico", + "usersPiiNote": "Email, IP e valuta sono nascosti nel pannello mod. Apri l’admin completo se hai accesso.", + "usersJoined": "Iscrizione", + "usersLastLogin": "Ultimo login", + "usersLastOnline": "Ultima presenza", + "stats": { + "openCfh": "CFH aperti", + "bansToday": "Ban oggi", + "modsOnline": "Mod online", + "quickActions": "Azioni rapide", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Ticket CMS aperti", + "openHelpTickets": "Help ticket aperti", + "team": "Team mod", + "teamHint": "Staff online e carico" + } + }, + "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": "Anteprima della struttura", + "commandDisabled": "Ricerca e comandi saranno abilitati in un sottoprogetto successivo.", + "backToSite": "Torna al sito" + }, + "navigation": { + "skipToContent": "Vai al contenuto", + "primary": "Aree housekeeping", + "contextual": "Navigazione del dominio" + }, + "domains": { + "operations": { + "title": "Operazioni", + "description": "Panoramica operativa e code giornaliere" + }, + "people": { + "title": "Persone", + "description": "Utenti, moderazione e supporto" + }, + "content": { + "title": "Contenuti", + "description": "Contenuti editoriali e coinvolgimento della community" + }, + "economy": { + "title": "Economia", + "description": "Operazioni di catalogo e shop" + }, + "hotel": { + "title": "Hotel", + "description": "Stanze, radio e strumenti per gli asset" + }, + "system": { + "title": "Sistema", + "description": "Configurazione, osservabilità e accesso" + } + }, + "states": { + "loading": { + "title": "Caricamento in corso", + "description": "Stiamo preparando gli strumenti di housekeeping disponibili." + }, + "empty": { + "title": "Nessun contenuto disponibile", + "description": "Non ci sono contenuti housekeeping disponibili per questo dominio." + }, + "partial": { + "label": "Dati parziali", + "title": "Alcune informazioni non sono disponibili", + "description": "Controlla le informazioni disponibili e riprova più tardi." + }, + "error": { + "title": "Impossibile caricare housekeeping", + "description": "Riprova più tardi o contatta un amministratore." + } + } + }, + "myDashboard": { + "title": "La mia pagina", + "loadError": "Impossibile caricare la tua pagina. Riprova.", + "retry": "Riprova", + "login": "Accedi", + "never": "Mai", + "claimed": "Premio riscattato!", + "welcome": "Il tuo spazio su {hotel}", + "noMotto": "Nessun motto", + "registered": "Iscritto dal {date}", + "lastOnline": "Ultima presenza: {date}", + "enter": "Entra in {hotel}", + "quickLinks": "Collegamenti rapidi", + "messages": "Messaggi", + "profile": "Il mio profilo", + "settings": "Impostazioni", + "shop": "Negozio", + "unread": "{count} messaggi non letti", + "wallet": "Il tuo portafoglio", + "currencies": { + "credits": "Crediti", + "duckets": "Duckets", + "diamonds": "Diamanti", + "points": "Punti" + }, + "onlineFriends": "Amici online", + "allFriends": "Tutti gli amici", + "noOnlineFriends": "Nessuno dei tuoi amici è online al momento.", + "recentRooms": "Nuove stanze", + "community": "Community", + "roomsHint": "Le ultime stanze create nell’hotel.", + "noRooms": "Nessuna stanza disponibile.", + "activity": "La tua attività", + "achievements": "Punti traguardo", + "respects": "Rispetti ricevuti", + "friends": "Amici", + "lastLogin": "Ultimo accesso", + "referrals": "Invita i tuoi amici", + "referralHint": "Condividi il tuo link e ricevi premi quando si registrano nuovi giocatori.", + "referralProgress": "Progressi verso il premio", + "reward": "{amount} {currency} ogni {count} nuovi giocatori.", + "rewardHint": "Invita {count} giocatori per sbloccare il premio.", + "referralLink": "Il tuo link di invito", + "claim": "Riscatta premio", + "remaining": "{count, plural, one {Invita ancora # giocatore per sbloccare il premio.} other {Invita ancora # giocatori per sbloccare il premio.}}", + "rules": "Regole degli inviti", + "rulesText": "Creare altri account per aumentare gli inviti può comportare la rimozione di progressi, valute e inventario e il ban.", + "badges": "Distintivi indossati", + "noBadges": "Non stai ancora indossando distintivi.", + "copy": "Copia link", + "copied": "Copiato!", + "copyFailed": "Copia non riuscita. Seleziona il link e copialo manualmente.", + "errors": { + "not_enough": "Servono altri inviti per riscattare il premio.", + "no_referrals": "Condividi il link per invitare il tuo primo amico.", + "bad_config": "Il premio non è configurato correttamente. Contatta lo staff.", + "ratelimit": "Troppi tentativi. Attendi un momento e riprova.", + "error": "Non è stato possibile riscattare il premio. Riprova." + }, + "messagesCaughtUp": "Nessun messaggio da leggere", + "messagesUnavailable": "Apri la posta per controllare", + "eventTitle": "In programma", + "allEvents": "Tutti gli eventi", + "eventsUnavailable": "Il calendario non è al momento disponibile. Apri tutti gli eventi per riprovare.", + "eventOngoing": "In corso", + "eventUpcoming": "Prossimo evento", + "eventDetails": "Scopri l’evento", + "noUpcomingEvents": "Non sono ancora stati annunciati nuovi eventi.", + "roomsUnavailable": "Le stanze non sono al momento disponibili. Apri la community per riprovare.", + "tasks": { + "title": "Da fare", + "support": "{count, plural, one {# ticket con risposta del supporto} other {# ticket con risposte del supporto}}", + "friends": "{count, plural, one {# richiesta di amicizia da controllare} other {# richieste di amicizia da controllare}}", + "event": "Il prossimo evento a cui sei iscritto: {title} · {date}", + "reward": "Il premio per gli inviti è pronto da ritirare", + "empty": "Tutto a posto. Nessuna azione in attesa.", + "unavailable": "Non è stato possibile verificare alcune azioni. Quelle disponibili sono mostrate sopra.", + "retry": "Riprova", + "rewardUnavailable": "Il progresso degli inviti non è al momento disponibile. Riprova." + } + }, + "search": { + "title": "Ricerca", + "subtitle": "Trova utenti, stanze aperte, notizie ed eventi.", + "queryLabel": "Termine di ricerca", + "submit": "Cerca", + "enterQuery": "Inserisci un termine per trovare utenti, stanze, notizie ed eventi.", + "resultsFor": "Risultati per “{query}”", + "users": "Utenti", + "rooms": "Stanze aperte", + "news": "Notizie", + "events": "Eventi", + "loadError": "Non è stato possibile caricare questi risultati. Riprova.", + "empty": "Nessun risultato trovato.", + "online": "Online", + "offline": "Offline", + "pagination": "Pagine: {category}", + "previous": "Precedente", + "next": "Successiva", + "pageSummary": "Pagina {page} di {pages} · {total} risultati" + } + }, + "toolbar": { + "home": "Home", + "reload": "Ricarica", + "fullscreen": "Schermo intero", + "logout": "Esci", + "onlineUsers": "Utenti online", + "emulatorOnline": "Emulatore online", + "emulatorOffline": "Emulatore offline", + "dragToMove": "Trascina per spostare", + "hide": "Nascondi barra", + "fullscreenExit": "Esci dalla schermo intero", + "show": "Mostra barra", + "emulatorUnknown": "Stato dell'emulatore sconosciuto" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Diagnostica file sorgente", + "preliminary": "Controllo preliminare: questi indirizzi sono stati verificati senza scaricare i file. L'importazione validerà i file originali.", + "http": "HTTP {status}", + "network": "Connessione alla sorgente non riuscita", + "timeout": "La sorgente non ha risposto in tempo", + "invalidResponse": "La sorgente ha restituito una pagina web invece di un file", + "available": "File trovato; il contenuto sarà verificato durante l'importazione", + "recover": "Carica il file originale e riprendi", + "recoveryHint": "Scegli {file} per questo furni (massimo 50 MB). L'identità viene verificata prima dell'uso. La ripresa ritenta gli elementi falliti e preserva le importazioni completate.", + "attach": "Scegli il file .nitro originale", + "working": "Validazione del file o ripresa dell'importazione...", + "attached": "File originale corrispondente allegato", + "resume": "Riprendi gli import falliti con questo file", + "invalidFile": "Impossibile allegare il file. Scegli un .nitro originale valido per questo furni, fino a 50 MB, e riprova.", + "resumeError": "Impossibile riprendere. Aggiorna la cronologia e usa l'ultimo tentativo; controlla il file originale e riprova.", + "mismatchedFile": "Questo file appartiene a un altro furni.", + "alreadyStarted": "Ripresa già avviata. Aggiorna la cronologia e usa l’ultimo tentativo.", + "notEligible": "Questo elemento non consente il recupero tramite allegato." + }, + "completeness": { + "title": "Completezza e prossimi passi", + "parts": { + "sql": "Elemento SQL", + "catalog": "Offerta catalogo", + "furnidata": "Furnidata", + "icon": "Icona locale", + "nitro": "File Nitro" + }, + "statuses": { + "present": "Presente", + "missing": "Mancante", + "unknown": "Non verificato", + "conflict": "Da controllare" + }, + "actions": { + "sql": "Importa o ripara questo furni per creare il record mancante.", + "catalog": "Importa o ripara questo furni per aggiungere un’offerta con la categoria e il prezzo automatici.", + "furnidata": "Importa o ripara questo furni per aggiungere i dati mancanti.", + "icon": "Importa o ripara questo furni per recuperare l’icona locale mancante.", + "nitro": "Importa o ripara questo furni per recuperare il file. Per un elemento esistente puoi anche usare Rigenera .nitro.", + "recheck": "Ricontrolla lo stato locale prima della riparazione. Se il problema persiste, verifica l’accesso ai file locali.", + "audit": "Controlla i duplicati e la corrispondenza degli ID sprite e dei tipi in Audit catalogo prima della riparazione." + }, + "openAudit": "Apri Audit catalogo per risolvere i conflitti", + "excludedConflicts": "{count, plural, one {# elemento richiede un controllo ed è escluso da questa importazione.} other {# elementi richiedono un controllo e sono esclusi da questa importazione.}}" + }, + "preflight": { + "filterLabel": "Filtra i controlli di importazione", + "filters": { + "all": "Tutti ({count})", + "complete": "Da completare ({count})", + "conflict": "Conflitti ({count})", + "verify": "Da verificare ({count})" + }, + "empty": "Nessun furni in questo gruppo.", + "actions": { + "complete": "Suggerimento: completa il furni esistente", + "import": "Suggerimento: importa il nuovo furni", + "refresh": "Il furni esistente è completo; aggiorna i dati dalla fonte", + "conflict": "Risolvi i conflitti nei dati locali prima di importare", + "verify": "Controlla i componenti non verificati prima di proseguire" + }, + "missing": "Mancanti: {parts}", + "unknown": "Non verificati: {parts}" + } + } + }, + "publicData": { + "loadError": "Non è stato possibile caricare questa sezione. Riprova.", + "retry": "Riprova", + "unavailable": "Non disponibile" + } } diff --git a/src/messages/ja.json b/src/messages/ja.json index e707806d..7973cb2d 100644 --- a/src/messages/ja.json +++ b/src/messages/ja.json @@ -1,674 +1,4908 @@ { - "draftRecovery": { - "ready": "復元用のコピーをこのブラウザーに7日間保存します。", - "saved": "復元用のコピーをこのブラウザーに7日間保存しました。", - "unavailable": "ブラウザーでの復元を利用できません。変更が保存されるまで、このページを開いたままにしてください。", - "found": "このブラウザーに復元用のコピーがあります。保存日時:", - "restore": "ブラウザーのコピーを復元", - "discard": "ブラウザーのコピーを削除", - "confirmRestore": "現在のフォームをブラウザー内の復元用コピーで置き換えますか?保存する前に内容を確認してください。", - "confirmDiscard": "このブラウザー内の復元用コピーを削除しますか?現在のフォームは変更されません。" - }, - "nav": {}, - "header": {}, - "footer": {}, - "emails": {}, - "pages": { - "admin": { - "nav": { - "studio": "Studio", - "operationsCenter": "Operations center" - }, - "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." - }, - "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" - } - } - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "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" - }, - "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}" - }, - "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." - } - }, - "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" - } - } - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "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." - } - }, - "toolbar": { - "home": "ホーム", - "reload": "再読み込み", - "fullscreen": "全画面", - "logout": "ログアウト", - "onlineUsers": "オンラインのユーザー", - "emulatorOnline": "エミュレータオンライン", - "emulatorOffline": "エミュレータオフライン", - "dragToMove": "ドラッグして移動", - "hide": "ツールバーを隠す", - "fullscreenExit": "全画面を終了", - "show": "ツールバーを表示", - "emulatorUnknown": "エミュレータの状態が不明です" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "ファイル診断", - "preliminary": "アドレスの事前確認です。内容はインポート時に検証します。", - "http": "HTTP {status}", - "network": "接続に失敗しました", - "timeout": "ソースの応答がタイムアウトしました", - "invalidResponse": "ソースがファイルではなくウェブページを返しました", - "available": "ファイルを検出しました。検証待ちです", - "recover": "元のファイルを添付して再開", - "recoveryHint": "{file}(最大50 MB)を選択してください。一致を確認し、失敗した項目を再試行します。完了したインポートは保持されます。", - "attach": "元の .nitro ファイルを選択", - "working": "検証または再開中...", - "attached": "一致する元のファイルを添付しました", - "resume": "このファイルで失敗したインポートを再開", - "invalidFile": "対応する元の .nitro ファイル(最大50 MB)を選択して再試行してください。", - "resumeError": "履歴を更新し、最新の試行を使用してください。ファイルを確認して再試行してください。", - "mismatchedFile": "このファイルは別の家具のものです。", - "alreadyStarted": "再開は既に開始されています。履歴を更新し、最新の試行を使用してください。", - "notEligible": "この項目は添付ファイルで復旧できません。" - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "復元用のコピーをこのブラウザーに7日間保存します。", + "saved": "復元用のコピーをこのブラウザーに7日間保存しました。", + "unavailable": "ブラウザーでの復元を利用できません。変更が保存されるまで、このページを開いたままにしてください。", + "found": "このブラウザーに復元用のコピーがあります。保存日時:", + "restore": "ブラウザーのコピーを復元", + "discard": "ブラウザーのコピーを削除", + "confirmRestore": "現在のフォームをブラウザー内の復元用コピーで置き換えますか?保存する前に内容を確認してください。", + "confirmDiscard": "このブラウザー内の復元用コピーを削除しますか?現在のフォームは変更されません。" + }, + "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" + }, + "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." + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "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" + } + }, + "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!" + }, + "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" + }, + "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" + } + }, + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "tickets": { + "title": "CMS support desk", + "subtitle": "Internal CMS tickets (assignee, priority, staff workflow). Not the same as help-center tickets from /help.", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab. Use Inbox for both queues.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product’s own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Tickets players open at /help/tickets. Separate from the CMS support desk.", + "queueHint": "This queue is the public help center. Use Inbox for both queues, or Support desk for CMS-only.", + "queueOtherCta": "Open unified inbox", + "queueCounts": "Open here: {here} · Support desk: {other}", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + } + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "applications": { + "title": "Staff Applications", + "subtitle": "Pending and reviewed staff applications", + "pending": "Pending", + "approved": "Approved", + "rejected": "Rejected", + "noApplications": "No applications yet", + "colId": "ID", + "colApplicant": "Applicant", + "colPosition": "Position", + "colStatus": "Status", + "colSubmitted": "Submitted", + "colActions": "Actions", + "review": "Review", + "approve": "Approve", + "reject": "Reject", + "confirmApprove": "Approve {username} for {position}?", + "confirmReject": "Reject {username}'s application for {position}?", + "detail": { + "title": "Application by {username}", + "subtitle": "For {position}", + "about": "About the applicant", + "message": "Application message", + "status": "Status", + "submitted": "Submitted", + "noMessage": "No message provided" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Teams", + "subtitle": "Define staff rank names and descriptions", + "addRank": "Add rank", + "editRank": "Edit rank", + "deleteRank": "Delete rank", + "noTeams": "No rank definitions yet", + "confirmDelete": "Delete rank {id} definition?", + "colId": "ID", + "colRank": "Rank", + "colName": "Name", + "colBadge": "Badge", + "colColour": "Colour", + "colActions": "Actions", + "form": { + "rankId": "Rank ID", + "rankIdPlaceholder": "Numeric rank ID", + "name": "Name", + "namePlaceholder": "e.g. Administrator", + "badge": "Badge code", + "badgePlaceholder": "e.g. ADM001", + "colour": "Colour", + "colourPlaceholder": "e.g. #ff0000", + "save": "Save team definition", + "saving": "Saving…", + "cancel": "Cancel" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Permissions", + "subtitle": "This is the live access control for admin and mod panels", + "addPermission": "Add permission", + "editPermission": "Edit permission", + "deletePermission": "Delete permission", + "noPermissions": "No permissions configured yet", + "confirmDelete": "Delete this permission?", + "colId": "ID", + "colRank": "Rank", + "colPermission": "Permission", + "colCreated": "Created", + "colActions": "Actions", + "form": { + "rankId": "Rank ID", + "rankIdPlaceholder": "Minimum rank required", + "permission": "Permission key", + "permissionPlaceholder": "e.g. admin.articles.manage", + "save": "Save permission", + "saving": "Saving…", + "cancel": "Cancel" + } + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "shop": { + "title": "Shop", + "subtitle": "Manage packages and orders", + "packages": "Packages", + "orders": "Orders", + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions (most recent 25)", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackage": "+ New package", + "edit": "Edit", + "delete": "Delete", + "viewOrder": "View", + "noPackages": "No shop packages yet", + "noOrders": "No orders yet", + "confirmDelete": "Delete this package?", + "colId": "ID", + "colName": "Name", + "colPrice": "Price", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colCurrency": "Currency", + "colType": "Type", + "colSold": "Sold", + "colEnabled": "Enabled", + "colActions": "Actions", + "colOrderId": "Order ID", + "colCustomer": "Customer", + "colPackage": "Package", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "colAmount": "Amount", + "colStatus": "Status", + "colDate": "Date", + "statusPending": "Pending", + "statusCompleted": "Completed", + "statusRefunded": "Refunded", + "form": { + "name": "Name", + "namePlaceholder": "Package name", + "description": "Description", + "descriptionPlaceholder": "Package description", + "price": "Price", + "currency": "Currency", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Type", + "typeCredits": "Credits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamonds", + "typeBadge": "Badge", + "typeFurni": "Furniture", + "typeRank": "Rank", + "amount": "Amount", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "e.g. VIP001", + "rankId": "Rank ID", + "furniItems": "Furniture items", + "enabled": "Enabled", + "save": "Save package", + "saving": "Saving…", + "cancel": "Cancel", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "listHeading": "Guilds ({count})", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "transactions": { + "title": "Transactions", + "subtitle": "PayPal payment log", + "noTransactions": "No transactions yet", + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colId": "ID", + "colUser": "User", + "colPayer": "Payer", + "colAmount": "Amount", + "colCurrency": "Currency", + "colPackage": "Package", + "colStatus": "Status", + "colTransaction": "Transaction ID", + "colDate": "Date", + "colActions": "Actions", + "statusCompleted": "Completed", + "statusPending": "Pending", + "statusFailed": "Failed", + "statusRefunded": "Refunded", + "detail": { + "title": "Transaction #{id}", + "paypalId": "PayPal ID", + "payerEmail": "Payer email", + "grossAmount": "Gross amount", + "fee": "Fee", + "netAmount": "Net amount" + } + }, + "vouchers": { + "title": "Shop Vouchers", + "subtitle": "Manage redeemable voucher codes", + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "newVoucher": "+ New voucher", + "edit": "Edit", + "delete": "Delete", + "noVouchers": "No vouchers yet", + "confirmDeleteTitle": "Delete voucher", + "confirmDelete": "Delete voucher \"{code}\"?", + "created": "Voucher created", + "deleted": "Voucher deleted", + "updated": "Voucher updated", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "updateError": "Could not update voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colId": "ID", + "colCode": "Code", + "colValue": "Value", + "colAmount": "Amount", + "colType": "Type", + "colUses": "Uses / Max", + "colStatus": "Status", + "colExpires": "Expires", + "colCreated": "Created", + "colActions": "Actions", + "form": { + "code": "Code", + "codePlaceholder": "e.g. SUMMER2025", + "value": "Value", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "type": "Type", + "typeCredits": "Credits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamonds", + "typeBadge": "Badge", + "typeFurni": "Furniture", + "typeRank": "Rank", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "e.g. VIP001", + "rankId": "Rank ID", + "maxUses": "Max uses", + "maxUsesPlaceholder": "0 = unlimited", + "expiresAt": "Expires at", + "enabled": "Enabled", + "create": "Create voucher", + "save": "Save voucher", + "saving": "Saving…", + "cancel": "Cancel" + } + }, + "subscriptions": { + "title": "Subscriptions", + "subtitle": "Active recurring subscriptions", + "noSubscriptions": "No active subscriptions", + "cancel": "Cancel", + "confirmCancel": "Cancel subscription for {username}?", + "colId": "ID", + "colUser": "User", + "colPackage": "Package", + "colAmount": "Amount", + "colInterval": "Interval", + "colStarted": "Started", + "colNextBilling": "Next billing", + "colStatus": "Status", + "colActions": "Actions", + "statusActive": "Active", + "statusCancelled": "Cancelled", + "statusExpired": "Expired", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Rare Values", + "subtitle": "Manage rare value categories and item prices", + "categories": "Categories", + "items": "Items", + "addCategory": "Add category", + "editCategory": "Edit category", + "editValue": "Edit value", + "deleteCategory": "Delete category", + "noCategories": "No rare value categories yet", + "confirmDeleteCategory": "Delete category \"{name}\" and all its items?", + "colId": "ID", + "colName": "Name", + "colItems": "Items", + "colUpdated": "Updated", + "colActions": "Actions", + "colItemName": "Item name", + "colCredits": "Credits", + "colPoints": "Points", + "colPointType": "Point type", + "categoryForm": { + "name": "Name", + "namePlaceholder": "Category name", + "save": "Save category", + "saving": "Saving…", + "cancel": "Cancel" + }, + "itemForm": { + "itemName": "Item name", + "itemNamePlaceholder": "e.g. Throne", + "credits": "Credits value", + "points": "Points value", + "pointType": "Point type", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Diamonds", + "save": "Save item", + "saving": "Saving…", + "cancel": "Cancel", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Badges", + "subtitle": "Upload, give and manage badge catalogue", + "upload": "Upload", + "giveBadge": "Give badge", + "catalogue": "Catalogue", + "uploadTitle": "Upload a new badge", + "uploadSubtitle": "Upload a badge image file", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "e.g. VIP001", + "badgeFile": "Badge file", + "badgeFileHint": "PNG or GIF, recommended 40x40", + "uploadButton": "Upload", + "uploading": "Uploading…", + "giveTitle": "Give badge to user", + "giveSubtitle": "Grant a badge to a specific user", + "username": "Username", + "usernamePlaceholder": "Target username", + "giveButton": "Give badge", + "giving": "Giving…", + "catalogueTitle": "Badge catalogue", + "catalogueSubtitle": "All available badges in the hotel", + "noBadges": "No badges in the catalogue", + "search": "Search badges", + "searchPlaceholder": "Search by code or name…", + "colCode": "Code", + "colImage": "Image", + "colName": "Name", + "colDescription": "Description", + "colActions": "Actions", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Achievements", + "subtitle": "Read-only list of in-game achievements", + "noAchievements": "No achievements configured", + "colId": "ID", + "colName": "Name", + "colCategory": "Category", + "colLevels": "Levels", + "colReward": "Reward", + "colProgress": "Progress", + "levelLabel": "Level {level}", + "rewardCredits": "{count} credits", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Calendar campaigns", + "subtitle": "Read-only list of calendar campaigns and events", + "noCampaigns": "No calendar campaigns yet", + "colId": "ID", + "colName": "Name", + "colStart": "Start", + "colEnd": "End", + "colType": "Type", + "colReward": "Reward", + "colActions": "Actions", + "detail": { + "title": "Campaign: {name}", + "subtitle": "Calendar event details", + "days": "Days", + "dayLabel": "Day {day}", + "reward": "Reward", + "noDays": "No days configured for this campaign", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Radio Moderation", + "subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).", + "moderation": "Moderation", + "shouts": "Shouts", + "applications": "Applications", + "schedules": "Schedules", + "settings": "Settings", + "embed": "Embed", + "ranks": "Ranks", + "history": "History", + "apiKeys": "API Keys", + "points": "Points", + "autoDj": "AutoDJ", + "user": "User", + "message": "Message", + "posted": "Posted", + "realName": "Real Name", + "age": "Age", + "style": "Style", + "applied": "Applied", + "day": "Day", + "start": "Start", + "end": "End", + "show": "Show", + "status": "Status", + "active": "active", + "inactive": "inactive", + "hidden": "hidden", + "activeSchedules": "Active schedules", + "noShouts": "No shouts to moderate", + "noApplications": "No applications submitted.", + "noSchedules": "No schedules configured.", + "deleteShout": "Delete", + "confirmDeleteShout": "Delete this shout?", + "pendingApplications": "Pending applications", + "settingsForm": { + "title": "Radio Settings", + "subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "enabled": "Enabled", + "disabled": "Disabled", + "totalKeys": "Total keys", + "configured": "Configured", + "curatedHint": "curated keys with a value", + "customKeys": "Custom keys", + "saveAll": "Save all", + "singleKey": "Add / overwrite a single key", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "value", + "commentPlaceholder": "comment (optional)", + "saveSingle": "Save", + "otherSettings": "Other radio settings", + "dbError": "Could not load settings (database unavailable). Defaults will be created on save." + }, + "embedPage": { + "title": "Radio Embed", + "subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).", + "streamUrl": "Stream URL", + "configured": "Configured", + "missing": "Missing", + "radioName": "Radio name", + "nowPlayingApi": "Now-playing API", + "set": "Set", + "notSet": "Not set", + "noStreamUrl": "No stream URL configured", + "noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.", + "goToSettings": "Go to Radio Settings", + "livePreview": "Live preview", + "livePreviewText": "This is the bare audio player as visitors will see it. Press play to confirm the stream is reachable.", + "source": "Source", + "audioSnippet": "Audio player snippet", + "audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.", + "iframeSnippet": "Iframe wrapper snippet", + "iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.", + "audioUnsupported": "Your browser does not support the audio element." + }, + "banners": { + "title": "Banners", + "heading": "Radio Banners", + "description": "Promotional banners shown on the radio page, ordered by sort order.", + "addBanner": "Add banner", + "createBanner": "Create banner", + "deleteBanner": "Delete banner", + "noBanners": "No banners yet — add one above.", + "existing": "Existing banners ({count})", + "save": "Save", + "delete": "Delete", + "byUser": "by user {id}", + "active": "active", + "hidden": "hidden", + "bannerAlt": "Radio banner", + "statusActive": "Active", + "statusHidden": "Hidden", + "dbError": "Could not load banners (database unavailable).", + "form": { + "imagePath": "Image path / URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Title", + "description": "Description", + "sortOrder": "Sort order", + "active": "Active" + } + }, + "ranksForm": { + "title": "Radio Ranks", + "subtitle": "DJ / staff ranks assignable on radio applications.", + "dbError": "Could not load ranks (database unavailable).", + "active": "Active", + "addRank": "Add rank", + "name": "Name", + "badgeCode": "Badge code", + "description": "Description", + "createRank": "Create rank", + "existing": "Existing ranks ({count})", + "noRanks": "No ranks yet — add one above.", + "activeLabel": "active", + "inactiveLabel": "inactive", + "save": "Save", + "deleteRank": "Delete rank #{id}" + }, + "historyPage": { + "title": "Radio Play History", + "subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.", + "dbError": "Could not load radio history (database unavailable).", + "showsLogged": "Shows logged", + "onAirNow": "On air now", + "uniqueDjs": "Unique DJs", + "peakListeners": "Peak listeners", + "empty": "No radio history recorded yet.", + "showLog": "Show log ({count})", + "colDj": "DJ", + "colShow": "Show", + "colStarted": "Started", + "colEnded": "Ended", + "colAirtime": "Airtime", + "colListeners": "Listeners", + "colNotes": "Notes", + "onAir": "on air" + }, + "apiKeysForm": { + "title": "Radio API Keys", + "subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.", + "dbError": "Could not load API keys (database unavailable).", + "totalKeys": "Total keys", + "active": "Active", + "inactive": "Inactive", + "generateKey": "Generate key", + "generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.", + "name": "Name", + "namePlaceholder": "AzureCast bridge", + "rateLimit": "Rate limit (requests/min)", + "allowedIps": "Allowed IPs (optional)", + "allowedIpsPlaceholder": "comma-separated, blank = any", + "generate": "Generate key", + "existingKeys": "Existing keys ({count})", + "noKeys": "No API keys yet — generate one above.", + "colName": "Name", + "colKey": "Key", + "colAllowedIps": "Allowed IPs", + "colRateLimit": "Rate limit", + "colLastUsed": "Last used", + "colExpires": "Expires", + "colStatus": "Status", + "colActions": "Actions", + "maskedHint": "Only the first 8 characters are shown", + "any": "any", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete" + }, + "pointsForm": { + "title": "Radio Listener Points", + "subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "points": "Points", + "enabled": "Enabled", + "disabled": "Disabled", + "perMinute": "Per minute", + "paidIn": "paid in {currency}", + "maxPerDay": "Max / day", + "unlimited": "Unlimited", + "minListeners": "Min listeners", + "settings": "Settings", + "pointsEnabled": "Points enabled", + "pointsEnabledHint": "Master switch for awarding listener points.", + "currency": "Currency", + "currencyHint": "Which wallet the points are paid into.", + "pointsPerMinute": "Points per minute", + "pointsPerMinuteHint": "Amount awarded for each full minute of listening.", + "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", + "minListenersHint": "Points are only awarded when at least this many people are tuned in.", + "save": "Save points settings", + "saved": "Settings saved." + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.", + "dbError": "Could not load the AutoDJ playlist (database unavailable).", + "tracks": "Tracks", + "active": "Active", + "inactive": "Inactive", + "addTrack": "Add track", + "trackTitle": "Title", + "titlePlaceholder": "Track title", + "artist": "Artist", + "album": "Album", + "artworkUrl": "Artwork URL", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Duration (seconds)", + "durationPlaceholder": "e.g. 215", + "sortOrder": "Sort order", + "playlist": "Playlist ({count})", + "noTracks": "No AutoDJ tracks yet — add one above.", + "colOrder": "Order", + "colTitle": "Title", + "colArtist": "Artist", + "colAlbum": "Album", + "colDuration": "Duration", + "colPlays": "Plays", + "colLastPlayed": "Last played", + "colStatus": "Status", + "colActions": "Actions", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete" + }, + "monitoring": { + "title": "Radio Monitoring", + "subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.", + "stream": "Stream", + "online": "Online", + "offline": "Offline", + "notConfigured": "Not configured", + "nowPlaying": "Now playing", + "nowPlayingApi": "Now-playing API", + "listenersApi": "Listeners API", + "listeners": "Listeners", + "currentSong": "Current song", + "bitrate": "Bitrate", + "status": "Status", + "noNowPlayingHint": "no now-playing API set", + "noListenersHint": "no listeners API set", + "endpointDiagnostics": "Endpoint diagnostics", + "diagnosticsLegend": "OK: reachable · WARN: not configured · ERROR: request failed or timed out.", + "streamUrl": "Stream URL", + "unreachable": "unreachable", + "refresh": "Refresh" + }, + "moderationPage": { + "title": "DJ Moderation", + "subtitle": "Review and remove radio shouts (50 most recent).", + "recentShouts": "Recent Shouts ({count})" + } + }, + "commandocentrum": { + "title": "Commandocentrum", + "subtitle": "Diagnostics, RCON controls and user management", + "diagnostics": "Diagnostics", + "rcon": "RCON", + "userActions": "User actions", + "diagnosticsTitle": "Emulator diagnostics", + "memoryUsage": "Memory usage", + "uptime": "Uptime", + "onlineUsers": "Online users", + "roomsLoaded": "Rooms loaded", + "refresh": "Refresh", + "rconTitle": "RCON commands", + "rconPlaceholder": "Enter RCON command…", + "rconSend": "Send", + "rconSending": "Sending…", + "rconResponse": "Response", + "userActionsTitle": "User actions", + "username": "Username", + "usernamePlaceholder": "Target username", + "action": "Action", + "execute": "Execute", + "actions": { + "disconnect": "Disconnect", + "alert": "Send alert", + "giveCredits": "Give credits", + "giveBadge": "Give badge", + "givePoints": "Give points", + "ban": "Ban", + "kick": "Kick" + }, + "messagePlaceholder": "Message (for alerts)…", + "amountPlaceholder": "Amount…", + "badgePlaceholder": "Badge code…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Emulator Config", + "subtitle": "View and edit emulator settings and locale texts", + "settings": "Settings", + "texts": "Texts", + "search": "Search", + "searchPlaceholder": "Search keys…", + "noSettings": "No settings found", + "noTexts": "No texts found", + "edit": "Edit", + "save": "Save", + "saving": "Saving…", + "cancel": "Cancel", + "colKey": "Key", + "colValue": "Value", + "colType": "Type", + "colActions": "Actions", + "editDialog": { + "title": "Edit: {key}", + "value": "Value", + "valuePlaceholder": "Enter value…", + "save": "Save changes", + "cancel": "Cancel" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Alerts", + "subtitle": "Send hotel-wide alerts and view recent ops alerts", + "sendAlert": "Send hotel alert", + "recentAlerts": "Recent alerts ({count})", + "noAlerts": "No recent alerts", + "noRecentAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "form": { + "title": "Alert title", + "titlePlaceholder": "e.g. Server maintenance in 10 minutes", + "message": "Alert message", + "messagePlaceholder": "Write the alert message…", + "description": "Broadcasts via RCON 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" + }, + "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" + } + }, + "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" + }, + "media": { + "title": "Media Library", + "subtitle": "Upload and manage media files", + "upload": "Upload", + "uploadTitle": "Upload a file", + "uploadSubtitle": "Drag and drop or click to upload", + "uploadButton": "Choose file", + "uploading": "Uploading…", + "noFiles": "No media files yet", + "delete": "Delete", + "confirmDelete": "Delete this file permanently?", + "search": "Search", + "searchPlaceholder": "Search by filename…", + "colPreview": "Preview", + "colName": "Name", + "colSize": "Size", + "colType": "Type", + "colUploaded": "Uploaded", + "colActions": "Actions", + "copyUrl": "Copy URL", + "urlCopied": "URL copied to clipboard" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Upload and manage the site favicon", + "current": "Current favicon", + "uploadLabel": "Upload favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.", + "upload": "Upload", + "uploading": "Uploading…", + "delete": "Remove", + "deleting": "Removing…", + "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": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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." + } + }, + "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." + } + }, + "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" + }, + "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." + } + }, + "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}" + }, + "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": "Sign in", + "subtitle": "Welcome back — log in to enter the hotel.", + "subtitle2fa": "Enter the 6-digit code from your authenticator.", + "welcomeBack": "Welcome back", + "welcomeBackSub": "Sign in to continue to {hotelName}", + "usernamePlaceholder": "Username", + "passwordPlaceholder": "Password", + "codePlaceholder": "2FA code", + "pleaseWait": "Please wait…", + "verify": "Verify", + "signIn": "Sign in", + "or": "or", + "noAccount": "No account?", + "createOne": "Create one", + "forgotPassword": "Forgot password?", + "errorInvalidCredentials": "Invalid username or password", + "errorInvalid2fa": "Invalid 2FA code", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Create account", + "subtitle": "Join the hotel — it only takes a moment.", + "username": "Username", + "email": "Email", + "password": "Password", + "confirmPassword": "Repeat password", + "usernamePlaceholder": "Username", + "emailPlaceholder": "Email", + "passwordPlaceholder": "Password (min 8 chars)", + "confirmPasswordPlaceholder": "Repeat password", + "selectOutfit": "Select your outfit", + "termsAccept": "I am 18+ and accept the {hotel} terms & rules.", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security", + "createAccount": "Create account", + "creatingAccount": "Creating account...", + "redirecting": "Redirecting to your account...", + "alreadyHaveAccount": "Already have an account? Login!", + "alreadyHaveAccountPre": "Already have an account?", + "alreadyHaveAccountLink": "Sign in", + "register": "Register", + "whoIsOnline": "Who's online", + "usersOnline": "{count} online", + "termsError": "You must accept the terms & rules to register.", + "usernameError": "Username is required.", + "emailError": "Valid email is required.", + "passwordError": "Password must be at least 6 characters.", + "confirmPasswordError": "Passwords do not match.", + "termsRequired": "You must accept the terms & rules.", + "usernameRequired": "Username is required.", + "emailRequired": "Email is required.", + "passwordRequired": "Password is required.", + "passwordsDontMatch": "Passwords do not match." + }, + "forgot": { + "title": "Reset password", + "subtitle": "We'll email you a secure link to set a new password.", + "sentNotice": "If that email is registered, a reset link has been sent. Check your inbox.", + "emailPlaceholder": "Your email", + "sendResetLink": "Send reset link", + "backToLogin": "Back to login", + "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 6 chars)", + "resetPassword": "Reset password", + "backToLogin": "Back to login" + }, + "verify": { + "verifiedTitle": "You're all set", + "verifiedSubtitle": "Email verified", + "verifiedBody": "Your email address has been verified. You can now log in and play.", + "goToLogin": "Go to login", + "alreadyTitle": "Already verified", + "alreadySubtitle": "Nothing left to do", + "alreadyBody": "This email address has already been confirmed.", + "unavailableTitle": "Try again shortly", + "unavailableSubtitle": "Server unreachable", + "unavailableBody": "We couldn't reach the server to verify your email. Please retry the link in a moment.", + "invalidTitle": "Email verification", + "invalidSubtitle": "Invalid or expired link", + "invalidBody": "This verification link is not valid. Make sure you opened the full link from your email, or request a new one.", + "backToLogin": "Back to login" + }, + "banned": { + "title": "You are banned", + "subtitle": "Account suspended", + "body": "Your account has been suspended from the hotel.", + "reasonLabel": "Reason:", + "permanent": "This ban is permanent.", + "expires": "Expires {date}.", + "contactStaff": "If you believe this is a mistake, contact the staff team." + }, + "maintenance": { + "title": "{hotel} is under maintenance", + "subtitle": "We'll be back shortly", + "staffCanLogIn": "Staff can still log in." + }, + "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" + }, + "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" + } + }, + "toolbar": { + "home": "ホーム", + "reload": "再読み込み", + "fullscreen": "全画面", + "logout": "ログアウト", + "onlineUsers": "オンラインのユーザー", + "emulatorOnline": "エミュレータオンライン", + "emulatorOffline": "エミュレータオフライン", + "dragToMove": "ドラッグして移動", + "hide": "ツールバーを隠す", + "fullscreenExit": "全画面を終了", + "show": "ツールバーを表示", + "emulatorUnknown": "エミュレータの状態が不明です" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "ファイル診断", + "preliminary": "アドレスの事前確認です。内容はインポート時に検証します。", + "http": "HTTP {status}", + "network": "接続に失敗しました", + "timeout": "ソースの応答がタイムアウトしました", + "invalidResponse": "ソースがファイルではなくウェブページを返しました", + "available": "ファイルを検出しました。検証待ちです", + "recover": "元のファイルを添付して再開", + "recoveryHint": "{file}(最大50 MB)を選択してください。一致を確認し、失敗した項目を再試行します。完了したインポートは保持されます。", + "attach": "元の .nitro ファイルを選択", + "working": "検証または再開中...", + "attached": "一致する元のファイルを添付しました", + "resume": "このファイルで失敗したインポートを再開", + "invalidFile": "対応する元の .nitro ファイル(最大50 MB)を選択して再試行してください。", + "resumeError": "履歴を更新し、最新の試行を使用してください。ファイルを確認して再試行してください。", + "mismatchedFile": "このファイルは別の家具のものです。", + "alreadyStarted": "再開は既に開始されています。履歴を更新し、最新の試行を使用してください。", + "notEligible": "この項目は添付ファイルで復旧できません。" + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/nl.json b/src/messages/nl.json index d5e54aeb..42f8ccc0 100644 --- a/src/messages/nl.json +++ b/src/messages/nl.json @@ -1,4378 +1,4914 @@ { - "draftRecovery": { - "ready": "Een herstelkopie wordt 7 dagen in deze browser bewaard.", - "saved": "De herstelkopie is voor 7 dagen in deze browser opgeslagen.", - "unavailable": "Herstel via de browser is niet beschikbaar. Houd deze pagina open totdat je wijzigingen zijn opgeslagen.", - "found": "Er is een herstelkopie beschikbaar in deze browser, opgeslagen op", - "restore": "Browserkopie herstellen", - "discard": "Browserkopie verwijderen", - "confirmRestore": "Het huidige formulier vervangen door de herstelkopie uit de browser? Controleer de inhoud voordat je opslaat.", - "confirmDiscard": "Deze herstelkopie uit de browser verwijderen? Het huidige formulier blijft ongewijzigd." - }, - "nav": { - "home": "Home", - "community": "Community", - "articles": "Artikelen", - "photos": "Foto's", - "staff": "Team", - "rankings": "Ranglijsten", - "guilds": "Gildes", - "events": "Evenementen", - "polls": "Peilingen", - "leaderboards": "Klassementen", - "rareValues": "Zeldzame waarden", - "shop": "Winkel", - "market": "Markt", - "assistance": "Assistentie", - "helpCenter": "Helpcentrum", - "myTickets": "Mijn tickets", - "badges": "Badges", - "radio": "Radio", - "friends": "Vrienden", - "messages": "Berichten", - "admin": "Beheer", - "openMenu": "Menu openen", - "closeMenu": "Menu sluiten", - "drawBadge": "Badge tekenen", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} online", - "nitroClient": "Nitro client", - "tagline": "Een online virtuele wereld waar je je eigen avatar kunt maken, vrienden kunt maken, kunt chatten, kamers kunt maken en nog veel meer! Leeftijdsvereiste: 18+", - "login": "Inloggen", - "or": "Of", - "createAccount": "Account aanmaken" - }, - "footer": { - "copyright": "© {year} - {hotel} is een niet-commercieel educatief project" - }, - "emails": { - "verify": { - "subject": "Verifieer je e-mail · {hotel}", - "heading": "Verifieer je e-mail", - "body": "Welkom bij {hotel}! Bevestig dit e-mailadres om je account af te ronden.", - "button": "E-mail verifiëren", - "fallback": "Werkt de knop niet? Plak dan deze link in je browser:" - } - }, - "pages": { - "error": { - "code": "Fout", - "title": "Er ging iets mis", - "subtitle": "Het hotel liep tegen een onverwachte snag aan.", - "body": "Probeer het zo opnieuw. Blijft het probleem? Neem contact op met de staff en noem de referentie hieronder.", - "tryAgain": "Opnieuw proberen", - "backHome": "Terug naar home", - "reference": "Referentie: {digest}" - }, - "notFound": { - "code": "404", - "title": "Pagina niet gevonden", - "subtitle": "Deze kamer bestaat niet — of de meubels zijn verplaatst.", - "body": "Controleer de link, of ga terug naar de lobby.", - "backHome": "Terug naar home", - "latestNews": "Laatste nieuws" - }, - "staff": { - "title": "Team", - "subtitle": "Het team achter het hotel", - "ranksTitle": "Rangen", - "ranksSubtitle": "Waar elk deel van het team voor zorgt", - "membersTitle": "Teamleden", - "membersEmptySubtitle": "Momenteel niemand om te laten zien", - "membersSubtitle": "{count, plural, one {# lid houdt de boel draaiende} other {# leden houden de boel draaiende}}", - "emptyState": "Geen teamleden om te tonen.", - "colUsername": "Gebruikersnaam", - "colRank": "Rang", - "colMotto": "Motto" - }, - "leaderboard": { - "title": "Klassement", - "subtitle": "Top 20 spelers op {currency}", - "tab_credits": "Credits", - "tab_diamonds": "Diamanten", - "tab_duckets": "Duckets", - "tab_achievement": "Prestaties", - "tab_respects": "Respect", - "tab_onlinetime": "Online tijd", - "emptyState": "Nog geen klassementen om te tonen.", - "colAvatar": "Avatar", - "colPlayer": "Speler" - }, - "friends": { - "title": "Vrienden", - "emptySubtitle": "Je hebt nog geen vrienden toegevoegd", - "subtitle": "{count, plural, one {Je hebt # vriend} other {Je hebt # vrienden}}", - "emptyState": "Voeg vrienden toe in het hotel en ze verschijnen hier.", - "noMotto": "Geen motto", - "remove": "Verwijderen", - "success": { - "removed": "Vriend verwijderd." - }, - "errors": { - "notFound": "Die vriendschap is niet gevonden.", - "invalid": "Ongeldige vriend.", - "error": "Er ging iets mis. Probeer het opnieuw." - } - }, - "messages": { - "title": "Berichten", - "subtitle": "Vriendschapsverzoeken, offline inbox en berichten naar vrienden", - "requestsTitle": "Vriendschapsverzoeken", - "requestsEmptySubtitle": "Niemand heeft nog gevraagd om je vriend te zijn", - "requestsSubtitle": "{count, plural, one {# openstaand verzoek} other {# openstaande verzoeken}}", - "requestsEmptyState": "Geen openstaande vriendschapsverzoeken.", - "wantsToBeFriend": "wil je vriend zijn.", - "accept": "Accepteren", - "decline": "Weigeren", - "offlineTitle": "Offline berichten", - "offlineEmptySubtitle": "Je inbox is leeg", - "offlineSubtitle": "{count, plural, one {# bericht ontvangen} other {# berichten ontvangen}}", - "offlineEmptyState": "Je hebt geen offline berichten.", - "composeTitle": "Offline bericht sturen", - "composeSubtitle": "Afgeleverd in de hotel messenger wanneer je vriend offline is", - "composeEmptyFriends": "Voeg vrienden toe in het hotel om offline berichten te sturen.", - "composeFriendLabel": "Vriend", - "composeFriendPlaceholder": "Kies een vriend", - "composeMessageLabel": "Bericht", - "composeMessagePlaceholder": "Schrijf je bericht (max. 500 tekens)…", - "composeSend": "Bericht versturen", - "unknownUser": "Gebruiker #{id}", - "success": { - "accepted": "Vriendschapsverzoek geaccepteerd.", - "declined": "Vriendschapsverzoek geweigerd.", - "sent": "Offline bericht verstuurd." - }, - "errors": { - "notFound": "Dat vriendschapsverzoek is niet gevonden.", - "unauthorized": "Je kunt dit vriendschapsverzoek niet behandelen.", - "invalid": "Ongeldig vriendschapsverzoek.", - "error": "Er ging iets mis. Probeer het opnieuw.", - "notFriend": "Je kunt alleen vrienden berichten.", - "emptyMessage": "Schrijf een bericht.", - "rateLimited": "Te veel berichten. Wacht even en probeer opnieuw." - } - }, - "sessions": { - "title": "Loginactiviteit", - "subtitle": "Recente aanmeldingen en mislukte pogingen op je account", - "recentTitle": "Recente aanmeldingen", - "recentEmpty": "Nog geen aanmeldingen geregistreerd.", - "colWhen": "Wanneer", - "colIp": "IP", - "colDevice": "Apparaat", - "failedTitle": "Mislukte pogingen", - "failedSubtitle": "Verkeerd wachtwoord voor je gebruikersnaam", - "unknownDevice": "Onbekend apparaat", - "signOutEverywhereTitle": "Overal uitloggen", - "signOutEverywhereDescription": "Beëindigt alle websitesessies op elk apparaat. Je moet hier ook opnieuw inloggen.", - "signOutEverywhereButton": "Alle sessies beëindigen", - "successSignedOutAll": "Alle sessies zijn beëindigd." - }, - "profile": { - "noMotto": "Geen motto", - "statRank": "Rang", - "statCredits": "Credits", - "statRegistered": "Geregistreerd", - "badgesTitle": "Badges", - "badgesEmpty": "Nog geen badges.", - "photosTitle": "Foto's", - "photosEmpty": "Nog geen foto's.", - "guestbookTitle": "Gastenboek", - "guestbookSubtitle": "Berichten op {username}'s muur", - "leaveMessage": "Bericht achterlaten", - "guestbookPlaceholder": "Schrijf iets op {username}'s gastenboek…", - "post": "Plaatsen", - "loginToPost": "Log in om een gastenboekbericht achter te laten.", - "guestbookEmpty": "Nog geen gastenboekberichten.", - "unknownUser": "Gebruiker #{id}", - "statDuckets": "Duckets", - "statDiamonds": "Diamanten", - "walletTitle": "Portemonnee", - "friendsTitle": "Vrienden", - "friendsSubtitle": "Mensen in het hotel waar ze mee omgaan", - "friendsEmpty": "Geen vrienden om te tonen.", - "roomsTitle": "Kamers", - "roomsSubtitle": "Kamers die ze bezitten", - "roomsEmpty": "Geen kamers om te tonen.", - "roomUntitled": "Naamloze kamer", - "addFriend": "Vriend toevoegen", - "alreadyFriends": "Jullie zijn vrienden", - "requestPending": "Verzoek in behandeling", - "respondInMessages": "Reageer in Berichten", - "success": { - "sent": "Vriendschapsverzoek verzonden.", - "guestbook": "Gastenboekbericht geplaatst." - }, - "errors": { - "self": "Je kunt jezelf geen vriendschapsverzoek sturen.", - "alreadyFriends": "Jullie zijn al vrienden.", - "alreadyPending": "Je hebt deze gebruiker al een verzoek gestuurd.", - "incomingPending": "Deze gebruiker heeft jou al een verzoek gestuurd — accepteer of weiger het in Berichten.", - "empty": "Schrijf een bericht voordat je plaatst.", - "moderated": "Dat bericht is geblokkeerd door moderatie.", - "ratelimit": "Je plaatst te snel. Wacht even en probeer opnieuw.", - "invalid": "Ongeldig verzoek.", - "error": "Er ging iets mis. Probeer het opnieuw." - }, - "privacy": { - "title": "Zichtbaarheid van profiel", - "hint": "Kies wat bezoekers op je openbare profiel kunnen zien. Je e-mailadres wordt hier nooit getoond. Je blijft zelf je gegevens zien. Deze instellingen gelden voor de profielpagina.", - "wallet": "Toon mijn portemonnee", - "online": "Toon mijn online status", - "friends": "Toon mijn vrienden", - "photos": "Toon mijn foto’s", - "registered": "Toon mijn registratiedatum", - "save": "Zichtbaarheid opslaan", - "saved": "Profielzichtbaarheid opgeslagen.", - "error": "De profielzichtbaarheid kon niet worden geladen of opgeslagen. Probeer het opnieuw.", - "ownerHint": "Je bekijkt je eigen gegevens, inclusief verborgen onderdelen." - }, - "morePhotos": "Meer foto’s tonen (maximaal de 24 nieuwste)", - "openPhoto": "Open de volledige foto in een nieuw tabblad", - "photosUnavailable": "Foto’s konden niet worden geladen. Probeer het later opnieuw." - }, - "rankings": { - "title": "Rankings", - "subtitle": "De top 12 spelers gerangschikt op credits", - "emptyState": "Nog geen spelers om te rangschikken." - }, - "home": { - "welcome": "Welkom bij {hotelName}", - "welcomeSubtitle": "Je retro hotel, nu mogelijk gemaakt door Next.js", - "welcomeBody": "Rondhangen, meubels verzamelen en vrienden ontmoeten.", - "enterHotel": "{hotelName} betreden", - "onlineFriends": "Online vrienden", - "noFriendsOnline": "Geen vrienden online", - "register": "NU REGISTREREN", - "joinNow": "Word vandaag nog lid van {hotelName}!", - "recentUsers": "Recente gebruikers", - "recentPhotos": "Recente foto's", - "latestNews": "Laatste nieuws", - "newsTitle": "Laatste nieuws", - "newsSubtitle": "Vers van het hotel", - "allNews": "Al het nieuws →", - "allUsers": "Community →", - "noArticles": "Nog geen artikelen.", - "noPhotos": "Nog geen foto's.", - "noUsers": "Geen gebruikers online", - "statsOnline": "Online", - "statsCitizens": "Burgers", - "statsRooms": "Kamers", - "statsArticles": "Artikelen", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Maak je eigen unieke look", - "featuresFurniture": "Meubels", - "featuresFurnitureDesc": "Decoreer kamers met items", - "featuresCommunity": "Community", - "featuresCommunityDesc": "Maak vrienden en chat", - "featuresGames": "Spelletjes", - "featuresGamesDesc": "Speel mee en heb plezier", - "latestArticle": "Laatste artikel", - "latestUsers": "Nieuwste burgers ({count} totaal)" - }, - "news": { - "title": "Nieuws", - "subtitle": "De laatste aankondigingen, evenementen en updates van het hotel", - "noArticles": "Nog geen artikelen.", - "searchLabel": "Nieuws zoeken", - "orderLabel": "Volgorde", - "newest": "Nieuwste eerst", - "oldest": "Oudste eerst", - "apply": "Toepassen", - "loadError": "Het nieuws kon niet worden geladen. Probeer het opnieuw.", - "pagination": "Nieuwspagina's", - "previous": "Vorige", - "next": "Volgende", - "pageSummary": "Pagina {page} van {pages} · {total} artikelen" - }, - "article": { - "backToNews": "← Nieuws", - "reactionsTitle": "Reacties", - "reactionsSubtitle": "Laat ons weten wat je ervan vindt", - "reaction": { - "like": "Vind ik leuk", - "love": "Hou ervan", - "wow": "Wauw" - }, - "removeReaction": "Klik om je reactie te verwijderen", - "reactWith": "Reageer met {reaction}", - "noReactions": "Nog geen reacties.", - "logIn": "Log in", - "toReact": "om te reageren.", - "commentsTitle": "Reacties", - "commentsSubtitle": "Doe mee met het gesprek", - "commentsCount": "{count} tot nu toe", - "noComments": "Nog geen reacties. Wees de eerste om te reageren.", - "userNumber": "Gebruiker #{id}", - "addComment": "Reactie toevoegen", - "commentPlaceholder": "Schrijf je reactie…", - "postComment": "Reactie plaatsen", - "toComment": "om een reactie achter te laten.", - "success": { - "posted": "Reactie geplaatst.", - "reaction": "Reactie bijgewerkt." - }, - "errors": { - "empty": "Schrijf een reactie voordat je plaatst.", - "moderated": "Die reactie is geblokkeerd door moderatie.", - "ratelimit": "Je reageert te snel. Wacht even en probeer opnieuw.", - "invalid": "Ongeldige reactie.", - "notFound": "Dat artikel is niet gevonden.", - "error": "Er ging iets mis. Probeer het opnieuw." - } - }, - "photos": { - "title": "Foto's", - "subtitle": "De laatste snapshots gemaakt in het hotel", - "noPhotos": "Nog geen foto's.", - "photoAlt": "Foto door gebruiker #{id}", - "byUser": "door gebruiker #{id}" - }, - "badges": { - "title": "Badges", - "subtitle": "De badges die je kunt verdienen en showen in het hotel", - "noBadges": "Nog geen badges beschikbaar." - }, - "community": { - "title": "Community", - "subtitle": "Alles wat er gebeurt in het hotel op één plek", - "open": "Open →", - "links": { - "rankings": { - "title": "Rankings", - "text": "Bekijk de rijkste spelers in het hotel, gerangschikt op credits." - }, - "staff": { - "title": "Team", - "text": "Ontmoet het team dat het hotel elke dag draaiende houdt." - }, - "news": { - "title": "Nieuws", - "text": "De laatste aankondigingen, evenementen en updates." - }, - "photos": { - "title": "Foto's", - "text": "Snapshots gedeeld door de community van overal in het hotel." - }, - "guilds": { - "title": "Gildes", - "text": "Bekijk de groepen die spelers hebben gemaakt en waar ze lid van zijn." - }, - "leaderboards": { - "title": "Klassementen", - "text": "Wie staat er bovenaan dit seizoen in de hotelstatistieken." - } - } - }, - "guilds": { - "title": "Gildes", - "subtitle": "Bekijk de groepen die spelers hebben gemaakt en waar ze lid van zijn", - "empty": "Nog geen gildes.", - "unnamedGuild": "Naamloos gilde", - "noDescription": "Geen beschrijving" - }, - "guild": { - "allGuilds": "← Alle gildes", - "unnamedGuild": "Naamloos gilde", - "noDescription": "Geen beschrijving", - "memberSingular": "Lid", - "memberPlural": "Leden", - "founded": "Opgericht", - "forumLink": "Forum →", - "discussion": "Discussie", - "membersTitle": "Leden", - "memberLowerSingular": "lid", - "memberLowerPlural": "leden", - "noMembers": "Geen leden.", - "owner": "Eigenaar", - "noMotto": "Geen motto" - }, - "guildForum": { - "backToGuild": "← Terug naar gilde", - "unnamedGuild": "Naamloos gilde", - "forumTitle": "{guild} — Forum", - "threadSingular": "discussie", - "threadPlural": "discussies", - "newThread": "+ Nieuwe discussie", - "empty": "Nog geen discussies in dit forum.", - "colSubject": "Onderwerp", - "colAuthor": "Auteur", - "colPosts": "Berichten", - "colDate": "Datum", - "noSubject": "(geen onderwerp)", - "pinned": "Vastgepind", - "locked": "Gesloten", - "userNumber": "Gebruiker #{id}", - "unknown": "Onbekend", - "success": { - "posted": "Discussie geplaatst." - } - }, - "guildForumNew": { - "backToForum": "← Terug naar forum", - "unnamedGuild": "Naamloos gilde", - "title": "Nieuwe discussie", - "subtitle": "in {guild} forum", - "subjectLabel": "Onderwerp", - "subjectPlaceholder": "Discussieonderwerp", - "messageLabel": "Bericht", - "messagePlaceholder": "Schrijf je openingsbericht…", - "postThread": "Discussie plaatsen", - "cancel": "Annuleren", - "errors": { - "invalid": "Onderwerp en bericht zijn verplicht.", - "notFound": "Dat gilde is niet gevonden.", - "ratelimit": "Je plaatst te snel. Wacht even en probeer opnieuw.", - "error": "Er ging iets mis. Probeer het opnieuw." - } - }, - "guildForumThread": { - "backToForum": "← Terug naar forum", - "unnamedGuild": "Naamloos gilde", - "noSubject": "(geen onderwerp)", - "inGuildForum": "{guild} forum", - "pinned": "Vastgezet", - "locked": "Vergrendeld", - "postsTitle": "Berichten", - "postsSubtitle": "{count, plural, one {# bericht} other {# berichten}}", - "postsEmpty": "Geen berichten in deze discussie.", - "userNumber": "Gebruiker #{id}", - "replyTitle": "Reageren", - "replySubtitle": "Voeg je bericht toe aan deze discussie", - "replyPlaceholder": "Schrijf je reactie…", - "replySubmit": "Reactie plaatsen", - "lockedHint": "Deze discussie is vergrendeld — nieuwe reacties zijn uitgeschakeld.", - "loginToReply": "Log in om te reageren.", - "loginLink": "Inloggen", - "success": { - "replied": "Reactie geplaatst." - }, - "errors": { - "invalid": "Voer een bericht in.", - "notFound": "Die discussie is niet gevonden.", - "locked": "Deze discussie is vergrendeld.", - "ratelimit": "Je plaatst te snel. Wacht even en probeer opnieuw.", - "error": "Er ging iets mis. Probeer het opnieuw." - } - }, - "shop": { - "title": "Winkel", - "subtitle": "Vul je account op en pak exclusieve pakketten, valuta en badges.", - "browsingCategory": "Bladeren door {category} pakketten.", - "all": "Alles", - "allPackages": "Alle pakketten", - "packagesAvailable": "{count, plural, one {# pakket beschikbaar} other {# pakketten beschikbaar}}", - "empty": "Momenteel geen pakketten beschikbaar.", - "buy": "Kopen", - "loginToBuy": "Log in om te kopen", - "creditsHint": "Pakketten betaal je met in-game credits. Waardeer eerst op als je meer credits nodig hebt.", - "topUpLink": "Credits opwaarderen", - "priceCredits": "{credits} credits (≈ {usd})", - "priceCreditsShort": "{credits} cr", - "success": { - "bought": "Pakket gekocht — beloningen zijn aan je account toegevoegd.", - "boughtNamed": "Je hebt \"{name}\" gekocht — beloningen zijn aan je account toegevoegd." - }, - "errors": { - "invalid": "Dit pakket is niet meer beschikbaar.", - "credits": "Je hebt niet genoeg credits voor dit pakket.", - "ratelimit": "Je koopt te snel achter elkaar. Wacht even en probeer het opnieuw.", - "error": "Er ging iets mis. Probeer het opnieuw." - } - }, - "topup": { - "title": "Opwaarderen met PayPal", - "subtitle": "Veilig betalen met PayPal en je credits worden toegevoegd zodra de betaling is verwerkt.", - "cancelled": "Betaling geannuleerd — er is geen bedrag afgeschreven.", - "chooseAmount": "Kies een bedrag", - "notConfiguredPre": "PayPal is nog niet geconfigureerd. Een beheerder moet", - "notConfiguredAnd": "en", - "notConfiguredOptional": "(en optioneel", - "notConfiguredPost": "voor sandbox vs. live).", - "balanceTitle": "Jouw saldo", - "signedInAs": "Ingelogd als {username}", - "credits": "Credits", - "creditsPerUnit": "Credits per 1,00 {currency}", - "rateLine": "Je ontvangt {amount} credits per 1,00 {currency}. Credits verschijnen in-game de volgende keer dat je inlogt." - }, - "marketplace": { - "title": "Marktplaats", - "subtitle": "Blader door meubels en zeldzaamheden die door spelers zijn aangeboden. Aanbiedingen worden in-game geplaatst en live bijgewerkt — ga naar het hotel om een bod te doen.", - "activeOffers": "Actieve aanbiedingen", - "sellers": "Verkopers", - "totalValue": "Totale waarde", - "activeListings": "Actieve aanbiedingen", - "mostRecentFirst": "Meest recent eerst", - "empty": "Er zijn momenteel geen actieve marktplaatsaanbiedingen. Kom later terug.", - "colOffer": "Aanbod", - "colItem": "Item", - "colSeller": "Verkoper", - "colPrice": "Prijs", - "colListed": "Geplaatst", - "itemLabel": "Item #{id}", - "userLabel": "Gebruiker #{id}", - "justNow": "zonet", - "minutesAgo": "{count}m geleden", - "hoursAgo": "{count}u geleden", - "daysAgo": "{count}d geleden" - }, - "rares": { - "title": "Zeldzame waarden", - "subtitle": "Bekijk een overzicht van alle zeldzaamheden in het hotel, gegroepeerd per categorie.", - "empty": "We hebben momenteel geen zeldzaamheden vermeld.", - "rareCount": "{count, plural, one {# zeldzaamheid} other {# zeldzaamheden}}", - "viewRares": "Bekijk zeldzaamheden →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# zeldzaamheid in deze categorie} other {# zeldzaamheden in deze categorie}}", - "allRares": "← Alle zeldzaamheden", - "empty": "Nog geen zeldzaamheden in deze categorie.", - "colRare": "Zeldzaamheid", - "colCredits": "Credits", - "colCurrency": "Valuta", - "creditsValue": "{value} credits", - "duckets": "Duckets", - "diamonds": "Diamanten", - "credits": "Credits" - }, - "redeem": { - "title": "Voucher inwisselen", - "subtitle": "Heb je een vouchercode? Voer deze hieronder in om de beloning aan je account toe te voegen.", - "enterCode": "Voer je code in", - "oncePerAccount": "Elke voucher kan maar één keer per account worden ingewisseld.", - "balanceTitle": "Jouw saldo", - "signedInAs": "Ingelogd als {username}", - "credits": "Credits", - "instantCredit": "Ingewisselde beloningen worden direct bijgeschreven en verschijnen in-game de volgende keer dat je inlogt." - }, - "help": { - "title": "Helpcentrum", - "subtitle": "Vind handleidingen, onderwerp en de hotelregels — alles wat je nodig hebt om hulp te krijgen.", - "myTickets": "Mijn tickets →", - "topicsTitle": "Onderwerpen", - "topicsSubtitle": "Blader door handleidingen en antwoorden op veelgestelde vragen", - "topicsEmpty": "Nog geen hulp onderwerpen.", - "rulesTitle": "Hotelregels", - "rulesSubtitle": "Lees deze voordat je in het hotel rondhangt", - "rulesEmpty": "Nog geen regels gepubliceerd.", - "categoryEmpty": "Geen regels in deze categorie." - }, - "helpCategory": { - "back": "← Helpcentrum", - "topicSubtitle": "Helpcentrum onderwerp", - "moreTitle": "Meer hulp onderwerpen", - "moreSubtitle": "Ga naar een ander onderwerp" - }, - "helpTickets": { - "title": "Help tickets", - "subtitle": "Dien een ticket in bij het team en volg je openstaande verzoeken.", - "statTotal": "Totaal tickets", - "statOpen": "Open", - "statClosed": "Gesloten", - "newTitle": "Nieuw ticket", - "newSubtitle": "Beschrijf je probleem en het team zal opvolgen", - "subjectPlaceholder": "Onderwerp", - "contentPlaceholder": "Beschrijf je probleem…", - "submit": "Ticket indienen", - "listTitle": "Jouw tickets", - "listSubtitle": "Elk verzoek dat je naar het team hebt gestuurd", - "listEmpty": "Je hebt nog geen tickets.", - "colId": "ID", - "colSubject": "Onderwerp", - "colStatus": "Status", - "colCreated": "Aangemaakt", - "statusOpen": "Open", - "statusClosed": "Gesloten", - "success": { - "created": "Ticket ingediend." - }, - "errors": { - "invalid": "Vul een onderwerp en beschrijving in.", - "moderated": "Dat ticket is geblokkeerd door moderatie.", - "ratelimit": "Je dient te snel in. Wacht even en probeer opnieuw.", - "error": "Er ging iets mis. Probeer het opnieuw." - }, - "banAppealLabel": "This is a ban appeal" - }, - "helpTicketDetail": { - "backToList": "← Jouw tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Gesloten", - "messagesTitle": "Gesprek", - "messagesSubtitle": "{count, plural, one {# bericht} other {# berichten}}", - "you": "Jij", - "userNumber": "Gebruiker #{id}", - "replyTitle": "Reageren", - "replySubtitle": "Stuur een vervolg naar het team", - "replyPlaceholder": "Schrijf je bericht…", - "replySubmit": "Antwoord versturen", - "closeTitle": "Ticket sluiten", - "closeSubtitle": "Markeer dit verzoek als opgelost als je geen hulp meer nodig hebt", - "closeSubmit": "Ticket sluiten", - "closedHint": "Dit ticket is gesloten. Open een nieuw ticket als je meer hulp nodig hebt.", - "success": { - "replied": "Antwoord verstuurd.", - "closed": "Ticket gesloten." - }, - "errors": { - "invalid": "Voer een bericht in.", - "notFound": "Dat ticket is niet gevonden.", - "closedTicket": "Dit ticket is gesloten.", - "moderated": "Dat bericht is geblokkeerd door moderatie.", - "ratelimit": "Je dient te snel in. Wacht even en probeer opnieuw.", - "error": "Er ging iets mis. Probeer het opnieuw." - } - }, - "applyStaff": { - "title": "Solliciteer voor {hotel} team", - "subtitle": "We openen af en toe sollicitaties. Als je een positie ziet die perfect bij je past, aarzel dan niet om te solliciteren.", - "noPositionsTitle": "Geen open posities", - "noPositionsBody": "Er zijn momenteel geen open posities. Kom later terug om te controleren of er nieuwe posities zijn. Bedankt voor je interesse.", - "noDeadline": "Geen deadline ingesteld", - "deadline": "Sollicitatiedeadline: {date}", - "alreadyApplied": "Je hebt al gesolliciteerd voor {rank}", - "aboutYou": "Over jou", - "aboutPlaceholder": "Vertel ons waarom jij een geweldige {rank} zou zijn…", - "applyFor": "Solliciteer voor {rank}", - "success": { - "submitted": "Sollicitatie ingediend — staff bekijkt deze binnenkort." - }, - "errors": { - "empty": "Schrijf minstens 10 tekens over jezelf.", - "invalid": "Ongeldige sollicitatie.", - "duplicate": "Je hebt al gesolliciteerd voor deze positie.", - "ratelimit": "Je dient te snel in. Wacht even en probeer opnieuw.", - "error": "Er ging iets mis. Probeer het opnieuw." - } - }, - "applyTeam": { - "title": "Solliciteer voor het {hotel} team", - "subtitle": "We openen periodiek teamsollicitaties. Als je een team ziet dat bij je past, aarzel dan niet om te solliciteren!", - "noPositionsTitle": "Geen open team posities", - "noPositionsBody": "Er zijn momenteel geen open team posities. Kom later terug om te controleren op nieuwe posities. Bedankt!", - "pending": "Je sollicitatie is in behandeling", - "aboutYou": "Over jou", - "aboutPlaceholder": "Vertel ons waarom jij een geweldige aanwinst zou zijn voor {rank}…", - "applyFor": "Solliciteer voor {rank}", - "success": { - "submitted": "Sollicitatie ingediend — staff bekijkt deze binnenkort." - }, - "errors": { - "empty": "Schrijf minstens 10 tekens over jezelf.", - "invalid": "Ongeldige sollicitatie.", - "duplicate": "Je hebt al gesolliciteerd voor dit team.", - "ratelimit": "Je dient te snel in. Wacht even en probeer opnieuw.", - "error": "Er ging iets mis. Probeer het opnieuw." - } - }, - "radio": { - "title": "Radio", - "subtitle": "Luister naar de hotelradio — live DJ-sets, verzoekjes en shout-outs.", - "nowPlaying": "Nu te beluisteren", - "nothingPlaying": "Er wordt momenteel niets afgespeeld.", - "onAir": "Live: {dj}", - "noDj": "Geen DJ live.", - "audioUnsupported": "Je browser ondersteunt geen audio.", - "streamOffline": "De stream is momenteel offline.", - "exploreTitle": "Ontdek de radio", - "exploreSubtitle": "Programma, shout-outs, verzoekjes en meer", - "linkSchedule": "Programma", - "linkScheduleText": "Onze wekelijkse line-up van DJ's en shows.", - "linkShouts": "Shout-outs", - "linkShoutsText": "Shout-outs en verzoekjes van de community.", - "linkRequests": "Verzoekjes", - "linkRequestsText": "Vraag de DJ om je favoriete nummer te draaien.", - "linkApply": "Solliciteer als DJ", - "linkApplyText": "Word lid van het team en ga de ether in.", - "linkLeaderboard": "Klassement", - "linkLeaderboardText": "Top luisteraars gerangschikt op verdiende punten.", - "todayTitle": "Programma van vandaag", - "todayTitleWithDay": "Programma van vandaag · {day}", - "todaySubtitle": "Wat er vandaag te horen is", - "fullWeek": "Hele week →", - "noShowsToday": "Geen shows gepland voor vandaag.", - "colTime": "Tijd", - "colShow": "Show", - "colDj": "DJ", - "untitledShow": "Naamloze show", - "userNumber": "Gebruiker #{id}" - }, - "radioSchedule": { - "title": "Radioschema", - "subtitle": "Onze wekelijkse line-up van DJ's en shows", - "empty": "Nog geen shows gepland.", - "colDay": "Dag", - "colTime": "Tijd", - "colDj": "DJ", - "colShow": "Show", - "noShows": "Geen shows" - }, - "radioShouts": { - "title": "Radio Shout-outs", - "subtitle": "Shout-outs en verzoekjes van de community", - "postTitle": "Plaats een shout", - "postSubtitle": "Stuur een bericht naar de DJ die live is", - "messageLabel": "Je bericht", - "messagePlaceholder": "Stuur een shout naar de DJ…", - "shoutButton": "Shout", - "loginToPost": "Log in om een shout te plaatsen.", - "latestTitle": "Laatste shouts", - "latestSubtitle": "De meest recente berichten van luisteraars", - "empty": "Nog geen shouts. Wees de eerste!", - "success": { - "posted": "Shout geplaatst." - }, - "errors": { - "invalid": "Schrijf een bericht voordat je shouwt.", - "moderated": "Die shout is geblokkeerd door moderatie.", - "ratelimit": "Je shout te snel. Wacht even en probeer opnieuw.", - "error": "Er ging iets mis. Probeer het opnieuw." - } - }, - "events": { - "title": "Evenementen", - "subtitle": "Aankomende en recente hotelevenementen waaraan je kunt meedoen", - "empty": "Nog geen evenementen.", - "back": "← Evenementen", - "when": "Wanneer", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Afgerond", - "registrations": "Inschrijvingen", - "registered": "{count} ingeschreven", - "spots": "{count} / {max} plaatsen", - "registerTitle": "Inschrijven", - "registerSubtitle": "Reserveer je plek voor dit evenement", - "register": "Inschrijven voor evenement", - "registering": "Bezig met inschrijven…", - "registerSuccess": "Je bent ingeschreven!", - "registerError": "Inschrijven voor dit evenement is mislukt.", - "loginToRegister": "Log in om je in te schrijven voor dit evenement.", - "alreadyRegistered": "Je bent al ingeschreven.", - "eventEnded": "Dit evenement is afgelopen.", - "eventFull": "Dit evenement is vol.", - "cannotRegister": "Inschrijven is niet beschikbaar.", - "prizesTitle": "Prijzen", - "winnersTitle": "Winnaars", - "unknownUser": "Gebruiker #{id}", - "filterStatus": "Status", - "allEvents": "Alle evenementen", - "statusOngoing": "Bezig", - "statusUpcoming": "Binnenkort", - "weekStarting": "Week vanaf (UTC)", - "myRegistrations": "Mijn inschrijvingen", - "apply": "Toepassen", - "reset": "Herstellen", - "timeZoneHint": "Tijden worden in je lokale tijdzone getoond. Het filter van zeven dagen gebruikt UTC-datums.", - "loginForRegistrations": "Log in om je inschrijvingen te bekijken.", - "loadError": "Evenementen konden niet worden geladen. Probeer het opnieuw.", - "youRegistered": "Je bent ingeschreven", - "pagination": "Evenementpagina’s", - "previous": "Vorige", - "next": "Volgende", - "pageSummary": "Pagina {page} van {pages} · {total} evenementen", - "weeklyView": "Weekoverzicht", - "previousWeek": "Vorige week", - "nextWeek": "Volgende week" - }, - "polls": { - "title": "Peilingen", - "subtitle": "Deel je mening in community-peilingen", - "empty": "Nog geen peilingen.", - "back": "← Peilingen", - "statusActive": "Open", - "statusClosed": "Gesloten", - "questionsCount": "{count} vragen", - "ends": "Eindigt {date}", - "voteTitle": "Breng je stem uit", - "voteSubtitle": "Beantwoord elke vraag hieronder", - "submitVote": "Stem indienen", - "voting": "Bezig met indienen…", - "voteSuccess": "Bedankt voor je stem!", - "voteError": "Je stem kon niet worden ingediend.", - "loginToVote": "Log in om te stemmen in deze peiling.", - "alreadyVoted": "Je hebt al gestemd.", - "pollClosed": "Deze peiling is gesloten.", - "cannotVote": "Stemmen is niet beschikbaar.", - "textPlaceholder": "Jouw antwoord…", - "resultsTitle": "Resultaten", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} stemmen in totaal", - "textResponses": "{count} vrije antwoorden" - }, - "radioContests": { - "title": "Radiowedstrijden", - "subtitle": "Luister mee en doe mee aan onze laatste live radiowedstrijden", - "empty": "Nog geen wedstrijden.", - "contestLabel": "Wedstrijd #{id}", - "dateUnknown": "Datum onbekend" - }, - "radioGiveaways": { - "title": "Radiogiveaways", - "subtitle": "Luister mee voor een kans om te winnen in onze radiogiveaways", - "empty": "Nog geen giveaways.", - "giveawayLabel": "Giveaway #{id}", - "dateUnknown": "Datum onbekend" - }, - "radioLeaderboard": { - "title": "Radio Luisteraars Klassement", - "subtitle": "Top 50 luisteraars op punten verdiend door te luisteren naar de radio", - "empty": "Nog geen luisteraarspunten om te tonen.", - "colRank": "Rang", - "colAvatar": "Avatar", - "colListener": "Luisteraar", - "colPoints": "Punten" - }, - "radioRequests": { - "formTitle": "Dien een verzoekje in", - "formSubtitle": "Vraag de DJ om jouw favoriete nummer te draaien", - "songLabel": "Nummer", - "songPlaceholder": "Titel van het nummer", - "artistLabel": "Artiest", - "artistPlaceholder": "Naam van de artiest (optioneel)", - "submitButton": "Verzoek indienen", - "loginToRequest": "Log in om een verzoekje in te dienen.", - "latestTitle": "Recente verzoekjes", - "latestSubtitle": "De meest recente aangevraagde nummers", - "empty": "Nog geen verzoekjes ingediend.", - "colSong": "Nummer", - "colArtist": "Artiest", - "colRequester": "Aanvrager", - "colDate": "Datum", - "colStatus": "Status", - "statusPending": "In afwachting", - "statusApproved": "Goedgekeurd", - "statusPlayed": "Gedraaid", - "success": { - "posted": "Verzoek ingediend." - }, - "errors": { - "empty": "Vul een nummer of artiest in.", - "invalid": "Ongeldig verzoek.", - "ratelimit": "Je dient te snel in. Wacht even en probeer opnieuw.", - "error": "Er ging iets mis. Probeer het opnieuw." - } - }, - "radioApply": { - "title": "Solliciteer als Radio DJ", - "subtitle": "Vertel ons over jezelf en waarom je een geweldige aanwinst zou zijn voor de radio", - "latestTitle": "Je laatste sollicitatie", - "statusLabel": "Status:", - "submittedOn": "· ingediend op {date}", - "submitAgain": "Je kunt hieronder opnieuw solliciteren als je gegevens zijn gewijzigd.", - "formTitle": "Sollicitatieformulier", - "formSubtitle": "Alle gemarkeerde velden zijn verplicht", - "realNameLabel": "Echte naam", - "realNamePlaceholder": "Je volledige naam", - "ageLabel": "Leeftijd", - "availabilityLabel": "Beschikbaarheid", - "availabilityPlaceholder": "Welke dagen en tijden kun je uitzenden?", - "musicStyleLabel": "Muziekstijl", - "musicStylePlaceholder": "Bijv. House, Pop, Hip-Hop", - "experienceLabel": "Ervaring", - "optional": "(optioneel)", - "experiencePlaceholder": "Eerdere DJ- of presentatie-ervaring?", - "motivationLabel": "Motivatie", - "motivationPlaceholder": "Waarom wil je lid worden van het radioteam?", - "submitButton": "Sollicitatie indienen", - "success": { - "submitted": "Sollicitatie ingediend — we nemen contact met je op." - }, - "errors": { - "invalid": "Vul alle verplichte velden in.", - "ratelimit": "Je dient te snel in. Wacht even en probeer opnieuw.", - "error": "Er ging iets mis. Probeer het opnieuw." - } - }, - "settings": { - "accountSettings": "Accountinstellingen", - "accountSettingsSubtitle": "Beheer je profiel, beveiliging en gekoppelde accounts", - "publicProfile": "Je openbare profiel", - "noMotto": "Geen motto", - "noEmail": "Geen e-mail op bestand", - "changeMotto": "Motto wijzigen", - "changeMottoSubtitle": "Wordt direct bijgewerkt in-game als je online bent", - "mottoPlaceholder": "Je motto", - "saveMotto": "Motto opslaan", - "securityTitle": "Beveiliging", - "securitySubtitle": "Twee factor authenticatie", - "securityDescription": "Voeg een extra beveiligingslaag toe aan je account.", - "twoFactorLink": "Twee factor authenticatie" - }, - "settings2fa": { - "backToSettings": "← Instellingen", - "title": "Twee factor authenticatie", - "subtitle": "Voeg een extra beveiligingslaag toe met een authenticator-app", - "nowEnabled": "2FA is nu ingeschakeld. 🔒", - "disabledNotice": "2FA is uitgeschakeld.", - "badCode": "Die code was niet geldig — probeer opnieuw.", - "noAppKeyPrefix": "2FA is niet beschikbaar totdat", - "noAppKeyMiddle": "is geconfigureerd (dezelfde Laravel", - "noAppKeySuffix": "als je AtomCMS-installatie, zodat bestaande geheimen leesbaar blijven).", - "isEnabled": "2FA is ingeschakeld", - "onYourAccount": "op je account.", - "disable": "2FA uitschakelen", - "scanOrEnter": "Scan of voer deze sleutel in", - "scanInstructions": "Voeg dit toe aan Google Authenticator / Authy en voer vervolgens de 6-cijferige code in om te bevestigen.", - "manualKey": "Handmatige sleutel:", - "codePlaceholder": "6-cijferige code", - "confirm": "Bevestigen", - "enableIntro": "Voeg een extra beveiligingslaag toe met een authenticator-app.", - "enable": "2FA inschakelen" - }, - "title": "Gekoppelde accounts", - "subtitle": "Koppel een sociaal account zodat je met één klik kunt inloggen", - "connected": "Gekoppeld", - "unavailable": "Niet beschikbaar", - "login": { - "title": "Inloggen", - "subtitle": "Welkom terug — log in om het hotel te betreden.", - "subtitle2fa": "Voer de 6-cijferige code uit je authenticator-app in.", - "usernamePlaceholder": "Gebruikersnaam", - "passwordPlaceholder": "Wachtwoord", - "codePlaceholder": "2FA-code", - "pleaseWait": "Een moment geduld…", - "verify": "Verifiëren", - "signIn": "Inloggen", - "or": "of", - "noAccount": "Nog geen account?", - "createOne": "Account aanmaken", - "forgotPassword": "Wachtwoord vergeten?", - "errorInvalidCredentials": "Ongeldige gebruikersnaam of wachtwoord", - "errorInvalid2fa": "Ongeldige 2FA-code", - "errorUnverified": "Verifieer je e-mail voordat je inlogt.", - "errorCaptcha": "Captcha-verificatie mislukt. Probeer het opnieuw.", - "welcomeBack": "Welkom terug", - "welcomeBackSub": "Log in om verder te gaan naar {hotelName}" - }, - "register": { - "title": "Account aanmaken", - "subtitle": "Word lid van het hotel — het duurt maar even.", - "username": "Gebruikersnaam", - "email": "E-mail", - "password": "Wachtwoord", - "confirmPassword": "Wachtwoord herhalen", - "usernamePlaceholder": "Gebruikersnaam", - "emailPlaceholder": "E-mail", - "passwordPlaceholder": "Wachtwoord (min 6 tekens)", - "confirmPasswordPlaceholder": "Wachtwoord herhalen", - "selectOutfit": "Kies je outfit", - "termsAccept": "Ik ben 18+ en accepteer de {hotel} voorwaarden & regels.", - "createAccount": "Account aanmaken", - "creatingAccount": "Account wordt aangemaakt...", - "redirecting": "Doorgaan naar je account...", - "alreadyHaveAccount": "Al een account? Inloggen!", - "register": "Registreren", - "alreadyHaveAccountPre": "Al een account?", - "alreadyHaveAccountLink": "Inloggen", - "whoIsOnline": "Wie is online", - "usersOnline": "{count} online", - "termsError": "Je moet de voorwaarden & regels accepteren om te registreren.", - "usernameError": "Gebruikersnaam is verplicht.", - "emailError": "Een geldig e-mailadres is verplicht.", - "passwordError": "Wachtwoord moet minimaal 6 tekens bevatten.", - "confirmPasswordError": "Wachtwoorden komen niet overeen.", - "termsRequired": "Je moet de voorwaarden & regels accepteren.", - "ageVerified": "Ik ben 18+ en ga akkoord met de leeftijdsvereiste.", - "usernameRequired": "Gebruikersnaam is verplicht.", - "emailRequired": "E-mail is verplicht.", - "passwordRequired": "Wachtwoord is verplicht.", - "passwordsDontMatch": "Wachtwoorden komen niet overeen." - }, - "forgot": { - "title": "Wachtwoord resetten", - "subtitle": "We sturen je een veilige link om een nieuw wachtwoord in te stellen.", - "sentNotice": "Als dat e-mailadres geregistreerd is, is er een resetlink verzonden. Controleer je inbox.", - "emailPlaceholder": "Je e-mailadres", - "sendResetLink": "Resetlink verzenden", - "backToLogin": "Terug naar inloggen", - "errorCaptcha": "Captcha-verificatie mislukt. Probeer het opnieuw." - }, - "reset": { - "title": "Nieuw wachtwoord instellen", - "subtitle": "Kies een sterk wachtwoord dat je nergens anders gebruikt.", - "passwordPlaceholder": "Nieuw wachtwoord (min 6 tekens)", - "resetPassword": "Wachtwoord resetten", - "backToLogin": "Terug naar inloggen" - }, - "verify": { - "verifiedTitle": "Je bent helemaal klaar", - "verifiedSubtitle": "E-mail geverifieerd", - "verifiedBody": "Je e-mailadres is geverifieerd. Je kunt nu inloggen en spelen.", - "goToLogin": "Ga naar inloggen", - "alreadyTitle": "Al geverifieerd", - "alreadySubtitle": "Niets meer te doen", - "alreadyBody": "Dit e-mailadres is al bevestigd.", - "unavailableTitle": "Probeer het later opnieuw", - "unavailableSubtitle": "Server niet bereikbaar", - "unavailableBody": "We konden de server niet bereiken om je e-mail te verifiëren. Probeer de link later opnieuw.", - "invalidTitle": "E-mailverificatie", - "invalidSubtitle": "Ongeldige of verlopen link", - "invalidBody": "Deze verificatielink is niet geldig. Zorg ervoor dat je de volledige link uit je e-mail hebt geopend of vraag een nieuwe aan.", - "backToLogin": "Terug naar inloggen" - }, - "banned": { - "title": "Je bent verbannen", - "subtitle": "Account geschorst", - "body": "Je account is geschorst van het hotel.", - "reasonLabel": "Reden:", - "permanent": "Deze ban is permanent.", - "expires": "Verloopt op {date}.", - "contactStaff": "Als je denkt dat dit een fout is, neem dan contact op met het team." - }, - "maintenance": { - "title": "{hotel} is in onderhoud", - "subtitle": "We zijn zo terug", - "staffCanLogIn": "Team kan nog steeds inloggen." - }, - "admin": { - "nav": { - "overview": "Overzicht", - "dashboard": "Dashboard", - "content": "Inhoud", - "articles": "Artikelen", - "tags": "Tags", - "navigator": "Navigator", - "helpCenter": "Helpcentrum", - "advertisements": "Advertenties", - "writeableBoxes": "Bewerkbare boxes", - "photos": "Foto's", - "tickets": "Supportbalie", - "helpTickets": "Helpcentrum-tickets", - "events": "Evenementen", - "polls": "Polls", - "guilds": "Gildes", - "banners": "Banners", - "prefixes": "Voorvoegsels", - "usersAndAccess": "Gebruikers & toegang", - "users": "Gebruikers", - "bans": "Verbanningen", - "ipManagement": "IP-beheer", - "vpn": "VPN", - "applications": "Sollicitaties", - "teams": "Teams", - "permissions": "Permissies", - "onlineUsers": "Online gebruikers", - "moderation": "Moderatie", - "economy": "Economie", - "catalog": "Catalogus", - "catalogMaintenance": "Catalogus-onderhoud", - "shop": "Winkel", - "marketplace": "Marktplaats", - "transactions": "Transacties", - "vouchers": "Vouchers", - "subscriptions": "Abonnementen", - "rareValues": "Zeldzame waarden", - "badges": "Badges", - "achievements": "Prestaties", - "calendar": "Kalender", - "radio": "Radio", - "radioHistory": "Radio geschiedenis", - "radioBanners": "Banners", - "radioEmbed": "Insluiten", - "radioApiKeys": "API-sleutels", - "radioModeration": "Moderatie", - "radioSettings": "Instellingen", - "radioMonitoring": "Bewaking", - "radioPoints": "Punten", - "radioRanks": "Rangen", - "radioAutodj": "Auto DJ", - "system": "Systeem", - "commandocentrum": "Commandocentrum", - "emulator": "Emulator", - "alerts": "Meldingen", - "logs": "Logboeken", - "auditLog": "Wijzigingslogboek", - "analytics": "Statistieken", - "devops": "DevOps", - "wordFilter": "Woordfilter", - "maintenance": "Onderhoud", - "rooms": "Kamers", - "emailTemplates": "E-mailsjablonen", - "theme": "Thema", - "media": "Media", - "favicon": "Favicon", - "sounds": "Geluiden", - "translations": "Vertalingen", - "import": "Importeren", - "settings": "Instellingen", - "backToSite": "Terug naar site", - "expandAll": "Alles openen", - "collapseAll": "Alles sluiten", - "searchMenu": "Zoeken in menu…", - "clearMenuSearch": "Menuzoekopdracht wissen", - "noMenuResults": "Geen pagina’s gevonden.", - "housekeeping": "Permissie-archief", - "hotelManagementPanel": "Hotelbeheerpaneel", - "rankLabel": "Rang {rank}", - "hubNewsMedia": "Nieuws en media", - "hubSiteContent": "Website-inhoud", - "hubEngagement": "Communityactiviteiten", - "hubUsers": "Gebruikers", - "hubAccess": "Toegang en beveiliging", - "hubCatalog": "Catalogus en zeldzame meubels", - "hubShop": "Winkel en betalingen", - "hubTools": "Hulpmiddelen", - "hubObservability": "Bewaking en diagnostiek", - "community": "Community", - "monitoring": "Bewaking", - "staffAccess": "Rangen & rechten", - "multiAccounts": "Gekoppelde accounts", - "chatLog": "Chatlog", - "commandLog": "Commandolog", - "tradeLog": "Tradelog", - "tools": "Hulpmiddelen", - "itemsBase": "Meubeldefinities", - "adminMenu": "Adminmenu", - "studio": "Studio", - "peopleSupport": "Gebruikers en ondersteuning", - "catalogFurniture": "Catalogus en meubels", - "communityContent": "Community en inhoud", - "staffPermissions": "Medewerkers en toegang", - "cmsErrors": "CMS-fouten", - "themeBuilder": "Thema-editor", - "openSidebar": "Menu openen", - "closeSidebar": "Menu sluiten", - "search": { - "placeholder": "Zoeken…", - "noResults": "Geen resultaten gevonden", - "users": "Gebruikers", - "articles": "Artikelen", - "rooms": "Kamers", - "guilds": "Groepen", - "shop": "Winkel", - "hint": "Typ om te zoeken naar gebruikers, artikelen, kamers, groepen en winkelartikelen." - }, - "operationsCenter": "Operatiecentrum" - }, - "dashboard": { - "title": "Dashboard", - "subtitle": "Hoteloverzicht & live status", - "playersOnline": "Spelers online", - "articles": "Artikelen", - "activeBans": "Actieve bans", - "database": "Database", - "databaseConnected": "Verbonden", - "databaseDown": "Storing", - "usersByRank": "Gebruikers per rang", - "noAccountsToBreakDown": "Nog geen accounts om uit te splitsen", - "rankLabel": "Rang {rank}", - "rankWithCount": "Rang {rank}: {count} accounts", - "recentStaffActivity": "Recente teamactiviteit", - "viewAll": "Alles bekijken", - "noStaffActivityLogged": "Nog geen teamactiviteit geregistreerd" - }, - "articles": { - "title": "Artikelen", - "subtitle": "Nieuwsartikelen — 50 meest recente", - "newArticle": "+ Nieuw artikel", - "edit": "Bewerken", - "delete": "Verwijderen", - "noArticles": "Nog geen artikelen", - "confirmDelete": "Weet je zeker dat je \"{title}\" wilt verwijderen?", - "colTitle": "Titel", - "colSlug": "Slug", - "colAuthor": "Auteur", - "colCreated": "Aangemaakt", - "colActions": "Acties", - "form": { - "title": "Titel", - "titlePlaceholder": "Artikel titel", - "slug": "Slug", - "slugPlaceholder": "artikel-url-slug", - "category": "Categorie", - "categoryPlaceholder": "Selecteer een categorie", - "body": "Inhoud", - "bodyPlaceholder": "Schrijf je artikel…", - "image": "Afbeelding", - "imagePlaceholder": "https://example.com/afbeelding.png", - "thumbnail": "Miniatuur", - "thumbnailPlaceholder": "https://example.com/miniatuur.png", - "published": "Gepubliceerd", - "featured": "Uitgelicht", - "save": "Artikel opslaan", - "saving": "Opslaan…", - "deleteArticle": "Artikel verwijderen", - "deleteConfirm": "Deze actie kan niet ongedaan worden gemaakt. Het artikel wordt permanent verwijderd.", - "cancel": "Annuleren", - "titleRequired": "Voer een titel in.", - "titleTooLong": "De titel mag maximaal 255 tekens bevatten.", - "summaryTooLong": "De samenvatting mag maximaal 255 tekens bevatten.", - "imageTooLong": "De afbeeldings-URL mag maximaal 255 tekens bevatten.", - "invalidStatus": "Selecteer een geldige publicatiestatus.", - "publishDateRequired": "Kies een geldige publicatiedatum.", - "saveFailedReference": "Het artikel kon niet worden opgeslagen. Je inhoud blijft bewaard. Foutreferentie: {reference}", - "articleNotFound": "Artikel niet gevonden.", - "summary": "Samenvatting", - "imageNotFound": "Afbeelding niet gevonden. Voer een geldige URL in of blader door media.", - "imagePreview": "Voorbeeld van artikelafbeelding", - "previewTitle": "Artikelvoorbeeld", - "previewDescription": "Voorbeeld van de inhoud. De gepubliceerde pagina gebruikt het sitethema.", - "previewFrame": "Voorbeeld van artikelinhoud", - "autosaveLoading": "Opgeslagen concepten laden…", - "autosaveReady": "Automatisch opslaan van je privéconcept is actief.", - "autosaveSaving": "Privéconcept opslaan…", - "autosaveSaved": "Privéconcept opgeslagen. Klik op Opslaan om publicatiewijzigingen toe te passen.", - "autosaveFailed": "Conceptherstel is niet beschikbaar. Houd deze pagina open en gebruik Opslaan; herlaad de pagina om herstel opnieuw te proberen.", - "autosaveConflict": "Een ander tabblad heeft dit concept gewijzigd. Automatisch opslaan is gepauzeerd: herlaad de pagina om het nieuwere concept te bekijken voordat je verdergaat.", - "recoveryFound": "Er is een onvoltooid privéconcept beschikbaar. Herstel of verwijder het om automatisch opslaan te activeren.", - "recoverDraft": "Concept herstellen", - "discardDraft": "Opgeslagen concept verwijderen", - "confirmRecovery": "De huidige inhoud van de editor vervangen door dit herstelde concept? De wijzigingen worden pas gepubliceerd als je opslaat.", - "confirmDiscardDraft": "Je opgeslagen herstelconcept definitief verwijderen? De huidige inhoud van de editor blijft behouden.", - "revisionHistory": "Vorige opgeslagen versies (laatste 20)", - "restoreRevision": "Herstellen in editor", - "confirmRevision": "De huidige inhoud vervangen door deze vorige versie als concept? Controleer de inhoud en kies een publicatiestatus voordat je opslaat.", - "editConflict": "Dit artikel is gewijzigd sinds je het hebt geopend. Je wijzigingen zijn niet toegepast. Kopieer je werk, herlaad het artikel en voeg de wijzigingen samen voordat je opnieuw opslaat.", - "retryRecovery": "Herstelgegevens opnieuw laden zonder dit formulier te wijzigen", - "statusDraft": "Concept", - "statusScheduled": "Ingepland", - "statusPublished": "Gepubliceerd", - "publishAt": "Publiceren op", - "publishedAt": "Gepubliceerd op", - "imageInvalid": "Gebruik een lokaal pad of een HTTP/HTTPS-afbeeldingsadres zonder inloggegevens.", - "linksInvalid": "Controleer de links: alleen lokale, HTTP/HTTPS- en e-maillinks zijn toegestaan." - }, - "listActionError": "De actie voor dit artikel kon niet worden voltooid.", - "listStatus": "Publicatiestatus", - "listStatus_all": "Alle artikelen", - "listStatus_draft": "Concept", - "listStatus_published": "Gepubliceerd", - "listStatus_scheduled": "Gepland", - "listSearch": "Zoeken in titel of samenvatting", - "listApply": "Toepassen", - "listLoading": "Laden…", - "listReset": "Filters wissen", - "listUnavailable": "Artikelen zijn tijdelijk niet beschikbaar. Probeer het opnieuw.", - "listRetry": "Opnieuw proberen", - "listTotal": "{count, plural, one {# gevonden artikel} other {# gevonden artikelen}}", - "listNoMatches": "Geen artikelen gevonden met deze filters. Pas de zoekopdracht aan of wis de filters.", - "listPagination": "Artikelpagina’s", - "listPrevious": "Vorige", - "listNext": "Volgende", - "listPage": "Pagina {page} van {total}", - "articlesShown": "Getoonde artikelen", - "latest": "Laatste artikel", - "mostRecentPost": "Meest recente publicatie", - "recentArticles": "Recente artikelen" - }, - "events": { - "newEvent": "+ Nieuw evenement", - "createTitle": "Evenement aanmaken", - "createSubtitle": "Plan een nieuw hotel-evenement", - "searchPlaceholder": "Zoek evenementen…", - "colId": "ID", - "colTitle": "Titel", - "colType": "Type", - "colStarts": "Start", - "colStatus": "Status", - "colActions": "Acties", - "statusPublished": "Gepubliceerd", - "statusDraft": "Concept", - "statusCancelled": "Geannuleerd", - "statusCompleted": "Voltooid", - "statRegistrations": "Inschrijvingen", - "statPrizes": "Prijzen", - "statWinners": "Winnaars", - "statTime": "Tijd", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Aankomend", - "timePast": "Afgelopen", - "endsAt": "Eindigt: {date}", - "userFallback": "Gebruiker #{id}", - "registrationsTitle": "Inschrijvingen ({count})", - "noRegistrations": "Nog geen inschrijvingen.", - "noPrizes": "Nog geen prijzen geconfigureerd.", - "noWinners": "Nog geen winnaars.", - "addPrize": "Prijs toevoegen", - "addWinner": "Winnaar toevoegen", - "formEditTitle": "Evenement bewerken", - "formDetailsTitle": "Evenementdetails", - "formTitle": "Titel", - "formEventType": "Evenementtype", - "formSelectType": "Selecteer type", - "formDescription": "Beschrijving", - "formStartsAt": "Start om", - "formEndsAt": "Eindigt om", - "formSelectStart": "Selecteer startdatum", - "formSelectEnd": "Selecteer einddatum", - "formMaxPlayers": "Max. spelers", - "formUnlimited": "Onbeperkt", - "formRoomId": "Kamer-ID", - "formOptional": "Optioneel", - "formImageUrl": "Afbeeldings-URL", - "formSaving": "Opslaan…", - "formUpdate": "Evenement bijwerken", - "formCreate": "Evenement aanmaken", - "toastUpdated": "Evenement bijgewerkt!", - "toastCreated": "Evenement aangemaakt!" - }, - "polls": { - "newPoll": "+ Nieuwe poll", - "createTitle": "Poll aanmaken", - "createSubtitle": "Maak een nieuwe community-poll of enquête", - "searchPlaceholder": "Zoek polls…", - "colId": "ID", - "colTitle": "Titel", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Aangemaakt", - "colActions": "Acties", - "statusActive": "Actief", - "statusDraft": "Concept", - "statusClosed": "Gesloten", - "typeMultiple": "Meerkeuze", - "typeSingle": "Enkele keuze", - "statVoters": "Totaal stemmers", - "statQuestions": "Vragen", - "statVotes": "Totaal stemmen", - "questionsTitle": "Vragen ({count})", - "addQuestion": "Vraag toevoegen", - "noQuestions": "Nog geen vragen. Voeg hierboven je eerste vraag toe.", - "resultsTitle": "Resultaten", - "formEditTitle": "Poll bewerken", - "formDetailsTitle": "Polldetails", - "formTitle": "Titel", - "formDescription": "Beschrijving", - "formStartsAt": "Start om", - "formEndsAt": "Eindigt om", - "formSelectStart": "Selecteer startdatum", - "formSelectEnd": "Selecteer einddatum", - "formShowResults": "Toon resultaten aan stemmers", - "formAllowMultiple": "Meerdere antwoorden toestaan", - "formSaving": "Opslaan…", - "formUpdate": "Poll bijwerken", - "formCreate": "Poll aanmaken", - "toastUpdated": "Poll bijgewerkt!", - "toastCreated": "Poll aangemaakt!" - }, - "multiAccounts": { - "minAccounts": "Min. accounts per cluster", - "resultLimit": "Resultaatlimiet", - "refresh": "Vernieuwen", - "noClusters": "Geen clusters gevonden met de huidige drempels." - }, - "devops": { - "noEmulatorErrors": "Geen emulatorfouten gevonden", - "noRecentErrors": "Geen recente fouten" - }, - "tags": { - "title": "Tags", - "subtitle": "Artikel tags / categorieën", - "addTag": "Tag toevoegen", - "name": "Naam", - "namePlaceholder": "Tag naam", - "backgroundColour": "Achtergrondkleur", - "createTag": "Tag aanmaken", - "editTag": "Tag bewerken", - "updateTag": "Tag bijwerken", - "deleteTag": "Tag verwijderen", - "confirmDelete": "\"{name}\" verwijderen?", - "noTags": "Nog geen tags", - "colId": "ID", - "colTag": "Tag", - "colColour": "Kleur", - "colUsedBy": "Gebruikt door", - "colCreated": "Aangemaakt", - "colActions": "Acties" - }, - "navigation": { - "title": "Navigator", - "flatCategories": "Platte categorieën", - "publicRooms": "Openbare kamers", - "addCategory": "Categorie toevoegen", - "editCategory": "Categorie bewerken", - "deleteCategory": "Categorie verwijderen", - "categoryName": "Categorienaam", - "categoryNamePlaceholder": "Bijv. Chill & Chat", - "categoryOrder": "Volgorde", - "roomName": "Kamer naam", - "roomNamePlaceholder": "Bijv. Welkomst Lounge", - "roomId": "Kamer ID", - "roomIdPlaceholder": "Numeriek kamer ID", - "save": "Opslaan", - "cancel": "Annuleren", - "noCategories": "Nog geen categorieën", - "noPublicRooms": "Nog geen openbare kamers", - "colId": "ID", - "colName": "Naam", - "colOrder": "Volgorde", - "colRooms": "Kamers", - "colActions": "Acties" - }, - "helpCenter": { - "title": "Helpcentrum", - "subtitle": "Ondersteuningsitems en FAQ-beheer", - "entries": "Items", - "newEntry": "+ Nieuw item", - "edit": "Bewerken", - "delete": "Verwijderen", - "noEntries": "Nog geen items", - "confirmDelete": "\"{title}\" verwijderen?", - "colId": "ID", - "colTitle": "Titel", - "colCategory": "Categorie", - "colCreated": "Aangemaakt", - "colActions": "Acties", - "form": { - "title": "Titel", - "titlePlaceholder": "Item titel", - "category": "Categorie", - "categoryPlaceholder": "Selecteer categorie", - "body": "Inhoud", - "bodyPlaceholder": "Schrijf het antwoord…", - "save": "Item opslaan", - "saving": "Opslaan…", - "deleteEntry": "Item verwijderen", - "cancel": "Annuleren" - } - }, - "ads": { - "title": "Advertenties", - "subtitle": "Beheer hoteladvertenties en promotiebanners", - "newAd": "+ Nieuwe advertentie", - "edit": "Bewerken", - "delete": "Verwijderen", - "noAds": "Nog geen advertenties", - "confirmDelete": "Deze advertentie verwijderen?", - "deleteSuccess": "Advertentie verwijderd!", - "deleteError": "Advertentie verwijderen mislukt.", - "adsCount": "Totaal advertenties", - "latest": "Laatste", - "mostRecentAd": "Meest recente advertentie", - "allAds": "Alle advertenties", - "colPreview": "Voorbeeld", - "colId": "ID", - "colName": "Naam", - "colImage": "Afbeelding", - "colUrl": "URL", - "colViews": "Weergaven", - "colStatus": "Status", - "colCreated": "Aangemaakt", - "colActions": "Acties", - "form": { - "name": "Naam", - "namePlaceholder": "Advertentienaam", - "image": "Afbeelding URL", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Doel URL", - "urlPlaceholder": "https://example.com", - "enabled": "Ingeschakeld", - "save": "Advertentie opslaan", - "saving": "Opslaan…", - "deleteAd": "Advertentie verwijderen", - "cancel": "Annuleren" - } - }, - "writeableBoxes": { - "title": "Beschrijfbare Boxes", - "subtitle": "Inhoudspanelen weergegeven in het hotel en CMS", - "newBox": "Nieuwe box", - "edit": "Bewerken", - "delete": "Verwijderen", - "noBoxes": "Nog geen beschrijfbare boxes", - "confirmDelete": "Deze box verwijderen?", - "colId": "ID", - "colName": "Naam", - "colLocation": "Locatie", - "colUpdated": "Bijgewerkt", - "colActions": "Acties", - "form": { - "name": "Naam", - "namePlaceholder": "Box naam", - "location": "Locatie", - "locationPlaceholder": "Bijv. homepage, sidebar", - "content": "Inhoud", - "contentPlaceholder": "Schrijf de box inhoud…", - "enabled": "Ingeschakeld", - "save": "Box opslaan", - "saving": "Opslaan…", - "deleteBox": "Box verwijderen", - "cancel": "Annuleren" - } - }, - "photos": { - "title": "Fotomoderatie", - "subtitle": "Recente in-game camerafoto's", - "delete": "Verwijderen", - "approve": "Goedkeuren", - "noPhotos": "Geen foto's om te modereren", - "confirmDelete": "Deze foto permanent verwijderen?", - "colId": "ID", - "colPreview": "Voorbeeld", - "colUser": "Gebruiker", - "colRoom": "Kamer", - "colTimestamp": "Tijdstempel", - "colActions": "Acties", - "photoAlt": "Gebruikersfoto #{id}", - "byUser": "door {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Verwijderen verwijdert de databaserij en verwijdert een bijbehorend bestand onder /public naar beste vermogen. Externe CDN-URL's worden niet gewist." - }, - "users": { - "title": "Gebruikers", - "subtitle": "Bladeren, zoeken en beheren van hotelaccounts", - "search": "Zoeken", - "searchPlaceholder": "Zoeken op gebruikersnaam, e-mail of ID…", - "searchResults": "{count, plural, one {# resultaat} other {# resultaten}} voor \"{query}\"", - "noResults": "Geen gebruikers gevonden", - "colId": "ID", - "colUsername": "Gebruikersnaam", - "colEmail": "E-mail", - "colRank": "Rang", - "colOnline": "Online", - "colRegistered": "Geregistreerd", - "colLastOnline": "Laatst online", - "colActions": "Acties", - "yes": "Ja", - "no": "Nee", - "edit": "Bewerken", - "setRank": "Rang instellen", - "disconnect": "Verbinding verbreken", - "alert": "Melding", - "ban": "Verban", - "detail": { - "title": "Gebruiker: {username}", - "subtitle": "Accountdetails en beheer", - "overview": "Overzicht", - "actions": "Acties", - "username": "Gebruikersnaam", - "email": "E-mail", - "motto": "Motto", - "rank": "Rang", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamanten", - "online": "Online", - "registered": "Geregistreerd", - "lastOnline": "Laatst online", - "ipAddress": "IP-adres", - "machineId": "Apparaat-ID", - "sendAlert": "Melding sturen", - "sendMessage": "Bericht sturen", - "disconnectUser": "Verbinding verbreken", - "banUser": "Gebruiker verbanne", - "resetPassword": "Wachtwoord resetten", - "deleteUser": "Gebruiker verwijderen", - "confirmDelete": "Weet je zeker dat je {username} wilt verwijderen? Dit kan niet ongedaan worden gemaakt.", - "tabInfo": "Accountgegevens", - "tabBadges": "Badges ({count})", - "tabRooms": "Kamers ({count})", - "tabSanctions": "Sancties ({count})", - "tabActivity": "Activiteit" - }, - "editForm": { - "title": "Gebruiker bewerken: {username}", - "subtitle": "Accountgegevens wijzigen", - "username": "Gebruikersnaam", - "usernamePlaceholder": "Gebruikersnaam", - "email": "E-mail", - "emailPlaceholder": "gebruiker@example.com", - "motto": "Motto", - "mottoPlaceholder": "Gebruikersmotto", - "rank": "Rang", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamanten", - "save": "Wijzigingen opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren" - }, - "presentation": { - "users": "Gebruikers", - "edit": "Bewerken", - "view": "Bekijken", - "rank": "Rang {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Verbannen", - "credits": "credits", - "diamonds": "diamanten", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Kamers", - "messages": "Berichten", - "trades": "Ruiltransacties", - "accountDetails": "Accountgegevens", - "registered": "Geregistreerd", - "lastLogin": "Laatste login", - "ipRegister": "Registratie-IP", - "ipCurrent": "Huidig IP", - "machineId": "Apparaat-ID", - "email": "E-mail", - "gender": "Geslacht", - "never": "Nooit", - "findIp": "Gebruikers met dit IP zoeken", - "enabled": "Ingeschakeld", - "disabled": "Uitgeschakeld", - "unavailable": "Niet beschikbaar", - "noBadges": "Geen badges toegewezen" - }, - "create": { - "newUser": "Nieuwe gebruiker", - "title": "Gebruiker aanmaken", - "description": "Maakt het account direct aan met een standaardavatar en 5.000 credits, pixels, duckets en diamanten.", - "username": "Gebruikersnaam", - "email": "E-mail", - "password": "Wachtwoord", - "rank": "Rang", - "rankOption": "Rang {rank}", - "motto": "Motto (optioneel)", - "usernamePlaceholder": "NieuweHabbo", - "passwordPlaceholder": "Minimaal 6 tekens", - "mottoPlaceholder": "Ik ben hier nieuw!", - "generate": "Genereren", - "passwordGenerated": "Wachtwoord gegenereerd in het wachtwoordveld.", - "required": "Gebruikersnaam, e-mail en wachtwoord zijn verplicht.", - "invalidUsername": "Gebruik 3–20 tekens: letters, cijfers, _ of -.", - "passwordLength": "Het wachtwoord moet minimaal 6 tekens bevatten.", - "created": "Gebruiker {username} aangemaakt." - }, - "overview": { - "title": "Overzicht", - "hint": "Maximaal 5 recente registraties per bron. Alleen onderdelen waarvoor je toegang hebt worden getoond.", - "restricted": "Je hebt geen toestemming om operationele gegevens te bekijken.", - "sanctions": "Recente bans", - "mute": "Actieve mute", - "tickets": "Supporttickets", - "help": "Helpcentrumverzoeken", - "reports": "Meldingen in het spel", - "transactions": "Betalingen", - "purchases": "Catalogusaankopen", - "activity": "Geregistreerde stafacties", - "openModule": "Beheer openen", - "purchaseHint": "Geregistreerde aantallen en valutakosten.", - "purchaseDetail": "Aantal: {amount} · Credits: {credits} · Punten: {points} (type {type})", - "activityHint": "Staflogboekregels over dit account. Dit is geen volledige geschiedenis van de activiteit van de speler.", - "muteUntil": "Gedempt tot {date}", - "error": "Deze bron kon niet worden geladen. Vernieuw de pagina om het opnieuw te proberen.", - "empty": "Geen registraties gevonden.", - "status": { - "active": "Actief", - "expired": "Verlopen", - "open": "Open", - "closed": "Gesloten", - "reported": "Gemelde gebruiker", - "reporter": "Melder" - } - } - }, - "bans": { - "title": "Bans", - "subtitle": "Beheer account-, IP- en machine-bans", - "newBan": "Nieuwe ban", - "edit": "Bewerken", - "delete": "Verwijderen", - "noBans": "Nog geen bans", - "confirmDelete": "Deze ban verwijderen?", - "colId": "ID", - "colValue": "Waarde", - "colType": "Type", - "colReason": "Reden", - "colBannedBy": "Verbannen door", - "colExpires": "Verloopt", - "colCreated": "Aangemaakt", - "colActions": "Acties", - "form": { - "value": "Waarde", - "valuePlaceholder": "Gebruikersnaam, IP of machine ID", - "type": "Type", - "typeUser": "Gebruiker", - "typeIp": "IP", - "typeMachine": "Machine", - "reason": "Reden", - "reasonPlaceholder": "Ban reden", - "expiresAt": "Verloopt op", - "permanent": "Permanent", - "save": "Ban opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren" - } - }, - "ip": { - "title": "IP-beheer", - "subtitle": "Beheer IP whitelist en blacklist", - "whitelist": "Whitelist", - "blacklist": "Blacklist", - "addIp": "IP toevoegen", - "ipAddress": "IP-adres", - "ipAddressPlaceholder": "Bijv. 127.0.0.1", - "reason": "Reden", - "reasonPlaceholder": "Reden voor plaatsing", - "add": "Toevoegen", - "remove": "Verwijderen", - "confirmRemove": "Dit IP verwijderen van de {list}?", - "noWhitelistedIps": "Geen IP's op whitelist", - "noBlacklistedIps": "Geen IP's op blacklist", - "colIp": "IP", - "colReason": "Reden", - "colAdded": "Toegevoegd", - "colActions": "Acties" - }, - "vpn": { - "title": "VPN / Proxy Detectie", - "subtitle": "Configureer VPN- en proxy-detectie instellingen", - "enabled": "Ingeschakeld", - "apiKey": "API-sleutel", - "apiKeyPlaceholder": "Je VPN detectie API-sleutel", - "apiKeyHint": "Leeg laten om uit te schakelen", - "blockOnDetect": "Blokkeren bij detectie", - "blockOnDetectHint": "Automatisch gebruikers blokkeren die achter een VPN of proxy worden gedetecteerd", - "save": "Instellingen opslaan", - "saving": "Opslaan…", - "settingsSaved": "VPN-instellingen succesvol opgeslagen" - }, - "applications": { - "title": "Teamsollicitaties", - "subtitle": "Openstaande en beoordeelde sollicitaties", - "pending": "In afwachting", - "approved": "Goedgekeurd", - "rejected": "Afgewezen", - "noApplications": "Nog geen sollicitaties", - "colId": "ID", - "colApplicant": "Sollicitant", - "colPosition": "Positie", - "colStatus": "Status", - "colSubmitted": "Ingediend", - "colActions": "Acties", - "review": "Beoordelen", - "approve": "Goedkeuren", - "reject": "Afwijzen", - "confirmApprove": "{username} goedkeuren voor {position}?", - "confirmReject": "{username}'s sollicitatie voor {position} afwijzen?", - "detail": { - "title": "Sollicitatie van {username}", - "subtitle": "Voor {position}", - "about": "Over de sollicitant", - "message": "Sollicitatiebericht", - "status": "Status", - "submitted": "Ingediend", - "noMessage": "Geen bericht opgegeven" - } - }, - "teams": { - "title": "Teams", - "subtitle": "Definieer team rangnamen en beschrijvingen", - "addRank": "Rang toevoegen", - "editRank": "Rang bewerken", - "deleteRank": "Rang verwijderen", - "noTeams": "Nog geen rangdefinities", - "confirmDelete": "Rang {id} definitie verwijderen?", - "colId": "ID", - "colRank": "Rang", - "colName": "Naam", - "colBadge": "Badge", - "colColour": "Kleur", - "colActions": "Acties", - "form": { - "rankId": "Rang ID", - "rankIdPlaceholder": "Numeriek rang ID", - "name": "Naam", - "namePlaceholder": "Bijv. Administrator", - "badge": "Badge code", - "badgePlaceholder": "Bijv. ADM001", - "colour": "Kleur", - "colourPlaceholder": "Bijv. #ff0000", - "save": "Teamdefinitie opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren" - } - }, - "permissions": { - "title": "Permissies", - "subtitle": "Dit is de live toegangscontrole voor admin- en mod-panelen", - "addPermission": "Permissie toevoegen", - "editPermission": "Permissie bewerken", - "deletePermission": "Permissie verwijderen", - "noPermissions": "Nog geen permissies geconfigureerd", - "confirmDelete": "Deze permissie verwijderen?", - "colId": "ID", - "colRank": "Rang", - "colPermission": "Permissie", - "colCreated": "Aangemaakt", - "colActions": "Acties", - "form": { - "rankId": "Rang ID", - "rankIdPlaceholder": "Minimale vereiste rang", - "permission": "Permissiesleutel", - "permissionPlaceholder": "Bijv. admin.articles.manage", - "save": "Permissie opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren" - } - }, - "catalog": { - "title": "Catalogus", - "subtitle": "Bladeren en beheren van cataloguspagina's en items", - "pages": "Pagina's", - "items": "Items", - "addPage": "Pagina toevoegen", - "editPage": "Pagina bewerken", - "deletePage": "Pagina verwijderen", - "addItem": "Item toevoegen", - "editItem": "Item bewerken", - "deleteItem": "Item verwijderen", - "noPages": "Nog geen cataloguspagina's", - "noItems": "Geen items op deze pagina", - "confirmDeletePage": "Cataloguspagina \"{name}\" verwijderen?", - "confirmDeleteItem": "Dit item verwijderen?", - "colId": "ID", - "colName": "Naam", - "colIcon": "Icoon", - "colOrder": "Volgorde", - "colItems": "Items", - "colEnabled": "Ingeschakeld", - "colActions": "Acties", - "colItemId": "Item ID", - "colItemName": "Item naam", - "colCostCredits": "Kosten (credits)", - "colCostPoints": "Kosten (punten)", - "colLimited": "Gelimiteerd", - "pageForm": { - "name": "Naam", - "namePlaceholder": "Pagina naam", - "icon": "Icoon ID", - "iconPlaceholder": "Numeriek icoon ID", - "order": "Volgorde", - "enabled": "Ingeschakeld", - "parent": "Bovenliggende pagina", - "parentNone": "Geen (hoofd)", - "save": "Pagina opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren" - }, - "itemForm": { - "itemId": "Item ID", - "itemName": "Item naam", - "costCredits": "Kosten in credits", - "costDuckets": "Kosten in duckets", - "costDiamonds": "Kosten in diamanten", - "limitedStack": "Gelimiteerde stackgrootte", - "limitedSold": "Gelimiteerd verkocht", - "save": "Item opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren" - }, - "workspace": { - "diagnostics": "Diagnostiek", - "editor": "Editor", - "normal": "Catalogus", - "tree": "Boom", - "table": "Tabel", - "manager": "Catalogusbeheer", - "backToCategories": "Terug naar categorieën", - "retryPage": "Pagina opnieuw laden", - "retryItems": "Aanbiedingen opnieuw laden", - "hotel": "Hotel", - "sent": "Updateverzoek verzonden", - "sendFailed": "Updateverzoek mislukt", - "unknown": "Nog geen status", - "disabled": "Niet ingesteld", - "exportFailed": "Export mislukt", - "queued": "Export in wachtrij", - "exported": "Export voltooid", - "retryHotel": "Hotelupdate opnieuw proberen", - "retryStatus": "Status niet beschikbaar — opnieuw proberen", - "saved": "Opgeslagen", - "globalSearch": "Catalogus doorzoeken", - "searchPlaceholder": "Categorie, aanbieding, classname of ID", - "searchNoResults": "Geen resultaten gevonden", - "searchFailed": "Zoeken mislukt. Probeer opnieuw.", - "searching": "Zoeken...", - "category": "Categorie", - "offer": "Aanbieding", - "duplicate": { - "title": "Categorie dupliceren", - "description": "Kopieer deze categorie, alle subcategorieën en alle bijbehorende aanbiedingen.", - "name": "Naam van de nieuwe categorie", - "destination": "Doelcategorie", - "disabled": "De gekopieerde hoofdcategorie begint uitgeschakeld en verborgen. Subcategorieën behouden hun instellingen; meubeldefinities en bestanden worden gedeeld.", - "counts": "{pages} categorieën en {offers} aanbiedingen", - "summary": "‘{name}’ onder {destination}", - "cancel": "Annuleren", - "working": "Bezig…", - "confirm": "Dupliceren bevestigen", - "preview": "Kopie bekijken", - "saved": "Categorie en aanbiedingen gedupliceerd", - "savedPending": "Kopie opgeslagen; hotelupdate in afwachting", - "failed": "Dupliceren mislukt", - "root": "Catalogushoofdmap", - "search": "Categorieën zoeken…", - "empty": "Geen categorie gevonden", - "suggested": "Voorgesteld", - "all": "Alle categorieën", - "draftBlocked": "Sla categoriewijzigingen op of annuleer ze voordat je dupliceert." - }, - "unsaved": "Niet-opgeslagen wijzigingen", - "fullEditor": "Volledige editor", - "saveHint": "Categoriewijzigingen zijn niet opgeslagen. Gebruik Opslaan of Ctrl+S.", - "access": { - "enabled": "Categorie actief", - "enabledHint": "Maakt deze categorie beschikbaar in de catalogus.", - "visible": "Zichtbaar in het menu", - "visibleHint": "Toont deze categorie in het catalogusmenu.", - "club": "Alleen HC", - "clubHint": "Beperkt toegang tot gebruikers met een HC-abonnement.", - "yes": "Ja", - "no": "Nee" - }, - "preview": { - "label": "Live catalogusvoorbeeld", - "title": "Live voorbeeld", - "on": "Aan", - "off": "Uit", - "untitled": "Naamloze pagina", - "noItems": "Nog geen aanbiedingen op deze pagina", - "items": "aanbieding(en)", - "disabledHint": "Deze pagina is uitgeschakeld — spelers zien haar niet.", - "suggestedLayout": "Betere indeling voorgesteld", - "suggestedLayoutReason": "Deze pagina {reason}. Schakel over naar “{layout}” zodat deze overeenkomt met wat spelers verwachten.", - "applyLayout": "Indeling toepassen" - }, - "autoCategory": { - "title": "Auto-Categorie", - "itemsBadge": "{count} items", - "fromFurni": "Vanuit furni", - "emptyPage": "Lege pagina", - "searchPlaceholder": "Zoek furni op naam of classname…", - "noResults": "Geen resultaten", - "added": "Toegevoegd", - "price": "Prijs", - "free": "Gratis", - "setPrice": "Stel een prijs in", - "credits": "Credits", - "points": "Punten", - "pointsType": "Type", - "parent": "Bovenliggende categorie", - "root": "Catalogus-hoofdmap", - "caption": "Naam", - "captionPlaceholder": "bijv. Stoelen, Behang…", - "icon": "Icoon", - "pickIcon": "Kies icoon", - "layout": "Indeling", - "suggestedLayout": "Voorgesteld: {layout}", - "enabled": "Ingeschakeld", - "visible": "Zichtbaar", - "cancel": "Annuleren", - "create": "Aanmaken", - "createWithItems": "Aanmaken ({count} items)" - }, - "organizeImports": { - "title": "Imports organiseren", - "itemsBadge": "{count} items", - "loading": "Geïmporteerde meubels laden…", - "empty": "Geen geïmporteerde meubels gevonden. Importeer eerst meubels.", - "loadError": "Kon imports niet laden. Probeer het opnieuw.", - "refresh": "Vernieuwen", - "desc": "Geïmporteerde meubels worden gegroepeerd in voorgestelde pagina's. Bekijk elke groep en maak alleen de pagina's aan die je goedkeurt.", - "selectAll": "Alles selecteren", - "deselectAll": "Alles deselecteren", - "mode": "Modus", - "modeCreate": "Nieuwe pagina's aanmaken", - "modeMove": "Verplaatsen naar bestaande pagina", - "destination": "Doelpagina", - "destinationChosen": "geselecteerd", - "destinationSearchPlaceholder": "Zoek pagina's op naam…", - "noDestResults": "Geen pagina's gevonden", - "destinationHint": "Alle goedgekeurde groepen worden naar deze pagina verplaatst — er wordt geen nieuwe pagina aangemaakt.", - "chooseDestination": "Kies eerst een doelpagina", - "move": "{count, plural, one {1 item verplaatsen} other {# items verplaatsen}}", - "name": "Naam", - "icon": "Icoon", - "layout": "Indeling", - "resetSuggestion": "Voorgesteld", - "suggestedLayout": "Voorgesteld: {layout}", - "movedLabel": "{count} verplaatst", - "newLabel": "{count} nieuw", - "isNew": "nieuw", - "price": "Prijs", - "free": "Gratis", - "setPrice": "Stel een prijs in", - "credits": "Credits", - "points": "Punten", - "pointsType": "Type", - "newPriceHint": "Geldt alleen voor nieuwe aanbiedingen; verplaatste aanbiedingen behouden hun huidige prijs.", - "parent": "Pagina's plaatsen onder", - "root": "Catalogus-hoofdmap", - "importedRoot": "Imported Furniture", - "cancel": "Annuleren", - "create": "{count, plural, one {1 pagina aanmaken} other {# pagina's aanmaken}}", - "batchLayout": "Indeling voor alle", - "batchPrefix": "Prefix toevoegen aan titels", - "applyBatch": "Toepassen op alle", - "searchGroups": "Filter importgroepen...", - "visualPreview": "Voorbeeld", - "resetAll": "Wijzigingen herstellen", - "onlyUnplaced": "Toon alleen ongeplaatste items", - "errorMaxItems": "Maximaal 1000 items per run. Verlaag de selectie.", - "errorMaxGroups": "Maximaal {count} groepen per run. Verlaag de selectie.", - "errorNoName": "Elke goedgekeurde pagina heeft een naam nodig", - "tipMove": "Tip: Kies de doelpagina in het vak hieronder om meubels te verplaatsen.", - "tipCreate": "Tip: Kies deze modus om nieuwe pagina's aan te maken.", - "limitHint": "Maximaal 1000 items en 50 groepen per run.", - "errorFailed": "Kon imports niet organiseren", - "successMove": "{moved} item{moved, plural, one { verplaatst} other {s verplaatst}}{added, plural, =0 {} other {, {added} nieuw toegevoegd}} naar \"{destination}\"", - "successCreate": "{count, plural, one {1 pagina} other {# pagina's}} aangemaakt met {moved} verplaatste en {added} toegevoegde meubels", - "batchLabel": "Batch:", - "layoutFallbackDefault3x3": "3x3", - "itemsUnit": "items", - "impPrefix": "Imp ", - "isMoved": "verplaatst" - } - }, - "bulk": { - "previewCount": "{count} van {total} aanbiedingen worden gewijzigd.", - "success": "{count} aanbiedingen bijgewerkt.", - "selectOffer": "Selecteer aanbieding {name} (#{id})", - "pageEmpty": "Geen categorie gevonden.", - "clearSelection": "Selectie wissen", - "disabledReason": "Sla openstaande wijzigingen op of herstel ze en wacht tot lopende bewerkingen klaar zijn voordat je in bulk bewerkt.", - "operation": "Bewerking", - "loadingDestinations": "Categorieën laden…", - "cancel": "Annuleren", - "pagePlaceholder": "Selecteer de doelcategorie…", - "noChanges": "De geselecteerde waarden komen al overeen. Geen wijzigingen om op te slaan.", - "costPoints": "Prijs in punten", - "chooseFields": "Vink minstens één veld aan om te wijzigen.", - "pageAll": "Alle categorieën", - "offer": "Aanbieding", - "costCredits": "Credits", - "invalidPrice": "Voer een geldig getal in. Instellen en optellen vereisen gehele getallen.", - "modes": { - "set": "Waarde instellen", - "add": "Optellen of aftrekken", - "percent": "Procentueel wijzigen" - }, - "fieldHint": "Alleen aangevinkte velden worden gewijzigd.", - "currencies": { - "0": "Duckets", - "5": "Diamanten", - "101": "Sneeuwvlokken", - "103": "Harten", - "104": "Sterren", - "105": "Schelpen" - }, - "currency": "Puntenvaluta", - "button": "Bulk bewerken ({count})", - "description": "{count} aanbiedingen geselecteerd. Bekijk de wijzigingen voordat je opslaat.", - "confirm": "Bevestig en sla {count} aanbiedingen op", - "beforeAfter": "Elke cel toont de huidige waarde → de nieuwe waarde.", - "requestFailed": "Het verzoek is mislukt. Vernieuw het voorbeeld voordat je het opnieuw probeert.", - "priceHint": "Gebruik negatieve waarden of percentages om prijzen te verlagen. Procentuele resultaten worden afgerond op het dichtstbijzijnde gehele getal; eindprijzen mogen niet negatief zijn.", - "selectedCount": "{count} aanbiedingen geselecteerd in categorieën", - "value": "Waarde", - "unknownCurrency": "Type {type}", - "becomes": "wordt", - "title": "Geselecteerde aanbiedingen bewerken", - "preview": "Wijzigingen bekijken", - "retryDestinations": "Categorieën opnieuw laden", - "chooseDestination": "Selecteer een doelcategorie.", - "pageSuggested": "Voorgesteld", - "previewTitle": "Controleer de wijzigingen", - "visibilityHint": "De categorie bepaalt de zichtbaarheid. Verplaatste aanbiedingen volgen de zichtbaarheid van de doelcategorie.", - "percentage": "Percentage (%)", - "destination": "Doelcategorie", - "pageSearch": "Categorieën zoeken…", - "back": "Wijzigingen aanpassen", - "selectionLimit": "Selecteer maximaal 500 aanbiedingen per bewerking.", - "refreshing": "Bijgewerkte aanbiedingen vernieuwen…", - "undo": "Ongedaan maken", - "undoHint": "Je kunt afzonderlijke aanbiedingen ook herstellen via de auditgeschiedenis.", - "undoSuccess": "{count} aanbiedingen hersteld." - }, - "discovery": { - "searchPlaceholder": "Naam, classname, meubel-ID of #aanbiedings-ID…", - "filterLabel": "Aanbiedingen filteren", - "filters": { - "all": "Alle aanbiedingen", - "free": "Gratis", - "paid": "Betaald", - "bundles": "Bundels", - "limited": "Gelimiteerde edities" - }, - "shown": "({count} zichtbaar)", - "selected": "{count} geselecteerd", - "reset": "Filters wissen", - "results": "{count} van {total} aanbiedingen zichtbaar.", - "selectionHint": "De selectie wordt gewist wanneer je de zoekopdracht of het filter wijzigt.", - "noResults": "Geen aanbiedingen passen bij de huidige zoekopdracht en het filter.", - "selectVisible": "Alle zichtbare aanbiedingen selecteren" - }, - "packages": { - "openPackages": "Cataloguspakketten", - "title": "Cataloguspakketten", - "description": "Bereid categorie- en prijswijzigingen voor in een apart concept. Controleer de catalogus voordat je publiceert.", - "createPackage": "Nieuw pakket", - "createDraft": "Concept maken", - "draftCreated": "Pakketconcept gemaakt. De livecatalogus is niet gewijzigd.", - "refresh": "Lijst vernieuwen", - "searchPackages": "Pakketten zoeken", - "noPackages": "Geen pakketten gevonden.", - "choosePackage": "Open een pakket of maak een concept op basis van bestaande categorieën.", - "name": "Pakketnaam", - "mode": "Publicatiemodus", - "update": "Bestaande categorieën bijwerken", - "copy": "Kopieën maken", - "updateHint": "Bij publicatie worden de bestaande categorieën en aanbiedingen bijgewerkt.", - "copyHint": "Bij publicatie worden nieuwe categorieën en aanbiedingen onder de gekozen bovenliggende categorie gemaakt. Meubelverwijzingen blijven behouden.", - "sourceCategories": "Broncategorieën", - "packageLimits": "Subcategorieën worden meegenomen. Elk pakket ondersteunt maximaal 200 categorieën en 500 aanbiedingen.", - "searchCategories": "Categorieën zoeken", - "selectedCategories": "Geselecteerd: {count}", - "targetParent": "Bovenliggende doelcategorie", - "rootCategory": "Hoofdniveau van de catalogus", - "draft": "Concept", - "published": "Gepubliceerd", - "editDraft": "Concept bewerken", - "catalogPreview": "Catalogusvoorbeeld", - "showBaseline": "Oorspronkelijke opgeslagen momentopname tonen", - "changes": "Voor en na", - "entry": "Onderdeel", - "field": "Veld", - "before": "Voor", - "after": "Na", - "noChanges": "Geen velden gewijzigd ten opzichte van de oorspronkelijke momentopname.", - "copyReview": "Het volledige pakket wordt bij publicatie gekopieerd, ook zonder veldwijzigingen. De tabel toont wijzigingen ten opzichte van de oorspronkelijke momentopname.", - "updateReview": "Deze conceptwijzigingen worden na publicatie op bestaande catalogusonderdelen toegepast.", - "saveDraft": "Concept opslaan", - "saveHint": "Opslaan bewaart het pakket als concept. Sla alle wijzigingen op voordat je een publicatiecontrole aanvraagt.", - "draftSaved": "Concept opgeslagen. Publiceren is een aparte stap.", - "reviewPublication": "Publicatie controleren", - "publicationImpact": "Publicatie betreft {pages} categorieën en {offers} aanbiedingen.", - "conflicts": "Publicatie wordt geblokkeerd door conflicten. Los deze op voordat je opnieuw controleert.", - "readyToPublish": "De opgeslagen versie heeft de publicatiecontrole doorstaan. Publiceren wijzigt de livecatalogus.", - "publish": "Pakket publiceren", - "confirmPublish": "Dit gecontroleerde pakket nu publiceren in de livecatalogus?", - "publishedSuccess": "Pakket gepubliceerd: {pages} categorieën en {offers} aanbiedingen.", - "staleReview": "Dit pakket is in een andere sessie gewijzigd. Open het opnieuw om de laatste opgeslagen versie te controleren.", - "unsaved": "Niet-opgeslagen wijzigingen", - "discardChanges": "Niet-opgeslagen pakketwijzigingen verwerpen en doorgaan?", - "working": "Bezig…", - "requestFailed": "Het verzoek is mislukt. Probeer het opnieuw.", - "invalidFields": "Controleer verplichte namen, lay-outs en gehele getallen voordat je opslaat.", - "category": "Categorie", - "caption": "Categorienaam", - "iconImage": "Categoriepictogram-ID", - "minRank": "Minimale rang", - "orderNum": "Weergavevolgorde", - "pageLayout": "Paginalay-out", - "enabled": "Ingeschakeld", - "visible": "Zichtbaar", - "clubOnly": "Alleen Clubleden", - "vipOnly": "Alleen VIP-leden", - "offers": "Aanbiedingen ({count})", - "offer": "Aanbieding", - "catalogName": "Aanbiedingsnaam", - "costCredits": "Credits", - "costPoints": "Punten", - "pointsType": "Puntenvaluta-ID", - "amount": "Aantal", - "searchOffers": "Aanbiedingen zoeken", - "currentCategoryOffers": "Alleen de geselecteerde categorie", - "selectMatching": "Alle overeenkomende aanbiedingen selecteren ({count})", - "clearSelection": "Selectie wissen", - "selectedOffers": "Geselecteerde aanbiedingen: {count}", - "select": "Selecteren", - "selectOffer": "Aanbieding #{id} selecteren", - "noOffers": "Geen aanbiedingen gevonden met deze filters.", - "bulkPrices": "Conceptprijzen in bulk ({count} geselecteerd)", - "bulkHint": "Bekijk de geselecteerde prijswijzigingen en neem ze daarna over in dit concept. De livecatalogus blijft ongewijzigd tot publicatie.", - "operation": "Bewerking", - "set": "Waarde instellen", - "add": "Optellen of aftrekken", - "percent": "Procentueel aanpassen", - "value": "Waarde", - "reviewBulk": "Prijsvoorbeeld", - "invalidBulk": "Kies geldige getallen en minstens één aanbieding. De resulterende prijzen mogen niet negatief zijn en moeten binnen het ondersteunde bereik vallen.", - "acceptBulk": "Prijzen overnemen in concept", - "previous": "Vorige", - "next": "Volgende" - }, - "integrity": { - "title": "Catalogusintegriteit", - "description": "Controleer verwijzingen, categoriepaden, identificaties en meubeliconen. Een controle wijzigt geen records.", - "catalog": "Catalogus", - "normal": "Normale catalogus", - "bc": "Builders Club", - "refresh": "Opnieuw controleren", - "working": "Controleren…", - "failed": "De bewerking kon niet worden voltooid. Probeer opnieuw.", - "stalePreview": "De catalogus is sinds het voorbeeld gewijzigd. Maak een nieuw voorbeeld voordat je reparaties toepast.", - "applied": "{count} categorieën opnieuw aan de catalogushoofdmap gekoppeld.", - "iconsUnavailable": "De map met iconen kon niet worden gelezen. De beschikbaarheid van iconen is niet gecontroleerd.", - "healthy": "Geen problemen gevonden in de voltooide controles.", - "total": "{count} problemen gevonden. {shown} weergegeven.", - "open": "Openen", - "reference": "Verwijzing: {value}", - "repairHint": "Bekijk categorieën waarvan de bovenliggende categorie niet meer bestaat. Alleen deze categorieën worden naar de hoofdmap verplaatst; alle records blijven behouden. Cycli, ontbrekende meubels, iconen en conflicterende identificaties vereisen afzonderlijke controle.", - "preview": "Veilige reparaties bekijken", - "planned": "{count} categorieën worden verplaatst:", - "parentChange": "bovenliggende categorie #{from} → catalogushoofdmap", - "apply": "Getoonde reparaties toepassen", - "legacyTitle": "Geavanceerd onderhoud", - "legacyHint": "Deze bestaande onderhoudstools kunnen identificaties herschrijven en dubbele records samenvoegen of verwijderen. Ze staan los van de integriteitscontrole die niets verwijdert en de vooraf getoonde reparatie van bovenliggende categorieën.", - "issues": { - "missing_furniture": "Aanbieding verwijst naar ontbrekende meubels", - "invalid_item_ids": "Ongeldige meubelidentificaties", - "missing_page": "Aanbieding verwijst naar ontbrekende categorie", - "unreachable_page": "Onbereikbare categorie", - "category_cycle": "Categoriepad bevat een cyclus", - "missing_icon": "Ontbrekend meubelicoon", - "invalid_offer_id": "Ongeldige aanbiedingsidentificatie", - "duplicate_offer_id": "Herhaalde aanbiedingsidentificatie" - } - } - }, - "shop": { - "title": "Winkel", - "subtitle": "Beheer pakketten en bestellingen", - "packages": "Pakketten", - "orders": "Bestellingen", - "recentOrders": "Recente bestellingen", - "paidOrders": "Betaalde bestellingen", - "ordersHint": "Laatste PayPal-transacties (meest recente 25)", - "pageOf": "Pagina {page} van {lastPage}", - "packagesTotal": "{count} pakketten", - "newPackage": "+ Nieuw pakket", - "edit": "Bewerken", - "delete": "Verwijderen", - "viewOrder": "Bekijken", - "noPackages": "Nog geen winkelpakketten", - "noOrders": "Nog geen bestellingen", - "confirmDelete": "Dit pakket verwijderen?", - "colId": "ID", - "colName": "Naam", - "colPrice": "Prijs", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamanten", - "colRank": "Rang", - "colPosition": "Positie", - "colCurrency": "Valuta", - "colType": "Type", - "colSold": "Verkocht", - "colEnabled": "Ingeschakeld", - "colActions": "Acties", - "colOrderId": "Bestelling ID", - "colCustomer": "Klant", - "colPackage": "Pakket", - "colTransaction": "Transactie", - "colUser": "Gebruiker", - "colDescription": "Beschrijving", - "colAmount": "Bedrag", - "colStatus": "Status", - "colDate": "Datum", - "statusPending": "In afwachting", - "statusCompleted": "Voltooid", - "statusRefunded": "Terugbetaald", - "form": { - "name": "Naam", - "namePlaceholder": "Pakket naam", - "description": "Beschrijving", - "descriptionPlaceholder": "Pakket beschrijving", - "price": "Prijs", - "currency": "Valuta", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Type", - "typeCredits": "Credits", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamanten", - "typeBadge": "Badge", - "typeFurni": "Meubels", - "typeRank": "Rang", - "amount": "Hoeveelheid", - "badgeCode": "Badge code", - "badgeCodePlaceholder": "Bijv. VIP001", - "rankId": "Rang ID", - "furniItems": "Meubel items", - "enabled": "Ingeschakeld", - "save": "Pakket opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren" - } - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace-aanbiedingen", - "activeListings": "Actieve listings", - "soldListings": "Verkocht", - "filterActive": "Actief", - "filterSold": "Verkocht", - "empty": "Geen marketplace-listings om te tonen.", - "loadError": "Kon marketplace-gegevens niet laden (database niet beschikbaar).", - "cancel": "Listing annuleren", - "colId": "ID", - "colItem": "Item-ID", - "colSeller": "Verkoper", - "colPrice": "Prijs", - "colListed": "Geplaatst", - "colSold": "Verkocht op", - "colActions": "Acties" - }, - "guilds": { - "title": "Gildes", - "subtitle": "Hotelgroepen en leden", - "totalGuilds": "Gildes", - "searchPlaceholder": "Zoek op naam, beschrijving of ID…", - "search": "Zoeken", - "empty": "Geen gildes gevonden.", - "loadError": "Kon gildes niet laden (database niet beschikbaar).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Naam", - "colOwner": "Eigenaar", - "colMembers": "Leden", - "colCreated": "Aangemaakt", - "colThreads": "Forumthreads", - "colRoom": "Kamer", - "colUser": "Gebruiker", - "colLevel": "Niveau", - "colJoined": "Lid sinds", - "members": "Leden", - "noMembers": "Geen leden.", - "back": "Terug naar gildes", - "viewPublic": "Openbare pagina", - "disband": "Gilde ontbinden", - "listHeading": "Guilds ({count})" - }, - "transactions": { - "title": "Transacties", - "subtitle": "PayPal betalingslogboek", - "totalTransactions": "Totaal transacties", - "pagePaid": "Betaald (deze pagina)", - "pageFailed": "Mislukt (deze pagina)", - "searchPlaceholder": "Zoek op gebruiker, transactie-ID of pakket…", - "presetPaid": "Betaald", - "presetFailed": "Mislukt", - "noTransactions": "Nog geen transacties", - "colId": "ID", - "colUser": "Gebruiker", - "colPayer": "Betaler", - "colAmount": "Bedrag", - "colCurrency": "Valuta", - "colPackage": "Pakket", - "colTransaction": "Transactie-ID", - "colStatus": "Status", - "colDate": "Datum", - "colActions": "Acties", - "statusCompleted": "Voltooid", - "statusPending": "In afwachting", - "statusFailed": "Mislukt", - "statusRefunded": "Terugbetaald", - "detail": { - "title": "Transactie #{id}", - "paypalId": "PayPal ID", - "payerEmail": "Betaler e-mail", - "grossAmount": "Brutobedrag", - "fee": "Kosten", - "netAmount": "Nettobedrag" - } - }, - "vouchers": { - "title": "Winkel Vouchers", - "subtitle": "Beheer inwisselbare vouchercodes", - "vouchers": "Vouchers", - "active": "Actief", - "usedUp": "Opgebruikt", - "expired": "Verlopen", - "newVoucher": "+ Nieuwe voucher", - "edit": "Bewerken", - "delete": "Verwijderen", - "noVouchers": "Nog geen vouchers", - "confirmDeleteTitle": "Voucher verwijderen", - "confirmDelete": "Voucher \"{code}\" verwijderen?", - "created": "Voucher aangemaakt", - "deleted": "Voucher verwijderd", - "createError": "Kon voucher niet aanmaken", - "deleteError": "Kon voucher niet verwijderen", - "statusActive": "Actief", - "statusUsedUp": "Opgebruikt", - "statusExpired": "Verlopen", - "colId": "ID", - "colCode": "Code", - "colValue": "Waarde", - "colAmount": "Bedrag", - "colType": "Type", - "colUses": "Gebruik / Max", - "colStatus": "Status", - "colExpires": "Verloopt", - "colCreated": "Aangemaakt", - "colActions": "Acties", - "form": { - "code": "Code", - "codePlaceholder": "Bijv. ZOMER2025", - "value": "Waarde", - "amount": "Aantal credits", - "amountPlaceholder": "bijv. 100", - "type": "Type", - "typeCredits": "Credits", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamanten", - "typeBadge": "Badge", - "typeFurni": "Meubels", - "typeRank": "Rang", - "badgeCode": "Badge code", - "badgeCodePlaceholder": "Bijv. VIP001", - "rankId": "Rang ID", - "maxUses": "Maximaal gebruik", - "maxUsesPlaceholder": "0 = onbeperkt", - "expiresAt": "Verloopt op", - "enabled": "Ingeschakeld", - "create": "Voucher aanmaken", - "save": "Voucher opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren" - } - }, - "subscriptions": { - "title": "Abonnementen", - "subtitle": "Actieve terugkerende abonnementen", - "noSubscriptions": "Geen actieve abonnementen", - "cancel": "Annuleren", - "confirmCancel": "Abonnement voor {username} annuleren?", - "colId": "ID", - "colUser": "Gebruiker", - "colPackage": "Pakket", - "colAmount": "Bedrag", - "colInterval": "Interval", - "colStarted": "Gestart", - "colNextBilling": "Volgende factuur", - "colStatus": "Status", - "colActions": "Acties", - "statusActive": "Actief", - "statusCancelled": "Geannuleerd", - "statusExpired": "Verlopen" - }, - "rareValues": { - "title": "Zeldzame Waarden", - "subtitle": "Beheer zeldzame waarde categorieën en itemprijzen", - "categories": "Categorieën", - "items": "Items", - "addCategory": "Categorie toevoegen", - "editCategory": "Categorie bewerken", - "deleteCategory": "Categorie verwijderen", - "noCategories": "Nog geen zeldzame waarde categorieën", - "confirmDeleteCategory": "Categorie \"{name}\" en alle items verwijderen?", - "colId": "ID", - "colName": "Naam", - "colItems": "Items", - "colUpdated": "Bijgewerkt", - "colActions": "Acties", - "colItemName": "Item naam", - "colCredits": "Credits", - "colPoints": "Punten", - "colPointType": "Punttype", - "categoryForm": { - "name": "Naam", - "namePlaceholder": "Categorie naam", - "save": "Categorie opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren" - }, - "itemForm": { - "itemName": "Item naam", - "itemNamePlaceholder": "Bijv. Troon", - "credits": "Credits waarde", - "points": "Punten waarde", - "pointType": "Punttype", - "pointTypeDuckets": "Duckets", - "pointTypeDiamonds": "Diamanten", - "save": "Item opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren" - } - }, - "badges": { - "title": "Badges", - "subtitle": "Uploaden, geven en beheren van badgecatalogus", - "upload": "Uploaden", - "giveBadge": "Badge geven", - "catalogue": "Catalogus", - "uploadTitle": "Nieuwe badge uploaden", - "uploadSubtitle": "Upload een badge afbeeldingsbestand", - "badgeCode": "Badge code", - "badgeCodePlaceholder": "Bijv. VIP001", - "badgeFile": "Badge bestand", - "badgeFileHint": "PNG of GIF, aanbevolen 40x40", - "uploadButton": "Bestand kiezen", - "uploading": "Uploaden…", - "giveTitle": "Badge aan gebruiker geven", - "giveSubtitle": "Een badge toewijzen aan een specifieke gebruiker", - "username": "Gebruikersnaam", - "usernamePlaceholder": "Doel gebruikersnaam", - "giveButton": "Badge geven", - "giving": "Geven…", - "catalogueTitle": "Badgecatalogus", - "catalogueSubtitle": "Alle beschikbare badges in het hotel", - "noBadges": "Geen badges in de catalogus", - "search": "Badges zoeken", - "searchPlaceholder": "Zoeken op code of naam…", - "colCode": "Code", - "colImage": "Afbeelding", - "colName": "Naam", - "colDescription": "Beschrijving", - "colActions": "Acties" - }, - "achievements": { - "title": "Prestaties", - "subtitle": "Alleen-lezen lijst van in-game prestaties", - "noAchievements": "Geen prestaties geconfigureerd", - "colId": "ID", - "colName": "Naam", - "colCategory": "Categorie", - "colLevels": "Niveaus", - "colReward": "Beloning", - "colProgress": "Voortgang", - "levelLabel": "Niveau {level}", - "rewardCredits": "{count} credits", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Kalendercampagnes", - "subtitle": "Alleen-lezen lijst van kalendercampagnes en evenementen", - "noCampaigns": "Nog geen kalendercampagnes", - "colId": "ID", - "colName": "Naam", - "colStart": "Start", - "colEnd": "Einde", - "colType": "Type", - "colReward": "Beloning", - "colActions": "Acties", - "detail": { - "title": "Campagne: {name}", - "subtitle": "Kalendergebeurtenis details", - "days": "Dagen", - "dayLabel": "Dag {day}", - "reward": "Beloning", - "noDays": "Geen dagen geconfigureerd voor deze campagne" - } - }, - "radio": { - "title": "Radiomoderatie", - "subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).", - "moderation": "Moderation", - "shouts": "Shouts", - "applications": "Sollicitaties", - "schedules": "Schema's", - "settings": "Instellingen", - "embed": "Insluiten", - "ranks": "Rangen", - "history": "Geschiedenis", - "apiKeys": "API-sleutels", - "points": "Punten", - "autoDj": "AutoDJ", - "user": "User", - "message": "Message", - "posted": "Posted", - "realName": "Real Name", - "age": "Age", - "style": "Style", - "applied": "Applied", - "day": "Day", - "start": "Start", - "end": "End", - "show": "Show", - "status": "Status", - "active": "active", - "inactive": "inactive", - "hidden": "hidden", - "activeSchedules": "Active schedules", - "noShouts": "Geen shouts om te modereren", - "noApplications": "No applications submitted.", - "noSchedules": "No schedules configured.", - "deleteShout": "Verwijderen", - "confirmDeleteShout": "Deze shout verwijderen?", - "pendingApplications": "Openstaande sollicitaties", - "settingsForm": { - "title": "Radio Settings", - "subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", - "enabled": "Enabled", - "disabled": "Disabled", - "totalKeys": "Total keys", - "configured": "Configured", - "curatedHint": "curated keys with a value", - "customKeys": "Custom keys", - "saveAll": "Save all", - "singleKey": "Add / overwrite a single key", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "value", - "commentPlaceholder": "comment (optional)", - "saveSingle": "Save", - "otherSettings": "Other radio settings", - "dbError": "Could not load settings (database unavailable). Defaults will be created on save." - }, - "embedPage": { - "title": "Radio Embed", - "subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).", - "streamUrl": "Stream URL", - "configured": "Configured", - "missing": "Missing", - "radioName": "Radio name", - "nowPlayingApi": "Now-playing API", - "set": "Set", - "notSet": "Not set", - "noStreamUrl": "No stream URL configured", - "noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.", - "goToSettings": "Go to Radio Settings", - "livePreview": "Live preview", - "livePreviewText": "This is the bare audio player as visitors will see it. Press play to confirm the stream is reachable.", - "source": "Source", - "audioSnippet": "Audio player snippet", - "audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.", - "iframeSnippet": "Iframe wrapper snippet", - "iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.", - "audioUnsupported": "Your browser does not support the audio element." - }, - "banners": { - "title": "Banners", - "heading": "Radio Banners", - "description": "Promotional banners shown on the radio page, ordered by sort order.", - "addBanner": "Banner toevoegen", - "createBanner": "Create banner", - "deleteBanner": "Banner verwijderen", - "noBanners": "No banners yet — add one above.", - "existing": "Existing banners ({count})", - "save": "Save", - "delete": "Delete", - "byUser": "by user {id}", - "active": "active", - "hidden": "hidden", - "bannerAlt": "Radio banner", - "statusActive": "Active", - "statusHidden": "Hidden", - "dbError": "Could not load banners (database unavailable).", - "form": { - "imagePath": "Image path / URL", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Title", - "description": "Description", - "sortOrder": "Sort order", - "active": "Active" - } - }, - "ranksForm": { - "title": "Radio rangen", - "subtitle": "DJ / staff ranks assignable on radio applications.", - "dbError": "Could not load ranks (database unavailable).", - "active": "Active", - "addRank": "Add rank", - "name": "Name", - "badgeCode": "Badge code", - "description": "Description", - "createRank": "Create rank", - "existing": "Existing ranks ({count})", - "noRanks": "No ranks yet — add one above.", - "activeLabel": "active", - "inactiveLabel": "inactive", - "save": "Save", - "deleteRank": "Delete rank #{id}" - }, - "historyPage": { - "title": "Radio Play History", - "subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.", - "dbError": "Could not load radio history (database unavailable).", - "showsLogged": "Shows logged", - "onAirNow": "On air now", - "uniqueDjs": "Unique DJs", - "peakListeners": "Peak listeners", - "empty": "No radio history recorded yet.", - "showLog": "Show log ({count})", - "colDj": "DJ", - "colShow": "Show", - "colStarted": "Started", - "colEnded": "Ended", - "colAirtime": "Airtime", - "colListeners": "Listeners", - "colNotes": "Notes", - "onAir": "on air" - }, - "apiKeysForm": { - "title": "API-sleutels", - "subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.", - "dbError": "Could not load API keys (database unavailable).", - "totalKeys": "Total keys", - "active": "Active", - "inactive": "Inactive", - "generateKey": "Nieuwe sleutel genereren", - "generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.", - "name": "Name", - "namePlaceholder": "AzureCast bridge", - "rateLimit": "Rate limit (requests/min)", - "allowedIps": "Allowed IPs (optional)", - "allowedIpsPlaceholder": "comma-separated, blank = any", - "generate": "Genereren", - "existingKeys": "Existing keys ({count})", - "noKeys": "No API keys yet — generate one above.", - "colName": "Name", - "colKey": "Sleutel", - "colAllowedIps": "Allowed IPs", - "colRateLimit": "Rate limit", - "colLastUsed": "Last used", - "colExpires": "Expires", - "colStatus": "Status", - "colActions": "Acties", - "maskedHint": "Only the first 8 characters are shown", - "any": "any", - "activeLabel": "active", - "inactiveLabel": "inactive", - "deactivate": "Deactivate", - "activate": "Activate", - "delete": "Delete" - }, - "pointsForm": { - "title": "Luisteraar punten configuratie", - "subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", - "points": "Points", - "enabled": "Enabled", - "disabled": "Disabled", - "perMinute": "Per minute", - "paidIn": "paid in {currency}", - "maxPerDay": "Max / day", - "unlimited": "Unlimited", - "minListeners": "Min listeners", - "settings": "Settings", - "pointsEnabled": "Points enabled", - "pointsEnabledHint": "Master switch for awarding listener points.", - "currency": "Currency", - "currencyHint": "Which wallet the points are paid into.", - "pointsPerMinute": "Points per minute", - "pointsPerMinuteHint": "Amount awarded for each full minute of listening.", - "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", - "minListenersHint": "Points are only awarded when at least this many people are tuned in.", - "save": "Punteninstellingen opslaan" - }, - "autoDjForm": { - "title": "AutoDJ configuratie", - "subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.", - "dbError": "Could not load the AutoDJ playlist (database unavailable).", - "tracks": "Tracks", - "active": "Active", - "inactive": "Inactive", - "addTrack": "Add track", - "trackTitle": "Title", - "titlePlaceholder": "Track title", - "artist": "Artist", - "album": "Album", - "artworkUrl": "Artwork URL", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Duration (seconds)", - "durationPlaceholder": "e.g. 215", - "sortOrder": "Sort order", - "playlist": "Playlist ({count})", - "noTracks": "No AutoDJ tracks yet — add one above.", - "colOrder": "Order", - "colTitle": "Title", - "colArtist": "Artist", - "colAlbum": "Album", - "colDuration": "Duration", - "colPlays": "Plays", - "colLastPlayed": "Last played", - "colStatus": "Status", - "colActions": "Actions", - "activeLabel": "active", - "inactiveLabel": "inactive", - "deactivate": "Deactivate", - "activate": "Activate", - "delete": "Delete" - }, - "monitoring": { - "title": "Radiomonitoring", - "subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.", - "stream": "Stream", - "online": "Online", - "offline": "Offline", - "notConfigured": "Not configured", - "nowPlaying": "Now playing", - "nowPlayingApi": "Now-playing API", - "listenersApi": "Listeners API", - "listeners": "Luisteraars", - "currentSong": "Huidig nummer", - "bitrate": "Bitrate", - "status": "Status", - "noNowPlayingHint": "no now-playing API set", - "noListenersHint": "no listeners API set", - "endpointDiagnostics": "Endpoint diagnostics", - "diagnosticsLegend": "OK: bereikbaar · WARN: niet ingesteld · ERROR: aanvraag mislukt of time-out.", - "streamUrl": "Stream URL", - "unreachable": "unreachable", - "refresh": "Vernieuwen" - }, - "moderationPage": { - "title": "DJ Moderation", - "subtitle": "Review and remove radio shouts (50 most recent).", - "recentShouts": "Recent Shouts ({count})" - } - }, - "commandocentrum": { - "title": "Commandocentrum", - "subtitle": "Diagnostiek, RCON-bediening en gebruikersbeheer", - "diagnostics": "Diagnostiek", - "rcon": "RCON", - "userActions": "Gebruikersacties", - "diagnosticsTitle": "Emulator diagnostiek", - "memoryUsage": "Geheugengebruik", - "uptime": "Uptime", - "onlineUsers": "Online gebruikers", - "roomsLoaded": "Kamers geladen", - "refresh": "Vernieuwen", - "rconTitle": "RCON-commando's", - "rconPlaceholder": "Voer RCON-commando in…", - "rconSend": "Verzenden", - "rconSending": "Verzenden…", - "rconResponse": "Reactie", - "userActionsTitle": "Gebruikersacties", - "username": "Gebruikersnaam", - "usernamePlaceholder": "Doel gebruikersnaam", - "action": "Actie", - "execute": "Uitvoeren", - "actions": { - "disconnect": "Verbinding verbreken", - "alert": "Melding sturen", - "giveCredits": "Credits geven", - "giveBadge": "Badge geven", - "givePoints": "Punten geven", - "ban": "Verbanne", - "kick": "Kicken" - }, - "messagePlaceholder": "Bericht (voor meldingen)…", - "amountPlaceholder": "Bedrag…", - "badgePlaceholder": "Badge code…" - }, - "emulator": { - "title": "Emulator Configuratie", - "subtitle": "Bekijk en bewerk emulatorinstellingen en lokale teksten", - "settings": "Instellingen", - "texts": "Teksten", - "search": "Zoeken", - "searchPlaceholder": "Zoek sleutels…", - "noSettings": "Geen instellingen gevonden", - "noTexts": "Geen teksten gevonden", - "edit": "Bewerken", - "save": "Opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren", - "colKey": "Sleutel", - "colValue": "Waarde", - "colType": "Type", - "colActions": "Acties", - "editDialog": { - "title": "Bewerken: {key}", - "value": "Waarde", - "valuePlaceholder": "Voer waarde in…", - "save": "Wijzigingen opslaan", - "cancel": "Annuleren" - } - }, - "alerts": { - "title": "Meldingen", - "subtitle": "Hotelbrede meldingen verzenden en recente meldingen bekijken", - "sendAlert": "Hotelmelding verzenden", - "recentAlerts": "Recente meldingen ({count})", - "noRecentAlerts": "Geen recente meldingen", - "form": { - "title": "Melding titel", - "titlePlaceholder": "Bijv. Serveronderhoud over 10 minuten", - "message": "Melding bericht", - "messagePlaceholder": "Schrijf het meldingsbericht…", - "type": "Type", - "typeHotel": "Hotelbrede melding", - "typeStaff": "Alleen team", - "urgent": "Urgent", - "send": "Melding verzenden", - "sending": "Verzenden…", - "description": "Verstuurt via RCON hotelalert naar online gebruikers." - }, - "colId": "ID", - "colTitle": "Titel", - "colSentBy": "Verzonden door", - "colType": "Type", - "colDate": "Datum", - "colActions": "Acties", - "noAlerts": "Geen recente meldingen", - "alertsShown": "Weergegeven", - "critical": "Kritiek", - "warnings": "Waarschuwingen", - "unread": "Ongelezen", - "markAllRead": "Alles als gelezen markeren", - "colWhen": "Wanneer", - "colSeverity": "Ernst", - "colMessage": "Bericht" - }, - "logs": { - "title": "Teamactiviteiten", - "subtitle": "Audittrail van teamacties in het beheerderspaneel", - "noLogs": "Nog geen teamactiviteit geregistreerd", - "noResults": "Geen overeenkomende activiteiten", - "colId": "ID", - "colUser": "Gebruiker", - "colStaff": "Team", - "colAction": "Actie", - "colTarget": "Doelwit", - "colDescription": "Beschrijving", - "colIp": "IP", - "colWhen": "Wanneer", - "colTimestamp": "Tijdstempel", - "filterByUser": "Filteren op gebruiker…", - "filterByAction": "Filteren op actie…", - "clearFilters": "Filters wissen", - "searchPlaceholder": "Zoek op actie, beschrijving of IP…", - "totalActivities": "Totaal activiteiten", - "onThisPage": "Op deze pagina", - "recent": "Laatste minuut", - "authorizationErrors": "Autorisatiefouten", - "authorizationOnly": "Alleen auth-fouten", - "allActivities": "Alle activiteiten", - "staffId": "Team-ID", - "actionType": "Actietype", - "filter": "Filter", - "activities": "{count} activiteiten", - "staffWithId": "#{id} {name}", - "userPrefix": "gebruiker", - "pagination": "Pagina {page} van {pages} · {total} totaal", - "next": "Volgende", - "prev": "Vorige", - "unknownUser": "onbekend", - "emptyValue": "-", - "colTime": "Tijd", - "audit": { - "colTargetId": "Doel-ID", - "colDetails": "Details", - "colDate": "Datum", - "searchPlaceholder": "Zoek op actie of doel…", - "changesCount": "{count} wijzigingen", - "notAvailable": "n.v.t.", - "filtersTitle": "Activiteitenlogboek filteren", - "filterActor": "Uitvoerder (exacte gebruikersnaam of ID)", - "filterAction": "Exacte actie", - "filterFrom": "Vanaf datum (UTC)", - "filterTo": "Tot en met datum (UTC)", - "filtersHint": "Datums omvatten de volledige dag in UTC. Acties en gebruikersnamen moeten exact overeenkomen. De nieuwste activiteiten staan bovenaan.", - "applyFilters": "Filters toepassen", - "resetFilters": "Filters wissen", - "invalidDetails": "Deze oude gegevens kunnen niet worden weergegeven.", - "beforeValue": "Voor", - "afterValue": "Na", - "exportHint": "Het CSV-bestand bevat de huidige gefilterde pagina, met maximaal 100 vermeldingen.", - "operation": "Operatie" - }, - "chat": { - "colMessage": "Bericht", - "colRoomId": "Kamer-ID", - "searchPlaceholder": "Zoek op gebruikersnaam of bericht…" - }, - "commands": { - "colCommand": "Commando", - "colParams": "Parameters", - "searchPlaceholder": "Zoek op gebruikersnaam, commando of parameters…" - }, - "trades": { - "colUserOne": "Gebruiker één", - "colUserTwo": "Gebruiker twee", - "colStatus": "Status", - "statusUnknown": "onbekend", - "searchPlaceholder": "Zoek op gebruikersnaam…" - }, - "history": { - "preview": "Herstel bekijken", - "title": "Een opgeslagen wijziging herstellen", - "description": "Vergelijk de huidige waarden met de vorige waarden voordat je bevestigt. Alleen categorie-instellingen, aanbiedingsprijzen of nieuwsinhoud worden hersteld. Verwijderde gegevens en de categoriehiërarchie kunnen hier niet worden hersteld.", - "loading": "Laden…", - "unavailable": "Deze revisie is niet beschikbaar of je hebt geen toestemming om deze te herstellen.", - "conflict": "Dit record is na de geselecteerde wijziging aangepast. Vernieuw en bekijk de nieuwste geschiedenis voordat je herstelt.", - "failed": "Het herstellen is mislukt. Vernieuw de pagina en probeer het opnieuw.", - "field": "Veld", - "current": "Huidige waarde", - "restore": "Te herstellen waarde", - "confirm": "Herstel bevestigen", - "restoring": "Herstellen…", - "fields": { - "caption": "Categorienaam", - "captionSave": "Interne categorienaam", - "pageLayout": "Categorie-indeling", - "enabled": "Ingeschakeld", - "visible": "Zichtbaar", - "clubOnly": "Alleen clubleden", - "vipOnly": "Alleen VIP-leden", - "minRank": "Minimale rang", - "iconImage": "Categoriepictogram", - "iconColor": "Pictogramkleur", - "pageHeadline": "Kopafbeelding", - "pageTeaser": "Voorbeeldafbeelding", - "pageSpecial": "Speciale afbeelding", - "pageText1": "Primaire tekst", - "pageText2": "Secundaire tekst", - "pageTextDetails": "Detailtekst", - "pageTextTeaser": "Voorbeeldtekst", - "includes": "Inbegrepen categorieën", - "costCredits": "Prijs in credits", - "costPoints": "Prijs in punten", - "pointsType": "Puntenvaluta", - "title": "Nieuwstitel", - "slug": "Nieuwsadres", - "image": "Nieuwsafbeelding", - "shortStory": "Samenvatting", - "fullStory": "Artikelinhoud", - "status": "Publicatiestatus", - "publishAt": "Geplande publicatie", - "publishedAt": "Publicatiedatum", - "pageId": "Categorie" - } - } - }, - "wordfilter": { - "title": "Woordfilter", - "subtitle": "Beheer gefilterde woorden en zinnen in het hotel", - "filteredWords": "Gefilterde woorden", - "addWord": "Woord toevoegen", - "addWords": "Woorden toevoegen", - "words": "Woorden", - "noWords": "Nog geen gefilterde woorden", - "delete": "Verwijderen", - "confirmDeleteTitle": "Woord verwijderen", - "confirmDelete": "\"{word}\" verwijderen uit het filter?", - "added": "Woord toegevoegd aan filter", - "deleted": "Woord verwijderd uit filter", - "addError": "Kon woord niet toevoegen (bestaat mogelijk al)", - "deleteError": "Kon woord niet verwijderen", - "colId": "ID", - "colWord": "Woord", - "colAddedBy": "Toegevoegd door", - "colCreated": "Aangemaakt", - "colActions": "Acties", - "form": { - "word": "Woord", - "wordPlaceholder": "Bijv. slechtwoord", - "addMore": "Meerdere woorden toevoegen (één per regel)", - "save": "Aan filter toevoegen", - "saving": "Opslaan…", - "cancel": "Annuleren" - } - }, - "maintenance": { - "title": "Onderhoudsmodus", - "subtitle": "Hotelbreed onderhoud in- of uitschakelen", - "enabled": "Onderhoudsmodus is ingeschakeld", - "disabled": "Onderhoudsmodus is uitgeschakeld", - "enable": "Onderhoud inschakelen", - "disable": "Onderhoud uitschakelen", - "message": "Onderhoudsbericht", - "messagePlaceholder": "We zijn zo terug!", - "staffAccess": "Teamtoegang toestaan tijdens onderhoud", - "save": "Instellingen opslaan", - "saving": "Opslaan…", - "confirmEnable": "Het inschakelen van onderhoud voorkomt dat niet-teamleden toegang krijgen tot het hotel. Doorgaan?", - "confirmDisable": "Onderhoudsmodus uitschakelen en toegang herstellen voor alle gebruikers?" - }, - "housekeeping": { - "title": "Permissie-archief", - "subtitle": "Oude back-uptabel. Echte toegang beheert u onder Permissions — hier alleen vergelijken en exporteren.", - "addPermission": "Permissie toevoegen", - "editPermission": "Permissie bewerken", - "deletePermission": "Permissie verwijderen", - "noPermissions": "Geen housekeeping permissies geconfigureerd", - "confirmDelete": "Deze permissie verwijderen?", - "colId": "ID", - "colRank": "Rang", - "colSection": "Sectie", - "colActions": "Acties", - "saved": "Opgeslagen!", - "deleted": "Verwijderd!", - "errorOccurred": "Er is een fout opgetreden", - "emptyInput": "Lege invoer", - "invalidJson": "Ongeldige JSON", - "imported": "Geïmporteerd!", - "importedWithErrors": "{count} permissies geïmporteerd met {errors} fouten", - "presetApplied": "Preset toegepast!", - "cleared": "Alle permissies verwijderd!", - "invalidRank": "Ongeldige rang", - "testDone": "Test voltooid: {count} permissies gevonden", - "testing": "Testen...", - "loading": "Laden...", - "prev": "Vorige", - "next": "Volgende", - "form": { - "rankId": "Rang ID", - "rankIdPlaceholder": "Minimale rang", - "section": "Sectiesleutel", - "sectionPlaceholder": "Bijv. admin.dashboard", - "save": "Permissie opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren" - }, - "confirmClearAll": "ALLE permissies verwijderen? Dit kan niet ongedaan worden gemaakt!", - "confirmClearAllDesc": "Dit verwijdert alle permissies uit de database. Weet je het zeker?", - "confirmDeletePermission": "Deze permissie permanent verwijderen?", - "confirmBulkDelete": "{count} geselecteerde permissies verwijderen?", - "deleteSelected": "Verwijder {count} geselecteerd", - "selectAllMatching": "Selecteer alle {count} overeenkomende", - "cancel": "Annuleren", - "confirm": "Bevestigen", - "colGroup": "Groep", - "colDepends": "Afhankelijk van", - "colPermission": "Permissie", - "colDescription": "Omschrijving", - "colMinRank": "Min. rang", - "permissionKey": "Permissiesleutel", - "minRank": "Min. rang", - "description": "Omschrijving", - "permissions": "Permissies", - "permissionsCount": "{count} permissies", - "permission": "permissie", - "highestMinRank": "Hoogste min. rang: {rank}", - "totalMinRank": "Totale min. rang som: {total}", - "groupCount": "{count} groepen", - "rankCount": "{count} rangen", - "missingDeps": "{count} ontbrekende afhankelijkheden", - "dependsOn": "afhankelijk van", - "notFound": "niet gevonden", - "missing": "(ontbreekt)", - "rank": "Rang", - "count": "Aantal", - "searchPermission": "Zoek permissies…", - "search": "Zoeken", - "manage": "Beheer", - "importSelection": "Importeer selectie", - "noGroup": "Geen groep", - "allGroups": "Alle groepen", - "perGroup": "Permissies per groep", - "perRank": "Permissies per rang", - "rankOverviewHint": "Alle permissies gegroepeerd per rang.", - "tabOverview": "Overzicht", - "tabManage": "Beheer", - "tabImport": "Importeren / Exporteren", - "tabRanks": "Rangenoverzicht", - "tabPresets": "Voorinstellingen", - "tabTest": "Test", - "tabAudit": "Auditlog", - "importPermissions": "Permissies importeren", - "importHint": "Plak een JSON-array met permissie-objecten. Formaat: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Plak JSON hier…", - "import": "Importeren", - "exportTitle": "Permissies exporteren", - "exportHint": "Exporteer alle permissies als JSON voor backup of bulkbewerking.", - "export": "Exporteer JSON", - "copy": "Kopiëren", - "copied": "Gekopieerd!", - "presets": "Permissie-presets", - "presetsHint": "Pas een vooraf gedefinieerde set permissies toe voor veelvoorkomende staffrollen.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basis moderatie tools: gebruikers zoeken, bans, CFH afhandeling, chatlogs.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Volledige admin-toegang: gebruikers, kamers, nieuws, instellingen, winkel, events, radio & meer.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Volledige toegang tot alle functies inclusief permissiebeheer en asset-import.", - "applyPreset": "Pas preset toe", - "clearAll": "Verwijder alle permissies", - "testTitle": "Test rangtoegang", - "testHint": "Voer een rangnummer in om te zien welke permissies zouden worden toegekend.", - "test": "Test", - "auditTitle": "Permissie auditlog", - "auditHint": "Alle wijzigingen aan housekeeping permissies worden gelogd.", - "auditLogsAt": "Auditlogs zijn beschikbaar op de Auditlog-pagina.", - "viewAuditLogs": "Bekijk auditlogs", - "auditTime": "Tijd", - "auditUser": "Gebruiker", - "auditAction": "Actie", - "auditTarget": "Doel", - "save": "Opslaan", - "importTitle": "Permissies importeren", - "legacyBannerTitle": "Gebruik Permissions om te bepalen wie wat mag", - "legacyBannerBody": "Dit archief bestuurt de site niet. Open Permissions om toegang voor rangen te geven of in te trekken.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Bewerken hier is expres uitgeschakeld. Wijzig toegang alleen in Permissions.", - "tabCompare": "ACL vergelijking", - "tabExportOnly": "Exporteer archief", - "compareHint": "Vergelijkt legacy housekeeping min-rank rijen met live ACL rank_* grants (laagste rang met de slug).", - "compareAligned": "{count} uitgelijnd", - "compareMissingAcl": "{count} ontbreekt in ACL", - "compareMismatch": "{count} rang mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rang", - "colStatus": "Status", - "statusAligned": "Uitgelijnd", - "statusMissingAcl": "Ontbreekt in ACL", - "statusMismatch": "Rang verschilt", - "exportOnlyHint": "Schrijven is uitgeschakeld. Je kunt de legacy-tabel nog exporteren voor archief." - }, - "rooms": { - "title": "Kamers", - "subtitle": "Zoeken en beheren van hotelkamers", - "search": "Zoeken", - "searchPlaceholder": "Zoeken op naam, eigenaar of ID…", - "searchResults": "{count, plural, one {# kamer} other {# kamers}} gevonden voor \"{query}\"", - "noResults": "Geen kamers gevonden", - "colId": "ID", - "colName": "Naam", - "colOwner": "Eigenaar", - "colUsers": "Gebruikers", - "colState": "Status", - "colCategory": "Categorie", - "colCreated": "Aangemaakt", - "colActions": "Acties", - "stateOpen": "Open", - "stateClosed": "Gesloten", - "stateLocked": "Afgesloten", - "stateInvisible": "Onzichtbaar", - "detail": { - "title": "Kamer: {name}", - "subtitle": "Eigendom van {owner}", - "overview": "Overzicht", - "actions": "Acties", - "description": "Beschrijving", - "noDescription": "Geen beschrijving", - "owner": "Eigenaar", - "users": "Gebruikers online", - "maxUsers": "Max. gebruikers", - "category": "Categorie", - "state": "Status", - "tags": "Tags", - "noTags": "Geen tags", - "created": "Aangemaakt", - "deleteRoom": "Kamer verwijderen", - "confirmDelete": "Kamer \"{name}\" verwijderen? Dit kan niet ongedaan worden gemaakt.", - "enterRoom": "Kamer betreden", - "changeOwner": "Eigenaar wijzigen", - "changeOwnerPlaceholder": "Nieuwe eigenaar gebruikersnaam" - } - }, - "emailTemplates": { - "title": "E-mailsjablonen", - "subtitle": "Beheer transactionele e-mailsjablonen", - "newTemplate": "+ Nieuw sjabloon", - "edit": "Bewerken", - "delete": "Verwijderen", - "noTemplates": "Nog geen e-mailsjablonen", - "confirmDelete": "Sjabloon \"{name}\" verwijderen?", - "colId": "ID", - "colName": "Naam", - "colSubject": "Onderwerp", - "colKey": "Sleutel", - "colUpdated": "Bijgewerkt", - "colActions": "Acties", - "form": { - "name": "Naam", - "namePlaceholder": "Bijv. Welkomst e-mail", - "key": "Sleutel", - "keyPlaceholder": "Bijv. welkomst_email", - "subject": "Onderwerp", - "subjectPlaceholder": "E-mail onderwerpregel", - "body": "Inhoud (HTML)", - "bodyPlaceholder": "

Beste {username},

", - "variables": "Beschikbare variabelen", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Sjabloon opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren" - } - }, - "theme": { - "title": "Thema", - "subtitle": "Pas het uiterlijk van het CMS aan", - "presets": "Voorinstellingen", - "colours": "Kleuren", - "css": "CSS", - "presetsTitle": "Thema voorinstellingen", - "presetsSubtitle": "Kies een vooraf gebouwd kleurenschema", - "applyPreset": "Toepassen", - "customiseTitle": "Aangepaste kleuren", - "primary": "Primair", - "secondary": "Secundair", - "accent": "Accent", - "background": "Achtergrond", - "surface": "Oppervlak", - "text": "Tekst", - "saveColours": "Kleuren opslaan", - "savingColours": "Opslaan…", - "cssTitle": "Aangepaste CSS", - "cssSubtitle": "Voeg aangepaste CSS toe om themastijlen te overschrijven", - "cssPlaceholder": "/* Jouw aangepaste CSS hier */", - "saveCss": "CSS opslaan", - "savingCss": "Opslaan…", - "reset": "Standaardwaarden herstellen", - "confirmReset": "Thema terugzetten naar standaardwaarden?" - }, - "media": { - "title": "Mediabibliotheek", - "subtitle": "Upload en beheer mediabestanden", - "upload": "Uploaden", - "uploadTitle": "Bestand uploaden", - "uploadSubtitle": "Sleep of klik om te uploaden", - "uploadButton": "Bestand kiezen", - "uploading": "Uploaden…", - "noFiles": "Nog geen mediabestanden", - "delete": "Verwijderen", - "confirmDelete": "Dit bestand permanent verwijderen?", - "search": "Zoeken", - "searchPlaceholder": "Zoeken op bestandsnaam…", - "colPreview": "Voorbeeld", - "colName": "Naam", - "colSize": "Grootte", - "colType": "Type", - "colUploaded": "Geüpload", - "colActions": "Acties", - "copyUrl": "URL kopiëren", - "urlCopied": "URL naar klembord gekopieerd" - }, - "favicon": { - "title": "Favicon", - "subtitle": "Upload en beheer de favicon van de site", - "current": "Huidige favicon", - "uploadLabel": "Favicon uploaden", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO of SVG. Max 2MB.", - "upload": "Uploaden", - "uploading": "Bezig met uploaden…", - "delete": "Verwijderen", - "deleting": "Bezig met verwijderen…", - "cancel": "Annuleren", - "saved": "Favicon succesvol opgeslagen!", - "deleted": "Favicon succesvol verwijderd!", - "error": "Er is iets misgegaan", - "confirmDelete": "Favicon verwijderen? De site zal geen aangepaste favicon meer tonen.", - "generator": { - "title": "Favicon genereren", - "text": "Tekst", - "bgColor": "Achtergrondkleur", - "textColor": "Tekstkleur", - "rounded": "Afgeronde hoeken", - "save": "Opslaan als favicon" - } - }, - "settings": { - "title": "CMS-instellingen", - "subtitle": "Beheer sleutel/waarde CMS-configuratie", - "addSetting": "Instelling toevoegen", - "edit": "Bewerken", - "delete": "Verwijderen", - "noSettings": "Geen instellingen gevonden", - "confirmDelete": "Instelling \"{key}\" verwijderen?", - "keysInDatabase": "{count} sleutels in de database", - "managedInForm": "{count} beheerd in het formulier", - "documented": "{count} gedocumenteerd", - "saved": "Instellingen opgeslagen.", - "saveFailed": "Instellingen opslaan mislukt.", - "saveSettings": "Instellingen opslaan", - "viewOnly": "Je kunt instellingen bekijken, maar hebt bewerkingsrechten nodig.", - "colKey": "Sleutel", - "colValue": "Waarde", - "colUpdated": "Bijgewerkt", - "colActions": "Acties", - "form": { - "key": "Sleutel", - "keyPlaceholder": "Bijv. hotel_naam", - "value": "Waarde", - "valuePlaceholder": "Instellingswaarde", - "save": "Instelling opslaan", - "saving": "Opslaan…", - "cancel": "Annuleren" - } - }, - "import": { - "title": "Import", - "subtitle": "Importeer assets van externe bronnen naar je hotel.", - "badges": "Badges", - "badgesDescription": "Importeer en beheer badge-assets van externe bronnen.", - "furni": "Meubels", - "furniDescription": "Importeer meubeldefinities, SWF-bestanden en iconen.", - "clothing": "Kleding", - "clothingDescription": "Importeer kleding en wearables voor avatars.", - "effects": "Effecten", - "effectsDescription": "Importeer avatar-effecten en animaties.", - "pets": "Huisdieren", - "petsDescription": "Importeer huisdiergegevens en iconen.", - "clone": "Klonen", - "cloneDescription": "Kloon bestaande items van de ene bron naar de andere.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro-bundles en iconen direct zonder SWF-conversie.", - "sync": "Auto-sync", - "syncDescription": "Importeer automatisch ontbrekende meubels van alle geconfigureerde bronnen.", - "repairIcons": "Iconen repareren", - "repairIconsDescription": "Download ontbrekende icoonbestanden voor meubels die al in de database staan.", - "audit": "Cataloguscontrole", - "auditDescription": "Scan je catalogus op ontbrekende items, kapotte verwijzingen en items die ontbreken in kloonbronnen." - }, - "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-vertalingen", - "description": "Bewerk de teksten op de website en in housekeeping. Opgeslagen wijzigingen worden bij de volgende paginalading toegepast en blijven behouden na deployments.", - "export": "JSON exporteren", - "saving": "Opslaan…", - "saveLocale": "{locale} opslaan", - "saved": "Vertalingen opgeslagen en toegepast.", - "readOnly": "Je kunt vertalingen bekijken en exporteren. Bewerken vereist toestemming om instellingen te wijzigen.", - "language": "Taal", - "coverage": "{total} sleutels · {missing} ontbreken · {identical} gelijk aan Engels", - "search": "Zoeken", - "searchPlaceholder": "Sleutel, vertaling of Engelse brontekst…", - "group": "Groep", - "allGroups": "Alle groepen", - "status": "Tonen", - "all": "Alle teksten", - "missing": "Ontbrekende vertalingen", - "identical": "Gelijk aan Engels", - "modified": "Niet-opgeslagen wijzigingen", - "fallbackHint": "Ontbrekende vertalingen gebruiken Engels. Identieke tekst kan bewust zijn gekozen. Laat de namen van variabelen tussen accolades ongewijzigd.", - "unsaved": "{count} niet-opgeslagen wijzigingen in deze taal", - "discard": "Wijzigingen verwerpen", - "discardConfirm": "Niet-opgeslagen wijzigingen in deze taal verwerpen?", - "fixErrors": "Corrigeer {count} ongeldige teksten voordat je opslaat.", - "noResults": "Geen teksten gevonden met deze filters.", - "source": "Engelse brontekst", - "missingPlaceholder": "Vertaling ontbreekt; Engels wordt gebruikt.", - "page": "Pagina {page} van {total} · {count} sleutels", - "previous": "Vorige", - "next": "Volgende", - "leaveWarning": "Je hebt niet-opgeslagen vertalingen. Deze pagina verlaten?", - "conflict": "Deze vertalingen zijn gewijzigd sinds je de editor opende. Exporteer je wijzigingen en herlaad de pagina voordat je opslaat.", - "unknownKey": "Onbekende vertaalsleutel: {key}", - "empty": "Vul een vertaling in voor {key} of verwerp deze wijziging.", - "invalid": "Ongeldige berichtsyntaxis in {key}. Controleer accolades en tekstopmaaktags.", - "variables": "Behoud dezelfde variabelenamen en tekstopmaaktags als de Engelse bron in {key}." - } - }, - "hubs": { - "newsMedia": "Nieuws & media", - "newsMediaSubtitle": "Artikelen, foto's, banners, advertenties en mediabibliotheek", - "siteContent": "Site-inhoud", - "siteContentSubtitle": "Navigatie, helpcentrum, boxen, tags en prefixes", - "engagement": "Betrokkenheid", - "engagementSubtitle": "Evenementen, polls en ondersteuningstickets", - "users": "Gebruikers", - "usersSubtitle": "Adresboek, online spelers, sollicitaties en teams", - "access": "Toegang & beveiliging", - "accessSubtitle": "Bans, IP, VPN, permissies en woordfilter", - "moderation": "Moderatie", - "moderationSubtitle": "Meldingen, acties en modteam", - "catalog": "Catalogus & rares", - "catalogSubtitle": "Catalogus, rares, badges, prestaties en geluiden", - "shop": "Winkel & betalingen", - "shopSubtitle": "Winkel, transacties, vouchers, abonnementen en kalender", - "radio": "Radio", - "radioSubtitle": "Stream, DJ-tools, embed en monitoring", - "settings": "Instellingen", - "settingsSubtitle": "CMS-configuratie, thema, onderhoud en gerelateerde tools", - "tools": "Hulpmiddelen", - "toolsSubtitle": "RCON, kamers, import en vertalingen", - "observability": "Observeerbaarheid", - "observabilitySubtitle": "Logs, analytics, DevOps en hotelmeldingen", - "tabs": { - "articles": "Artikelen", - "photos": "Foto's", - "banners": "Banners", - "ads": "Advertenties", - "media": "Media", - "navigator": "Navigator", - "help": "Ondersteuning", - "boxes": "Boxen", - "tags": "Tags", - "prefixes": "Voorvoegsels", - "events": "Evenementen", - "eventTypes": "Evenementtypen", - "polls": "Polls", - "tickets": "Supportbalie", - "helpTickets": "Helpcentrum", - "templates": "Sjablonen", - "directory": "Adresboek", - "multiAccounts": "Gekoppelde accounts", - "online": "Online", - "applications": "Sollicitaties", - "teams": "Teams", - "bans": "Verbanningen", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissies", - "wordFilter": "Woordfilter", - "overview": "Overzicht", - "actions": "Acties", - "cfh": "Moderatieverzoeken", - "team": "Team", - "catalogTab": "Catalogus", - "rares": "Zeldzame meubels", - "badges": "Badges", - "achievements": "Prestaties", - "sounds": "Geluiden", - "shopTab": "Winkel", - "transactions": "Transacties", - "vouchers": "Vouchers", - "subscriptions": "Abonnementen", - "calendar": "Kalender", - "history": "Geschiedenis", - "moderationTab": "Moderatie", - "monitoring": "Bewaking", - "settingsTab": "Instellingen", - "embed": "Insluiten", - "apiKeys": "API-sleutels", - "points": "Punten", - "ranks": "Rangen", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Thema", - "themeBuilder": "Thema Bouwer", - "maintenance": "Onderhoud", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "E-mail", - "housekeeping": "Permissie-archief", - "commando": "Operationeel centrum", - "rooms": "Kamers", - "import": "Importeren", - "studio": "Studio", - "importOverview": "Overzicht", - "importBadges": "Badges", - "importFurni": "Meubels", - "importUpload": "Uploaden", - "importClothing": "Kleding", - "importEffects": "Effecten", - "importPets": "Huisdieren", - "importClone": "Kloon", - "importSync": "Synchronisatie", - "importRepairIcons": "Pictogrammen repareren", - "importAudit": "Gegevenscontrole", - "translations": "Vertalingen", - "logs": "Logboeken", - "audit": "Wijzigingslogboek", - "chat": "Chat", - "commands": "Commando's", - "trades": "Ruiltransacties", - "analytics": "Statistieken", - "activity": "Activiteit", - "economy": "Economie", - "devops": "DevOps", - "errors": "Fouten", - "alerts": "Meldingen", - "toolsGroup": "Hulpmiddelen", - "ticketInbox": "Ontvangen tickets", - "cmsErrors": "CMS-fouten" - }, - "events": "Evenementen", - "eventsSubtitle": "Hotel-evenementen en evenementtypes", - "tickets": "Supportbalie", - "ticketsSubtitle": "Twee aparte wachtrijen: CMS support desk en publieke helpcenter-tickets", - "staffAccess": "Rangen & rechten", - "staffAccessSubtitle": "Staffrangen en live toegang. Archief is alleen vergelijken/exporteren.", - "analytics": "Statistieken", - "analyticsSubtitle": "Hotelactiviteit, retentie en economie", - "devops": "DevOps", - "devopsSubtitle": "Servicegezondheid en emulatorfouten", - "import": "Importeren", - "importSubtitle": "Meubels, badges, kleding en asset-tools" - }, - "tickets": { - "title": "CMS support desk", - "subtitle": "Interne CMS-tickets (assignee, prioriteit, staff-workflow). Niet hetzelfde als helpcenter-tickets van /help.", - "noTickets": "Geen actieve tickets", - "searchPlaceholder": "Zoek op onderwerp, gebruiker, categorie of ID…", - "presetActive": "Actief", - "statusOpen": "Open", - "statusInProgress": "Bezig", - "statusWaiting": "Wachtend", - "statusClosed": "Gesloten", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Prioriteit", - "colAssigned": "Toegewezen", - "colDate": "Datum", - "meta": "door {user} · {count} berichten · {category}", - "queueHint": "Deze wachtrij is de CMS support desk. Speler-helpcenter tickets staan onder Helpcentrum.", - "queueOtherCta": "Open helpcentrum-tickets", - "queueCounts": "Open hier: {here} · Helpcentrum: {other}", - "awaitingStaff": "Wacht op medewerkers", - "assignedMine": "Aan mij toegewezen", - "unassigned": "Niet toegewezen", - "assignedAny": "Toegewezen", - "lastReplyAge": "Sinds laatste antwoord", - "ageMinutes": "{count} min geleden", - "ageHours": "{count} uur geleden", - "ageDays": "{count} dagen geleden" - }, - "helpTickets": { - "title": "Helpcenter-tickets", - "subtitle": "Tickets die spelers openen op /help/tickets. Apart van de CMS support desk.", - "noTickets": "Geen open helpcentrum-tickets", - "searchPlaceholder": "Zoek op titel, gebruiker of ID…", - "presetOpen": "Open", - "presetAll": "Alle", - "statusOpen": "Open", - "statusClosed": "Gesloten", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "Gebruiker", - "colCreated": "Aangemaakt", - "colUpdated": "Bijgewerkt", - "meta": "door {user} · {count} antwoorden", - "backToList": "Terug naar lijst", - "threadTitle": "Gesprek", - "staffBadge": "Staff", - "replyPlaceholder": "Antwoord als staff…", - "replySubmit": "Antwoord versturen", - "replyHint": "Ctrl+Enter om te versturen.", - "closeSubmit": "Ticket sluiten", - "reopenSubmit": "Ticket heropenen", - "closedHint": "Dit ticket is gesloten.", - "actionsTitle": "Acties", - "requesterTitle": "Aanvrager", - "detailsTitle": "Details", - "rankLabel": "Rang {rank}", - "messageCountLabel": "Berichten", - "success": { - "replied": "Antwoord verzonden.", - "closed": "Ticket gesloten.", - "reopened": "Ticket heropend.", - "banLifted": "Verbanning opgeheven en ticket gesloten." - }, - "queueHint": "Deze wachtrij is het publieke helpcenter. CMS support desk tickets staan onder Supportbalie.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open hier: {here} · Supportbalie: {other}", - "liftBanSubmit": "Verbanning van aanvrager opheffen en sluiten", - "requesterBanned": "Aanvrager is verbannen" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / ondersteuningstickets", - "noTickets": "Geen CFH-tickets", - "searchPlaceholder": "Zoek op probleem, gebruiker of ID…", - "noDescription": "Geen beschrijving", - "roomMeta": "Kamer #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Opgelicht", - "stateClosed": "Gesloten", - "colId": "ID", - "colIssue": "Probleem", - "colSender": "Afzender", - "colReported": "Gerapporteerd", - "colMod": "Mod", - "colStatus": "Status" - }, - "analytics": { - "loadError": "Sommige analytics-queries zijn mislukt. Onderstaande cijfers kunnen onvolledig zijn — controleer de database en emulator-tabellen.", - "totalUsers": "Totaal gebruikers", - "onlineNow": "{count} nu online", - "weekRegistrations": "Registraties deze week", - "thisMonth": "{count} deze maand", - "activeRooms": "Actieve kamers", - "totalRooms": "{count} kamers totaal", - "weeklyActivity": "Wekelijkse activiteit", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registraties (30 dagen)", - "registrationsChartDescription": "Nieuwe gebruikersregistraties van de laatste 30 dagen", - "chatActivity": "Chatactiviteit", - "messagesLast7Days": "Berichten in de laatste 7 dagen", - "trades": "Trades", - "tradesLast7Days": "Trades in de laatste 7 dagen", - "retention": "Retentie", - "usersOnlineOverTotal": "Gebruikers online / totaal", - "activity": { - "chatMessages": "Chatberichten", - "commands": "Commando's", - "bans": "Bans", - "registrations": "Registraties", - "last7Days": "Laatste 7 dagen", - "dailyBreakdownTitle": "Dagelijkse uitsplitsing (7 dagen)", - "colDay": "Dag", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Meest actieve gebruikers (7 dagen)", - "noChatActivity": "Geen chatactiviteit", - "msgCount": "{count} msgs", - "userFallback": "Gebruiker #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in omloop", - "creditsDescription": "Totaal credits van alle gebruikers", - "pixelsInCirculation": "Pixels in omloop", - "pixelsDescription": "Totaal pixels van alle gebruikers", - "pointsInCirculation": "Punten in omloop", - "pointsDescription": "Totaal punten van alle gebruikers", - "weeklyTrades": "Wekelijkse trades", - "marketplaceListings": "{count} marketplace-advertenties", - "shopRevenueTitle": "Shopomzet (7d)", - "purchases": "Aankopen", - "creditsSpent": "Credits uitgegeven", - "pointsSpent": "Punten uitgegeven", - "marketplaceTitle": "Marketplace", - "activeListings": "Actieve advertenties", - "sold7d": "Verkocht (7d)", - "currencyDistributionTitle": "Valutaverdeling", - "credits": "Credits", - "pixels": "Pixels", - "points": "Punten", - "catalogSpendingTitle": "Catalogusuitgaven", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} punten" - }, - "peakHours": { - "title": "Piekuren", - "description": "Gebruikersactiviteit per dag & uur (laatste 7 dagen)", - "days": { - "mon": "ma", - "tue": "di", - "wed": "wo", - "thu": "do", - "fri": "vr", - "sat": "za", - "sun": "zo" - }, - "tooltip": "{day} {hour}:00 — {count} gebruikers", - "less": "Minder", - "more": "Meer" - } - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Adminmenu", - "subtitle": "Herschik en verberg zijbalkgroepen en -koppelingen. Routes en rechten blijven in code.", - "save": "Menu opslaan", - "saving": "Opslaan…", - "saved": "Adminmenu opgeslagen.", - "saveFailed": "Adminmenu kon niet worden opgeslagen.", - "reset": "Herstellen naar standaard", - "viewOnly": "Je kunt de menulay-out bekijken maar hebt rechten nodig voor het bewerken van instellingen om deze te wijzigen.", - "hint": "Dashboard en deze pagina blijven zichtbaar. ACL filtert nog steeds wat elke rang ziet.", - "moveUp": "Naar boven", - "moveDown": "Naar beneden", - "hideGroup": "Groep verbergen", - "showGroup": "Groep tonen", - "hideItem": "Item verbergen", - "showItem": "Item tonen", - "pinned": "Vastgezet" - }, - "cmsErrors": { - "firstSeen": "Eerste gebeurtenis in bewaarde gegevens", - "lastSeen": "Laatste gebeurtenis", - "affectedUsers": "Unieke geïdentificeerde gebruikers", - "unidentifiedEvents": "Gebeurtenissen zonder geverifieerde gebruikers-ID", - "metricsScope": "De tellingen gelden alleen voor de bewaarde gegevens die hier zijn geladen. Gebruikers worden uitsluitend geteld op basis van numerieke gebruikers-ID’s van de server; anonieme meldingen en browsermeldingen worden niet aan gebruikers gekoppeld.", - "assignedStaff": "Toegewezen aan medewerker #{id}", - "unassigned": "Niet toegewezen", - "assignSelf": "Aan mij toewijzen", - "clearAssignment": "Toewijzing verwijderen", - "openOperation": "Gerelateerd onderdeel openen", - "releaseOccurrences": "Gebeurtenissen per release", - "releaseScope": "Deze releases komen voor in de bewaarde gegevens. De eerste beschikbare gebeurtenis bewijst niet welke release de fout heeft geïntroduceerd.", - "releaseFilter": "Versie", - "allReleases": "Alle versies", - "period": "Periode", - "allRetained": "Alle bewaarde gebeurtenissen", - "last24h": "Afgelopen 24 uur", - "last7d": "Afgelopen 7 dagen", - "sort": "Volgorde", - "recentFirst": "Nieuwste eerst", - "frequentFirst": "Meest voorkomend eerst", - "filterScope": "Aantallen gelden voor passende bewaarde gebeurtenissen. Groepsstatus en nieuwste details blijven actueel over alle versies.", - "auditTrail": "Gerelateerde auditregels" - }, - "installation": { - "title": "Installatiediagnose", - "hint": "Alleen-lezen controles van deze installatie. Niet geverifieerd betekent onvoldoende bewijs; een instelling bewijst geen externe bereikbaarheid.", - "checked": "Gecontroleerd om {time} · controles voltooid in {ms} ms", - "recheck": "Opnieuw controleren", - "ok": "Controle geslaagd", - "failed": "Controle nodig", - "unknown": "Niet geverifieerd", - "missing": "Niet ingesteld", - "release": "Actieve versie", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Schrijfbare opslag", - "migrations": "Databasemigraties", - "worker": "Achtergrondworker", - "renderer": "Rendererinstellingen", - "registry": "Containerregister", - "releaseHint": "De volledige identificatie van de actieve build. Vergelijk installaties en kies een vorige image voor herstel.", - "databaseHint": "Verbindingscontrole en gemeten responstijd van SELECT 1.", - "redisHint": "Optioneel voor sommige pagina’s; vereist voor imports in de wachtrij.", - "emulatorHint": "Antwoord op de ingestelde emulatorping.", - "storageHint": "Lees- en schrijfrechten voor opslag, Nitro-assets en SWF-mappen.", - "migrationsHint": "Aantal meegeleverde migraties dat ontbreekt in de databasehistorie. Voer migraties uit via het releaseproces.", - "workerHint": "Laatste workersignaal in Redis. Ouder dan twee minuten vereist onderzoek; zonder signaal is niet vast te stellen of de worker actief is.", - "rendererHint": "De client gebruikt het ingestelde adres of standaard /nitro-client/. Open het spel apart om de weergave en assets te controleren.", - "registryHint": "Registergegevens staan in CI, niet in het CMS. Controleer de publicatietaak en onveranderlijke versietag in Gitea." - }, - "importHistory": { - "cancelled": "Geannuleerd", - "cancelFailed": "Annuleren kon niet worden aangevraagd. Probeer het opnieuw of vernieuw de geschiedenis.", - "cancelRequested": "Annulering aangevraagd. Het huidige item wordt afgerond; de resterende items worden niet gestart.", - "cancelHint": "Annuleren behoudt voltooide items en laat het huidige item afronden.", - "cancelRemaining": "Resterende items annuleren", - "historyLimit": "De 30 meest recent bijgewerkte taken worden getoond.", - "refreshHistory": "Geschiedenis vernieuwen", - "showMoreItems": "Nog 50 items tonen", - "uncertainOutcome": "Een onderbroken item heeft mogelijk al lokale gegevens gewijzigd. Het wordt niet opnieuw geprobeerd.", - "reviewLocalData": "Lokale gegevens controleren", - "ownerHistory": "Je imports en reparaties, nieuwste eerst. Herhalen voert voltooide of onzekere onderdelen nooit opnieuw uit.", - "previousPage": "Vorige", - "nextPage": "Volgende", - "page": "Pagina {page}" - }, - "operations": { - "title": "Aandacht nodig", - "hint": "Toegankelijke taken: imports uit je laatste 30 taken; fouten uit maximaal 1.000 bewaarde meldingen. Ouder werk kan buiten deze tellingen vallen.", - "empty": "Geen openstaande taken gevonden in de gecontroleerde gegevens.", - "errors": "Open CMS-foutgroepen", - "imports": "Je imports die controle nodig hebben", - "tickets": "Open ondersteuningstickets", - "publications": "Nieuwsconcepten", - "unavailable": "{source}: gegevens tijdelijk niet beschikbaar.", - "installation": "Installatiediagnose" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "De broncategorieën of aanbiedingen zijn gewijzigd. Maak een nieuw pakket met de actuele gegevens.", - "saveConflict": "Het pakket is gewijzigd. Laad het opnieuw voordat je opslaat.", - "publishConflict": "Het pakket is gewijzigd. Vernieuw het publicatievoorbeeld.", - "catalogChanged": "De catalogus is gewijzigd. Vernieuw het publicatievoorbeeld.", - "missing": "Cataloguspakket niet gevonden.", - "pageLimit": "Een pakket ondersteunt maximaal 200 categorieën, inclusief subcategorieën.", - "offerLimit": "Een pakket ondersteunt maximaal 500 aanbiedingen.", - "payloadLimit": "De pakketgegevens overschrijden de limiet van 8 MB.", - "membership": "Je kunt geen onderdelen aan het pakket toevoegen of eruit verwijderen.", - "hierarchy": "Je kunt de pakkethiërarchie niet wijzigen.", - "references": "Je kunt de meubelverwijzingen in het pakket niet wijzigen.", - "furnitureMissing": "Een meubel waarnaar het pakket verwijst bestaat niet meer.", - "auditWarning": "Pakket gepubliceerd, maar het schrijven naar het auditlog is mislukt.", - "hotelWarning": "Pakket gepubliceerd, maar de hotelupdate is niet afgeleverd.", - "exportWarning": "Pakket gepubliceerd, maar het plannen van de export is mislukt.", - "refreshWarning": "Pakket gepubliceerd. Vernieuw de pagina om de nieuwste catalogus te zien." - } - }, - "catalogPackagePreview": { - "title": "Catalogusvoorbeeld", - "hint": "Blader door de echte pagina’s en aanbiedingen van het pakket. Dit is een catalogusvoorbeeld, geen volledige weergave van de spelclient. Er worden geen aankopen gedaan.", - "search": "Categorieën of aanbiedingen zoeken", - "playerMode": "Spelerstoegang", - "rank": "Rang", - "club": "Club", - "vip": "VIP", - "externalParents": "Deze selectie is onderdeel van een grotere catalogus. Toegangsregels van bovenliggende categorieën buiten deze momentopname kunnen niet worden beoordeeld.", - "invalidHierarchy": "{count} pagina’s hebben een cyclische hiërarchie en kunnen niet worden geopend.", - "snapshotLimit": "Voorbeeld beperkt tot 200 pagina’s en 500 aanbiedingen.", - "restricted": "{count} pagina’s zijn verborgen door de gekozen toegangsinstellingen.", - "categories": "Cataloguscategorieën", - "noPages": "Deze momentopname bevat geen categorieën.", - "inaccessible": "Met deze instellingen zijn geen categorieën toegankelijk. Pas de spelerstoegang aan of schakel deze uit om het concept te bekijken.", - "noMatches": "Geen resultaten voor deze zoekopdracht.", - "offerCount": "{count} aanbiedingen", - "layout": "Indeling: {layout}", - "missingLayout": "Niet opgegeven", - "unsupportedLayout": "Deze indeling heeft geen eigen voorbeeld. Het raster toont de echte aanbiedingen; aangepaste onderdelen en afbeeldingen worden niet weergegeven.", - "loadingIcons": "Meubelpictogrammen laden…", - "assetsUnavailable": "Meubelgegevens zijn tijdelijk niet beschikbaar. De aanbiedingen blijven zichtbaar.", - "assetLimit": "Pictogrammen en meubelnamen zijn beperkt tot de eerste 200 item-ID’s in deze weergave.", - "emptyPage": "Deze categorie bevat geen directe aanbiedingen. Bekijk de subcategorieën.", - "missingIcon": "Pictogram niet beschikbaar", - "amount": "Aantal: {count}", - "bundle": "{count} meubeltypes", - "changed": "Gewijzigd ten opzichte van de opgeslagen beginversie", - "previous": "Vorige", - "next": "Volgende", - "page": "Pagina {page} van {total}", - "offerId": "Aanbieding #{id}", - "unknownFurniture": "Meubelnaam niet beschikbaar", - "selectOffer": "Selecteer een aanbieding om de prijs en meubelverwijzingen te bekijken.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamanten", - "pointsType": "Punten (type {type}):", - "free": "Gratis", - "specialPricing": "Speciale prijs: {credits} credits, {points} punten (type {type})", - "restrictedOffers": "{count} aanbiedingen in deze categorie vereisen een Club-lidmaatschap.", - "clubOffer": "Club-aanbieding" - }, - "actions": { - "saved": "Wijzigingen opgeslagen.", - "error": "De bewerking kon niet worden voltooid.", - "saving": "Bezig met opslaan…", - "saveError": "Opslaan mislukt. Je wijzigingen zijn behouden; probeer het opnieuw.", - "unsaved": "Niet-opgeslagen wijzigingen", - "leaveUnsaved": "Je hebt niet-opgeslagen wijzigingen. Wil je deze pagina verlaten?", - "preview": "Voorbeeld" - }, - "search": { - "furniture": "Meubels", - "catalog": "Cataloguscategorieën", - "tickets": "Supporttickets", - "loading": "Zoeken…", - "hint": "Voer een numeriek ID of minstens 2 tekens in, of kies een pagina.", - "retry": "Opnieuw proberen", - "description": "Zoek pagina’s, gebruikers, meubels, cataloguscategorieën, artikelen en supporttickets.", - "partialError": "Sommige resultaten konden niet worden geladen. Probeer opnieuw." - }, - "permissionPreview": { - "title": "Voorbeeld van roltoegang", - "description": "Bekijk CMS-toegang zonder een sessie te wijzigen of een gebruiker over te nemen.", - "back": "Terug naar rechten", - "role": "Rol", - "show": "Toegang bekijken", - "missing": "Selecteer een bestaande rol.", - "entryAllowed": "Toegang tot housekeeping toegestaan", - "entryDenied": "Geen toegang tot housekeeping: dashboardrecht ontbreekt", - "superAdmin": "Deze rang krijgt momenteel de rechten van de hoogste rang.", - "scope": "Dit voorbeeld toont één rol. Een gebruiker kan extra rollen hebben. Aangepaste navigatie kan toegestane onderdelen verbergen; specifieke gegevens en acties kunnen extra controles vereisen.", - "sections": "Onderdelen", - "allowed": "Toegestaan", - "denied": "Niet toegestaan", - "actions": "CMS-rechten", - "actionScope": "Een toegekend recht omzeilt geen controles op toegang, ranghiërarchie, eigendom of de specifieke actie.", - "granted": "Toegekend", - "notGranted": "Niet toegekend" - }, - "operationsCenter": { - "title": "Operatiecentrum", - "hint": "Volg je opgeslagen imports en reparaties en de gedeelde wachtrij voor catalogusexport.", - "syncTitle": "Bronsynchronisatie", - "syncHint": "Bronsynchronisatie wordt op de eigen pagina uitgevoerd. Er is hier geen opgeslagen geschiedenis of automatische herhaling van mislukte onderdelen. Catalogusexport toont de gedeelde wachtrij en het laatste resultaat; herhalen per onderdeel wordt niet ondersteund.", - "openSync": "Synchronisatie en export openen", - "openImports": "Meubelimports openen" - }, - "operationsExport": { - "title": "Catalogusrepository export", - "hint": "Automatische export van bundels, pictogrammen, gamedata, vertalingen en catalogus-SQL. De wachtrij en het laatste resultaat worden gedeeld tussen medewerkers.", - "loadError": "Exportstatus kon niet worden geladen", - "queueError": "Export kon niet worden ingepland", - "loading": "Laden…", - "disabled": "Export is uitgeschakeld. Open synchronisatie om de configuratie te bekijken.", - "active": "Wachten totdat {count} bewerking(en) voltooid zijn.", - "running": "Export wordt uitgevoerd…", - "pending": "{count} update(s) in de exportwachtrij.", - "idle": "Geen updates in de wachtrij.", - "lastCommit": "Laatst gepubliceerde commit:", - "lastAttempt": "Laatste poging: {date}", - "queuing": "Inplannen…", - "queue": "Nu exporteren / opnieuw proberen" - }, - "table": { - "views": { - "title": "Opgeslagen weergaven", - "hint": "Bewaar filters, sortering en kolommen in je account. Maximaal 20 weergaven per tabel.", - "saved": "Weergave opgeslagen", - "error": "Opgeslagen weergaven zijn tijdelijk niet beschikbaar. Probeer opnieuw.", - "retry": "Opnieuw", - "loading": "Weergaven laden...", - "empty": "Nog geen opgeslagen weergaven.", - "deleteNamed": "Verwijder {name}", - "delete": "Verwijderen", - "name": "Naam van weergave", - "replace": "Deze weergave vervangen", - "save": "Huidige weergave opslaan" - } - }, - "syncQueue": { - "preparing": "Synchronisatie voorbereiden...", - "queued": "Synchronisatie opgeslagen. Volg de voortgang in de geschiedenis hieronder.", - "start": "Synchronisatie starten", - "description": "Synchronisatie draait op de achtergrond. Voortgang en veilige nieuwe pogingen blijven beschikbaar in je importgeschiedenis.", - "failed": "Synchronisatie kon niet worden ingepland" - }, - "publicationPreflight": { - "affectedPages": "Betrokken openbare paginas", - "scheduleInvalid": "Kies een geldige datum. De eindtijd van een evenement moet na de begintijd liggen.", - "description": "Controles gebruiken de huidige formulierwaarden. Externe afbeeldingen en links worden niet op beschikbaarheid getest.", - "slugNormalized": "Het openbare adres gebruikt de hieronder getoonde genormaliseerde slug.", - "imageInvalid": "Gebruik een lokaal pad of een HTTP/HTTPS-afbeeldingsadres zonder inloggegevens.", - "imageMissing": "Geen omslagafbeelding geselecteerd. De pagina gebruikt de standaardafbeelding.", - "title": "Publicatiecontroles", - "ready": "Afbeelding, links en planning voldoen aan de lokale controles.", - "linksInvalid": "Controleer de links: alleen lokale, HTTP/HTTPS- en e-maillinks zijn toegestaan.", - "schedulePast": "De geselecteerde datum ligt in het verleden. Controleer deze voor publicatie.", - "previewHint": "Deze links tonen de huidige openbare paginas. Gebruik Voorbeeld voor niet-opgeslagen inhoud. De definitieve artikelslug kan een achtervoegsel krijgen als deze al bestaat." - }, - "performance": { - "title": "Prestaties van verzoeken", - "scope": "Servermetingen voor geauthenticeerde HK-API’s en geselecteerde openbare paginacomponenten. Kies hieronder een groep.", - "refresh": "Vernieuwen", - "shared": "Gedeelde diagnostiek via Redis.", - "local": "Lokale diagnostiek voor deze instantie; gewist bij herstart.", - "retention": "Maximaal 200 metingen per groep, één uur bewaard. Niet elk verzoek wordt gegarandeerd vastgelegd.", - "search": "Route of operatie-ID", - "sort": "Volgorde", - "slowest": "Langzaamste eerst", - "recent": "Nieuwste eerst", - "threshold": "Duurfilter", - "all": "Alle tijden", - "slow": "Minstens 1 seconde", - "explanation": "Databasetijd omvat afgeronde query’s en wachttijd op de pool. Externe tijd omvat alleen gemeten curl-downloads. Gelijktijdige oproepen kunnen samen langer duren dan het verzoek; deze waarden zijn geen afzonderlijke delen van het totaal.", - "empty": "Nog geen passende verzoeken. Gebruik het HK en vernieuw deze pagina.", - "database": "Database", - "external": "Gemeten downloads", - "calls": "{count} oproepen", - "failures": "{count} fouten", - "streaming": "Streamingantwoord: de meting stopt bij het aanmaken van het antwoord, niet aan het einde van de operatie.", - "operation": "Operatie-ID", - "kind": "Meetgroep", - "adminApi": "HK-API’s", - "publicPage": "Openbare pagina’s", - "applyFilters": "Filters toepassen", - "publicBoundary": "Openbare metingen omvatten de hoofdcomponent op de server voor /me, nieuws, profielen, evenementen en zoeken. Metadata, afzonderlijk gerenderde onderliggende componenten, netwerkoverdracht en browserweergave zijn uitgesloten. Componentresultaten zijn geen HTTP-statuscodes. Aanroepen tijdens de statische build zijn uitgesloten.", - "outcomes": { - "completed": "Component voltooid", - "failed": "Component mislukt", - "redirect": "Omleiding", - "not-found": "Pagina niet gevonden" - } - }, - "importProgress": { - "validating": "Lokale gegevens controleren", - "downloading": "Bestanden downloaden", - "converting": "Omzetten naar Nitro", - "checking_sources": "In ingestelde bronnen zoeken", - "writing_db": "SQL en catalogus opslaan", - "writing_furnidata": "Furnidata bijwerken", - "translating": "Vertalingen bijwerken", - "current": "Huidige fase: {phase}", - "last": "Laatste fase: {phase}", - "elapsed": "{seconds}s in deze fase", - "recovered": "Bundel hersteld via {source} · revisie {revision}. Classname, type en revisie komen overeen; identiteit van de bundel gecontroleerd.", - "recoveryHint": "Je kunt doorgaan. Als de oorspronkelijke bestanden ontbreken, zoekt de importeur in actieve bronnen naar dezelfde classname, hetzelfde type en dezelfde revisie en controleert daarna de Nitro-bundel. Ontbrekende bestanden kun je ook handmatig toevoegen." - } - }, - "mod": { - "title": "Moderatiepaneel", - "badge": "Mod", - "overviewTitle": "Moderator overzicht", - "overviewSubtitle": "CFH, snelle acties en bans zonder volledige admin-toegang.", - "shortcutsTitle": "Snelkoppelingen", - "nav": { - "overview": "Overzicht", - "cfh": "Call for Help", - "actions": "Snelle acties", - "bans": "Bans", - "fullAdmin": "Volledige admin", - "backToSite": "Terug naar site", - "tickets": "Supportbalie", - "helpTickets": "Helpcentrum", - "users": "Gebruikers", - "team": "Team" - }, - "usersTitle": "Spelers", - "usersSubtitle": "Opzoeken zonder e-mail of IP — gebruik full admin voor gevoelige velden.", - "usersEmpty": "Geen spelers gevonden", - "usersSearchPlaceholder": "Zoek username, motto of ID…", - "usersRank": "rank", - "usersPublicProfile": "Openbaar profiel", - "usersPiiNote": "E-mail, IP en valuta zijn verborgen in het mod-panel. Open full admin als je toegang hebt.", - "usersJoined": "Lid sinds", - "usersLastLogin": "Laatste login", - "usersLastOnline": "Laatst online", - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans vandaag", - "modsOnline": "Mods online", - "quickActions": "Snelle acties", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open CMS-tickets", - "openHelpTickets": "Open help-tickets", - "team": "Mod team", - "teamHint": "Online staff & werklast" - } - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Zoek furni, classnames, trefwoorden… (/)", - "results": "{count} resultaten", - "inDb": "in DB", - "inCatalog": "in catalogus", - "missingNitro": "ontbrekende nitro", - "globalTranslation": "Vertaling (globaal)", - "catalogTree": "Catalogus", - "source": "Furni-bron", - "officialSource": "(officieel)", - "type": "Type", - "allTypes": "Alle types", - "floorItems": "Vloeritems", - "wallItems": "Muuritems", - "category": "Categorie", - "allCategories": "Alle categorieën", - "status": "Status", - "allStatuses": "Alle statussen", - "imported": "Geïmporteerd", - "inCatalogStatus": "In catalogus", - "missingNitroStatus": "Ontbrekende nitro", - "sort": "Sorteer", - "defaultOrder": "Standaardvolgorde", - "nameAZ": "Naam A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Categorie", - "importedFirst": "Eerst geïmporteerd", - "notImportedFirst": "Eerst niet-geïmporteerd", - "noNitro": "{count} geen nitro", - "gridView": "Rasterweergave", - "listView": "Lijstweergave", - "selectAll": "Alles selecteren", - "selectedCount": "{count} geselecteerd", - "clear": "Wissen", - "translate": "Vertalen", - "noLanguages": "Geen talen", - "allLanguages": "Alle talen", - "languagesCount": "{count} talen", - "languages": "Talen", - "all": "Alles", - "none": "Geen", - "languageLabel": "Taal {lang}", - "translateAll": "Alles vertalen", - "translateAllTitle": "Vertaal de hele catalogus in alle talen (achteraf)", - "importAuto": "Importeer {count} auto", - "maintenance": { - "title": "Catalogus-onderhoud", - "description": "Dwing de meubeltabellen tot 100% consistentie met FurnitureData.json. Elke actie draait in een database-transactie en rolt terug bij een fout.", - "refresh": "Verversen", - "currentHealth": "Huidige status", - "itemsInBase": "{count} items in items_base", - "loading": "Laden…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite-afwijking", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalogus offer-afwijking", - "statDuplicateClassnames": "Dubbele classnames", - "hintDuplicateClassnames": "items_base item_name dubbelen", - "statDuplicateCatalogRows": "Dubbele catalogusrijen", - "hintDuplicateCatalogRows": "zelfde product twee keer op een pagina", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id wijkt af van furnidata", - "statDuplicateBcCatalogRows": "Dubbele BC-catalogusrijen", - "hintDuplicateBcCatalogRows": "zelfde product twee keer in builder club", - "statDuplicateCatalogPages": "Dubbele cataloguspagina's", - "hintDuplicateCatalogPages": "zelfde bijschrift onder dezelfde ouder (dubbele links)", - "optionSpriteId": "Herstel sprite_id", - "optionOfferId": "Herstel catalogus offer_id", - "optionRemoveDuplicates": "Verwijder dubbele (items + catalogus)", - "optionReconcile": "Verzoen FurnitureData ↔ DB", - "optionAlignIds": "Aligneer items_base-ID's naar FurnitureData", - "alignDescription": "Verplaatst elke items_base.id naar de FurnitureData sprite-id (bron van waarheid). Overschrijft alle refererende tabellen.", - "previewChanges": "Bekijk wijzigingen", - "plannedIdMoves": "Geplande ID-verplaatsingen: {moves}", - "newItemsInsert": "Nieuwe items om in te voegen: {inserted}", - "skipped": "Overgeslagen (id bezet): {list}", - "applyAlignment": "Pas uitlijning toe", - "fixEverythingTitle": "Alles herstellen", - "fixEverythingDescription": "Voert de geselecteerde reparaties in volgorde uit. Zware bewerking — maak eerst een backup.", - "alsoMergeDuplicatePages": "Voeg ook dubbele cataloguspagina's samen (dubbele links)", - "runSelected": "Voer geselecteerde uit", - "selectAtLeastOne": "Selecteer minstens één reparatie om uit te voeren", - "previewReady": "Voorbeeld klaar", - "previewFailed": "Voorbeeld mislukt", - "toast": { - "spriteFixed": "sprite_id hersteld", - "offerFixed": "catalogus offer_id hersteld", - "duplicatesRemoved": "Dubbele verwijderd (items + catalogus)", - "reconciled": "FurnitureData verzoend", - "aligned": "items_base-ID's uitgelijnd naar FurnitureData", - "allApplied": "Alle geselecteerde reparaties uitgevoerd", - "failed": "Mislukt" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "Geen ongelezen berichten", - "roomsUnavailable": "Kamers zijn tijdelijk niet beschikbaar. Open de community om het opnieuw te proberen.", - "eventDetails": "Evenement bekijken", - "allEvents": "Alle evenementen", - "eventTitle": "Op de agenda", - "noUpcomingEvents": "Er zijn nog geen nieuwe evenementen aangekondigd.", - "eventUpcoming": "Binnenkort", - "eventsUnavailable": "De agenda is tijdelijk niet beschikbaar. Open alle evenementen om het opnieuw te proberen.", - "messagesUnavailable": "Open je inbox om te kijken", - "eventOngoing": "Nu bezig", - "tasks": { - "title": "Te doen", - "support": "{count, plural, one {# ticket met een antwoord van de klantenservice} other {# tickets met antwoorden van de klantenservice}}", - "friends": "{count, plural, one {# vriendschapsverzoek om te bekijken} other {# vriendschapsverzoeken om te bekijken}}", - "event": "Je volgende aangemelde evenement: {title} · {date}", - "reward": "Je beloning voor uitnodigingen staat klaar", - "empty": "Alles is bijgewerkt. Er zijn geen acties nodig.", - "unavailable": "Sommige acties konden niet worden gecontroleerd. Beschikbare acties staan hierboven.", - "retry": "Opnieuw proberen", - "rewardUnavailable": "De voortgang van uitnodigingen is tijdelijk niet beschikbaar. Probeer het opnieuw." - } - }, - "search": { - "title": "Zoeken", - "subtitle": "Vind gebruikers, open kamers, nieuws en evenementen.", - "queryLabel": "Zoekterm", - "submit": "Zoeken", - "enterQuery": "Voer een zoekterm in voor gebruikers, kamers, nieuws en evenementen.", - "resultsFor": "Resultaten voor “{query}”", - "users": "Gebruikers", - "rooms": "Open kamers", - "news": "Nieuws", - "events": "Evenementen", - "loadError": "Deze resultaten konden niet worden geladen. Probeer het opnieuw.", - "empty": "Geen resultaten gevonden.", - "online": "Online", - "offline": "Offline", - "pagination": "Pagina’s voor {category}", - "previous": "Vorige", - "next": "Volgende", - "pageSummary": "Pagina {page} van {pages} · {total} resultaten" - } - }, - "toolbar": { - "home": "Home", - "reload": "Vernieuwen", - "fullscreen": "Volledig scherm", - "logout": "Uitloggen", - "onlineUsers": "Gebruikers online", - "emulatorOnline": "Emulator online", - "emulatorOffline": "Emulator offline", - "dragToMove": "Sleep om te verplaatsen", - "hide": "Werkbalk verbergen", - "fullscreenExit": "Volledig scherm afsluiten", - "show": "Werkbalk tonen", - "emulatorUnknown": "Emulatorstatus onbekend" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Bestandsdiagnostiek", - "preliminary": "Voorafgaande controle van adressen; inhoud wordt tijdens import gevalideerd.", - "http": "HTTP {status}", - "network": "Verbinding mislukt", - "timeout": "De bron antwoordde niet op tijd", - "invalidResponse": "De bron gaf een webpagina in plaats van een bestand", - "available": "Bestand gevonden; wacht op validatie", - "recover": "Origineel toevoegen en hervatten", - "recoveryHint": "Kies {file} (maximaal 50 MB). De identiteit wordt gecontroleerd. Mislukte items worden opnieuw geprobeerd; voltooide imports blijven behouden.", - "attach": "Kies het originele .nitro-bestand", - "working": "Valideren of hervatten...", - "attached": "Overeenkomend origineel toegevoegd", - "resume": "Mislukte imports hervatten met dit bestand", - "invalidFile": "Kies een overeenkomend origineel .nitro-bestand van maximaal 50 MB en probeer opnieuw.", - "resumeError": "Vernieuw de geschiedenis en gebruik de laatste poging; controleer het bestand en probeer opnieuw.", - "mismatchedFile": "Dit bestand hoort bij een ander meubel.", - "alreadyStarted": "Herstel is al gestart. Vernieuw de geschiedenis en gebruik de laatste poging.", - "notEligible": "Dit item kan niet met een bijlage worden hersteld." - }, - "completeness": { - "title": "Volledigheid en vervolgstappen", - "parts": { - "sql": "SQL-item", - "catalog": "Catalogusaanbod", - "furnidata": "Furnidata", - "icon": "Lokaal pictogram", - "nitro": "Nitro-bestand" - }, - "statuses": { - "present": "Aanwezig", - "missing": "Ontbreekt", - "unknown": "Niet gecontroleerd", - "conflict": "Controle nodig" - }, - "actions": { - "sql": "Importeer of herstel dit meubel om het ontbrekende itemrecord aan te maken.", - "catalog": "Importeer of herstel dit meubel om een aanbod met de automatische categorie en prijs toe te voegen.", - "furnidata": "Importeer of herstel dit meubel om de ontbrekende meubelgegevens toe te voegen.", - "icon": "Importeer of herstel dit meubel om het ontbrekende lokale pictogram op te halen.", - "nitro": "Importeer of herstel dit meubel om het bestand op te halen. Bij een bestaand item kun je ook .nitro opnieuw genereren.", - "recheck": "Controleer de lokale status opnieuw voordat je herstelt. Controleer de toegang tot lokale bestanden als het probleem aanhoudt.", - "audit": "Controleer dubbele records en overeenkomende sprite-ID’s en typen in Cataloguscontrole voordat je herstelt." - }, - "openAudit": "Open Cataloguscontrole om conflicten op te lossen", - "excludedConflicts": "{count, plural, one {# item moet worden gecontroleerd en is uitgesloten van deze import.} other {# items moeten worden gecontroleerd en zijn uitgesloten van deze import.}}" - }, - "preflight": { - "filterLabel": "Importcontroles filteren", - "filters": { - "all": "Alles ({count})", - "complete": "Aan te vullen ({count})", - "conflict": "Conflicten ({count})", - "verify": "Te controleren ({count})" - }, - "empty": "Geen meubels in deze groep.", - "actions": { - "complete": "Voorstel: bestaand meubel aanvullen", - "import": "Voorstel: nieuw meubel importeren", - "refresh": "Bestaand meubel is compleet; brongegevens vernieuwen", - "conflict": "Los conflicten in lokale gegevens op voordat je importeert", - "verify": "Controleer de niet-geverifieerde onderdelen voordat je doorgaat" - }, - "missing": "Ontbreekt: {parts}", - "unknown": "Niet geverifieerd: {parts}" - } - } - }, - "publicData": { - "loadError": "Dit onderdeel kon niet worden geladen. Probeer het opnieuw.", - "retry": "Opnieuw proberen", - "unavailable": "Niet beschikbaar" - } + "draftRecovery": { + "ready": "Een herstelkopie wordt 7 dagen in deze browser bewaard.", + "saved": "De herstelkopie is voor 7 dagen in deze browser opgeslagen.", + "unavailable": "Herstel via de browser is niet beschikbaar. Houd deze pagina open totdat je wijzigingen zijn opgeslagen.", + "found": "Er is een herstelkopie beschikbaar in deze browser, opgeslagen op", + "restore": "Browserkopie herstellen", + "discard": "Browserkopie verwijderen", + "confirmRestore": "Het huidige formulier vervangen door de herstelkopie uit de browser? Controleer de inhoud voordat je opslaat.", + "confirmDiscard": "Deze herstelkopie uit de browser verwijderen? Het huidige formulier blijft ongewijzigd." + }, + "nav": { + "home": "Home", + "community": "Community", + "articles": "Artikelen", + "photos": "Foto's", + "staff": "Team", + "rankings": "Ranglijsten", + "guilds": "Gildes", + "events": "Evenementen", + "polls": "Peilingen", + "leaderboards": "Klassementen", + "rareValues": "Zeldzame waarden", + "shop": "Winkel", + "market": "Markt", + "assistance": "Assistentie", + "helpCenter": "Helpcentrum", + "myTickets": "Mijn tickets", + "badges": "Badges", + "radio": "Radio", + "friends": "Vrienden", + "messages": "Berichten", + "admin": "Beheer", + "openMenu": "Menu openen", + "closeMenu": "Menu sluiten", + "drawBadge": "Badge tekenen", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} online", + "nitroClient": "Nitro client", + "tagline": "Een online virtuele wereld waar je je eigen avatar kunt maken, vrienden kunt maken, kunt chatten, kamers kunt maken en nog veel meer! Leeftijdsvereiste: 18+", + "login": "Inloggen", + "or": "Of", + "createAccount": "Account aanmaken" + }, + "footer": { + "copyright": "© {year} - {hotel} is een niet-commercieel educatief project" + }, + "emails": { + "verify": { + "subject": "Verifieer je e-mail · {hotel}", + "heading": "Verifieer je e-mail", + "body": "Welkom bij {hotel}! Bevestig dit e-mailadres om je account af te ronden.", + "button": "E-mail verifiëren", + "fallback": "Werkt de knop niet? Plak dan deze link in je browser:" + } + }, + "pages": { + "error": { + "code": "Fout", + "title": "Er ging iets mis", + "subtitle": "Het hotel liep tegen een onverwachte snag aan.", + "body": "Probeer het zo opnieuw. Blijft het probleem? Neem contact op met de staff en noem de referentie hieronder.", + "tryAgain": "Opnieuw proberen", + "backHome": "Terug naar home", + "reference": "Referentie: {digest}" + }, + "notFound": { + "code": "404", + "title": "Pagina niet gevonden", + "subtitle": "Deze kamer bestaat niet — of de meubels zijn verplaatst.", + "body": "Controleer de link, of ga terug naar de lobby.", + "backHome": "Terug naar home", + "latestNews": "Laatste nieuws" + }, + "staff": { + "title": "Team", + "subtitle": "Het team achter het hotel", + "ranksTitle": "Rangen", + "ranksSubtitle": "Waar elk deel van het team voor zorgt", + "membersTitle": "Teamleden", + "membersEmptySubtitle": "Momenteel niemand om te laten zien", + "membersSubtitle": "{count, plural, one {# lid houdt de boel draaiende} other {# leden houden de boel draaiende}}", + "emptyState": "Geen teamleden om te tonen.", + "colUsername": "Gebruikersnaam", + "colRank": "Rang", + "colMotto": "Motto", + "viewProfile": "View profile", + "noMotto": "No motto set", + "loadError": "Unable to load staff members. Please try again shortly.", + "retry": "Try again" + }, + "leaderboard": { + "title": "Klassement", + "subtitle": "Top 20 spelers op {currency}", + "tab_credits": "Credits", + "tab_diamonds": "Diamanten", + "tab_duckets": "Duckets", + "tab_achievement": "Prestaties", + "tab_respects": "Respect", + "tab_onlinetime": "Online tijd", + "emptyState": "Nog geen klassementen om te tonen.", + "colAvatar": "Avatar", + "colPlayer": "Speler" + }, + "friends": { + "title": "Vrienden", + "emptySubtitle": "Je hebt nog geen vrienden toegevoegd", + "subtitle": "{count, plural, one {Je hebt # vriend} other {Je hebt # vrienden}}", + "emptyState": "Voeg vrienden toe in het hotel en ze verschijnen hier.", + "noMotto": "Geen motto", + "remove": "Verwijderen", + "success": { + "removed": "Vriend verwijderd." + }, + "errors": { + "notFound": "Die vriendschap is niet gevonden.", + "invalid": "Ongeldige vriend.", + "error": "Er ging iets mis. Probeer het opnieuw." + } + }, + "messages": { + "title": "Berichten", + "subtitle": "Vriendschapsverzoeken, offline inbox en berichten naar vrienden", + "requestsTitle": "Vriendschapsverzoeken", + "requestsEmptySubtitle": "Niemand heeft nog gevraagd om je vriend te zijn", + "requestsSubtitle": "{count, plural, one {# openstaand verzoek} other {# openstaande verzoeken}}", + "requestsEmptyState": "Geen openstaande vriendschapsverzoeken.", + "wantsToBeFriend": "wil je vriend zijn.", + "accept": "Accepteren", + "decline": "Weigeren", + "offlineTitle": "Offline berichten", + "offlineEmptySubtitle": "Je inbox is leeg", + "offlineSubtitle": "{count, plural, one {# bericht ontvangen} other {# berichten ontvangen}}", + "offlineEmptyState": "Je hebt geen offline berichten.", + "composeTitle": "Offline bericht sturen", + "composeSubtitle": "Afgeleverd in de hotel messenger wanneer je vriend offline is", + "composeEmptyFriends": "Voeg vrienden toe in het hotel om offline berichten te sturen.", + "composeFriendLabel": "Vriend", + "composeFriendPlaceholder": "Kies een vriend", + "composeMessageLabel": "Bericht", + "composeMessagePlaceholder": "Schrijf je bericht (max. 500 tekens)…", + "composeSend": "Bericht versturen", + "unknownUser": "Gebruiker #{id}", + "success": { + "accepted": "Vriendschapsverzoek geaccepteerd.", + "declined": "Vriendschapsverzoek geweigerd.", + "sent": "Offline bericht verstuurd." + }, + "errors": { + "notFound": "Dat vriendschapsverzoek is niet gevonden.", + "unauthorized": "Je kunt dit vriendschapsverzoek niet behandelen.", + "invalid": "Ongeldig vriendschapsverzoek.", + "error": "Er ging iets mis. Probeer het opnieuw.", + "notFriend": "Je kunt alleen vrienden berichten.", + "emptyMessage": "Schrijf een bericht.", + "rateLimited": "Te veel berichten. Wacht even en probeer opnieuw." + } + }, + "sessions": { + "title": "Loginactiviteit", + "subtitle": "Recente aanmeldingen en mislukte pogingen op je account", + "recentTitle": "Recente aanmeldingen", + "recentEmpty": "Nog geen aanmeldingen geregistreerd.", + "colWhen": "Wanneer", + "colIp": "IP", + "colDevice": "Apparaat", + "failedTitle": "Mislukte pogingen", + "failedSubtitle": "Verkeerd wachtwoord voor je gebruikersnaam", + "unknownDevice": "Onbekend apparaat", + "signOutEverywhereTitle": "Overal uitloggen", + "signOutEverywhereDescription": "Beëindigt alle websitesessies op elk apparaat. Je moet hier ook opnieuw inloggen.", + "signOutEverywhereButton": "Alle sessies beëindigen", + "successSignedOutAll": "Alle sessies zijn beëindigd." + }, + "profile": { + "noMotto": "Geen motto", + "statRank": "Rang", + "statCredits": "Credits", + "statRegistered": "Geregistreerd", + "badgesTitle": "Badges", + "badgesEmpty": "Nog geen badges.", + "photosTitle": "Foto's", + "photosEmpty": "Nog geen foto's.", + "guestbookTitle": "Gastenboek", + "guestbookSubtitle": "Berichten op {username}'s muur", + "leaveMessage": "Bericht achterlaten", + "guestbookPlaceholder": "Schrijf iets op {username}'s gastenboek…", + "post": "Plaatsen", + "loginToPost": "Log in om een gastenboekbericht achter te laten.", + "guestbookEmpty": "Nog geen gastenboekberichten.", + "unknownUser": "Gebruiker #{id}", + "statDuckets": "Duckets", + "statDiamonds": "Diamanten", + "walletTitle": "Portemonnee", + "friendsTitle": "Vrienden", + "friendsSubtitle": "Mensen in het hotel waar ze mee omgaan", + "friendsEmpty": "Geen vrienden om te tonen.", + "roomsTitle": "Kamers", + "roomsSubtitle": "Kamers die ze bezitten", + "roomsEmpty": "Geen kamers om te tonen.", + "roomUntitled": "Naamloze kamer", + "addFriend": "Vriend toevoegen", + "alreadyFriends": "Jullie zijn vrienden", + "requestPending": "Verzoek in behandeling", + "respondInMessages": "Reageer in Berichten", + "success": { + "sent": "Vriendschapsverzoek verzonden.", + "guestbook": "Gastenboekbericht geplaatst." + }, + "errors": { + "self": "Je kunt jezelf geen vriendschapsverzoek sturen.", + "alreadyFriends": "Jullie zijn al vrienden.", + "alreadyPending": "Je hebt deze gebruiker al een verzoek gestuurd.", + "incomingPending": "Deze gebruiker heeft jou al een verzoek gestuurd — accepteer of weiger het in Berichten.", + "empty": "Schrijf een bericht voordat je plaatst.", + "moderated": "Dat bericht is geblokkeerd door moderatie.", + "ratelimit": "Je plaatst te snel. Wacht even en probeer opnieuw.", + "invalid": "Ongeldig verzoek.", + "error": "Er ging iets mis. Probeer het opnieuw." + }, + "privacy": { + "title": "Zichtbaarheid van profiel", + "hint": "Kies wat bezoekers op je openbare profiel kunnen zien. Je e-mailadres wordt hier nooit getoond. Je blijft zelf je gegevens zien. Deze instellingen gelden voor de profielpagina.", + "wallet": "Toon mijn portemonnee", + "online": "Toon mijn online status", + "friends": "Toon mijn vrienden", + "photos": "Toon mijn foto’s", + "registered": "Toon mijn registratiedatum", + "save": "Zichtbaarheid opslaan", + "saved": "Profielzichtbaarheid opgeslagen.", + "error": "De profielzichtbaarheid kon niet worden geladen of opgeslagen. Probeer het opnieuw.", + "ownerHint": "Je bekijkt je eigen gegevens, inclusief verborgen onderdelen." + }, + "morePhotos": "Meer foto’s tonen (maximaal de 24 nieuwste)", + "openPhoto": "Open de volledige foto in een nieuw tabblad", + "photosUnavailable": "Foto’s konden niet worden geladen. Probeer het later opnieuw.", + "noRoomPreview": "Preview unavailable", + "viewRoom": "View room", + "roomStates": { + "open": "Open", + "locked": "Doorbell", + "password": "Password", + "invisible": "Hidden" + } + }, + "rankings": { + "title": "Rankings", + "subtitle": "De top 12 spelers gerangschikt op credits", + "emptyState": "Nog geen spelers om te rangschikken." + }, + "home": { + "welcome": "Welkom bij {hotelName}", + "welcomeSubtitle": "Je retro hotel, nu mogelijk gemaakt door Next.js", + "welcomeBody": "Rondhangen, meubels verzamelen en vrienden ontmoeten.", + "enterHotel": "{hotelName} betreden", + "onlineFriends": "Online vrienden", + "noFriendsOnline": "Geen vrienden online", + "register": "NU REGISTREREN", + "joinNow": "Word vandaag nog lid van {hotelName}!", + "recentUsers": "Recente gebruikers", + "recentPhotos": "Recente foto's", + "latestNews": "Laatste nieuws", + "newsTitle": "Laatste nieuws", + "newsSubtitle": "Vers van het hotel", + "allNews": "Al het nieuws →", + "allUsers": "Community →", + "noArticles": "Nog geen artikelen.", + "noPhotos": "Nog geen foto's.", + "noUsers": "Geen gebruikers online", + "statsOnline": "Online", + "statsCitizens": "Burgers", + "statsRooms": "Kamers", + "statsArticles": "Artikelen", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Maak je eigen unieke look", + "featuresFurniture": "Meubels", + "featuresFurnitureDesc": "Decoreer kamers met items", + "featuresCommunity": "Community", + "featuresCommunityDesc": "Maak vrienden en chat", + "featuresGames": "Spelletjes", + "featuresGamesDesc": "Speel mee en heb plezier", + "latestArticle": "Laatste artikel", + "latestUsers": "Nieuwste burgers ({count} totaal)", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Nieuws", + "subtitle": "De laatste aankondigingen, evenementen en updates van het hotel", + "noArticles": "Nog geen artikelen.", + "searchLabel": "Nieuws zoeken", + "orderLabel": "Volgorde", + "newest": "Nieuwste eerst", + "oldest": "Oudste eerst", + "apply": "Toepassen", + "loadError": "Het nieuws kon niet worden geladen. Probeer het opnieuw.", + "pagination": "Nieuwspagina's", + "previous": "Vorige", + "next": "Volgende", + "pageSummary": "Pagina {page} van {pages} · {total} artikelen" + }, + "article": { + "backToNews": "← Nieuws", + "reactionsTitle": "Reacties", + "reactionsSubtitle": "Laat ons weten wat je ervan vindt", + "reaction": { + "like": "Vind ik leuk", + "love": "Hou ervan", + "wow": "Wauw" + }, + "removeReaction": "Klik om je reactie te verwijderen", + "reactWith": "Reageer met {reaction}", + "noReactions": "Nog geen reacties.", + "logIn": "Log in", + "toReact": "om te reageren.", + "commentsTitle": "Reacties", + "commentsSubtitle": "Doe mee met het gesprek", + "commentsCount": "{count} tot nu toe", + "noComments": "Nog geen reacties. Wees de eerste om te reageren.", + "userNumber": "Gebruiker #{id}", + "addComment": "Reactie toevoegen", + "commentPlaceholder": "Schrijf je reactie…", + "postComment": "Reactie plaatsen", + "toComment": "om een reactie achter te laten.", + "success": { + "posted": "Reactie geplaatst.", + "reaction": "Reactie bijgewerkt." + }, + "errors": { + "empty": "Schrijf een reactie voordat je plaatst.", + "moderated": "Die reactie is geblokkeerd door moderatie.", + "ratelimit": "Je reageert te snel. Wacht even en probeer opnieuw.", + "invalid": "Ongeldige reactie.", + "notFound": "Dat artikel is niet gevonden.", + "error": "Er ging iets mis. Probeer het opnieuw." + } + }, + "photos": { + "title": "Foto's", + "subtitle": "De laatste snapshots gemaakt in het hotel", + "noPhotos": "Nog geen foto's.", + "photoAlt": "Foto door gebruiker #{id}", + "byUser": "door gebruiker #{id}" + }, + "badges": { + "title": "Badges", + "subtitle": "De badges die je kunt verdienen en showen in het hotel", + "noBadges": "Nog geen badges beschikbaar." + }, + "community": { + "title": "Community", + "subtitle": "Alles wat er gebeurt in het hotel op één plek", + "open": "Open →", + "links": { + "rankings": { + "title": "Rankings", + "text": "Bekijk de rijkste spelers in het hotel, gerangschikt op credits." + }, + "staff": { + "title": "Team", + "text": "Ontmoet het team dat het hotel elke dag draaiende houdt." + }, + "news": { + "title": "Nieuws", + "text": "De laatste aankondigingen, evenementen en updates." + }, + "photos": { + "title": "Foto's", + "text": "Snapshots gedeeld door de community van overal in het hotel." + }, + "guilds": { + "title": "Gildes", + "text": "Bekijk de groepen die spelers hebben gemaakt en waar ze lid van zijn." + }, + "leaderboards": { + "title": "Klassementen", + "text": "Wie staat er bovenaan dit seizoen in de hotelstatistieken." + } + } + }, + "guilds": { + "title": "Gildes", + "subtitle": "Bekijk de groepen die spelers hebben gemaakt en waar ze lid van zijn", + "empty": "Nog geen gildes.", + "unnamedGuild": "Naamloos gilde", + "noDescription": "Geen beschrijving" + }, + "guild": { + "allGuilds": "← Alle gildes", + "unnamedGuild": "Naamloos gilde", + "noDescription": "Geen beschrijving", + "memberSingular": "Lid", + "memberPlural": "Leden", + "founded": "Opgericht", + "forumLink": "Forum →", + "discussion": "Discussie", + "membersTitle": "Leden", + "memberLowerSingular": "lid", + "memberLowerPlural": "leden", + "noMembers": "Geen leden.", + "owner": "Eigenaar", + "noMotto": "Geen motto" + }, + "guildForum": { + "backToGuild": "← Terug naar gilde", + "unnamedGuild": "Naamloos gilde", + "forumTitle": "{guild} — Forum", + "threadSingular": "discussie", + "threadPlural": "discussies", + "newThread": "+ Nieuwe discussie", + "empty": "Nog geen discussies in dit forum.", + "colSubject": "Onderwerp", + "colAuthor": "Auteur", + "colPosts": "Berichten", + "colDate": "Datum", + "noSubject": "(geen onderwerp)", + "pinned": "Vastgepind", + "locked": "Gesloten", + "userNumber": "Gebruiker #{id}", + "unknown": "Onbekend", + "success": { + "posted": "Discussie geplaatst." + } + }, + "guildForumNew": { + "backToForum": "← Terug naar forum", + "unnamedGuild": "Naamloos gilde", + "title": "Nieuwe discussie", + "subtitle": "in {guild} forum", + "subjectLabel": "Onderwerp", + "subjectPlaceholder": "Discussieonderwerp", + "messageLabel": "Bericht", + "messagePlaceholder": "Schrijf je openingsbericht…", + "postThread": "Discussie plaatsen", + "cancel": "Annuleren", + "errors": { + "invalid": "Onderwerp en bericht zijn verplicht.", + "notFound": "Dat gilde is niet gevonden.", + "ratelimit": "Je plaatst te snel. Wacht even en probeer opnieuw.", + "error": "Er ging iets mis. Probeer het opnieuw." + } + }, + "guildForumThread": { + "backToForum": "← Terug naar forum", + "unnamedGuild": "Naamloos gilde", + "noSubject": "(geen onderwerp)", + "inGuildForum": "{guild} forum", + "pinned": "Vastgezet", + "locked": "Vergrendeld", + "postsTitle": "Berichten", + "postsSubtitle": "{count, plural, one {# bericht} other {# berichten}}", + "postsEmpty": "Geen berichten in deze discussie.", + "userNumber": "Gebruiker #{id}", + "replyTitle": "Reageren", + "replySubtitle": "Voeg je bericht toe aan deze discussie", + "replyPlaceholder": "Schrijf je reactie…", + "replySubmit": "Reactie plaatsen", + "lockedHint": "Deze discussie is vergrendeld — nieuwe reacties zijn uitgeschakeld.", + "loginToReply": "Log in om te reageren.", + "loginLink": "Inloggen", + "success": { + "replied": "Reactie geplaatst." + }, + "errors": { + "invalid": "Voer een bericht in.", + "notFound": "Die discussie is niet gevonden.", + "locked": "Deze discussie is vergrendeld.", + "ratelimit": "Je plaatst te snel. Wacht even en probeer opnieuw.", + "error": "Er ging iets mis. Probeer het opnieuw." + } + }, + "shop": { + "title": "Winkel", + "subtitle": "Vul je account op en pak exclusieve pakketten, valuta en badges.", + "browsingCategory": "Bladeren door {category} pakketten.", + "all": "Alles", + "allPackages": "Alle pakketten", + "packagesAvailable": "{count, plural, one {# pakket beschikbaar} other {# pakketten beschikbaar}}", + "empty": "Momenteel geen pakketten beschikbaar.", + "buy": "Kopen", + "loginToBuy": "Log in om te kopen", + "creditsHint": "Pakketten betaal je met in-game credits. Waardeer eerst op als je meer credits nodig hebt.", + "topUpLink": "Credits opwaarderen", + "priceCredits": "{credits} credits (≈ {usd})", + "priceCreditsShort": "{credits} cr", + "success": { + "bought": "Pakket gekocht — beloningen zijn aan je account toegevoegd.", + "boughtNamed": "Je hebt \"{name}\" gekocht — beloningen zijn aan je account toegevoegd." + }, + "errors": { + "invalid": "Dit pakket is niet meer beschikbaar.", + "credits": "Je hebt niet genoeg credits voor dit pakket.", + "ratelimit": "Je koopt te snel achter elkaar. Wacht even en probeer het opnieuw.", + "error": "Er ging iets mis. Probeer het opnieuw." + } + }, + "topup": { + "title": "Opwaarderen met PayPal", + "subtitle": "Veilig betalen met PayPal en je credits worden toegevoegd zodra de betaling is verwerkt.", + "cancelled": "Betaling geannuleerd — er is geen bedrag afgeschreven.", + "chooseAmount": "Kies een bedrag", + "notConfiguredPre": "PayPal is nog niet geconfigureerd. Een beheerder moet", + "notConfiguredAnd": "en", + "notConfiguredOptional": "(en optioneel", + "notConfiguredPost": "voor sandbox vs. live).", + "balanceTitle": "Jouw saldo", + "signedInAs": "Ingelogd als {username}", + "credits": "Credits", + "creditsPerUnit": "Credits per 1,00 {currency}", + "rateLine": "Je ontvangt {amount} credits per 1,00 {currency}. Credits verschijnen in-game de volgende keer dat je inlogt." + }, + "marketplace": { + "title": "Marktplaats", + "subtitle": "Blader door meubels en zeldzaamheden die door spelers zijn aangeboden. Aanbiedingen worden in-game geplaatst en live bijgewerkt — ga naar het hotel om een bod te doen.", + "activeOffers": "Actieve aanbiedingen", + "sellers": "Verkopers", + "totalValue": "Totale waarde", + "activeListings": "Actieve aanbiedingen", + "mostRecentFirst": "Meest recent eerst", + "empty": "Er zijn momenteel geen actieve marktplaatsaanbiedingen. Kom later terug.", + "colOffer": "Aanbod", + "colItem": "Item", + "colSeller": "Verkoper", + "colPrice": "Prijs", + "colListed": "Geplaatst", + "itemLabel": "Item #{id}", + "userLabel": "Gebruiker #{id}", + "justNow": "zonet", + "minutesAgo": "{count}m geleden", + "hoursAgo": "{count}u geleden", + "daysAgo": "{count}d geleden" + }, + "rares": { + "title": "Zeldzame waarden", + "subtitle": "Bekijk een overzicht van alle zeldzaamheden in het hotel, gegroepeerd per categorie.", + "empty": "We hebben momenteel geen zeldzaamheden vermeld.", + "rareCount": "{count, plural, one {# zeldzaamheid} other {# zeldzaamheden}}", + "viewRares": "Bekijk zeldzaamheden →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# zeldzaamheid in deze categorie} other {# zeldzaamheden in deze categorie}}", + "allRares": "← Alle zeldzaamheden", + "empty": "Nog geen zeldzaamheden in deze categorie.", + "colRare": "Zeldzaamheid", + "colCredits": "Credits", + "colCurrency": "Valuta", + "creditsValue": "{value} credits", + "duckets": "Duckets", + "diamonds": "Diamanten", + "credits": "Credits" + }, + "redeem": { + "title": "Voucher inwisselen", + "subtitle": "Heb je een vouchercode? Voer deze hieronder in om de beloning aan je account toe te voegen.", + "enterCode": "Voer je code in", + "oncePerAccount": "Elke voucher kan maar één keer per account worden ingewisseld.", + "balanceTitle": "Jouw saldo", + "signedInAs": "Ingelogd als {username}", + "credits": "Credits", + "instantCredit": "Ingewisselde beloningen worden direct bijgeschreven en verschijnen in-game de volgende keer dat je inlogt." + }, + "help": { + "title": "Helpcentrum", + "subtitle": "Vind handleidingen, onderwerp en de hotelregels — alles wat je nodig hebt om hulp te krijgen.", + "myTickets": "Mijn tickets →", + "topicsTitle": "Onderwerpen", + "topicsSubtitle": "Blader door handleidingen en antwoorden op veelgestelde vragen", + "topicsEmpty": "Nog geen hulp onderwerpen.", + "rulesTitle": "Hotelregels", + "rulesSubtitle": "Lees deze voordat je in het hotel rondhangt", + "rulesEmpty": "Nog geen regels gepubliceerd.", + "categoryEmpty": "Geen regels in deze categorie." + }, + "helpCategory": { + "back": "← Helpcentrum", + "topicSubtitle": "Helpcentrum onderwerp", + "moreTitle": "Meer hulp onderwerpen", + "moreSubtitle": "Ga naar een ander onderwerp" + }, + "helpTickets": { + "title": "Help tickets", + "subtitle": "Dien een ticket in bij het team en volg je openstaande verzoeken.", + "statTotal": "Totaal tickets", + "statOpen": "Open", + "statClosed": "Gesloten", + "newTitle": "Nieuw ticket", + "newSubtitle": "Beschrijf je probleem en het team zal opvolgen", + "subjectPlaceholder": "Onderwerp", + "contentPlaceholder": "Beschrijf je probleem…", + "submit": "Ticket indienen", + "listTitle": "Jouw tickets", + "listSubtitle": "Elk verzoek dat je naar het team hebt gestuurd", + "listEmpty": "Je hebt nog geen tickets.", + "colId": "ID", + "colSubject": "Onderwerp", + "colStatus": "Status", + "colCreated": "Aangemaakt", + "statusOpen": "Open", + "statusClosed": "Gesloten", + "success": { + "created": "Ticket ingediend." + }, + "errors": { + "invalid": "Vul een onderwerp en beschrijving in.", + "moderated": "Dat ticket is geblokkeerd door moderatie.", + "ratelimit": "Je dient te snel in. Wacht even en probeer opnieuw.", + "error": "Er ging iets mis. Probeer het opnieuw." + }, + "banAppealLabel": "This is a ban appeal" + }, + "helpTicketDetail": { + "backToList": "← Jouw tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Gesloten", + "messagesTitle": "Gesprek", + "messagesSubtitle": "{count, plural, one {# bericht} other {# berichten}}", + "you": "Jij", + "userNumber": "Gebruiker #{id}", + "replyTitle": "Reageren", + "replySubtitle": "Stuur een vervolg naar het team", + "replyPlaceholder": "Schrijf je bericht…", + "replySubmit": "Antwoord versturen", + "closeTitle": "Ticket sluiten", + "closeSubtitle": "Markeer dit verzoek als opgelost als je geen hulp meer nodig hebt", + "closeSubmit": "Ticket sluiten", + "closedHint": "Dit ticket is gesloten. Open een nieuw ticket als je meer hulp nodig hebt.", + "success": { + "replied": "Antwoord verstuurd.", + "closed": "Ticket gesloten." + }, + "errors": { + "invalid": "Voer een bericht in.", + "notFound": "Dat ticket is niet gevonden.", + "closedTicket": "Dit ticket is gesloten.", + "moderated": "Dat bericht is geblokkeerd door moderatie.", + "ratelimit": "Je dient te snel in. Wacht even en probeer opnieuw.", + "error": "Er ging iets mis. Probeer het opnieuw." + } + }, + "applyStaff": { + "title": "Solliciteer voor {hotel} team", + "subtitle": "We openen af en toe sollicitaties. Als je een positie ziet die perfect bij je past, aarzel dan niet om te solliciteren.", + "noPositionsTitle": "Geen open posities", + "noPositionsBody": "Er zijn momenteel geen open posities. Kom later terug om te controleren of er nieuwe posities zijn. Bedankt voor je interesse.", + "noDeadline": "Geen deadline ingesteld", + "deadline": "Sollicitatiedeadline: {date}", + "alreadyApplied": "Je hebt al gesolliciteerd voor {rank}", + "aboutYou": "Over jou", + "aboutPlaceholder": "Vertel ons waarom jij een geweldige {rank} zou zijn…", + "applyFor": "Solliciteer voor {rank}", + "success": { + "submitted": "Sollicitatie ingediend — staff bekijkt deze binnenkort." + }, + "errors": { + "empty": "Schrijf minstens 10 tekens over jezelf.", + "invalid": "Ongeldige sollicitatie.", + "duplicate": "Je hebt al gesolliciteerd voor deze positie.", + "ratelimit": "Je dient te snel in. Wacht even en probeer opnieuw.", + "error": "Er ging iets mis. Probeer het opnieuw." + } + }, + "applyTeam": { + "title": "Solliciteer voor het {hotel} team", + "subtitle": "We openen periodiek teamsollicitaties. Als je een team ziet dat bij je past, aarzel dan niet om te solliciteren!", + "noPositionsTitle": "Geen open team posities", + "noPositionsBody": "Er zijn momenteel geen open team posities. Kom later terug om te controleren op nieuwe posities. Bedankt!", + "pending": "Je sollicitatie is in behandeling", + "aboutYou": "Over jou", + "aboutPlaceholder": "Vertel ons waarom jij een geweldige aanwinst zou zijn voor {rank}…", + "applyFor": "Solliciteer voor {rank}", + "success": { + "submitted": "Sollicitatie ingediend — staff bekijkt deze binnenkort." + }, + "errors": { + "empty": "Schrijf minstens 10 tekens over jezelf.", + "invalid": "Ongeldige sollicitatie.", + "duplicate": "Je hebt al gesolliciteerd voor dit team.", + "ratelimit": "Je dient te snel in. Wacht even en probeer opnieuw.", + "error": "Er ging iets mis. Probeer het opnieuw." + } + }, + "radio": { + "title": "Radio", + "subtitle": "Luister naar de hotelradio — live DJ-sets, verzoekjes en shout-outs.", + "nowPlaying": "Nu te beluisteren", + "nothingPlaying": "Er wordt momenteel niets afgespeeld.", + "onAir": "Live: {dj}", + "noDj": "Geen DJ live.", + "audioUnsupported": "Je browser ondersteunt geen audio.", + "streamOffline": "De stream is momenteel offline.", + "exploreTitle": "Ontdek de radio", + "exploreSubtitle": "Programma, shout-outs, verzoekjes en meer", + "linkSchedule": "Programma", + "linkScheduleText": "Onze wekelijkse line-up van DJ's en shows.", + "linkShouts": "Shout-outs", + "linkShoutsText": "Shout-outs en verzoekjes van de community.", + "linkRequests": "Verzoekjes", + "linkRequestsText": "Vraag de DJ om je favoriete nummer te draaien.", + "linkApply": "Solliciteer als DJ", + "linkApplyText": "Word lid van het team en ga de ether in.", + "linkLeaderboard": "Klassement", + "linkLeaderboardText": "Top luisteraars gerangschikt op verdiende punten.", + "todayTitle": "Programma van vandaag", + "todayTitleWithDay": "Programma van vandaag · {day}", + "todaySubtitle": "Wat er vandaag te horen is", + "fullWeek": "Hele week →", + "noShowsToday": "Geen shows gepland voor vandaag.", + "colTime": "Tijd", + "colShow": "Show", + "colDj": "DJ", + "untitledShow": "Naamloze show", + "userNumber": "Gebruiker #{id}" + }, + "radioSchedule": { + "title": "Radioschema", + "subtitle": "Onze wekelijkse line-up van DJ's en shows", + "empty": "Nog geen shows gepland.", + "colDay": "Dag", + "colTime": "Tijd", + "colDj": "DJ", + "colShow": "Show", + "noShows": "Geen shows" + }, + "radioShouts": { + "title": "Radio Shout-outs", + "subtitle": "Shout-outs en verzoekjes van de community", + "postTitle": "Plaats een shout", + "postSubtitle": "Stuur een bericht naar de DJ die live is", + "messageLabel": "Je bericht", + "messagePlaceholder": "Stuur een shout naar de DJ…", + "shoutButton": "Shout", + "loginToPost": "Log in om een shout te plaatsen.", + "latestTitle": "Laatste shouts", + "latestSubtitle": "De meest recente berichten van luisteraars", + "empty": "Nog geen shouts. Wees de eerste!", + "success": { + "posted": "Shout geplaatst." + }, + "errors": { + "invalid": "Schrijf een bericht voordat je shouwt.", + "moderated": "Die shout is geblokkeerd door moderatie.", + "ratelimit": "Je shout te snel. Wacht even en probeer opnieuw.", + "error": "Er ging iets mis. Probeer het opnieuw." + } + }, + "events": { + "title": "Evenementen", + "subtitle": "Aankomende en recente hotelevenementen waaraan je kunt meedoen", + "empty": "Nog geen evenementen.", + "back": "← Evenementen", + "when": "Wanneer", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Afgerond", + "registrations": "Inschrijvingen", + "registered": "{count} ingeschreven", + "spots": "{count} / {max} plaatsen", + "registerTitle": "Inschrijven", + "registerSubtitle": "Reserveer je plek voor dit evenement", + "register": "Inschrijven voor evenement", + "registering": "Bezig met inschrijven…", + "registerSuccess": "Je bent ingeschreven!", + "registerError": "Inschrijven voor dit evenement is mislukt.", + "loginToRegister": "Log in om je in te schrijven voor dit evenement.", + "alreadyRegistered": "Je bent al ingeschreven.", + "eventEnded": "Dit evenement is afgelopen.", + "eventFull": "Dit evenement is vol.", + "cannotRegister": "Inschrijven is niet beschikbaar.", + "prizesTitle": "Prijzen", + "winnersTitle": "Winnaars", + "unknownUser": "Gebruiker #{id}", + "filterStatus": "Status", + "allEvents": "Alle evenementen", + "statusOngoing": "Bezig", + "statusUpcoming": "Binnenkort", + "weekStarting": "Week vanaf (UTC)", + "myRegistrations": "Mijn inschrijvingen", + "apply": "Toepassen", + "reset": "Herstellen", + "timeZoneHint": "Tijden worden in je lokale tijdzone getoond. Het filter van zeven dagen gebruikt UTC-datums.", + "loginForRegistrations": "Log in om je inschrijvingen te bekijken.", + "loadError": "Evenementen konden niet worden geladen. Probeer het opnieuw.", + "youRegistered": "Je bent ingeschreven", + "pagination": "Evenementpagina’s", + "previous": "Vorige", + "next": "Volgende", + "pageSummary": "Pagina {page} van {pages} · {total} evenementen", + "weeklyView": "Weekoverzicht", + "previousWeek": "Vorige week", + "nextWeek": "Volgende week" + }, + "polls": { + "title": "Peilingen", + "subtitle": "Deel je mening in community-peilingen", + "empty": "Nog geen peilingen.", + "back": "← Peilingen", + "statusActive": "Open", + "statusClosed": "Gesloten", + "questionsCount": "{count} vragen", + "ends": "Eindigt {date}", + "voteTitle": "Breng je stem uit", + "voteSubtitle": "Beantwoord elke vraag hieronder", + "submitVote": "Stem indienen", + "voting": "Bezig met indienen…", + "voteSuccess": "Bedankt voor je stem!", + "voteError": "Je stem kon niet worden ingediend.", + "loginToVote": "Log in om te stemmen in deze peiling.", + "alreadyVoted": "Je hebt al gestemd.", + "pollClosed": "Deze peiling is gesloten.", + "cannotVote": "Stemmen is niet beschikbaar.", + "textPlaceholder": "Jouw antwoord…", + "resultsTitle": "Resultaten", + "voteCount": "{count} ({pct}%)", + "totalVotes": "{count} stemmen in totaal", + "textResponses": "{count} vrije antwoorden" + }, + "radioContests": { + "title": "Radiowedstrijden", + "subtitle": "Luister mee en doe mee aan onze laatste live radiowedstrijden", + "empty": "Nog geen wedstrijden.", + "contestLabel": "Wedstrijd #{id}", + "dateUnknown": "Datum onbekend" + }, + "radioGiveaways": { + "title": "Radiogiveaways", + "subtitle": "Luister mee voor een kans om te winnen in onze radiogiveaways", + "empty": "Nog geen giveaways.", + "giveawayLabel": "Giveaway #{id}", + "dateUnknown": "Datum onbekend" + }, + "radioLeaderboard": { + "title": "Radio Luisteraars Klassement", + "subtitle": "Top 50 luisteraars op punten verdiend door te luisteren naar de radio", + "empty": "Nog geen luisteraarspunten om te tonen.", + "colRank": "Rang", + "colAvatar": "Avatar", + "colListener": "Luisteraar", + "colPoints": "Punten" + }, + "radioRequests": { + "formTitle": "Dien een verzoekje in", + "formSubtitle": "Vraag de DJ om jouw favoriete nummer te draaien", + "songLabel": "Nummer", + "songPlaceholder": "Titel van het nummer", + "artistLabel": "Artiest", + "artistPlaceholder": "Naam van de artiest (optioneel)", + "submitButton": "Verzoek indienen", + "loginToRequest": "Log in om een verzoekje in te dienen.", + "latestTitle": "Recente verzoekjes", + "latestSubtitle": "De meest recente aangevraagde nummers", + "empty": "Nog geen verzoekjes ingediend.", + "colSong": "Nummer", + "colArtist": "Artiest", + "colRequester": "Aanvrager", + "colDate": "Datum", + "colStatus": "Status", + "statusPending": "In afwachting", + "statusApproved": "Goedgekeurd", + "statusPlayed": "Gedraaid", + "success": { + "posted": "Verzoek ingediend." + }, + "errors": { + "empty": "Vul een nummer of artiest in.", + "invalid": "Ongeldig verzoek.", + "ratelimit": "Je dient te snel in. Wacht even en probeer opnieuw.", + "error": "Er ging iets mis. Probeer het opnieuw." + } + }, + "radioApply": { + "title": "Solliciteer als Radio DJ", + "subtitle": "Vertel ons over jezelf en waarom je een geweldige aanwinst zou zijn voor de radio", + "latestTitle": "Je laatste sollicitatie", + "statusLabel": "Status:", + "submittedOn": "· ingediend op {date}", + "submitAgain": "Je kunt hieronder opnieuw solliciteren als je gegevens zijn gewijzigd.", + "formTitle": "Sollicitatieformulier", + "formSubtitle": "Alle gemarkeerde velden zijn verplicht", + "realNameLabel": "Echte naam", + "realNamePlaceholder": "Je volledige naam", + "ageLabel": "Leeftijd", + "availabilityLabel": "Beschikbaarheid", + "availabilityPlaceholder": "Welke dagen en tijden kun je uitzenden?", + "musicStyleLabel": "Muziekstijl", + "musicStylePlaceholder": "Bijv. House, Pop, Hip-Hop", + "experienceLabel": "Ervaring", + "optional": "(optioneel)", + "experiencePlaceholder": "Eerdere DJ- of presentatie-ervaring?", + "motivationLabel": "Motivatie", + "motivationPlaceholder": "Waarom wil je lid worden van het radioteam?", + "submitButton": "Sollicitatie indienen", + "success": { + "submitted": "Sollicitatie ingediend — we nemen contact met je op." + }, + "errors": { + "invalid": "Vul alle verplichte velden in.", + "ratelimit": "Je dient te snel in. Wacht even en probeer opnieuw.", + "error": "Er ging iets mis. Probeer het opnieuw." + } + }, + "settings": { + "accountSettings": "Accountinstellingen", + "accountSettingsSubtitle": "Beheer je profiel, beveiliging en gekoppelde accounts", + "publicProfile": "Je openbare profiel", + "noMotto": "Geen motto", + "noEmail": "Geen e-mail op bestand", + "changeMotto": "Motto wijzigen", + "changeMottoSubtitle": "Wordt direct bijgewerkt in-game als je online bent", + "mottoPlaceholder": "Je motto", + "saveMotto": "Motto opslaan", + "securityTitle": "Beveiliging", + "securitySubtitle": "Twee factor authenticatie", + "securityDescription": "Voeg een extra beveiligingslaag toe aan je account.", + "twoFactorLink": "Twee factor authenticatie" + }, + "settings2fa": { + "backToSettings": "← Instellingen", + "title": "Twee factor authenticatie", + "subtitle": "Voeg een extra beveiligingslaag toe met een authenticator-app", + "nowEnabled": "2FA is nu ingeschakeld. 🔒", + "disabledNotice": "2FA is uitgeschakeld.", + "badCode": "Die code was niet geldig — probeer opnieuw.", + "noAppKeyPrefix": "2FA is niet beschikbaar totdat", + "noAppKeyMiddle": "is geconfigureerd (dezelfde Laravel", + "noAppKeySuffix": "als je AtomCMS-installatie, zodat bestaande geheimen leesbaar blijven).", + "isEnabled": "2FA is ingeschakeld", + "onYourAccount": "op je account.", + "disable": "2FA uitschakelen", + "scanOrEnter": "Scan of voer deze sleutel in", + "scanInstructions": "Voeg dit toe aan Google Authenticator / Authy en voer vervolgens de 6-cijferige code in om te bevestigen.", + "manualKey": "Handmatige sleutel:", + "codePlaceholder": "6-cijferige code", + "confirm": "Bevestigen", + "enableIntro": "Voeg een extra beveiligingslaag toe met een authenticator-app.", + "enable": "2FA inschakelen", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Gekoppelde accounts", + "subtitle": "Koppel een sociaal account zodat je met één klik kunt inloggen", + "connected": "Gekoppeld", + "unavailable": "Niet beschikbaar", + "login": { + "title": "Inloggen", + "subtitle": "Welkom terug — log in om het hotel te betreden.", + "subtitle2fa": "Voer de 6-cijferige code uit je authenticator-app in.", + "usernamePlaceholder": "Gebruikersnaam", + "passwordPlaceholder": "Wachtwoord", + "codePlaceholder": "2FA-code", + "pleaseWait": "Een moment geduld…", + "verify": "Verifiëren", + "signIn": "Inloggen", + "or": "of", + "noAccount": "Nog geen account?", + "createOne": "Account aanmaken", + "forgotPassword": "Wachtwoord vergeten?", + "errorInvalidCredentials": "Ongeldige gebruikersnaam of wachtwoord", + "errorInvalid2fa": "Ongeldige 2FA-code", + "errorUnverified": "Verifieer je e-mail voordat je inlogt.", + "errorCaptcha": "Captcha-verificatie mislukt. Probeer het opnieuw.", + "welcomeBack": "Welkom terug", + "welcomeBackSub": "Log in om verder te gaan naar {hotelName}" + }, + "register": { + "title": "Account aanmaken", + "subtitle": "Word lid van het hotel — het duurt maar even.", + "username": "Gebruikersnaam", + "email": "E-mail", + "password": "Wachtwoord", + "confirmPassword": "Wachtwoord herhalen", + "usernamePlaceholder": "Gebruikersnaam", + "emailPlaceholder": "E-mail", + "passwordPlaceholder": "Wachtwoord (min 6 tekens)", + "confirmPasswordPlaceholder": "Wachtwoord herhalen", + "selectOutfit": "Kies je outfit", + "termsAccept": "Ik ben 18+ en accepteer de {hotel} voorwaarden & regels.", + "createAccount": "Account aanmaken", + "creatingAccount": "Account wordt aangemaakt...", + "redirecting": "Doorgaan naar je account...", + "alreadyHaveAccount": "Al een account? Inloggen!", + "register": "Registreren", + "alreadyHaveAccountPre": "Al een account?", + "alreadyHaveAccountLink": "Inloggen", + "whoIsOnline": "Wie is online", + "usersOnline": "{count} online", + "termsError": "Je moet de voorwaarden & regels accepteren om te registreren.", + "usernameError": "Gebruikersnaam is verplicht.", + "emailError": "Een geldig e-mailadres is verplicht.", + "passwordError": "Wachtwoord moet minimaal 6 tekens bevatten.", + "confirmPasswordError": "Wachtwoorden komen niet overeen.", + "termsRequired": "Je moet de voorwaarden & regels accepteren.", + "ageVerified": "Ik ben 18+ en ga akkoord met de leeftijdsvereiste.", + "usernameRequired": "Gebruikersnaam is verplicht.", + "emailRequired": "E-mail is verplicht.", + "passwordRequired": "Wachtwoord is verplicht.", + "passwordsDontMatch": "Wachtwoorden komen niet overeen.", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Wachtwoord resetten", + "subtitle": "We sturen je een veilige link om een nieuw wachtwoord in te stellen.", + "sentNotice": "Als dat e-mailadres geregistreerd is, is er een resetlink verzonden. Controleer je inbox.", + "emailPlaceholder": "Je e-mailadres", + "sendResetLink": "Resetlink verzenden", + "backToLogin": "Terug naar inloggen", + "errorCaptcha": "Captcha-verificatie mislukt. Probeer het opnieuw." + }, + "reset": { + "title": "Nieuw wachtwoord instellen", + "subtitle": "Kies een sterk wachtwoord dat je nergens anders gebruikt.", + "passwordPlaceholder": "Nieuw wachtwoord (min 6 tekens)", + "resetPassword": "Wachtwoord resetten", + "backToLogin": "Terug naar inloggen" + }, + "verify": { + "verifiedTitle": "Je bent helemaal klaar", + "verifiedSubtitle": "E-mail geverifieerd", + "verifiedBody": "Je e-mailadres is geverifieerd. Je kunt nu inloggen en spelen.", + "goToLogin": "Ga naar inloggen", + "alreadyTitle": "Al geverifieerd", + "alreadySubtitle": "Niets meer te doen", + "alreadyBody": "Dit e-mailadres is al bevestigd.", + "unavailableTitle": "Probeer het later opnieuw", + "unavailableSubtitle": "Server niet bereikbaar", + "unavailableBody": "We konden de server niet bereiken om je e-mail te verifiëren. Probeer de link later opnieuw.", + "invalidTitle": "E-mailverificatie", + "invalidSubtitle": "Ongeldige of verlopen link", + "invalidBody": "Deze verificatielink is niet geldig. Zorg ervoor dat je de volledige link uit je e-mail hebt geopend of vraag een nieuwe aan.", + "backToLogin": "Terug naar inloggen" + }, + "banned": { + "title": "Je bent verbannen", + "subtitle": "Account geschorst", + "body": "Je account is geschorst van het hotel.", + "reasonLabel": "Reden:", + "permanent": "Deze ban is permanent.", + "expires": "Verloopt op {date}.", + "contactStaff": "Als je denkt dat dit een fout is, neem dan contact op met het team." + }, + "maintenance": { + "title": "{hotel} is in onderhoud", + "subtitle": "We zijn zo terug", + "staffCanLogIn": "Team kan nog steeds inloggen." + }, + "admin": { + "nav": { + "overview": "Overzicht", + "dashboard": "Dashboard", + "content": "Inhoud", + "articles": "Artikelen", + "tags": "Tags", + "navigator": "Navigator", + "helpCenter": "Helpcentrum", + "advertisements": "Advertenties", + "writeableBoxes": "Bewerkbare boxes", + "photos": "Foto's", + "tickets": "Supportbalie", + "helpTickets": "Helpcentrum-tickets", + "events": "Evenementen", + "polls": "Polls", + "guilds": "Gildes", + "banners": "Banners", + "prefixes": "Voorvoegsels", + "usersAndAccess": "Gebruikers & toegang", + "users": "Gebruikers", + "bans": "Verbanningen", + "ipManagement": "IP-beheer", + "vpn": "VPN", + "applications": "Sollicitaties", + "teams": "Teams", + "permissions": "Permissies", + "onlineUsers": "Online gebruikers", + "moderation": "Moderatie", + "economy": "Economie", + "catalog": "Catalogus", + "catalogMaintenance": "Catalogus-onderhoud", + "shop": "Winkel", + "marketplace": "Marktplaats", + "transactions": "Transacties", + "vouchers": "Vouchers", + "subscriptions": "Abonnementen", + "rareValues": "Zeldzame waarden", + "badges": "Badges", + "achievements": "Prestaties", + "calendar": "Kalender", + "radio": "Radio", + "radioHistory": "Radio geschiedenis", + "radioBanners": "Banners", + "radioEmbed": "Insluiten", + "radioApiKeys": "API-sleutels", + "radioModeration": "Moderatie", + "radioSettings": "Instellingen", + "radioMonitoring": "Bewaking", + "radioPoints": "Punten", + "radioRanks": "Rangen", + "radioAutodj": "Auto DJ", + "system": "Systeem", + "commandocentrum": "Commandocentrum", + "emulator": "Emulator", + "alerts": "Meldingen", + "logs": "Logboeken", + "auditLog": "Wijzigingslogboek", + "analytics": "Statistieken", + "devops": "DevOps", + "wordFilter": "Woordfilter", + "maintenance": "Onderhoud", + "rooms": "Kamers", + "emailTemplates": "E-mailsjablonen", + "theme": "Thema", + "media": "Media", + "favicon": "Favicon", + "sounds": "Geluiden", + "translations": "Vertalingen", + "import": "Importeren", + "settings": "Instellingen", + "backToSite": "Terug naar site", + "expandAll": "Alles openen", + "collapseAll": "Alles sluiten", + "searchMenu": "Zoeken in menu…", + "clearMenuSearch": "Menuzoekopdracht wissen", + "noMenuResults": "Geen pagina’s gevonden.", + "housekeeping": "Permissie-archief", + "hotelManagementPanel": "Hotelbeheerpaneel", + "rankLabel": "Rang {rank}", + "hubNewsMedia": "Nieuws en media", + "hubSiteContent": "Website-inhoud", + "hubEngagement": "Communityactiviteiten", + "hubUsers": "Gebruikers", + "hubAccess": "Toegang en beveiliging", + "hubCatalog": "Catalogus en zeldzame meubels", + "hubShop": "Winkel en betalingen", + "hubTools": "Hulpmiddelen", + "hubObservability": "Bewaking en diagnostiek", + "community": "Community", + "monitoring": "Bewaking", + "staffAccess": "Rangen & rechten", + "multiAccounts": "Gekoppelde accounts", + "chatLog": "Chatlog", + "commandLog": "Commandolog", + "tradeLog": "Tradelog", + "tools": "Hulpmiddelen", + "itemsBase": "Meubeldefinities", + "adminMenu": "Adminmenu", + "studio": "Studio", + "peopleSupport": "Gebruikers en ondersteuning", + "catalogFurniture": "Catalogus en meubels", + "communityContent": "Community en inhoud", + "staffPermissions": "Medewerkers en toegang", + "cmsErrors": "CMS-fouten", + "themeBuilder": "Thema-editor", + "openSidebar": "Menu openen", + "closeSidebar": "Menu sluiten", + "search": { + "placeholder": "Zoeken…", + "noResults": "Geen resultaten gevonden", + "users": "Gebruikers", + "articles": "Artikelen", + "rooms": "Kamers", + "guilds": "Groepen", + "shop": "Winkel", + "hint": "Typ om te zoeken naar gebruikers, artikelen, kamers, groepen en winkelartikelen." + }, + "operationsCenter": "Operatiecentrum" + }, + "dashboard": { + "title": "Dashboard", + "subtitle": "Hoteloverzicht & live status", + "playersOnline": "Spelers online", + "articles": "Artikelen", + "activeBans": "Actieve bans", + "database": "Database", + "databaseConnected": "Verbonden", + "databaseDown": "Storing", + "usersByRank": "Gebruikers per rang", + "noAccountsToBreakDown": "Nog geen accounts om uit te splitsen", + "rankLabel": "Rang {rank}", + "rankWithCount": "Rang {rank}: {count} accounts", + "recentStaffActivity": "Recente teamactiviteit", + "viewAll": "Alles bekijken", + "noStaffActivityLogged": "Nog geen teamactiviteit geregistreerd", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "Artikelen", + "subtitle": "Nieuwsartikelen — 50 meest recente", + "newArticle": "+ Nieuw artikel", + "edit": "Bewerken", + "delete": "Verwijderen", + "noArticles": "Nog geen artikelen", + "confirmDelete": "Weet je zeker dat je \"{title}\" wilt verwijderen?", + "colTitle": "Titel", + "colSlug": "Slug", + "colAuthor": "Auteur", + "colCreated": "Aangemaakt", + "colActions": "Acties", + "form": { + "title": "Titel", + "titlePlaceholder": "Artikel titel", + "slug": "Slug", + "slugPlaceholder": "artikel-url-slug", + "category": "Categorie", + "categoryPlaceholder": "Selecteer een categorie", + "body": "Inhoud", + "bodyPlaceholder": "Schrijf je artikel…", + "image": "Afbeelding", + "imagePlaceholder": "https://example.com/afbeelding.png", + "thumbnail": "Miniatuur", + "thumbnailPlaceholder": "https://example.com/miniatuur.png", + "published": "Gepubliceerd", + "featured": "Uitgelicht", + "save": "Artikel opslaan", + "saving": "Opslaan…", + "deleteArticle": "Artikel verwijderen", + "deleteConfirm": "Deze actie kan niet ongedaan worden gemaakt. Het artikel wordt permanent verwijderd.", + "cancel": "Annuleren", + "titleRequired": "Voer een titel in.", + "titleTooLong": "De titel mag maximaal 255 tekens bevatten.", + "summaryTooLong": "De samenvatting mag maximaal 255 tekens bevatten.", + "imageTooLong": "De afbeeldings-URL mag maximaal 255 tekens bevatten.", + "invalidStatus": "Selecteer een geldige publicatiestatus.", + "publishDateRequired": "Kies een geldige publicatiedatum.", + "saveFailedReference": "Het artikel kon niet worden opgeslagen. Je inhoud blijft bewaard. Foutreferentie: {reference}", + "articleNotFound": "Artikel niet gevonden.", + "summary": "Samenvatting", + "imageNotFound": "Afbeelding niet gevonden. Voer een geldige URL in of blader door media.", + "imagePreview": "Voorbeeld van artikelafbeelding", + "previewTitle": "Artikelvoorbeeld", + "previewDescription": "Voorbeeld van de inhoud. De gepubliceerde pagina gebruikt het sitethema.", + "previewFrame": "Voorbeeld van artikelinhoud", + "autosaveLoading": "Opgeslagen concepten laden…", + "autosaveReady": "Automatisch opslaan van je privéconcept is actief.", + "autosaveSaving": "Privéconcept opslaan…", + "autosaveSaved": "Privéconcept opgeslagen. Klik op Opslaan om publicatiewijzigingen toe te passen.", + "autosaveFailed": "Conceptherstel is niet beschikbaar. Houd deze pagina open en gebruik Opslaan; herlaad de pagina om herstel opnieuw te proberen.", + "autosaveConflict": "Een ander tabblad heeft dit concept gewijzigd. Automatisch opslaan is gepauzeerd: herlaad de pagina om het nieuwere concept te bekijken voordat je verdergaat.", + "recoveryFound": "Er is een onvoltooid privéconcept beschikbaar. Herstel of verwijder het om automatisch opslaan te activeren.", + "recoverDraft": "Concept herstellen", + "discardDraft": "Opgeslagen concept verwijderen", + "confirmRecovery": "De huidige inhoud van de editor vervangen door dit herstelde concept? De wijzigingen worden pas gepubliceerd als je opslaat.", + "confirmDiscardDraft": "Je opgeslagen herstelconcept definitief verwijderen? De huidige inhoud van de editor blijft behouden.", + "revisionHistory": "Vorige opgeslagen versies (laatste 20)", + "restoreRevision": "Herstellen in editor", + "confirmRevision": "De huidige inhoud vervangen door deze vorige versie als concept? Controleer de inhoud en kies een publicatiestatus voordat je opslaat.", + "editConflict": "Dit artikel is gewijzigd sinds je het hebt geopend. Je wijzigingen zijn niet toegepast. Kopieer je werk, herlaad het artikel en voeg de wijzigingen samen voordat je opnieuw opslaat.", + "retryRecovery": "Herstelgegevens opnieuw laden zonder dit formulier te wijzigen", + "statusDraft": "Concept", + "statusScheduled": "Ingepland", + "statusPublished": "Gepubliceerd", + "publishAt": "Publiceren op", + "publishedAt": "Gepubliceerd op", + "imageInvalid": "Gebruik een lokaal pad of een HTTP/HTTPS-afbeeldingsadres zonder inloggegevens.", + "linksInvalid": "Controleer de links: alleen lokale, HTTP/HTTPS- en e-maillinks zijn toegestaan.", + "status": "Status" + }, + "listActionError": "De actie voor dit artikel kon niet worden voltooid.", + "listStatus": "Publicatiestatus", + "listStatus_all": "Alle artikelen", + "listStatus_draft": "Concept", + "listStatus_published": "Gepubliceerd", + "listStatus_scheduled": "Gepland", + "listSearch": "Zoeken in titel of samenvatting", + "listApply": "Toepassen", + "listLoading": "Laden…", + "listReset": "Filters wissen", + "listUnavailable": "Artikelen zijn tijdelijk niet beschikbaar. Probeer het opnieuw.", + "listRetry": "Opnieuw proberen", + "listTotal": "{count, plural, one {# gevonden artikel} other {# gevonden artikelen}}", + "listNoMatches": "Geen artikelen gevonden met deze filters. Pas de zoekopdracht aan of wis de filters.", + "listPagination": "Artikelpagina’s", + "listPrevious": "Vorige", + "listNext": "Volgende", + "listPage": "Pagina {page} van {total}", + "articlesShown": "Getoonde artikelen", + "latest": "Laatste artikel", + "mostRecentPost": "Meest recente publicatie", + "recentArticles": "Recente artikelen" + }, + "events": { + "newEvent": "+ Nieuw evenement", + "createTitle": "Evenement aanmaken", + "createSubtitle": "Plan een nieuw hotel-evenement", + "searchPlaceholder": "Zoek evenementen…", + "colId": "ID", + "colTitle": "Titel", + "colType": "Type", + "colStarts": "Start", + "colStatus": "Status", + "colActions": "Acties", + "statusPublished": "Gepubliceerd", + "statusDraft": "Concept", + "statusCancelled": "Geannuleerd", + "statusCompleted": "Voltooid", + "statRegistrations": "Inschrijvingen", + "statPrizes": "Prijzen", + "statWinners": "Winnaars", + "statTime": "Tijd", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Aankomend", + "timePast": "Afgelopen", + "endsAt": "Eindigt: {date}", + "userFallback": "Gebruiker #{id}", + "registrationsTitle": "Inschrijvingen ({count})", + "noRegistrations": "Nog geen inschrijvingen.", + "noPrizes": "Nog geen prijzen geconfigureerd.", + "noWinners": "Nog geen winnaars.", + "addPrize": "Prijs toevoegen", + "addWinner": "Winnaar toevoegen", + "formEditTitle": "Evenement bewerken", + "formDetailsTitle": "Evenementdetails", + "formTitle": "Titel", + "formEventType": "Evenementtype", + "formSelectType": "Selecteer type", + "formDescription": "Beschrijving", + "formStartsAt": "Start om", + "formEndsAt": "Eindigt om", + "formSelectStart": "Selecteer startdatum", + "formSelectEnd": "Selecteer einddatum", + "formMaxPlayers": "Max. spelers", + "formUnlimited": "Onbeperkt", + "formRoomId": "Kamer-ID", + "formOptional": "Optioneel", + "formImageUrl": "Afbeeldings-URL", + "formSaving": "Opslaan…", + "formUpdate": "Evenement bijwerken", + "formCreate": "Evenement aanmaken", + "toastUpdated": "Evenement bijgewerkt!", + "toastCreated": "Evenement aangemaakt!" + }, + "polls": { + "newPoll": "+ Nieuwe poll", + "createTitle": "Poll aanmaken", + "createSubtitle": "Maak een nieuwe community-poll of enquête", + "searchPlaceholder": "Zoek polls…", + "colId": "ID", + "colTitle": "Titel", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Aangemaakt", + "colActions": "Acties", + "statusActive": "Actief", + "statusDraft": "Concept", + "statusClosed": "Gesloten", + "typeMultiple": "Meerkeuze", + "typeSingle": "Enkele keuze", + "statVoters": "Totaal stemmers", + "statQuestions": "Vragen", + "statVotes": "Totaal stemmen", + "questionsTitle": "Vragen ({count})", + "addQuestion": "Vraag toevoegen", + "noQuestions": "Nog geen vragen. Voeg hierboven je eerste vraag toe.", + "resultsTitle": "Resultaten", + "formEditTitle": "Poll bewerken", + "formDetailsTitle": "Polldetails", + "formTitle": "Titel", + "formDescription": "Beschrijving", + "formStartsAt": "Start om", + "formEndsAt": "Eindigt om", + "formSelectStart": "Selecteer startdatum", + "formSelectEnd": "Selecteer einddatum", + "formShowResults": "Toon resultaten aan stemmers", + "formAllowMultiple": "Meerdere antwoorden toestaan", + "formSaving": "Opslaan…", + "formUpdate": "Poll bijwerken", + "formCreate": "Poll aanmaken", + "toastUpdated": "Poll bijgewerkt!", + "toastCreated": "Poll aangemaakt!" + }, + "multiAccounts": { + "minAccounts": "Min. accounts per cluster", + "resultLimit": "Resultaatlimiet", + "refresh": "Vernieuwen", + "noClusters": "Geen clusters gevonden met de huidige drempels." + }, + "devops": { + "noEmulatorErrors": "Geen emulatorfouten gevonden", + "noRecentErrors": "Geen recente fouten", + "cmsErrors": "CMS error center" + }, + "tags": { + "title": "Tags", + "subtitle": "Artikel tags / categorieën", + "addTag": "Tag toevoegen", + "name": "Naam", + "namePlaceholder": "Tag naam", + "backgroundColour": "Achtergrondkleur", + "createTag": "Tag aanmaken", + "editTag": "Tag bewerken", + "updateTag": "Tag bijwerken", + "deleteTag": "Tag verwijderen", + "confirmDelete": "\"{name}\" verwijderen?", + "noTags": "Nog geen tags", + "colId": "ID", + "colTag": "Tag", + "colColour": "Kleur", + "colUsedBy": "Gebruikt door", + "colCreated": "Aangemaakt", + "colActions": "Acties", + "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": "Platte categorieën", + "publicRooms": "Openbare kamers", + "addCategory": "Categorie toevoegen", + "editCategory": "Categorie bewerken", + "deleteCategory": "Categorie verwijderen", + "categoryName": "Categorienaam", + "categoryNamePlaceholder": "Bijv. Chill & Chat", + "categoryOrder": "Volgorde", + "roomName": "Kamer naam", + "roomNamePlaceholder": "Bijv. Welkomst Lounge", + "roomId": "Kamer ID", + "roomIdPlaceholder": "Numeriek kamer ID", + "save": "Opslaan", + "cancel": "Annuleren", + "noCategories": "Nog geen categorieën", + "noPublicRooms": "Nog geen openbare kamers", + "colId": "ID", + "colName": "Naam", + "colOrder": "Volgorde", + "colRooms": "Kamers", + "colActions": "Acties", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Helpcentrum", + "subtitle": "Ondersteuningsitems en FAQ-beheer", + "entries": "Items", + "newEntry": "+ Nieuw item", + "edit": "Bewerken", + "delete": "Verwijderen", + "noEntries": "Nog geen items", + "confirmDelete": "\"{title}\" verwijderen?", + "colId": "ID", + "colTitle": "Titel", + "colCategory": "Categorie", + "colCreated": "Aangemaakt", + "colActions": "Acties", + "form": { + "title": "Titel", + "titlePlaceholder": "Item titel", + "category": "Categorie", + "categoryPlaceholder": "Selecteer categorie", + "body": "Inhoud", + "bodyPlaceholder": "Schrijf het antwoord…", + "save": "Item opslaan", + "saving": "Opslaan…", + "deleteEntry": "Item verwijderen", + "cancel": "Annuleren" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Advertenties", + "subtitle": "Beheer hoteladvertenties en promotiebanners", + "newAd": "+ Nieuwe advertentie", + "edit": "Bewerken", + "delete": "Verwijderen", + "noAds": "Nog geen advertenties", + "confirmDelete": "Deze advertentie verwijderen?", + "deleteSuccess": "Advertentie verwijderd!", + "deleteError": "Advertentie verwijderen mislukt.", + "adsCount": "Totaal advertenties", + "latest": "Laatste", + "mostRecentAd": "Meest recente advertentie", + "allAds": "Alle advertenties", + "colPreview": "Voorbeeld", + "colId": "ID", + "colName": "Naam", + "colImage": "Afbeelding", + "colUrl": "URL", + "colViews": "Weergaven", + "colStatus": "Status", + "colCreated": "Aangemaakt", + "colActions": "Acties", + "form": { + "name": "Naam", + "namePlaceholder": "Advertentienaam", + "image": "Afbeelding URL", + "imagePlaceholder": "https://example.com/banner.png", + "url": "Doel URL", + "urlPlaceholder": "https://example.com", + "enabled": "Ingeschakeld", + "save": "Advertentie opslaan", + "saving": "Opslaan…", + "deleteAd": "Advertentie verwijderen", + "cancel": "Annuleren" + } + }, + "writeableBoxes": { + "title": "Beschrijfbare Boxes", + "subtitle": "Inhoudspanelen weergegeven in het hotel en CMS", + "newBox": "Nieuwe box", + "edit": "Bewerken", + "delete": "Verwijderen", + "noBoxes": "Nog geen beschrijfbare boxes", + "confirmDelete": "Deze box verwijderen?", + "colId": "ID", + "colName": "Naam", + "colLocation": "Locatie", + "colUpdated": "Bijgewerkt", + "colActions": "Acties", + "form": { + "name": "Naam", + "namePlaceholder": "Box naam", + "location": "Locatie", + "locationPlaceholder": "Bijv. homepage, sidebar", + "content": "Inhoud", + "contentPlaceholder": "Schrijf de box inhoud…", + "enabled": "Ingeschakeld", + "save": "Box opslaan", + "saving": "Opslaan…", + "deleteBox": "Box verwijderen", + "cancel": "Annuleren", + "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": "Fotomoderatie", + "subtitle": "Recente in-game camerafoto's", + "delete": "Verwijderen", + "approve": "Goedkeuren", + "noPhotos": "Geen foto's om te modereren", + "confirmDelete": "Deze foto permanent verwijderen?", + "colId": "ID", + "colPreview": "Voorbeeld", + "colUser": "Gebruiker", + "colRoom": "Kamer", + "colTimestamp": "Tijdstempel", + "colActions": "Acties", + "photoAlt": "Gebruikersfoto #{id}", + "byUser": "door {username}", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Verwijderen verwijdert de databaserij en verwijdert een bijbehorend bestand onder /public naar beste vermogen. Externe CDN-URL's worden niet gewist." + }, + "users": { + "title": "Gebruikers", + "subtitle": "Bladeren, zoeken en beheren van hotelaccounts", + "search": "Zoeken", + "searchPlaceholder": "Zoeken op gebruikersnaam, e-mail of ID…", + "searchResults": "{count, plural, one {# resultaat} other {# resultaten}} voor \"{query}\"", + "noResults": "Geen gebruikers gevonden", + "colId": "ID", + "colUsername": "Gebruikersnaam", + "colEmail": "E-mail", + "colRank": "Rang", + "colOnline": "Online", + "colRegistered": "Geregistreerd", + "colLastOnline": "Laatst online", + "colActions": "Acties", + "yes": "Ja", + "no": "Nee", + "edit": "Bewerken", + "setRank": "Rang instellen", + "disconnect": "Verbinding verbreken", + "alert": "Melding", + "ban": "Verban", + "detail": { + "title": "Gebruiker: {username}", + "subtitle": "Accountdetails en beheer", + "overview": "Overzicht", + "actions": "Acties", + "username": "Gebruikersnaam", + "email": "E-mail", + "motto": "Motto", + "rank": "Rang", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamanten", + "online": "Online", + "registered": "Geregistreerd", + "lastOnline": "Laatst online", + "ipAddress": "IP-adres", + "machineId": "Apparaat-ID", + "sendAlert": "Melding sturen", + "sendMessage": "Bericht sturen", + "disconnectUser": "Verbinding verbreken", + "banUser": "Gebruiker verbanne", + "resetPassword": "Wachtwoord resetten", + "deleteUser": "Gebruiker verwijderen", + "confirmDelete": "Weet je zeker dat je {username} wilt verwijderen? Dit kan niet ongedaan worden gemaakt.", + "tabInfo": "Accountgegevens", + "tabBadges": "Badges ({count})", + "tabRooms": "Kamers ({count})", + "tabSanctions": "Sancties ({count})", + "tabActivity": "Activiteit" + }, + "editForm": { + "title": "Gebruiker bewerken: {username}", + "subtitle": "Accountgegevens wijzigen", + "username": "Gebruikersnaam", + "usernamePlaceholder": "Gebruikersnaam", + "email": "E-mail", + "emailPlaceholder": "gebruiker@example.com", + "motto": "Motto", + "mottoPlaceholder": "Gebruikersmotto", + "rank": "Rang", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamanten", + "save": "Wijzigingen opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren" + }, + "presentation": { + "users": "Gebruikers", + "edit": "Bewerken", + "view": "Bekijken", + "rank": "Rang {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Verbannen", + "credits": "credits", + "diamonds": "diamanten", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Kamers", + "messages": "Berichten", + "trades": "Ruiltransacties", + "accountDetails": "Accountgegevens", + "registered": "Geregistreerd", + "lastLogin": "Laatste login", + "ipRegister": "Registratie-IP", + "ipCurrent": "Huidig IP", + "machineId": "Apparaat-ID", + "email": "E-mail", + "gender": "Geslacht", + "never": "Nooit", + "findIp": "Gebruikers met dit IP zoeken", + "enabled": "Ingeschakeld", + "disabled": "Uitgeschakeld", + "unavailable": "Niet beschikbaar", + "noBadges": "Geen badges toegewezen" + }, + "create": { + "newUser": "Nieuwe gebruiker", + "title": "Gebruiker aanmaken", + "description": "Maakt het account direct aan met een standaardavatar en 5.000 credits, pixels, duckets en diamanten.", + "username": "Gebruikersnaam", + "email": "E-mail", + "password": "Wachtwoord", + "rank": "Rang", + "rankOption": "Rang {rank}", + "motto": "Motto (optioneel)", + "usernamePlaceholder": "NieuweHabbo", + "passwordPlaceholder": "Minimaal 6 tekens", + "mottoPlaceholder": "Ik ben hier nieuw!", + "generate": "Genereren", + "passwordGenerated": "Wachtwoord gegenereerd in het wachtwoordveld.", + "required": "Gebruikersnaam, e-mail en wachtwoord zijn verplicht.", + "invalidUsername": "Gebruik 3–20 tekens: letters, cijfers, _ of -.", + "passwordLength": "Het wachtwoord moet minimaal 6 tekens bevatten.", + "created": "Gebruiker {username} aangemaakt." + }, + "overview": { + "title": "Overzicht", + "hint": "Maximaal 5 recente registraties per bron. Alleen onderdelen waarvoor je toegang hebt worden getoond.", + "restricted": "Je hebt geen toestemming om operationele gegevens te bekijken.", + "sanctions": "Recente bans", + "mute": "Actieve mute", + "tickets": "Supporttickets", + "help": "Helpcentrumverzoeken", + "reports": "Meldingen in het spel", + "transactions": "Betalingen", + "purchases": "Catalogusaankopen", + "activity": "Geregistreerde stafacties", + "openModule": "Beheer openen", + "purchaseHint": "Geregistreerde aantallen en valutakosten.", + "purchaseDetail": "Aantal: {amount} · Credits: {credits} · Punten: {points} (type {type})", + "activityHint": "Staflogboekregels over dit account. Dit is geen volledige geschiedenis van de activiteit van de speler.", + "muteUntil": "Gedempt tot {date}", + "error": "Deze bron kon niet worden geladen. Vernieuw de pagina om het opnieuw te proberen.", + "empty": "Geen registraties gevonden.", + "status": { + "active": "Actief", + "expired": "Verlopen", + "open": "Open", + "closed": "Gesloten", + "reported": "Gemelde gebruiker", + "reporter": "Melder" + } + } + }, + "bans": { + "title": "Bans", + "subtitle": "Beheer account-, IP- en machine-bans", + "newBan": "Nieuwe ban", + "edit": "Bewerken", + "delete": "Verwijderen", + "noBans": "Nog geen bans", + "confirmDelete": "Deze ban verwijderen?", + "colId": "ID", + "colValue": "Waarde", + "colType": "Type", + "colReason": "Reden", + "colBannedBy": "Verbannen door", + "colExpires": "Verloopt", + "colCreated": "Aangemaakt", + "colActions": "Acties", + "form": { + "value": "Waarde", + "valuePlaceholder": "Gebruikersnaam, IP of machine ID", + "type": "Type", + "typeUser": "Gebruiker", + "typeIp": "IP", + "typeMachine": "Machine", + "reason": "Reden", + "reasonPlaceholder": "Ban reden", + "expiresAt": "Verloopt op", + "permanent": "Permanent", + "save": "Ban opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren" + }, + "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-beheer", + "subtitle": "Beheer IP whitelist en blacklist", + "whitelist": "Whitelist", + "blacklist": "Blacklist", + "addIp": "IP toevoegen", + "ipAddress": "IP-adres", + "ipAddressPlaceholder": "Bijv. 127.0.0.1", + "reason": "Reden", + "reasonPlaceholder": "Reden voor plaatsing", + "add": "Toevoegen", + "remove": "Verwijderen", + "confirmRemove": "Dit IP verwijderen van de {list}?", + "noWhitelistedIps": "Geen IP's op whitelist", + "noBlacklistedIps": "Geen IP's op blacklist", + "colIp": "IP", + "colReason": "Reden", + "colAdded": "Toegevoegd", + "colActions": "Acties", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "VPN / Proxy Detectie", + "subtitle": "Configureer VPN- en proxy-detectie instellingen", + "enabled": "Ingeschakeld", + "apiKey": "API-sleutel", + "apiKeyPlaceholder": "Je VPN detectie API-sleutel", + "apiKeyHint": "Leeg laten om uit te schakelen", + "blockOnDetect": "Blokkeren bij detectie", + "blockOnDetectHint": "Automatisch gebruikers blokkeren die achter een VPN of proxy worden gedetecteerd", + "save": "Instellingen opslaan", + "saving": "Opslaan…", + "settingsSaved": "VPN-instellingen succesvol opgeslagen", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Teamsollicitaties", + "subtitle": "Openstaande en beoordeelde sollicitaties", + "pending": "In afwachting", + "approved": "Goedgekeurd", + "rejected": "Afgewezen", + "noApplications": "Nog geen sollicitaties", + "colId": "ID", + "colApplicant": "Sollicitant", + "colPosition": "Positie", + "colStatus": "Status", + "colSubmitted": "Ingediend", + "colActions": "Acties", + "review": "Beoordelen", + "approve": "Goedkeuren", + "reject": "Afwijzen", + "confirmApprove": "{username} goedkeuren voor {position}?", + "confirmReject": "{username}'s sollicitatie voor {position} afwijzen?", + "detail": { + "title": "Sollicitatie van {username}", + "subtitle": "Voor {position}", + "about": "Over de sollicitant", + "message": "Sollicitatiebericht", + "status": "Status", + "submitted": "Ingediend", + "noMessage": "Geen bericht opgegeven" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Teams", + "subtitle": "Definieer team rangnamen en beschrijvingen", + "addRank": "Rang toevoegen", + "editRank": "Rang bewerken", + "deleteRank": "Rang verwijderen", + "noTeams": "Nog geen rangdefinities", + "confirmDelete": "Rang {id} definitie verwijderen?", + "colId": "ID", + "colRank": "Rang", + "colName": "Naam", + "colBadge": "Badge", + "colColour": "Kleur", + "colActions": "Acties", + "form": { + "rankId": "Rang ID", + "rankIdPlaceholder": "Numeriek rang ID", + "name": "Naam", + "namePlaceholder": "Bijv. Administrator", + "badge": "Badge code", + "badgePlaceholder": "Bijv. ADM001", + "colour": "Kleur", + "colourPlaceholder": "Bijv. #ff0000", + "save": "Teamdefinitie opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Permissies", + "subtitle": "Dit is de live toegangscontrole voor admin- en mod-panelen", + "addPermission": "Permissie toevoegen", + "editPermission": "Permissie bewerken", + "deletePermission": "Permissie verwijderen", + "noPermissions": "Nog geen permissies geconfigureerd", + "confirmDelete": "Deze permissie verwijderen?", + "colId": "ID", + "colRank": "Rang", + "colPermission": "Permissie", + "colCreated": "Aangemaakt", + "colActions": "Acties", + "form": { + "rankId": "Rang ID", + "rankIdPlaceholder": "Minimale vereiste rang", + "permission": "Permissiesleutel", + "permissionPlaceholder": "Bijv. admin.articles.manage", + "save": "Permissie opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren" + } + }, + "catalog": { + "title": "Catalogus", + "subtitle": "Bladeren en beheren van cataloguspagina's en items", + "pages": "Pagina's", + "items": "Items", + "addPage": "Pagina toevoegen", + "editPage": "Pagina bewerken", + "deletePage": "Pagina verwijderen", + "addItem": "Item toevoegen", + "editItem": "Item bewerken", + "deleteItem": "Item verwijderen", + "noPages": "Nog geen cataloguspagina's", + "noItems": "Geen items op deze pagina", + "confirmDeletePage": "Cataloguspagina \"{name}\" verwijderen?", + "confirmDeleteItem": "Dit item verwijderen?", + "colId": "ID", + "colName": "Naam", + "colIcon": "Icoon", + "colOrder": "Volgorde", + "colItems": "Items", + "colEnabled": "Ingeschakeld", + "colActions": "Acties", + "colItemId": "Item ID", + "colItemName": "Item naam", + "colCostCredits": "Kosten (credits)", + "colCostPoints": "Kosten (punten)", + "colLimited": "Gelimiteerd", + "pageForm": { + "name": "Naam", + "namePlaceholder": "Pagina naam", + "icon": "Icoon ID", + "iconPlaceholder": "Numeriek icoon ID", + "order": "Volgorde", + "enabled": "Ingeschakeld", + "parent": "Bovenliggende pagina", + "parentNone": "Geen (hoofd)", + "save": "Pagina opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren" + }, + "itemForm": { + "itemId": "Item ID", + "itemName": "Item naam", + "costCredits": "Kosten in credits", + "costDuckets": "Kosten in duckets", + "costDiamonds": "Kosten in diamanten", + "limitedStack": "Gelimiteerde stackgrootte", + "limitedSold": "Gelimiteerd verkocht", + "save": "Item opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren" + }, + "workspace": { + "diagnostics": "Diagnostiek", + "editor": "Editor", + "normal": "Catalogus", + "tree": "Boom", + "table": "Tabel", + "manager": "Catalogusbeheer", + "backToCategories": "Terug naar categorieën", + "retryPage": "Pagina opnieuw laden", + "retryItems": "Aanbiedingen opnieuw laden", + "hotel": "Hotel", + "sent": "Updateverzoek verzonden", + "sendFailed": "Updateverzoek mislukt", + "unknown": "Nog geen status", + "disabled": "Niet ingesteld", + "exportFailed": "Export mislukt", + "queued": "Export in wachtrij", + "exported": "Export voltooid", + "retryHotel": "Hotelupdate opnieuw proberen", + "retryStatus": "Status niet beschikbaar — opnieuw proberen", + "saved": "Opgeslagen", + "globalSearch": "Catalogus doorzoeken", + "searchPlaceholder": "Categorie, aanbieding, classname of ID", + "searchNoResults": "Geen resultaten gevonden", + "searchFailed": "Zoeken mislukt. Probeer opnieuw.", + "searching": "Zoeken...", + "category": "Categorie", + "offer": "Aanbieding", + "duplicate": { + "title": "Categorie dupliceren", + "description": "Kopieer deze categorie, alle subcategorieën en alle bijbehorende aanbiedingen.", + "name": "Naam van de nieuwe categorie", + "destination": "Doelcategorie", + "disabled": "De gekopieerde hoofdcategorie begint uitgeschakeld en verborgen. Subcategorieën behouden hun instellingen; meubeldefinities en bestanden worden gedeeld.", + "counts": "{pages} categorieën en {offers} aanbiedingen", + "summary": "‘{name}’ onder {destination}", + "cancel": "Annuleren", + "working": "Bezig…", + "confirm": "Dupliceren bevestigen", + "preview": "Kopie bekijken", + "saved": "Categorie en aanbiedingen gedupliceerd", + "savedPending": "Kopie opgeslagen; hotelupdate in afwachting", + "failed": "Dupliceren mislukt", + "root": "Catalogushoofdmap", + "search": "Categorieën zoeken…", + "empty": "Geen categorie gevonden", + "suggested": "Voorgesteld", + "all": "Alle categorieën", + "draftBlocked": "Sla categoriewijzigingen op of annuleer ze voordat je dupliceert." + }, + "unsaved": "Niet-opgeslagen wijzigingen", + "fullEditor": "Volledige editor", + "saveHint": "Categoriewijzigingen zijn niet opgeslagen. Gebruik Opslaan of Ctrl+S.", + "access": { + "enabled": "Categorie actief", + "enabledHint": "Maakt deze categorie beschikbaar in de catalogus.", + "visible": "Zichtbaar in het menu", + "visibleHint": "Toont deze categorie in het catalogusmenu.", + "club": "Alleen HC", + "clubHint": "Beperkt toegang tot gebruikers met een HC-abonnement.", + "yes": "Ja", + "no": "Nee" + }, + "preview": { + "label": "Live catalogusvoorbeeld", + "title": "Live voorbeeld", + "on": "Aan", + "off": "Uit", + "untitled": "Naamloze pagina", + "noItems": "Nog geen aanbiedingen op deze pagina", + "items": "aanbieding(en)", + "disabledHint": "Deze pagina is uitgeschakeld — spelers zien haar niet.", + "suggestedLayout": "Betere indeling voorgesteld", + "suggestedLayoutReason": "Deze pagina {reason}. Schakel over naar “{layout}” zodat deze overeenkomt met wat spelers verwachten.", + "applyLayout": "Indeling toepassen" + }, + "autoCategory": { + "title": "Auto-Categorie", + "itemsBadge": "{count} items", + "fromFurni": "Vanuit furni", + "emptyPage": "Lege pagina", + "searchPlaceholder": "Zoek furni op naam of classname…", + "noResults": "Geen resultaten", + "added": "Toegevoegd", + "price": "Prijs", + "free": "Gratis", + "setPrice": "Stel een prijs in", + "credits": "Credits", + "points": "Punten", + "pointsType": "Type", + "parent": "Bovenliggende categorie", + "root": "Catalogus-hoofdmap", + "caption": "Naam", + "captionPlaceholder": "bijv. Stoelen, Behang…", + "icon": "Icoon", + "pickIcon": "Kies icoon", + "layout": "Indeling", + "suggestedLayout": "Voorgesteld: {layout}", + "enabled": "Ingeschakeld", + "visible": "Zichtbaar", + "cancel": "Annuleren", + "create": "Aanmaken", + "createWithItems": "Aanmaken ({count} items)" + }, + "organizeImports": { + "title": "Imports organiseren", + "itemsBadge": "{count} items", + "loading": "Geïmporteerde meubels laden…", + "empty": "Geen geïmporteerde meubels gevonden. Importeer eerst meubels.", + "loadError": "Kon imports niet laden. Probeer het opnieuw.", + "refresh": "Vernieuwen", + "desc": "Geïmporteerde meubels worden gegroepeerd in voorgestelde pagina's. Bekijk elke groep en maak alleen de pagina's aan die je goedkeurt.", + "selectAll": "Alles selecteren", + "deselectAll": "Alles deselecteren", + "mode": "Modus", + "modeCreate": "Nieuwe pagina's aanmaken", + "modeMove": "Verplaatsen naar bestaande pagina", + "destination": "Doelpagina", + "destinationChosen": "geselecteerd", + "destinationSearchPlaceholder": "Zoek pagina's op naam…", + "noDestResults": "Geen pagina's gevonden", + "destinationHint": "Alle goedgekeurde groepen worden naar deze pagina verplaatst — er wordt geen nieuwe pagina aangemaakt.", + "chooseDestination": "Kies eerst een doelpagina", + "move": "{count, plural, one {1 item verplaatsen} other {# items verplaatsen}}", + "name": "Naam", + "icon": "Icoon", + "layout": "Indeling", + "resetSuggestion": "Voorgesteld", + "suggestedLayout": "Voorgesteld: {layout}", + "movedLabel": "{count} verplaatst", + "newLabel": "{count} nieuw", + "isNew": "nieuw", + "price": "Prijs", + "free": "Gratis", + "setPrice": "Stel een prijs in", + "credits": "Credits", + "points": "Punten", + "pointsType": "Type", + "newPriceHint": "Geldt alleen voor nieuwe aanbiedingen; verplaatste aanbiedingen behouden hun huidige prijs.", + "parent": "Pagina's plaatsen onder", + "root": "Catalogus-hoofdmap", + "importedRoot": "Imported Furniture", + "cancel": "Annuleren", + "create": "{count, plural, one {1 pagina aanmaken} other {# pagina's aanmaken}}", + "batchLayout": "Indeling voor alle", + "batchPrefix": "Prefix toevoegen aan titels", + "applyBatch": "Toepassen op alle", + "searchGroups": "Filter importgroepen...", + "visualPreview": "Voorbeeld", + "resetAll": "Wijzigingen herstellen", + "onlyUnplaced": "Toon alleen ongeplaatste items", + "errorMaxItems": "Maximaal 1000 items per run. Verlaag de selectie.", + "errorMaxGroups": "Maximaal {count} groepen per run. Verlaag de selectie.", + "errorNoName": "Elke goedgekeurde pagina heeft een naam nodig", + "tipMove": "Tip: Kies de doelpagina in het vak hieronder om meubels te verplaatsen.", + "tipCreate": "Tip: Kies deze modus om nieuwe pagina's aan te maken.", + "limitHint": "Maximaal 1000 items en 50 groepen per run.", + "errorFailed": "Kon imports niet organiseren", + "successMove": "{moved} item{moved, plural, one { verplaatst} other {s verplaatst}}{added, plural, =0 {} other {, {added} nieuw toegevoegd}} naar \"{destination}\"", + "successCreate": "{count, plural, one {1 pagina} other {# pagina's}} aangemaakt met {moved} verplaatste en {added} toegevoegde meubels", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "verplaatst" + } + }, + "bulk": { + "previewCount": "{count} van {total} aanbiedingen worden gewijzigd.", + "success": "{count} aanbiedingen bijgewerkt.", + "selectOffer": "Selecteer aanbieding {name} (#{id})", + "pageEmpty": "Geen categorie gevonden.", + "clearSelection": "Selectie wissen", + "disabledReason": "Sla openstaande wijzigingen op of herstel ze en wacht tot lopende bewerkingen klaar zijn voordat je in bulk bewerkt.", + "operation": "Bewerking", + "loadingDestinations": "Categorieën laden…", + "cancel": "Annuleren", + "pagePlaceholder": "Selecteer de doelcategorie…", + "noChanges": "De geselecteerde waarden komen al overeen. Geen wijzigingen om op te slaan.", + "costPoints": "Prijs in punten", + "chooseFields": "Vink minstens één veld aan om te wijzigen.", + "pageAll": "Alle categorieën", + "offer": "Aanbieding", + "costCredits": "Credits", + "invalidPrice": "Voer een geldig getal in. Instellen en optellen vereisen gehele getallen.", + "modes": { + "set": "Waarde instellen", + "add": "Optellen of aftrekken", + "percent": "Procentueel wijzigen" + }, + "fieldHint": "Alleen aangevinkte velden worden gewijzigd.", + "currencies": { + "0": "Duckets", + "5": "Diamanten", + "101": "Sneeuwvlokken", + "103": "Harten", + "104": "Sterren", + "105": "Schelpen" + }, + "currency": "Puntenvaluta", + "button": "Bulk bewerken ({count})", + "description": "{count} aanbiedingen geselecteerd. Bekijk de wijzigingen voordat je opslaat.", + "confirm": "Bevestig en sla {count} aanbiedingen op", + "beforeAfter": "Elke cel toont de huidige waarde → de nieuwe waarde.", + "requestFailed": "Het verzoek is mislukt. Vernieuw het voorbeeld voordat je het opnieuw probeert.", + "priceHint": "Gebruik negatieve waarden of percentages om prijzen te verlagen. Procentuele resultaten worden afgerond op het dichtstbijzijnde gehele getal; eindprijzen mogen niet negatief zijn.", + "selectedCount": "{count} aanbiedingen geselecteerd in categorieën", + "value": "Waarde", + "unknownCurrency": "Type {type}", + "becomes": "wordt", + "title": "Geselecteerde aanbiedingen bewerken", + "preview": "Wijzigingen bekijken", + "retryDestinations": "Categorieën opnieuw laden", + "chooseDestination": "Selecteer een doelcategorie.", + "pageSuggested": "Voorgesteld", + "previewTitle": "Controleer de wijzigingen", + "visibilityHint": "De categorie bepaalt de zichtbaarheid. Verplaatste aanbiedingen volgen de zichtbaarheid van de doelcategorie.", + "percentage": "Percentage (%)", + "destination": "Doelcategorie", + "pageSearch": "Categorieën zoeken…", + "back": "Wijzigingen aanpassen", + "selectionLimit": "Selecteer maximaal 500 aanbiedingen per bewerking.", + "refreshing": "Bijgewerkte aanbiedingen vernieuwen…", + "undo": "Ongedaan maken", + "undoHint": "Je kunt afzonderlijke aanbiedingen ook herstellen via de auditgeschiedenis.", + "undoSuccess": "{count} aanbiedingen hersteld." + }, + "discovery": { + "searchPlaceholder": "Naam, classname, meubel-ID of #aanbiedings-ID…", + "filterLabel": "Aanbiedingen filteren", + "filters": { + "all": "Alle aanbiedingen", + "free": "Gratis", + "paid": "Betaald", + "bundles": "Bundels", + "limited": "Gelimiteerde edities" + }, + "shown": "({count} zichtbaar)", + "selected": "{count} geselecteerd", + "reset": "Filters wissen", + "results": "{count} van {total} aanbiedingen zichtbaar.", + "selectionHint": "De selectie wordt gewist wanneer je de zoekopdracht of het filter wijzigt.", + "noResults": "Geen aanbiedingen passen bij de huidige zoekopdracht en het filter.", + "selectVisible": "Alle zichtbare aanbiedingen selecteren" + }, + "packages": { + "openPackages": "Cataloguspakketten", + "title": "Cataloguspakketten", + "description": "Bereid categorie- en prijswijzigingen voor in een apart concept. Controleer de catalogus voordat je publiceert.", + "createPackage": "Nieuw pakket", + "createDraft": "Concept maken", + "draftCreated": "Pakketconcept gemaakt. De livecatalogus is niet gewijzigd.", + "refresh": "Lijst vernieuwen", + "searchPackages": "Pakketten zoeken", + "noPackages": "Geen pakketten gevonden.", + "choosePackage": "Open een pakket of maak een concept op basis van bestaande categorieën.", + "name": "Pakketnaam", + "mode": "Publicatiemodus", + "update": "Bestaande categorieën bijwerken", + "copy": "Kopieën maken", + "updateHint": "Bij publicatie worden de bestaande categorieën en aanbiedingen bijgewerkt.", + "copyHint": "Bij publicatie worden nieuwe categorieën en aanbiedingen onder de gekozen bovenliggende categorie gemaakt. Meubelverwijzingen blijven behouden.", + "sourceCategories": "Broncategorieën", + "packageLimits": "Subcategorieën worden meegenomen. Elk pakket ondersteunt maximaal 200 categorieën en 500 aanbiedingen.", + "searchCategories": "Categorieën zoeken", + "selectedCategories": "Geselecteerd: {count}", + "targetParent": "Bovenliggende doelcategorie", + "rootCategory": "Hoofdniveau van de catalogus", + "draft": "Concept", + "published": "Gepubliceerd", + "editDraft": "Concept bewerken", + "catalogPreview": "Catalogusvoorbeeld", + "showBaseline": "Oorspronkelijke opgeslagen momentopname tonen", + "changes": "Voor en na", + "entry": "Onderdeel", + "field": "Veld", + "before": "Voor", + "after": "Na", + "noChanges": "Geen velden gewijzigd ten opzichte van de oorspronkelijke momentopname.", + "copyReview": "Het volledige pakket wordt bij publicatie gekopieerd, ook zonder veldwijzigingen. De tabel toont wijzigingen ten opzichte van de oorspronkelijke momentopname.", + "updateReview": "Deze conceptwijzigingen worden na publicatie op bestaande catalogusonderdelen toegepast.", + "saveDraft": "Concept opslaan", + "saveHint": "Opslaan bewaart het pakket als concept. Sla alle wijzigingen op voordat je een publicatiecontrole aanvraagt.", + "draftSaved": "Concept opgeslagen. Publiceren is een aparte stap.", + "reviewPublication": "Publicatie controleren", + "publicationImpact": "Publicatie betreft {pages} categorieën en {offers} aanbiedingen.", + "conflicts": "Publicatie wordt geblokkeerd door conflicten. Los deze op voordat je opnieuw controleert.", + "readyToPublish": "De opgeslagen versie heeft de publicatiecontrole doorstaan. Publiceren wijzigt de livecatalogus.", + "publish": "Pakket publiceren", + "confirmPublish": "Dit gecontroleerde pakket nu publiceren in de livecatalogus?", + "publishedSuccess": "Pakket gepubliceerd: {pages} categorieën en {offers} aanbiedingen.", + "staleReview": "Dit pakket is in een andere sessie gewijzigd. Open het opnieuw om de laatste opgeslagen versie te controleren.", + "unsaved": "Niet-opgeslagen wijzigingen", + "discardChanges": "Niet-opgeslagen pakketwijzigingen verwerpen en doorgaan?", + "working": "Bezig…", + "requestFailed": "Het verzoek is mislukt. Probeer het opnieuw.", + "invalidFields": "Controleer verplichte namen, lay-outs en gehele getallen voordat je opslaat.", + "category": "Categorie", + "caption": "Categorienaam", + "iconImage": "Categoriepictogram-ID", + "minRank": "Minimale rang", + "orderNum": "Weergavevolgorde", + "pageLayout": "Paginalay-out", + "enabled": "Ingeschakeld", + "visible": "Zichtbaar", + "clubOnly": "Alleen Clubleden", + "vipOnly": "Alleen VIP-leden", + "offers": "Aanbiedingen ({count})", + "offer": "Aanbieding", + "catalogName": "Aanbiedingsnaam", + "costCredits": "Credits", + "costPoints": "Punten", + "pointsType": "Puntenvaluta-ID", + "amount": "Aantal", + "searchOffers": "Aanbiedingen zoeken", + "currentCategoryOffers": "Alleen de geselecteerde categorie", + "selectMatching": "Alle overeenkomende aanbiedingen selecteren ({count})", + "clearSelection": "Selectie wissen", + "selectedOffers": "Geselecteerde aanbiedingen: {count}", + "select": "Selecteren", + "selectOffer": "Aanbieding #{id} selecteren", + "noOffers": "Geen aanbiedingen gevonden met deze filters.", + "bulkPrices": "Conceptprijzen in bulk ({count} geselecteerd)", + "bulkHint": "Bekijk de geselecteerde prijswijzigingen en neem ze daarna over in dit concept. De livecatalogus blijft ongewijzigd tot publicatie.", + "operation": "Bewerking", + "set": "Waarde instellen", + "add": "Optellen of aftrekken", + "percent": "Procentueel aanpassen", + "value": "Waarde", + "reviewBulk": "Prijsvoorbeeld", + "invalidBulk": "Kies geldige getallen en minstens één aanbieding. De resulterende prijzen mogen niet negatief zijn en moeten binnen het ondersteunde bereik vallen.", + "acceptBulk": "Prijzen overnemen in concept", + "previous": "Vorige", + "next": "Volgende" + }, + "integrity": { + "title": "Catalogusintegriteit", + "description": "Controleer verwijzingen, categoriepaden, identificaties en meubeliconen. Een controle wijzigt geen records.", + "catalog": "Catalogus", + "normal": "Normale catalogus", + "bc": "Builders Club", + "refresh": "Opnieuw controleren", + "working": "Controleren…", + "failed": "De bewerking kon niet worden voltooid. Probeer opnieuw.", + "stalePreview": "De catalogus is sinds het voorbeeld gewijzigd. Maak een nieuw voorbeeld voordat je reparaties toepast.", + "applied": "{count} categorieën opnieuw aan de catalogushoofdmap gekoppeld.", + "iconsUnavailable": "De map met iconen kon niet worden gelezen. De beschikbaarheid van iconen is niet gecontroleerd.", + "healthy": "Geen problemen gevonden in de voltooide controles.", + "total": "{count} problemen gevonden. {shown} weergegeven.", + "open": "Openen", + "reference": "Verwijzing: {value}", + "repairHint": "Bekijk categorieën waarvan de bovenliggende categorie niet meer bestaat. Alleen deze categorieën worden naar de hoofdmap verplaatst; alle records blijven behouden. Cycli, ontbrekende meubels, iconen en conflicterende identificaties vereisen afzonderlijke controle.", + "preview": "Veilige reparaties bekijken", + "planned": "{count} categorieën worden verplaatst:", + "parentChange": "bovenliggende categorie #{from} → catalogushoofdmap", + "apply": "Getoonde reparaties toepassen", + "legacyTitle": "Geavanceerd onderhoud", + "legacyHint": "Deze bestaande onderhoudstools kunnen identificaties herschrijven en dubbele records samenvoegen of verwijderen. Ze staan los van de integriteitscontrole die niets verwijdert en de vooraf getoonde reparatie van bovenliggende categorieën.", + "issues": { + "missing_furniture": "Aanbieding verwijst naar ontbrekende meubels", + "invalid_item_ids": "Ongeldige meubelidentificaties", + "missing_page": "Aanbieding verwijst naar ontbrekende categorie", + "unreachable_page": "Onbereikbare categorie", + "category_cycle": "Categoriepad bevat een cyclus", + "missing_icon": "Ontbrekend meubelicoon", + "invalid_offer_id": "Ongeldige aanbiedingsidentificatie", + "duplicate_offer_id": "Herhaalde aanbiedingsidentificatie" + } + } + }, + "shop": { + "title": "Winkel", + "subtitle": "Beheer pakketten en bestellingen", + "packages": "Pakketten", + "orders": "Bestellingen", + "recentOrders": "Recente bestellingen", + "paidOrders": "Betaalde bestellingen", + "ordersHint": "Laatste PayPal-transacties (meest recente 25)", + "pageOf": "Pagina {page} van {lastPage}", + "packagesTotal": "{count} pakketten", + "newPackage": "+ Nieuw pakket", + "edit": "Bewerken", + "delete": "Verwijderen", + "viewOrder": "Bekijken", + "noPackages": "Nog geen winkelpakketten", + "noOrders": "Nog geen bestellingen", + "confirmDelete": "Dit pakket verwijderen?", + "colId": "ID", + "colName": "Naam", + "colPrice": "Prijs", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamanten", + "colRank": "Rang", + "colPosition": "Positie", + "colCurrency": "Valuta", + "colType": "Type", + "colSold": "Verkocht", + "colEnabled": "Ingeschakeld", + "colActions": "Acties", + "colOrderId": "Bestelling ID", + "colCustomer": "Klant", + "colPackage": "Pakket", + "colTransaction": "Transactie", + "colUser": "Gebruiker", + "colDescription": "Beschrijving", + "colAmount": "Bedrag", + "colStatus": "Status", + "colDate": "Datum", + "statusPending": "In afwachting", + "statusCompleted": "Voltooid", + "statusRefunded": "Terugbetaald", + "form": { + "name": "Naam", + "namePlaceholder": "Pakket naam", + "description": "Beschrijving", + "descriptionPlaceholder": "Pakket beschrijving", + "price": "Prijs", + "currency": "Valuta", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Type", + "typeCredits": "Credits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamanten", + "typeBadge": "Badge", + "typeFurni": "Meubels", + "typeRank": "Rang", + "amount": "Hoeveelheid", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "Bijv. VIP001", + "rankId": "Rang ID", + "furniItems": "Meubel items", + "enabled": "Ingeschakeld", + "save": "Pakket opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace-aanbiedingen", + "activeListings": "Actieve listings", + "soldListings": "Verkocht", + "filterActive": "Actief", + "filterSold": "Verkocht", + "empty": "Geen marketplace-listings om te tonen.", + "loadError": "Kon marketplace-gegevens niet laden (database niet beschikbaar).", + "cancel": "Listing annuleren", + "colId": "ID", + "colItem": "Item-ID", + "colSeller": "Verkoper", + "colPrice": "Prijs", + "colListed": "Geplaatst", + "colSold": "Verkocht op", + "colActions": "Acties" + }, + "guilds": { + "title": "Gildes", + "subtitle": "Hotelgroepen en leden", + "totalGuilds": "Gildes", + "searchPlaceholder": "Zoek op naam, beschrijving of ID…", + "search": "Zoeken", + "empty": "Geen gildes gevonden.", + "loadError": "Kon gildes niet laden (database niet beschikbaar).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Naam", + "colOwner": "Eigenaar", + "colMembers": "Leden", + "colCreated": "Aangemaakt", + "colThreads": "Forumthreads", + "colRoom": "Kamer", + "colUser": "Gebruiker", + "colLevel": "Niveau", + "colJoined": "Lid sinds", + "members": "Leden", + "noMembers": "Geen leden.", + "back": "Terug naar gildes", + "viewPublic": "Openbare pagina", + "disband": "Gilde ontbinden", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "transactions": { + "title": "Transacties", + "subtitle": "PayPal betalingslogboek", + "totalTransactions": "Totaal transacties", + "pagePaid": "Betaald (deze pagina)", + "pageFailed": "Mislukt (deze pagina)", + "searchPlaceholder": "Zoek op gebruiker, transactie-ID of pakket…", + "presetPaid": "Betaald", + "presetFailed": "Mislukt", + "noTransactions": "Nog geen transacties", + "colId": "ID", + "colUser": "Gebruiker", + "colPayer": "Betaler", + "colAmount": "Bedrag", + "colCurrency": "Valuta", + "colPackage": "Pakket", + "colTransaction": "Transactie-ID", + "colStatus": "Status", + "colDate": "Datum", + "colActions": "Acties", + "statusCompleted": "Voltooid", + "statusPending": "In afwachting", + "statusFailed": "Mislukt", + "statusRefunded": "Terugbetaald", + "detail": { + "title": "Transactie #{id}", + "paypalId": "PayPal ID", + "payerEmail": "Betaler e-mail", + "grossAmount": "Brutobedrag", + "fee": "Kosten", + "netAmount": "Nettobedrag" + } + }, + "vouchers": { + "title": "Winkel Vouchers", + "subtitle": "Beheer inwisselbare vouchercodes", + "vouchers": "Vouchers", + "active": "Actief", + "usedUp": "Opgebruikt", + "expired": "Verlopen", + "newVoucher": "+ Nieuwe voucher", + "edit": "Bewerken", + "delete": "Verwijderen", + "noVouchers": "Nog geen vouchers", + "confirmDeleteTitle": "Voucher verwijderen", + "confirmDelete": "Voucher \"{code}\" verwijderen?", + "created": "Voucher aangemaakt", + "deleted": "Voucher verwijderd", + "createError": "Kon voucher niet aanmaken", + "deleteError": "Kon voucher niet verwijderen", + "statusActive": "Actief", + "statusUsedUp": "Opgebruikt", + "statusExpired": "Verlopen", + "colId": "ID", + "colCode": "Code", + "colValue": "Waarde", + "colAmount": "Bedrag", + "colType": "Type", + "colUses": "Gebruik / Max", + "colStatus": "Status", + "colExpires": "Verloopt", + "colCreated": "Aangemaakt", + "colActions": "Acties", + "form": { + "code": "Code", + "codePlaceholder": "Bijv. ZOMER2025", + "value": "Waarde", + "amount": "Aantal credits", + "amountPlaceholder": "bijv. 100", + "type": "Type", + "typeCredits": "Credits", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamanten", + "typeBadge": "Badge", + "typeFurni": "Meubels", + "typeRank": "Rang", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "Bijv. VIP001", + "rankId": "Rang ID", + "maxUses": "Maximaal gebruik", + "maxUsesPlaceholder": "0 = onbeperkt", + "expiresAt": "Verloopt op", + "enabled": "Ingeschakeld", + "create": "Voucher aanmaken", + "save": "Voucher opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren" + }, + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Abonnementen", + "subtitle": "Actieve terugkerende abonnementen", + "noSubscriptions": "Geen actieve abonnementen", + "cancel": "Annuleren", + "confirmCancel": "Abonnement voor {username} annuleren?", + "colId": "ID", + "colUser": "Gebruiker", + "colPackage": "Pakket", + "colAmount": "Bedrag", + "colInterval": "Interval", + "colStarted": "Gestart", + "colNextBilling": "Volgende factuur", + "colStatus": "Status", + "colActions": "Acties", + "statusActive": "Actief", + "statusCancelled": "Geannuleerd", + "statusExpired": "Verlopen", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Zeldzame Waarden", + "subtitle": "Beheer zeldzame waarde categorieën en itemprijzen", + "categories": "Categorieën", + "items": "Items", + "addCategory": "Categorie toevoegen", + "editCategory": "Categorie bewerken", + "deleteCategory": "Categorie verwijderen", + "noCategories": "Nog geen zeldzame waarde categorieën", + "confirmDeleteCategory": "Categorie \"{name}\" en alle items verwijderen?", + "colId": "ID", + "colName": "Naam", + "colItems": "Items", + "colUpdated": "Bijgewerkt", + "colActions": "Acties", + "colItemName": "Item naam", + "colCredits": "Credits", + "colPoints": "Punten", + "colPointType": "Punttype", + "categoryForm": { + "name": "Naam", + "namePlaceholder": "Categorie naam", + "save": "Categorie opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren" + }, + "itemForm": { + "itemName": "Item naam", + "itemNamePlaceholder": "Bijv. Troon", + "credits": "Credits waarde", + "points": "Punten waarde", + "pointType": "Punttype", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Diamanten", + "save": "Item opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Badges", + "subtitle": "Uploaden, geven en beheren van badgecatalogus", + "upload": "Uploaden", + "giveBadge": "Badge geven", + "catalogue": "Catalogus", + "uploadTitle": "Nieuwe badge uploaden", + "uploadSubtitle": "Upload een badge afbeeldingsbestand", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "Bijv. VIP001", + "badgeFile": "Badge bestand", + "badgeFileHint": "PNG of GIF, aanbevolen 40x40", + "uploadButton": "Bestand kiezen", + "uploading": "Uploaden…", + "giveTitle": "Badge aan gebruiker geven", + "giveSubtitle": "Een badge toewijzen aan een specifieke gebruiker", + "username": "Gebruikersnaam", + "usernamePlaceholder": "Doel gebruikersnaam", + "giveButton": "Badge geven", + "giving": "Geven…", + "catalogueTitle": "Badgecatalogus", + "catalogueSubtitle": "Alle beschikbare badges in het hotel", + "noBadges": "Geen badges in de catalogus", + "search": "Badges zoeken", + "searchPlaceholder": "Zoeken op code of naam…", + "colCode": "Code", + "colImage": "Afbeelding", + "colName": "Naam", + "colDescription": "Beschrijving", + "colActions": "Acties", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Prestaties", + "subtitle": "Alleen-lezen lijst van in-game prestaties", + "noAchievements": "Geen prestaties geconfigureerd", + "colId": "ID", + "colName": "Naam", + "colCategory": "Categorie", + "colLevels": "Niveaus", + "colReward": "Beloning", + "colProgress": "Voortgang", + "levelLabel": "Niveau {level}", + "rewardCredits": "{count} credits", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Kalendercampagnes", + "subtitle": "Alleen-lezen lijst van kalendercampagnes en evenementen", + "noCampaigns": "Nog geen kalendercampagnes", + "colId": "ID", + "colName": "Naam", + "colStart": "Start", + "colEnd": "Einde", + "colType": "Type", + "colReward": "Beloning", + "colActions": "Acties", + "detail": { + "title": "Campagne: {name}", + "subtitle": "Kalendergebeurtenis details", + "days": "Dagen", + "dayLabel": "Dag {day}", + "reward": "Beloning", + "noDays": "Geen dagen geconfigureerd voor deze campagne", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Radiomoderatie", + "subtitle": "Latest shouts, DJ applications and on-air schedules (25 most recent of each).", + "moderation": "Moderation", + "shouts": "Shouts", + "applications": "Sollicitaties", + "schedules": "Schema's", + "settings": "Instellingen", + "embed": "Insluiten", + "ranks": "Rangen", + "history": "Geschiedenis", + "apiKeys": "API-sleutels", + "points": "Punten", + "autoDj": "AutoDJ", + "user": "User", + "message": "Message", + "posted": "Posted", + "realName": "Real Name", + "age": "Age", + "style": "Style", + "applied": "Applied", + "day": "Day", + "start": "Start", + "end": "End", + "show": "Show", + "status": "Status", + "active": "active", + "inactive": "inactive", + "hidden": "hidden", + "activeSchedules": "Active schedules", + "noShouts": "Geen shouts om te modereren", + "noApplications": "No applications submitted.", + "noSchedules": "No schedules configured.", + "deleteShout": "Verwijderen", + "confirmDeleteShout": "Deze shout verwijderen?", + "pendingApplications": "Openstaande sollicitaties", + "settingsForm": { + "title": "Radio Settings", + "subtitle": "Edits write to website_settings (radio_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "enabled": "Enabled", + "disabled": "Disabled", + "totalKeys": "Total keys", + "configured": "Configured", + "curatedHint": "curated keys with a value", + "customKeys": "Custom keys", + "saveAll": "Save all", + "singleKey": "Add / overwrite a single key", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "value", + "commentPlaceholder": "comment (optional)", + "saveSingle": "Save", + "otherSettings": "Other radio settings", + "dbError": "Could not load settings (database unavailable). Defaults will be created on save." + }, + "embedPage": { + "title": "Radio Embed", + "subtitle": "Copy-ready embed code for the live stream. Read-only — nothing here writes to the database. Configure the stream URL in Radio Settings (radio_stream_url).", + "streamUrl": "Stream URL", + "configured": "Configured", + "missing": "Missing", + "radioName": "Radio name", + "nowPlayingApi": "Now-playing API", + "set": "Set", + "notSet": "Not set", + "noStreamUrl": "No stream URL configured", + "noStreamUrlText": "There is no radio_stream_url set, so there is nothing to embed yet.", + "goToSettings": "Go to Radio Settings", + "livePreview": "Live preview", + "livePreviewText": "This is the bare audio player as visitors will see it. Press play to confirm the stream is reachable.", + "source": "Source", + "audioSnippet": "Audio player snippet", + "audioSnippetDesc": "Drop-in HTML5 audio player pointed straight at the stream. Works anywhere plain HTML is allowed.", + "iframeSnippet": "Iframe wrapper snippet", + "iframeSnippetDesc": "Embeds the site’s own radio player page in an iframe — keeps your styling and now-playing info. Adjust width/height to taste.", + "audioUnsupported": "Your browser does not support the audio element." + }, + "banners": { + "title": "Banners", + "heading": "Radio Banners", + "description": "Promotional banners shown on the radio page, ordered by sort order.", + "addBanner": "Banner toevoegen", + "createBanner": "Create banner", + "deleteBanner": "Banner verwijderen", + "noBanners": "No banners yet — add one above.", + "existing": "Existing banners ({count})", + "save": "Save", + "delete": "Delete", + "byUser": "by user {id}", + "active": "active", + "hidden": "hidden", + "bannerAlt": "Radio banner", + "statusActive": "Active", + "statusHidden": "Hidden", + "dbError": "Could not load banners (database unavailable).", + "form": { + "imagePath": "Image path / URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Title", + "description": "Description", + "sortOrder": "Sort order", + "active": "Active" + } + }, + "ranksForm": { + "title": "Radio rangen", + "subtitle": "DJ / staff ranks assignable on radio applications.", + "dbError": "Could not load ranks (database unavailable).", + "active": "Active", + "addRank": "Add rank", + "name": "Name", + "badgeCode": "Badge code", + "description": "Description", + "createRank": "Create rank", + "existing": "Existing ranks ({count})", + "noRanks": "No ranks yet — add one above.", + "activeLabel": "active", + "inactiveLabel": "inactive", + "save": "Save", + "deleteRank": "Delete rank #{id}" + }, + "historyPage": { + "title": "Radio Play History", + "subtitle": "Past DJ shows and airtime (radio_history), most recent first. Read-only log of who was on air, when, and how many listeners tuned in.", + "dbError": "Could not load radio history (database unavailable).", + "showsLogged": "Shows logged", + "onAirNow": "On air now", + "uniqueDjs": "Unique DJs", + "peakListeners": "Peak listeners", + "empty": "No radio history recorded yet.", + "showLog": "Show log ({count})", + "colDj": "DJ", + "colShow": "Show", + "colStarted": "Started", + "colEnded": "Ended", + "colAirtime": "Airtime", + "colListeners": "Listeners", + "colNotes": "Notes", + "onAir": "on air" + }, + "apiKeysForm": { + "title": "API-sleutels", + "subtitle": "API keys for external radio integrations (radio_api_keys). Keys are generated server-side and shown masked — copy the full value from the database when first issued.", + "dbError": "Could not load API keys (database unavailable).", + "totalKeys": "Total keys", + "active": "Active", + "inactive": "Inactive", + "generateKey": "Nieuwe sleutel genereren", + "generateHint": "The secret key is generated automatically with cryptographic randomness — you do not enter it.", + "name": "Name", + "namePlaceholder": "AzureCast bridge", + "rateLimit": "Rate limit (requests/min)", + "allowedIps": "Allowed IPs (optional)", + "allowedIpsPlaceholder": "comma-separated, blank = any", + "generate": "Genereren", + "existingKeys": "Existing keys ({count})", + "noKeys": "No API keys yet — generate one above.", + "colName": "Name", + "colKey": "Sleutel", + "colAllowedIps": "Allowed IPs", + "colRateLimit": "Rate limit", + "colLastUsed": "Last used", + "colExpires": "Expires", + "colStatus": "Status", + "colActions": "Acties", + "maskedHint": "Only the first 8 characters are shown", + "any": "any", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete" + }, + "pointsForm": { + "title": "Luisteraar punten configuratie", + "subtitle": "Reward listeners with currency for time spent on the radio. Edits write to website_settings (radio_points_* keys) and bust the runtime settings cache. Booleans use 0 / 1.", + "points": "Points", + "enabled": "Enabled", + "disabled": "Disabled", + "perMinute": "Per minute", + "paidIn": "paid in {currency}", + "maxPerDay": "Max / day", + "unlimited": "Unlimited", + "minListeners": "Min listeners", + "settings": "Settings", + "pointsEnabled": "Points enabled", + "pointsEnabledHint": "Master switch for awarding listener points.", + "currency": "Currency", + "currencyHint": "Which wallet the points are paid into.", + "pointsPerMinute": "Points per minute", + "pointsPerMinuteHint": "Amount awarded for each full minute of listening.", + "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", + "minListenersHint": "Points are only awarded when at least this many people are tuned in.", + "save": "Punteninstellingen opslaan", + "saved": "Settings saved." + }, + "autoDjForm": { + "title": "AutoDJ configuratie", + "subtitle": "Fallback playlist (radio_auto_dj_playlist) the radio rotates through when no live DJ is streaming. Ordered by sort order then title.", + "dbError": "Could not load the AutoDJ playlist (database unavailable).", + "tracks": "Tracks", + "active": "Active", + "inactive": "Inactive", + "addTrack": "Add track", + "trackTitle": "Title", + "titlePlaceholder": "Track title", + "artist": "Artist", + "album": "Album", + "artworkUrl": "Artwork URL", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Duration (seconds)", + "durationPlaceholder": "e.g. 215", + "sortOrder": "Sort order", + "playlist": "Playlist ({count})", + "noTracks": "No AutoDJ tracks yet — add one above.", + "colOrder": "Order", + "colTitle": "Title", + "colArtist": "Artist", + "colAlbum": "Album", + "colDuration": "Duration", + "colPlays": "Plays", + "colLastPlayed": "Last played", + "colStatus": "Status", + "colActions": "Actions", + "activeLabel": "active", + "inactiveLabel": "inactive", + "deactivate": "Deactivate", + "activate": "Activate", + "delete": "Delete" + }, + "monitoring": { + "title": "Radiomonitoring", + "subtitle": "Read-only live probe of the configured radio endpoints (radio_now_playing_api_url, radio_listeners_api_url). Each request fails soft with a {timeout}s timeout — no data is written. Configure URLs under Settings.", + "stream": "Stream", + "online": "Online", + "offline": "Offline", + "notConfigured": "Not configured", + "nowPlaying": "Now playing", + "nowPlayingApi": "Now-playing API", + "listenersApi": "Listeners API", + "listeners": "Luisteraars", + "currentSong": "Huidig nummer", + "bitrate": "Bitrate", + "status": "Status", + "noNowPlayingHint": "no now-playing API set", + "noListenersHint": "no listeners API set", + "endpointDiagnostics": "Endpoint diagnostics", + "diagnosticsLegend": "OK: bereikbaar · WARN: niet ingesteld · ERROR: aanvraag mislukt of time-out.", + "streamUrl": "Stream URL", + "unreachable": "unreachable", + "refresh": "Vernieuwen" + }, + "moderationPage": { + "title": "DJ Moderation", + "subtitle": "Review and remove radio shouts (50 most recent).", + "recentShouts": "Recent Shouts ({count})" + } + }, + "commandocentrum": { + "title": "Commandocentrum", + "subtitle": "Diagnostiek, RCON-bediening en gebruikersbeheer", + "diagnostics": "Diagnostiek", + "rcon": "RCON", + "userActions": "Gebruikersacties", + "diagnosticsTitle": "Emulator diagnostiek", + "memoryUsage": "Geheugengebruik", + "uptime": "Uptime", + "onlineUsers": "Online gebruikers", + "roomsLoaded": "Kamers geladen", + "refresh": "Vernieuwen", + "rconTitle": "RCON-commando's", + "rconPlaceholder": "Voer RCON-commando in…", + "rconSend": "Verzenden", + "rconSending": "Verzenden…", + "rconResponse": "Reactie", + "userActionsTitle": "Gebruikersacties", + "username": "Gebruikersnaam", + "usernamePlaceholder": "Doel gebruikersnaam", + "action": "Actie", + "execute": "Uitvoeren", + "actions": { + "disconnect": "Verbinding verbreken", + "alert": "Melding sturen", + "giveCredits": "Credits geven", + "giveBadge": "Badge geven", + "givePoints": "Punten geven", + "ban": "Verbanne", + "kick": "Kicken" + }, + "messagePlaceholder": "Bericht (voor meldingen)…", + "amountPlaceholder": "Bedrag…", + "badgePlaceholder": "Badge code…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Emulator Configuratie", + "subtitle": "Bekijk en bewerk emulatorinstellingen en lokale teksten", + "settings": "Instellingen", + "texts": "Teksten", + "search": "Zoeken", + "searchPlaceholder": "Zoek sleutels…", + "noSettings": "Geen instellingen gevonden", + "noTexts": "Geen teksten gevonden", + "edit": "Bewerken", + "save": "Opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren", + "colKey": "Sleutel", + "colValue": "Waarde", + "colType": "Type", + "colActions": "Acties", + "editDialog": { + "title": "Bewerken: {key}", + "value": "Waarde", + "valuePlaceholder": "Voer waarde in…", + "save": "Wijzigingen opslaan", + "cancel": "Annuleren" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Meldingen", + "subtitle": "Hotelbrede meldingen verzenden en recente meldingen bekijken", + "sendAlert": "Hotelmelding verzenden", + "recentAlerts": "Recente meldingen ({count})", + "noRecentAlerts": "Geen recente meldingen", + "form": { + "title": "Melding titel", + "titlePlaceholder": "Bijv. Serveronderhoud over 10 minuten", + "message": "Melding bericht", + "messagePlaceholder": "Schrijf het meldingsbericht…", + "type": "Type", + "typeHotel": "Hotelbrede melding", + "typeStaff": "Alleen team", + "urgent": "Urgent", + "send": "Melding verzenden", + "sending": "Verzenden…", + "description": "Verstuurt via RCON hotelalert naar online gebruikers." + }, + "colId": "ID", + "colTitle": "Titel", + "colSentBy": "Verzonden door", + "colType": "Type", + "colDate": "Datum", + "colActions": "Acties", + "noAlerts": "Geen recente meldingen", + "alertsShown": "Weergegeven", + "critical": "Kritiek", + "warnings": "Waarschuwingen", + "unread": "Ongelezen", + "markAllRead": "Alles als gelezen markeren", + "colWhen": "Wanneer", + "colSeverity": "Ernst", + "colMessage": "Bericht" + }, + "logs": { + "title": "Teamactiviteiten", + "subtitle": "Audittrail van teamacties in het beheerderspaneel", + "noLogs": "Nog geen teamactiviteit geregistreerd", + "noResults": "Geen overeenkomende activiteiten", + "colId": "ID", + "colUser": "Gebruiker", + "colStaff": "Team", + "colAction": "Actie", + "colTarget": "Doelwit", + "colDescription": "Beschrijving", + "colIp": "IP", + "colWhen": "Wanneer", + "colTimestamp": "Tijdstempel", + "filterByUser": "Filteren op gebruiker…", + "filterByAction": "Filteren op actie…", + "clearFilters": "Filters wissen", + "searchPlaceholder": "Zoek op actie, beschrijving of IP…", + "totalActivities": "Totaal activiteiten", + "onThisPage": "Op deze pagina", + "recent": "Laatste minuut", + "authorizationErrors": "Autorisatiefouten", + "authorizationOnly": "Alleen auth-fouten", + "allActivities": "Alle activiteiten", + "staffId": "Team-ID", + "actionType": "Actietype", + "filter": "Filter", + "activities": "{count} activiteiten", + "staffWithId": "#{id} {name}", + "userPrefix": "gebruiker", + "pagination": "Pagina {page} van {pages} · {total} totaal", + "next": "Volgende", + "prev": "Vorige", + "unknownUser": "onbekend", + "emptyValue": "-", + "colTime": "Tijd", + "audit": { + "colTargetId": "Doel-ID", + "colDetails": "Details", + "colDate": "Datum", + "searchPlaceholder": "Zoek op actie of doel…", + "changesCount": "{count} wijzigingen", + "notAvailable": "n.v.t.", + "filtersTitle": "Activiteitenlogboek filteren", + "filterActor": "Uitvoerder (exacte gebruikersnaam of ID)", + "filterAction": "Exacte actie", + "filterFrom": "Vanaf datum (UTC)", + "filterTo": "Tot en met datum (UTC)", + "filtersHint": "Datums omvatten de volledige dag in UTC. Acties en gebruikersnamen moeten exact overeenkomen. De nieuwste activiteiten staan bovenaan.", + "applyFilters": "Filters toepassen", + "resetFilters": "Filters wissen", + "invalidDetails": "Deze oude gegevens kunnen niet worden weergegeven.", + "beforeValue": "Voor", + "afterValue": "Na", + "exportHint": "Het CSV-bestand bevat de huidige gefilterde pagina, met maximaal 100 vermeldingen.", + "operation": "Operatie" + }, + "chat": { + "colMessage": "Bericht", + "colRoomId": "Kamer-ID", + "searchPlaceholder": "Zoek op gebruikersnaam of bericht…" + }, + "commands": { + "colCommand": "Commando", + "colParams": "Parameters", + "searchPlaceholder": "Zoek op gebruikersnaam, commando of parameters…" + }, + "trades": { + "colUserOne": "Gebruiker één", + "colUserTwo": "Gebruiker twee", + "colStatus": "Status", + "statusUnknown": "onbekend", + "searchPlaceholder": "Zoek op gebruikersnaam…" + }, + "history": { + "preview": "Herstel bekijken", + "title": "Een opgeslagen wijziging herstellen", + "description": "Vergelijk de huidige waarden met de vorige waarden voordat je bevestigt. Alleen categorie-instellingen, aanbiedingsprijzen of nieuwsinhoud worden hersteld. Verwijderde gegevens en de categoriehiërarchie kunnen hier niet worden hersteld.", + "loading": "Laden…", + "unavailable": "Deze revisie is niet beschikbaar of je hebt geen toestemming om deze te herstellen.", + "conflict": "Dit record is na de geselecteerde wijziging aangepast. Vernieuw en bekijk de nieuwste geschiedenis voordat je herstelt.", + "failed": "Het herstellen is mislukt. Vernieuw de pagina en probeer het opnieuw.", + "field": "Veld", + "current": "Huidige waarde", + "restore": "Te herstellen waarde", + "confirm": "Herstel bevestigen", + "restoring": "Herstellen…", + "fields": { + "caption": "Categorienaam", + "captionSave": "Interne categorienaam", + "pageLayout": "Categorie-indeling", + "enabled": "Ingeschakeld", + "visible": "Zichtbaar", + "clubOnly": "Alleen clubleden", + "vipOnly": "Alleen VIP-leden", + "minRank": "Minimale rang", + "iconImage": "Categoriepictogram", + "iconColor": "Pictogramkleur", + "pageHeadline": "Kopafbeelding", + "pageTeaser": "Voorbeeldafbeelding", + "pageSpecial": "Speciale afbeelding", + "pageText1": "Primaire tekst", + "pageText2": "Secundaire tekst", + "pageTextDetails": "Detailtekst", + "pageTextTeaser": "Voorbeeldtekst", + "includes": "Inbegrepen categorieën", + "costCredits": "Prijs in credits", + "costPoints": "Prijs in punten", + "pointsType": "Puntenvaluta", + "title": "Nieuwstitel", + "slug": "Nieuwsadres", + "image": "Nieuwsafbeelding", + "shortStory": "Samenvatting", + "fullStory": "Artikelinhoud", + "status": "Publicatiestatus", + "publishAt": "Geplande publicatie", + "publishedAt": "Publicatiedatum", + "pageId": "Categorie" + } + } + }, + "wordfilter": { + "title": "Woordfilter", + "subtitle": "Beheer gefilterde woorden en zinnen in het hotel", + "filteredWords": "Gefilterde woorden", + "addWord": "Woord toevoegen", + "addWords": "Woorden toevoegen", + "words": "Woorden", + "noWords": "Nog geen gefilterde woorden", + "delete": "Verwijderen", + "confirmDeleteTitle": "Woord verwijderen", + "confirmDelete": "\"{word}\" verwijderen uit het filter?", + "added": "Woord toegevoegd aan filter", + "deleted": "Woord verwijderd uit filter", + "addError": "Kon woord niet toevoegen (bestaat mogelijk al)", + "deleteError": "Kon woord niet verwijderen", + "colId": "ID", + "colWord": "Woord", + "colAddedBy": "Toegevoegd door", + "colCreated": "Aangemaakt", + "colActions": "Acties", + "form": { + "word": "Woord", + "wordPlaceholder": "Bijv. slechtwoord", + "addMore": "Meerdere woorden toevoegen (één per regel)", + "save": "Aan filter toevoegen", + "saving": "Opslaan…", + "cancel": "Annuleren" + } + }, + "maintenance": { + "title": "Onderhoudsmodus", + "subtitle": "Hotelbreed onderhoud in- of uitschakelen", + "enabled": "Onderhoudsmodus is ingeschakeld", + "disabled": "Onderhoudsmodus is uitgeschakeld", + "enable": "Onderhoud inschakelen", + "disable": "Onderhoud uitschakelen", + "message": "Onderhoudsbericht", + "messagePlaceholder": "We zijn zo terug!", + "staffAccess": "Teamtoegang toestaan tijdens onderhoud", + "save": "Instellingen opslaan", + "saving": "Opslaan…", + "confirmEnable": "Het inschakelen van onderhoud voorkomt dat niet-teamleden toegang krijgen tot het hotel. Doorgaan?", + "confirmDisable": "Onderhoudsmodus uitschakelen en toegang herstellen voor alle gebruikers?", + "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": "Permissie-archief", + "subtitle": "Oude back-uptabel. Echte toegang beheert u onder Permissions — hier alleen vergelijken en exporteren.", + "addPermission": "Permissie toevoegen", + "editPermission": "Permissie bewerken", + "deletePermission": "Permissie verwijderen", + "noPermissions": "Geen housekeeping permissies geconfigureerd", + "confirmDelete": "Deze permissie verwijderen?", + "colId": "ID", + "colRank": "Rang", + "colSection": "Sectie", + "colActions": "Acties", + "saved": "Opgeslagen!", + "deleted": "Verwijderd!", + "errorOccurred": "Er is een fout opgetreden", + "emptyInput": "Lege invoer", + "invalidJson": "Ongeldige JSON", + "imported": "Geïmporteerd!", + "importedWithErrors": "{count} permissies geïmporteerd met {errors} fouten", + "presetApplied": "Preset toegepast!", + "cleared": "Alle permissies verwijderd!", + "invalidRank": "Ongeldige rang", + "testDone": "Test voltooid: {count} permissies gevonden", + "testing": "Testen...", + "loading": "Laden...", + "prev": "Vorige", + "next": "Volgende", + "form": { + "rankId": "Rang ID", + "rankIdPlaceholder": "Minimale rang", + "section": "Sectiesleutel", + "sectionPlaceholder": "Bijv. admin.dashboard", + "save": "Permissie opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren" + }, + "confirmClearAll": "ALLE permissies verwijderen? Dit kan niet ongedaan worden gemaakt!", + "confirmClearAllDesc": "Dit verwijdert alle permissies uit de database. Weet je het zeker?", + "confirmDeletePermission": "Deze permissie permanent verwijderen?", + "confirmBulkDelete": "{count} geselecteerde permissies verwijderen?", + "deleteSelected": "Verwijder {count} geselecteerd", + "selectAllMatching": "Selecteer alle {count} overeenkomende", + "cancel": "Annuleren", + "confirm": "Bevestigen", + "colGroup": "Groep", + "colDepends": "Afhankelijk van", + "colPermission": "Permissie", + "colDescription": "Omschrijving", + "colMinRank": "Min. rang", + "permissionKey": "Permissiesleutel", + "minRank": "Min. rang", + "description": "Omschrijving", + "permissions": "Permissies", + "permissionsCount": "{count} permissies", + "permission": "permissie", + "highestMinRank": "Hoogste min. rang: {rank}", + "totalMinRank": "Totale min. rang som: {total}", + "groupCount": "{count} groepen", + "rankCount": "{count} rangen", + "missingDeps": "{count} ontbrekende afhankelijkheden", + "dependsOn": "afhankelijk van", + "notFound": "niet gevonden", + "missing": "(ontbreekt)", + "rank": "Rang", + "count": "Aantal", + "searchPermission": "Zoek permissies…", + "search": "Zoeken", + "manage": "Beheer", + "importSelection": "Importeer selectie", + "noGroup": "Geen groep", + "allGroups": "Alle groepen", + "perGroup": "Permissies per groep", + "perRank": "Permissies per rang", + "rankOverviewHint": "Alle permissies gegroepeerd per rang.", + "tabOverview": "Overzicht", + "tabManage": "Beheer", + "tabImport": "Importeren / Exporteren", + "tabRanks": "Rangenoverzicht", + "tabPresets": "Voorinstellingen", + "tabTest": "Test", + "tabAudit": "Auditlog", + "importPermissions": "Permissies importeren", + "importHint": "Plak een JSON-array met permissie-objecten. Formaat: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Plak JSON hier…", + "import": "Importeren", + "exportTitle": "Permissies exporteren", + "exportHint": "Exporteer alle permissies als JSON voor backup of bulkbewerking.", + "export": "Exporteer JSON", + "copy": "Kopiëren", + "copied": "Gekopieerd!", + "presets": "Permissie-presets", + "presetsHint": "Pas een vooraf gedefinieerde set permissies toe voor veelvoorkomende staffrollen.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basis moderatie tools: gebruikers zoeken, bans, CFH afhandeling, chatlogs.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Volledige admin-toegang: gebruikers, kamers, nieuws, instellingen, winkel, events, radio & meer.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Volledige toegang tot alle functies inclusief permissiebeheer en asset-import.", + "applyPreset": "Pas preset toe", + "clearAll": "Verwijder alle permissies", + "testTitle": "Test rangtoegang", + "testHint": "Voer een rangnummer in om te zien welke permissies zouden worden toegekend.", + "test": "Test", + "auditTitle": "Permissie auditlog", + "auditHint": "Alle wijzigingen aan housekeeping permissies worden gelogd.", + "auditLogsAt": "Auditlogs zijn beschikbaar op de Auditlog-pagina.", + "viewAuditLogs": "Bekijk auditlogs", + "auditTime": "Tijd", + "auditUser": "Gebruiker", + "auditAction": "Actie", + "auditTarget": "Doel", + "save": "Opslaan", + "importTitle": "Permissies importeren", + "legacyBannerTitle": "Gebruik Permissions om te bepalen wie wat mag", + "legacyBannerBody": "Dit archief bestuurt de site niet. Open Permissions om toegang voor rangen te geven of in te trekken.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Bewerken hier is expres uitgeschakeld. Wijzig toegang alleen in Permissions.", + "tabCompare": "ACL vergelijking", + "tabExportOnly": "Exporteer archief", + "compareHint": "Vergelijkt legacy housekeeping min-rank rijen met live ACL rank_* grants (laagste rang met de slug).", + "compareAligned": "{count} uitgelijnd", + "compareMissingAcl": "{count} ontbreekt in ACL", + "compareMismatch": "{count} rang mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rang", + "colStatus": "Status", + "statusAligned": "Uitgelijnd", + "statusMissingAcl": "Ontbreekt in ACL", + "statusMismatch": "Rang verschilt", + "exportOnlyHint": "Schrijven is uitgeschakeld. Je kunt de legacy-tabel nog exporteren voor archief." + }, + "rooms": { + "title": "Kamers", + "subtitle": "Zoeken en beheren van hotelkamers", + "search": "Zoeken", + "searchPlaceholder": "Zoeken op naam, eigenaar of ID…", + "searchResults": "{count, plural, one {# kamer} other {# kamers}} gevonden voor \"{query}\"", + "noResults": "Geen kamers gevonden", + "colId": "ID", + "colName": "Naam", + "colOwner": "Eigenaar", + "colUsers": "Gebruikers", + "colState": "Status", + "colCategory": "Categorie", + "colCreated": "Aangemaakt", + "colActions": "Acties", + "stateOpen": "Open", + "stateClosed": "Gesloten", + "stateLocked": "Afgesloten", + "stateInvisible": "Onzichtbaar", + "detail": { + "title": "Kamer: {name}", + "subtitle": "Eigendom van {owner}", + "overview": "Overzicht", + "actions": "Acties", + "description": "Beschrijving", + "noDescription": "Geen beschrijving", + "owner": "Eigenaar", + "users": "Gebruikers online", + "maxUsers": "Max. gebruikers", + "category": "Categorie", + "state": "Status", + "tags": "Tags", + "noTags": "Geen tags", + "created": "Aangemaakt", + "deleteRoom": "Kamer verwijderen", + "confirmDelete": "Kamer \"{name}\" verwijderen? Dit kan niet ongedaan worden gemaakt.", + "enterRoom": "Kamer betreden", + "changeOwner": "Eigenaar wijzigen", + "changeOwnerPlaceholder": "Nieuwe eigenaar gebruikersnaam" + } + }, + "emailTemplates": { + "title": "E-mailsjablonen", + "subtitle": "Beheer transactionele e-mailsjablonen", + "newTemplate": "+ Nieuw sjabloon", + "edit": "Bewerken", + "delete": "Verwijderen", + "noTemplates": "Nog geen e-mailsjablonen", + "confirmDelete": "Sjabloon \"{name}\" verwijderen?", + "colId": "ID", + "colName": "Naam", + "colSubject": "Onderwerp", + "colKey": "Sleutel", + "colUpdated": "Bijgewerkt", + "colActions": "Acties", + "form": { + "name": "Naam", + "namePlaceholder": "Bijv. Welkomst e-mail", + "key": "Sleutel", + "keyPlaceholder": "Bijv. welkomst_email", + "subject": "Onderwerp", + "subjectPlaceholder": "E-mail onderwerpregel", + "body": "Inhoud (HTML)", + "bodyPlaceholder": "

Beste {username},

", + "variables": "Beschikbare variabelen", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Sjabloon opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Thema", + "subtitle": "Pas het uiterlijk van het CMS aan", + "presets": "Voorinstellingen", + "colours": "Kleuren", + "css": "CSS", + "presetsTitle": "Thema voorinstellingen", + "presetsSubtitle": "Kies een vooraf gebouwd kleurenschema", + "applyPreset": "Toepassen", + "customiseTitle": "Aangepaste kleuren", + "primary": "Primair", + "secondary": "Secundair", + "accent": "Accent", + "background": "Achtergrond", + "surface": "Oppervlak", + "text": "Tekst", + "saveColours": "Kleuren opslaan", + "savingColours": "Opslaan…", + "cssTitle": "Aangepaste CSS", + "cssSubtitle": "Voeg aangepaste CSS toe om themastijlen te overschrijven", + "cssPlaceholder": "/* Jouw aangepaste CSS hier */", + "saveCss": "CSS opslaan", + "savingCss": "Opslaan…", + "reset": "Standaardwaarden herstellen", + "confirmReset": "Thema terugzetten naar standaardwaarden?", + "saved": "Theme settings saved.", + "presetApplied": "Preset applied: {preset}", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Mediabibliotheek", + "subtitle": "Upload en beheer mediabestanden", + "upload": "Uploaden", + "uploadTitle": "Bestand uploaden", + "uploadSubtitle": "Sleep of klik om te uploaden", + "uploadButton": "Bestand kiezen", + "uploading": "Uploaden…", + "noFiles": "Nog geen mediabestanden", + "delete": "Verwijderen", + "confirmDelete": "Dit bestand permanent verwijderen?", + "search": "Zoeken", + "searchPlaceholder": "Zoeken op bestandsnaam…", + "colPreview": "Voorbeeld", + "colName": "Naam", + "colSize": "Grootte", + "colType": "Type", + "colUploaded": "Geüpload", + "colActions": "Acties", + "copyUrl": "URL kopiëren", + "urlCopied": "URL naar klembord gekopieerd" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Upload en beheer de favicon van de site", + "current": "Huidige favicon", + "uploadLabel": "Favicon uploaden", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO of SVG. Max 2MB.", + "upload": "Uploaden", + "uploading": "Bezig met uploaden…", + "delete": "Verwijderen", + "deleting": "Bezig met verwijderen…", + "cancel": "Annuleren", + "saved": "Favicon succesvol opgeslagen!", + "deleted": "Favicon succesvol verwijderd!", + "error": "Er is iets misgegaan", + "confirmDelete": "Favicon verwijderen? De site zal geen aangepaste favicon meer tonen.", + "generator": { + "title": "Favicon genereren", + "text": "Tekst", + "bgColor": "Achtergrondkleur", + "textColor": "Tekstkleur", + "rounded": "Afgeronde hoeken", + "save": "Opslaan als favicon" + } + }, + "settings": { + "title": "CMS-instellingen", + "subtitle": "Beheer sleutel/waarde CMS-configuratie", + "addSetting": "Instelling toevoegen", + "edit": "Bewerken", + "delete": "Verwijderen", + "noSettings": "Geen instellingen gevonden", + "confirmDelete": "Instelling \"{key}\" verwijderen?", + "keysInDatabase": "{count} sleutels in de database", + "managedInForm": "{count} beheerd in het formulier", + "documented": "{count} gedocumenteerd", + "saved": "Instellingen opgeslagen.", + "saveFailed": "Instellingen opslaan mislukt.", + "saveSettings": "Instellingen opslaan", + "viewOnly": "Je kunt instellingen bekijken, maar hebt bewerkingsrechten nodig.", + "colKey": "Sleutel", + "colValue": "Waarde", + "colUpdated": "Bijgewerkt", + "colActions": "Acties", + "form": { + "key": "Sleutel", + "keyPlaceholder": "Bijv. hotel_naam", + "value": "Waarde", + "valuePlaceholder": "Instellingswaarde", + "save": "Instelling opslaan", + "saving": "Opslaan…", + "cancel": "Annuleren" + } + }, + "import": { + "title": "Import", + "subtitle": "Importeer assets van externe bronnen naar je hotel.", + "badges": "Badges", + "badgesDescription": "Importeer en beheer badge-assets van externe bronnen.", + "furni": "Meubels", + "furniDescription": "Importeer meubeldefinities, SWF-bestanden en iconen.", + "clothing": "Kleding", + "clothingDescription": "Importeer kleding en wearables voor avatars.", + "effects": "Effecten", + "effectsDescription": "Importeer avatar-effecten en animaties.", + "pets": "Huisdieren", + "petsDescription": "Importeer huisdiergegevens en iconen.", + "clone": "Klonen", + "cloneDescription": "Kloon bestaande items van de ene bron naar de andere.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro-bundles en iconen direct zonder SWF-conversie.", + "sync": "Auto-sync", + "syncDescription": "Importeer automatisch ontbrekende meubels van alle geconfigureerde bronnen.", + "repairIcons": "Iconen repareren", + "repairIconsDescription": "Download ontbrekende icoonbestanden voor meubels die al in de database staan.", + "audit": "Cataloguscontrole", + "auditDescription": "Scan je catalogus op ontbrekende items, kapotte verwijzingen en items die ontbreken in kloonbronnen." + }, + "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-vertalingen", + "description": "Bewerk de teksten op de website en in housekeeping. Opgeslagen wijzigingen worden bij de volgende paginalading toegepast en blijven behouden na deployments.", + "export": "JSON exporteren", + "saving": "Opslaan…", + "saveLocale": "{locale} opslaan", + "saved": "Vertalingen opgeslagen en toegepast.", + "readOnly": "Je kunt vertalingen bekijken en exporteren. Bewerken vereist toestemming om instellingen te wijzigen.", + "language": "Taal", + "coverage": "{total} sleutels · {missing} ontbreken · {identical} gelijk aan Engels", + "search": "Zoeken", + "searchPlaceholder": "Sleutel, vertaling of Engelse brontekst…", + "group": "Groep", + "allGroups": "Alle groepen", + "status": "Tonen", + "all": "Alle teksten", + "missing": "Ontbrekende vertalingen", + "identical": "Gelijk aan Engels", + "modified": "Niet-opgeslagen wijzigingen", + "fallbackHint": "Ontbrekende vertalingen gebruiken Engels. Identieke tekst kan bewust zijn gekozen. Laat de namen van variabelen tussen accolades ongewijzigd.", + "unsaved": "{count} niet-opgeslagen wijzigingen in deze taal", + "discard": "Wijzigingen verwerpen", + "discardConfirm": "Niet-opgeslagen wijzigingen in deze taal verwerpen?", + "fixErrors": "Corrigeer {count} ongeldige teksten voordat je opslaat.", + "noResults": "Geen teksten gevonden met deze filters.", + "source": "Engelse brontekst", + "missingPlaceholder": "Vertaling ontbreekt; Engels wordt gebruikt.", + "page": "Pagina {page} van {total} · {count} sleutels", + "previous": "Vorige", + "next": "Volgende", + "leaveWarning": "Je hebt niet-opgeslagen vertalingen. Deze pagina verlaten?", + "conflict": "Deze vertalingen zijn gewijzigd sinds je de editor opende. Exporteer je wijzigingen en herlaad de pagina voordat je opslaat.", + "unknownKey": "Onbekende vertaalsleutel: {key}", + "empty": "Vul een vertaling in voor {key} of verwerp deze wijziging.", + "invalid": "Ongeldige berichtsyntaxis in {key}. Controleer accolades en tekstopmaaktags.", + "variables": "Behoud dezelfde variabelenamen en tekstopmaaktags als de Engelse bron in {key}." + } + }, + "hubs": { + "newsMedia": "Nieuws & media", + "newsMediaSubtitle": "Artikelen, foto's, banners, advertenties en mediabibliotheek", + "siteContent": "Site-inhoud", + "siteContentSubtitle": "Navigatie, helpcentrum, boxen, tags en prefixes", + "engagement": "Betrokkenheid", + "engagementSubtitle": "Evenementen, polls en ondersteuningstickets", + "users": "Gebruikers", + "usersSubtitle": "Adresboek, online spelers, sollicitaties en teams", + "access": "Toegang & beveiliging", + "accessSubtitle": "Bans, IP, VPN, permissies en woordfilter", + "moderation": "Moderatie", + "moderationSubtitle": "Meldingen, acties en modteam", + "catalog": "Catalogus & rares", + "catalogSubtitle": "Catalogus, rares, badges, prestaties en geluiden", + "shop": "Winkel & betalingen", + "shopSubtitle": "Winkel, transacties, vouchers, abonnementen en kalender", + "radio": "Radio", + "radioSubtitle": "Stream, DJ-tools, embed en monitoring", + "settings": "Instellingen", + "settingsSubtitle": "CMS-configuratie, thema, onderhoud en gerelateerde tools", + "tools": "Hulpmiddelen", + "toolsSubtitle": "RCON, kamers, import en vertalingen", + "observability": "Observeerbaarheid", + "observabilitySubtitle": "Logs, analytics, DevOps en hotelmeldingen", + "tabs": { + "articles": "Artikelen", + "photos": "Foto's", + "banners": "Banners", + "ads": "Advertenties", + "media": "Media", + "navigator": "Navigator", + "help": "Ondersteuning", + "boxes": "Boxen", + "tags": "Tags", + "prefixes": "Voorvoegsels", + "events": "Evenementen", + "eventTypes": "Evenementtypen", + "polls": "Polls", + "tickets": "Supportbalie", + "helpTickets": "Helpcentrum", + "templates": "Sjablonen", + "directory": "Adresboek", + "multiAccounts": "Gekoppelde accounts", + "online": "Online", + "applications": "Sollicitaties", + "teams": "Teams", + "bans": "Verbanningen", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissies", + "wordFilter": "Woordfilter", + "overview": "Overzicht", + "actions": "Acties", + "cfh": "Moderatieverzoeken", + "team": "Team", + "catalogTab": "Catalogus", + "rares": "Zeldzame meubels", + "badges": "Badges", + "achievements": "Prestaties", + "sounds": "Geluiden", + "shopTab": "Winkel", + "transactions": "Transacties", + "vouchers": "Vouchers", + "subscriptions": "Abonnementen", + "calendar": "Kalender", + "history": "Geschiedenis", + "moderationTab": "Moderatie", + "monitoring": "Bewaking", + "settingsTab": "Instellingen", + "embed": "Insluiten", + "apiKeys": "API-sleutels", + "points": "Punten", + "ranks": "Rangen", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Thema", + "themeBuilder": "Thema Bouwer", + "maintenance": "Onderhoud", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "E-mail", + "housekeeping": "Permissie-archief", + "commando": "Operationeel centrum", + "rooms": "Kamers", + "import": "Importeren", + "studio": "Studio", + "importOverview": "Overzicht", + "importBadges": "Badges", + "importFurni": "Meubels", + "importUpload": "Uploaden", + "importClothing": "Kleding", + "importEffects": "Effecten", + "importPets": "Huisdieren", + "importClone": "Kloon", + "importSync": "Synchronisatie", + "importRepairIcons": "Pictogrammen repareren", + "importAudit": "Gegevenscontrole", + "translations": "Vertalingen", + "logs": "Logboeken", + "audit": "Wijzigingslogboek", + "chat": "Chat", + "commands": "Commando's", + "trades": "Ruiltransacties", + "analytics": "Statistieken", + "activity": "Activiteit", + "economy": "Economie", + "devops": "DevOps", + "errors": "Fouten", + "alerts": "Meldingen", + "toolsGroup": "Hulpmiddelen", + "ticketInbox": "Ontvangen tickets", + "cmsErrors": "CMS-fouten" + }, + "events": "Evenementen", + "eventsSubtitle": "Hotel-evenementen en evenementtypes", + "tickets": "Supportbalie", + "ticketsSubtitle": "Twee aparte wachtrijen: CMS support desk en publieke helpcenter-tickets", + "staffAccess": "Rangen & rechten", + "staffAccessSubtitle": "Staffrangen en live toegang. Archief is alleen vergelijken/exporteren.", + "analytics": "Statistieken", + "analyticsSubtitle": "Hotelactiviteit, retentie en economie", + "devops": "DevOps", + "devopsSubtitle": "Servicegezondheid en emulatorfouten", + "import": "Importeren", + "importSubtitle": "Meubels, badges, kleding en asset-tools" + }, + "tickets": { + "title": "CMS support desk", + "subtitle": "Interne CMS-tickets (assignee, prioriteit, staff-workflow). Niet hetzelfde als helpcenter-tickets van /help.", + "noTickets": "Geen actieve tickets", + "searchPlaceholder": "Zoek op onderwerp, gebruiker, categorie of ID…", + "presetActive": "Actief", + "statusOpen": "Open", + "statusInProgress": "Bezig", + "statusWaiting": "Wachtend", + "statusClosed": "Gesloten", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Prioriteit", + "colAssigned": "Toegewezen", + "colDate": "Datum", + "meta": "door {user} · {count} berichten · {category}", + "queueHint": "Deze wachtrij is de CMS support desk. Speler-helpcenter tickets staan onder Helpcentrum.", + "queueOtherCta": "Open helpcentrum-tickets", + "queueCounts": "Open hier: {here} · Helpcentrum: {other}", + "awaitingStaff": "Wacht op medewerkers", + "assignedMine": "Aan mij toegewezen", + "unassigned": "Niet toegewezen", + "assignedAny": "Toegewezen", + "lastReplyAge": "Sinds laatste antwoord", + "ageMinutes": "{count} min geleden", + "ageHours": "{count} uur geleden", + "ageDays": "{count} dagen geleden" + }, + "helpTickets": { + "title": "Helpcenter-tickets", + "subtitle": "Tickets die spelers openen op /help/tickets. Apart van de CMS support desk.", + "noTickets": "Geen open helpcentrum-tickets", + "searchPlaceholder": "Zoek op titel, gebruiker of ID…", + "presetOpen": "Open", + "presetAll": "Alle", + "statusOpen": "Open", + "statusClosed": "Gesloten", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "Gebruiker", + "colCreated": "Aangemaakt", + "colUpdated": "Bijgewerkt", + "meta": "door {user} · {count} antwoorden", + "backToList": "Terug naar lijst", + "threadTitle": "Gesprek", + "staffBadge": "Staff", + "replyPlaceholder": "Antwoord als staff…", + "replySubmit": "Antwoord versturen", + "replyHint": "Ctrl+Enter om te versturen.", + "closeSubmit": "Ticket sluiten", + "reopenSubmit": "Ticket heropenen", + "closedHint": "Dit ticket is gesloten.", + "actionsTitle": "Acties", + "requesterTitle": "Aanvrager", + "detailsTitle": "Details", + "rankLabel": "Rang {rank}", + "messageCountLabel": "Berichten", + "success": { + "replied": "Antwoord verzonden.", + "closed": "Ticket gesloten.", + "reopened": "Ticket heropend.", + "banLifted": "Verbanning opgeheven en ticket gesloten." + }, + "queueHint": "Deze wachtrij is het publieke helpcenter. CMS support desk tickets staan onder Supportbalie.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open hier: {here} · Supportbalie: {other}", + "liftBanSubmit": "Verbanning van aanvrager opheffen en sluiten", + "requesterBanned": "Aanvrager is verbannen" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / ondersteuningstickets", + "noTickets": "Geen CFH-tickets", + "searchPlaceholder": "Zoek op probleem, gebruiker of ID…", + "noDescription": "Geen beschrijving", + "roomMeta": "Kamer #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Opgelicht", + "stateClosed": "Gesloten", + "colId": "ID", + "colIssue": "Probleem", + "colSender": "Afzender", + "colReported": "Gerapporteerd", + "colMod": "Mod", + "colStatus": "Status" + }, + "analytics": { + "loadError": "Sommige analytics-queries zijn mislukt. Onderstaande cijfers kunnen onvolledig zijn — controleer de database en emulator-tabellen.", + "totalUsers": "Totaal gebruikers", + "onlineNow": "{count} nu online", + "weekRegistrations": "Registraties deze week", + "thisMonth": "{count} deze maand", + "activeRooms": "Actieve kamers", + "totalRooms": "{count} kamers totaal", + "weeklyActivity": "Wekelijkse activiteit", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registraties (30 dagen)", + "registrationsChartDescription": "Nieuwe gebruikersregistraties van de laatste 30 dagen", + "chatActivity": "Chatactiviteit", + "messagesLast7Days": "Berichten in de laatste 7 dagen", + "trades": "Trades", + "tradesLast7Days": "Trades in de laatste 7 dagen", + "retention": "Retentie", + "usersOnlineOverTotal": "Gebruikers online / totaal", + "activity": { + "chatMessages": "Chatberichten", + "commands": "Commando's", + "bans": "Bans", + "registrations": "Registraties", + "last7Days": "Laatste 7 dagen", + "dailyBreakdownTitle": "Dagelijkse uitsplitsing (7 dagen)", + "colDay": "Dag", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Meest actieve gebruikers (7 dagen)", + "noChatActivity": "Geen chatactiviteit", + "msgCount": "{count} msgs", + "userFallback": "Gebruiker #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in omloop", + "creditsDescription": "Totaal credits van alle gebruikers", + "pixelsInCirculation": "Pixels in omloop", + "pixelsDescription": "Totaal pixels van alle gebruikers", + "pointsInCirculation": "Punten in omloop", + "pointsDescription": "Totaal punten van alle gebruikers", + "weeklyTrades": "Wekelijkse trades", + "marketplaceListings": "{count} marketplace-advertenties", + "shopRevenueTitle": "Shopomzet (7d)", + "purchases": "Aankopen", + "creditsSpent": "Credits uitgegeven", + "pointsSpent": "Punten uitgegeven", + "marketplaceTitle": "Marketplace", + "activeListings": "Actieve advertenties", + "sold7d": "Verkocht (7d)", + "currencyDistributionTitle": "Valutaverdeling", + "credits": "Credits", + "pixels": "Pixels", + "points": "Punten", + "catalogSpendingTitle": "Catalogusuitgaven", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} punten" + }, + "peakHours": { + "title": "Piekuren", + "description": "Gebruikersactiviteit per dag & uur (laatste 7 dagen)", + "days": { + "mon": "ma", + "tue": "di", + "wed": "wo", + "thu": "do", + "fri": "vr", + "sat": "za", + "sun": "zo" + }, + "tooltip": "{day} {hour}:00 — {count} gebruikers", + "less": "Minder", + "more": "Meer" + } + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Adminmenu", + "subtitle": "Herschik en verberg zijbalkgroepen en -koppelingen. Routes en rechten blijven in code.", + "save": "Menu opslaan", + "saving": "Opslaan…", + "saved": "Adminmenu opgeslagen.", + "saveFailed": "Adminmenu kon niet worden opgeslagen.", + "reset": "Herstellen naar standaard", + "viewOnly": "Je kunt de menulay-out bekijken maar hebt rechten nodig voor het bewerken van instellingen om deze te wijzigen.", + "hint": "Dashboard en deze pagina blijven zichtbaar. ACL filtert nog steeds wat elke rang ziet.", + "moveUp": "Naar boven", + "moveDown": "Naar beneden", + "hideGroup": "Groep verbergen", + "showGroup": "Groep tonen", + "hideItem": "Item verbergen", + "showItem": "Item tonen", + "pinned": "Vastgezet" + }, + "cmsErrors": { + "firstSeen": "Eerste gebeurtenis in bewaarde gegevens", + "lastSeen": "Laatste gebeurtenis", + "affectedUsers": "Unieke geïdentificeerde gebruikers", + "unidentifiedEvents": "Gebeurtenissen zonder geverifieerde gebruikers-ID", + "metricsScope": "De tellingen gelden alleen voor de bewaarde gegevens die hier zijn geladen. Gebruikers worden uitsluitend geteld op basis van numerieke gebruikers-ID’s van de server; anonieme meldingen en browsermeldingen worden niet aan gebruikers gekoppeld.", + "assignedStaff": "Toegewezen aan medewerker #{id}", + "unassigned": "Niet toegewezen", + "assignSelf": "Aan mij toewijzen", + "clearAssignment": "Toewijzing verwijderen", + "openOperation": "Gerelateerd onderdeel openen", + "releaseOccurrences": "Gebeurtenissen per release", + "releaseScope": "Deze releases komen voor in de bewaarde gegevens. De eerste beschikbare gebeurtenis bewijst niet welke release de fout heeft geïntroduceerd.", + "releaseFilter": "Versie", + "allReleases": "Alle versies", + "period": "Periode", + "allRetained": "Alle bewaarde gebeurtenissen", + "last24h": "Afgelopen 24 uur", + "last7d": "Afgelopen 7 dagen", + "sort": "Volgorde", + "recentFirst": "Nieuwste eerst", + "frequentFirst": "Meest voorkomend eerst", + "filterScope": "Aantallen gelden voor passende bewaarde gebeurtenissen. Groepsstatus en nieuwste details blijven actueel over alle versies.", + "auditTrail": "Gerelateerde auditregels", + "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" + }, + "installation": { + "title": "Installatiediagnose", + "hint": "Alleen-lezen controles van deze installatie. Niet geverifieerd betekent onvoldoende bewijs; een instelling bewijst geen externe bereikbaarheid.", + "checked": "Gecontroleerd om {time} · controles voltooid in {ms} ms", + "recheck": "Opnieuw controleren", + "ok": "Controle geslaagd", + "failed": "Controle nodig", + "unknown": "Niet geverifieerd", + "missing": "Niet ingesteld", + "release": "Actieve versie", + "database": "Database", + "redis": "Redis", + "emulator": "Emulator", + "storage": "Schrijfbare opslag", + "migrations": "Databasemigraties", + "worker": "Achtergrondworker", + "renderer": "Rendererinstellingen", + "registry": "Containerregister", + "releaseHint": "De volledige identificatie van de actieve build. Vergelijk installaties en kies een vorige image voor herstel.", + "databaseHint": "Verbindingscontrole en gemeten responstijd van SELECT 1.", + "redisHint": "Optioneel voor sommige pagina’s; vereist voor imports in de wachtrij.", + "emulatorHint": "Antwoord op de ingestelde emulatorping.", + "storageHint": "Lees- en schrijfrechten voor opslag, Nitro-assets en SWF-mappen.", + "migrationsHint": "Aantal meegeleverde migraties dat ontbreekt in de databasehistorie. Voer migraties uit via het releaseproces.", + "workerHint": "Laatste workersignaal in Redis. Ouder dan twee minuten vereist onderzoek; zonder signaal is niet vast te stellen of de worker actief is.", + "rendererHint": "De client gebruikt het ingestelde adres of standaard /nitro-client/. Open het spel apart om de weergave en assets te controleren.", + "registryHint": "Registergegevens staan in CI, niet in het CMS. Controleer de publicatietaak en onveranderlijke versietag in Gitea." + }, + "importHistory": { + "cancelled": "Geannuleerd", + "cancelFailed": "Annuleren kon niet worden aangevraagd. Probeer het opnieuw of vernieuw de geschiedenis.", + "cancelRequested": "Annulering aangevraagd. Het huidige item wordt afgerond; de resterende items worden niet gestart.", + "cancelHint": "Annuleren behoudt voltooide items en laat het huidige item afronden.", + "cancelRemaining": "Resterende items annuleren", + "historyLimit": "De 30 meest recent bijgewerkte taken worden getoond.", + "refreshHistory": "Geschiedenis vernieuwen", + "showMoreItems": "Nog 50 items tonen", + "uncertainOutcome": "Een onderbroken item heeft mogelijk al lokale gegevens gewijzigd. Het wordt niet opnieuw geprobeerd.", + "reviewLocalData": "Lokale gegevens controleren", + "ownerHistory": "Je imports en reparaties, nieuwste eerst. Herhalen voert voltooide of onzekere onderdelen nooit opnieuw uit.", + "previousPage": "Vorige", + "nextPage": "Volgende", + "page": "Pagina {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" + }, + "operations": { + "title": "Aandacht nodig", + "hint": "Toegankelijke taken: imports uit je laatste 30 taken; fouten uit maximaal 1.000 bewaarde meldingen. Ouder werk kan buiten deze tellingen vallen.", + "empty": "Geen openstaande taken gevonden in de gecontroleerde gegevens.", + "errors": "Open CMS-foutgroepen", + "imports": "Je imports die controle nodig hebben", + "tickets": "Open ondersteuningstickets", + "publications": "Nieuwsconcepten", + "unavailable": "{source}: gegevens tijdelijk niet beschikbaar.", + "installation": "Installatiediagnose" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "De broncategorieën of aanbiedingen zijn gewijzigd. Maak een nieuw pakket met de actuele gegevens.", + "saveConflict": "Het pakket is gewijzigd. Laad het opnieuw voordat je opslaat.", + "publishConflict": "Het pakket is gewijzigd. Vernieuw het publicatievoorbeeld.", + "catalogChanged": "De catalogus is gewijzigd. Vernieuw het publicatievoorbeeld.", + "missing": "Cataloguspakket niet gevonden.", + "pageLimit": "Een pakket ondersteunt maximaal 200 categorieën, inclusief subcategorieën.", + "offerLimit": "Een pakket ondersteunt maximaal 500 aanbiedingen.", + "payloadLimit": "De pakketgegevens overschrijden de limiet van 8 MB.", + "membership": "Je kunt geen onderdelen aan het pakket toevoegen of eruit verwijderen.", + "hierarchy": "Je kunt de pakkethiërarchie niet wijzigen.", + "references": "Je kunt de meubelverwijzingen in het pakket niet wijzigen.", + "furnitureMissing": "Een meubel waarnaar het pakket verwijst bestaat niet meer.", + "auditWarning": "Pakket gepubliceerd, maar het schrijven naar het auditlog is mislukt.", + "hotelWarning": "Pakket gepubliceerd, maar de hotelupdate is niet afgeleverd.", + "exportWarning": "Pakket gepubliceerd, maar het plannen van de export is mislukt.", + "refreshWarning": "Pakket gepubliceerd. Vernieuw de pagina om de nieuwste catalogus te zien." + } + }, + "catalogPackagePreview": { + "title": "Catalogusvoorbeeld", + "hint": "Blader door de echte pagina’s en aanbiedingen van het pakket. Dit is een catalogusvoorbeeld, geen volledige weergave van de spelclient. Er worden geen aankopen gedaan.", + "search": "Categorieën of aanbiedingen zoeken", + "playerMode": "Spelerstoegang", + "rank": "Rang", + "club": "Club", + "vip": "VIP", + "externalParents": "Deze selectie is onderdeel van een grotere catalogus. Toegangsregels van bovenliggende categorieën buiten deze momentopname kunnen niet worden beoordeeld.", + "invalidHierarchy": "{count} pagina’s hebben een cyclische hiërarchie en kunnen niet worden geopend.", + "snapshotLimit": "Voorbeeld beperkt tot 200 pagina’s en 500 aanbiedingen.", + "restricted": "{count} pagina’s zijn verborgen door de gekozen toegangsinstellingen.", + "categories": "Cataloguscategorieën", + "noPages": "Deze momentopname bevat geen categorieën.", + "inaccessible": "Met deze instellingen zijn geen categorieën toegankelijk. Pas de spelerstoegang aan of schakel deze uit om het concept te bekijken.", + "noMatches": "Geen resultaten voor deze zoekopdracht.", + "offerCount": "{count} aanbiedingen", + "layout": "Indeling: {layout}", + "missingLayout": "Niet opgegeven", + "unsupportedLayout": "Deze indeling heeft geen eigen voorbeeld. Het raster toont de echte aanbiedingen; aangepaste onderdelen en afbeeldingen worden niet weergegeven.", + "loadingIcons": "Meubelpictogrammen laden…", + "assetsUnavailable": "Meubelgegevens zijn tijdelijk niet beschikbaar. De aanbiedingen blijven zichtbaar.", + "assetLimit": "Pictogrammen en meubelnamen zijn beperkt tot de eerste 200 item-ID’s in deze weergave.", + "emptyPage": "Deze categorie bevat geen directe aanbiedingen. Bekijk de subcategorieën.", + "missingIcon": "Pictogram niet beschikbaar", + "amount": "Aantal: {count}", + "bundle": "{count} meubeltypes", + "changed": "Gewijzigd ten opzichte van de opgeslagen beginversie", + "previous": "Vorige", + "next": "Volgende", + "page": "Pagina {page} van {total}", + "offerId": "Aanbieding #{id}", + "unknownFurniture": "Meubelnaam niet beschikbaar", + "selectOffer": "Selecteer een aanbieding om de prijs en meubelverwijzingen te bekijken.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamanten", + "pointsType": "Punten (type {type}):", + "free": "Gratis", + "specialPricing": "Speciale prijs: {credits} credits, {points} punten (type {type})", + "restrictedOffers": "{count} aanbiedingen in deze categorie vereisen een Club-lidmaatschap.", + "clubOffer": "Club-aanbieding" + }, + "actions": { + "saved": "Wijzigingen opgeslagen.", + "error": "De bewerking kon niet worden voltooid.", + "saving": "Bezig met opslaan…", + "saveError": "Opslaan mislukt. Je wijzigingen zijn behouden; probeer het opnieuw.", + "unsaved": "Niet-opgeslagen wijzigingen", + "leaveUnsaved": "Je hebt niet-opgeslagen wijzigingen. Wil je deze pagina verlaten?", + "preview": "Voorbeeld" + }, + "search": { + "furniture": "Meubels", + "catalog": "Cataloguscategorieën", + "tickets": "Supporttickets", + "loading": "Zoeken…", + "hint": "Voer een numeriek ID of minstens 2 tekens in, of kies een pagina.", + "retry": "Opnieuw proberen", + "description": "Zoek pagina’s, gebruikers, meubels, cataloguscategorieën, artikelen en supporttickets.", + "partialError": "Sommige resultaten konden niet worden geladen. Probeer opnieuw.", + "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": "Voorbeeld van roltoegang", + "description": "Bekijk CMS-toegang zonder een sessie te wijzigen of een gebruiker over te nemen.", + "back": "Terug naar rechten", + "role": "Rol", + "show": "Toegang bekijken", + "missing": "Selecteer een bestaande rol.", + "entryAllowed": "Toegang tot housekeeping toegestaan", + "entryDenied": "Geen toegang tot housekeeping: dashboardrecht ontbreekt", + "superAdmin": "Deze rang krijgt momenteel de rechten van de hoogste rang.", + "scope": "Dit voorbeeld toont één rol. Een gebruiker kan extra rollen hebben. Aangepaste navigatie kan toegestane onderdelen verbergen; specifieke gegevens en acties kunnen extra controles vereisen.", + "sections": "Onderdelen", + "allowed": "Toegestaan", + "denied": "Niet toegestaan", + "actions": "CMS-rechten", + "actionScope": "Een toegekend recht omzeilt geen controles op toegang, ranghiërarchie, eigendom of de specifieke actie.", + "granted": "Toegekend", + "notGranted": "Niet toegekend" + }, + "operationsCenter": { + "title": "Operatiecentrum", + "hint": "Volg je opgeslagen imports en reparaties en de gedeelde wachtrij voor catalogusexport.", + "syncTitle": "Bronsynchronisatie", + "syncHint": "Bronsynchronisatie wordt op de eigen pagina uitgevoerd. Er is hier geen opgeslagen geschiedenis of automatische herhaling van mislukte onderdelen. Catalogusexport toont de gedeelde wachtrij en het laatste resultaat; herhalen per onderdeel wordt niet ondersteund.", + "openSync": "Synchronisatie en export openen", + "openImports": "Meubelimports openen" + }, + "operationsExport": { + "title": "Catalogusrepository export", + "hint": "Automatische export van bundels, pictogrammen, gamedata, vertalingen en catalogus-SQL. De wachtrij en het laatste resultaat worden gedeeld tussen medewerkers.", + "loadError": "Exportstatus kon niet worden geladen", + "queueError": "Export kon niet worden ingepland", + "loading": "Laden…", + "disabled": "Export is uitgeschakeld. Open synchronisatie om de configuratie te bekijken.", + "active": "Wachten totdat {count} bewerking(en) voltooid zijn.", + "running": "Export wordt uitgevoerd…", + "pending": "{count} update(s) in de exportwachtrij.", + "idle": "Geen updates in de wachtrij.", + "lastCommit": "Laatst gepubliceerde commit:", + "lastAttempt": "Laatste poging: {date}", + "queuing": "Inplannen…", + "queue": "Nu exporteren / opnieuw proberen" + }, + "table": { + "views": { + "title": "Opgeslagen weergaven", + "hint": "Bewaar filters, sortering en kolommen in je account. Maximaal 20 weergaven per tabel.", + "saved": "Weergave opgeslagen", + "error": "Opgeslagen weergaven zijn tijdelijk niet beschikbaar. Probeer opnieuw.", + "retry": "Opnieuw", + "loading": "Weergaven laden...", + "empty": "Nog geen opgeslagen weergaven.", + "deleteNamed": "Verwijder {name}", + "delete": "Verwijderen", + "name": "Naam van weergave", + "replace": "Deze weergave vervangen", + "save": "Huidige weergave opslaan" + }, + "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?" + }, + "syncQueue": { + "preparing": "Synchronisatie voorbereiden...", + "queued": "Synchronisatie opgeslagen. Volg de voortgang in de geschiedenis hieronder.", + "start": "Synchronisatie starten", + "description": "Synchronisatie draait op de achtergrond. Voortgang en veilige nieuwe pogingen blijven beschikbaar in je importgeschiedenis.", + "failed": "Synchronisatie kon niet worden ingepland" + }, + "publicationPreflight": { + "affectedPages": "Betrokken openbare paginas", + "scheduleInvalid": "Kies een geldige datum. De eindtijd van een evenement moet na de begintijd liggen.", + "description": "Controles gebruiken de huidige formulierwaarden. Externe afbeeldingen en links worden niet op beschikbaarheid getest.", + "slugNormalized": "Het openbare adres gebruikt de hieronder getoonde genormaliseerde slug.", + "imageInvalid": "Gebruik een lokaal pad of een HTTP/HTTPS-afbeeldingsadres zonder inloggegevens.", + "imageMissing": "Geen omslagafbeelding geselecteerd. De pagina gebruikt de standaardafbeelding.", + "title": "Publicatiecontroles", + "ready": "Afbeelding, links en planning voldoen aan de lokale controles.", + "linksInvalid": "Controleer de links: alleen lokale, HTTP/HTTPS- en e-maillinks zijn toegestaan.", + "schedulePast": "De geselecteerde datum ligt in het verleden. Controleer deze voor publicatie.", + "previewHint": "Deze links tonen de huidige openbare paginas. Gebruik Voorbeeld voor niet-opgeslagen inhoud. De definitieve artikelslug kan een achtervoegsel krijgen als deze al bestaat." + }, + "performance": { + "title": "Prestaties van verzoeken", + "scope": "Servermetingen voor geauthenticeerde HK-API’s en geselecteerde openbare paginacomponenten. Kies hieronder een groep.", + "refresh": "Vernieuwen", + "shared": "Gedeelde diagnostiek via Redis.", + "local": "Lokale diagnostiek voor deze instantie; gewist bij herstart.", + "retention": "Maximaal 200 metingen per groep, één uur bewaard. Niet elk verzoek wordt gegarandeerd vastgelegd.", + "search": "Route of operatie-ID", + "sort": "Volgorde", + "slowest": "Langzaamste eerst", + "recent": "Nieuwste eerst", + "threshold": "Duurfilter", + "all": "Alle tijden", + "slow": "Minstens 1 seconde", + "explanation": "Databasetijd omvat afgeronde query’s en wachttijd op de pool. Externe tijd omvat alleen gemeten curl-downloads. Gelijktijdige oproepen kunnen samen langer duren dan het verzoek; deze waarden zijn geen afzonderlijke delen van het totaal.", + "empty": "Nog geen passende verzoeken. Gebruik het HK en vernieuw deze pagina.", + "database": "Database", + "external": "Gemeten downloads", + "calls": "{count} oproepen", + "failures": "{count} fouten", + "streaming": "Streamingantwoord: de meting stopt bij het aanmaken van het antwoord, niet aan het einde van de operatie.", + "operation": "Operatie-ID", + "kind": "Meetgroep", + "adminApi": "HK-API’s", + "publicPage": "Openbare pagina’s", + "applyFilters": "Filters toepassen", + "publicBoundary": "Openbare metingen omvatten de hoofdcomponent op de server voor /me, nieuws, profielen, evenementen en zoeken. Metadata, afzonderlijk gerenderde onderliggende componenten, netwerkoverdracht en browserweergave zijn uitgesloten. Componentresultaten zijn geen HTTP-statuscodes. Aanroepen tijdens de statische build zijn uitgesloten.", + "outcomes": { + "completed": "Component voltooid", + "failed": "Component mislukt", + "redirect": "Omleiding", + "not-found": "Pagina niet gevonden" + } + }, + "importProgress": { + "validating": "Lokale gegevens controleren", + "downloading": "Bestanden downloaden", + "converting": "Omzetten naar Nitro", + "checking_sources": "In ingestelde bronnen zoeken", + "writing_db": "SQL en catalogus opslaan", + "writing_furnidata": "Furnidata bijwerken", + "translating": "Vertalingen bijwerken", + "current": "Huidige fase: {phase}", + "last": "Laatste fase: {phase}", + "elapsed": "{seconds}s in deze fase", + "recovered": "Bundel hersteld via {source} · revisie {revision}. Classname, type en revisie komen overeen; identiteit van de bundel gecontroleerd.", + "recoveryHint": "Je kunt doorgaan. Als de oorspronkelijke bestanden ontbreken, zoekt de importeur in actieve bronnen naar dezelfde classname, hetzelfde type en dezelfde revisie en controleert daarna de Nitro-bundel. Ontbrekende bestanden kun je ook handmatig toevoegen." + }, + "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" + } + }, + "mod": { + "title": "Moderatiepaneel", + "badge": "Mod", + "overviewTitle": "Moderator overzicht", + "overviewSubtitle": "CFH, snelle acties en bans zonder volledige admin-toegang.", + "shortcutsTitle": "Snelkoppelingen", + "nav": { + "overview": "Overzicht", + "cfh": "Call for Help", + "actions": "Snelle acties", + "bans": "Bans", + "fullAdmin": "Volledige admin", + "backToSite": "Terug naar site", + "tickets": "Supportbalie", + "helpTickets": "Helpcentrum", + "users": "Gebruikers", + "team": "Team" + }, + "usersTitle": "Spelers", + "usersSubtitle": "Opzoeken zonder e-mail of IP — gebruik full admin voor gevoelige velden.", + "usersEmpty": "Geen spelers gevonden", + "usersSearchPlaceholder": "Zoek username, motto of ID…", + "usersRank": "rank", + "usersPublicProfile": "Openbaar profiel", + "usersPiiNote": "E-mail, IP en valuta zijn verborgen in het mod-panel. Open full admin als je toegang hebt.", + "usersJoined": "Lid sinds", + "usersLastLogin": "Laatste login", + "usersLastOnline": "Laatst online", + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans vandaag", + "modsOnline": "Mods online", + "quickActions": "Snelle acties", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open CMS-tickets", + "openHelpTickets": "Open help-tickets", + "team": "Mod team", + "teamHint": "Online staff & werklast" + } + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Zoek furni, classnames, trefwoorden… (/)", + "results": "{count} resultaten", + "inDb": "in DB", + "inCatalog": "in catalogus", + "missingNitro": "ontbrekende nitro", + "globalTranslation": "Vertaling (globaal)", + "catalogTree": "Catalogus", + "source": "Furni-bron", + "officialSource": "(officieel)", + "type": "Type", + "allTypes": "Alle types", + "floorItems": "Vloeritems", + "wallItems": "Muuritems", + "category": "Categorie", + "allCategories": "Alle categorieën", + "status": "Status", + "allStatuses": "Alle statussen", + "imported": "Geïmporteerd", + "inCatalogStatus": "In catalogus", + "missingNitroStatus": "Ontbrekende nitro", + "sort": "Sorteer", + "defaultOrder": "Standaardvolgorde", + "nameAZ": "Naam A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Categorie", + "importedFirst": "Eerst geïmporteerd", + "notImportedFirst": "Eerst niet-geïmporteerd", + "noNitro": "{count} geen nitro", + "gridView": "Rasterweergave", + "listView": "Lijstweergave", + "selectAll": "Alles selecteren", + "selectedCount": "{count} geselecteerd", + "clear": "Wissen", + "translate": "Vertalen", + "noLanguages": "Geen talen", + "allLanguages": "Alle talen", + "languagesCount": "{count} talen", + "languages": "Talen", + "all": "Alles", + "none": "Geen", + "languageLabel": "Taal {lang}", + "translateAll": "Alles vertalen", + "translateAllTitle": "Vertaal de hele catalogus in alle talen (achteraf)", + "importAuto": "Importeer {count} auto", + "maintenance": { + "title": "Catalogus-onderhoud", + "description": "Dwing de meubeltabellen tot 100% consistentie met FurnitureData.json. Elke actie draait in een database-transactie en rolt terug bij een fout.", + "refresh": "Verversen", + "currentHealth": "Huidige status", + "itemsInBase": "{count} items in items_base", + "loading": "Laden…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite-afwijking", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalogus offer-afwijking", + "statDuplicateClassnames": "Dubbele classnames", + "hintDuplicateClassnames": "items_base item_name dubbelen", + "statDuplicateCatalogRows": "Dubbele catalogusrijen", + "hintDuplicateCatalogRows": "zelfde product twee keer op een pagina", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id wijkt af van furnidata", + "statDuplicateBcCatalogRows": "Dubbele BC-catalogusrijen", + "hintDuplicateBcCatalogRows": "zelfde product twee keer in builder club", + "statDuplicateCatalogPages": "Dubbele cataloguspagina's", + "hintDuplicateCatalogPages": "zelfde bijschrift onder dezelfde ouder (dubbele links)", + "optionSpriteId": "Herstel sprite_id", + "optionOfferId": "Herstel catalogus offer_id", + "optionRemoveDuplicates": "Verwijder dubbele (items + catalogus)", + "optionReconcile": "Verzoen FurnitureData ↔ DB", + "optionAlignIds": "Aligneer items_base-ID's naar FurnitureData", + "alignDescription": "Verplaatst elke items_base.id naar de FurnitureData sprite-id (bron van waarheid). Overschrijft alle refererende tabellen.", + "previewChanges": "Bekijk wijzigingen", + "plannedIdMoves": "Geplande ID-verplaatsingen: {moves}", + "newItemsInsert": "Nieuwe items om in te voegen: {inserted}", + "skipped": "Overgeslagen (id bezet): {list}", + "applyAlignment": "Pas uitlijning toe", + "fixEverythingTitle": "Alles herstellen", + "fixEverythingDescription": "Voert de geselecteerde reparaties in volgorde uit. Zware bewerking — maak eerst een backup.", + "alsoMergeDuplicatePages": "Voeg ook dubbele cataloguspagina's samen (dubbele links)", + "runSelected": "Voer geselecteerde uit", + "selectAtLeastOne": "Selecteer minstens één reparatie om uit te voeren", + "previewReady": "Voorbeeld klaar", + "previewFailed": "Voorbeeld mislukt", + "toast": { + "spriteFixed": "sprite_id hersteld", + "offerFixed": "catalogus offer_id hersteld", + "duplicatesRemoved": "Dubbele verwijderd (items + catalogus)", + "reconciled": "FurnitureData verzoend", + "aligned": "items_base-ID's uitgelijnd naar FurnitureData", + "allApplied": "Alle geselecteerde reparaties uitgevoerd", + "failed": "Mislukt" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "Geen ongelezen berichten", + "roomsUnavailable": "Kamers zijn tijdelijk niet beschikbaar. Open de community om het opnieuw te proberen.", + "eventDetails": "Evenement bekijken", + "allEvents": "Alle evenementen", + "eventTitle": "Op de agenda", + "noUpcomingEvents": "Er zijn nog geen nieuwe evenementen aangekondigd.", + "eventUpcoming": "Binnenkort", + "eventsUnavailable": "De agenda is tijdelijk niet beschikbaar. Open alle evenementen om het opnieuw te proberen.", + "messagesUnavailable": "Open je inbox om te kijken", + "eventOngoing": "Nu bezig", + "tasks": { + "title": "Te doen", + "support": "{count, plural, one {# ticket met een antwoord van de klantenservice} other {# tickets met antwoorden van de klantenservice}}", + "friends": "{count, plural, one {# vriendschapsverzoek om te bekijken} other {# vriendschapsverzoeken om te bekijken}}", + "event": "Je volgende aangemelde evenement: {title} · {date}", + "reward": "Je beloning voor uitnodigingen staat klaar", + "empty": "Alles is bijgewerkt. Er zijn geen acties nodig.", + "unavailable": "Sommige acties konden niet worden gecontroleerd. Beschikbare acties staan hierboven.", + "retry": "Opnieuw proberen", + "rewardUnavailable": "De voortgang van uitnodigingen is tijdelijk niet beschikbaar. Probeer het opnieuw." + }, + "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." + } + }, + "search": { + "title": "Zoeken", + "subtitle": "Vind gebruikers, open kamers, nieuws en evenementen.", + "queryLabel": "Zoekterm", + "submit": "Zoeken", + "enterQuery": "Voer een zoekterm in voor gebruikers, kamers, nieuws en evenementen.", + "resultsFor": "Resultaten voor “{query}”", + "users": "Gebruikers", + "rooms": "Open kamers", + "news": "Nieuws", + "events": "Evenementen", + "loadError": "Deze resultaten konden niet worden geladen. Probeer het opnieuw.", + "empty": "Geen resultaten gevonden.", + "online": "Online", + "offline": "Offline", + "pagination": "Pagina’s voor {category}", + "previous": "Vorige", + "next": "Volgende", + "pageSummary": "Pagina {page} van {pages} · {total} resultaten" + }, + "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" + }, + "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." + } + } + } + }, + "toolbar": { + "home": "Home", + "reload": "Vernieuwen", + "fullscreen": "Volledig scherm", + "logout": "Uitloggen", + "onlineUsers": "Gebruikers online", + "emulatorOnline": "Emulator online", + "emulatorOffline": "Emulator offline", + "dragToMove": "Sleep om te verplaatsen", + "hide": "Werkbalk verbergen", + "fullscreenExit": "Volledig scherm afsluiten", + "show": "Werkbalk tonen", + "emulatorUnknown": "Emulatorstatus onbekend" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Bestandsdiagnostiek", + "preliminary": "Voorafgaande controle van adressen; inhoud wordt tijdens import gevalideerd.", + "http": "HTTP {status}", + "network": "Verbinding mislukt", + "timeout": "De bron antwoordde niet op tijd", + "invalidResponse": "De bron gaf een webpagina in plaats van een bestand", + "available": "Bestand gevonden; wacht op validatie", + "recover": "Origineel toevoegen en hervatten", + "recoveryHint": "Kies {file} (maximaal 50 MB). De identiteit wordt gecontroleerd. Mislukte items worden opnieuw geprobeerd; voltooide imports blijven behouden.", + "attach": "Kies het originele .nitro-bestand", + "working": "Valideren of hervatten...", + "attached": "Overeenkomend origineel toegevoegd", + "resume": "Mislukte imports hervatten met dit bestand", + "invalidFile": "Kies een overeenkomend origineel .nitro-bestand van maximaal 50 MB en probeer opnieuw.", + "resumeError": "Vernieuw de geschiedenis en gebruik de laatste poging; controleer het bestand en probeer opnieuw.", + "mismatchedFile": "Dit bestand hoort bij een ander meubel.", + "alreadyStarted": "Herstel is al gestart. Vernieuw de geschiedenis en gebruik de laatste poging.", + "notEligible": "Dit item kan niet met een bijlage worden hersteld." + }, + "completeness": { + "title": "Volledigheid en vervolgstappen", + "parts": { + "sql": "SQL-item", + "catalog": "Catalogusaanbod", + "furnidata": "Furnidata", + "icon": "Lokaal pictogram", + "nitro": "Nitro-bestand" + }, + "statuses": { + "present": "Aanwezig", + "missing": "Ontbreekt", + "unknown": "Niet gecontroleerd", + "conflict": "Controle nodig" + }, + "actions": { + "sql": "Importeer of herstel dit meubel om het ontbrekende itemrecord aan te maken.", + "catalog": "Importeer of herstel dit meubel om een aanbod met de automatische categorie en prijs toe te voegen.", + "furnidata": "Importeer of herstel dit meubel om de ontbrekende meubelgegevens toe te voegen.", + "icon": "Importeer of herstel dit meubel om het ontbrekende lokale pictogram op te halen.", + "nitro": "Importeer of herstel dit meubel om het bestand op te halen. Bij een bestaand item kun je ook .nitro opnieuw genereren.", + "recheck": "Controleer de lokale status opnieuw voordat je herstelt. Controleer de toegang tot lokale bestanden als het probleem aanhoudt.", + "audit": "Controleer dubbele records en overeenkomende sprite-ID’s en typen in Cataloguscontrole voordat je herstelt." + }, + "openAudit": "Open Cataloguscontrole om conflicten op te lossen", + "excludedConflicts": "{count, plural, one {# item moet worden gecontroleerd en is uitgesloten van deze import.} other {# items moeten worden gecontroleerd en zijn uitgesloten van deze import.}}" + }, + "preflight": { + "filterLabel": "Importcontroles filteren", + "filters": { + "all": "Alles ({count})", + "complete": "Aan te vullen ({count})", + "conflict": "Conflicten ({count})", + "verify": "Te controleren ({count})" + }, + "empty": "Geen meubels in deze groep.", + "actions": { + "complete": "Voorstel: bestaand meubel aanvullen", + "import": "Voorstel: nieuw meubel importeren", + "refresh": "Bestaand meubel is compleet; brongegevens vernieuwen", + "conflict": "Los conflicten in lokale gegevens op voordat je importeert", + "verify": "Controleer de niet-geverifieerde onderdelen voordat je doorgaat" + }, + "missing": "Ontbreekt: {parts}", + "unknown": "Niet geverifieerd: {parts}" + } + } + }, + "publicData": { + "loadError": "Dit onderdeel kon niet worden geladen. Probeer het opnieuw.", + "retry": "Opnieuw proberen", + "unavailable": "Niet beschikbaar" + } } diff --git a/src/messages/no.json b/src/messages/no.json index e995e930..7f2a44e0 100644 --- a/src/messages/no.json +++ b/src/messages/no.json @@ -1,3918 +1,4913 @@ { - "draftRecovery": { - "ready": "En gjenopprettingskopi lagres i denne nettleseren i 7 dager.", - "saved": "En gjenopprettingskopi er lagret i denne nettleseren i 7 dager.", - "unavailable": "Gjenoppretting i nettleseren er ikke tilgjengelig. Hold denne siden åpen til endringene dine er lagret.", - "found": "En gjenopprettingskopi er tilgjengelig i denne nettleseren, lagret", - "restore": "Gjenopprett nettleserkopi", - "discard": "Slett nettleserkopi", - "confirmRestore": "Erstatte det gjeldende skjemaet med gjenopprettingskopien fra nettleseren? Kontroller innholdet før du lagrer.", - "confirmDiscard": "Slette denne gjenopprettingskopien fra nettleseren? Det gjeldende skjemaet forblir uendret." - }, - "nav": { - "home": "Hjem", - "community": "Fellesskap", - "articles": "Artikler", - "photos": "Bilder", - "staff": "Ansatte", - "rankings": "Rangeringer", - "guilds": "Gilder", - "leaderboards": "Leaderboards", - "rareValues": "Sjeldne verdier", - "shop": "Handle", - "market": "Marked", - "assistance": "Assistanse", - "helpCenter": "Hjelpesenter", - "myTickets": "Billettene mine", - "badges": "Merker", - "radio": "Radio", - "friends": "Venner", - "messages": "Meldinger", - "admin": "Admin", - "openMenu": "Åpne menyen", - "closeMenu": "Lukk menyen", - "drawBadge": "Tegn merke", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} online", - "nitroClient": "Nitro klient", - "tagline": "En online virtuell verden hvor du kan lage din egen avatar, få venner, chatte, lage rom og mye mer!", - "login": "Logg inn", - "or": "Eller", - "createAccount": "Opprett en konto" - }, - "footer": { - "copyright": "© {year} - {hotel} er et ikke-kommersielt utdanningsprosjekt" - }, - "pages": { - "staff": { - "title": "Ansatte", - "subtitle": "Teamet bak hotellet", - "ranksTitle": "Rangerer", - "ranksSubtitle": "Hva hver del av teamet tar seg av", - "membersTitle": "Teammedlemmer", - "membersEmptySubtitle": "Ingen å vise akkurat nå", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "Ingen ansatte å vise.", - "colUsername": "Brukernavn", - "colRank": "Rangering", - "colMotto": "Motto" - }, - "leaderboard": { - "title": "Leaderboard", - "subtitle": "Topp 20 spillere etter {currency}", - "tab_credits": "Studiepoeng", - "tab_diamonds": "Diamanter", - "tab_duckets": "Duckets", - "tab_achievement": "Prestasjoner", - "tab_respects": "Respekterer", - "tab_onlinetime": "Online tid", - "emptyState": "Ingen rangeringer å vise ennå.", - "colAvatar": "Avatar", - "colPlayer": "Spiller" - }, - "friends": { - "title": "Venner", - "emptySubtitle": "Du har ingen venner lagt til ennå", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Legg til venner på hotellet, så dukker de opp her.", - "noMotto": "Ingen 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": "Meldinger", - "subtitle": "Venneforespørsler og frakoblede meldinger venter på deg", - "requestsTitle": "Venneforespørsler", - "requestsEmptySubtitle": "Ingen har bedt om å være vennen din ennå", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "Ingen ventende venneforespørsler.", - "wantsToBeFriend": "ønsker å være din venn.", - "accept": "Godta", - "offlineTitle": "Frakoblede meldinger", - "offlineEmptySubtitle": "Innboksen din er tom", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "Du har ingen frakoblede meldinger.", - "unknownUser": "Bruker nr. {id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Ingen motto", - "statRank": "Rangering", - "statCredits": "Studiepoeng", - "statRegistered": "Registrert", - "badgesTitle": "Merker", - "badgesEmpty": "Ingen merker ennå.", - "photosTitle": "Bilder", - "photosEmpty": "Ingen bilder ennå.", - "guestbookTitle": "Gjestebok", - "guestbookSubtitle": "Meldinger på {username} sin vegg", - "leaveMessage": "Legg igjen en melding", - "guestbookPlaceholder": "Skriv noe i gjesteboken til {username}...", - "post": "Post", - "loginToPost": "Logg inn for å legge igjen en gjestebokmelding.", - "guestbookEmpty": "Ingen gjestebokinnlegg ennå.", - "unknownUser": "Bruker nr. {id}", - "statDuckets": "Duckets", - "statDiamonds": "Diamanter", - "walletTitle": "Lommebok", - "friendsTitle": "Venner", - "friendsSubtitle": "Folk på hotellet de henger med", - "friendsEmpty": "Ingen venner å vise.", - "roomsTitle": "Rom", - "roomsSubtitle": "Rom de eier", - "roomsEmpty": "Ingen rom å vise.", - "roomUntitled": "Rom uten tittel", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Rangeringer", - "subtitle": "De 12 beste spillerne rangert etter studiepoeng", - "emptyState": "Ingen spillere å rangere ennå." - }, - "home": { - "welcome": "Velkommen til {hotelName}", - "welcomeSubtitle": "Ditt retrohotell, nå drevet av Next.js", - "welcomeBody": "Heng med, samle møbler og møt venner.", - "enterHotel": "Skriv inn {hotelName}", - "onlineFriends": "Online venner", - "noFriendsOnline": "Ingen venner online", - "register": "REGISTRER DEG NÅ", - "joinNow": "Bli med i {hotelName} i dag!", - "recentUsers": "Nylige brukere", - "recentPhotos": "Nylige bilder", - "latestNews": "Siste nytt", - "newsTitle": "Siste nytt", - "newsSubtitle": "Frisk fra hotellet", - "allNews": "Alle nyheter →", - "allUsers": "Fellesskap →", - "noArticles": "Ingen artikler ennå.", - "noPhotos": "Ingen bilder ennå.", - "noUsers": "Ingen brukere online", - "latestArticle": "Siste artikkel", - "latestUsers": "Nyeste borgere ({count} totalt)", - "statsOnline": "Online", - "statsCitizens": "Innbyggere", - "statsRooms": "Rom", - "statsArticles": "Artikler", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Skap ditt unike utseende", - "featuresFurniture": "Møbler", - "featuresFurnitureDesc": "Dekorer rom med gjenstander", - "featuresCommunity": "Fellesskap", - "featuresCommunityDesc": "Få venner og chat", - "featuresGames": "Spill", - "featuresGamesDesc": "Konkurrer og ha det gøy" - }, - "news": { - "title": "Nyheter", - "subtitle": "De siste kunngjøringene, arrangementene og oppdateringene fra hotellet", - "noArticles": "Ingen artikler ennå." - }, - "article": { - "backToNews": "← Nyheter", - "reactionsTitle": "Reaksjoner", - "reactionsSubtitle": "Fortell oss hva du synes", - "reaction": { - "like": "Liker", - "love": "Kjærlighet", - "wow": "Wow" - }, - "removeReaction": "Klikk for å fjerne reaksjonen", - "reactWith": "Reager med {reaction}", - "noReactions": "Ingen reaksjoner ennå.", - "logIn": "Logg inn", - "toReact": "å reagere.", - "commentsTitle": "Kommentarer", - "commentsSubtitle": "Bli med i samtalen", - "commentsCount": "{count} så langt", - "noComments": "Ingen kommentarer ennå. Vær den første til å kommentere.", - "userNumber": "Bruker nr. {id}", - "addComment": "Legg til en kommentar", - "commentPlaceholder": "Skriv din kommentar...", - "postComment": "Legg inn kommentar", - "toComment": "for å legge igjen en kommentar.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Bilder", - "subtitle": "De siste øyeblikksbildene tatt på hotellet", - "noPhotos": "Ingen bilder ennå.", - "photoAlt": "Bilde av bruker #{id}", - "byUser": "av bruker #{id}" - }, - "badges": { - "title": "Merker", - "subtitle": "Merkene kan du tjene og vise frem rundt hotellet", - "noBadges": "Ingen merker tilgjengelig ennå." - }, - "community": { - "title": "Fellesskap", - "subtitle": "Alt som skjer rundt hotellet på ett sted", - "open": "Åpne →", - "links": { - "rankings": { - "title": "Rangeringer", - "text": "Se de rikeste spillerne på hotellet, rangert etter studiepoeng." - }, - "staff": { - "title": "Ansatte", - "text": "Møt teamet som holder hotellet i gang hver dag." - }, - "news": { - "title": "Nyheter", - "text": "De siste kunngjøringene, arrangementene og oppdateringene." - }, - "photos": { - "title": "Bilder", - "text": "Øyeblikksbilder delt av fellesskapet fra rundt hotellet." - }, - "guilds": { - "title": "Gilder", - "text": "Bla gjennom gruppene spillere har opprettet og blitt med i." - }, - "leaderboards": { - "title": "Leaderboards", - "text": "Hvem er på topp denne sesongen på tvers av hotellets statistikk." - } - } - }, - "guilds": { - "title": "Gilder", - "subtitle": "Bla gjennom gruppene spillere har opprettet og blitt med i", - "empty": "Ingen laug ennå.", - "unnamedGuild": "Ukjent laug", - "noDescription": "Ingen beskrivelse" - }, - "guild": { - "allGuilds": "← Alle laugene", - "unnamedGuild": "Ukjent laug", - "noDescription": "Ingen beskrivelse", - "memberSingular": "Medlem", - "memberPlural": "Medlemmer", - "founded": "Grunnlagt", - "forumLink": "Forum →", - "discussion": "Diskusjon", - "membersTitle": "Medlemmer", - "memberLowerSingular": "medlem", - "memberLowerPlural": "medlemmer", - "noMembers": "Ingen medlemmer.", - "owner": "Eier", - "noMotto": "Ingen motto" - }, - "guildForum": { - "backToGuild": "← Tilbake til guild", - "unnamedGuild": "Ukjent laug", - "forumTitle": "{guild} – Forum", - "threadSingular": "tråd", - "threadPlural": "tråder", - "newThread": "+ Ny tråd", - "empty": "Ingen tråder i dette forumet ennå.", - "colSubject": "Emne", - "colAuthor": "Forfatter", - "colPosts": "Innlegg", - "colDate": "Dato", - "noSubject": "(ingen emne)", - "pinned": "Festet", - "locked": "Låst", - "userNumber": "Bruker nr. {id}", - "unknown": "Ukjent", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Tilbake til forumet", - "unnamedGuild": "Ukjent laug", - "title": "Ny tråd", - "subtitle": "i {guild}-forumet", - "subjectLabel": "Emne", - "subjectPlaceholder": "Trådemne", - "messageLabel": "Melding", - "messagePlaceholder": "Skriv åpningsinnlegget ditt...", - "postThread": "Post tråd", - "cancel": "Avbryt", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Handle", - "subtitle": "Fyll på kontoen din og få eksklusive pakker, valuta og merker.", - "browsingCategory": "Bla gjennom {category}-pakkene.", - "all": "Alle", - "allPackages": "Alle pakker", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "Ingen tilgjengelige pakker akkurat nå.", - "buy": "Kjøp", - "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": "Fyll på med PayPal", - "subtitle": "Betal sikkert med PayPal, og kredittene dine legges til i det øyeblikket betalingen foretas.", - "cancelled": "Kassen ble kansellert - ingen betaling ble tatt.", - "chooseAmount": "Velg et beløp", - "notConfiguredPre": "PayPal er ikke konfigurert ennå. En administrator må stille inn", - "notConfiguredAnd": "og", - "notConfiguredOptional": "(og eventuelt", - "notConfiguredPost": "for sandkasse vs. live).", - "balanceTitle": "Din saldo", - "signedInAs": "Logget på som {username}", - "credits": "Studiepoeng", - "creditsPerUnit": "Kreditt per 1,00 {currency}", - "rateLine": "Du mottar {amount} kreditter per 1,00 {currency}. Kreditter vises i spillet neste gang du logger på." - }, - "marketplace": { - "title": "Markedsplass", - "subtitle": "Bla gjennom møbler og sjeldne produkter oppført av spillere. Oppføringer plasseres i spillet og oppdateres live - gå inn på hotellet for å gi et tilbud.", - "activeOffers": "Aktive tilbud", - "sellers": "Selgere", - "totalValue": "Total verdi", - "activeListings": "Aktive oppføringer", - "mostRecentFirst": "Sist oppført først", - "empty": "Det er ingen aktive markedsplasstilbud akkurat nå. Kom tilbake senere.", - "colOffer": "Tilbud", - "colItem": "Vare", - "colSeller": "Selger", - "colPrice": "Pris", - "colListed": "Oppført", - "itemLabel": "Vare nr. {id}", - "userLabel": "Bruker nr. {id}", - "justNow": "akkurat nå", - "minutesAgo": "for {count} m siden", - "hoursAgo": "for {count} t siden", - "daysAgo": "for {count}d siden" - }, - "rares": { - "title": "Sjeldne verdier", - "subtitle": "Få en oversikt over alle de sjeldne på hotellet, gruppert etter kategori.", - "empty": "Vi har for øyeblikket ingen sjeldne oppført her.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Se sjeldne →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Alle sjeldne", - "empty": "Ingen sjeldne oppført i denne kategorien ennå.", - "colRare": "Sjelden", - "colCredits": "Studiepoeng", - "colCurrency": "Valuta", - "creditsValue": "{value} kreditter", - "duckets": "Duckets", - "diamonds": "Diamanter", - "credits": "Studiepoeng" - }, - "redeem": { - "title": "Løs inn en kupong", - "subtitle": "Har du en kupongkode? Skriv inn den nedenfor for å legge belønningen til kontoen din.", - "enterCode": "Skriv inn koden din", - "oncePerAccount": "Hver kupong kan kun løses inn én gang per konto.", - "balanceTitle": "Din saldo", - "signedInAs": "Logget på som {username}", - "credits": "Studiepoeng", - "instantCredit": "Innløste belønninger krediteres umiddelbart og vises i spillet neste gang du logger på." - }, - "help": { - "title": "Hjelpesenter", - "subtitle": "Finn guider, støtteemner og hotellreglene – alt du trenger for å få hjelp.", - "myTickets": "Mine billetter →", - "topicsTitle": "Støtteemner", - "topicsSubtitle": "Bla gjennom guider og svar på vanlige spørsmål", - "topicsEmpty": "Ingen hjelpeemner ennå.", - "rulesTitle": "Hotellregler", - "rulesSubtitle": "Les disse før du henger på hotellet", - "rulesEmpty": "Ingen regler publisert ennå.", - "categoryEmpty": "Ingen regler i denne kategorien." - }, - "helpCategory": { - "back": "← Hjelpesenter", - "topicSubtitle": "Hjelpesenter-emne", - "moreTitle": "Flere hjelpeemner", - "moreSubtitle": "Gå til et annet støtteemne" - }, - "helpTickets": { - "title": "Hjelpebilletter", - "subtitle": "Send inn en billett til personalet og spor dine åpne forespørsler.", - "statTotal": "Totalt antall billetter", - "statOpen": "Åpne", - "statClosed": "Stengt", - "newTitle": "Ny billett", - "newSubtitle": "Beskriv problemet ditt og personalet vil følge opp", - "subjectPlaceholder": "Emne", - "contentPlaceholder": "Beskriv problemet ditt...", - "submit": "Send inn billett", - "listTitle": "Dine billetter", - "listSubtitle": "Hver forespørsel du har sendt til ansatte", - "listEmpty": "Du har ingen billetter ennå.", - "colId": "ID", - "colSubject": "Emne", - "colStatus": "Status", - "colCreated": "Opprettet", - "statusOpen": "Åpne", - "statusClosed": "Stengt", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Søk på {hotel}-ansatte", - "subtitle": "Vi åpner personalsøknader nå og da. Kommer du over en stilling du føler at du vil passe perfekt inn i, ikke nøl med å søke på den.", - "noPositionsTitle": "Ingen ledige stillinger", - "noPositionsBody": "Det er foreløpig ingen ledige stillinger. Kom gjerne tilbake på et senere tidspunkt for å sjekke om vi har noen åpninger innen da. Takk for interessen.", - "noDeadline": "Ingen frist satt", - "deadline": "Søknadsfrist: {date}", - "alreadyApplied": "Du har allerede søkt om {rank}", - "aboutYou": "Om deg", - "aboutPlaceholder": "Fortell oss hvorfor du ville være en stor {rank}...", - "applyFor": "Søk om {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": "Søk på {hotel}-teamet", - "subtitle": "Vi åpner teamsøknader med jevne mellomrom. Ser du et lag du passer, ikke nøl med å søke!", - "noPositionsTitle": "Ingen lagstillinger åpne", - "noPositionsBody": "Det er for tiden ingen åpne lagstillinger. Kom tilbake senere for å se etter nye åpninger. Takk!", - "pending": "Søknaden din er under behandling", - "aboutYou": "Om deg", - "aboutPlaceholder": "Fortell oss hvorfor du vil passe godt for {rank}...", - "applyFor": "Søk om {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": "Still inn på hotellradioen – live DJ-sett, forespørsler og shoutouts.", - "nowPlaying": "Spiller nå", - "nothingPlaying": "Ingenting spiller akkurat nå.", - "onAir": "På lufta: {dj}", - "noDj": "Ingen DJ på lufta.", - "audioUnsupported": "Nettleseren din støtter ikke lydelementet.", - "streamOffline": "Strømmen er for øyeblikket offline.", - "exploreTitle": "Utforsk radioen", - "exploreSubtitle": "Planlegg, rop, forespørsler og mer", - "linkSchedule": "Tidsplan", - "linkScheduleText": "Vårt ukentlige utvalg av DJs og show.", - "linkShouts": "Roper", - "linkShoutsText": "Shout-outs og forespørsler fra samfunnet.", - "linkRequests": "Forespørsler", - "linkRequestsText": "Be DJ-en spinne favorittsporet ditt.", - "linkApply": "Søk som DJ", - "linkApplyText": "Bli med på laget og ta til radioen.", - "linkLeaderboard": "Leaderboard", - "linkLeaderboardText": "Topplyttere rangert etter poeng opptjent.", - "todayTitle": "Dagens timeplan", - "todayTitleWithDay": "Dagens timeplan · {day}", - "todaySubtitle": "Hva er på eteren i dag", - "fullWeek": "Hel uke →", - "noShowsToday": "Ingen forestillinger planlagt i dag.", - "colTime": "Tid", - "colShow": "Vis", - "colDj": "DJ", - "untitledShow": "Uten tittel show", - "userNumber": "Bruker nr. {id}" - }, - "radioSchedule": { - "title": "Radioplan", - "subtitle": "Vårt ukentlige utvalg av DJs og show", - "empty": "Ingen show planlagt ennå.", - "colDay": "dag", - "colTime": "Tid", - "colDj": "DJ", - "colShow": "Vis", - "noShows": "Ingen show" - }, - "radioShouts": { - "title": "Radio roper", - "subtitle": "Shout-outs og forespørsler fra samfunnet", - "postTitle": "Legg ut et rop", - "postSubtitle": "Send en melding til DJ på lufta", - "messageLabel": "Din melding", - "messagePlaceholder": "Send et rop til DJ...", - "shoutButton": "Rop", - "loginToPost": "Logg inn for å legge ut et rop.", - "latestTitle": "Siste rop", - "latestSubtitle": "De siste meldingene fra lytterne", - "empty": "Ingen rop ennå. Vær den første!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Radiokonkurranser", - "subtitle": "Følg med og ta del i våre siste konkurranser på lufta", - "empty": "Ingen konkurranser ennå.", - "contestLabel": "Konkurranse nr. {id}", - "dateUnknown": "Dato ukjent" - }, - "radioGiveaways": { - "title": "Radio Giveaways", - "subtitle": "Hør på for å få sjansen din til å vinne i våre radiogaver", - "empty": "Ingen giveaways ennå.", - "giveawayLabel": "Giveaway #{id}", - "dateUnknown": "Dato ukjent" - }, - "radioLeaderboard": { - "title": "Leaderboard for radiolytter", - "subtitle": "Topp 50 lyttere etter poeng opptjent ved å stille inn på radioen", - "empty": "Ingen lytterpoeng å vise ennå.", - "colRank": "Rangering", - "colAvatar": "Avatar", - "colListener": "Lytter", - "colPoints": "Poeng" - }, - "radioRequests": { - "formTitle": "Send inn en forespørsel", - "formSubtitle": "Be DJ-en spille favorittsporet ditt", - "songLabel": "Sang", - "songPlaceholder": "Tittel på sangen", - "artistLabel": "Kunstner", - "artistPlaceholder": "Navn på artist (valgfritt)", - "submitButton": "Send inn forespørsel", - "loginToRequest": "Logg inn for å sende inn en forespørsel.", - "latestTitle": "Nylige forespørsler", - "latestSubtitle": "De sist etterspurte sangene", - "empty": "Ingen forespørsler ennå.", - "colSong": "Sang", - "colArtist": "Kunstner", - "colRequester": "Forespørsel", - "colDate": "Dato", - "colStatus": "Status", - "statusPending": "Venter", - "statusApproved": "Godkjent", - "statusPlayed": "Spilt", - "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": "Søk om å bli radio-DJ", - "subtitle": "Fortell oss om deg selv og hvorfor du vil passe godt i eteren", - "latestTitle": "Din siste søknad", - "statusLabel": "Status:", - "submittedOn": "· sendt inn {date}", - "submitAgain": "Du kan sende inn på nytt nedenfor hvis opplysningene dine er endret.", - "formTitle": "Søknadsskjema", - "formSubtitle": "Alle felt merket som obligatoriske må fylles ut", - "realNameLabel": "Ekte navn", - "realNamePlaceholder": "Ditt fulle navn", - "ageLabel": "Alder", - "availabilityLabel": "Tilgjengelighet", - "availabilityPlaceholder": "Hvilke dager og tidspunkter kan du sende?", - "musicStyleLabel": "Musikkstil", - "musicStylePlaceholder": "f.eks. House, pop, hip-hop", - "experienceLabel": "Erfaring", - "optional": "(valgfritt)", - "experiencePlaceholder": "Noen tidligere DJ eller vertserfaring?", - "motivationLabel": "Motivasjon", - "motivationPlaceholder": "Hvorfor vil du bli med i radioteamet?", - "submitButton": "Send inn søknad", - "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": "Kontoinnstillinger", - "accountSettingsSubtitle": "Administrer profilen din, sikkerheten og tilkoblede kontoer", - "publicProfile": "Din offentlige profil", - "noMotto": "Ingen motto", - "noEmail": "Ingen e-post på filen", - "changeMotto": "Endre motto", - "changeMottoSubtitle": "Oppdateres umiddelbart i spillet hvis du er online", - "mottoPlaceholder": "Ditt motto", - "saveMotto": "Lagre motto", - "securityTitle": "Sikkerhet", - "securitySubtitle": "To-faktor autentisering", - "securityDescription": "Legg til et ekstra lag med beskyttelse til kontoen din.", - "twoFactorLink": "To-faktor autentisering" - }, - "settings2fa": { - "backToSettings": "← Innstillinger", - "title": "To-faktor autentisering", - "subtitle": "Legg til et ekstra lag med sikkerhet med en autentiseringsapp", - "nowEnabled": "2FA er nå aktivert. 🔒", - "disabledNotice": "2FA er deaktivert.", - "badCode": "Den koden var ikke gyldig – prøv igjen.", - "noAppKeyPrefix": "2FA er utilgjengelig frem til", - "noAppKeyMiddle": "er konfigurert (samme Laravel", - "noAppKeySuffix": "mens AtomCMS installeres, slik at eksisterende hemmeligheter forblir lesbare).", - "isEnabled": "2FA er aktivert", - "onYourAccount": "på kontoen din.", - "disable": "Deaktiver 2FA", - "scanOrEnter": "Skann eller skriv inn denne nøkkelen", - "scanInstructions": "Legg til dette i Google Authenticator / Authy, og skriv inn den 6-sifrede koden for å bekrefte.", - "manualKey": "Manuell nøkkel:", - "codePlaceholder": "6-sifret kode", - "confirm": "Bekreft", - "enableIntro": "Legg til et ekstra lag med sikkerhet med en autentiseringsapp.", - "enable": "Aktiver 2FA" - }, - "title": "Tilknyttede kontoer", - "subtitle": "Koble til en sosial konto slik at du kan logge på med ett klikk", - "connected": "Tilkoblet", - "unavailable": "Utilgjengelig", - "login": { - "title": "Logg på", - "subtitle": "Velkommen tilbake – logg inn for å komme inn på hotellet.", - "subtitle2fa": "Skriv inn den 6-sifrede koden fra autentiseringsenheten.", - "usernamePlaceholder": "Brukernavn", - "passwordPlaceholder": "Passord", - "codePlaceholder": "2FA-kode", - "pleaseWait": "Vennligst vent...", - "verify": "Bekreft", - "signIn": "Logg på", - "or": "eller", - "noAccount": "Ingen konto?", - "createOne": "Lag en", - "forgotPassword": "Glemt passord?", - "errorInvalidCredentials": "Ugyldig brukernavn eller passord", - "errorInvalid2fa": "Ugyldig 2FA-kode", - "welcomeBack": "Velkommen tilbake", - "welcomeBackSub": "Logg inn for å fortsette til {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Opprett konto", - "subtitle": "Bli med på hotellet - det tar bare et øyeblikk.", - "username": "Brukernavn", - "email": "E-post", - "password": "Passord", - "confirmPassword": "Gjenta passord", - "usernamePlaceholder": "Brukernavn", - "emailPlaceholder": "E-post", - "passwordPlaceholder": "Passord (minst 6 tegn)", - "confirmPasswordPlaceholder": "Gjenta passord", - "selectOutfit": "Velg antrekket ditt", - "termsAccept": "Jeg er 18+ og godtar vilkårene og reglene for {hotel}.", - "createAccount": "Opprett konto", - "creatingAccount": "Oppretter konto ...", - "redirecting": "Videre til kontoen din...", - "alreadyHaveAccount": "Har du allerede en konto? Logg inn!", - "register": "Registrer deg", - "termsError": "Du må godta vilkårene og reglene for å registrere deg.", - "usernameError": "Brukernavn er påkrevd.", - "emailError": "Gyldig e-post er nødvendig.", - "passwordError": "Passordet må være på minst 6 tegn.", - "confirmPasswordError": "Passord stemmer ikke.", - "termsRequired": "Du må godta vilkårene og reglene.", - "usernameRequired": "Brukernavn er påkrevd.", - "emailRequired": "E-post er påkrevd.", - "passwordRequired": "Passord kreves.", - "passwordsDontMatch": "Passord stemmer ikke.", - "alreadyHaveAccountPre": "Har du allerede en konto?", - "alreadyHaveAccountLink": "Logg inn", - "whoIsOnline": "Hvem er online", - "usersOnline": "{count} online" - }, - "forgot": { - "title": "Tilbakestill passord", - "subtitle": "Vi sender deg en sikker lenke for å angi et nytt passord.", - "sentNotice": "Hvis den e-posten er registrert, har en tilbakestillingslenke blitt sendt. Sjekk innboksen din.", - "emailPlaceholder": "Din e-post", - "sendResetLink": "Send tilbakestillingslink", - "backToLogin": "Tilbake til innlogging", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Angi et nytt passord", - "subtitle": "Velg et sterkt passord du ikke bruker andre steder.", - "passwordPlaceholder": "Nytt passord (minst 6 tegn)", - "resetPassword": "Tilbakestill passord", - "backToLogin": "Tilbake til innlogging" - }, - "verify": { - "verifiedTitle": "Du er klar", - "verifiedSubtitle": "E-post bekreftet", - "verifiedBody": "E-postadressen din er bekreftet. Du kan nå logge inn og spille.", - "goToLogin": "Gå til pålogging", - "alreadyTitle": "Allerede bekreftet", - "alreadySubtitle": "Ingenting igjen å gjøre", - "alreadyBody": "Denne e-postadressen er allerede bekreftet.", - "unavailableTitle": "Prøv igjen snart", - "unavailableSubtitle": "Server utilgjengelig", - "unavailableBody": "Vi kunne ikke nå serveren for å bekrefte e-posten din. Prøv koblingen på nytt om et øyeblikk.", - "invalidTitle": "E-postbekreftelse", - "invalidSubtitle": "Ugyldig eller utløpt lenke", - "invalidBody": "Denne bekreftelseslenken er ikke gyldig. Sørg for at du åpnet hele lenken fra e-posten din, eller be om en ny.", - "backToLogin": "Tilbake til innlogging" - }, - "banned": { - "title": "Du er utestengt", - "subtitle": "Kontoen er suspendert", - "body": "Kontoen din er suspendert fra hotellet.", - "reasonLabel": "Årsak:", - "permanent": "Dette forbudet er permanent.", - "expires": "Utløper {date}.", - "contactStaff": "Hvis du mener dette er en feil, ta kontakt med personalet." - }, - "maintenance": { - "title": "{hotel} er under vedlikehold", - "subtitle": "Vi kommer snart tilbake", - "staffCanLogIn": "Personalet kan fortsatt logge inn." - }, - "admin": { - "nav": { - "overview": "Oversikt", - "dashboard": "Dashbord", - "content": "Innhold", - "articles": "Artikler", - "tags": "Tagger", - "navigator": "Navigator", - "helpCenter": "Hjelpesenter", - "advertisements": "Annonser", - "writeableBoxes": "Skrivbare bokser", - "photos": "Bilder", - "tickets": "Billetter", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Brukere og tilgang", - "users": "Brukere", - "bans": "Forbud", - "ipManagement": "IP-administrasjon", - "vpn": "VPN", - "applications": "Søknader", - "teams": "Lag", - "permissions": "Tillatelser", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Økonomi", - "catalog": "Katalog", - "shop": "Handle", - "transactions": "Transaksjoner", - "vouchers": "Bilag", - "subscriptions": "Abonnementer", - "rareValues": "Sjeldne verdier", - "badges": "Merker", - "achievements": "Prestasjoner", - "calendar": "Kalender", - "radio": "Radio", - "radioHistory": "Radiohistorie", - "radioBanners": "Bannere", - "radioEmbed": "Bygg inn", - "radioApiKeys": "API-nøkler", - "radioModeration": "Moderasjon", - "radioSettings": "Innstillinger", - "radioMonitoring": "Overvåking", - "radioPoints": "Poeng", - "radioRanks": "Rangerer", - "radioAutodj": "Auto DJ", - "system": "System", - "commandocentrum": "Kommandosenter", - "emulator": "Emulator", - "alerts": "Varsler", - "logs": "Logger", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Ordfilter", - "maintenance": "Vedlikehold", - "rooms": "Rom", - "emailTemplates": "E-postmaler", - "theme": "Tema", - "media": "Media", - "favicon": "Favorittikon", - "sounds": "Lyder", - "translations": "Oversettelser", - "import": "Importer", - "settings": "Innstillinger", - "backToSite": "Tilbake til nettstedet", - "housekeeping": "Rengjøring", - "hotelManagementPanel": "Hotellstyringspanel", - "rankLabel": "Rangering {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Dashbord", - "subtitle": "Hotelloversikt og livestatus", - "playersOnline": "Spillere online", - "articles": "Artikler", - "activeBans": "Aktive forbud", - "database": "Database", - "databaseConnected": "Tilkoblet", - "databaseDown": "Ned", - "usersByRank": "Brukere etter rangering", - "noAccountsToBreakDown": "Ingen kontoer å bryte ned ennå", - "rankLabel": "Rangering {rank}", - "rankWithCount": "Rangering {rank}: {count} kontoer", - "recentStaffActivity": "Nylig personalaktivitet", - "viewAll": "Se alle", - "noStaffActivityLogged": "Ingen personalaktivitet logget ennå" - }, - "articles": { - "title": "Artikler", - "subtitle": "Nyhetsartikler - 50 siste", - "newArticle": "+ Ny artikkel", - "edit": "Rediger", - "delete": "Slett", - "noArticles": "Ingen artikler ennå", - "confirmDelete": "Er du sikker på at du vil slette «{title}»?", - "colTitle": "Tittel", - "colSlug": "Snegl", - "colAuthor": "Forfatter", - "colCreated": "Opprettet", - "colActions": "Handlinger", - "form": { - "title": "Tittel", - "titlePlaceholder": "Artikkeltittel", - "slug": "Snegl", - "slugPlaceholder": "artikkel-url-slug", - "category": "Kategori", - "categoryPlaceholder": "Velg en kategori", - "body": "Kropp", - "bodyPlaceholder": "Skriv artikkelinnholdet ditt...", - "image": "Bilde", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Miniatyrbilde", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Publisert", - "featured": "Utvalgte", - "save": "Lagre artikkelen", - "saving": "Lagrer …", - "deleteArticle": "Slett artikkelen", - "deleteConfirm": "Denne handlingen kan ikke angres. Artikkelen vil bli fjernet permanent.", - "cancel": "Avbryt", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Tagger", - "subtitle": "Artikkelkoder / kategorier", - "addTag": "Legg til tag", - "name": "Navn", - "namePlaceholder": "Tag navn", - "backgroundColour": "Bakgrunnsfarge", - "createTag": "Opprett tag", - "editTag": "Rediger tag", - "updateTag": "Oppdater taggen", - "deleteTag": "Slett tag", - "confirmDelete": "Vil du slette «{name}»?", - "noTags": "Ingen tagger ennå", - "colId": "ID", - "colTag": "Tag", - "colColour": "Farge", - "colUsedBy": "Brukt av", - "colCreated": "Opprettet", - "colActions": "Handlinger" - }, - "navigation": { - "title": "Navigator", - "flatCategories": "Flate kategorier", - "publicRooms": "Offentlige rom", - "addCategory": "Legg til kategori", - "editCategory": "Rediger kategori", - "deleteCategory": "Slett kategori", - "categoryName": "Kategorinavn", - "categoryNamePlaceholder": "f.eks. Chill & Chat", - "categoryOrder": "Bestill", - "roomName": "Romnavn", - "roomNamePlaceholder": "f.eks. Velkommen Lounge", - "roomId": "Rom ID", - "roomIdPlaceholder": "Numerisk rom-ID", - "save": "Lagre", - "cancel": "Avbryt", - "noCategories": "Ingen kategorier ennå", - "noPublicRooms": "Ingen offentlige rom ennå", - "colId": "ID", - "colName": "Navn", - "colOrder": "Bestill", - "colRooms": "Rom", - "colActions": "Handlinger" - }, - "helpCenter": { - "title": "Hjelpesenter", - "subtitle": "Støtteoppføringer og FAQ-administrasjon", - "entries": "Oppføringer", - "newEntry": "+ Ny oppføring", - "edit": "Rediger", - "delete": "Slett", - "noEntries": "Ingen oppføringer ennå", - "confirmDelete": "Vil du slette «{title}»?", - "colId": "ID", - "colTitle": "Tittel", - "colCategory": "Kategori", - "colCreated": "Opprettet", - "colActions": "Handlinger", - "form": { - "title": "Tittel", - "titlePlaceholder": "Oppføringstittel", - "category": "Kategori", - "categoryPlaceholder": "Velg kategori", - "body": "Kropp", - "bodyPlaceholder": "Skriv svaret...", - "save": "Lagre oppføringen", - "saving": "Lagrer …", - "deleteEntry": "Slett oppføring", - "cancel": "Avbryt" - } - }, - "ads": { - "title": "Annonser", - "subtitle": "Administrer hotellannonser og reklamebannere", - "newAd": "+ Ny annonse", - "edit": "Rediger", - "delete": "Slett", - "noAds": "Ingen annonser ennå", - "confirmDelete": "Vil du slette denne annonsen?", - "colId": "ID", - "colName": "Navn", - "colImage": "Bilde", - "colUrl": "URL", - "colViews": "Visninger", - "colStatus": "Status", - "colCreated": "Opprettet", - "colActions": "Handlinger", - "form": { - "name": "Navn", - "namePlaceholder": "Annonsenavn", - "image": "Bilde-URL", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Mål-URL", - "urlPlaceholder": "https://example.com", - "enabled": "Aktivert", - "save": "Lagre annonsen", - "saving": "Lagrer …", - "deleteAd": "Slett annonse", - "cancel": "Avbryt" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Skrivbare bokser", - "subtitle": "Innholdspaneler vist på tvers av hotellet og CMS", - "newBox": "Ny boks", - "edit": "Rediger", - "delete": "Slett", - "noBoxes": "Ingen skrivbare bokser ennå", - "confirmDelete": "Vil du slette denne boksen?", - "colId": "ID", - "colName": "Navn", - "colLocation": "Beliggenhet", - "colUpdated": "Oppdatert", - "colActions": "Handlinger", - "form": { - "name": "Navn", - "namePlaceholder": "Boksnavn", - "location": "Beliggenhet", - "locationPlaceholder": "f.eks. hjemmeside, sidefelt", - "content": "Innhold", - "contentPlaceholder": "Skriv innholdet i boksen...", - "enabled": "Aktivert", - "save": "Lagre boks", - "saving": "Lagrer …", - "deleteBox": "Slett boks", - "cancel": "Avbryt" - } - }, - "photos": { - "title": "Fotomoderering", - "subtitle": "Nylige kamerabilder i spillet", - "delete": "Slett", - "approve": "Godkjenne", - "noPhotos": "Ingen bilder å moderere", - "confirmDelete": "Vil du slette dette bildet permanent?", - "colId": "ID", - "colPreview": "Forhåndsvisning", - "colUser": "Bruker", - "colRoom": "Rom", - "colTimestamp": "Tidsstempel", - "colActions": "Handlinger", - "photoAlt": "Brukerbilde nr. {id}", - "byUser": "av {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Brukere", - "subtitle": "Bla gjennom, søk og administrer hotellkontoer", - "search": "Søk", - "searchPlaceholder": "Søk etter brukernavn, e-post eller ID...", - "searchResults": "{count, plural, one {# result} other {# results}} for \"{query}\"", - "noResults": "Ingen brukere funnet", - "colId": "ID", - "colUsername": "Brukernavn", - "colEmail": "E-post", - "colRank": "Rangering", - "colOnline": "Online", - "colRegistered": "Registrert", - "colLastOnline": "Sist online", - "colActions": "Handlinger", - "yes": "Ja", - "no": "Nei", - "edit": "Rediger", - "setRank": "Sett rangering", - "disconnect": "Koble fra", - "alert": "Varsel", - "ban": "Forbud", - "detail": { - "title": "Bruker: {username}", - "subtitle": "Kontodetaljer og administrasjon", - "overview": "Oversikt", - "actions": "Handlinger", - "username": "Brukernavn", - "email": "E-post", - "motto": "Motto", - "rank": "Rangering", - "credits": "Studiepoeng", - "duckets": "Duckets", - "diamonds": "Diamanter", - "online": "Online", - "registered": "Registrert", - "lastOnline": "Sist online", - "ipAddress": "IP-adresse", - "machineId": "Maskin-ID", - "sendAlert": "Send varsel", - "sendMessage": "Send melding", - "disconnectUser": "Koble fra bruker", - "banUser": "Ban bruker", - "resetPassword": "Tilbakestill passord", - "deleteUser": "Slett bruker", - "confirmDelete": "Er du sikker på at du vil slette {username}? Dette kan ikke angres.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Rediger bruker: {username}", - "subtitle": "Endre kontodetaljer", - "username": "Brukernavn", - "usernamePlaceholder": "Brukernavn", - "email": "E-post", - "emailPlaceholder": "bruker@eksempel.com", - "motto": "Motto", - "mottoPlaceholder": "Brukermotto", - "rank": "Rangering", - "credits": "Studiepoeng", - "duckets": "Duckets", - "diamonds": "Diamanter", - "save": "Lagre endringer", - "saving": "Lagrer …", - "cancel": "Avbryt" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Forbud", - "subtitle": "Administrer konto-, IP- og maskinforbud", - "newBan": "Nytt forbud", - "edit": "Rediger", - "delete": "Slett", - "noBans": "Ingen forbud ennå", - "confirmDelete": "Vil du fjerne dette forbudet?", - "colId": "ID", - "colValue": "Verdi", - "colType": "Type", - "colReason": "Grunn", - "colBannedBy": "Utestengt av", - "colExpires": "Utløper", - "colCreated": "Opprettet", - "colActions": "Handlinger", - "form": { - "value": "Verdi", - "valuePlaceholder": "Brukernavn, IP eller maskin-ID", - "type": "Type", - "typeUser": "Bruker", - "typeIp": "IP", - "typeMachine": "Maskin", - "reason": "Grunn", - "reasonPlaceholder": "Ban grunn", - "expiresAt": "Utløper kl", - "permanent": "Permanent", - "save": "Lagre forbud", - "saving": "Lagrer …", - "cancel": "Avbryt" - } - }, - "ip": { - "title": "IP-administrasjon", - "subtitle": "Administrer IP-hviteliste og svarteliste", - "whitelist": "Hviteliste", - "blacklist": "Svarteliste", - "addIp": "Legg til IP", - "ipAddress": "IP-adresse", - "ipAddressPlaceholder": "f.eks. 127.0.0.1", - "reason": "Grunn", - "reasonPlaceholder": "Årsak til oppføring", - "add": "Legg til", - "remove": "Fjern", - "confirmRemove": "Vil du fjerne denne IP-en fra {list}?", - "noWhitelistedIps": "Ingen hvitelistede IP-er", - "noBlacklistedIps": "Ingen svartelistede IP-er", - "colIp": "IP", - "colReason": "Grunn", - "colAdded": "Lagt til", - "colActions": "Handlinger" - }, - "vpn": { - "title": "VPN / proxy-deteksjon", - "subtitle": "Konfigurer VPN- og proxy-deteksjonsinnstillinger", - "enabled": "Aktivert", - "apiKey": "API-nøkkel", - "apiKeyPlaceholder": "Din VPN-deteksjons-API-nøkkel", - "apiKeyHint": "La stå tomt for å deaktivere", - "blockOnDetect": "Blokker ved deteksjon", - "blockOnDetectHint": "Blokkér automatisk brukere som oppdages bak en VPN eller proxy", - "save": "Lagre innstillinger", - "saving": "Lagrer …", - "settingsSaved": "VPN-innstillingene er lagret" - }, - "applications": { - "title": "Personalsøknader", - "subtitle": "Ventende og vurderte personalsøknader", - "pending": "Venter", - "approved": "Godkjent", - "rejected": "Avvist", - "noApplications": "Ingen søknader ennå", - "colId": "ID", - "colApplicant": "Søker", - "colPosition": "Posisjon", - "colStatus": "Status", - "colSubmitted": "Sendt inn", - "colActions": "Handlinger", - "review": "Gjennomgå", - "approve": "Godkjenne", - "reject": "Avvis", - "confirmApprove": "Godkjenne {username} for {position}?", - "confirmReject": "Vil du avslå {username} sin søknad om {position}?", - "detail": { - "title": "Søknad fra {username}", - "subtitle": "For {position}", - "about": "Om søkeren", - "message": "Søknadsmelding", - "status": "Status", - "submitted": "Sendt inn", - "noMessage": "Ingen melding oppgitt" - } - }, - "teams": { - "title": "Lag", - "subtitle": "Definer personalrangeringsnavn og beskrivelser", - "addRank": "Legg til rangering", - "editRank": "Rediger rangering", - "deleteRank": "Slett rangering", - "noTeams": "Ingen rangeringsdefinisjoner ennå", - "confirmDelete": "Vil du slette definisjonen av rangering {id}?", - "colId": "ID", - "colRank": "Rangering", - "colName": "Navn", - "colBadge": "Merke", - "colColour": "Farge", - "colActions": "Handlinger", - "form": { - "rankId": "Rangerings-ID", - "rankIdPlaceholder": "Numerisk rangerings-ID", - "name": "Navn", - "namePlaceholder": "f.eks. Administrator", - "badge": "Merkekode", - "badgePlaceholder": "f.eks. ADM001", - "colour": "Farge", - "colourPlaceholder": "f.eks. #ff0000", - "save": "Lagre teamdefinisjon", - "saving": "Lagrer …", - "cancel": "Avbryt" - } - }, - "permissions": { - "title": "Tillatelser", - "subtitle": "Administrer rangeringsbaserte tillatelser for administrasjonspanelet", - "addPermission": "Legg til tillatelse", - "editPermission": "Rediger tillatelse", - "deletePermission": "Slett tillatelse", - "noPermissions": "Ingen tillatelser er konfigurert ennå", - "confirmDelete": "Vil du slette denne tillatelsen?", - "colId": "ID", - "colRank": "Rangering", - "colPermission": "Tillatelse", - "colCreated": "Opprettet", - "colActions": "Handlinger", - "form": { - "rankId": "Rangerings-ID", - "rankIdPlaceholder": "Minimumsrangering kreves", - "permission": "Tillatelsesnøkkel", - "permissionPlaceholder": "f.eks. admin.articles.manage", - "save": "Lagre tillatelsen", - "saving": "Lagrer …", - "cancel": "Avbryt" - } - }, - "catalog": { - "title": "Katalog", - "subtitle": "Bla gjennom og administrer katalogsider og elementer", - "pages": "Sider", - "items": "Varer", - "addPage": "Legg til side", - "editPage": "Rediger side", - "deletePage": "Slett siden", - "addItem": "Legg til element", - "editItem": "Rediger element", - "deleteItem": "Slett element", - "noPages": "Ingen katalogsider ennå", - "noItems": "Ingen elementer på denne siden", - "confirmDeletePage": "Vil du slette katalogsiden «{name}»?", - "confirmDeleteItem": "Vil du slette dette elementet?", - "colId": "ID", - "colName": "Navn", - "colIcon": "Ikon", - "colOrder": "Bestill", - "colItems": "Varer", - "colEnabled": "Aktivert", - "colActions": "Handlinger", - "colItemId": "Vare-ID", - "colItemName": "Varenavn", - "colCostCredits": "Kostnad (kreditter)", - "colCostPoints": "Kostnad (poeng)", - "colLimited": "Begrenset", - "pageForm": { - "name": "Navn", - "namePlaceholder": "Sidenavn", - "icon": "Ikon ID", - "iconPlaceholder": "Numerisk ikon-ID", - "order": "Bestill", - "enabled": "Aktivert", - "parent": "Overordnet side", - "parentNone": "Ingen (root)", - "save": "Lagre siden", - "saving": "Lagrer …", - "cancel": "Avbryt" - }, - "itemForm": { - "itemId": "Vare-ID", - "itemName": "Varenavn", - "costCredits": "Kostnad i studiepoeng", - "costDuckets": "Kostnad i duckets", - "costDiamonds": "Kostnad i diamanter", - "limitedStack": "Begrenset stabelstørrelse", - "limitedSold": "Begrenset solgt", - "save": "Lagre element", - "saving": "Lagrer …", - "cancel": "Avbryt" - }, - "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." - } - }, - "shop": { - "title": "Handle", - "subtitle": "Administrere pakker og bestillinger", - "packages": "Pakker", - "orders": "Bestillinger", - "newPackage": "+ Ny pakke", - "edit": "Rediger", - "delete": "Slett", - "viewOrder": "Visning", - "noPackages": "Ingen butikkpakker ennå", - "noOrders": "Ingen bestillinger ennå", - "confirmDelete": "Vil du slette denne pakken?", - "colId": "ID", - "colName": "Navn", - "colPrice": "Pris", - "colCurrency": "Valuta", - "colType": "Type", - "colSold": "Solgt", - "colEnabled": "Aktivert", - "colActions": "Handlinger", - "colOrderId": "Bestillings-ID", - "colCustomer": "Kunde", - "colPackage": "Pakke", - "colAmount": "Beløp", - "colStatus": "Status", - "colDate": "Dato", - "statusPending": "Venter", - "statusCompleted": "Fullført", - "statusRefunded": "Refundert", - "form": { - "name": "Navn", - "namePlaceholder": "Pakkenavn", - "description": "Beskrivelse", - "descriptionPlaceholder": "Pakkebeskrivelse", - "price": "Pris", - "currency": "Valuta", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Type", - "typeCredits": "Studiepoeng", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamanter", - "typeBadge": "Merke", - "typeFurni": "Møbler", - "typeRank": "Rangering", - "amount": "Beløp", - "badgeCode": "Merkekode", - "badgeCodePlaceholder": "f.eks. VIP001", - "rankId": "Rangerings-ID", - "furniItems": "Møbelartikler", - "enabled": "Aktivert", - "save": "Lagre pakken", - "saving": "Lagrer …", - "cancel": "Avbryt" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Transaksjoner", - "subtitle": "PayPal betalingslogg", - "noTransactions": "Ingen transaksjoner ennå", - "colId": "ID", - "colUser": "Bruker", - "colAmount": "Beløp", - "colCurrency": "Valuta", - "colPackage": "Pakke", - "colStatus": "Status", - "colDate": "Dato", - "colActions": "Handlinger", - "statusCompleted": "Fullført", - "statusPending": "Venter", - "statusFailed": "Mislyktes", - "statusRefunded": "Refundert", - "detail": { - "title": "Transaksjon nr. {id}", - "paypalId": "PayPal ID", - "payerEmail": "Betalers e-post", - "grossAmount": "Bruttobeløp", - "fee": "Gebyr", - "netAmount": "Netto beløp" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Butikkkuponger", - "subtitle": "Administrer innløselige kupongkoder", - "newVoucher": "+ Ny kupong", - "edit": "Rediger", - "delete": "Slett", - "noVouchers": "Ingen kuponger ennå", - "confirmDelete": "Vil du slette kupongen \"{code}\"?", - "colId": "ID", - "colCode": "Kode", - "colValue": "Verdi", - "colType": "Type", - "colUses": "Bruker / Maks", - "colExpires": "Utløper", - "colCreated": "Opprettet", - "colActions": "Handlinger", - "form": { - "code": "Kode", - "codePlaceholder": "f.eks. SOMMER 2025", - "value": "Verdi", - "type": "Type", - "typeCredits": "Studiepoeng", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamanter", - "typeBadge": "Merke", - "typeFurni": "Møbler", - "typeRank": "Rangering", - "badgeCode": "Merkekode", - "badgeCodePlaceholder": "f.eks. VIP001", - "rankId": "Rangerings-ID", - "maxUses": "Max bruker", - "maxUsesPlaceholder": "0 = ubegrenset", - "expiresAt": "Utløper kl", - "enabled": "Aktivert", - "save": "Lagre kupong", - "saving": "Lagrer …", - "cancel": "Avbryt", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Abonnementer", - "subtitle": "Aktive gjentakende abonnementer", - "noSubscriptions": "Ingen aktive abonnementer", - "cancel": "Avbryt", - "confirmCancel": "Vil du avslutte abonnementet på {username}?", - "colId": "ID", - "colUser": "Bruker", - "colPackage": "Pakke", - "colAmount": "Beløp", - "colInterval": "Intervall", - "colStarted": "Startet", - "colNextBilling": "Neste fakturering", - "colStatus": "Status", - "colActions": "Handlinger", - "statusActive": "Aktiv", - "statusCancelled": "Kansellert", - "statusExpired": "Utløpt" - }, - "rareValues": { - "title": "Sjeldne verdier", - "subtitle": "Administrer sjeldne verdikategorier og varepriser", - "categories": "Kategorier", - "items": "Varer", - "addCategory": "Legg til kategori", - "editCategory": "Rediger kategori", - "deleteCategory": "Slett kategori", - "noCategories": "Ingen sjeldne verdikategorier ennå", - "confirmDeleteCategory": "Vil du slette kategorien «{name}» og alle dens elementer?", - "colId": "ID", - "colName": "Navn", - "colItems": "Varer", - "colUpdated": "Oppdatert", - "colActions": "Handlinger", - "colItemName": "Varenavn", - "colCredits": "Studiepoeng", - "colPoints": "Poeng", - "colPointType": "Punkttype", - "categoryForm": { - "name": "Navn", - "namePlaceholder": "Kategorinavn", - "save": "Lagre kategori", - "saving": "Lagrer …", - "cancel": "Avbryt" - }, - "itemForm": { - "itemName": "Varenavn", - "itemNamePlaceholder": "f.eks. Throne", - "credits": "Kredittverdi", - "points": "Poengverdi", - "pointType": "Punkttype", - "pointTypeDuckets": "Duckets", - "pointTypeDiamonds": "Diamanter", - "save": "Lagre element", - "saving": "Lagrer …", - "cancel": "Avbryt" - } - }, - "badges": { - "title": "Merker", - "subtitle": "Last opp, gi og administrer merkekatalog", - "upload": "Last opp", - "giveBadge": "Gi merke", - "catalogue": "Katalog", - "uploadTitle": "Last opp et nytt merke", - "uploadSubtitle": "Last opp en merkebildefil", - "badgeCode": "Merkekode", - "badgeCodePlaceholder": "f.eks. VIP001", - "badgeFile": "Merkefil", - "badgeFileHint": "PNG eller GIF, anbefalt 40x40", - "uploadButton": "Last opp", - "uploading": "Laster opp …", - "giveTitle": "Gi merket til brukeren", - "giveSubtitle": "Gi et merke til en bestemt bruker", - "username": "Brukernavn", - "usernamePlaceholder": "Målbrukernavn", - "giveButton": "Gi merke", - "giving": "Å gi …", - "catalogueTitle": "Merkekatalog", - "catalogueSubtitle": "Alle tilgjengelige merker på hotellet", - "noBadges": "Ingen merker i katalogen", - "search": "Søk merker", - "searchPlaceholder": "Søk etter kode eller navn...", - "colCode": "Kode", - "colImage": "Bilde", - "colName": "Navn", - "colDescription": "Beskrivelse", - "colActions": "Handlinger" - }, - "achievements": { - "title": "Prestasjoner", - "subtitle": "Skrivebeskyttet liste over prestasjoner i spillet", - "noAchievements": "Ingen prestasjoner er konfigurert", - "colId": "ID", - "colName": "Navn", - "colCategory": "Kategori", - "colLevels": "Nivåer", - "colReward": "Belønning", - "colProgress": "Fremgang", - "levelLabel": "Nivå {level}", - "rewardCredits": "{count} studiepoeng", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Kalenderkampanjer", - "subtitle": "Skrivebeskyttet liste over kalenderkampanjer og hendelser", - "noCampaigns": "Ingen kalenderkampanjer ennå", - "colId": "ID", - "colName": "Navn", - "colStart": "Start", - "colEnd": "Slutt", - "colType": "Type", - "colReward": "Belønning", - "colActions": "Handlinger", - "detail": { - "title": "Kampanje: {name}", - "subtitle": "Kalenderbegivenhetsdetaljer", - "days": "Dager", - "dayLabel": "Dag {day}", - "reward": "Belønning", - "noDays": "Ingen dager er konfigurert for denne kampanjen" - } - }, - "radio": { - "title": "Radiomoderasjon", - "subtitle": "Siste rop, DJ-applikasjoner og program på lufta (25 siste av hver).", - "moderation": "Moderasjon", - "shouts": "Roper", - "applications": "Søknader", - "schedules": "Tidsplaner", - "settings": "Innstillinger", - "embed": "Bygg inn", - "ranks": "Rangerer", - "history": "Historie", - "apiKeys": "API-nøkler", - "points": "Poeng", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Radioovervåking", - "subtitle": "Skrivebeskyttet direkte sonde for de konfigurerte radioendepunktene (radio_now_playing_api_url, radio_listeners_api_url). Hver forespørsel mislykkes myk med en {timeout}s timeout – ingen data skrives. Konfigurer URL-er under Innstillinger.", - "stream": "Strøm", - "online": "Online", - "offline": "Frakoblet", - "notConfigured": "Ikke konfigurert", - "nowPlaying": "Spiller nå", - "nowPlayingApi": "Nå-spiller API", - "listenersApi": "Listeners API", - "listeners": "Lyttere", - "currentSong": "Gjeldende sang", - "bitrate": "Bitrate", - "status": "Status", - "noNowPlayingHint": "ingen API-sett som nå spilles", - "noListenersHint": "ingen lyttere API satt", - "endpointDiagnostics": "Endepunktdiagnostikk", - "diagnosticsLegend": "OK: tilgjengelig · WARN: ikke konfigurert · ERROR: forespørselen mislyktes eller fikk tidsavbrudd.", - "streamUrl": "Strøm URL", - "unreachable": "uoppnåelig", - "refresh": "Oppdater" - }, - "user": "Bruker", - "message": "Melding", - "posted": "Lagt ut", - "realName": "Ekte navn", - "age": "Alder", - "style": "Stil", - "applied": "Påført", - "day": "dag", - "start": "Start", - "end": "Slutt", - "show": "Vis", - "status": "Status", - "active": "aktive", - "inactive": "inaktiv", - "hidden": "skjult", - "activeSchedules": "Aktive tidsplaner", - "noShouts": "Ingen rop for å moderere", - "noApplications": "Ingen søknader sendt inn.", - "noSchedules": "Ingen tidsplaner er konfigurert.", - "deleteShout": "Slett", - "confirmDeleteShout": "Vil du slette dette ropet?", - "pendingApplications": "Ventende søknader", - "settingsForm": { - "title": "Radioinnstillinger", - "subtitle": "Redigeringer skriver til website_settings (radio_*-taster) og bryter cachen for kjøretidsinnstillinger. Boolske brukere bruker 0/1.", - "enabled": "Aktivert", - "disabled": "Deaktivert", - "totalKeys": "Totalt nøkler", - "configured": "Konfigurert", - "curatedHint": "kurerte nøkler med en verdi", - "customKeys": "Egendefinerte nøkler", - "saveAll": "Lagre alle", - "singleKey": "Legg til / overskriv en enkelt nøkkel", - "keyPlaceholder": "radio_tilpasset_nøkkel", - "valuePlaceholder": "verdi", - "commentPlaceholder": "kommentar (valgfritt)", - "saveSingle": "Lagre", - "otherSettings": "Andre radioinnstillinger", - "dbError": "Kunne ikke laste inn innstillinger (database utilgjengelig). Standarder vil bli opprettet ved lagring." - }, - "embedPage": { - "title": "Radio Embed", - "subtitle": "Kopiklar innbyggingskode for direktesendingen. Skrivebeskyttet - ingenting her skriver til databasen. Konfigurer strømnettadressen i Radioinnstillinger (radio_stream_url).", - "streamUrl": "Strøm URL", - "configured": "Konfigurert", - "missing": "Mangler", - "radioName": "Radionavn", - "nowPlayingApi": "Nå-spiller API", - "set": "Sett", - "notSet": "Ikke satt", - "noStreamUrl": "Ingen strømnettadresse er konfigurert", - "noStreamUrlText": "Det er ingen radio_stream_url satt, så det er ingenting å bygge inn ennå.", - "goToSettings": "Gå til Radioinnstillinger", - "livePreview": "Live forhåndsvisning", - "livePreviewText": "Dette er den nakne audio-spilleren slik besøkende vil se den. Trykk på play for å bekrefte at strømmen er tilgjengelig.", - "source": "Kilde", - "audioSnippet": "Utdrag av lydspiller", - "audioSnippetDesc": "Drop-in HTML5-lydspiller pekte rett på strømmen. Fungerer overalt hvor vanlig HTML er tillatt.", - "iframeSnippet": "Iframe-omslagskodebit", - "iframeSnippetDesc": "Bygger inn nettstedets egen radiospillerside i en iframe – beholder stylingen og informasjonen som spilles nå. Juster bredde/høyde etter smak.", - "audioUnsupported": "Nettleseren din støtter ikke lydelementet." - }, - "banners": { - "title": "Bannere", - "heading": "Radiobannere", - "description": "Kampanjebannere vist på radiosiden, sortert etter sorteringsrekkefølge.", - "addBanner": "Legg til banner", - "createBanner": "Lag banner", - "deleteBanner": "Slett banner", - "noBanners": "Ingen bannere ennå – legg til en ovenfor.", - "existing": "Eksisterende bannere ({count})", - "save": "Lagre", - "delete": "Slett", - "byUser": "av bruker {id}", - "active": "aktive", - "hidden": "skjult", - "bannerAlt": "Radio banner", - "statusActive": "Aktiv", - "statusHidden": "Skjult", - "dbError": "Kunne ikke laste inn bannere (database utilgjengelig).", - "form": { - "imagePath": "Bildebane / URL", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Tittel", - "description": "Beskrivelse", - "sortOrder": "Sorteringsrekkefølge", - "active": "Aktiv" - } - }, - "ranksForm": { - "title": "Radio rangerer", - "subtitle": "DJ / stab-rangeringer kan tildeles på radioapplikasjoner.", - "dbError": "Kunne ikke laste inn rangeringer (database utilgjengelig).", - "active": "Aktiv", - "addRank": "Legg til rangering", - "name": "Navn", - "badgeCode": "Merkekode", - "description": "Beskrivelse", - "createRank": "Opprett rangering", - "existing": "Eksisterende rangeringer ({count})", - "noRanks": "Ingen rangeringer ennå - legg til en ovenfor.", - "activeLabel": "aktive", - "inactiveLabel": "inaktiv", - "save": "Lagre", - "deleteRank": "Slett rangering #{id}" - }, - "historyPage": { - "title": "Radiospillhistorie", - "subtitle": "Tidligere DJ-show og sendetid (radio_historie), siste først. Skrivebeskyttet logg over hvem som var på lufta, når og hvor mange lyttere som stilte inn.", - "dbError": "Kunne ikke laste inn radiohistorikk (database utilgjengelig).", - "showsLogged": "Viser logget", - "onAirNow": "På lufta nå", - "uniqueDjs": "Unike DJ-er", - "peakListeners": "Topplyttere", - "empty": "Ingen radiohistorikk registrert ennå.", - "showLog": "Vis logg ({count})", - "colDj": "DJ", - "colShow": "Vis", - "colStarted": "Startet", - "colEnded": "Avsluttet", - "colAirtime": "Sendetid", - "colListeners": "Lyttere", - "colNotes": "Notater", - "onAir": "på lufta" - }, - "apiKeysForm": { - "title": "Radio API-nøkler", - "subtitle": "API-nøkler for eksterne radiointegrasjoner (radio_api_keys). Nøkler genereres på serversiden og vises maskert - kopier hele verdien fra databasen når de utstedes.", - "dbError": "Kunne ikke laste inn API-nøkler (database utilgjengelig).", - "totalKeys": "Totalt nøkler", - "active": "Aktiv", - "inactive": "Inaktiv", - "generateKey": "Generer nøkkel", - "generateHint": "Den hemmelige nøkkelen genereres automatisk med kryptografisk tilfeldighet - du skriver den ikke inn.", - "name": "Navn", - "namePlaceholder": "AzureCast-broen", - "rateLimit": "Takstgrense (forespørsler/min)", - "allowedIps": "Tillatte IP-er (valgfritt)", - "allowedIpsPlaceholder": "kommadelt, blank = hvilken som helst", - "generate": "Generer nøkkel", - "existingKeys": "Eksisterende nøkler ({count})", - "noKeys": "Ingen API-nøkler ennå - generer en ovenfor.", - "colName": "Navn", - "colKey": "Nøkkel", - "colAllowedIps": "Tillatte IP-er", - "colRateLimit": "Satsgrense", - "colLastUsed": "Sist brukt", - "colExpires": "Utløper", - "colStatus": "Status", - "colActions": "Handlinger", - "maskedHint": "Bare de første 8 tegnene vises", - "any": "noen", - "activeLabel": "aktive", - "inactiveLabel": "inaktiv", - "deactivate": "Deaktiver", - "activate": "Aktiver", - "delete": "Slett" - }, - "pointsForm": { - "title": "Radiolytterpoeng", - "subtitle": "Belønn lyttere med valuta for tid brukt på radio. Redigeringer skriver til website_settings (radio_points_*-taster) og bryter hurtigbufferen for kjøretidsinnstillinger. Boolske brukere bruker 0/1.", - "saved": "Lagret", - "points": "Poeng", - "enabled": "Aktivert", - "disabled": "Deaktivert", - "perMinute": "Per minutt", - "paidIn": "betalt i {currency}", - "maxPerDay": "Maks / dag", - "unlimited": "Ubegrenset", - "minListeners": "Min lyttere", - "settings": "Innstillinger", - "pointsEnabled": "Poeng aktivert", - "pointsEnabledHint": "Hovedbryter for tildeling av lytterpoeng.", - "currency": "Valuta", - "currencyHint": "Hvilken lommebok poengene betales inn i.", - "pointsPerMinute": "Poeng per minutt", - "pointsPerMinuteHint": "Beløp tildelt for hvert hele minutt med lytting.", - "maxPerDayHint": "Daglig tak per bruker. Bruk 0 for ubegrenset.", - "minListenersHint": "Poeng tildeles kun når minst så mange personer er innstilt.", - "save": "Lagre poenginnstillinger" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Reservespilleliste (radio_auto_dj_playlist) radioen roterer gjennom når ingen live DJ strømmer. Sortert etter sorteringsrekkefølge og deretter tittel.", - "dbError": "Kunne ikke laste AutoDJ-spillelisten (database utilgjengelig).", - "tracks": "Spor", - "active": "Aktiv", - "inactive": "Inaktiv", - "addTrack": "Legg til spor", - "titlePlaceholder": "Sportittel", - "artist": "Kunstner", - "album": "Album", - "artworkUrl": "Artwork URL", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Varighet (sekunder)", - "durationPlaceholder": "f.eks. 215", - "sortOrder": "Sorteringsrekkefølge", - "playlist": "Spilleliste ({count})", - "noTracks": "Ingen AutoDJ-spor ennå – legg til et ovenfor.", - "colOrder": "Bestill", - "colTitle": "Tittel", - "colArtist": "Kunstner", - "colAlbum": "Album", - "colDuration": "Varighet", - "colPlays": "Spiller", - "colLastPlayed": "Sist spilt", - "colStatus": "Status", - "colActions": "Handlinger", - "activeLabel": "aktive", - "inactiveLabel": "inaktiv", - "deactivate": "Deaktiver", - "activate": "Aktiver", - "delete": "Slett", - "trackTitle": "Tittel" - }, - "moderationPage": { - "title": "DJ-moderasjon", - "subtitle": "Se gjennom og fjern radiorop (50 nyeste).", - "recentShouts": "Nylige rop ({count})" - } - }, - "commandocentrum": { - "title": "Kommandosenter", - "subtitle": "Diagnostikk, RCON-kontroller og brukeradministrasjon", - "diagnostics": "Diagnostikk", - "rcon": "RCON", - "userActions": "Brukerhandlinger", - "diagnosticsTitle": "Emulatordiagnostikk", - "memoryUsage": "Minnebruk", - "uptime": "Oppetid", - "onlineUsers": "Online brukere", - "roomsLoaded": "Rom lastet", - "refresh": "Oppdater", - "rconTitle": "RCON-kommandoer", - "rconPlaceholder": "Skriv inn RCON-kommando...", - "rconSend": "Send", - "rconSending": "Sender …", - "rconResponse": "Svar", - "userActionsTitle": "Brukerhandlinger", - "username": "Brukernavn", - "usernamePlaceholder": "Målbrukernavn", - "action": "Handling", - "execute": "Utfør", - "actions": { - "disconnect": "Koble fra", - "alert": "Send varsel", - "giveCredits": "Gi studiepoeng", - "giveBadge": "Gi merke", - "givePoints": "Gi poeng", - "ban": "Forbud", - "kick": "Kick" - }, - "messagePlaceholder": "Melding (for varsler)...", - "amountPlaceholder": "Beløp …", - "badgePlaceholder": "Merkekode …" - }, - "emulator": { - "title": "Emulatorkonfig", - "subtitle": "Se og rediger emulatorinnstillinger og lokale tekster", - "settings": "Innstillinger", - "texts": "Tekster", - "search": "Søk", - "searchPlaceholder": "Søk nøkler...", - "noSettings": "Ingen innstillinger funnet", - "noTexts": "Ingen tekster funnet", - "edit": "Rediger", - "save": "Lagre", - "saving": "Lagrer …", - "cancel": "Avbryt", - "colKey": "Nøkkel", - "colValue": "Verdi", - "colType": "Type", - "colActions": "Handlinger", - "editDialog": { - "title": "Rediger: {key}", - "value": "Verdi", - "valuePlaceholder": "Skriv inn verdi …", - "save": "Lagre endringer", - "cancel": "Avbryt" - } - }, - "alerts": { - "title": "Varsler", - "subtitle": "Send varsler for hele hotellet og se nylige varsler", - "sendAlert": "Send hotellvarsel", - "recentAlerts": "Nylige varsler ({count})", - "noRecentAlerts": "Ingen nylige varsler", - "form": { - "title": "Varseltittel", - "titlePlaceholder": "f.eks. Servervedlikehold på 10 minutter", - "message": "Varslingsmelding", - "messagePlaceholder": "Skriv varselmeldingen...", - "type": "Type", - "typeHotel": "Alarm over hele hotellet", - "typeStaff": "Kun personale", - "urgent": "Haster", - "send": "Send varsel", - "sending": "Sender …", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Tittel", - "colSentBy": "Sendt av", - "colType": "Type", - "colDate": "Dato", - "colActions": "Handlinger", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Personalets aktiviteter", - "subtitle": "Revisjonsspor for ansattes handlinger i administrasjonspanelet", - "noLogs": "Ingen personalaktivitet logget ennå", - "colId": "ID", - "colUser": "Bruker", - "colAction": "Handling", - "colTarget": "Mål", - "colDescription": "Beskrivelse", - "colIp": "IP", - "colTimestamp": "Tidsstempel", - "filterByUser": "Filtrer etter bruker...", - "filterByAction": "Filtrer etter handling...", - "clearFilters": "Tøm filtre", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Ordfilter", - "subtitle": "Administrer filtrerte ord og uttrykk på hotellet", - "addWord": "Legg til ord", - "addWords": "Legg til ord", - "noWords": "Ingen filtrerte ord ennå", - "confirmDelete": "Vil du fjerne «{word}» fra filteret?", - "colId": "ID", - "colWord": "Word", - "colAddedBy": "Lagt til av", - "colCreated": "Opprettet", - "colActions": "Handlinger", - "form": { - "word": "Word", - "wordPlaceholder": "f.eks. dårlig ord", - "addMore": "Legg til flere ord (ett per linje)", - "save": "Legg til filter", - "saving": "Lagrer …", - "cancel": "Avbryt" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Vedlikeholdsmodus", - "subtitle": "Aktiver eller deaktiver vedlikehold for hele hotellet", - "enabled": "Vedlikeholdsmodus er aktivert", - "disabled": "Vedlikeholdsmodus er deaktivert", - "enable": "Aktiver vedlikehold", - "disable": "Deaktiver vedlikehold", - "message": "Vedlikeholdsmelding", - "messagePlaceholder": "Vi kommer snart tilbake!", - "staffAccess": "Gi personalet tilgang under vedlikehold", - "save": "Lagre innstillinger", - "saving": "Lagrer …", - "confirmEnable": "Aktivering av vedlikehold vil hindre alle ikke-ansatte brukere fra å få tilgang til hotellet. Fortsette?", - "confirmDisable": "Deaktivere vedlikeholdsmodus og gjenopprette tilgang for alle brukere?" - }, - "housekeeping": { - "title": "Rengjøringstillatelser", - "subtitle": "Konfigurer hvilke ranger som har tilgang til hvilke admin-seksjoner", - "addPermission": "Legg til tillatelse", - "editPermission": "Rediger tillatelse", - "deletePermission": "Slett tillatelse", - "noPermissions": "Ingen rengjøringstillatelser er konfigurert", - "confirmDelete": "Vil du slette denne tillatelsen?", - "colId": "ID", - "colRank": "Rangering", - "colSection": "Seksjon", - "colActions": "Handlinger", - "form": { - "rankId": "Rangerings-ID", - "rankIdPlaceholder": "Minste rangering", - "section": "Seksjonsnøkkel", - "sectionPlaceholder": "f.eks. admin.dashboard", - "save": "Lagre tillatelsen", - "saving": "Lagrer …", - "cancel": "Avbryt" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset Påført!", - "cleared": "All Tillatelser cleared!", - "invalidRank": "Invalid Rangering", - "testDone": "Test done: {count} Tillatelser found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Slett ALL Tillatelser? This Handling cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Tillatelse", - "colDescription": "Beskrivelse", - "colMinRank": "Min. Rangering", - "permissionKey": "Tillatelsesnøkkel", - "minRank": "Min. Rangering", - "description": "Beskrivelse", - "permissions": "Tillatelser", - "permissionsCount": "{count} Tillatelser", - "permission": "Tillatelse", - "highestMinRank": "Highest min. Rangering: {rank}", - "totalMinRank": "Total min. Rangering sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Rangerer", - "missingDeps": "{count} Mangler dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Mangler)", - "rank": "Rangering", - "count": "Count", - "searchPermission": "Søk Tillatelser…", - "search": "Søk", - "manage": "Manage", - "importSelection": "Importer selection", - "noGroup": "Nei group", - "allGroups": "All groups", - "perGroup": "Tillatelser per group", - "perRank": "Tillatelser per Rangering", - "rankOverviewHint": "All Tillatelser grouped by the Rangering they are assigned to.", - "tabOverview": "Oversikt", - "tabManage": "Manage", - "tabImport": "Importer / Export", - "tabRanks": "Rangering Oversikt", - "tabPresets": "Forhåndsinnstillinger", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Importer Tillatelser", - "importHint": "Paste a JSON array of Tillatelse objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Importer", - "exportTitle": "Export Tillatelser", - "exportHint": "Export all Tillatelser as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Tillatelse Forhåndsinnstillinger", - "presetsHint": "Søk a predefined Sett of Tillatelser for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Moderasjon tools: Bruker lookup, Forbud, CFH handling, chat Logger.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Brukere, Rom, news, Innstillinger, Handle, events, radio & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Tillatelse management and asset Importer.", - "applyPreset": "Søk preset", - "clearAll": "Clear all Tillatelser", - "testTitle": "Test Rangering access", - "testHint": "Enter a Rangering number to see which Tillatelser would be granted.", - "test": "Test", - "auditTitle": "Tillatelse audit log", - "auditHint": "All changes to Rengjøring Tillatelser are logged.", - "auditLogsAt": "Audit Logger are available on the Audit log page.", - "viewAuditLogs": "Visning audit Logger", - "importedWithErrors": "Imported {count} Tillatelser with {errors} errors", - "confirmClearAllDesc": "This will Fjern every Tillatelse entry from the database. Are you sure?", - "confirmDeletePermission": "Slett this Tillatelse permanently?", - "confirmBulkDelete": "Slett {count} selected Tillatelser?", - "deleteSelected": "Slett {count} selected", - "cancel": "Avbryt", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Bruker", - "auditAction": "Handling", - "auditTarget": "Mål", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Rom", - "subtitle": "Søk og administrer hotellrom", - "search": "Søk", - "searchPlaceholder": "Søk etter navn, eier eller ID...", - "searchResults": "{count, plural, one {# room} other {# rooms}} funnet for \"{query}\"", - "noResults": "Ingen rom funnet", - "colId": "ID", - "colName": "Navn", - "colOwner": "Eier", - "colUsers": "Brukere", - "colState": "stat", - "colCategory": "Kategori", - "colCreated": "Opprettet", - "colActions": "Handlinger", - "stateOpen": "Åpne", - "stateClosed": "Stengt", - "stateLocked": "Låst", - "stateInvisible": "Usynlig", - "detail": { - "title": "Rom: {name}", - "subtitle": "Eies av {owner}", - "overview": "Oversikt", - "actions": "Handlinger", - "description": "Beskrivelse", - "noDescription": "Ingen beskrivelse", - "owner": "Eier", - "users": "Brukere online", - "maxUsers": "Maks brukere", - "category": "Kategori", - "state": "stat", - "tags": "Tagger", - "noTags": "Ingen tagger", - "created": "Opprettet", - "deleteRoom": "Slett rom", - "confirmDelete": "Vil du slette rommet «{name}»? Dette kan ikke angres.", - "enterRoom": "Gå inn i rommet", - "changeOwner": "Bytt eier", - "changeOwnerPlaceholder": "Nytt brukernavn til eier" - } - }, - "emailTemplates": { - "title": "E-postmaler", - "subtitle": "Administrer transaksjonelle e-postmaler", - "newTemplate": "+ Ny mal", - "edit": "Rediger", - "delete": "Slett", - "noTemplates": "Ingen e-postmaler ennå", - "confirmDelete": "Vil du slette malen «{name}»?", - "colId": "ID", - "colName": "Navn", - "colSubject": "Emne", - "colKey": "Nøkkel", - "colUpdated": "Oppdatert", - "colActions": "Handlinger", - "form": { - "name": "Navn", - "namePlaceholder": "f.eks. Velkommen e-post", - "key": "Nøkkel", - "keyPlaceholder": "f.eks. velkomstepost", - "subject": "Emne", - "subjectPlaceholder": "Emnelinje på e-post", - "body": "Brødtekst (HTML)", - "bodyPlaceholder": "

Kjære {username},

", - "variables": "Tilgjengelige variabler", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Lagre malen", - "saving": "Lagrer …", - "cancel": "Avbryt" - } - }, - "theme": { - "title": "Tema", - "subtitle": "Tilpass CMS-utseendet", - "presets": "Forhåndsinnstillinger", - "colours": "Farger", - "css": "CSS", - "presetsTitle": "Forhåndsinnstillinger for tema", - "presetsSubtitle": "Velg et forhåndsbygd fargevalg", - "applyPreset": "Søk", - "presetApplied": "Forhåndsinnstilling brukt: {preset}", - "customiseTitle": "Egendefinerte farger", - "primary": "Primær", - "secondary": "Sekundær", - "accent": "Aksent", - "background": "Bakgrunn", - "surface": "Overflate", - "text": "Tekst", - "saveColours": "Lagre farger", - "savingColours": "Lagrer …", - "cssTitle": "Tilpasset CSS", - "cssSubtitle": "Legg til tilpasset CSS for å overstyre temastiler", - "cssPlaceholder": "/* Din tilpassede CSS her */", - "saveCss": "Lagre CSS", - "savingCss": "Lagrer …", - "reset": "Tilbakestill til standardinnstillinger", - "confirmReset": "Vil du tilbakestille temaet til standardverdiene?" - }, - "media": { - "title": "Mediebibliotek", - "subtitle": "Last opp og administrer mediefiler", - "upload": "Last opp", - "uploadTitle": "Last opp en fil", - "uploadSubtitle": "Dra og slipp eller klikk for å laste opp", - "uploadButton": "Velg fil", - "uploading": "Laster opp …", - "noFiles": "Ingen mediefiler ennå", - "delete": "Slett", - "confirmDelete": "Vil du slette denne filen permanent?", - "search": "Søk", - "searchPlaceholder": "Søk etter filnavn...", - "colPreview": "Forhåndsvisning", - "colName": "Navn", - "colSize": "Størrelse", - "colType": "Type", - "colUploaded": "Lastet opp", - "colActions": "Handlinger", - "copyUrl": "Kopier URL", - "urlCopied": "URL kopiert til utklippstavlen" - }, - "favicon": { - "title": "Favorittikon", - "subtitle": "Last opp og administrer nettstedets favorittikon", - "current": "Gjeldende favorittikon", - "uploadLabel": "Last opp favorittikon", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO eller SVG. Maks 2 MB.", - "upload": "Last opp", - "uploading": "Laster opp …", - "delete": "Fjern", - "deleting": "Fjerner …", - "saved": "Favorittikonet ble lagret!", - "deleted": "Favorittikon ble fjernet!", - "error": "Noe gikk galt", - "confirmDelete": "Vil du fjerne favorittikonet? Nettstedet vil ikke lenger vise et tilpasset favorittikon.", - "generator": { - "title": "Generer favorittikon", - "text": "Tekst", - "bgColor": "Bakgrunnsfarge", - "textColor": "Tekstfarge", - "rounded": "Avrundede hjørner", - "save": "Lagre som favorittikon" - }, - "cancel": "Cancel" - }, - "settings": { - "title": "CMS-innstillinger", - "subtitle": "Administrer nøkkel/verdi CMS-konfigurasjon", - "addSetting": "Legg til innstilling", - "edit": "Rediger", - "delete": "Slett", - "noSettings": "Ingen innstillinger funnet", - "confirmDelete": "Vil du slette innstillingen \"{key}\"?", - "colKey": "Nøkkel", - "colValue": "Verdi", - "colUpdated": "Oppdatert", - "colActions": "Handlinger", - "form": { - "key": "Nøkkel", - "keyPlaceholder": "f.eks. hotel_name", - "value": "Verdi", - "valuePlaceholder": "Innstillingsverdi", - "save": "Lagre innstilling", - "saving": "Lagrer …", - "cancel": "Avbryt" - }, - "keysInDatabase": "{count} keys in database", - "managedInForm": "{count} managed in form", - "documented": "{count} documented", - "saved": "Settings saved.", - "saveFailed": "Could not save settings.", - "saveSettings": "Save settings", - "viewOnly": "You can view settings but need edit permission to change them." - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Hjem", - "reload": "Last inn på nytt", - "fullscreen": "Fullskjerm", - "logout": "Logg ut", - "onlineUsers": "Brukere på nett", - "emulatorOnline": "Emulator på nett", - "emulatorOffline": "Emulator frakoblet", - "dragToMove": "Dra for å flytte", - "hide": "Skjul verktøylinje", - "fullscreenExit": "Avslutt fullskjerm", - "show": "Vis verktøylinje", - "emulatorUnknown": "Emulatorstatus ukjent" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Fildiagnostikk", - "preliminary": "Foreløpig kontroll av adresser; innholdet valideres ved import.", - "http": "HTTP {status}", - "network": "Tilkoblingen mislyktes", - "timeout": "Kilden svarte ikke i tide", - "invalidResponse": "Kilden returnerte en nettside i stedet for en fil", - "available": "Fil funnet; venter på validering", - "recover": "Legg ved originalen og fortsett", - "recoveryHint": "Velg {file} (maksimalt 50 MB). Identiteten kontrolleres. Mislykkede elementer prøves på nytt; fullførte importer bevares.", - "attach": "Velg den originale .nitro-filen", - "working": "Validerer eller gjenopptar...", - "attached": "Tilsvarende originalfil vedlagt", - "resume": "Gjenoppta mislykkede importer med filen", - "invalidFile": "Velg en tilsvarende original .nitro-fil på opptil 50 MB og prøv igjen.", - "resumeError": "Oppdater historikken og bruk siste forsøk; kontroller filen og prøv igjen.", - "mismatchedFile": "Denne filen tilhører et annet møbel.", - "alreadyStarted": "Gjenopprettingen har startet. Oppdater historikken og bruk siste forsøk.", - "notEligible": "Dette elementet kan ikke gjenopprettes med et vedlegg." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "En gjenopprettingskopi lagres i denne nettleseren i 7 dager.", + "saved": "En gjenopprettingskopi er lagret i denne nettleseren i 7 dager.", + "unavailable": "Gjenoppretting i nettleseren er ikke tilgjengelig. Hold denne siden åpen til endringene dine er lagret.", + "found": "En gjenopprettingskopi er tilgjengelig i denne nettleseren, lagret", + "restore": "Gjenopprett nettleserkopi", + "discard": "Slett nettleserkopi", + "confirmRestore": "Erstatte det gjeldende skjemaet med gjenopprettingskopien fra nettleseren? Kontroller innholdet før du lagrer.", + "confirmDiscard": "Slette denne gjenopprettingskopien fra nettleseren? Det gjeldende skjemaet forblir uendret." + }, + "nav": { + "home": "Hjem", + "community": "Fellesskap", + "articles": "Artikler", + "photos": "Bilder", + "staff": "Ansatte", + "rankings": "Rangeringer", + "guilds": "Gilder", + "leaderboards": "Leaderboards", + "rareValues": "Sjeldne verdier", + "shop": "Handle", + "market": "Marked", + "assistance": "Assistanse", + "helpCenter": "Hjelpesenter", + "myTickets": "Billettene mine", + "badges": "Merker", + "radio": "Radio", + "friends": "Venner", + "messages": "Meldinger", + "admin": "Admin", + "openMenu": "Åpne menyen", + "closeMenu": "Lukk menyen", + "drawBadge": "Tegn merke", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} online", + "nitroClient": "Nitro klient", + "tagline": "En online virtuell verden hvor du kan lage din egen avatar, få venner, chatte, lage rom og mye mer!", + "login": "Logg inn", + "or": "Eller", + "createAccount": "Opprett en konto" + }, + "footer": { + "copyright": "© {year} - {hotel} er et ikke-kommersielt utdanningsprosjekt" + }, + "pages": { + "staff": { + "title": "Ansatte", + "subtitle": "Teamet bak hotellet", + "ranksTitle": "Rangerer", + "ranksSubtitle": "Hva hver del av teamet tar seg av", + "membersTitle": "Teammedlemmer", + "membersEmptySubtitle": "Ingen å vise akkurat nå", + "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", + "emptyState": "Ingen ansatte å vise.", + "colUsername": "Brukernavn", + "colRank": "Rangering", + "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": "Topp 20 spillere etter {currency}", + "tab_credits": "Studiepoeng", + "tab_diamonds": "Diamanter", + "tab_duckets": "Duckets", + "tab_achievement": "Prestasjoner", + "tab_respects": "Respekterer", + "tab_onlinetime": "Online tid", + "emptyState": "Ingen rangeringer å vise ennå.", + "colAvatar": "Avatar", + "colPlayer": "Spiller" + }, + "friends": { + "title": "Venner", + "emptySubtitle": "Du har ingen venner lagt til ennå", + "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", + "emptyState": "Legg til venner på hotellet, så dukker de opp her.", + "noMotto": "Ingen 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": "Meldinger", + "subtitle": "Venneforespørsler og frakoblede meldinger venter på deg", + "requestsTitle": "Venneforespørsler", + "requestsEmptySubtitle": "Ingen har bedt om å være vennen din ennå", + "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", + "requestsEmptyState": "Ingen ventende venneforespørsler.", + "wantsToBeFriend": "ønsker å være din venn.", + "accept": "Godta", + "offlineTitle": "Frakoblede meldinger", + "offlineEmptySubtitle": "Innboksen din er tom", + "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", + "offlineEmptyState": "Du har ingen frakoblede meldinger.", + "unknownUser": "Bruker nr. {id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Ingen motto", + "statRank": "Rangering", + "statCredits": "Studiepoeng", + "statRegistered": "Registrert", + "badgesTitle": "Merker", + "badgesEmpty": "Ingen merker ennå.", + "photosTitle": "Bilder", + "photosEmpty": "Ingen bilder ennå.", + "guestbookTitle": "Gjestebok", + "guestbookSubtitle": "Meldinger på {username} sin vegg", + "leaveMessage": "Legg igjen en melding", + "guestbookPlaceholder": "Skriv noe i gjesteboken til {username}...", + "post": "Post", + "loginToPost": "Logg inn for å legge igjen en gjestebokmelding.", + "guestbookEmpty": "Ingen gjestebokinnlegg ennå.", + "unknownUser": "Bruker nr. {id}", + "statDuckets": "Duckets", + "statDiamonds": "Diamanter", + "walletTitle": "Lommebok", + "friendsTitle": "Venner", + "friendsSubtitle": "Folk på hotellet de henger med", + "friendsEmpty": "Ingen venner å vise.", + "roomsTitle": "Rom", + "roomsSubtitle": "Rom de eier", + "roomsEmpty": "Ingen rom å vise.", + "roomUntitled": "Rom uten tittel", + "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": "Rangeringer", + "subtitle": "De 12 beste spillerne rangert etter studiepoeng", + "emptyState": "Ingen spillere å rangere ennå." + }, + "home": { + "welcome": "Velkommen til {hotelName}", + "welcomeSubtitle": "Ditt retrohotell, nå drevet av Next.js", + "welcomeBody": "Heng med, samle møbler og møt venner.", + "enterHotel": "Skriv inn {hotelName}", + "onlineFriends": "Online venner", + "noFriendsOnline": "Ingen venner online", + "register": "REGISTRER DEG NÅ", + "joinNow": "Bli med i {hotelName} i dag!", + "recentUsers": "Nylige brukere", + "recentPhotos": "Nylige bilder", + "latestNews": "Siste nytt", + "newsTitle": "Siste nytt", + "newsSubtitle": "Frisk fra hotellet", + "allNews": "Alle nyheter →", + "allUsers": "Fellesskap →", + "noArticles": "Ingen artikler ennå.", + "noPhotos": "Ingen bilder ennå.", + "noUsers": "Ingen brukere online", + "latestArticle": "Siste artikkel", + "latestUsers": "Nyeste borgere ({count} totalt)", + "statsOnline": "Online", + "statsCitizens": "Innbyggere", + "statsRooms": "Rom", + "statsArticles": "Artikler", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Skap ditt unike utseende", + "featuresFurniture": "Møbler", + "featuresFurnitureDesc": "Dekorer rom med gjenstander", + "featuresCommunity": "Fellesskap", + "featuresCommunityDesc": "Få venner og chat", + "featuresGames": "Spill", + "featuresGamesDesc": "Konkurrer og ha det gøy", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Nyheter", + "subtitle": "De siste kunngjøringene, arrangementene og oppdateringene fra hotellet", + "noArticles": "Ingen artikler ennå.", + "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": "← Nyheter", + "reactionsTitle": "Reaksjoner", + "reactionsSubtitle": "Fortell oss hva du synes", + "reaction": { + "like": "Liker", + "love": "Kjærlighet", + "wow": "Wow" + }, + "removeReaction": "Klikk for å fjerne reaksjonen", + "reactWith": "Reager med {reaction}", + "noReactions": "Ingen reaksjoner ennå.", + "logIn": "Logg inn", + "toReact": "å reagere.", + "commentsTitle": "Kommentarer", + "commentsSubtitle": "Bli med i samtalen", + "commentsCount": "{count} så langt", + "noComments": "Ingen kommentarer ennå. Vær den første til å kommentere.", + "userNumber": "Bruker nr. {id}", + "addComment": "Legg til en kommentar", + "commentPlaceholder": "Skriv din kommentar...", + "postComment": "Legg inn kommentar", + "toComment": "for å legge igjen en kommentar.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Bilder", + "subtitle": "De siste øyeblikksbildene tatt på hotellet", + "noPhotos": "Ingen bilder ennå.", + "photoAlt": "Bilde av bruker #{id}", + "byUser": "av bruker #{id}" + }, + "badges": { + "title": "Merker", + "subtitle": "Merkene kan du tjene og vise frem rundt hotellet", + "noBadges": "Ingen merker tilgjengelig ennå." + }, + "community": { + "title": "Fellesskap", + "subtitle": "Alt som skjer rundt hotellet på ett sted", + "open": "Åpne →", + "links": { + "rankings": { + "title": "Rangeringer", + "text": "Se de rikeste spillerne på hotellet, rangert etter studiepoeng." + }, + "staff": { + "title": "Ansatte", + "text": "Møt teamet som holder hotellet i gang hver dag." + }, + "news": { + "title": "Nyheter", + "text": "De siste kunngjøringene, arrangementene og oppdateringene." + }, + "photos": { + "title": "Bilder", + "text": "Øyeblikksbilder delt av fellesskapet fra rundt hotellet." + }, + "guilds": { + "title": "Gilder", + "text": "Bla gjennom gruppene spillere har opprettet og blitt med i." + }, + "leaderboards": { + "title": "Leaderboards", + "text": "Hvem er på topp denne sesongen på tvers av hotellets statistikk." + } + } + }, + "guilds": { + "title": "Gilder", + "subtitle": "Bla gjennom gruppene spillere har opprettet og blitt med i", + "empty": "Ingen laug ennå.", + "unnamedGuild": "Ukjent laug", + "noDescription": "Ingen beskrivelse" + }, + "guild": { + "allGuilds": "← Alle laugene", + "unnamedGuild": "Ukjent laug", + "noDescription": "Ingen beskrivelse", + "memberSingular": "Medlem", + "memberPlural": "Medlemmer", + "founded": "Grunnlagt", + "forumLink": "Forum →", + "discussion": "Diskusjon", + "membersTitle": "Medlemmer", + "memberLowerSingular": "medlem", + "memberLowerPlural": "medlemmer", + "noMembers": "Ingen medlemmer.", + "owner": "Eier", + "noMotto": "Ingen motto" + }, + "guildForum": { + "backToGuild": "← Tilbake til guild", + "unnamedGuild": "Ukjent laug", + "forumTitle": "{guild} – Forum", + "threadSingular": "tråd", + "threadPlural": "tråder", + "newThread": "+ Ny tråd", + "empty": "Ingen tråder i dette forumet ennå.", + "colSubject": "Emne", + "colAuthor": "Forfatter", + "colPosts": "Innlegg", + "colDate": "Dato", + "noSubject": "(ingen emne)", + "pinned": "Festet", + "locked": "Låst", + "userNumber": "Bruker nr. {id}", + "unknown": "Ukjent", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Tilbake til forumet", + "unnamedGuild": "Ukjent laug", + "title": "Ny tråd", + "subtitle": "i {guild}-forumet", + "subjectLabel": "Emne", + "subjectPlaceholder": "Trådemne", + "messageLabel": "Melding", + "messagePlaceholder": "Skriv åpningsinnlegget ditt...", + "postThread": "Post tråd", + "cancel": "Avbryt", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Handle", + "subtitle": "Fyll på kontoen din og få eksklusive pakker, valuta og merker.", + "browsingCategory": "Bla gjennom {category}-pakkene.", + "all": "Alle", + "allPackages": "Alle pakker", + "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", + "empty": "Ingen tilgjengelige pakker akkurat nå.", + "buy": "Kjøp", + "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": "Fyll på med PayPal", + "subtitle": "Betal sikkert med PayPal, og kredittene dine legges til i det øyeblikket betalingen foretas.", + "cancelled": "Kassen ble kansellert - ingen betaling ble tatt.", + "chooseAmount": "Velg et beløp", + "notConfiguredPre": "PayPal er ikke konfigurert ennå. En administrator må stille inn", + "notConfiguredAnd": "og", + "notConfiguredOptional": "(og eventuelt", + "notConfiguredPost": "for sandkasse vs. live).", + "balanceTitle": "Din saldo", + "signedInAs": "Logget på som {username}", + "credits": "Studiepoeng", + "creditsPerUnit": "Kreditt per 1,00 {currency}", + "rateLine": "Du mottar {amount} kreditter per 1,00 {currency}. Kreditter vises i spillet neste gang du logger på." + }, + "marketplace": { + "title": "Markedsplass", + "subtitle": "Bla gjennom møbler og sjeldne produkter oppført av spillere. Oppføringer plasseres i spillet og oppdateres live - gå inn på hotellet for å gi et tilbud.", + "activeOffers": "Aktive tilbud", + "sellers": "Selgere", + "totalValue": "Total verdi", + "activeListings": "Aktive oppføringer", + "mostRecentFirst": "Sist oppført først", + "empty": "Det er ingen aktive markedsplasstilbud akkurat nå. Kom tilbake senere.", + "colOffer": "Tilbud", + "colItem": "Vare", + "colSeller": "Selger", + "colPrice": "Pris", + "colListed": "Oppført", + "itemLabel": "Vare nr. {id}", + "userLabel": "Bruker nr. {id}", + "justNow": "akkurat nå", + "minutesAgo": "for {count} m siden", + "hoursAgo": "for {count} t siden", + "daysAgo": "for {count}d siden" + }, + "rares": { + "title": "Sjeldne verdier", + "subtitle": "Få en oversikt over alle de sjeldne på hotellet, gruppert etter kategori.", + "empty": "Vi har for øyeblikket ingen sjeldne oppført her.", + "rareCount": "{count, plural, one {# rare} other {# rares}}", + "viewRares": "Se sjeldne →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", + "allRares": "← Alle sjeldne", + "empty": "Ingen sjeldne oppført i denne kategorien ennå.", + "colRare": "Sjelden", + "colCredits": "Studiepoeng", + "colCurrency": "Valuta", + "creditsValue": "{value} kreditter", + "duckets": "Duckets", + "diamonds": "Diamanter", + "credits": "Studiepoeng" + }, + "redeem": { + "title": "Løs inn en kupong", + "subtitle": "Har du en kupongkode? Skriv inn den nedenfor for å legge belønningen til kontoen din.", + "enterCode": "Skriv inn koden din", + "oncePerAccount": "Hver kupong kan kun løses inn én gang per konto.", + "balanceTitle": "Din saldo", + "signedInAs": "Logget på som {username}", + "credits": "Studiepoeng", + "instantCredit": "Innløste belønninger krediteres umiddelbart og vises i spillet neste gang du logger på." + }, + "help": { + "title": "Hjelpesenter", + "subtitle": "Finn guider, støtteemner og hotellreglene – alt du trenger for å få hjelp.", + "myTickets": "Mine billetter →", + "topicsTitle": "Støtteemner", + "topicsSubtitle": "Bla gjennom guider og svar på vanlige spørsmål", + "topicsEmpty": "Ingen hjelpeemner ennå.", + "rulesTitle": "Hotellregler", + "rulesSubtitle": "Les disse før du henger på hotellet", + "rulesEmpty": "Ingen regler publisert ennå.", + "categoryEmpty": "Ingen regler i denne kategorien." + }, + "helpCategory": { + "back": "← Hjelpesenter", + "topicSubtitle": "Hjelpesenter-emne", + "moreTitle": "Flere hjelpeemner", + "moreSubtitle": "Gå til et annet støtteemne" + }, + "helpTickets": { + "title": "Hjelpebilletter", + "subtitle": "Send inn en billett til personalet og spor dine åpne forespørsler.", + "statTotal": "Totalt antall billetter", + "statOpen": "Åpne", + "statClosed": "Stengt", + "newTitle": "Ny billett", + "newSubtitle": "Beskriv problemet ditt og personalet vil følge opp", + "subjectPlaceholder": "Emne", + "contentPlaceholder": "Beskriv problemet ditt...", + "submit": "Send inn billett", + "listTitle": "Dine billetter", + "listSubtitle": "Hver forespørsel du har sendt til ansatte", + "listEmpty": "Du har ingen billetter ennå.", + "colId": "ID", + "colSubject": "Emne", + "colStatus": "Status", + "colCreated": "Opprettet", + "statusOpen": "Åpne", + "statusClosed": "Stengt", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "Søk på {hotel}-ansatte", + "subtitle": "Vi åpner personalsøknader nå og da. Kommer du over en stilling du føler at du vil passe perfekt inn i, ikke nøl med å søke på den.", + "noPositionsTitle": "Ingen ledige stillinger", + "noPositionsBody": "Det er foreløpig ingen ledige stillinger. Kom gjerne tilbake på et senere tidspunkt for å sjekke om vi har noen åpninger innen da. Takk for interessen.", + "noDeadline": "Ingen frist satt", + "deadline": "Søknadsfrist: {date}", + "alreadyApplied": "Du har allerede søkt om {rank}", + "aboutYou": "Om deg", + "aboutPlaceholder": "Fortell oss hvorfor du ville være en stor {rank}...", + "applyFor": "Søk om {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": "Søk på {hotel}-teamet", + "subtitle": "Vi åpner teamsøknader med jevne mellomrom. Ser du et lag du passer, ikke nøl med å søke!", + "noPositionsTitle": "Ingen lagstillinger åpne", + "noPositionsBody": "Det er for tiden ingen åpne lagstillinger. Kom tilbake senere for å se etter nye åpninger. Takk!", + "pending": "Søknaden din er under behandling", + "aboutYou": "Om deg", + "aboutPlaceholder": "Fortell oss hvorfor du vil passe godt for {rank}...", + "applyFor": "Søk om {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": "Still inn på hotellradioen – live DJ-sett, forespørsler og shoutouts.", + "nowPlaying": "Spiller nå", + "nothingPlaying": "Ingenting spiller akkurat nå.", + "onAir": "På lufta: {dj}", + "noDj": "Ingen DJ på lufta.", + "audioUnsupported": "Nettleseren din støtter ikke lydelementet.", + "streamOffline": "Strømmen er for øyeblikket offline.", + "exploreTitle": "Utforsk radioen", + "exploreSubtitle": "Planlegg, rop, forespørsler og mer", + "linkSchedule": "Tidsplan", + "linkScheduleText": "Vårt ukentlige utvalg av DJs og show.", + "linkShouts": "Roper", + "linkShoutsText": "Shout-outs og forespørsler fra samfunnet.", + "linkRequests": "Forespørsler", + "linkRequestsText": "Be DJ-en spinne favorittsporet ditt.", + "linkApply": "Søk som DJ", + "linkApplyText": "Bli med på laget og ta til radioen.", + "linkLeaderboard": "Leaderboard", + "linkLeaderboardText": "Topplyttere rangert etter poeng opptjent.", + "todayTitle": "Dagens timeplan", + "todayTitleWithDay": "Dagens timeplan · {day}", + "todaySubtitle": "Hva er på eteren i dag", + "fullWeek": "Hel uke →", + "noShowsToday": "Ingen forestillinger planlagt i dag.", + "colTime": "Tid", + "colShow": "Vis", + "colDj": "DJ", + "untitledShow": "Uten tittel show", + "userNumber": "Bruker nr. {id}" + }, + "radioSchedule": { + "title": "Radioplan", + "subtitle": "Vårt ukentlige utvalg av DJs og show", + "empty": "Ingen show planlagt ennå.", + "colDay": "dag", + "colTime": "Tid", + "colDj": "DJ", + "colShow": "Vis", + "noShows": "Ingen show" + }, + "radioShouts": { + "title": "Radio roper", + "subtitle": "Shout-outs og forespørsler fra samfunnet", + "postTitle": "Legg ut et rop", + "postSubtitle": "Send en melding til DJ på lufta", + "messageLabel": "Din melding", + "messagePlaceholder": "Send et rop til DJ...", + "shoutButton": "Rop", + "loginToPost": "Logg inn for å legge ut et rop.", + "latestTitle": "Siste rop", + "latestSubtitle": "De siste meldingene fra lytterne", + "empty": "Ingen rop ennå. Vær den første!", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Radiokonkurranser", + "subtitle": "Følg med og ta del i våre siste konkurranser på lufta", + "empty": "Ingen konkurranser ennå.", + "contestLabel": "Konkurranse nr. {id}", + "dateUnknown": "Dato ukjent" + }, + "radioGiveaways": { + "title": "Radio Giveaways", + "subtitle": "Hør på for å få sjansen din til å vinne i våre radiogaver", + "empty": "Ingen giveaways ennå.", + "giveawayLabel": "Giveaway #{id}", + "dateUnknown": "Dato ukjent" + }, + "radioLeaderboard": { + "title": "Leaderboard for radiolytter", + "subtitle": "Topp 50 lyttere etter poeng opptjent ved å stille inn på radioen", + "empty": "Ingen lytterpoeng å vise ennå.", + "colRank": "Rangering", + "colAvatar": "Avatar", + "colListener": "Lytter", + "colPoints": "Poeng" + }, + "radioRequests": { + "formTitle": "Send inn en forespørsel", + "formSubtitle": "Be DJ-en spille favorittsporet ditt", + "songLabel": "Sang", + "songPlaceholder": "Tittel på sangen", + "artistLabel": "Kunstner", + "artistPlaceholder": "Navn på artist (valgfritt)", + "submitButton": "Send inn forespørsel", + "loginToRequest": "Logg inn for å sende inn en forespørsel.", + "latestTitle": "Nylige forespørsler", + "latestSubtitle": "De sist etterspurte sangene", + "empty": "Ingen forespørsler ennå.", + "colSong": "Sang", + "colArtist": "Kunstner", + "colRequester": "Forespørsel", + "colDate": "Dato", + "colStatus": "Status", + "statusPending": "Venter", + "statusApproved": "Godkjent", + "statusPlayed": "Spilt", + "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": "Søk om å bli radio-DJ", + "subtitle": "Fortell oss om deg selv og hvorfor du vil passe godt i eteren", + "latestTitle": "Din siste søknad", + "statusLabel": "Status:", + "submittedOn": "· sendt inn {date}", + "submitAgain": "Du kan sende inn på nytt nedenfor hvis opplysningene dine er endret.", + "formTitle": "Søknadsskjema", + "formSubtitle": "Alle felt merket som obligatoriske må fylles ut", + "realNameLabel": "Ekte navn", + "realNamePlaceholder": "Ditt fulle navn", + "ageLabel": "Alder", + "availabilityLabel": "Tilgjengelighet", + "availabilityPlaceholder": "Hvilke dager og tidspunkter kan du sende?", + "musicStyleLabel": "Musikkstil", + "musicStylePlaceholder": "f.eks. House, pop, hip-hop", + "experienceLabel": "Erfaring", + "optional": "(valgfritt)", + "experiencePlaceholder": "Noen tidligere DJ eller vertserfaring?", + "motivationLabel": "Motivasjon", + "motivationPlaceholder": "Hvorfor vil du bli med i radioteamet?", + "submitButton": "Send inn søknad", + "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": "Kontoinnstillinger", + "accountSettingsSubtitle": "Administrer profilen din, sikkerheten og tilkoblede kontoer", + "publicProfile": "Din offentlige profil", + "noMotto": "Ingen motto", + "noEmail": "Ingen e-post på filen", + "changeMotto": "Endre motto", + "changeMottoSubtitle": "Oppdateres umiddelbart i spillet hvis du er online", + "mottoPlaceholder": "Ditt motto", + "saveMotto": "Lagre motto", + "securityTitle": "Sikkerhet", + "securitySubtitle": "To-faktor autentisering", + "securityDescription": "Legg til et ekstra lag med beskyttelse til kontoen din.", + "twoFactorLink": "To-faktor autentisering" + }, + "settings2fa": { + "backToSettings": "← Innstillinger", + "title": "To-faktor autentisering", + "subtitle": "Legg til et ekstra lag med sikkerhet med en autentiseringsapp", + "nowEnabled": "2FA er nå aktivert. 🔒", + "disabledNotice": "2FA er deaktivert.", + "badCode": "Den koden var ikke gyldig – prøv igjen.", + "noAppKeyPrefix": "2FA er utilgjengelig frem til", + "noAppKeyMiddle": "er konfigurert (samme Laravel", + "noAppKeySuffix": "mens AtomCMS installeres, slik at eksisterende hemmeligheter forblir lesbare).", + "isEnabled": "2FA er aktivert", + "onYourAccount": "på kontoen din.", + "disable": "Deaktiver 2FA", + "scanOrEnter": "Skann eller skriv inn denne nøkkelen", + "scanInstructions": "Legg til dette i Google Authenticator / Authy, og skriv inn den 6-sifrede koden for å bekrefte.", + "manualKey": "Manuell nøkkel:", + "codePlaceholder": "6-sifret kode", + "confirm": "Bekreft", + "enableIntro": "Legg til et ekstra lag med sikkerhet med en autentiseringsapp.", + "enable": "Aktiver 2FA", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Tilknyttede kontoer", + "subtitle": "Koble til en sosial konto slik at du kan logge på med ett klikk", + "connected": "Tilkoblet", + "unavailable": "Utilgjengelig", + "login": { + "title": "Logg på", + "subtitle": "Velkommen tilbake – logg inn for å komme inn på hotellet.", + "subtitle2fa": "Skriv inn den 6-sifrede koden fra autentiseringsenheten.", + "usernamePlaceholder": "Brukernavn", + "passwordPlaceholder": "Passord", + "codePlaceholder": "2FA-kode", + "pleaseWait": "Vennligst vent...", + "verify": "Bekreft", + "signIn": "Logg på", + "or": "eller", + "noAccount": "Ingen konto?", + "createOne": "Lag en", + "forgotPassword": "Glemt passord?", + "errorInvalidCredentials": "Ugyldig brukernavn eller passord", + "errorInvalid2fa": "Ugyldig 2FA-kode", + "welcomeBack": "Velkommen tilbake", + "welcomeBackSub": "Logg inn for å fortsette til {hotelName}", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Opprett konto", + "subtitle": "Bli med på hotellet - det tar bare et øyeblikk.", + "username": "Brukernavn", + "email": "E-post", + "password": "Passord", + "confirmPassword": "Gjenta passord", + "usernamePlaceholder": "Brukernavn", + "emailPlaceholder": "E-post", + "passwordPlaceholder": "Passord (minst 6 tegn)", + "confirmPasswordPlaceholder": "Gjenta passord", + "selectOutfit": "Velg antrekket ditt", + "termsAccept": "Jeg er 18+ og godtar vilkårene og reglene for {hotel}.", + "createAccount": "Opprett konto", + "creatingAccount": "Oppretter konto ...", + "redirecting": "Videre til kontoen din...", + "alreadyHaveAccount": "Har du allerede en konto? Logg inn!", + "register": "Registrer deg", + "termsError": "Du må godta vilkårene og reglene for å registrere deg.", + "usernameError": "Brukernavn er påkrevd.", + "emailError": "Gyldig e-post er nødvendig.", + "passwordError": "Passordet må være på minst 6 tegn.", + "confirmPasswordError": "Passord stemmer ikke.", + "termsRequired": "Du må godta vilkårene og reglene.", + "usernameRequired": "Brukernavn er påkrevd.", + "emailRequired": "E-post er påkrevd.", + "passwordRequired": "Passord kreves.", + "passwordsDontMatch": "Passord stemmer ikke.", + "alreadyHaveAccountPre": "Har du allerede en konto?", + "alreadyHaveAccountLink": "Logg inn", + "whoIsOnline": "Hvem er online", + "usersOnline": "{count} online", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Tilbakestill passord", + "subtitle": "Vi sender deg en sikker lenke for å angi et nytt passord.", + "sentNotice": "Hvis den e-posten er registrert, har en tilbakestillingslenke blitt sendt. Sjekk innboksen din.", + "emailPlaceholder": "Din e-post", + "sendResetLink": "Send tilbakestillingslink", + "backToLogin": "Tilbake til innlogging", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Angi et nytt passord", + "subtitle": "Velg et sterkt passord du ikke bruker andre steder.", + "passwordPlaceholder": "Nytt passord (minst 6 tegn)", + "resetPassword": "Tilbakestill passord", + "backToLogin": "Tilbake til innlogging" + }, + "verify": { + "verifiedTitle": "Du er klar", + "verifiedSubtitle": "E-post bekreftet", + "verifiedBody": "E-postadressen din er bekreftet. Du kan nå logge inn og spille.", + "goToLogin": "Gå til pålogging", + "alreadyTitle": "Allerede bekreftet", + "alreadySubtitle": "Ingenting igjen å gjøre", + "alreadyBody": "Denne e-postadressen er allerede bekreftet.", + "unavailableTitle": "Prøv igjen snart", + "unavailableSubtitle": "Server utilgjengelig", + "unavailableBody": "Vi kunne ikke nå serveren for å bekrefte e-posten din. Prøv koblingen på nytt om et øyeblikk.", + "invalidTitle": "E-postbekreftelse", + "invalidSubtitle": "Ugyldig eller utløpt lenke", + "invalidBody": "Denne bekreftelseslenken er ikke gyldig. Sørg for at du åpnet hele lenken fra e-posten din, eller be om en ny.", + "backToLogin": "Tilbake til innlogging" + }, + "banned": { + "title": "Du er utestengt", + "subtitle": "Kontoen er suspendert", + "body": "Kontoen din er suspendert fra hotellet.", + "reasonLabel": "Årsak:", + "permanent": "Dette forbudet er permanent.", + "expires": "Utløper {date}.", + "contactStaff": "Hvis du mener dette er en feil, ta kontakt med personalet." + }, + "maintenance": { + "title": "{hotel} er under vedlikehold", + "subtitle": "Vi kommer snart tilbake", + "staffCanLogIn": "Personalet kan fortsatt logge inn." + }, + "admin": { + "nav": { + "overview": "Oversikt", + "dashboard": "Dashbord", + "content": "Innhold", + "articles": "Artikler", + "tags": "Tagger", + "navigator": "Navigator", + "helpCenter": "Hjelpesenter", + "advertisements": "Annonser", + "writeableBoxes": "Skrivbare bokser", + "photos": "Bilder", + "tickets": "Billetter", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Brukere og tilgang", + "users": "Brukere", + "bans": "Forbud", + "ipManagement": "IP-administrasjon", + "vpn": "VPN", + "applications": "Søknader", + "teams": "Lag", + "permissions": "Tillatelser", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "Økonomi", + "catalog": "Katalog", + "shop": "Handle", + "transactions": "Transaksjoner", + "vouchers": "Bilag", + "subscriptions": "Abonnementer", + "rareValues": "Sjeldne verdier", + "badges": "Merker", + "achievements": "Prestasjoner", + "calendar": "Kalender", + "radio": "Radio", + "radioHistory": "Radiohistorie", + "radioBanners": "Bannere", + "radioEmbed": "Bygg inn", + "radioApiKeys": "API-nøkler", + "radioModeration": "Moderasjon", + "radioSettings": "Innstillinger", + "radioMonitoring": "Overvåking", + "radioPoints": "Poeng", + "radioRanks": "Rangerer", + "radioAutodj": "Auto DJ", + "system": "System", + "commandocentrum": "Kommandosenter", + "emulator": "Emulator", + "alerts": "Varsler", + "logs": "Logger", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Ordfilter", + "maintenance": "Vedlikehold", + "rooms": "Rom", + "emailTemplates": "E-postmaler", + "theme": "Tema", + "media": "Media", + "favicon": "Favorittikon", + "sounds": "Lyder", + "translations": "Oversettelser", + "import": "Importer", + "settings": "Innstillinger", + "backToSite": "Tilbake til nettstedet", + "housekeeping": "Rengjøring", + "hotelManagementPanel": "Hotellstyringspanel", + "rankLabel": "Rangering {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Search menu…", + "clearMenuSearch": "Clear menu search", + "noMenuResults": "No matching pages.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "studio": "Studio", + "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" + }, + "dashboard": { + "title": "Dashbord", + "subtitle": "Hotelloversikt og livestatus", + "playersOnline": "Spillere online", + "articles": "Artikler", + "activeBans": "Aktive forbud", + "database": "Database", + "databaseConnected": "Tilkoblet", + "databaseDown": "Ned", + "usersByRank": "Brukere etter rangering", + "noAccountsToBreakDown": "Ingen kontoer å bryte ned ennå", + "rankLabel": "Rangering {rank}", + "rankWithCount": "Rangering {rank}: {count} kontoer", + "recentStaffActivity": "Nylig personalaktivitet", + "viewAll": "Se alle", + "noStaffActivityLogged": "Ingen personalaktivitet logget ennå", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "Artikler", + "subtitle": "Nyhetsartikler - 50 siste", + "newArticle": "+ Ny artikkel", + "edit": "Rediger", + "delete": "Slett", + "noArticles": "Ingen artikler ennå", + "confirmDelete": "Er du sikker på at du vil slette «{title}»?", + "colTitle": "Tittel", + "colSlug": "Snegl", + "colAuthor": "Forfatter", + "colCreated": "Opprettet", + "colActions": "Handlinger", + "form": { + "title": "Tittel", + "titlePlaceholder": "Artikkeltittel", + "slug": "Snegl", + "slugPlaceholder": "artikkel-url-slug", + "category": "Kategori", + "categoryPlaceholder": "Velg en kategori", + "body": "Kropp", + "bodyPlaceholder": "Skriv artikkelinnholdet ditt...", + "image": "Bilde", + "imagePlaceholder": "https://example.com/image.png", + "thumbnail": "Miniatyrbilde", + "thumbnailPlaceholder": "https://example.com/thumb.png", + "published": "Publisert", + "featured": "Utvalgte", + "save": "Lagre artikkelen", + "saving": "Lagrer …", + "deleteArticle": "Slett artikkelen", + "deleteConfirm": "Denne handlingen kan ikke angres. Artikkelen vil bli fjernet permanent.", + "cancel": "Avbryt", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "Tagger", + "subtitle": "Artikkelkoder / kategorier", + "addTag": "Legg til tag", + "name": "Navn", + "namePlaceholder": "Tag navn", + "backgroundColour": "Bakgrunnsfarge", + "createTag": "Opprett tag", + "editTag": "Rediger tag", + "updateTag": "Oppdater taggen", + "deleteTag": "Slett tag", + "confirmDelete": "Vil du slette «{name}»?", + "noTags": "Ingen tagger ennå", + "colId": "ID", + "colTag": "Tag", + "colColour": "Farge", + "colUsedBy": "Brukt av", + "colCreated": "Opprettet", + "colActions": "Handlinger", + "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": "Flate kategorier", + "publicRooms": "Offentlige rom", + "addCategory": "Legg til kategori", + "editCategory": "Rediger kategori", + "deleteCategory": "Slett kategori", + "categoryName": "Kategorinavn", + "categoryNamePlaceholder": "f.eks. Chill & Chat", + "categoryOrder": "Bestill", + "roomName": "Romnavn", + "roomNamePlaceholder": "f.eks. Velkommen Lounge", + "roomId": "Rom ID", + "roomIdPlaceholder": "Numerisk rom-ID", + "save": "Lagre", + "cancel": "Avbryt", + "noCategories": "Ingen kategorier ennå", + "noPublicRooms": "Ingen offentlige rom ennå", + "colId": "ID", + "colName": "Navn", + "colOrder": "Bestill", + "colRooms": "Rom", + "colActions": "Handlinger", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Hjelpesenter", + "subtitle": "Støtteoppføringer og FAQ-administrasjon", + "entries": "Oppføringer", + "newEntry": "+ Ny oppføring", + "edit": "Rediger", + "delete": "Slett", + "noEntries": "Ingen oppføringer ennå", + "confirmDelete": "Vil du slette «{title}»?", + "colId": "ID", + "colTitle": "Tittel", + "colCategory": "Kategori", + "colCreated": "Opprettet", + "colActions": "Handlinger", + "form": { + "title": "Tittel", + "titlePlaceholder": "Oppføringstittel", + "category": "Kategori", + "categoryPlaceholder": "Velg kategori", + "body": "Kropp", + "bodyPlaceholder": "Skriv svaret...", + "save": "Lagre oppføringen", + "saving": "Lagrer …", + "deleteEntry": "Slett oppføring", + "cancel": "Avbryt" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Annonser", + "subtitle": "Administrer hotellannonser og reklamebannere", + "newAd": "+ Ny annonse", + "edit": "Rediger", + "delete": "Slett", + "noAds": "Ingen annonser ennå", + "confirmDelete": "Vil du slette denne annonsen?", + "colId": "ID", + "colName": "Navn", + "colImage": "Bilde", + "colUrl": "URL", + "colViews": "Visninger", + "colStatus": "Status", + "colCreated": "Opprettet", + "colActions": "Handlinger", + "form": { + "name": "Navn", + "namePlaceholder": "Annonsenavn", + "image": "Bilde-URL", + "imagePlaceholder": "https://example.com/banner.png", + "url": "Mål-URL", + "urlPlaceholder": "https://example.com", + "enabled": "Aktivert", + "save": "Lagre annonsen", + "saving": "Lagrer …", + "deleteAd": "Slett annonse", + "cancel": "Avbryt" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Skrivbare bokser", + "subtitle": "Innholdspaneler vist på tvers av hotellet og CMS", + "newBox": "Ny boks", + "edit": "Rediger", + "delete": "Slett", + "noBoxes": "Ingen skrivbare bokser ennå", + "confirmDelete": "Vil du slette denne boksen?", + "colId": "ID", + "colName": "Navn", + "colLocation": "Beliggenhet", + "colUpdated": "Oppdatert", + "colActions": "Handlinger", + "form": { + "name": "Navn", + "namePlaceholder": "Boksnavn", + "location": "Beliggenhet", + "locationPlaceholder": "f.eks. hjemmeside, sidefelt", + "content": "Innhold", + "contentPlaceholder": "Skriv innholdet i boksen...", + "enabled": "Aktivert", + "save": "Lagre boks", + "saving": "Lagrer …", + "deleteBox": "Slett boks", + "cancel": "Avbryt", + "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": "Fotomoderering", + "subtitle": "Nylige kamerabilder i spillet", + "delete": "Slett", + "approve": "Godkjenne", + "noPhotos": "Ingen bilder å moderere", + "confirmDelete": "Vil du slette dette bildet permanent?", + "colId": "ID", + "colPreview": "Forhåndsvisning", + "colUser": "Bruker", + "colRoom": "Rom", + "colTimestamp": "Tidsstempel", + "colActions": "Handlinger", + "photoAlt": "Brukerbilde nr. {id}", + "byUser": "av {username}", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Brukere", + "subtitle": "Bla gjennom, søk og administrer hotellkontoer", + "search": "Søk", + "searchPlaceholder": "Søk etter brukernavn, e-post eller ID...", + "searchResults": "{count, plural, one {# result} other {# results}} for \"{query}\"", + "noResults": "Ingen brukere funnet", + "colId": "ID", + "colUsername": "Brukernavn", + "colEmail": "E-post", + "colRank": "Rangering", + "colOnline": "Online", + "colRegistered": "Registrert", + "colLastOnline": "Sist online", + "colActions": "Handlinger", + "yes": "Ja", + "no": "Nei", + "edit": "Rediger", + "setRank": "Sett rangering", + "disconnect": "Koble fra", + "alert": "Varsel", + "ban": "Forbud", + "detail": { + "title": "Bruker: {username}", + "subtitle": "Kontodetaljer og administrasjon", + "overview": "Oversikt", + "actions": "Handlinger", + "username": "Brukernavn", + "email": "E-post", + "motto": "Motto", + "rank": "Rangering", + "credits": "Studiepoeng", + "duckets": "Duckets", + "diamonds": "Diamanter", + "online": "Online", + "registered": "Registrert", + "lastOnline": "Sist online", + "ipAddress": "IP-adresse", + "machineId": "Maskin-ID", + "sendAlert": "Send varsel", + "sendMessage": "Send melding", + "disconnectUser": "Koble fra bruker", + "banUser": "Ban bruker", + "resetPassword": "Tilbakestill passord", + "deleteUser": "Slett bruker", + "confirmDelete": "Er du sikker på at du vil slette {username}? Dette kan ikke angres.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Rediger bruker: {username}", + "subtitle": "Endre kontodetaljer", + "username": "Brukernavn", + "usernamePlaceholder": "Brukernavn", + "email": "E-post", + "emailPlaceholder": "bruker@eksempel.com", + "motto": "Motto", + "mottoPlaceholder": "Brukermotto", + "rank": "Rangering", + "credits": "Studiepoeng", + "duckets": "Duckets", + "diamonds": "Diamanter", + "save": "Lagre endringer", + "saving": "Lagrer …", + "cancel": "Avbryt" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Forbud", + "subtitle": "Administrer konto-, IP- og maskinforbud", + "newBan": "Nytt forbud", + "edit": "Rediger", + "delete": "Slett", + "noBans": "Ingen forbud ennå", + "confirmDelete": "Vil du fjerne dette forbudet?", + "colId": "ID", + "colValue": "Verdi", + "colType": "Type", + "colReason": "Grunn", + "colBannedBy": "Utestengt av", + "colExpires": "Utløper", + "colCreated": "Opprettet", + "colActions": "Handlinger", + "form": { + "value": "Verdi", + "valuePlaceholder": "Brukernavn, IP eller maskin-ID", + "type": "Type", + "typeUser": "Bruker", + "typeIp": "IP", + "typeMachine": "Maskin", + "reason": "Grunn", + "reasonPlaceholder": "Ban grunn", + "expiresAt": "Utløper kl", + "permanent": "Permanent", + "save": "Lagre forbud", + "saving": "Lagrer …", + "cancel": "Avbryt" + }, + "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-administrasjon", + "subtitle": "Administrer IP-hviteliste og svarteliste", + "whitelist": "Hviteliste", + "blacklist": "Svarteliste", + "addIp": "Legg til IP", + "ipAddress": "IP-adresse", + "ipAddressPlaceholder": "f.eks. 127.0.0.1", + "reason": "Grunn", + "reasonPlaceholder": "Årsak til oppføring", + "add": "Legg til", + "remove": "Fjern", + "confirmRemove": "Vil du fjerne denne IP-en fra {list}?", + "noWhitelistedIps": "Ingen hvitelistede IP-er", + "noBlacklistedIps": "Ingen svartelistede IP-er", + "colIp": "IP", + "colReason": "Grunn", + "colAdded": "Lagt til", + "colActions": "Handlinger", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "VPN / proxy-deteksjon", + "subtitle": "Konfigurer VPN- og proxy-deteksjonsinnstillinger", + "enabled": "Aktivert", + "apiKey": "API-nøkkel", + "apiKeyPlaceholder": "Din VPN-deteksjons-API-nøkkel", + "apiKeyHint": "La stå tomt for å deaktivere", + "blockOnDetect": "Blokker ved deteksjon", + "blockOnDetectHint": "Blokkér automatisk brukere som oppdages bak en VPN eller proxy", + "save": "Lagre innstillinger", + "saving": "Lagrer …", + "settingsSaved": "VPN-innstillingene er lagret", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Personalsøknader", + "subtitle": "Ventende og vurderte personalsøknader", + "pending": "Venter", + "approved": "Godkjent", + "rejected": "Avvist", + "noApplications": "Ingen søknader ennå", + "colId": "ID", + "colApplicant": "Søker", + "colPosition": "Posisjon", + "colStatus": "Status", + "colSubmitted": "Sendt inn", + "colActions": "Handlinger", + "review": "Gjennomgå", + "approve": "Godkjenne", + "reject": "Avvis", + "confirmApprove": "Godkjenne {username} for {position}?", + "confirmReject": "Vil du avslå {username} sin søknad om {position}?", + "detail": { + "title": "Søknad fra {username}", + "subtitle": "For {position}", + "about": "Om søkeren", + "message": "Søknadsmelding", + "status": "Status", + "submitted": "Sendt inn", + "noMessage": "Ingen melding oppgitt" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Lag", + "subtitle": "Definer personalrangeringsnavn og beskrivelser", + "addRank": "Legg til rangering", + "editRank": "Rediger rangering", + "deleteRank": "Slett rangering", + "noTeams": "Ingen rangeringsdefinisjoner ennå", + "confirmDelete": "Vil du slette definisjonen av rangering {id}?", + "colId": "ID", + "colRank": "Rangering", + "colName": "Navn", + "colBadge": "Merke", + "colColour": "Farge", + "colActions": "Handlinger", + "form": { + "rankId": "Rangerings-ID", + "rankIdPlaceholder": "Numerisk rangerings-ID", + "name": "Navn", + "namePlaceholder": "f.eks. Administrator", + "badge": "Merkekode", + "badgePlaceholder": "f.eks. ADM001", + "colour": "Farge", + "colourPlaceholder": "f.eks. #ff0000", + "save": "Lagre teamdefinisjon", + "saving": "Lagrer …", + "cancel": "Avbryt" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Tillatelser", + "subtitle": "Administrer rangeringsbaserte tillatelser for administrasjonspanelet", + "addPermission": "Legg til tillatelse", + "editPermission": "Rediger tillatelse", + "deletePermission": "Slett tillatelse", + "noPermissions": "Ingen tillatelser er konfigurert ennå", + "confirmDelete": "Vil du slette denne tillatelsen?", + "colId": "ID", + "colRank": "Rangering", + "colPermission": "Tillatelse", + "colCreated": "Opprettet", + "colActions": "Handlinger", + "form": { + "rankId": "Rangerings-ID", + "rankIdPlaceholder": "Minimumsrangering kreves", + "permission": "Tillatelsesnøkkel", + "permissionPlaceholder": "f.eks. admin.articles.manage", + "save": "Lagre tillatelsen", + "saving": "Lagrer …", + "cancel": "Avbryt" + } + }, + "catalog": { + "title": "Katalog", + "subtitle": "Bla gjennom og administrer katalogsider og elementer", + "pages": "Sider", + "items": "Varer", + "addPage": "Legg til side", + "editPage": "Rediger side", + "deletePage": "Slett siden", + "addItem": "Legg til element", + "editItem": "Rediger element", + "deleteItem": "Slett element", + "noPages": "Ingen katalogsider ennå", + "noItems": "Ingen elementer på denne siden", + "confirmDeletePage": "Vil du slette katalogsiden «{name}»?", + "confirmDeleteItem": "Vil du slette dette elementet?", + "colId": "ID", + "colName": "Navn", + "colIcon": "Ikon", + "colOrder": "Bestill", + "colItems": "Varer", + "colEnabled": "Aktivert", + "colActions": "Handlinger", + "colItemId": "Vare-ID", + "colItemName": "Varenavn", + "colCostCredits": "Kostnad (kreditter)", + "colCostPoints": "Kostnad (poeng)", + "colLimited": "Begrenset", + "pageForm": { + "name": "Navn", + "namePlaceholder": "Sidenavn", + "icon": "Ikon ID", + "iconPlaceholder": "Numerisk ikon-ID", + "order": "Bestill", + "enabled": "Aktivert", + "parent": "Overordnet side", + "parentNone": "Ingen (root)", + "save": "Lagre siden", + "saving": "Lagrer …", + "cancel": "Avbryt" + }, + "itemForm": { + "itemId": "Vare-ID", + "itemName": "Varenavn", + "costCredits": "Kostnad i studiepoeng", + "costDuckets": "Kostnad i duckets", + "costDiamonds": "Kostnad i diamanter", + "limitedStack": "Begrenset stabelstørrelse", + "limitedSold": "Begrenset solgt", + "save": "Lagre element", + "saving": "Lagrer …", + "cancel": "Avbryt" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Handle", + "subtitle": "Administrere pakker og bestillinger", + "packages": "Pakker", + "orders": "Bestillinger", + "newPackage": "+ Ny pakke", + "edit": "Rediger", + "delete": "Slett", + "viewOrder": "Visning", + "noPackages": "Ingen butikkpakker ennå", + "noOrders": "Ingen bestillinger ennå", + "confirmDelete": "Vil du slette denne pakken?", + "colId": "ID", + "colName": "Navn", + "colPrice": "Pris", + "colCurrency": "Valuta", + "colType": "Type", + "colSold": "Solgt", + "colEnabled": "Aktivert", + "colActions": "Handlinger", + "colOrderId": "Bestillings-ID", + "colCustomer": "Kunde", + "colPackage": "Pakke", + "colAmount": "Beløp", + "colStatus": "Status", + "colDate": "Dato", + "statusPending": "Venter", + "statusCompleted": "Fullført", + "statusRefunded": "Refundert", + "form": { + "name": "Navn", + "namePlaceholder": "Pakkenavn", + "description": "Beskrivelse", + "descriptionPlaceholder": "Pakkebeskrivelse", + "price": "Pris", + "currency": "Valuta", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Type", + "typeCredits": "Studiepoeng", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamanter", + "typeBadge": "Merke", + "typeFurni": "Møbler", + "typeRank": "Rangering", + "amount": "Beløp", + "badgeCode": "Merkekode", + "badgeCodePlaceholder": "f.eks. VIP001", + "rankId": "Rangerings-ID", + "furniItems": "Møbelartikler", + "enabled": "Aktivert", + "save": "Lagre pakken", + "saving": "Lagrer …", + "cancel": "Avbryt", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "Transaksjoner", + "subtitle": "PayPal betalingslogg", + "noTransactions": "Ingen transaksjoner ennå", + "colId": "ID", + "colUser": "Bruker", + "colAmount": "Beløp", + "colCurrency": "Valuta", + "colPackage": "Pakke", + "colStatus": "Status", + "colDate": "Dato", + "colActions": "Handlinger", + "statusCompleted": "Fullført", + "statusPending": "Venter", + "statusFailed": "Mislyktes", + "statusRefunded": "Refundert", + "detail": { + "title": "Transaksjon nr. {id}", + "paypalId": "PayPal ID", + "payerEmail": "Betalers e-post", + "grossAmount": "Bruttobeløp", + "fee": "Gebyr", + "netAmount": "Netto beløp" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Butikkkuponger", + "subtitle": "Administrer innløselige kupongkoder", + "newVoucher": "+ Ny kupong", + "edit": "Rediger", + "delete": "Slett", + "noVouchers": "Ingen kuponger ennå", + "confirmDelete": "Vil du slette kupongen \"{code}\"?", + "colId": "ID", + "colCode": "Kode", + "colValue": "Verdi", + "colType": "Type", + "colUses": "Bruker / Maks", + "colExpires": "Utløper", + "colCreated": "Opprettet", + "colActions": "Handlinger", + "form": { + "code": "Kode", + "codePlaceholder": "f.eks. SOMMER 2025", + "value": "Verdi", + "type": "Type", + "typeCredits": "Studiepoeng", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamanter", + "typeBadge": "Merke", + "typeFurni": "Møbler", + "typeRank": "Rangering", + "badgeCode": "Merkekode", + "badgeCodePlaceholder": "f.eks. VIP001", + "rankId": "Rangerings-ID", + "maxUses": "Max bruker", + "maxUsesPlaceholder": "0 = ubegrenset", + "expiresAt": "Utløper kl", + "enabled": "Aktivert", + "save": "Lagre kupong", + "saving": "Lagrer …", + "cancel": "Avbryt", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Abonnementer", + "subtitle": "Aktive gjentakende abonnementer", + "noSubscriptions": "Ingen aktive abonnementer", + "cancel": "Avbryt", + "confirmCancel": "Vil du avslutte abonnementet på {username}?", + "colId": "ID", + "colUser": "Bruker", + "colPackage": "Pakke", + "colAmount": "Beløp", + "colInterval": "Intervall", + "colStarted": "Startet", + "colNextBilling": "Neste fakturering", + "colStatus": "Status", + "colActions": "Handlinger", + "statusActive": "Aktiv", + "statusCancelled": "Kansellert", + "statusExpired": "Utløpt", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Sjeldne verdier", + "subtitle": "Administrer sjeldne verdikategorier og varepriser", + "categories": "Kategorier", + "items": "Varer", + "addCategory": "Legg til kategori", + "editCategory": "Rediger kategori", + "deleteCategory": "Slett kategori", + "noCategories": "Ingen sjeldne verdikategorier ennå", + "confirmDeleteCategory": "Vil du slette kategorien «{name}» og alle dens elementer?", + "colId": "ID", + "colName": "Navn", + "colItems": "Varer", + "colUpdated": "Oppdatert", + "colActions": "Handlinger", + "colItemName": "Varenavn", + "colCredits": "Studiepoeng", + "colPoints": "Poeng", + "colPointType": "Punkttype", + "categoryForm": { + "name": "Navn", + "namePlaceholder": "Kategorinavn", + "save": "Lagre kategori", + "saving": "Lagrer …", + "cancel": "Avbryt" + }, + "itemForm": { + "itemName": "Varenavn", + "itemNamePlaceholder": "f.eks. Throne", + "credits": "Kredittverdi", + "points": "Poengverdi", + "pointType": "Punkttype", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Diamanter", + "save": "Lagre element", + "saving": "Lagrer …", + "cancel": "Avbryt", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Merker", + "subtitle": "Last opp, gi og administrer merkekatalog", + "upload": "Last opp", + "giveBadge": "Gi merke", + "catalogue": "Katalog", + "uploadTitle": "Last opp et nytt merke", + "uploadSubtitle": "Last opp en merkebildefil", + "badgeCode": "Merkekode", + "badgeCodePlaceholder": "f.eks. VIP001", + "badgeFile": "Merkefil", + "badgeFileHint": "PNG eller GIF, anbefalt 40x40", + "uploadButton": "Last opp", + "uploading": "Laster opp …", + "giveTitle": "Gi merket til brukeren", + "giveSubtitle": "Gi et merke til en bestemt bruker", + "username": "Brukernavn", + "usernamePlaceholder": "Målbrukernavn", + "giveButton": "Gi merke", + "giving": "Å gi …", + "catalogueTitle": "Merkekatalog", + "catalogueSubtitle": "Alle tilgjengelige merker på hotellet", + "noBadges": "Ingen merker i katalogen", + "search": "Søk merker", + "searchPlaceholder": "Søk etter kode eller navn...", + "colCode": "Kode", + "colImage": "Bilde", + "colName": "Navn", + "colDescription": "Beskrivelse", + "colActions": "Handlinger", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Prestasjoner", + "subtitle": "Skrivebeskyttet liste over prestasjoner i spillet", + "noAchievements": "Ingen prestasjoner er konfigurert", + "colId": "ID", + "colName": "Navn", + "colCategory": "Kategori", + "colLevels": "Nivåer", + "colReward": "Belønning", + "colProgress": "Fremgang", + "levelLabel": "Nivå {level}", + "rewardCredits": "{count} studiepoeng", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Kalenderkampanjer", + "subtitle": "Skrivebeskyttet liste over kalenderkampanjer og hendelser", + "noCampaigns": "Ingen kalenderkampanjer ennå", + "colId": "ID", + "colName": "Navn", + "colStart": "Start", + "colEnd": "Slutt", + "colType": "Type", + "colReward": "Belønning", + "colActions": "Handlinger", + "detail": { + "title": "Kampanje: {name}", + "subtitle": "Kalenderbegivenhetsdetaljer", + "days": "Dager", + "dayLabel": "Dag {day}", + "reward": "Belønning", + "noDays": "Ingen dager er konfigurert for denne kampanjen", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Radiomoderasjon", + "subtitle": "Siste rop, DJ-applikasjoner og program på lufta (25 siste av hver).", + "moderation": "Moderasjon", + "shouts": "Roper", + "applications": "Søknader", + "schedules": "Tidsplaner", + "settings": "Innstillinger", + "embed": "Bygg inn", + "ranks": "Rangerer", + "history": "Historie", + "apiKeys": "API-nøkler", + "points": "Poeng", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Radioovervåking", + "subtitle": "Skrivebeskyttet direkte sonde for de konfigurerte radioendepunktene (radio_now_playing_api_url, radio_listeners_api_url). Hver forespørsel mislykkes myk med en {timeout}s timeout – ingen data skrives. Konfigurer URL-er under Innstillinger.", + "stream": "Strøm", + "online": "Online", + "offline": "Frakoblet", + "notConfigured": "Ikke konfigurert", + "nowPlaying": "Spiller nå", + "nowPlayingApi": "Nå-spiller API", + "listenersApi": "Listeners API", + "listeners": "Lyttere", + "currentSong": "Gjeldende sang", + "bitrate": "Bitrate", + "status": "Status", + "noNowPlayingHint": "ingen API-sett som nå spilles", + "noListenersHint": "ingen lyttere API satt", + "endpointDiagnostics": "Endepunktdiagnostikk", + "diagnosticsLegend": "OK: tilgjengelig · WARN: ikke konfigurert · ERROR: forespørselen mislyktes eller fikk tidsavbrudd.", + "streamUrl": "Strøm URL", + "unreachable": "uoppnåelig", + "refresh": "Oppdater" + }, + "user": "Bruker", + "message": "Melding", + "posted": "Lagt ut", + "realName": "Ekte navn", + "age": "Alder", + "style": "Stil", + "applied": "Påført", + "day": "dag", + "start": "Start", + "end": "Slutt", + "show": "Vis", + "status": "Status", + "active": "aktive", + "inactive": "inaktiv", + "hidden": "skjult", + "activeSchedules": "Aktive tidsplaner", + "noShouts": "Ingen rop for å moderere", + "noApplications": "Ingen søknader sendt inn.", + "noSchedules": "Ingen tidsplaner er konfigurert.", + "deleteShout": "Slett", + "confirmDeleteShout": "Vil du slette dette ropet?", + "pendingApplications": "Ventende søknader", + "settingsForm": { + "title": "Radioinnstillinger", + "subtitle": "Redigeringer skriver til website_settings (radio_*-taster) og bryter cachen for kjøretidsinnstillinger. Boolske brukere bruker 0/1.", + "enabled": "Aktivert", + "disabled": "Deaktivert", + "totalKeys": "Totalt nøkler", + "configured": "Konfigurert", + "curatedHint": "kurerte nøkler med en verdi", + "customKeys": "Egendefinerte nøkler", + "saveAll": "Lagre alle", + "singleKey": "Legg til / overskriv en enkelt nøkkel", + "keyPlaceholder": "radio_tilpasset_nøkkel", + "valuePlaceholder": "verdi", + "commentPlaceholder": "kommentar (valgfritt)", + "saveSingle": "Lagre", + "otherSettings": "Andre radioinnstillinger", + "dbError": "Kunne ikke laste inn innstillinger (database utilgjengelig). Standarder vil bli opprettet ved lagring." + }, + "embedPage": { + "title": "Radio Embed", + "subtitle": "Kopiklar innbyggingskode for direktesendingen. Skrivebeskyttet - ingenting her skriver til databasen. Konfigurer strømnettadressen i Radioinnstillinger (radio_stream_url).", + "streamUrl": "Strøm URL", + "configured": "Konfigurert", + "missing": "Mangler", + "radioName": "Radionavn", + "nowPlayingApi": "Nå-spiller API", + "set": "Sett", + "notSet": "Ikke satt", + "noStreamUrl": "Ingen strømnettadresse er konfigurert", + "noStreamUrlText": "Det er ingen radio_stream_url satt, så det er ingenting å bygge inn ennå.", + "goToSettings": "Gå til Radioinnstillinger", + "livePreview": "Live forhåndsvisning", + "livePreviewText": "Dette er den nakne audio-spilleren slik besøkende vil se den. Trykk på play for å bekrefte at strømmen er tilgjengelig.", + "source": "Kilde", + "audioSnippet": "Utdrag av lydspiller", + "audioSnippetDesc": "Drop-in HTML5-lydspiller pekte rett på strømmen. Fungerer overalt hvor vanlig HTML er tillatt.", + "iframeSnippet": "Iframe-omslagskodebit", + "iframeSnippetDesc": "Bygger inn nettstedets egen radiospillerside i en iframe – beholder stylingen og informasjonen som spilles nå. Juster bredde/høyde etter smak.", + "audioUnsupported": "Nettleseren din støtter ikke lydelementet." + }, + "banners": { + "title": "Bannere", + "heading": "Radiobannere", + "description": "Kampanjebannere vist på radiosiden, sortert etter sorteringsrekkefølge.", + "addBanner": "Legg til banner", + "createBanner": "Lag banner", + "deleteBanner": "Slett banner", + "noBanners": "Ingen bannere ennå – legg til en ovenfor.", + "existing": "Eksisterende bannere ({count})", + "save": "Lagre", + "delete": "Slett", + "byUser": "av bruker {id}", + "active": "aktive", + "hidden": "skjult", + "bannerAlt": "Radio banner", + "statusActive": "Aktiv", + "statusHidden": "Skjult", + "dbError": "Kunne ikke laste inn bannere (database utilgjengelig).", + "form": { + "imagePath": "Bildebane / URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Tittel", + "description": "Beskrivelse", + "sortOrder": "Sorteringsrekkefølge", + "active": "Aktiv" + } + }, + "ranksForm": { + "title": "Radio rangerer", + "subtitle": "DJ / stab-rangeringer kan tildeles på radioapplikasjoner.", + "dbError": "Kunne ikke laste inn rangeringer (database utilgjengelig).", + "active": "Aktiv", + "addRank": "Legg til rangering", + "name": "Navn", + "badgeCode": "Merkekode", + "description": "Beskrivelse", + "createRank": "Opprett rangering", + "existing": "Eksisterende rangeringer ({count})", + "noRanks": "Ingen rangeringer ennå - legg til en ovenfor.", + "activeLabel": "aktive", + "inactiveLabel": "inaktiv", + "save": "Lagre", + "deleteRank": "Slett rangering #{id}" + }, + "historyPage": { + "title": "Radiospillhistorie", + "subtitle": "Tidligere DJ-show og sendetid (radio_historie), siste først. Skrivebeskyttet logg over hvem som var på lufta, når og hvor mange lyttere som stilte inn.", + "dbError": "Kunne ikke laste inn radiohistorikk (database utilgjengelig).", + "showsLogged": "Viser logget", + "onAirNow": "På lufta nå", + "uniqueDjs": "Unike DJ-er", + "peakListeners": "Topplyttere", + "empty": "Ingen radiohistorikk registrert ennå.", + "showLog": "Vis logg ({count})", + "colDj": "DJ", + "colShow": "Vis", + "colStarted": "Startet", + "colEnded": "Avsluttet", + "colAirtime": "Sendetid", + "colListeners": "Lyttere", + "colNotes": "Notater", + "onAir": "på lufta" + }, + "apiKeysForm": { + "title": "Radio API-nøkler", + "subtitle": "API-nøkler for eksterne radiointegrasjoner (radio_api_keys). Nøkler genereres på serversiden og vises maskert - kopier hele verdien fra databasen når de utstedes.", + "dbError": "Kunne ikke laste inn API-nøkler (database utilgjengelig).", + "totalKeys": "Totalt nøkler", + "active": "Aktiv", + "inactive": "Inaktiv", + "generateKey": "Generer nøkkel", + "generateHint": "Den hemmelige nøkkelen genereres automatisk med kryptografisk tilfeldighet - du skriver den ikke inn.", + "name": "Navn", + "namePlaceholder": "AzureCast-broen", + "rateLimit": "Takstgrense (forespørsler/min)", + "allowedIps": "Tillatte IP-er (valgfritt)", + "allowedIpsPlaceholder": "kommadelt, blank = hvilken som helst", + "generate": "Generer nøkkel", + "existingKeys": "Eksisterende nøkler ({count})", + "noKeys": "Ingen API-nøkler ennå - generer en ovenfor.", + "colName": "Navn", + "colKey": "Nøkkel", + "colAllowedIps": "Tillatte IP-er", + "colRateLimit": "Satsgrense", + "colLastUsed": "Sist brukt", + "colExpires": "Utløper", + "colStatus": "Status", + "colActions": "Handlinger", + "maskedHint": "Bare de første 8 tegnene vises", + "any": "noen", + "activeLabel": "aktive", + "inactiveLabel": "inaktiv", + "deactivate": "Deaktiver", + "activate": "Aktiver", + "delete": "Slett" + }, + "pointsForm": { + "title": "Radiolytterpoeng", + "subtitle": "Belønn lyttere med valuta for tid brukt på radio. Redigeringer skriver til website_settings (radio_points_*-taster) og bryter hurtigbufferen for kjøretidsinnstillinger. Boolske brukere bruker 0/1.", + "saved": "Lagret", + "points": "Poeng", + "enabled": "Aktivert", + "disabled": "Deaktivert", + "perMinute": "Per minutt", + "paidIn": "betalt i {currency}", + "maxPerDay": "Maks / dag", + "unlimited": "Ubegrenset", + "minListeners": "Min lyttere", + "settings": "Innstillinger", + "pointsEnabled": "Poeng aktivert", + "pointsEnabledHint": "Hovedbryter for tildeling av lytterpoeng.", + "currency": "Valuta", + "currencyHint": "Hvilken lommebok poengene betales inn i.", + "pointsPerMinute": "Poeng per minutt", + "pointsPerMinuteHint": "Beløp tildelt for hvert hele minutt med lytting.", + "maxPerDayHint": "Daglig tak per bruker. Bruk 0 for ubegrenset.", + "minListenersHint": "Poeng tildeles kun når minst så mange personer er innstilt.", + "save": "Lagre poenginnstillinger" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Reservespilleliste (radio_auto_dj_playlist) radioen roterer gjennom når ingen live DJ strømmer. Sortert etter sorteringsrekkefølge og deretter tittel.", + "dbError": "Kunne ikke laste AutoDJ-spillelisten (database utilgjengelig).", + "tracks": "Spor", + "active": "Aktiv", + "inactive": "Inaktiv", + "addTrack": "Legg til spor", + "titlePlaceholder": "Sportittel", + "artist": "Kunstner", + "album": "Album", + "artworkUrl": "Artwork URL", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Varighet (sekunder)", + "durationPlaceholder": "f.eks. 215", + "sortOrder": "Sorteringsrekkefølge", + "playlist": "Spilleliste ({count})", + "noTracks": "Ingen AutoDJ-spor ennå – legg til et ovenfor.", + "colOrder": "Bestill", + "colTitle": "Tittel", + "colArtist": "Kunstner", + "colAlbum": "Album", + "colDuration": "Varighet", + "colPlays": "Spiller", + "colLastPlayed": "Sist spilt", + "colStatus": "Status", + "colActions": "Handlinger", + "activeLabel": "aktive", + "inactiveLabel": "inaktiv", + "deactivate": "Deaktiver", + "activate": "Aktiver", + "delete": "Slett", + "trackTitle": "Tittel" + }, + "moderationPage": { + "title": "DJ-moderasjon", + "subtitle": "Se gjennom og fjern radiorop (50 nyeste).", + "recentShouts": "Nylige rop ({count})" + } + }, + "commandocentrum": { + "title": "Kommandosenter", + "subtitle": "Diagnostikk, RCON-kontroller og brukeradministrasjon", + "diagnostics": "Diagnostikk", + "rcon": "RCON", + "userActions": "Brukerhandlinger", + "diagnosticsTitle": "Emulatordiagnostikk", + "memoryUsage": "Minnebruk", + "uptime": "Oppetid", + "onlineUsers": "Online brukere", + "roomsLoaded": "Rom lastet", + "refresh": "Oppdater", + "rconTitle": "RCON-kommandoer", + "rconPlaceholder": "Skriv inn RCON-kommando...", + "rconSend": "Send", + "rconSending": "Sender …", + "rconResponse": "Svar", + "userActionsTitle": "Brukerhandlinger", + "username": "Brukernavn", + "usernamePlaceholder": "Målbrukernavn", + "action": "Handling", + "execute": "Utfør", + "actions": { + "disconnect": "Koble fra", + "alert": "Send varsel", + "giveCredits": "Gi studiepoeng", + "giveBadge": "Gi merke", + "givePoints": "Gi poeng", + "ban": "Forbud", + "kick": "Kick" + }, + "messagePlaceholder": "Melding (for varsler)...", + "amountPlaceholder": "Beløp …", + "badgePlaceholder": "Merkekode …", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Emulatorkonfig", + "subtitle": "Se og rediger emulatorinnstillinger og lokale tekster", + "settings": "Innstillinger", + "texts": "Tekster", + "search": "Søk", + "searchPlaceholder": "Søk nøkler...", + "noSettings": "Ingen innstillinger funnet", + "noTexts": "Ingen tekster funnet", + "edit": "Rediger", + "save": "Lagre", + "saving": "Lagrer …", + "cancel": "Avbryt", + "colKey": "Nøkkel", + "colValue": "Verdi", + "colType": "Type", + "colActions": "Handlinger", + "editDialog": { + "title": "Rediger: {key}", + "value": "Verdi", + "valuePlaceholder": "Skriv inn verdi …", + "save": "Lagre endringer", + "cancel": "Avbryt" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Varsler", + "subtitle": "Send varsler for hele hotellet og se nylige varsler", + "sendAlert": "Send hotellvarsel", + "recentAlerts": "Nylige varsler ({count})", + "noRecentAlerts": "Ingen nylige varsler", + "form": { + "title": "Varseltittel", + "titlePlaceholder": "f.eks. Servervedlikehold på 10 minutter", + "message": "Varslingsmelding", + "messagePlaceholder": "Skriv varselmeldingen...", + "type": "Type", + "typeHotel": "Alarm over hele hotellet", + "typeStaff": "Kun personale", + "urgent": "Haster", + "send": "Send varsel", + "sending": "Sender …", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "ID", + "colTitle": "Tittel", + "colSentBy": "Sendt av", + "colType": "Type", + "colDate": "Dato", + "colActions": "Handlinger", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Personalets aktiviteter", + "subtitle": "Revisjonsspor for ansattes handlinger i administrasjonspanelet", + "noLogs": "Ingen personalaktivitet logget ennå", + "colId": "ID", + "colUser": "Bruker", + "colAction": "Handling", + "colTarget": "Mål", + "colDescription": "Beskrivelse", + "colIp": "IP", + "colTimestamp": "Tidsstempel", + "filterByUser": "Filtrer etter bruker...", + "filterByAction": "Filtrer etter handling...", + "clearFilters": "Tøm filtre", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Ordfilter", + "subtitle": "Administrer filtrerte ord og uttrykk på hotellet", + "addWord": "Legg til ord", + "addWords": "Legg til ord", + "noWords": "Ingen filtrerte ord ennå", + "confirmDelete": "Vil du fjerne «{word}» fra filteret?", + "colId": "ID", + "colWord": "Word", + "colAddedBy": "Lagt til av", + "colCreated": "Opprettet", + "colActions": "Handlinger", + "form": { + "word": "Word", + "wordPlaceholder": "f.eks. dårlig ord", + "addMore": "Legg til flere ord (ett per linje)", + "save": "Legg til filter", + "saving": "Lagrer …", + "cancel": "Avbryt" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Vedlikeholdsmodus", + "subtitle": "Aktiver eller deaktiver vedlikehold for hele hotellet", + "enabled": "Vedlikeholdsmodus er aktivert", + "disabled": "Vedlikeholdsmodus er deaktivert", + "enable": "Aktiver vedlikehold", + "disable": "Deaktiver vedlikehold", + "message": "Vedlikeholdsmelding", + "messagePlaceholder": "Vi kommer snart tilbake!", + "staffAccess": "Gi personalet tilgang under vedlikehold", + "save": "Lagre innstillinger", + "saving": "Lagrer …", + "confirmEnable": "Aktivering av vedlikehold vil hindre alle ikke-ansatte brukere fra å få tilgang til hotellet. Fortsette?", + "confirmDisable": "Deaktivere vedlikeholdsmodus og gjenopprette tilgang for alle brukere?", + "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": "Rengjøringstillatelser", + "subtitle": "Konfigurer hvilke ranger som har tilgang til hvilke admin-seksjoner", + "addPermission": "Legg til tillatelse", + "editPermission": "Rediger tillatelse", + "deletePermission": "Slett tillatelse", + "noPermissions": "Ingen rengjøringstillatelser er konfigurert", + "confirmDelete": "Vil du slette denne tillatelsen?", + "colId": "ID", + "colRank": "Rangering", + "colSection": "Seksjon", + "colActions": "Handlinger", + "form": { + "rankId": "Rangerings-ID", + "rankIdPlaceholder": "Minste rangering", + "section": "Seksjonsnøkkel", + "sectionPlaceholder": "f.eks. admin.dashboard", + "save": "Lagre tillatelsen", + "saving": "Lagrer …", + "cancel": "Avbryt" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset Påført!", + "cleared": "All Tillatelser cleared!", + "invalidRank": "Invalid Rangering", + "testDone": "Test done: {count} Tillatelser found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Slett ALL Tillatelser? This Handling cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Tillatelse", + "colDescription": "Beskrivelse", + "colMinRank": "Min. Rangering", + "permissionKey": "Tillatelsesnøkkel", + "minRank": "Min. Rangering", + "description": "Beskrivelse", + "permissions": "Tillatelser", + "permissionsCount": "{count} Tillatelser", + "permission": "Tillatelse", + "highestMinRank": "Highest min. Rangering: {rank}", + "totalMinRank": "Total min. Rangering sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Rangerer", + "missingDeps": "{count} Mangler dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(Mangler)", + "rank": "Rangering", + "count": "Count", + "searchPermission": "Søk Tillatelser…", + "search": "Søk", + "manage": "Manage", + "importSelection": "Importer selection", + "noGroup": "Nei group", + "allGroups": "All groups", + "perGroup": "Tillatelser per group", + "perRank": "Tillatelser per Rangering", + "rankOverviewHint": "All Tillatelser grouped by the Rangering they are assigned to.", + "tabOverview": "Oversikt", + "tabManage": "Manage", + "tabImport": "Importer / Export", + "tabRanks": "Rangering Oversikt", + "tabPresets": "Forhåndsinnstillinger", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "Importer Tillatelser", + "importHint": "Paste a JSON array of Tillatelse objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "Importer", + "exportTitle": "Export Tillatelser", + "exportHint": "Export all Tillatelser as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Tillatelse Forhåndsinnstillinger", + "presetsHint": "Søk a predefined Sett of Tillatelser for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Moderasjon tools: Bruker lookup, Forbud, CFH handling, chat Logger.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Brukere, Rom, news, Innstillinger, Handle, events, radio & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including Tillatelse management and asset Importer.", + "applyPreset": "Søk preset", + "clearAll": "Clear all Tillatelser", + "testTitle": "Test Rangering access", + "testHint": "Enter a Rangering number to see which Tillatelser would be granted.", + "test": "Test", + "auditTitle": "Tillatelse audit log", + "auditHint": "All changes to Rengjøring Tillatelser are logged.", + "auditLogsAt": "Audit Logger are available on the Audit log page.", + "viewAuditLogs": "Visning audit Logger", + "importedWithErrors": "Imported {count} Tillatelser with {errors} errors", + "confirmClearAllDesc": "This will Fjern every Tillatelse entry from the database. Are you sure?", + "confirmDeletePermission": "Slett this Tillatelse permanently?", + "confirmBulkDelete": "Slett {count} selected Tillatelser?", + "deleteSelected": "Slett {count} selected", + "cancel": "Avbryt", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Bruker", + "auditAction": "Handling", + "auditTarget": "Mål", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Rom", + "subtitle": "Søk og administrer hotellrom", + "search": "Søk", + "searchPlaceholder": "Søk etter navn, eier eller ID...", + "searchResults": "{count, plural, one {# room} other {# rooms}} funnet for \"{query}\"", + "noResults": "Ingen rom funnet", + "colId": "ID", + "colName": "Navn", + "colOwner": "Eier", + "colUsers": "Brukere", + "colState": "stat", + "colCategory": "Kategori", + "colCreated": "Opprettet", + "colActions": "Handlinger", + "stateOpen": "Åpne", + "stateClosed": "Stengt", + "stateLocked": "Låst", + "stateInvisible": "Usynlig", + "detail": { + "title": "Rom: {name}", + "subtitle": "Eies av {owner}", + "overview": "Oversikt", + "actions": "Handlinger", + "description": "Beskrivelse", + "noDescription": "Ingen beskrivelse", + "owner": "Eier", + "users": "Brukere online", + "maxUsers": "Maks brukere", + "category": "Kategori", + "state": "stat", + "tags": "Tagger", + "noTags": "Ingen tagger", + "created": "Opprettet", + "deleteRoom": "Slett rom", + "confirmDelete": "Vil du slette rommet «{name}»? Dette kan ikke angres.", + "enterRoom": "Gå inn i rommet", + "changeOwner": "Bytt eier", + "changeOwnerPlaceholder": "Nytt brukernavn til eier" + } + }, + "emailTemplates": { + "title": "E-postmaler", + "subtitle": "Administrer transaksjonelle e-postmaler", + "newTemplate": "+ Ny mal", + "edit": "Rediger", + "delete": "Slett", + "noTemplates": "Ingen e-postmaler ennå", + "confirmDelete": "Vil du slette malen «{name}»?", + "colId": "ID", + "colName": "Navn", + "colSubject": "Emne", + "colKey": "Nøkkel", + "colUpdated": "Oppdatert", + "colActions": "Handlinger", + "form": { + "name": "Navn", + "namePlaceholder": "f.eks. Velkommen e-post", + "key": "Nøkkel", + "keyPlaceholder": "f.eks. velkomstepost", + "subject": "Emne", + "subjectPlaceholder": "Emnelinje på e-post", + "body": "Brødtekst (HTML)", + "bodyPlaceholder": "

Kjære {username},

", + "variables": "Tilgjengelige variabler", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Lagre malen", + "saving": "Lagrer …", + "cancel": "Avbryt", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Tema", + "subtitle": "Tilpass CMS-utseendet", + "presets": "Forhåndsinnstillinger", + "colours": "Farger", + "css": "CSS", + "presetsTitle": "Forhåndsinnstillinger for tema", + "presetsSubtitle": "Velg et forhåndsbygd fargevalg", + "applyPreset": "Søk", + "presetApplied": "Forhåndsinnstilling brukt: {preset}", + "customiseTitle": "Egendefinerte farger", + "primary": "Primær", + "secondary": "Sekundær", + "accent": "Aksent", + "background": "Bakgrunn", + "surface": "Overflate", + "text": "Tekst", + "saveColours": "Lagre farger", + "savingColours": "Lagrer …", + "cssTitle": "Tilpasset CSS", + "cssSubtitle": "Legg til tilpasset CSS for å overstyre temastiler", + "cssPlaceholder": "/* Din tilpassede CSS her */", + "saveCss": "Lagre CSS", + "savingCss": "Lagrer …", + "reset": "Tilbakestill til standardinnstillinger", + "confirmReset": "Vil du tilbakestille temaet til standardverdiene?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Mediebibliotek", + "subtitle": "Last opp og administrer mediefiler", + "upload": "Last opp", + "uploadTitle": "Last opp en fil", + "uploadSubtitle": "Dra og slipp eller klikk for å laste opp", + "uploadButton": "Velg fil", + "uploading": "Laster opp …", + "noFiles": "Ingen mediefiler ennå", + "delete": "Slett", + "confirmDelete": "Vil du slette denne filen permanent?", + "search": "Søk", + "searchPlaceholder": "Søk etter filnavn...", + "colPreview": "Forhåndsvisning", + "colName": "Navn", + "colSize": "Størrelse", + "colType": "Type", + "colUploaded": "Lastet opp", + "colActions": "Handlinger", + "copyUrl": "Kopier URL", + "urlCopied": "URL kopiert til utklippstavlen" + }, + "favicon": { + "title": "Favorittikon", + "subtitle": "Last opp og administrer nettstedets favorittikon", + "current": "Gjeldende favorittikon", + "uploadLabel": "Last opp favorittikon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO eller SVG. Maks 2 MB.", + "upload": "Last opp", + "uploading": "Laster opp …", + "delete": "Fjern", + "deleting": "Fjerner …", + "saved": "Favorittikonet ble lagret!", + "deleted": "Favorittikon ble fjernet!", + "error": "Noe gikk galt", + "confirmDelete": "Vil du fjerne favorittikonet? Nettstedet vil ikke lenger vise et tilpasset favorittikon.", + "generator": { + "title": "Generer favorittikon", + "text": "Tekst", + "bgColor": "Bakgrunnsfarge", + "textColor": "Tekstfarge", + "rounded": "Avrundede hjørner", + "save": "Lagre som favorittikon" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "CMS-innstillinger", + "subtitle": "Administrer nøkkel/verdi CMS-konfigurasjon", + "addSetting": "Legg til innstilling", + "edit": "Rediger", + "delete": "Slett", + "noSettings": "Ingen innstillinger funnet", + "confirmDelete": "Vil du slette innstillingen \"{key}\"?", + "colKey": "Nøkkel", + "colValue": "Verdi", + "colUpdated": "Oppdatert", + "colActions": "Handlinger", + "form": { + "key": "Nøkkel", + "keyPlaceholder": "f.eks. hotel_name", + "value": "Verdi", + "valuePlaceholder": "Innstillingsverdi", + "save": "Lagre innstilling", + "saving": "Lagrer …", + "cancel": "Avbryt" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Hjem", + "reload": "Last inn på nytt", + "fullscreen": "Fullskjerm", + "logout": "Logg ut", + "onlineUsers": "Brukere på nett", + "emulatorOnline": "Emulator på nett", + "emulatorOffline": "Emulator frakoblet", + "dragToMove": "Dra for å flytte", + "hide": "Skjul verktøylinje", + "fullscreenExit": "Avslutt fullskjerm", + "show": "Vis verktøylinje", + "emulatorUnknown": "Emulatorstatus ukjent" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Fildiagnostikk", + "preliminary": "Foreløpig kontroll av adresser; innholdet valideres ved import.", + "http": "HTTP {status}", + "network": "Tilkoblingen mislyktes", + "timeout": "Kilden svarte ikke i tide", + "invalidResponse": "Kilden returnerte en nettside i stedet for en fil", + "available": "Fil funnet; venter på validering", + "recover": "Legg ved originalen og fortsett", + "recoveryHint": "Velg {file} (maksimalt 50 MB). Identiteten kontrolleres. Mislykkede elementer prøves på nytt; fullførte importer bevares.", + "attach": "Velg den originale .nitro-filen", + "working": "Validerer eller gjenopptar...", + "attached": "Tilsvarende originalfil vedlagt", + "resume": "Gjenoppta mislykkede importer med filen", + "invalidFile": "Velg en tilsvarende original .nitro-fil på opptil 50 MB og prøv igjen.", + "resumeError": "Oppdater historikken og bruk siste forsøk; kontroller filen og prøv igjen.", + "mismatchedFile": "Denne filen tilhører et annet møbel.", + "alreadyStarted": "Gjenopprettingen har startet. Oppdater historikken og bruk siste forsøk.", + "notEligible": "Dette elementet kan ikke gjenopprettes med et vedlegg." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/pl.json b/src/messages/pl.json index 835da0b3..96d4c766 100644 --- a/src/messages/pl.json +++ b/src/messages/pl.json @@ -1,3919 +1,4913 @@ { - "draftRecovery": { - "ready": "Kopia do odzyskania będzie przechowywana w tej przeglądarce przez 7 dni.", - "saved": "Kopia do odzyskania została zapisana w tej przeglądarce na 7 dni.", - "unavailable": "Odzyskiwanie w przeglądarce jest niedostępne. Nie zamykaj tej strony, dopóki zmiany nie zostaną zapisane.", - "found": "W tej przeglądarce jest dostępna kopia do odzyskania, zapisana", - "restore": "Przywróć kopię z przeglądarki", - "discard": "Usuń kopię z przeglądarki", - "confirmRestore": "Zastąpić bieżący formularz kopią z przeglądarki? Sprawdź zawartość przed zapisaniem.", - "confirmDiscard": "Usunąć tę kopię z przeglądarki? Bieżący formularz pozostanie bez zmian." - }, - "nav": { - "home": "Dom", - "community": "Społeczność", - "articles": "Artykuły", - "photos": "Zdjęcia", - "staff": "Personel", - "rankings": "Rankingi", - "guilds": "Gildie", - "leaderboards": "Tabele liderów", - "rareValues": "Rzadkie wartości", - "shop": "Sklep", - "market": "Rynek", - "assistance": "Pomoc", - "helpCenter": "Centrum pomocy", - "myTickets": "Moje bilety", - "badges": "Odznaki", - "radio": "Radia", - "friends": "Przyjaciele", - "messages": "Wiadomości", - "admin": "Administrator", - "openMenu": "Otwórz menu", - "closeMenu": "Zamknij menu", - "drawBadge": "Narysuj odznakę", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} online", - "nitroClient": "Klient nitro", - "tagline": "Wirtualny świat online, w którym możesz stworzyć własnego awatara, nawiązywać przyjaźnie, rozmawiać, tworzyć pokoje i wiele więcej!", - "login": "Zaloguj się", - "or": "Lub", - "createAccount": "Utwórz konto" - }, - "footer": { - "copyright": "© {year} - {hotel} to projekt edukacyjny non-profit" - }, - "pages": { - "staff": { - "title": "Personel", - "subtitle": "Zespół stojący za hotelem", - "ranksTitle": "Rangi", - "ranksSubtitle": "Czym zajmuje się każda część zespołu", - "membersTitle": "Członkowie zespołu", - "membersEmptySubtitle": "Nie ma nikogo do pokazania w tej chwili", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "Brak pracowników do pokazania.", - "colUsername": "Nazwa użytkownika", - "colRank": "Ranga", - "colMotto": "Motto" - }, - "leaderboard": { - "title": "Tabela liderów", - "subtitle": "20 najlepszych graczy według {currency}", - "tab_credits": "Kredyty", - "tab_diamonds": "Diamenty", - "tab_duckets": "Kaczki", - "tab_achievement": "Osiągnięcia", - "tab_respects": "Szacunek", - "tab_onlinetime": "Czas w internecie", - "emptyState": "Nie ma jeszcze żadnych rankingów do pokazania.", - "colAvatar": "Awatar", - "colPlayer": "Gracz" - }, - "friends": { - "title": "Przyjaciele", - "emptySubtitle": "Nie masz jeszcze dodanych znajomych", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Dodaj znajomych w hotelu, a oni się tutaj pojawią.", - "noMotto": "Żadnego motta", - "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": "Wiadomości", - "subtitle": "Czekają na Ciebie zaproszenia do znajomych i wiadomości offline", - "requestsTitle": "Prośby znajomych", - "requestsEmptySubtitle": "Nikt jeszcze nie został Twoim przyjacielem", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "Brak oczekujących zaproszeń do znajomych.", - "wantsToBeFriend": "chce być twoim przyjacielem.", - "accept": "Zaakceptuj", - "offlineTitle": "Wiadomości offline", - "offlineEmptySubtitle": "Twoja skrzynka odbiorcza jest pusta", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "Nie masz żadnych wiadomości offline.", - "unknownUser": "Użytkownik nr {id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Żadnego motta", - "statRank": "Ranga", - "statCredits": "Kredyty", - "statRegistered": "Zarejestrowany", - "badgesTitle": "Odznaki", - "badgesEmpty": "Nie ma jeszcze odznak.", - "photosTitle": "Zdjęcia", - "photosEmpty": "Nie ma jeszcze zdjęć.", - "guestbookTitle": "Księga gości", - "guestbookSubtitle": "Wiadomości na tablicy użytkownika {username}", - "leaveMessage": "Zostaw wiadomość", - "guestbookPlaceholder": "Napisz coś w księdze gości {username}…", - "post": "Opublikuj", - "loginToPost": "Zaloguj się, aby zostawić wiadomość w księdze gości.", - "guestbookEmpty": "Nie ma jeszcze żadnych wpisów w księdze gości.", - "unknownUser": "Użytkownik nr {id}", - "statDuckets": "Kaczki", - "statDiamonds": "Diamenty", - "walletTitle": "Portfel", - "friendsTitle": "Przyjaciele", - "friendsSubtitle": "Ludzie w hotelu, z którymi spędzają czas", - "friendsEmpty": "Brak znajomych do pokazania.", - "roomsTitle": "Pokoje", - "roomsSubtitle": "Pokoje, które są ich własnością", - "roomsEmpty": "Brak pokoi do pokazania.", - "roomUntitled": "Pokój bez tytułu", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Rankingi", - "subtitle": "12 najlepszych graczy według kredytów", - "emptyState": "Nie ma jeszcze graczy do rankingu." - }, - "home": { - "welcome": "Witamy w {hotelName}", - "welcomeSubtitle": "Twój hotel w stylu retro, teraz obsługiwany przez Next.js", - "welcomeBody": "Spędzaj czas, zbieraj meble i spotykaj się z przyjaciółmi.", - "enterHotel": "Wpisz {hotelName}", - "onlineFriends": "Przyjaciele w Internecie", - "noFriendsOnline": "Brak znajomych w Internecie", - "register": "ZAREJESTRUJ SIĘ TERAZ", - "joinNow": "Dołącz do hotelu {hotelName} już dziś!", - "recentUsers": "Ostatni użytkownicy", - "recentPhotos": "Najnowsze zdjęcia", - "latestNews": "Najnowsze wiadomości", - "newsTitle": "Najnowsze wiadomości", - "newsSubtitle": "Świeżo z hotelu", - "allNews": "Wszystkie aktualności →", - "allUsers": "Społeczność →", - "noArticles": "Nie ma jeszcze artykułów.", - "noPhotos": "Nie ma jeszcze zdjęć.", - "noUsers": "Brak użytkowników online", - "latestArticle": "Najnowszy artykuł", - "latestUsers": "Nowi obywatele ({count} łącznie)", - "statsOnline": "Online", - "statsCitizens": "Obywatele", - "statsRooms": "Pokoje", - "statsArticles": "Artykuły", - "featuresAvatar": "Awatar", - "featuresAvatarDesc": "Stwórz swój niepowtarzalny wygląd", - "featuresFurniture": "Meble", - "featuresFurnitureDesc": "Dekoruj pokoje przedmiotami", - "featuresCommunity": "Społeczność", - "featuresCommunityDesc": "Znajdź przyjaciół i czatuj", - "featuresGames": "Gry", - "featuresGamesDesc": "Rywalizuj i baw się" - }, - "news": { - "title": "Wiadomości", - "subtitle": "Najnowsze ogłoszenia, wydarzenia i aktualności z hotelu", - "noArticles": "Nie ma jeszcze artykułów." - }, - "article": { - "backToNews": "← Aktualności", - "reactionsTitle": "Reakcje", - "reactionsSubtitle": "Powiedz nam, co myślisz", - "reaction": { - "like": "Jak", - "love": "Miłość", - "wow": "Wow" - }, - "removeReaction": "Kliknij, aby usunąć swoją reakcję", - "reactWith": "Zareaguj za pomocą {reaction}", - "noReactions": "Nie ma jeszcze żadnych reakcji.", - "logIn": "Zaloguj się", - "toReact": "zareagować.", - "commentsTitle": "Komentarze", - "commentsSubtitle": "Dołącz do rozmowy", - "commentsCount": "dotychczas {count}", - "noComments": "Nie ma jeszcze żadnych komentarzy. Bądź pierwszą osobą, która skomentuje.", - "userNumber": "Użytkownik nr {id}", - "addComment": "Dodaj komentarz", - "commentPlaceholder": "Napisz swój komentarz…", - "postComment": "Opublikuj komentarz", - "toComment": "aby zostawić komentarz.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Zdjęcia", - "subtitle": "Najnowsze zdjęcia zrobione w hotelu", - "noPhotos": "Nie ma jeszcze zdjęć.", - "photoAlt": "Zdjęcie użytkownika #{id}", - "byUser": "przez użytkownika #{id}" - }, - "badges": { - "title": "Odznaki", - "subtitle": "Odznaki, które możesz zdobyć i którymi możesz się pochwalić w całym hotelu", - "noBadges": "Nie ma jeszcze żadnych odznak." - }, - "community": { - "title": "Społeczność", - "subtitle": "Wszystko, co dzieje się wokół hotelu, w jednym miejscu", - "open": "Otwórz →", - "links": { - "rankings": { - "title": "Rankingi", - "text": "Zobacz najbogatszych graczy w hotelu, uszeregowanych według kredytów." - }, - "staff": { - "title": "Personel", - "text": "Poznaj zespół, który na co dzień dba o funkcjonowanie hotelu." - }, - "news": { - "title": "Wiadomości", - "text": "Najnowsze ogłoszenia, wydarzenia i aktualizacje." - }, - "photos": { - "title": "Zdjęcia", - "text": "Migawki udostępniane przez społeczność z całego hotelu." - }, - "guilds": { - "title": "Gildie", - "text": "Przeglądaj grupy, które gracze utworzyli i do których dołączyli." - }, - "leaderboards": { - "title": "Tabele liderów", - "text": "Kto w tym sezonie jest na szczycie statystyk hotelu?" - } - } - }, - "guilds": { - "title": "Gildie", - "subtitle": "Przeglądaj grupy, które gracze utworzyli i do których dołączyli", - "empty": "Nie ma jeszcze gildii.", - "unnamedGuild": "Nienazwana gildia", - "noDescription": "Brak opisu" - }, - "guild": { - "allGuilds": "← Wszystkie gildie", - "unnamedGuild": "Nienazwana gildia", - "noDescription": "Brak opisu", - "memberSingular": "Członek", - "memberPlural": "Członkowie", - "founded": "Założona", - "forumLink": "Forum →", - "discussion": "Dyskusja", - "membersTitle": "Członkowie", - "memberLowerSingular": "członek", - "memberLowerPlural": "członkowie", - "noMembers": "Brak członków.", - "owner": "Właściciel", - "noMotto": "Żadnego motta" - }, - "guildForum": { - "backToGuild": "← Powrót do gildii", - "unnamedGuild": "Nienazwana gildia", - "forumTitle": "{guild} — Forum", - "threadSingular": "wątek", - "threadPlural": "wątki", - "newThread": "+ Nowy wątek", - "empty": "Nie ma jeszcze żadnych wątków na tym forum.", - "colSubject": "Temat", - "colAuthor": "Autor", - "colPosts": "Posty", - "colDate": "Data", - "noSubject": "(bez tematu)", - "pinned": "Przypięty", - "locked": "Zablokowane", - "userNumber": "Użytkownik nr {id}", - "unknown": "Nieznany", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Powrót do forum", - "unnamedGuild": "Nienazwana gildia", - "title": "Nowy wątek", - "subtitle": "na forum {guild}", - "subjectLabel": "Temat", - "subjectPlaceholder": "Temat wątku", - "messageLabel": "Wiadomość", - "messagePlaceholder": "Napisz swój post otwierający…", - "postThread": "Opublikuj wątek", - "cancel": "Anuluj", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Sklep", - "subtitle": "Doładuj swoje konto i zdobądź ekskluzywne pakiety, walutę i odznaki.", - "browsingCategory": "Przeglądanie pakietów {category}.", - "all": "Wszystko", - "allPackages": "Wszystkie pakiety", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "W tej chwili nie są dostępne żadne pakiety.", - "buy": "Kup", - "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": "Doładuj za pomocą PayPal", - "subtitle": "Płać bezpiecznie za pomocą systemu PayPal, a Twoje środki zostaną dodane w momencie rozliczenia płatności.", - "cancelled": "Zamówienie zostało anulowane – płatność nie została pobrana.", - "chooseAmount": "Wybierz kwotę", - "notConfiguredPre": "PayPal nie jest jeszcze skonfigurowany. Administrator musi ustawić", - "notConfiguredAnd": "i", - "notConfiguredOptional": "(i opcjonalnie", - "notConfiguredPost": "dla piaskownicy vs. na żywo).", - "balanceTitle": "Twoje saldo", - "signedInAs": "Zalogowano jako {username}", - "credits": "Kredyty", - "creditsPerUnit": "Kredyty za 1,00 {currency}", - "rateLine": "You receive {amount} credits per 1.00 {currency}. Credits appear in-game the next time you log in." - }, - "marketplace": { - "title": "Rynek", - "subtitle": "Przeglądaj meble i rzadkie przedmioty wymienione przez graczy. Oferty są umieszczane w grze i aktualizowane na bieżąco — udaj się do hotelu, aby złożyć ofertę.", - "activeOffers": "Aktywne oferty", - "sellers": "Sprzedawcy", - "totalValue": "Całkowita wartość", - "activeListings": "Aktywne oferty", - "mostRecentFirst": "Ostatnio wymienione na pierwszym miejscu", - "empty": "W tej chwili nie ma aktywnych ofert na rynku. Sprawdź później.", - "colOffer": "Oferta", - "colItem": "Przedmiot", - "colSeller": "Sprzedawca", - "colPrice": "Cena", - "colListed": "Na liście", - "itemLabel": "Pozycja nr{id}", - "userLabel": "Użytkownik nr {id}", - "justNow": "właśnie teraz", - "minutesAgo": "{count}min temu", - "hoursAgo": "{count}h temu", - "daysAgo": "{count}d temu" - }, - "rares": { - "title": "Rzadkie wartości", - "subtitle": "Uzyskaj przegląd wszystkich rzadkich dań w hotelu, pogrupowanych według kategorii.", - "empty": "Obecnie nie mamy tutaj żadnych rzadkich przedmiotów.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Zobacz rzadkie →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Wszystkie rzadkie", - "empty": "W tej kategorii nie ma jeszcze żadnych rzadkich przedmiotów.", - "colRare": "Rzadkie", - "colCredits": "Kredyty", - "colCurrency": "Waluta", - "creditsValue": "{value} kredytów", - "duckets": "Kaczki", - "diamonds": "Diamenty", - "credits": "Kredyty" - }, - "redeem": { - "title": "Zrealizuj kupon", - "subtitle": "Masz kod kuponu? Wpisz go poniżej, aby dodać nagrodę do swojego konta.", - "enterCode": "Wpisz swój kod", - "oncePerAccount": "Każdy kupon można wykorzystać tylko raz na koncie.", - "balanceTitle": "Twoje saldo", - "signedInAs": "Zalogowano jako {username}", - "credits": "Kredyty", - "instantCredit": "Wykorzystane nagrody są przyznawane natychmiast i pojawiają się w grze przy następnym logowaniu." - }, - "help": { - "title": "Centrum pomocy", - "subtitle": "Znajdź przewodniki, tematy pomocy i zasady hotelu — wszystko, czego potrzebujesz, aby uzyskać pomoc.", - "myTickets": "Moje bilety →", - "topicsTitle": "Tematy wsparcia", - "topicsSubtitle": "Przeglądaj przewodniki i odpowiedzi na często zadawane pytania", - "topicsEmpty": "Nie ma jeszcze tematów pomocy.", - "rulesTitle": "Regulamin hotelu", - "rulesSubtitle": "Prosimy o zapoznanie się z nimi przed spędzeniem czasu w hotelu", - "rulesEmpty": "Nie opublikowano jeszcze żadnych zasad.", - "categoryEmpty": "Brak reguł w tej kategorii." - }, - "helpCategory": { - "back": "← Centrum pomocy", - "topicSubtitle": "Temat Centrum pomocy", - "moreTitle": "Więcej tematów pomocy", - "moreSubtitle": "Przejdź do innego tematu pomocy" - }, - "helpTickets": { - "title": "Bilety pomocy", - "subtitle": "Prześlij zgłoszenie pracownikom i śledź otwarte wnioski.", - "statTotal": "Razem bilety", - "statOpen": "Otwórz", - "statClosed": "Zamknięte", - "newTitle": "Nowy bilet", - "newSubtitle": "Opisz swój problem, a personel zajmie się Twoją sprawą", - "subjectPlaceholder": "Temat", - "contentPlaceholder": "Opisz swój problem…", - "submit": "Prześlij bilet", - "listTitle": "Twoje bilety", - "listSubtitle": "Każda prośba wysłana do personelu", - "listEmpty": "Nie masz jeszcze biletów.", - "colId": "Identyfikator", - "colSubject": "Temat", - "colStatus": "Stan", - "colCreated": "Utworzono", - "statusOpen": "Otwórz", - "statusClosed": "Zamknięte", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Aplikuj na pracownika {hotel}", - "subtitle": "Co jakiś czas otwieramy aplikacje pracownicze. Jeśli znajdziesz stanowisko, na którym Twoim zdaniem będziesz idealnie pasować, nie wahaj się i aplikuj.", - "noPositionsTitle": "Brak otwartych stanowisk", - "noPositionsBody": "Obecnie nie ma żadnych wolnych stanowisk. Prosimy przyjść później i sprawdzić, czy do tego czasu mamy wolne miejsca. Dziękuję za zainteresowanie.", - "noDeadline": "Nie ustalono terminu", - "deadline": "Termin składania wniosków: {date}", - "alreadyApplied": "Aplikowałeś już na {rank}", - "aboutYou": "O tobie", - "aboutPlaceholder": "Powiedz nam, dlaczego byłbyś świetnym {rank}…", - "applyFor": "Złóż wniosek o {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": "Aplikuj do zespołu {hotel}", - "subtitle": "Okresowo otwieramy aplikacje zespołowe. Jeżeli widzisz zespół, który Ci odpowiada, nie wahaj się aplikować!", - "noPositionsTitle": "Brak wolnych stanowisk w zespole", - "noPositionsBody": "Aktualnie nie ma wolnych stanowisk w zespole. Wróć później, aby sprawdzić dostępność nowych ofert. Dziękuję!", - "pending": "Twoje zgłoszenie oczekuje na realizację", - "aboutYou": "O tobie", - "aboutPlaceholder": "Powiedz nam, dlaczego świetnie nadajesz się na stanowisko {rank}…", - "applyFor": "Złóż wniosek o {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": "Radia", - "subtitle": "Włącz hotelowe radio — sety DJ-skie na żywo, prośby i okrzyki.", - "nowPlaying": "Teraz gram", - "nothingPlaying": "Nic nie gra w tej chwili.", - "onAir": "Na antenie: {dj}", - "noDj": "Brak DJ-a na antenie.", - "audioUnsupported": "Twoja przeglądarka nie obsługuje elementu audio.", - "streamOffline": "Transmisja jest obecnie offline.", - "exploreTitle": "Poznaj radio", - "exploreSubtitle": "Harmonogram, krzyki, prośby i nie tylko", - "linkSchedule": "Harmonogram", - "linkScheduleText": "Nasz cotygodniowy skład DJ-ów i występów.", - "linkShouts": "Krzyki", - "linkShoutsText": "Pozdrowienia i prośby społeczności.", - "linkRequests": "Żądania", - "linkRequestsText": "Poproś DJ-a, aby zakręcił Twoim ulubionym utworem.", - "linkApply": "Aplikuj jako DJ", - "linkApplyText": "Dołącz do zespołu i ruszaj na fale radiowe.", - "linkLeaderboard": "Tabela liderów", - "linkLeaderboardText": "Najlepsi słuchacze według zdobytych punktów.", - "todayTitle": "Dzisiejszy harmonogram", - "todayTitleWithDay": "Dzisiejszy harmonogram · {day}", - "todaySubtitle": "Co jest dzisiaj na falach radiowych", - "fullWeek": "Cały tydzień →", - "noShowsToday": "Na dzisiaj nie zaplanowano żadnych występów.", - "colTime": "Czas", - "colShow": "Pokaż", - "colDj": "DJ", - "untitledShow": "Spektakl bez tytułu", - "userNumber": "Użytkownik nr {id}" - }, - "radioSchedule": { - "title": "Harmonogram Radia", - "subtitle": "Nasz cotygodniowy skład DJ-ów i występów", - "empty": "Nie zaplanowano jeszcze żadnych występów.", - "colDay": "Dzień", - "colTime": "Czas", - "colDj": "DJ", - "colShow": "Pokaż", - "noShows": "Żadnych występów" - }, - "radioShouts": { - "title": "Krzyki radiowe", - "subtitle": "Pozdrowienia i prośby społeczności", - "postTitle": "Opublikuj okrzyk", - "postSubtitle": "Wyślij wiadomość do DJ-a na żywo", - "messageLabel": "Twoja wiadomość", - "messagePlaceholder": "Wyślij wiadomość do DJ-a…", - "shoutButton": "Krzycz", - "loginToPost": "Zaloguj się, aby opublikować krzyk.", - "latestTitle": "Najnowsze krzyki", - "latestSubtitle": "Najnowsze wiadomości od słuchaczy", - "empty": "Nie ma jeszcze żadnych krzyków. Bądź pierwszy!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Konkursy radiowe", - "subtitle": "Dołącz do nas i weź udział w naszych najnowszych konkursach na żywo", - "empty": "Nie ma jeszcze żadnych konkursów.", - "contestLabel": "Konkurs nr{id}", - "dateUnknown": "Data nieznana" - }, - "radioGiveaways": { - "title": "Prezenty radiowe", - "subtitle": "Posłuchaj swojej szansy na wygraną w naszych rozdaniach radiowych", - "empty": "Nie ma jeszcze żadnych prezentów.", - "giveawayLabel": "Rozdanie #{id}", - "dateUnknown": "Data nieznana" - }, - "radioLeaderboard": { - "title": "Tablica liderów słuchaczy radia", - "subtitle": "50 najlepszych słuchaczy pod względem zdobytych punktów podczas słuchania radia", - "empty": "Nie ma jeszcze punktów słuchacza do pokazania.", - "colRank": "Ranga", - "colAvatar": "Awatar", - "colListener": "Słuchacz", - "colPoints": "Punkty" - }, - "radioRequests": { - "formTitle": "Prześlij prośbę", - "formSubtitle": "Poproś DJ-a, aby puścił Twój ulubiony utwór", - "songLabel": "Piosenka", - "songPlaceholder": "Tytuł piosenki", - "artistLabel": "Artysta", - "artistPlaceholder": "Imię i nazwisko artysty (opcjonalnie)", - "submitButton": "Prześlij prośbę", - "loginToRequest": "Zaloguj się, aby złożyć wniosek.", - "latestTitle": "Ostatnie prośby", - "latestSubtitle": "Ostatnio żądane utwory", - "empty": "Nie ma jeszcze żadnych żądań.", - "colSong": "Piosenka", - "colArtist": "Artysta", - "colRequester": "Osoba żądająca", - "colDate": "Data", - "colStatus": "Stan", - "statusPending": "Oczekujące", - "statusApproved": "Zatwierdzone", - "statusPlayed": "Zagrał", - "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": "Aplikuj, aby zostać DJ-em radiowym", - "subtitle": "Opowiedz nam o sobie i dlaczego świetnie pasowałbyś do fal radiowych", - "latestTitle": "Twoja najnowsza aplikacja", - "statusLabel": "Stan:", - "submittedOn": "· przesłane {date}", - "submitAgain": "Jeśli Twoje dane uległy zmianie, możesz przesłać je ponownie poniżej.", - "formTitle": "Formularz zgłoszeniowy", - "formSubtitle": "Wszystkie pola oznaczone jako wymagane muszą zostać wypełnione", - "realNameLabel": "Prawdziwe imię", - "realNamePlaceholder": "Twoje pełne imię i nazwisko", - "ageLabel": "Wiek", - "availabilityLabel": "Dostępność", - "availabilityPlaceholder": "W jakie dni i godziny można nadawać?", - "musicStyleLabel": "Styl muzyczny", - "musicStylePlaceholder": "np. House, Pop, Hip-Hop", - "experienceLabel": "Doświadczenie", - "optional": "(opcjonalnie)", - "experiencePlaceholder": "Jakieś wcześniejsze doświadczenia z DJ-em lub hostingiem?", - "motivationLabel": "Motywacja", - "motivationPlaceholder": "Dlaczego chcesz dołączyć do zespołu radia?", - "submitButton": "Prześlij wniosek", - "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": "Ustawienia konta", - "accountSettingsSubtitle": "Zarządzaj swoim profilem, bezpieczeństwem i połączonymi kontami", - "publicProfile": "Twój profil publiczny", - "noMotto": "Żadnego motta", - "noEmail": "Brak wiadomości e-mail w aktach", - "changeMotto": "Zmień motto", - "changeMottoSubtitle": "Aktualizacje są natychmiastowe w grze, jeśli jesteś online", - "mottoPlaceholder": "Twoje motto", - "saveMotto": "Zapisz motto", - "securityTitle": "Bezpieczeństwo", - "securitySubtitle": "Uwierzytelnianie dwuskładnikowe", - "securityDescription": "Dodaj drugą warstwę ochrony do swojego konta.", - "twoFactorLink": "Uwierzytelnianie dwuskładnikowe" - }, - "settings2fa": { - "backToSettings": "← Ustawienia", - "title": "Uwierzytelnianie dwuskładnikowe", - "subtitle": "Dodaj drugą warstwę zabezpieczeń za pomocą aplikacji uwierzytelniającej", - "nowEnabled": "2FA jest teraz włączone. 🔒", - "disabledNotice": "2FA zostało wyłączone.", - "badCode": "Ten kod był nieprawidłowy — spróbuj ponownie.", - "noAppKeyPrefix": "2FA jest niedostępne do", - "noAppKeyMiddle": "jest skonfigurowany (ten sam Laravel", - "noAppKeySuffix": "podczas instalacji AtomCMS, aby istniejące sekrety pozostały czytelne).", - "isEnabled": "2FA jest włączone", - "onYourAccount": "na Twoim koncie.", - "disable": "Wyłącz 2FA", - "scanOrEnter": "Zeskanuj lub wprowadź ten klucz", - "scanInstructions": "Dodaj to do Google Authenticator / Authy, a następnie wprowadź 6-cyfrowy kod, aby potwierdzić.", - "manualKey": "Klucz ręczny:", - "codePlaceholder": "6-cyfrowy kod", - "confirm": "Potwierdź", - "enableIntro": "Dodaj drugą warstwę zabezpieczeń za pomocą aplikacji uwierzytelniającej.", - "enable": "Włącz 2FA" - }, - "title": "Połączone konta", - "subtitle": "Połącz konto społecznościowe, aby móc zalogować się jednym kliknięciem", - "connected": "Połączono", - "unavailable": "Niedostępne", - "login": { - "title": "Zaloguj się", - "subtitle": "Witamy ponownie — zaloguj się, aby wejść do hotelu.", - "subtitle2fa": "Wprowadź 6-cyfrowy kod z Twojego uwierzytelniacza.", - "usernamePlaceholder": "Nazwa użytkownika", - "passwordPlaceholder": "Hasło", - "codePlaceholder": "Kod 2FA", - "pleaseWait": "Proszę czekać…", - "verify": "Zweryfikuj", - "signIn": "Zaloguj się", - "or": "lub", - "noAccount": "Nie masz konta?", - "createOne": "Utwórz jeden", - "forgotPassword": "Zapomniałeś hasła?", - "errorInvalidCredentials": "Nieprawidłowa nazwa użytkownika lub hasło", - "errorInvalid2fa": "Nieprawidłowy kod 2FA", - "welcomeBack": "Witaj z powrotem", - "welcomeBackSub": "Zaloguj się, aby kontynuować w {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Utwórz konto", - "subtitle": "Dołącz do hotelu — to zajmie tylko chwilę.", - "username": "Nazwa użytkownika", - "email": "E-mail", - "password": "Hasło", - "confirmPassword": "Powtórz hasło", - "usernamePlaceholder": "Nazwa użytkownika", - "emailPlaceholder": "E-mail", - "passwordPlaceholder": "Hasło (min. 6 znaków)", - "confirmPasswordPlaceholder": "Powtórz hasło", - "selectOutfit": "Wybierz swój strój", - "termsAccept": "Mam ukończone 18 lat i akceptuję warunki i zasady hotelu {hotel}.", - "createAccount": "Utwórz konto", - "creatingAccount": "Tworzenie konta...", - "redirecting": "Przekierowywanie na twoje konto...", - "alreadyHaveAccount": "Masz już konto? Login!", - "register": "Zarejestruj się", - "termsError": "Aby się zarejestrować, musisz zaakceptować regulamin.", - "usernameError": "Nazwa użytkownika jest wymagana.", - "emailError": "Wymagany jest prawidłowy adres e-mail.", - "passwordError": "Hasło musi mieć co najmniej 6 znaków.", - "confirmPasswordError": "Hasła nie pasują.", - "termsRequired": "Musisz zaakceptować warunki i zasady.", - "usernameRequired": "Nazwa użytkownika jest wymagana.", - "emailRequired": "Adres e-mail jest wymagany.", - "passwordRequired": "Hasło jest wymagane.", - "passwordsDontMatch": "Hasła nie pasują.", - "alreadyHaveAccountPre": "Masz już konto?", - "alreadyHaveAccountLink": "Zaloguj się", - "whoIsOnline": "Kto jest online", - "usersOnline": "{count} online" - }, - "forgot": { - "title": "Zresetuj hasło", - "subtitle": "Wyślemy Ci e-mailem bezpieczny link umożliwiający ustawienie nowego hasła.", - "sentNotice": "Jeśli ten adres e-mail jest zarejestrowany, został wysłany link resetujący. Sprawdź swoją skrzynkę odbiorczą.", - "emailPlaceholder": "Twój e-mail", - "sendResetLink": "Wyślij link resetujący", - "backToLogin": "Powrót do logowania", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Ustaw nowe hasło", - "subtitle": "Wybierz silne hasło, którego nie używasz gdzie indziej.", - "passwordPlaceholder": "Nowe hasło (min. 6 znaków)", - "resetPassword": "Zresetuj hasło", - "backToLogin": "Powrót do logowania" - }, - "verify": { - "verifiedTitle": "Wszystko gotowe", - "verifiedSubtitle": "Adres e-mail zweryfikowany", - "verifiedBody": "Twój adres e-mail został zweryfikowany. Możesz już zalogować się i grać.", - "goToLogin": "Przejdź do logowania", - "alreadyTitle": "Już zweryfikowane", - "alreadySubtitle": "Nic nie zostało do zrobienia", - "alreadyBody": "Ten adres e-mail został już potwierdzony.", - "unavailableTitle": "Spróbuj ponownie wkrótce", - "unavailableSubtitle": "Serwer nieosiągalny", - "unavailableBody": "Nie mogliśmy połączyć się z serwerem, aby zweryfikować Twój adres e-mail. Spróbuj ponownie za chwilę skorzystać z łącza.", - "invalidTitle": "Weryfikacja e-mailowa", - "invalidSubtitle": "Nieprawidłowy lub wygasły link", - "invalidBody": "Ten link weryfikacyjny jest nieprawidłowy. Upewnij się, że otworzyłeś cały link z e-maila lub poproś o nowy.", - "backToLogin": "Powrót do logowania" - }, - "banned": { - "title": "Masz zakaz", - "subtitle": "Konto zawieszone", - "body": "Twoje konto w hotelu zostało zawieszone.", - "reasonLabel": "Powód:", - "permanent": "Zakaz ten jest trwały.", - "expires": "Wygasa {date}.", - "contactStaff": "Jeżeli uważasz, że to pomyłka, skontaktuj się z naszym personelem." - }, - "maintenance": { - "title": "{hotel} jest w trakcie prac konserwacyjnych", - "subtitle": "Wkrótce wrócimy", - "staffCanLogIn": "Personel nadal może się zalogować." - }, - "admin": { - "nav": { - "overview": "Przegląd", - "dashboard": "Pulpit nawigacyjny", - "content": "Treść", - "articles": "Artykuły", - "tags": "Tagi", - "navigator": "Nawigator", - "helpCenter": "Centrum pomocy", - "advertisements": "Reklamy", - "writeableBoxes": "Pudełka z możliwością zapisu", - "photos": "Zdjęcia", - "tickets": "Bilety", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Użytkownicy i dostęp", - "users": "Użytkownicy", - "bans": "Zakazy", - "ipManagement": "Zarządzanie IP", - "vpn": "VPN", - "applications": "Aplikacje", - "teams": "Zespoły", - "permissions": "Uprawnienia", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Ekonomia", - "catalog": "Katalog", - "shop": "Sklep", - "transactions": "Transakcje", - "vouchers": "Kupony", - "subscriptions": "Subskrypcje", - "rareValues": "Rzadkie wartości", - "badges": "Odznaki", - "achievements": "Osiągnięcia", - "calendar": "Kalendarz", - "radio": "Radia", - "radioHistory": "Historia radia", - "radioBanners": "Banery", - "radioEmbed": "Osadź", - "radioApiKeys": "Klucze API", - "radioModeration": "Umiarkowanie", - "radioSettings": "Ustawienia", - "radioMonitoring": "Monitorowanie", - "radioPoints": "Punkty", - "radioRanks": "Rangi", - "radioAutodj": "Automatyczny DJ", - "system": "Systemu", - "commandocentrum": "Centrum Komandosów", - "emulator": "Emulator", - "alerts": "Alerty", - "logs": "Dzienniki", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Filtr słów", - "maintenance": "Konserwacja", - "rooms": "Pokoje", - "emailTemplates": "Szablony e-maili", - "theme": "Temat", - "media": "Media", - "favicon": "Favikona", - "sounds": "Brzmi", - "translations": "Tłumaczenia", - "import": "Importuj", - "settings": "Ustawienia", - "backToSite": "Powrót do serwisu", - "housekeeping": "Sprzątanie", - "hotelManagementPanel": "Panel zarządzania hotelem", - "rankLabel": "Ranga {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "studio": "Studio", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Pulpit nawigacyjny", - "subtitle": "Przegląd hotelu i status na żywo", - "playersOnline": "Gracze w Internecie", - "articles": "Artykuły", - "activeBans": "Aktywne zakazy", - "database": "Baza danych", - "databaseConnected": "Połączono", - "databaseDown": "W dół", - "usersByRank": "Użytkownicy według rangi", - "noAccountsToBreakDown": "Nie ma jeszcze kont do podziału", - "rankLabel": "Ranga {rank}", - "rankWithCount": "Ranga {rank}: {count} kont", - "recentStaffActivity": "Ostatnia aktywność personelu", - "viewAll": "Zobacz wszystkie", - "noStaffActivityLogged": "Nie zarejestrowano jeszcze żadnej aktywności personelu" - }, - "articles": { - "title": "Artykuły", - "subtitle": "Artykuły prasowe — 50 najnowszych", - "newArticle": "+ Nowy artykuł", - "edit": "Edytuj", - "delete": "Usuń", - "noArticles": "Nie ma jeszcze artykułów", - "confirmDelete": "Czy na pewno chcesz usunąć „{title}”?", - "colTitle": "Tytuł", - "colSlug": "Ślimak", - "colAuthor": "Autor", - "colCreated": "Utworzono", - "colActions": "Działania", - "form": { - "title": "Tytuł", - "titlePlaceholder": "Tytuł artykułu", - "slug": "Ślimak", - "slugPlaceholder": "adres URL artykułu", - "category": "Kategoria", - "categoryPlaceholder": "Wybierz kategorię", - "body": "Ciało", - "bodyPlaceholder": "Napisz treść swojego artykułu…", - "image": "Obraz", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Miniatura", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Opublikowano", - "featured": "Polecane", - "save": "Zapisz artykuł", - "saving": "Zapisuję…", - "deleteArticle": "Usuń artykuł", - "deleteConfirm": "Tej akcji nie można cofnąć. Artykuł zostanie trwale usunięty.", - "cancel": "Anuluj", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Tagi", - "subtitle": "Tagi/kategorie artykułów", - "addTag": "Dodaj tag", - "name": "Imię", - "namePlaceholder": "Nazwa znacznika", - "backgroundColour": "Kolor tła", - "createTag": "Utwórz tag", - "editTag": "Edytuj tag", - "updateTag": "Aktualizuj tag", - "deleteTag": "Usuń tag", - "confirmDelete": "Usunąć „{name}”?", - "noTags": "Nie ma jeszcze tagów", - "colId": "Identyfikator", - "colTag": "Oznacz", - "colColour": "Kolor", - "colUsedBy": "Używany przez", - "colCreated": "Utworzono", - "colActions": "Działania" - }, - "navigation": { - "title": "Nawigator", - "flatCategories": "Płaskie kategorie", - "publicRooms": "Pokoje publiczne", - "addCategory": "Dodaj kategorię", - "editCategory": "Edytuj kategorię", - "deleteCategory": "Usuń kategorię", - "categoryName": "Nazwa kategorii", - "categoryNamePlaceholder": "np. Zrelaksuj się i rozmawiaj", - "categoryOrder": "Zamów", - "roomName": "Nazwa pokoju", - "roomNamePlaceholder": "np. Witamy w salonie", - "roomId": "Identyfikator pokoju", - "roomIdPlaceholder": "Numeryczny identyfikator pokoju", - "save": "Zapisz", - "cancel": "Anuluj", - "noCategories": "Nie ma jeszcze kategorii", - "noPublicRooms": "Nie ma jeszcze pomieszczeń ogólnodostępnych", - "colId": "Identyfikator", - "colName": "Imię", - "colOrder": "Zamów", - "colRooms": "Pokoje", - "colActions": "Działania" - }, - "helpCenter": { - "title": "Centrum pomocy", - "subtitle": "Wpisy pomocy technicznej i zarządzanie często zadawanymi pytaniami", - "entries": "Wpisy", - "newEntry": "+ Nowy wpis", - "edit": "Edytuj", - "delete": "Usuń", - "noEntries": "Nie ma jeszcze żadnych wpisów", - "confirmDelete": "Usunąć „{title}”?", - "colId": "Identyfikator", - "colTitle": "Tytuł", - "colCategory": "Kategoria", - "colCreated": "Utworzono", - "colActions": "Działania", - "form": { - "title": "Tytuł", - "titlePlaceholder": "Tytuł wpisu", - "category": "Kategoria", - "categoryPlaceholder": "Wybierz kategorię", - "body": "Ciało", - "bodyPlaceholder": "Napisz odpowiedź…", - "save": "Zapisz wpis", - "saving": "Zapisuję…", - "deleteEntry": "Usuń wpis", - "cancel": "Anuluj" - } - }, - "ads": { - "title": "Reklamy", - "subtitle": "Zarządzaj reklamami hoteli i banerami promocyjnymi", - "newAd": "+ Nowa reklama", - "edit": "Edytuj", - "delete": "Usuń", - "noAds": "Nie ma jeszcze reklam", - "confirmDelete": "Usunąć tę reklamę?", - "colId": "Identyfikator", - "colName": "Imię", - "colImage": "Obraz", - "colUrl": "Adres URL", - "colViews": "Widoki", - "colStatus": "Stan", - "colCreated": "Utworzono", - "colActions": "Działania", - "form": { - "name": "Imię", - "namePlaceholder": "Nazwa reklamy", - "image": "Adres URL obrazu", - "imagePlaceholder": "https://example.com/baner.png", - "url": "Docelowy adres URL", - "urlPlaceholder": "https://przyklad.com", - "enabled": "Włączone", - "save": "Zapisz reklamę", - "saving": "Zapisuję…", - "deleteAd": "Usuń reklamę", - "cancel": "Anuluj" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Pudełka z możliwością zapisu", - "subtitle": "Panele treści wyświetlane w całym hotelu i systemie CMS", - "newBox": "Nowe pudełko", - "edit": "Edytuj", - "delete": "Usuń", - "noBoxes": "Nie ma jeszcze pól, które można zapisać", - "confirmDelete": "Usunąć to pole?", - "colId": "Identyfikator", - "colName": "Imię", - "colLocation": "Lokalizacja", - "colUpdated": "Zaktualizowano", - "colActions": "Działania", - "form": { - "name": "Imię", - "namePlaceholder": "Nazwa skrzynki", - "location": "Lokalizacja", - "locationPlaceholder": "np. strona główna, pasek boczny", - "content": "Treść", - "contentPlaceholder": "Napisz zawartość pudełka...", - "enabled": "Włączone", - "save": "Zapisz pole", - "saving": "Zapisuję…", - "deleteBox": "Usuń pole", - "cancel": "Anuluj" - } - }, - "photos": { - "title": "Moderacja zdjęć", - "subtitle": "Najnowsze zdjęcia z kamery w grze", - "delete": "Usuń", - "approve": "Zatwierdź", - "noPhotos": "Brak zdjęć do moderowania", - "confirmDelete": "Trwale usunąć to zdjęcie?", - "colId": "Identyfikator", - "colPreview": "Podgląd", - "colUser": "Użytkownik", - "colRoom": "Pokój", - "colTimestamp": "Znacznik czasu", - "colActions": "Działania", - "photoAlt": "Zdjęcie użytkownika nr{id}", - "byUser": "przez: {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Użytkownicy", - "subtitle": "Przeglądaj, wyszukuj i zarządzaj kontami hotelowymi", - "search": "Szukaj", - "searchPlaceholder": "Szukaj według nazwy użytkownika, adresu e-mail lub identyfikatora…", - "searchResults": "{count, plural, one {# result} other {# results}} dla „{query}”", - "noResults": "Nie znaleziono żadnych użytkowników", - "colId": "Identyfikator", - "colUsername": "Nazwa użytkownika", - "colEmail": "E-mail", - "colRank": "Ranga", - "colOnline": "W Internecie", - "colRegistered": "Zarejestrowany", - "colLastOnline": "Ostatni w Internecie", - "colActions": "Działania", - "yes": "Tak", - "no": "Nie", - "edit": "Edytuj", - "setRank": "Ustaw rangę", - "disconnect": "Rozłącz", - "alert": "Alarm", - "ban": "Zakaz", - "detail": { - "title": "Użytkownik: {username}", - "subtitle": "Szczegóły konta i zarządzanie", - "overview": "Przegląd", - "actions": "Działania", - "username": "Nazwa użytkownika", - "email": "E-mail", - "motto": "Motto", - "rank": "Ranga", - "credits": "Kredyty", - "duckets": "Kaczki", - "diamonds": "Diamenty", - "online": "W Internecie", - "registered": "Zarejestrowany", - "lastOnline": "Ostatni w Internecie", - "ipAddress": "Adres IP", - "machineId": "Identyfikator maszyny", - "sendAlert": "Wyślij powiadomienie", - "sendMessage": "Wyślij wiadomość", - "disconnectUser": "Odłącz użytkownika", - "banUser": "Zablokuj użytkownika", - "resetPassword": "Zresetuj hasło", - "deleteUser": "Usuń użytkownika", - "confirmDelete": "Czy na pewno chcesz usunąć użytkownika {username}? Tego nie można cofnąć.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Edytuj użytkownika: {username}", - "subtitle": "Zmodyfikuj dane konta", - "username": "Nazwa użytkownika", - "usernamePlaceholder": "Nazwa użytkownika", - "email": "E-mail", - "emailPlaceholder": "użytkownik@example.com", - "motto": "Motto", - "mottoPlaceholder": "Motto użytkownika", - "rank": "Ranga", - "credits": "Kredyty", - "duckets": "Kaczki", - "diamonds": "Diamenty", - "save": "Zapisz zmiany", - "saving": "Zapisuję…", - "cancel": "Anuluj" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Zakazy", - "subtitle": "Zarządzaj banami na konta, IP i komputery", - "newBan": "Nowy zakaz", - "edit": "Edytuj", - "delete": "Usuń", - "noBans": "Nie ma jeszcze żadnych zakazów", - "confirmDelete": "Usunąć ten zakaz?", - "colId": "Identyfikator", - "colValue": "Wartość", - "colType": "Wpisz", - "colReason": "Powód", - "colBannedBy": "Zakazany przez", - "colExpires": "Wygasa", - "colCreated": "Utworzono", - "colActions": "Działania", - "form": { - "value": "Wartość", - "valuePlaceholder": "Nazwa użytkownika, adres IP lub identyfikator komputera", - "type": "Wpisz", - "typeUser": "Użytkownik", - "typeIp": "IP", - "typeMachine": "Maszyna", - "reason": "Powód", - "reasonPlaceholder": "Powód zakazu", - "expiresAt": "Wygasa o godz", - "permanent": "Stałe", - "save": "Zapisz zakaz", - "saving": "Zapisuję…", - "cancel": "Anuluj" - } - }, - "ip": { - "title": "Zarządzanie IP", - "subtitle": "Zarządzaj białą i czarną listą adresów IP", - "whitelist": "Biała lista", - "blacklist": "Czarna lista", - "addIp": "Dodaj adres IP", - "ipAddress": "Adres IP", - "ipAddressPlaceholder": "np. 127.0.0.1", - "reason": "Powód", - "reasonPlaceholder": "Powód umieszczenia na liście", - "add": "Dodaj", - "remove": "Usuń", - "confirmRemove": "Usunąć ten adres IP z {list}?", - "noWhitelistedIps": "Brak adresów IP na białej liście", - "noBlacklistedIps": "Brak adresów IP na czarnej liście", - "colIp": "IP", - "colReason": "Powód", - "colAdded": "Dodano", - "colActions": "Działania" - }, - "vpn": { - "title": "Wykrywanie VPN/Proxy", - "subtitle": "Skonfiguruj ustawienia wykrywania VPN i proxy", - "enabled": "Włączone", - "apiKey": "Klucz API", - "apiKeyPlaceholder": "Twój klucz API wykrywania VPN", - "apiKeyHint": "Pozostaw puste, aby wyłączyć", - "blockOnDetect": "Blokuj po wykryciu", - "blockOnDetectHint": "Automatycznie blokuj użytkowników wykrytych za VPN lub proxy", - "save": "Zapisz ustawienia", - "saving": "Zapisuję…", - "settingsSaved": "Ustawienia VPN zostały zapisane pomyślnie" - }, - "applications": { - "title": "Aplikacje pracownicze", - "subtitle": "Oczekujące i sprawdzone aplikacje pracowników", - "pending": "Oczekujące", - "approved": "Zatwierdzone", - "rejected": "Odrzucony", - "noApplications": "Nie ma jeszcze żadnych aplikacji", - "colId": "Identyfikator", - "colApplicant": "Wnioskodawca", - "colPosition": "Pozycja", - "colStatus": "Stan", - "colSubmitted": "Przesłane", - "colActions": "Działania", - "review": "Recenzja", - "approve": "Zatwierdź", - "reject": "Odrzuć", - "confirmApprove": "Zatwierdzić użytkownika {username} dla {position}?", - "confirmReject": "Odrzucić aplikację użytkownika {username} na {position}?", - "detail": { - "title": "Aplikacja autorstwa {username}", - "subtitle": "Dla {position}", - "about": "O wnioskodawcy", - "message": "Wiadomość aplikacyjna", - "status": "Stan", - "submitted": "Przesłane", - "noMessage": "Brak wiadomości" - } - }, - "teams": { - "title": "Zespoły", - "subtitle": "Zdefiniuj nazwy i opisy stopni personelu", - "addRank": "Dodaj rangę", - "editRank": "Edytuj rangę", - "deleteRank": "Usuń rangę", - "noTeams": "Nie ma jeszcze definicji rang", - "confirmDelete": "Usunąć definicję rangi {id}?", - "colId": "Identyfikator", - "colRank": "Ranga", - "colName": "Imię", - "colBadge": "Odznaka", - "colColour": "Kolor", - "colActions": "Działania", - "form": { - "rankId": "Identyfikator rangi", - "rankIdPlaceholder": "Numeryczny identyfikator rangi", - "name": "Imię", - "namePlaceholder": "np. Administrator", - "badge": "Kod odznaki", - "badgePlaceholder": "np. ADM001", - "colour": "Kolor", - "colourPlaceholder": "np. #ff0000", - "save": "Zapisz definicję zespołu", - "saving": "Zapisuję…", - "cancel": "Anuluj" - } - }, - "permissions": { - "title": "Uprawnienia", - "subtitle": "Zarządzaj uprawnieniami na podstawie rang w panelu administracyjnym", - "addPermission": "Dodaj pozwolenie", - "editPermission": "Edytuj uprawnienia", - "deletePermission": "Usuń pozwolenie", - "noPermissions": "Nie skonfigurowano jeszcze żadnych uprawnień", - "confirmDelete": "Usunąć to uprawnienie?", - "colId": "Identyfikator", - "colRank": "Ranga", - "colPermission": "Pozwolenie", - "colCreated": "Utworzono", - "colActions": "Działania", - "form": { - "rankId": "Identyfikator rangi", - "rankIdPlaceholder": "Wymagana minimalna ranga", - "permission": "Klucz uprawnień", - "permissionPlaceholder": "np. admin.artykuły.zarządzaj", - "save": "Zapisz pozwolenie", - "saving": "Zapisuję…", - "cancel": "Anuluj" - } - }, - "catalog": { - "title": "Katalog", - "subtitle": "Przeglądaj strony katalogu i elementy oraz zarządzaj nimi", - "pages": "Strony", - "items": "Przedmioty", - "addPage": "Dodaj stronę", - "editPage": "Edytuj stronę", - "deletePage": "Usuń stronę", - "addItem": "Dodaj element", - "editItem": "Edytuj element", - "deleteItem": "Usuń element", - "noPages": "Nie ma jeszcze stron katalogu", - "noItems": "Brak elementów na tej stronie", - "confirmDeletePage": "Usunąć stronę katalogu „{name}”?", - "confirmDeleteItem": "Usunąć ten element?", - "colId": "Identyfikator", - "colName": "Imię", - "colIcon": "Ikona", - "colOrder": "Zamów", - "colItems": "Przedmioty", - "colEnabled": "Włączone", - "colActions": "Działania", - "colItemId": "Identyfikator przedmiotu", - "colItemName": "Nazwa przedmiotu", - "colCostCredits": "Koszt (kredyty)", - "colCostPoints": "Koszt (punkty)", - "colLimited": "Ograniczona", - "pageForm": { - "name": "Imię", - "namePlaceholder": "Nazwa strony", - "icon": "Identyfikator ikony", - "iconPlaceholder": "Numeryczny identyfikator ikony", - "order": "Zamów", - "enabled": "Włączone", - "parent": "Strona nadrzędna", - "parentNone": "Brak (root)", - "save": "Zapisz stronę", - "saving": "Zapisuję…", - "cancel": "Anuluj" - }, - "itemForm": { - "itemId": "Identyfikator przedmiotu", - "itemName": "Nazwa przedmiotu", - "costCredits": "Koszt w kredytach", - "costDuckets": "Koszt w kaczkach", - "costDiamonds": "Koszt w diamentach", - "limitedStack": "Ograniczony rozmiar stosu", - "limitedSold": "Limitowana sprzedana", - "save": "Zapisz element", - "saving": "Zapisuję…", - "cancel": "Anuluj" - }, - "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." - } - }, - "shop": { - "title": "Sklep", - "subtitle": "Zarządzaj pakietami i zamówieniami", - "packages": "Pakiety", - "orders": "Zamówienia", - "newPackage": "+ Nowy pakiet", - "edit": "Edytuj", - "delete": "Usuń", - "viewOrder": "Zobacz", - "noPackages": "Nie ma jeszcze pakietów sklepowych", - "noOrders": "Nie ma jeszcze żadnych zamówień", - "confirmDelete": "Usunąć ten pakiet?", - "colId": "Identyfikator", - "colName": "Imię", - "colPrice": "Cena", - "colCurrency": "Waluta", - "colType": "Wpisz", - "colSold": "Sprzedane", - "colEnabled": "Włączone", - "colActions": "Działania", - "colOrderId": "Identyfikator zamówienia", - "colCustomer": "Klient", - "colPackage": "Pakiet", - "colAmount": "Kwota", - "colStatus": "Stan", - "colDate": "Data", - "statusPending": "Oczekujące", - "statusCompleted": "Ukończono", - "statusRefunded": "Zwrócono pieniądze", - "form": { - "name": "Imię", - "namePlaceholder": "Nazwa pakietu", - "description": "Opis", - "descriptionPlaceholder": "Opis pakietu", - "price": "Cena", - "currency": "Waluta", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Wpisz", - "typeCredits": "Kredyty", - "typeDuckets": "Kaczki", - "typeDiamonds": "Diamenty", - "typeBadge": "Odznaka", - "typeFurni": "Meble", - "typeRank": "Ranga", - "amount": "Kwota", - "badgeCode": "Kod odznaki", - "badgeCodePlaceholder": "np. VIP001", - "rankId": "Identyfikator rangi", - "furniItems": "Elementy mebli", - "enabled": "Włączone", - "save": "Zapisz pakiet", - "saving": "Zapisuję…", - "cancel": "Anuluj" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Transakcje", - "subtitle": "Dziennik płatności PayPal", - "noTransactions": "Nie ma jeszcze żadnych transakcji", - "colId": "Identyfikator", - "colUser": "Użytkownik", - "colAmount": "Kwota", - "colCurrency": "Waluta", - "colPackage": "Pakiet", - "colStatus": "Stan", - "colDate": "Data", - "colActions": "Działania", - "statusCompleted": "Ukończono", - "statusPending": "Oczekujące", - "statusFailed": "Nie udało się", - "statusRefunded": "Zwrócono pieniądze", - "detail": { - "title": "Transakcja nr{id}", - "paypalId": "Identyfikator PayPala", - "payerEmail": "E-mail płatnika", - "grossAmount": "Kwota brutto", - "fee": "Opłata", - "netAmount": "Kwota netto" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Kupuj kupony", - "subtitle": "Zarządzaj wymienialnymi kodami kuponów", - "newVoucher": "+ Nowy kupon", - "edit": "Edytuj", - "delete": "Usuń", - "noVouchers": "Nie ma jeszcze kuponów", - "confirmDelete": "Usunąć kupon „{code}”?", - "colId": "Identyfikator", - "colCode": "Kod", - "colValue": "Wartość", - "colType": "Wpisz", - "colUses": "Zastosowania / maks", - "colExpires": "Wygasa", - "colCreated": "Utworzono", - "colActions": "Działania", - "form": { - "code": "Kod", - "codePlaceholder": "np. LATO 2025", - "value": "Wartość", - "type": "Wpisz", - "typeCredits": "Kredyty", - "typeDuckets": "Kaczki", - "typeDiamonds": "Diamenty", - "typeBadge": "Odznaka", - "typeFurni": "Meble", - "typeRank": "Ranga", - "badgeCode": "Kod odznaki", - "badgeCodePlaceholder": "np. VIP001", - "rankId": "Identyfikator rangi", - "maxUses": "Maks korzysta", - "maxUsesPlaceholder": "0 = nieograniczony", - "expiresAt": "Wygasa o godz", - "enabled": "Włączone", - "save": "Zapisz kupon", - "saving": "Zapisuję…", - "cancel": "Anuluj", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Subskrypcje", - "subtitle": "Aktywne subskrypcje cykliczne", - "noSubscriptions": "Brak aktywnych subskrypcji", - "cancel": "Anuluj", - "confirmCancel": "Anulować subskrypcję użytkownika {username}?", - "colId": "Identyfikator", - "colUser": "Użytkownik", - "colPackage": "Pakiet", - "colAmount": "Kwota", - "colInterval": "Interwał", - "colStarted": "Rozpoczęło się", - "colNextBilling": "Następne rozliczenie", - "colStatus": "Stan", - "colActions": "Działania", - "statusActive": "Aktywny", - "statusCancelled": "Anulowano", - "statusExpired": "Wygasło" - }, - "rareValues": { - "title": "Rzadkie wartości", - "subtitle": "Zarządzaj rzadkimi kategoriami wartości i cenami przedmiotów", - "categories": "Kategorie", - "items": "Przedmioty", - "addCategory": "Dodaj kategorię", - "editCategory": "Edytuj kategorię", - "deleteCategory": "Usuń kategorię", - "noCategories": "Nie ma jeszcze rzadkich kategorii wartości", - "confirmDeleteCategory": "Usunąć kategorię „{name}” i wszystkie jej elementy?", - "colId": "Identyfikator", - "colName": "Imię", - "colItems": "Przedmioty", - "colUpdated": "Zaktualizowano", - "colActions": "Działania", - "colItemName": "Nazwa przedmiotu", - "colCredits": "Kredyty", - "colPoints": "Punkty", - "colPointType": "Typ punktu", - "categoryForm": { - "name": "Imię", - "namePlaceholder": "Nazwa kategorii", - "save": "Zapisz kategorię", - "saving": "Zapisuję…", - "cancel": "Anuluj" - }, - "itemForm": { - "itemName": "Nazwa przedmiotu", - "itemNamePlaceholder": "np. Tron", - "credits": "Wartość kredytów", - "points": "Wartość punktów", - "pointType": "Typ punktu", - "pointTypeDuckets": "Kaczki", - "pointTypeDiamonds": "Diamenty", - "save": "Zapisz element", - "saving": "Zapisuję…", - "cancel": "Anuluj" - } - }, - "badges": { - "title": "Odznaki", - "subtitle": "Przesyłaj, udostępniaj i zarządzaj katalogiem odznak", - "upload": "Prześlij", - "giveBadge": "Daj odznakę", - "catalogue": "Katalog", - "uploadTitle": "Prześlij nową odznakę", - "uploadSubtitle": "Prześlij plik obrazu plakietki", - "badgeCode": "Kod odznaki", - "badgeCodePlaceholder": "np. VIP001", - "badgeFile": "Plik odznaki", - "badgeFileHint": "PNG lub GIF, zalecany rozmiar 40 x 40", - "uploadButton": "Prześlij", - "uploading": "Przesyłanie…", - "giveTitle": "Daj odznakę użytkownikowi", - "giveSubtitle": "Przyznaj odznakę konkretnemu użytkownikowi", - "username": "Nazwa użytkownika", - "usernamePlaceholder": "Docelowa nazwa użytkownika", - "giveButton": "Daj odznakę", - "giving": "Dawanie…", - "catalogueTitle": "Katalog odznak", - "catalogueSubtitle": "Wszystkie dostępne odznaki w hotelu", - "noBadges": "Brak odznak w katalogu", - "search": "Wyszukaj odznaki", - "searchPlaceholder": "Szukaj według kodu lub nazwy…", - "colCode": "Kod", - "colImage": "Obraz", - "colName": "Imię", - "colDescription": "Opis", - "colActions": "Działania" - }, - "achievements": { - "title": "Osiągnięcia", - "subtitle": "Lista osiągnięć w grze tylko do odczytu", - "noAchievements": "Nie skonfigurowano żadnych osiągnięć", - "colId": "Identyfikator", - "colName": "Imię", - "colCategory": "Kategoria", - "colLevels": "Poziomy", - "colReward": "Nagroda", - "colProgress": "Postęp", - "levelLabel": "Poziom {level}", - "rewardCredits": "{count} kredytów", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Kampanie kalendarzowe", - "subtitle": "Lista kampanii i wydarzeń w kalendarzu tylko do odczytu", - "noCampaigns": "Nie ma jeszcze kampanii w kalendarzu", - "colId": "Identyfikator", - "colName": "Imię", - "colStart": "Zacznij", - "colEnd": "Koniec", - "colType": "Wpisz", - "colReward": "Nagroda", - "colActions": "Działania", - "detail": { - "title": "Kampania: {name}", - "subtitle": "Szczegóły wydarzenia w kalendarzu", - "days": "Dni", - "dayLabel": "Dzień {day}", - "reward": "Nagroda", - "noDays": "Nie skonfigurowano dni dla tej kampanii" - } - }, - "radio": { - "title": "Moderacja radiowa", - "subtitle": "Najnowsze krzyki, aplikacje dla DJ-ów i harmonogramy nadawania (25 najnowszych z każdego).", - "moderation": "Umiarkowanie", - "shouts": "Krzyki", - "applications": "Aplikacje", - "schedules": "Harmonogramy", - "settings": "Ustawienia", - "embed": "Osadź", - "ranks": "Rangi", - "history": "Historia", - "apiKeys": "Klucze API", - "points": "Punkty", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Monitorowanie radia", - "subtitle": "Sonda na żywo tylko do odczytu skonfigurowanych punktów końcowych radiowych (radio_now_playing_api_url, radio_listeners_api_url). Każde żądanie kończy się niepowodzeniem po upływie limitu czasu {timeout} — żadne dane nie są zapisywane. Skonfiguruj adresy URL w Ustawieniach.", - "stream": "Strumień", - "online": "W Internecie", - "offline": "Nieaktywny", - "notConfigured": "Nie skonfigurowano", - "nowPlaying": "Teraz gram", - "nowPlayingApi": "Teraz odtwarzane API", - "listenersApi": "API słuchaczy", - "listeners": "Słuchacze", - "currentSong": "Aktualna piosenka", - "bitrate": "Szybkość transmisji", - "status": "Stan", - "noNowPlayingHint": "brak aktualnie odtwarzanego zestawu API", - "noListenersHint": "brak zestawu API odbiorników", - "endpointDiagnostics": "Diagnostyka punktów końcowych", - "diagnosticsLegend": "OK: dostępne · WARN: nieskonfigurowane · ERROR: błąd żądania lub przekroczony limit czasu.", - "streamUrl": "Adres URL strumienia", - "unreachable": "nieosiągalny", - "refresh": "Odśwież" - }, - "user": "Użytkownik", - "message": "Wiadomość", - "posted": "Wysłano", - "realName": "Prawdziwe imię", - "age": "Wiek", - "style": "Styl", - "applied": "Zastosowano", - "day": "Dzień", - "start": "Zacznij", - "end": "Koniec", - "show": "Pokaż", - "status": "Stan", - "active": "aktywny", - "inactive": "nieaktywny", - "hidden": "ukryty", - "activeSchedules": "Aktywne harmonogramy", - "noShouts": "Żadnych krzyków do moderowania", - "noApplications": "Nie złożono żadnych wniosków.", - "noSchedules": "Nie skonfigurowano żadnych harmonogramów.", - "deleteShout": "Usuń", - "confirmDeleteShout": "Usunąć ten krzyk?", - "pendingApplications": "Oczekujące wnioski", - "settingsForm": { - "title": "Ustawienia radia", - "subtitle": "Zmiany zapisują w ustawieniach witryny internetowej (klucze radio_*) i niszczą pamięć podręczną ustawień środowiska wykonawczego. Wartości logiczne używają 0/1.", - "enabled": "Włączone", - "disabled": "Niepełnosprawny", - "totalKeys": "Razem klucze", - "configured": "Skonfigurowane", - "curatedHint": "wyselekcjonowane klucze z wartością", - "customKeys": "Niestandardowe klucze", - "saveAll": "Zapisz wszystko", - "singleKey": "Dodaj/zastąp pojedynczy klucz", - "keyPlaceholder": "radio_niestandardowy_klucz", - "valuePlaceholder": "wartość", - "commentPlaceholder": "komentarz (opcjonalnie)", - "saveSingle": "Zapisz", - "otherSettings": "Inne ustawienia radia", - "dbError": "Nie można wczytać ustawień (baza danych jest niedostępna). Wartości domyślne zostaną utworzone po zapisaniu." - }, - "embedPage": { - "title": "Wbudowanie radia", - "subtitle": "Gotowy do skopiowania kod do osadzenia transmisji na żywo. Tylko do odczytu — nic tutaj nie zapisuje do bazy danych. Skonfiguruj adres URL strumienia w Ustawieniach radia (radio_stream_url).", - "streamUrl": "Adres URL strumienia", - "configured": "Skonfigurowane", - "missing": "Brak", - "radioName": "Nazwa radia", - "nowPlayingApi": "Teraz odtwarzane API", - "set": "Zestaw", - "notSet": "Nie ustawiono", - "noStreamUrl": "Nie skonfigurowano adresu URL strumienia", - "noStreamUrlText": "Nie ma ustawionego radio_stream_url, więc nie ma jeszcze czego osadzać.", - "goToSettings": "Przejdź do Ustawień radia", - "livePreview": "Podgląd na żywo", - "livePreviewText": "To jest goły odtwarzacz audio, jaki zobaczą odwiedzający. Naciśnij przycisk odtwarzania, aby potwierdzić, że strumień jest osiągalny.", - "source": "Źródło", - "audioSnippet": "Fragment odtwarzacza audio", - "audioSnippetDesc": "Wpuszczany odtwarzacz audio HTML5 skierowany bezpośrednio na strumień. Działa wszędzie tam, gdzie dozwolony jest zwykły HTML.", - "iframeSnippet": "Fragment opakowania iframe", - "iframeSnippetDesc": "Osadza stronę odtwarzacza radiowego witryny w elemencie iframe — zachowuje informacje o Twoim stylu i aktualnie odtwarzanych treściach. Dostosuj szerokość/wysokość do gustu.", - "audioUnsupported": "Twoja przeglądarka nie obsługuje elementu audio." - }, - "banners": { - "title": "Banery", - "heading": "Banery radiowe", - "description": "Banery promocyjne wyświetlane na stronie radia, uporządkowane według kolejności sortowania.", - "addBanner": "Dodaj baner", - "createBanner": "Utwórz baner", - "deleteBanner": "Usuń baner", - "noBanners": "Nie ma jeszcze banerów — dodaj jeden powyżej.", - "existing": "Istniejące banery ({count})", - "save": "Zapisz", - "delete": "Usuń", - "byUser": "przez użytkownika {id}", - "active": "aktywny", - "hidden": "ukryty", - "bannerAlt": "Baner radiowy", - "statusActive": "Aktywny", - "statusHidden": "Ukryty", - "dbError": "Nie można załadować banerów (baza danych jest niedostępna).", - "form": { - "imagePath": "Ścieżka obrazu / adres URL", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Tytuł", - "description": "Opis", - "sortOrder": "Kolejność sortowania", - "active": "Aktywny" - } - }, - "ranksForm": { - "title": "Rangi Radia", - "subtitle": "Możliwość przypisania rang dla DJ-ów/personelu w aplikacjach radiowych.", - "dbError": "Nie można wczytać rankingów (baza danych jest niedostępna).", - "active": "Aktywny", - "addRank": "Dodaj rangę", - "name": "Imię", - "badgeCode": "Kod odznaki", - "description": "Opis", - "createRank": "Utwórz rangę", - "existing": "Istniejące stopnie ({count})", - "noRanks": "Nie ma jeszcze żadnych rang — dodaj jedną powyżej.", - "activeLabel": "aktywny", - "inactiveLabel": "nieaktywny", - "save": "Zapisz", - "deleteRank": "Usuń rangę #{id}" - }, - "historyPage": { - "title": "Historia odtwarzania radia", - "subtitle": "Wcześniejsze występy DJ-ów i czas antenowy (radio_history), najnowsze jako pierwsze. Rejestr tylko do odczytu, kto, kiedy i ilu słuchaczy był na antenie.", - "dbError": "Nie można wczytać historii radia (baza danych jest niedostępna).", - "showsLogged": "Pokazuje zalogowane", - "onAirNow": "Teraz na antenie", - "uniqueDjs": "Wyjątkowi DJe", - "peakListeners": "Szczyt słuchaczy", - "empty": "Nie zarejestrowano jeszcze historii radia.", - "showLog": "Pokaż dziennik ({count})", - "colDj": "DJ", - "colShow": "Pokaż", - "colStarted": "Rozpoczęło się", - "colEnded": "Zakończone", - "colAirtime": "Czas antenowy", - "colListeners": "Słuchacze", - "colNotes": "Notatki", - "onAir": "na antenie" - }, - "apiKeysForm": { - "title": "Klucze API radia", - "subtitle": "Klucze API do integracji zewnętrznych radiotelefonów (radio_api_keys). Klucze są generowane po stronie serwera i wyświetlane jako zamaskowane — przy pierwszym wydaniu skopiuj pełną wartość z bazy danych.", - "dbError": "Nie można załadować kluczy API (baza danych jest niedostępna).", - "totalKeys": "Razem klucze", - "active": "Aktywny", - "inactive": "Nieaktywny", - "generateKey": "Wygeneruj klucz", - "generateHint": "Tajny klucz jest generowany automatycznie z kryptograficzną losowością – nie wprowadzasz go.", - "name": "Imię", - "namePlaceholder": "Most AzureCast", - "rateLimit": "Limit szybkości (żądania/min)", - "allowedIps": "Dozwolone adresy IP (opcjonalnie)", - "allowedIpsPlaceholder": "oddzielone przecinkami, puste = dowolne", - "generate": "Wygeneruj klucz", - "existingKeys": "Istniejące klucze ({count})", - "noKeys": "Nie ma jeszcze kluczy API — wygeneruj jeden powyżej.", - "colName": "Imię", - "colKey": "Klucz", - "colAllowedIps": "Dozwolone adresy IP", - "colRateLimit": "Limit stawki", - "colLastUsed": "Ostatnio używany", - "colExpires": "Wygasa", - "colStatus": "Stan", - "colActions": "Działania", - "maskedHint": "Wyświetlanych jest tylko pierwszych 8 znaków", - "any": "dowolny", - "activeLabel": "aktywny", - "inactiveLabel": "nieaktywny", - "deactivate": "Dezaktywuj", - "activate": "Aktywuj", - "delete": "Usuń" - }, - "pointsForm": { - "title": "Punkty słuchacza radia", - "subtitle": "Nagradzaj słuchaczy walutą za czas spędzony w radiu. Zmiany zapisują w ustawieniach witryny internetowej (klucze radio_points_*) i niszczą pamięć podręczną ustawień środowiska wykonawczego. Wartości logiczne używają 0/1.", - "saved": "Zapisano", - "points": "Punkty", - "enabled": "Włączone", - "disabled": "Niepełnosprawny", - "perMinute": "Na minutę", - "paidIn": "płatne w {currency}", - "maxPerDay": "Maks./dzień", - "unlimited": "Nieograniczony", - "minListeners": "Min. słuchaczy", - "settings": "Ustawienia", - "pointsEnabled": "Punkty włączone", - "pointsEnabledHint": "Przełącznik główny do przyznawania punktów słuchacza.", - "currency": "Waluta", - "currencyHint": "Do jakiego portfela wpłacane są punkty.", - "pointsPerMinute": "Punkty na minutę", - "pointsPerMinuteHint": "Kwota przyznawana za każdą pełną minutę słuchania.", - "maxPerDayHint": "Limit dzienny na użytkownika. Użyj 0, aby uzyskać nieograniczone.", - "minListenersHint": "Punkty zostaną przyznane dopiero wtedy, gdy co najmniej tyle osób dołączy do kanału.", - "save": "Zapisz ustawienia punktów" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Zastępcza lista odtwarzania (radio_auto_dj_playlist) radio zmienia się, gdy żaden DJ nie transmituje na żywo. Uporządkowane według kolejności sortowania, a następnie tytułu.", - "dbError": "Nie można załadować listy odtwarzania AutoDJ (baza danych jest niedostępna).", - "tracks": "Utwory", - "active": "Aktywny", - "inactive": "Nieaktywny", - "addTrack": "Dodaj utwór", - "titlePlaceholder": "Tytuł utworu", - "artist": "Artysta", - "album": "Albumu", - "artworkUrl": "Adres URL grafiki", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Czas trwania (sekundy)", - "durationPlaceholder": "np. 215", - "sortOrder": "Kolejność sortowania", - "playlist": "Playlista ({count})", - "noTracks": "Nie ma jeszcze utworów AutoDJ — dodaj jeden powyżej.", - "colOrder": "Zamów", - "colTitle": "Tytuł", - "colArtist": "Artysta", - "colAlbum": "Albumu", - "colDuration": "Czas trwania", - "colPlays": "Odtwarza", - "colLastPlayed": "Ostatnio odtwarzane", - "colStatus": "Stan", - "colActions": "Działania", - "activeLabel": "aktywny", - "inactiveLabel": "nieaktywny", - "deactivate": "Dezaktywuj", - "activate": "Aktywuj", - "delete": "Usuń", - "trackTitle": "Tytuł" - }, - "moderationPage": { - "title": "Moderacja DJ-a", - "subtitle": "Przejrzyj i usuń krzyki radiowe (50 najnowszych).", - "recentShouts": "Ostatnie krzyki ({count})" - } - }, - "commandocentrum": { - "title": "Centrum Komandosów", - "subtitle": "Diagnostyka, kontrola RCON i zarządzanie użytkownikami", - "diagnostics": "Diagnostyka", - "rcon": "RCON", - "userActions": "Działania użytkownika", - "diagnosticsTitle": "Diagnostyka emulatora", - "memoryUsage": "Użycie pamięci", - "uptime": "Czas pracy", - "onlineUsers": "Użytkownicy Internetu", - "roomsLoaded": "Pokoje załadowane", - "refresh": "Odśwież", - "rconTitle": "Polecenia RCON", - "rconPlaceholder": "Wprowadź polecenie RCON…", - "rconSend": "Wyślij", - "rconSending": "Wysyłam…", - "rconResponse": "Odpowiedź", - "userActionsTitle": "Działania użytkownika", - "username": "Nazwa użytkownika", - "usernamePlaceholder": "Docelowa nazwa użytkownika", - "action": "Akcja", - "execute": "Wykonaj", - "actions": { - "disconnect": "Rozłącz", - "alert": "Wyślij powiadomienie", - "giveCredits": "Daj kredyty", - "giveBadge": "Daj odznakę", - "givePoints": "Daj punkty", - "ban": "Zakaz", - "kick": "Kopnij" - }, - "messagePlaceholder": "Wiadomość (dla alertów)…", - "amountPlaceholder": "Kwota…", - "badgePlaceholder": "Kod plakietki…" - }, - "emulator": { - "title": "Konfiguracja emulatora", - "subtitle": "Przeglądaj i edytuj ustawienia emulatora oraz teksty ustawień regionalnych", - "settings": "Ustawienia", - "texts": "Teksty", - "search": "Szukaj", - "searchPlaceholder": "Wyszukaj klucze…", - "noSettings": "Nie znaleziono ustawień", - "noTexts": "Nie znaleziono żadnych tekstów", - "edit": "Edytuj", - "save": "Zapisz", - "saving": "Zapisuję…", - "cancel": "Anuluj", - "colKey": "Klucz", - "colValue": "Wartość", - "colType": "Wpisz", - "colActions": "Działania", - "editDialog": { - "title": "Edycja: {key}", - "value": "Wartość", - "valuePlaceholder": "Wpisz wartość…", - "save": "Zapisz zmiany", - "cancel": "Anuluj" - } - }, - "alerts": { - "title": "Alerty", - "subtitle": "Wysyłaj alerty dotyczące całego hotelu i przeglądaj najnowsze alerty", - "sendAlert": "Wyślij alert hotelowy", - "recentAlerts": "Ostatnie alerty ({count})", - "noRecentAlerts": "Brak ostatnich alertów", - "form": { - "title": "Tytuł alertu", - "titlePlaceholder": "np. Konserwacja serwera w 10 minut", - "message": "Komunikat ostrzegawczy", - "messagePlaceholder": "Napisz wiadomość ostrzegawczą…", - "type": "Wpisz", - "typeHotel": "Alarm dla całego hotelu", - "typeStaff": "Tylko personel", - "urgent": "Pilne", - "send": "Wyślij powiadomienie", - "sending": "Wysyłam…", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "Identyfikator", - "colTitle": "Tytuł", - "colSentBy": "Wysłane przez", - "colType": "Wpisz", - "colDate": "Data", - "colActions": "Działania", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Działalność personelu", - "subtitle": "Ścieżka audytu działań personelu w panelu administracyjnym", - "noLogs": "Nie zarejestrowano jeszcze żadnej aktywności personelu", - "colId": "Identyfikator", - "colUser": "Użytkownik", - "colAction": "Akcja", - "colTarget": "Cel", - "colDescription": "Opis", - "colIp": "IP", - "colTimestamp": "Znacznik czasu", - "filterByUser": "Filtruj według użytkownika…", - "filterByAction": "Filtruj według działania…", - "clearFilters": "Wyczyść filtry", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Filtr słów", - "subtitle": "Zarządzaj filtrowanymi słowami i frazami w hotelu", - "addWord": "Dodaj słowo", - "addWords": "Dodaj słowa", - "noWords": "Nie ma jeszcze odfiltrowanych słów", - "confirmDelete": "Usunąć „{word}” z filtra?", - "colId": "Identyfikator", - "colWord": "Słowo", - "colAddedBy": "Dodane przez", - "colCreated": "Utworzono", - "colActions": "Działania", - "form": { - "word": "Słowo", - "wordPlaceholder": "np. złe słowo", - "addMore": "Dodaj wiele słów (po jednym w wierszu)", - "save": "Dodaj do filtra", - "saving": "Zapisuję…", - "cancel": "Anuluj" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Tryb konserwacji", - "subtitle": "Włącz lub wyłącz konserwację obejmującą cały hotel", - "enabled": "Tryb konserwacji jest włączony", - "disabled": "Tryb konserwacji jest wyłączony", - "enable": "Włącz konserwację", - "disable": "Wyłącz konserwację", - "message": "Komunikat o konserwacji", - "messagePlaceholder": "Wkrótce wrócimy!", - "staffAccess": "Zezwól personelowi na dostęp podczas konserwacji", - "save": "Zapisz ustawienia", - "saving": "Zapisuję…", - "confirmEnable": "Włączenie konserwacji uniemożliwi dostęp do hotelu wszystkim osobom niebędącym pracownikami. Kontynuować?", - "confirmDisable": "Wyłączyć tryb konserwacji i przywrócić dostęp wszystkim użytkownikom?" - }, - "housekeeping": { - "title": "Zezwolenia na sprzątanie", - "subtitle": "Skonfiguruj, które rangi mają dostęp do poszczególnych sekcji administracyjnych", - "addPermission": "Dodaj pozwolenie", - "editPermission": "Edytuj uprawnienia", - "deletePermission": "Usuń pozwolenie", - "noPermissions": "Nie skonfigurowano uprawnień do sprzątania", - "confirmDelete": "Usunąć to uprawnienie?", - "colId": "Identyfikator", - "colRank": "Ranga", - "colSection": "Sekcja", - "colActions": "Działania", - "form": { - "rankId": "Identyfikator rangi", - "rankIdPlaceholder": "Minimalna ranga", - "section": "Klucz sekcji", - "sectionPlaceholder": "np. panel administracyjny", - "save": "Zapisz pozwolenie", - "saving": "Zapisuję…", - "cancel": "Anuluj" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset Zastosowano!", - "cleared": "All Uprawnienia cleared!", - "invalidRank": "Invalid Ranga", - "testDone": "Test done: {count} Uprawnienia found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Usuń ALL Uprawnienia? This Akcja cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Pozwolenie", - "colDescription": "Opis", - "colMinRank": "Min. Ranga", - "permissionKey": "Klucz uprawnień", - "minRank": "Min. Ranga", - "description": "Opis", - "permissions": "Uprawnienia", - "permissionsCount": "{count} Uprawnienia", - "permission": "Pozwolenie", - "highestMinRank": "Highest min. Ranga: {rank}", - "totalMinRank": "Total min. Ranga sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Rangi", - "missingDeps": "{count} Brak dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Brak)", - "rank": "Ranga", - "count": "Count", - "searchPermission": "Szukaj Uprawnienia…", - "search": "Szukaj", - "manage": "Manage", - "importSelection": "Importuj selection", - "noGroup": "Nie group", - "allGroups": "All groups", - "perGroup": "Uprawnienia per group", - "perRank": "Uprawnienia per Ranga", - "rankOverviewHint": "All Uprawnienia grouped by the Ranga they are assigned to.", - "tabOverview": "Przegląd", - "tabManage": "Manage", - "tabImport": "Importuj / Export", - "tabRanks": "Ranga Przegląd", - "tabPresets": "Ustawienia wstępne", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Importuj Uprawnienia", - "importHint": "Paste a JSON array of Pozwolenie objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Importuj", - "exportTitle": "Export Uprawnienia", - "exportHint": "Export all Uprawnienia as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Pozwolenie Ustawienia wstępne", - "presetsHint": "Zastosuj a predefined Zestaw of Uprawnienia for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Umiarkowanie tools: Użytkownik lookup, Zakazy, CFH handling, chat Dzienniki.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Użytkownicy, Pokoje, news, Ustawienia, Sklep, events, Radia & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Pozwolenie management and asset Importuj.", - "applyPreset": "Zastosuj preset", - "clearAll": "Clear all Uprawnienia", - "testTitle": "Test Ranga access", - "testHint": "Enter a Ranga number to see which Uprawnienia would be granted.", - "test": "Test", - "auditTitle": "Pozwolenie audit log", - "auditHint": "All changes to Sprzątanie Uprawnienia are logged.", - "auditLogsAt": "Audit Dzienniki are available on the Audit log page.", - "viewAuditLogs": "Zobacz audit Dzienniki", - "importedWithErrors": "Imported {count} Uprawnienia with {errors} errors", - "confirmClearAllDesc": "This will Usuń every Pozwolenie entry from the Baza danych. Are you sure?", - "confirmDeletePermission": "Usuń this Pozwolenie permanently?", - "confirmBulkDelete": "Usuń {count} selected Uprawnienia?", - "deleteSelected": "Usuń {count} selected", - "cancel": "Anuluj", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Użytkownik", - "auditAction": "Akcja", - "auditTarget": "Cel", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Pokoje", - "subtitle": "Wyszukuj pokoje hotelowe i zarządzaj nimi", - "search": "Szukaj", - "searchPlaceholder": "Szukaj według nazwy, właściciela lub identyfikatora…", - "searchResults": "Znaleziono {count, plural, one {# room} other {# rooms}} dla „{query}”", - "noResults": "Nie znaleziono pokoi", - "colId": "Identyfikator", - "colName": "Imię", - "colOwner": "Właściciel", - "colUsers": "Użytkownicy", - "colState": "Stan", - "colCategory": "Kategoria", - "colCreated": "Utworzono", - "colActions": "Działania", - "stateOpen": "Otwórz", - "stateClosed": "Zamknięte", - "stateLocked": "Zablokowane", - "stateInvisible": "Niewidzialny", - "detail": { - "title": "Pokój: {name}", - "subtitle": "Należy do: {owner}", - "overview": "Przegląd", - "actions": "Działania", - "description": "Opis", - "noDescription": "Brak opisu", - "owner": "Właściciel", - "users": "Użytkownicy w Internecie", - "maxUsers": "Maksymalna liczba użytkowników", - "category": "Kategoria", - "state": "Stan", - "tags": "Tagi", - "noTags": "Brak tagów", - "created": "Utworzono", - "deleteRoom": "Usuń pokój", - "confirmDelete": "Usunąć pokój „{name}”? Tego nie można cofnąć.", - "enterRoom": "Wejdź do pokoju", - "changeOwner": "Zmień właściciela", - "changeOwnerPlaceholder": "Nowa nazwa użytkownika właściciela" - } - }, - "emailTemplates": { - "title": "Szablony e-maili", - "subtitle": "Zarządzaj szablonami e-maili transakcyjnych", - "newTemplate": "+ Nowy szablon", - "edit": "Edytuj", - "delete": "Usuń", - "noTemplates": "Nie ma jeszcze szablonów e-maili", - "confirmDelete": "Usunąć szablon „{name}”?", - "colId": "Identyfikator", - "colName": "Imię", - "colSubject": "Temat", - "colKey": "Klucz", - "colUpdated": "Zaktualizowano", - "colActions": "Działania", - "form": { - "name": "Imię", - "namePlaceholder": "np. Witamy e-mail", - "key": "Klucz", - "keyPlaceholder": "np. powitalny_e-mail", - "subject": "Temat", - "subjectPlaceholder": "Temat wiadomości e-mail", - "body": "Treść (HTML)", - "bodyPlaceholder": "

Szanowny {username},

", - "variables": "Dostępne zmienne", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Zapisz szablon", - "saving": "Zapisuję…", - "cancel": "Anuluj" - } - }, - "theme": { - "title": "Temat", - "subtitle": "Dostosuj wygląd CMS", - "presets": "Ustawienia wstępne", - "colours": "Kolory", - "css": "CSS", - "presetsTitle": "Wstępne ustawienia motywu", - "presetsSubtitle": "Wybierz gotowy schemat kolorów", - "applyPreset": "Zastosuj", - "presetApplied": "Zastosowano ustawienie wstępne: {preset}", - "customiseTitle": "Kolory niestandardowe", - "primary": "Podstawowy", - "secondary": "Drugorzędne", - "accent": "Akcent", - "background": "Tło", - "surface": "Powierzchnia", - "text": "Tekst", - "saveColours": "Zapisz kolory", - "savingColours": "Zapisuję…", - "cssTitle": "Niestandardowy CSS", - "cssSubtitle": "Dodaj niestandardowy CSS, aby zastąpić style motywu", - "cssPlaceholder": "/* Tutaj Twój niestandardowy CSS */", - "saveCss": "Zapisz CSS", - "savingCss": "Zapisuję…", - "reset": "Przywróć ustawienia domyślne", - "confirmReset": "Zresetować motyw do wartości domyślnych?" - }, - "media": { - "title": "Biblioteka multimediów", - "subtitle": "Przesyłaj i zarządzaj plikami multimedialnymi", - "upload": "Prześlij", - "uploadTitle": "Prześlij plik", - "uploadSubtitle": "Przeciągnij i upuść lub kliknij, aby przesłać", - "uploadButton": "Wybierz plik", - "uploading": "Przesyłanie…", - "noFiles": "Nie ma jeszcze plików multimedialnych", - "delete": "Usuń", - "confirmDelete": "Trwale usunąć ten plik?", - "search": "Szukaj", - "searchPlaceholder": "Wyszukaj według nazwy pliku…", - "colPreview": "Podgląd", - "colName": "Imię", - "colSize": "Rozmiar", - "colType": "Wpisz", - "colUploaded": "Przesłano", - "colActions": "Działania", - "copyUrl": "Skopiuj adres URL", - "urlCopied": "Adres URL skopiowany do schowka" - }, - "favicon": { - "title": "Favikona", - "subtitle": "Przesyłaj favikonę witryny i zarządzaj nią", - "current": "Bieżąca ikona ulubionych", - "uploadLabel": "Prześlij favikonę", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO lub SVG. Maks. 2 MB.", - "upload": "Prześlij", - "uploading": "Przesyłanie…", - "delete": "Usuń", - "deleting": "Usuwam…", - "saved": "Favikona została zapisana pomyślnie!", - "deleted": "Favicon został pomyślnie usunięty!", - "error": "Coś poszło nie tak", - "confirmDelete": "Usunąć favikonę? Witryna nie będzie już wyświetlać niestandardowej ikony ulubionych.", - "generator": { - "title": "Wygeneruj favikonę", - "text": "Tekst", - "bgColor": "Kolor tła", - "textColor": "Kolor tekstu", - "rounded": "Zaokrąglone rogi", - "save": "Zapisz jako favikonę" - }, - "cancel": "Cancel" - }, - "settings": { - "title": "Ustawienia CMSa", - "subtitle": "Zarządzaj konfiguracją CMS typu klucz/wartość", - "addSetting": "Dodaj ustawienie", - "edit": "Edytuj", - "delete": "Usuń", - "noSettings": "Nie znaleziono ustawień", - "confirmDelete": "Usunąć ustawienie „{key}”?", - "colKey": "Klucz", - "colValue": "Wartość", - "colUpdated": "Zaktualizowano", - "colActions": "Działania", - "form": { - "key": "Klucz", - "keyPlaceholder": "np. nazwa_hotelu", - "value": "Wartość", - "valuePlaceholder": "Wartość ustawienia", - "save": "Zapisz ustawienie", - "saving": "Zapisuję…", - "cancel": "Anuluj" - }, - "keysInDatabase": "{count} keys in database", - "managedInForm": "{count} managed in form", - "documented": "{count} documented", - "saved": "Settings saved.", - "saveFailed": "Could not save settings.", - "saveSettings": "Save settings", - "viewOnly": "You can view settings but need edit permission to change them." - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Start", - "reload": "Przeładuj", - "fullscreen": "Pełny ekran", - "logout": "Wyloguj", - "onlineUsers": "Użytkownicy online", - "emulatorOnline": "Emulator online", - "emulatorOffline": "Emulator offline", - "dragToMove": "Przeciągnij, aby przenieść", - "hide": "Ukryj pasek", - "fullscreenExit": "Zamknij pełny ekran", - "show": "Pokaż pasek", - "emulatorUnknown": "Status emulatora nieznany" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Diagnostyka plików", - "preliminary": "Wstępna kontrola adresów; zawartość zostanie sprawdzona podczas importu.", - "http": "HTTP {status}", - "network": "Połączenie nie powiodło się", - "timeout": "Źródło nie odpowiedziało na czas", - "invalidResponse": "Źródło zwróciło stronę zamiast pliku", - "available": "Plik znaleziony; oczekuje na weryfikację", - "recover": "Dołącz oryginał i wznów", - "recoveryHint": "Wybierz {file} (do 50 MB). Tożsamość pliku jest sprawdzana. Ponawiane są nieudane pozycje; ukończone importy zostają zachowane.", - "attach": "Wybierz oryginalny plik .nitro", - "working": "Sprawdzanie lub wznawianie...", - "attached": "Dołączono pasujący oryginał", - "resume": "Wznów nieudane importy z tym plikiem", - "invalidFile": "Wybierz pasujący oryginalny plik .nitro do 50 MB i spróbuj ponownie.", - "resumeError": "Odśwież historię i użyj ostatniej próby; sprawdź plik i spróbuj ponownie.", - "mismatchedFile": "Ten plik należy do innego mebla.", - "alreadyStarted": "Odzyskiwanie już rozpoczęto. Odśwież historię i użyj ostatniej próby.", - "notEligible": "Tej pozycji nie można odzyskać za pomocą załącznika." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "Kopia do odzyskania będzie przechowywana w tej przeglądarce przez 7 dni.", + "saved": "Kopia do odzyskania została zapisana w tej przeglądarce na 7 dni.", + "unavailable": "Odzyskiwanie w przeglądarce jest niedostępne. Nie zamykaj tej strony, dopóki zmiany nie zostaną zapisane.", + "found": "W tej przeglądarce jest dostępna kopia do odzyskania, zapisana", + "restore": "Przywróć kopię z przeglądarki", + "discard": "Usuń kopię z przeglądarki", + "confirmRestore": "Zastąpić bieżący formularz kopią z przeglądarki? Sprawdź zawartość przed zapisaniem.", + "confirmDiscard": "Usunąć tę kopię z przeglądarki? Bieżący formularz pozostanie bez zmian." + }, + "nav": { + "home": "Dom", + "community": "Społeczność", + "articles": "Artykuły", + "photos": "Zdjęcia", + "staff": "Personel", + "rankings": "Rankingi", + "guilds": "Gildie", + "leaderboards": "Tabele liderów", + "rareValues": "Rzadkie wartości", + "shop": "Sklep", + "market": "Rynek", + "assistance": "Pomoc", + "helpCenter": "Centrum pomocy", + "myTickets": "Moje bilety", + "badges": "Odznaki", + "radio": "Radia", + "friends": "Przyjaciele", + "messages": "Wiadomości", + "admin": "Administrator", + "openMenu": "Otwórz menu", + "closeMenu": "Zamknij menu", + "drawBadge": "Narysuj odznakę", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} online", + "nitroClient": "Klient nitro", + "tagline": "Wirtualny świat online, w którym możesz stworzyć własnego awatara, nawiązywać przyjaźnie, rozmawiać, tworzyć pokoje i wiele więcej!", + "login": "Zaloguj się", + "or": "Lub", + "createAccount": "Utwórz konto" + }, + "footer": { + "copyright": "© {year} - {hotel} to projekt edukacyjny non-profit" + }, + "pages": { + "staff": { + "title": "Personel", + "subtitle": "Zespół stojący za hotelem", + "ranksTitle": "Rangi", + "ranksSubtitle": "Czym zajmuje się każda część zespołu", + "membersTitle": "Członkowie zespołu", + "membersEmptySubtitle": "Nie ma nikogo do pokazania w tej chwili", + "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", + "emptyState": "Brak pracowników do pokazania.", + "colUsername": "Nazwa użytkownika", + "colRank": "Ranga", + "colMotto": "Motto", + "viewProfile": "View profile", + "noMotto": "No motto set", + "loadError": "Unable to load staff members. Please try again shortly.", + "retry": "Try again" + }, + "leaderboard": { + "title": "Tabela liderów", + "subtitle": "20 najlepszych graczy według {currency}", + "tab_credits": "Kredyty", + "tab_diamonds": "Diamenty", + "tab_duckets": "Kaczki", + "tab_achievement": "Osiągnięcia", + "tab_respects": "Szacunek", + "tab_onlinetime": "Czas w internecie", + "emptyState": "Nie ma jeszcze żadnych rankingów do pokazania.", + "colAvatar": "Awatar", + "colPlayer": "Gracz" + }, + "friends": { + "title": "Przyjaciele", + "emptySubtitle": "Nie masz jeszcze dodanych znajomych", + "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", + "emptyState": "Dodaj znajomych w hotelu, a oni się tutaj pojawią.", + "noMotto": "Żadnego motta", + "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": "Wiadomości", + "subtitle": "Czekają na Ciebie zaproszenia do znajomych i wiadomości offline", + "requestsTitle": "Prośby znajomych", + "requestsEmptySubtitle": "Nikt jeszcze nie został Twoim przyjacielem", + "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", + "requestsEmptyState": "Brak oczekujących zaproszeń do znajomych.", + "wantsToBeFriend": "chce być twoim przyjacielem.", + "accept": "Zaakceptuj", + "offlineTitle": "Wiadomości offline", + "offlineEmptySubtitle": "Twoja skrzynka odbiorcza jest pusta", + "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", + "offlineEmptyState": "Nie masz żadnych wiadomości offline.", + "unknownUser": "Użytkownik nr {id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Żadnego motta", + "statRank": "Ranga", + "statCredits": "Kredyty", + "statRegistered": "Zarejestrowany", + "badgesTitle": "Odznaki", + "badgesEmpty": "Nie ma jeszcze odznak.", + "photosTitle": "Zdjęcia", + "photosEmpty": "Nie ma jeszcze zdjęć.", + "guestbookTitle": "Księga gości", + "guestbookSubtitle": "Wiadomości na tablicy użytkownika {username}", + "leaveMessage": "Zostaw wiadomość", + "guestbookPlaceholder": "Napisz coś w księdze gości {username}…", + "post": "Opublikuj", + "loginToPost": "Zaloguj się, aby zostawić wiadomość w księdze gości.", + "guestbookEmpty": "Nie ma jeszcze żadnych wpisów w księdze gości.", + "unknownUser": "Użytkownik nr {id}", + "statDuckets": "Kaczki", + "statDiamonds": "Diamenty", + "walletTitle": "Portfel", + "friendsTitle": "Przyjaciele", + "friendsSubtitle": "Ludzie w hotelu, z którymi spędzają czas", + "friendsEmpty": "Brak znajomych do pokazania.", + "roomsTitle": "Pokoje", + "roomsSubtitle": "Pokoje, które są ich własnością", + "roomsEmpty": "Brak pokoi do pokazania.", + "roomUntitled": "Pokój bez tytułu", + "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": "Rankingi", + "subtitle": "12 najlepszych graczy według kredytów", + "emptyState": "Nie ma jeszcze graczy do rankingu." + }, + "home": { + "welcome": "Witamy w {hotelName}", + "welcomeSubtitle": "Twój hotel w stylu retro, teraz obsługiwany przez Next.js", + "welcomeBody": "Spędzaj czas, zbieraj meble i spotykaj się z przyjaciółmi.", + "enterHotel": "Wpisz {hotelName}", + "onlineFriends": "Przyjaciele w Internecie", + "noFriendsOnline": "Brak znajomych w Internecie", + "register": "ZAREJESTRUJ SIĘ TERAZ", + "joinNow": "Dołącz do hotelu {hotelName} już dziś!", + "recentUsers": "Ostatni użytkownicy", + "recentPhotos": "Najnowsze zdjęcia", + "latestNews": "Najnowsze wiadomości", + "newsTitle": "Najnowsze wiadomości", + "newsSubtitle": "Świeżo z hotelu", + "allNews": "Wszystkie aktualności →", + "allUsers": "Społeczność →", + "noArticles": "Nie ma jeszcze artykułów.", + "noPhotos": "Nie ma jeszcze zdjęć.", + "noUsers": "Brak użytkowników online", + "latestArticle": "Najnowszy artykuł", + "latestUsers": "Nowi obywatele ({count} łącznie)", + "statsOnline": "Online", + "statsCitizens": "Obywatele", + "statsRooms": "Pokoje", + "statsArticles": "Artykuły", + "featuresAvatar": "Awatar", + "featuresAvatarDesc": "Stwórz swój niepowtarzalny wygląd", + "featuresFurniture": "Meble", + "featuresFurnitureDesc": "Dekoruj pokoje przedmiotami", + "featuresCommunity": "Społeczność", + "featuresCommunityDesc": "Znajdź przyjaciół i czatuj", + "featuresGames": "Gry", + "featuresGamesDesc": "Rywalizuj i baw się", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Wiadomości", + "subtitle": "Najnowsze ogłoszenia, wydarzenia i aktualności z hotelu", + "noArticles": "Nie ma jeszcze artykułów.", + "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": "← Aktualności", + "reactionsTitle": "Reakcje", + "reactionsSubtitle": "Powiedz nam, co myślisz", + "reaction": { + "like": "Jak", + "love": "Miłość", + "wow": "Wow" + }, + "removeReaction": "Kliknij, aby usunąć swoją reakcję", + "reactWith": "Zareaguj za pomocą {reaction}", + "noReactions": "Nie ma jeszcze żadnych reakcji.", + "logIn": "Zaloguj się", + "toReact": "zareagować.", + "commentsTitle": "Komentarze", + "commentsSubtitle": "Dołącz do rozmowy", + "commentsCount": "dotychczas {count}", + "noComments": "Nie ma jeszcze żadnych komentarzy. Bądź pierwszą osobą, która skomentuje.", + "userNumber": "Użytkownik nr {id}", + "addComment": "Dodaj komentarz", + "commentPlaceholder": "Napisz swój komentarz…", + "postComment": "Opublikuj komentarz", + "toComment": "aby zostawić komentarz.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Zdjęcia", + "subtitle": "Najnowsze zdjęcia zrobione w hotelu", + "noPhotos": "Nie ma jeszcze zdjęć.", + "photoAlt": "Zdjęcie użytkownika #{id}", + "byUser": "przez użytkownika #{id}" + }, + "badges": { + "title": "Odznaki", + "subtitle": "Odznaki, które możesz zdobyć i którymi możesz się pochwalić w całym hotelu", + "noBadges": "Nie ma jeszcze żadnych odznak." + }, + "community": { + "title": "Społeczność", + "subtitle": "Wszystko, co dzieje się wokół hotelu, w jednym miejscu", + "open": "Otwórz →", + "links": { + "rankings": { + "title": "Rankingi", + "text": "Zobacz najbogatszych graczy w hotelu, uszeregowanych według kredytów." + }, + "staff": { + "title": "Personel", + "text": "Poznaj zespół, który na co dzień dba o funkcjonowanie hotelu." + }, + "news": { + "title": "Wiadomości", + "text": "Najnowsze ogłoszenia, wydarzenia i aktualizacje." + }, + "photos": { + "title": "Zdjęcia", + "text": "Migawki udostępniane przez społeczność z całego hotelu." + }, + "guilds": { + "title": "Gildie", + "text": "Przeglądaj grupy, które gracze utworzyli i do których dołączyli." + }, + "leaderboards": { + "title": "Tabele liderów", + "text": "Kto w tym sezonie jest na szczycie statystyk hotelu?" + } + } + }, + "guilds": { + "title": "Gildie", + "subtitle": "Przeglądaj grupy, które gracze utworzyli i do których dołączyli", + "empty": "Nie ma jeszcze gildii.", + "unnamedGuild": "Nienazwana gildia", + "noDescription": "Brak opisu" + }, + "guild": { + "allGuilds": "← Wszystkie gildie", + "unnamedGuild": "Nienazwana gildia", + "noDescription": "Brak opisu", + "memberSingular": "Członek", + "memberPlural": "Członkowie", + "founded": "Założona", + "forumLink": "Forum →", + "discussion": "Dyskusja", + "membersTitle": "Członkowie", + "memberLowerSingular": "członek", + "memberLowerPlural": "członkowie", + "noMembers": "Brak członków.", + "owner": "Właściciel", + "noMotto": "Żadnego motta" + }, + "guildForum": { + "backToGuild": "← Powrót do gildii", + "unnamedGuild": "Nienazwana gildia", + "forumTitle": "{guild} — Forum", + "threadSingular": "wątek", + "threadPlural": "wątki", + "newThread": "+ Nowy wątek", + "empty": "Nie ma jeszcze żadnych wątków na tym forum.", + "colSubject": "Temat", + "colAuthor": "Autor", + "colPosts": "Posty", + "colDate": "Data", + "noSubject": "(bez tematu)", + "pinned": "Przypięty", + "locked": "Zablokowane", + "userNumber": "Użytkownik nr {id}", + "unknown": "Nieznany", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Powrót do forum", + "unnamedGuild": "Nienazwana gildia", + "title": "Nowy wątek", + "subtitle": "na forum {guild}", + "subjectLabel": "Temat", + "subjectPlaceholder": "Temat wątku", + "messageLabel": "Wiadomość", + "messagePlaceholder": "Napisz swój post otwierający…", + "postThread": "Opublikuj wątek", + "cancel": "Anuluj", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Sklep", + "subtitle": "Doładuj swoje konto i zdobądź ekskluzywne pakiety, walutę i odznaki.", + "browsingCategory": "Przeglądanie pakietów {category}.", + "all": "Wszystko", + "allPackages": "Wszystkie pakiety", + "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", + "empty": "W tej chwili nie są dostępne żadne pakiety.", + "buy": "Kup", + "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": "Doładuj za pomocą PayPal", + "subtitle": "Płać bezpiecznie za pomocą systemu PayPal, a Twoje środki zostaną dodane w momencie rozliczenia płatności.", + "cancelled": "Zamówienie zostało anulowane – płatność nie została pobrana.", + "chooseAmount": "Wybierz kwotę", + "notConfiguredPre": "PayPal nie jest jeszcze skonfigurowany. Administrator musi ustawić", + "notConfiguredAnd": "i", + "notConfiguredOptional": "(i opcjonalnie", + "notConfiguredPost": "dla piaskownicy vs. na żywo).", + "balanceTitle": "Twoje saldo", + "signedInAs": "Zalogowano jako {username}", + "credits": "Kredyty", + "creditsPerUnit": "Kredyty za 1,00 {currency}", + "rateLine": "You receive {amount} credits per 1.00 {currency}. Credits appear in-game the next time you log in." + }, + "marketplace": { + "title": "Rynek", + "subtitle": "Przeglądaj meble i rzadkie przedmioty wymienione przez graczy. Oferty są umieszczane w grze i aktualizowane na bieżąco — udaj się do hotelu, aby złożyć ofertę.", + "activeOffers": "Aktywne oferty", + "sellers": "Sprzedawcy", + "totalValue": "Całkowita wartość", + "activeListings": "Aktywne oferty", + "mostRecentFirst": "Ostatnio wymienione na pierwszym miejscu", + "empty": "W tej chwili nie ma aktywnych ofert na rynku. Sprawdź później.", + "colOffer": "Oferta", + "colItem": "Przedmiot", + "colSeller": "Sprzedawca", + "colPrice": "Cena", + "colListed": "Na liście", + "itemLabel": "Pozycja nr{id}", + "userLabel": "Użytkownik nr {id}", + "justNow": "właśnie teraz", + "minutesAgo": "{count}min temu", + "hoursAgo": "{count}h temu", + "daysAgo": "{count}d temu" + }, + "rares": { + "title": "Rzadkie wartości", + "subtitle": "Uzyskaj przegląd wszystkich rzadkich dań w hotelu, pogrupowanych według kategorii.", + "empty": "Obecnie nie mamy tutaj żadnych rzadkich przedmiotów.", + "rareCount": "{count, plural, one {# rare} other {# rares}}", + "viewRares": "Zobacz rzadkie →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", + "allRares": "← Wszystkie rzadkie", + "empty": "W tej kategorii nie ma jeszcze żadnych rzadkich przedmiotów.", + "colRare": "Rzadkie", + "colCredits": "Kredyty", + "colCurrency": "Waluta", + "creditsValue": "{value} kredytów", + "duckets": "Kaczki", + "diamonds": "Diamenty", + "credits": "Kredyty" + }, + "redeem": { + "title": "Zrealizuj kupon", + "subtitle": "Masz kod kuponu? Wpisz go poniżej, aby dodać nagrodę do swojego konta.", + "enterCode": "Wpisz swój kod", + "oncePerAccount": "Każdy kupon można wykorzystać tylko raz na koncie.", + "balanceTitle": "Twoje saldo", + "signedInAs": "Zalogowano jako {username}", + "credits": "Kredyty", + "instantCredit": "Wykorzystane nagrody są przyznawane natychmiast i pojawiają się w grze przy następnym logowaniu." + }, + "help": { + "title": "Centrum pomocy", + "subtitle": "Znajdź przewodniki, tematy pomocy i zasady hotelu — wszystko, czego potrzebujesz, aby uzyskać pomoc.", + "myTickets": "Moje bilety →", + "topicsTitle": "Tematy wsparcia", + "topicsSubtitle": "Przeglądaj przewodniki i odpowiedzi na często zadawane pytania", + "topicsEmpty": "Nie ma jeszcze tematów pomocy.", + "rulesTitle": "Regulamin hotelu", + "rulesSubtitle": "Prosimy o zapoznanie się z nimi przed spędzeniem czasu w hotelu", + "rulesEmpty": "Nie opublikowano jeszcze żadnych zasad.", + "categoryEmpty": "Brak reguł w tej kategorii." + }, + "helpCategory": { + "back": "← Centrum pomocy", + "topicSubtitle": "Temat Centrum pomocy", + "moreTitle": "Więcej tematów pomocy", + "moreSubtitle": "Przejdź do innego tematu pomocy" + }, + "helpTickets": { + "title": "Bilety pomocy", + "subtitle": "Prześlij zgłoszenie pracownikom i śledź otwarte wnioski.", + "statTotal": "Razem bilety", + "statOpen": "Otwórz", + "statClosed": "Zamknięte", + "newTitle": "Nowy bilet", + "newSubtitle": "Opisz swój problem, a personel zajmie się Twoją sprawą", + "subjectPlaceholder": "Temat", + "contentPlaceholder": "Opisz swój problem…", + "submit": "Prześlij bilet", + "listTitle": "Twoje bilety", + "listSubtitle": "Każda prośba wysłana do personelu", + "listEmpty": "Nie masz jeszcze biletów.", + "colId": "Identyfikator", + "colSubject": "Temat", + "colStatus": "Stan", + "colCreated": "Utworzono", + "statusOpen": "Otwórz", + "statusClosed": "Zamknięte", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "Aplikuj na pracownika {hotel}", + "subtitle": "Co jakiś czas otwieramy aplikacje pracownicze. Jeśli znajdziesz stanowisko, na którym Twoim zdaniem będziesz idealnie pasować, nie wahaj się i aplikuj.", + "noPositionsTitle": "Brak otwartych stanowisk", + "noPositionsBody": "Obecnie nie ma żadnych wolnych stanowisk. Prosimy przyjść później i sprawdzić, czy do tego czasu mamy wolne miejsca. Dziękuję za zainteresowanie.", + "noDeadline": "Nie ustalono terminu", + "deadline": "Termin składania wniosków: {date}", + "alreadyApplied": "Aplikowałeś już na {rank}", + "aboutYou": "O tobie", + "aboutPlaceholder": "Powiedz nam, dlaczego byłbyś świetnym {rank}…", + "applyFor": "Złóż wniosek o {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": "Aplikuj do zespołu {hotel}", + "subtitle": "Okresowo otwieramy aplikacje zespołowe. Jeżeli widzisz zespół, który Ci odpowiada, nie wahaj się aplikować!", + "noPositionsTitle": "Brak wolnych stanowisk w zespole", + "noPositionsBody": "Aktualnie nie ma wolnych stanowisk w zespole. Wróć później, aby sprawdzić dostępność nowych ofert. Dziękuję!", + "pending": "Twoje zgłoszenie oczekuje na realizację", + "aboutYou": "O tobie", + "aboutPlaceholder": "Powiedz nam, dlaczego świetnie nadajesz się na stanowisko {rank}…", + "applyFor": "Złóż wniosek o {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": "Radia", + "subtitle": "Włącz hotelowe radio — sety DJ-skie na żywo, prośby i okrzyki.", + "nowPlaying": "Teraz gram", + "nothingPlaying": "Nic nie gra w tej chwili.", + "onAir": "Na antenie: {dj}", + "noDj": "Brak DJ-a na antenie.", + "audioUnsupported": "Twoja przeglądarka nie obsługuje elementu audio.", + "streamOffline": "Transmisja jest obecnie offline.", + "exploreTitle": "Poznaj radio", + "exploreSubtitle": "Harmonogram, krzyki, prośby i nie tylko", + "linkSchedule": "Harmonogram", + "linkScheduleText": "Nasz cotygodniowy skład DJ-ów i występów.", + "linkShouts": "Krzyki", + "linkShoutsText": "Pozdrowienia i prośby społeczności.", + "linkRequests": "Żądania", + "linkRequestsText": "Poproś DJ-a, aby zakręcił Twoim ulubionym utworem.", + "linkApply": "Aplikuj jako DJ", + "linkApplyText": "Dołącz do zespołu i ruszaj na fale radiowe.", + "linkLeaderboard": "Tabela liderów", + "linkLeaderboardText": "Najlepsi słuchacze według zdobytych punktów.", + "todayTitle": "Dzisiejszy harmonogram", + "todayTitleWithDay": "Dzisiejszy harmonogram · {day}", + "todaySubtitle": "Co jest dzisiaj na falach radiowych", + "fullWeek": "Cały tydzień →", + "noShowsToday": "Na dzisiaj nie zaplanowano żadnych występów.", + "colTime": "Czas", + "colShow": "Pokaż", + "colDj": "DJ", + "untitledShow": "Spektakl bez tytułu", + "userNumber": "Użytkownik nr {id}" + }, + "radioSchedule": { + "title": "Harmonogram Radia", + "subtitle": "Nasz cotygodniowy skład DJ-ów i występów", + "empty": "Nie zaplanowano jeszcze żadnych występów.", + "colDay": "Dzień", + "colTime": "Czas", + "colDj": "DJ", + "colShow": "Pokaż", + "noShows": "Żadnych występów" + }, + "radioShouts": { + "title": "Krzyki radiowe", + "subtitle": "Pozdrowienia i prośby społeczności", + "postTitle": "Opublikuj okrzyk", + "postSubtitle": "Wyślij wiadomość do DJ-a na żywo", + "messageLabel": "Twoja wiadomość", + "messagePlaceholder": "Wyślij wiadomość do DJ-a…", + "shoutButton": "Krzycz", + "loginToPost": "Zaloguj się, aby opublikować krzyk.", + "latestTitle": "Najnowsze krzyki", + "latestSubtitle": "Najnowsze wiadomości od słuchaczy", + "empty": "Nie ma jeszcze żadnych krzyków. Bądź pierwszy!", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Konkursy radiowe", + "subtitle": "Dołącz do nas i weź udział w naszych najnowszych konkursach na żywo", + "empty": "Nie ma jeszcze żadnych konkursów.", + "contestLabel": "Konkurs nr{id}", + "dateUnknown": "Data nieznana" + }, + "radioGiveaways": { + "title": "Prezenty radiowe", + "subtitle": "Posłuchaj swojej szansy na wygraną w naszych rozdaniach radiowych", + "empty": "Nie ma jeszcze żadnych prezentów.", + "giveawayLabel": "Rozdanie #{id}", + "dateUnknown": "Data nieznana" + }, + "radioLeaderboard": { + "title": "Tablica liderów słuchaczy radia", + "subtitle": "50 najlepszych słuchaczy pod względem zdobytych punktów podczas słuchania radia", + "empty": "Nie ma jeszcze punktów słuchacza do pokazania.", + "colRank": "Ranga", + "colAvatar": "Awatar", + "colListener": "Słuchacz", + "colPoints": "Punkty" + }, + "radioRequests": { + "formTitle": "Prześlij prośbę", + "formSubtitle": "Poproś DJ-a, aby puścił Twój ulubiony utwór", + "songLabel": "Piosenka", + "songPlaceholder": "Tytuł piosenki", + "artistLabel": "Artysta", + "artistPlaceholder": "Imię i nazwisko artysty (opcjonalnie)", + "submitButton": "Prześlij prośbę", + "loginToRequest": "Zaloguj się, aby złożyć wniosek.", + "latestTitle": "Ostatnie prośby", + "latestSubtitle": "Ostatnio żądane utwory", + "empty": "Nie ma jeszcze żadnych żądań.", + "colSong": "Piosenka", + "colArtist": "Artysta", + "colRequester": "Osoba żądająca", + "colDate": "Data", + "colStatus": "Stan", + "statusPending": "Oczekujące", + "statusApproved": "Zatwierdzone", + "statusPlayed": "Zagrał", + "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": "Aplikuj, aby zostać DJ-em radiowym", + "subtitle": "Opowiedz nam o sobie i dlaczego świetnie pasowałbyś do fal radiowych", + "latestTitle": "Twoja najnowsza aplikacja", + "statusLabel": "Stan:", + "submittedOn": "· przesłane {date}", + "submitAgain": "Jeśli Twoje dane uległy zmianie, możesz przesłać je ponownie poniżej.", + "formTitle": "Formularz zgłoszeniowy", + "formSubtitle": "Wszystkie pola oznaczone jako wymagane muszą zostać wypełnione", + "realNameLabel": "Prawdziwe imię", + "realNamePlaceholder": "Twoje pełne imię i nazwisko", + "ageLabel": "Wiek", + "availabilityLabel": "Dostępność", + "availabilityPlaceholder": "W jakie dni i godziny można nadawać?", + "musicStyleLabel": "Styl muzyczny", + "musicStylePlaceholder": "np. House, Pop, Hip-Hop", + "experienceLabel": "Doświadczenie", + "optional": "(opcjonalnie)", + "experiencePlaceholder": "Jakieś wcześniejsze doświadczenia z DJ-em lub hostingiem?", + "motivationLabel": "Motywacja", + "motivationPlaceholder": "Dlaczego chcesz dołączyć do zespołu radia?", + "submitButton": "Prześlij wniosek", + "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": "Ustawienia konta", + "accountSettingsSubtitle": "Zarządzaj swoim profilem, bezpieczeństwem i połączonymi kontami", + "publicProfile": "Twój profil publiczny", + "noMotto": "Żadnego motta", + "noEmail": "Brak wiadomości e-mail w aktach", + "changeMotto": "Zmień motto", + "changeMottoSubtitle": "Aktualizacje są natychmiastowe w grze, jeśli jesteś online", + "mottoPlaceholder": "Twoje motto", + "saveMotto": "Zapisz motto", + "securityTitle": "Bezpieczeństwo", + "securitySubtitle": "Uwierzytelnianie dwuskładnikowe", + "securityDescription": "Dodaj drugą warstwę ochrony do swojego konta.", + "twoFactorLink": "Uwierzytelnianie dwuskładnikowe" + }, + "settings2fa": { + "backToSettings": "← Ustawienia", + "title": "Uwierzytelnianie dwuskładnikowe", + "subtitle": "Dodaj drugą warstwę zabezpieczeń za pomocą aplikacji uwierzytelniającej", + "nowEnabled": "2FA jest teraz włączone. 🔒", + "disabledNotice": "2FA zostało wyłączone.", + "badCode": "Ten kod był nieprawidłowy — spróbuj ponownie.", + "noAppKeyPrefix": "2FA jest niedostępne do", + "noAppKeyMiddle": "jest skonfigurowany (ten sam Laravel", + "noAppKeySuffix": "podczas instalacji AtomCMS, aby istniejące sekrety pozostały czytelne).", + "isEnabled": "2FA jest włączone", + "onYourAccount": "na Twoim koncie.", + "disable": "Wyłącz 2FA", + "scanOrEnter": "Zeskanuj lub wprowadź ten klucz", + "scanInstructions": "Dodaj to do Google Authenticator / Authy, a następnie wprowadź 6-cyfrowy kod, aby potwierdzić.", + "manualKey": "Klucz ręczny:", + "codePlaceholder": "6-cyfrowy kod", + "confirm": "Potwierdź", + "enableIntro": "Dodaj drugą warstwę zabezpieczeń za pomocą aplikacji uwierzytelniającej.", + "enable": "Włącz 2FA", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Połączone konta", + "subtitle": "Połącz konto społecznościowe, aby móc zalogować się jednym kliknięciem", + "connected": "Połączono", + "unavailable": "Niedostępne", + "login": { + "title": "Zaloguj się", + "subtitle": "Witamy ponownie — zaloguj się, aby wejść do hotelu.", + "subtitle2fa": "Wprowadź 6-cyfrowy kod z Twojego uwierzytelniacza.", + "usernamePlaceholder": "Nazwa użytkownika", + "passwordPlaceholder": "Hasło", + "codePlaceholder": "Kod 2FA", + "pleaseWait": "Proszę czekać…", + "verify": "Zweryfikuj", + "signIn": "Zaloguj się", + "or": "lub", + "noAccount": "Nie masz konta?", + "createOne": "Utwórz jeden", + "forgotPassword": "Zapomniałeś hasła?", + "errorInvalidCredentials": "Nieprawidłowa nazwa użytkownika lub hasło", + "errorInvalid2fa": "Nieprawidłowy kod 2FA", + "welcomeBack": "Witaj z powrotem", + "welcomeBackSub": "Zaloguj się, aby kontynuować w {hotelName}", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Utwórz konto", + "subtitle": "Dołącz do hotelu — to zajmie tylko chwilę.", + "username": "Nazwa użytkownika", + "email": "E-mail", + "password": "Hasło", + "confirmPassword": "Powtórz hasło", + "usernamePlaceholder": "Nazwa użytkownika", + "emailPlaceholder": "E-mail", + "passwordPlaceholder": "Hasło (min. 6 znaków)", + "confirmPasswordPlaceholder": "Powtórz hasło", + "selectOutfit": "Wybierz swój strój", + "termsAccept": "Mam ukończone 18 lat i akceptuję warunki i zasady hotelu {hotel}.", + "createAccount": "Utwórz konto", + "creatingAccount": "Tworzenie konta...", + "redirecting": "Przekierowywanie na twoje konto...", + "alreadyHaveAccount": "Masz już konto? Login!", + "register": "Zarejestruj się", + "termsError": "Aby się zarejestrować, musisz zaakceptować regulamin.", + "usernameError": "Nazwa użytkownika jest wymagana.", + "emailError": "Wymagany jest prawidłowy adres e-mail.", + "passwordError": "Hasło musi mieć co najmniej 6 znaków.", + "confirmPasswordError": "Hasła nie pasują.", + "termsRequired": "Musisz zaakceptować warunki i zasady.", + "usernameRequired": "Nazwa użytkownika jest wymagana.", + "emailRequired": "Adres e-mail jest wymagany.", + "passwordRequired": "Hasło jest wymagane.", + "passwordsDontMatch": "Hasła nie pasują.", + "alreadyHaveAccountPre": "Masz już konto?", + "alreadyHaveAccountLink": "Zaloguj się", + "whoIsOnline": "Kto jest online", + "usersOnline": "{count} online", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Zresetuj hasło", + "subtitle": "Wyślemy Ci e-mailem bezpieczny link umożliwiający ustawienie nowego hasła.", + "sentNotice": "Jeśli ten adres e-mail jest zarejestrowany, został wysłany link resetujący. Sprawdź swoją skrzynkę odbiorczą.", + "emailPlaceholder": "Twój e-mail", + "sendResetLink": "Wyślij link resetujący", + "backToLogin": "Powrót do logowania", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Ustaw nowe hasło", + "subtitle": "Wybierz silne hasło, którego nie używasz gdzie indziej.", + "passwordPlaceholder": "Nowe hasło (min. 6 znaków)", + "resetPassword": "Zresetuj hasło", + "backToLogin": "Powrót do logowania" + }, + "verify": { + "verifiedTitle": "Wszystko gotowe", + "verifiedSubtitle": "Adres e-mail zweryfikowany", + "verifiedBody": "Twój adres e-mail został zweryfikowany. Możesz już zalogować się i grać.", + "goToLogin": "Przejdź do logowania", + "alreadyTitle": "Już zweryfikowane", + "alreadySubtitle": "Nic nie zostało do zrobienia", + "alreadyBody": "Ten adres e-mail został już potwierdzony.", + "unavailableTitle": "Spróbuj ponownie wkrótce", + "unavailableSubtitle": "Serwer nieosiągalny", + "unavailableBody": "Nie mogliśmy połączyć się z serwerem, aby zweryfikować Twój adres e-mail. Spróbuj ponownie za chwilę skorzystać z łącza.", + "invalidTitle": "Weryfikacja e-mailowa", + "invalidSubtitle": "Nieprawidłowy lub wygasły link", + "invalidBody": "Ten link weryfikacyjny jest nieprawidłowy. Upewnij się, że otworzyłeś cały link z e-maila lub poproś o nowy.", + "backToLogin": "Powrót do logowania" + }, + "banned": { + "title": "Masz zakaz", + "subtitle": "Konto zawieszone", + "body": "Twoje konto w hotelu zostało zawieszone.", + "reasonLabel": "Powód:", + "permanent": "Zakaz ten jest trwały.", + "expires": "Wygasa {date}.", + "contactStaff": "Jeżeli uważasz, że to pomyłka, skontaktuj się z naszym personelem." + }, + "maintenance": { + "title": "{hotel} jest w trakcie prac konserwacyjnych", + "subtitle": "Wkrótce wrócimy", + "staffCanLogIn": "Personel nadal może się zalogować." + }, + "admin": { + "nav": { + "overview": "Przegląd", + "dashboard": "Pulpit nawigacyjny", + "content": "Treść", + "articles": "Artykuły", + "tags": "Tagi", + "navigator": "Nawigator", + "helpCenter": "Centrum pomocy", + "advertisements": "Reklamy", + "writeableBoxes": "Pudełka z możliwością zapisu", + "photos": "Zdjęcia", + "tickets": "Bilety", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Użytkownicy i dostęp", + "users": "Użytkownicy", + "bans": "Zakazy", + "ipManagement": "Zarządzanie IP", + "vpn": "VPN", + "applications": "Aplikacje", + "teams": "Zespoły", + "permissions": "Uprawnienia", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "Ekonomia", + "catalog": "Katalog", + "shop": "Sklep", + "transactions": "Transakcje", + "vouchers": "Kupony", + "subscriptions": "Subskrypcje", + "rareValues": "Rzadkie wartości", + "badges": "Odznaki", + "achievements": "Osiągnięcia", + "calendar": "Kalendarz", + "radio": "Radia", + "radioHistory": "Historia radia", + "radioBanners": "Banery", + "radioEmbed": "Osadź", + "radioApiKeys": "Klucze API", + "radioModeration": "Umiarkowanie", + "radioSettings": "Ustawienia", + "radioMonitoring": "Monitorowanie", + "radioPoints": "Punkty", + "radioRanks": "Rangi", + "radioAutodj": "Automatyczny DJ", + "system": "Systemu", + "commandocentrum": "Centrum Komandosów", + "emulator": "Emulator", + "alerts": "Alerty", + "logs": "Dzienniki", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Filtr słów", + "maintenance": "Konserwacja", + "rooms": "Pokoje", + "emailTemplates": "Szablony e-maili", + "theme": "Temat", + "media": "Media", + "favicon": "Favikona", + "sounds": "Brzmi", + "translations": "Tłumaczenia", + "import": "Importuj", + "settings": "Ustawienia", + "backToSite": "Powrót do serwisu", + "housekeeping": "Sprzątanie", + "hotelManagementPanel": "Panel zarządzania hotelem", + "rankLabel": "Ranga {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Search menu…", + "clearMenuSearch": "Clear menu search", + "noMenuResults": "No matching pages.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "studio": "Studio", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "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" + }, + "dashboard": { + "title": "Pulpit nawigacyjny", + "subtitle": "Przegląd hotelu i status na żywo", + "playersOnline": "Gracze w Internecie", + "articles": "Artykuły", + "activeBans": "Aktywne zakazy", + "database": "Baza danych", + "databaseConnected": "Połączono", + "databaseDown": "W dół", + "usersByRank": "Użytkownicy według rangi", + "noAccountsToBreakDown": "Nie ma jeszcze kont do podziału", + "rankLabel": "Ranga {rank}", + "rankWithCount": "Ranga {rank}: {count} kont", + "recentStaffActivity": "Ostatnia aktywność personelu", + "viewAll": "Zobacz wszystkie", + "noStaffActivityLogged": "Nie zarejestrowano jeszcze żadnej aktywności personelu", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "Artykuły", + "subtitle": "Artykuły prasowe — 50 najnowszych", + "newArticle": "+ Nowy artykuł", + "edit": "Edytuj", + "delete": "Usuń", + "noArticles": "Nie ma jeszcze artykułów", + "confirmDelete": "Czy na pewno chcesz usunąć „{title}”?", + "colTitle": "Tytuł", + "colSlug": "Ślimak", + "colAuthor": "Autor", + "colCreated": "Utworzono", + "colActions": "Działania", + "form": { + "title": "Tytuł", + "titlePlaceholder": "Tytuł artykułu", + "slug": "Ślimak", + "slugPlaceholder": "adres URL artykułu", + "category": "Kategoria", + "categoryPlaceholder": "Wybierz kategorię", + "body": "Ciało", + "bodyPlaceholder": "Napisz treść swojego artykułu…", + "image": "Obraz", + "imagePlaceholder": "https://example.com/image.png", + "thumbnail": "Miniatura", + "thumbnailPlaceholder": "https://example.com/thumb.png", + "published": "Opublikowano", + "featured": "Polecane", + "save": "Zapisz artykuł", + "saving": "Zapisuję…", + "deleteArticle": "Usuń artykuł", + "deleteConfirm": "Tej akcji nie można cofnąć. Artykuł zostanie trwale usunięty.", + "cancel": "Anuluj", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "Tagi", + "subtitle": "Tagi/kategorie artykułów", + "addTag": "Dodaj tag", + "name": "Imię", + "namePlaceholder": "Nazwa znacznika", + "backgroundColour": "Kolor tła", + "createTag": "Utwórz tag", + "editTag": "Edytuj tag", + "updateTag": "Aktualizuj tag", + "deleteTag": "Usuń tag", + "confirmDelete": "Usunąć „{name}”?", + "noTags": "Nie ma jeszcze tagów", + "colId": "Identyfikator", + "colTag": "Oznacz", + "colColour": "Kolor", + "colUsedBy": "Używany przez", + "colCreated": "Utworzono", + "colActions": "Działania", + "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": "Nawigator", + "flatCategories": "Płaskie kategorie", + "publicRooms": "Pokoje publiczne", + "addCategory": "Dodaj kategorię", + "editCategory": "Edytuj kategorię", + "deleteCategory": "Usuń kategorię", + "categoryName": "Nazwa kategorii", + "categoryNamePlaceholder": "np. Zrelaksuj się i rozmawiaj", + "categoryOrder": "Zamów", + "roomName": "Nazwa pokoju", + "roomNamePlaceholder": "np. Witamy w salonie", + "roomId": "Identyfikator pokoju", + "roomIdPlaceholder": "Numeryczny identyfikator pokoju", + "save": "Zapisz", + "cancel": "Anuluj", + "noCategories": "Nie ma jeszcze kategorii", + "noPublicRooms": "Nie ma jeszcze pomieszczeń ogólnodostępnych", + "colId": "Identyfikator", + "colName": "Imię", + "colOrder": "Zamów", + "colRooms": "Pokoje", + "colActions": "Działania", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Centrum pomocy", + "subtitle": "Wpisy pomocy technicznej i zarządzanie często zadawanymi pytaniami", + "entries": "Wpisy", + "newEntry": "+ Nowy wpis", + "edit": "Edytuj", + "delete": "Usuń", + "noEntries": "Nie ma jeszcze żadnych wpisów", + "confirmDelete": "Usunąć „{title}”?", + "colId": "Identyfikator", + "colTitle": "Tytuł", + "colCategory": "Kategoria", + "colCreated": "Utworzono", + "colActions": "Działania", + "form": { + "title": "Tytuł", + "titlePlaceholder": "Tytuł wpisu", + "category": "Kategoria", + "categoryPlaceholder": "Wybierz kategorię", + "body": "Ciało", + "bodyPlaceholder": "Napisz odpowiedź…", + "save": "Zapisz wpis", + "saving": "Zapisuję…", + "deleteEntry": "Usuń wpis", + "cancel": "Anuluj" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Reklamy", + "subtitle": "Zarządzaj reklamami hoteli i banerami promocyjnymi", + "newAd": "+ Nowa reklama", + "edit": "Edytuj", + "delete": "Usuń", + "noAds": "Nie ma jeszcze reklam", + "confirmDelete": "Usunąć tę reklamę?", + "colId": "Identyfikator", + "colName": "Imię", + "colImage": "Obraz", + "colUrl": "Adres URL", + "colViews": "Widoki", + "colStatus": "Stan", + "colCreated": "Utworzono", + "colActions": "Działania", + "form": { + "name": "Imię", + "namePlaceholder": "Nazwa reklamy", + "image": "Adres URL obrazu", + "imagePlaceholder": "https://example.com/baner.png", + "url": "Docelowy adres URL", + "urlPlaceholder": "https://przyklad.com", + "enabled": "Włączone", + "save": "Zapisz reklamę", + "saving": "Zapisuję…", + "deleteAd": "Usuń reklamę", + "cancel": "Anuluj" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Pudełka z możliwością zapisu", + "subtitle": "Panele treści wyświetlane w całym hotelu i systemie CMS", + "newBox": "Nowe pudełko", + "edit": "Edytuj", + "delete": "Usuń", + "noBoxes": "Nie ma jeszcze pól, które można zapisać", + "confirmDelete": "Usunąć to pole?", + "colId": "Identyfikator", + "colName": "Imię", + "colLocation": "Lokalizacja", + "colUpdated": "Zaktualizowano", + "colActions": "Działania", + "form": { + "name": "Imię", + "namePlaceholder": "Nazwa skrzynki", + "location": "Lokalizacja", + "locationPlaceholder": "np. strona główna, pasek boczny", + "content": "Treść", + "contentPlaceholder": "Napisz zawartość pudełka...", + "enabled": "Włączone", + "save": "Zapisz pole", + "saving": "Zapisuję…", + "deleteBox": "Usuń pole", + "cancel": "Anuluj", + "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": "Moderacja zdjęć", + "subtitle": "Najnowsze zdjęcia z kamery w grze", + "delete": "Usuń", + "approve": "Zatwierdź", + "noPhotos": "Brak zdjęć do moderowania", + "confirmDelete": "Trwale usunąć to zdjęcie?", + "colId": "Identyfikator", + "colPreview": "Podgląd", + "colUser": "Użytkownik", + "colRoom": "Pokój", + "colTimestamp": "Znacznik czasu", + "colActions": "Działania", + "photoAlt": "Zdjęcie użytkownika nr{id}", + "byUser": "przez: {username}", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Użytkownicy", + "subtitle": "Przeglądaj, wyszukuj i zarządzaj kontami hotelowymi", + "search": "Szukaj", + "searchPlaceholder": "Szukaj według nazwy użytkownika, adresu e-mail lub identyfikatora…", + "searchResults": "{count, plural, one {# result} other {# results}} dla „{query}”", + "noResults": "Nie znaleziono żadnych użytkowników", + "colId": "Identyfikator", + "colUsername": "Nazwa użytkownika", + "colEmail": "E-mail", + "colRank": "Ranga", + "colOnline": "W Internecie", + "colRegistered": "Zarejestrowany", + "colLastOnline": "Ostatni w Internecie", + "colActions": "Działania", + "yes": "Tak", + "no": "Nie", + "edit": "Edytuj", + "setRank": "Ustaw rangę", + "disconnect": "Rozłącz", + "alert": "Alarm", + "ban": "Zakaz", + "detail": { + "title": "Użytkownik: {username}", + "subtitle": "Szczegóły konta i zarządzanie", + "overview": "Przegląd", + "actions": "Działania", + "username": "Nazwa użytkownika", + "email": "E-mail", + "motto": "Motto", + "rank": "Ranga", + "credits": "Kredyty", + "duckets": "Kaczki", + "diamonds": "Diamenty", + "online": "W Internecie", + "registered": "Zarejestrowany", + "lastOnline": "Ostatni w Internecie", + "ipAddress": "Adres IP", + "machineId": "Identyfikator maszyny", + "sendAlert": "Wyślij powiadomienie", + "sendMessage": "Wyślij wiadomość", + "disconnectUser": "Odłącz użytkownika", + "banUser": "Zablokuj użytkownika", + "resetPassword": "Zresetuj hasło", + "deleteUser": "Usuń użytkownika", + "confirmDelete": "Czy na pewno chcesz usunąć użytkownika {username}? Tego nie można cofnąć.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Edytuj użytkownika: {username}", + "subtitle": "Zmodyfikuj dane konta", + "username": "Nazwa użytkownika", + "usernamePlaceholder": "Nazwa użytkownika", + "email": "E-mail", + "emailPlaceholder": "użytkownik@example.com", + "motto": "Motto", + "mottoPlaceholder": "Motto użytkownika", + "rank": "Ranga", + "credits": "Kredyty", + "duckets": "Kaczki", + "diamonds": "Diamenty", + "save": "Zapisz zmiany", + "saving": "Zapisuję…", + "cancel": "Anuluj" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Zakazy", + "subtitle": "Zarządzaj banami na konta, IP i komputery", + "newBan": "Nowy zakaz", + "edit": "Edytuj", + "delete": "Usuń", + "noBans": "Nie ma jeszcze żadnych zakazów", + "confirmDelete": "Usunąć ten zakaz?", + "colId": "Identyfikator", + "colValue": "Wartość", + "colType": "Wpisz", + "colReason": "Powód", + "colBannedBy": "Zakazany przez", + "colExpires": "Wygasa", + "colCreated": "Utworzono", + "colActions": "Działania", + "form": { + "value": "Wartość", + "valuePlaceholder": "Nazwa użytkownika, adres IP lub identyfikator komputera", + "type": "Wpisz", + "typeUser": "Użytkownik", + "typeIp": "IP", + "typeMachine": "Maszyna", + "reason": "Powód", + "reasonPlaceholder": "Powód zakazu", + "expiresAt": "Wygasa o godz", + "permanent": "Stałe", + "save": "Zapisz zakaz", + "saving": "Zapisuję…", + "cancel": "Anuluj" + }, + "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": "Zarządzanie IP", + "subtitle": "Zarządzaj białą i czarną listą adresów IP", + "whitelist": "Biała lista", + "blacklist": "Czarna lista", + "addIp": "Dodaj adres IP", + "ipAddress": "Adres IP", + "ipAddressPlaceholder": "np. 127.0.0.1", + "reason": "Powód", + "reasonPlaceholder": "Powód umieszczenia na liście", + "add": "Dodaj", + "remove": "Usuń", + "confirmRemove": "Usunąć ten adres IP z {list}?", + "noWhitelistedIps": "Brak adresów IP na białej liście", + "noBlacklistedIps": "Brak adresów IP na czarnej liście", + "colIp": "IP", + "colReason": "Powód", + "colAdded": "Dodano", + "colActions": "Działania", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "Wykrywanie VPN/Proxy", + "subtitle": "Skonfiguruj ustawienia wykrywania VPN i proxy", + "enabled": "Włączone", + "apiKey": "Klucz API", + "apiKeyPlaceholder": "Twój klucz API wykrywania VPN", + "apiKeyHint": "Pozostaw puste, aby wyłączyć", + "blockOnDetect": "Blokuj po wykryciu", + "blockOnDetectHint": "Automatycznie blokuj użytkowników wykrytych za VPN lub proxy", + "save": "Zapisz ustawienia", + "saving": "Zapisuję…", + "settingsSaved": "Ustawienia VPN zostały zapisane pomyślnie", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Aplikacje pracownicze", + "subtitle": "Oczekujące i sprawdzone aplikacje pracowników", + "pending": "Oczekujące", + "approved": "Zatwierdzone", + "rejected": "Odrzucony", + "noApplications": "Nie ma jeszcze żadnych aplikacji", + "colId": "Identyfikator", + "colApplicant": "Wnioskodawca", + "colPosition": "Pozycja", + "colStatus": "Stan", + "colSubmitted": "Przesłane", + "colActions": "Działania", + "review": "Recenzja", + "approve": "Zatwierdź", + "reject": "Odrzuć", + "confirmApprove": "Zatwierdzić użytkownika {username} dla {position}?", + "confirmReject": "Odrzucić aplikację użytkownika {username} na {position}?", + "detail": { + "title": "Aplikacja autorstwa {username}", + "subtitle": "Dla {position}", + "about": "O wnioskodawcy", + "message": "Wiadomość aplikacyjna", + "status": "Stan", + "submitted": "Przesłane", + "noMessage": "Brak wiadomości" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Zespoły", + "subtitle": "Zdefiniuj nazwy i opisy stopni personelu", + "addRank": "Dodaj rangę", + "editRank": "Edytuj rangę", + "deleteRank": "Usuń rangę", + "noTeams": "Nie ma jeszcze definicji rang", + "confirmDelete": "Usunąć definicję rangi {id}?", + "colId": "Identyfikator", + "colRank": "Ranga", + "colName": "Imię", + "colBadge": "Odznaka", + "colColour": "Kolor", + "colActions": "Działania", + "form": { + "rankId": "Identyfikator rangi", + "rankIdPlaceholder": "Numeryczny identyfikator rangi", + "name": "Imię", + "namePlaceholder": "np. Administrator", + "badge": "Kod odznaki", + "badgePlaceholder": "np. ADM001", + "colour": "Kolor", + "colourPlaceholder": "np. #ff0000", + "save": "Zapisz definicję zespołu", + "saving": "Zapisuję…", + "cancel": "Anuluj" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Uprawnienia", + "subtitle": "Zarządzaj uprawnieniami na podstawie rang w panelu administracyjnym", + "addPermission": "Dodaj pozwolenie", + "editPermission": "Edytuj uprawnienia", + "deletePermission": "Usuń pozwolenie", + "noPermissions": "Nie skonfigurowano jeszcze żadnych uprawnień", + "confirmDelete": "Usunąć to uprawnienie?", + "colId": "Identyfikator", + "colRank": "Ranga", + "colPermission": "Pozwolenie", + "colCreated": "Utworzono", + "colActions": "Działania", + "form": { + "rankId": "Identyfikator rangi", + "rankIdPlaceholder": "Wymagana minimalna ranga", + "permission": "Klucz uprawnień", + "permissionPlaceholder": "np. admin.artykuły.zarządzaj", + "save": "Zapisz pozwolenie", + "saving": "Zapisuję…", + "cancel": "Anuluj" + } + }, + "catalog": { + "title": "Katalog", + "subtitle": "Przeglądaj strony katalogu i elementy oraz zarządzaj nimi", + "pages": "Strony", + "items": "Przedmioty", + "addPage": "Dodaj stronę", + "editPage": "Edytuj stronę", + "deletePage": "Usuń stronę", + "addItem": "Dodaj element", + "editItem": "Edytuj element", + "deleteItem": "Usuń element", + "noPages": "Nie ma jeszcze stron katalogu", + "noItems": "Brak elementów na tej stronie", + "confirmDeletePage": "Usunąć stronę katalogu „{name}”?", + "confirmDeleteItem": "Usunąć ten element?", + "colId": "Identyfikator", + "colName": "Imię", + "colIcon": "Ikona", + "colOrder": "Zamów", + "colItems": "Przedmioty", + "colEnabled": "Włączone", + "colActions": "Działania", + "colItemId": "Identyfikator przedmiotu", + "colItemName": "Nazwa przedmiotu", + "colCostCredits": "Koszt (kredyty)", + "colCostPoints": "Koszt (punkty)", + "colLimited": "Ograniczona", + "pageForm": { + "name": "Imię", + "namePlaceholder": "Nazwa strony", + "icon": "Identyfikator ikony", + "iconPlaceholder": "Numeryczny identyfikator ikony", + "order": "Zamów", + "enabled": "Włączone", + "parent": "Strona nadrzędna", + "parentNone": "Brak (root)", + "save": "Zapisz stronę", + "saving": "Zapisuję…", + "cancel": "Anuluj" + }, + "itemForm": { + "itemId": "Identyfikator przedmiotu", + "itemName": "Nazwa przedmiotu", + "costCredits": "Koszt w kredytach", + "costDuckets": "Koszt w kaczkach", + "costDiamonds": "Koszt w diamentach", + "limitedStack": "Ograniczony rozmiar stosu", + "limitedSold": "Limitowana sprzedana", + "save": "Zapisz element", + "saving": "Zapisuję…", + "cancel": "Anuluj" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Sklep", + "subtitle": "Zarządzaj pakietami i zamówieniami", + "packages": "Pakiety", + "orders": "Zamówienia", + "newPackage": "+ Nowy pakiet", + "edit": "Edytuj", + "delete": "Usuń", + "viewOrder": "Zobacz", + "noPackages": "Nie ma jeszcze pakietów sklepowych", + "noOrders": "Nie ma jeszcze żadnych zamówień", + "confirmDelete": "Usunąć ten pakiet?", + "colId": "Identyfikator", + "colName": "Imię", + "colPrice": "Cena", + "colCurrency": "Waluta", + "colType": "Wpisz", + "colSold": "Sprzedane", + "colEnabled": "Włączone", + "colActions": "Działania", + "colOrderId": "Identyfikator zamówienia", + "colCustomer": "Klient", + "colPackage": "Pakiet", + "colAmount": "Kwota", + "colStatus": "Stan", + "colDate": "Data", + "statusPending": "Oczekujące", + "statusCompleted": "Ukończono", + "statusRefunded": "Zwrócono pieniądze", + "form": { + "name": "Imię", + "namePlaceholder": "Nazwa pakietu", + "description": "Opis", + "descriptionPlaceholder": "Opis pakietu", + "price": "Cena", + "currency": "Waluta", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Wpisz", + "typeCredits": "Kredyty", + "typeDuckets": "Kaczki", + "typeDiamonds": "Diamenty", + "typeBadge": "Odznaka", + "typeFurni": "Meble", + "typeRank": "Ranga", + "amount": "Kwota", + "badgeCode": "Kod odznaki", + "badgeCodePlaceholder": "np. VIP001", + "rankId": "Identyfikator rangi", + "furniItems": "Elementy mebli", + "enabled": "Włączone", + "save": "Zapisz pakiet", + "saving": "Zapisuję…", + "cancel": "Anuluj", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "Transakcje", + "subtitle": "Dziennik płatności PayPal", + "noTransactions": "Nie ma jeszcze żadnych transakcji", + "colId": "Identyfikator", + "colUser": "Użytkownik", + "colAmount": "Kwota", + "colCurrency": "Waluta", + "colPackage": "Pakiet", + "colStatus": "Stan", + "colDate": "Data", + "colActions": "Działania", + "statusCompleted": "Ukończono", + "statusPending": "Oczekujące", + "statusFailed": "Nie udało się", + "statusRefunded": "Zwrócono pieniądze", + "detail": { + "title": "Transakcja nr{id}", + "paypalId": "Identyfikator PayPala", + "payerEmail": "E-mail płatnika", + "grossAmount": "Kwota brutto", + "fee": "Opłata", + "netAmount": "Kwota netto" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Kupuj kupony", + "subtitle": "Zarządzaj wymienialnymi kodami kuponów", + "newVoucher": "+ Nowy kupon", + "edit": "Edytuj", + "delete": "Usuń", + "noVouchers": "Nie ma jeszcze kuponów", + "confirmDelete": "Usunąć kupon „{code}”?", + "colId": "Identyfikator", + "colCode": "Kod", + "colValue": "Wartość", + "colType": "Wpisz", + "colUses": "Zastosowania / maks", + "colExpires": "Wygasa", + "colCreated": "Utworzono", + "colActions": "Działania", + "form": { + "code": "Kod", + "codePlaceholder": "np. LATO 2025", + "value": "Wartość", + "type": "Wpisz", + "typeCredits": "Kredyty", + "typeDuckets": "Kaczki", + "typeDiamonds": "Diamenty", + "typeBadge": "Odznaka", + "typeFurni": "Meble", + "typeRank": "Ranga", + "badgeCode": "Kod odznaki", + "badgeCodePlaceholder": "np. VIP001", + "rankId": "Identyfikator rangi", + "maxUses": "Maks korzysta", + "maxUsesPlaceholder": "0 = nieograniczony", + "expiresAt": "Wygasa o godz", + "enabled": "Włączone", + "save": "Zapisz kupon", + "saving": "Zapisuję…", + "cancel": "Anuluj", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Subskrypcje", + "subtitle": "Aktywne subskrypcje cykliczne", + "noSubscriptions": "Brak aktywnych subskrypcji", + "cancel": "Anuluj", + "confirmCancel": "Anulować subskrypcję użytkownika {username}?", + "colId": "Identyfikator", + "colUser": "Użytkownik", + "colPackage": "Pakiet", + "colAmount": "Kwota", + "colInterval": "Interwał", + "colStarted": "Rozpoczęło się", + "colNextBilling": "Następne rozliczenie", + "colStatus": "Stan", + "colActions": "Działania", + "statusActive": "Aktywny", + "statusCancelled": "Anulowano", + "statusExpired": "Wygasło", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Rzadkie wartości", + "subtitle": "Zarządzaj rzadkimi kategoriami wartości i cenami przedmiotów", + "categories": "Kategorie", + "items": "Przedmioty", + "addCategory": "Dodaj kategorię", + "editCategory": "Edytuj kategorię", + "deleteCategory": "Usuń kategorię", + "noCategories": "Nie ma jeszcze rzadkich kategorii wartości", + "confirmDeleteCategory": "Usunąć kategorię „{name}” i wszystkie jej elementy?", + "colId": "Identyfikator", + "colName": "Imię", + "colItems": "Przedmioty", + "colUpdated": "Zaktualizowano", + "colActions": "Działania", + "colItemName": "Nazwa przedmiotu", + "colCredits": "Kredyty", + "colPoints": "Punkty", + "colPointType": "Typ punktu", + "categoryForm": { + "name": "Imię", + "namePlaceholder": "Nazwa kategorii", + "save": "Zapisz kategorię", + "saving": "Zapisuję…", + "cancel": "Anuluj" + }, + "itemForm": { + "itemName": "Nazwa przedmiotu", + "itemNamePlaceholder": "np. Tron", + "credits": "Wartość kredytów", + "points": "Wartość punktów", + "pointType": "Typ punktu", + "pointTypeDuckets": "Kaczki", + "pointTypeDiamonds": "Diamenty", + "save": "Zapisz element", + "saving": "Zapisuję…", + "cancel": "Anuluj", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Odznaki", + "subtitle": "Przesyłaj, udostępniaj i zarządzaj katalogiem odznak", + "upload": "Prześlij", + "giveBadge": "Daj odznakę", + "catalogue": "Katalog", + "uploadTitle": "Prześlij nową odznakę", + "uploadSubtitle": "Prześlij plik obrazu plakietki", + "badgeCode": "Kod odznaki", + "badgeCodePlaceholder": "np. VIP001", + "badgeFile": "Plik odznaki", + "badgeFileHint": "PNG lub GIF, zalecany rozmiar 40 x 40", + "uploadButton": "Prześlij", + "uploading": "Przesyłanie…", + "giveTitle": "Daj odznakę użytkownikowi", + "giveSubtitle": "Przyznaj odznakę konkretnemu użytkownikowi", + "username": "Nazwa użytkownika", + "usernamePlaceholder": "Docelowa nazwa użytkownika", + "giveButton": "Daj odznakę", + "giving": "Dawanie…", + "catalogueTitle": "Katalog odznak", + "catalogueSubtitle": "Wszystkie dostępne odznaki w hotelu", + "noBadges": "Brak odznak w katalogu", + "search": "Wyszukaj odznaki", + "searchPlaceholder": "Szukaj według kodu lub nazwy…", + "colCode": "Kod", + "colImage": "Obraz", + "colName": "Imię", + "colDescription": "Opis", + "colActions": "Działania", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Osiągnięcia", + "subtitle": "Lista osiągnięć w grze tylko do odczytu", + "noAchievements": "Nie skonfigurowano żadnych osiągnięć", + "colId": "Identyfikator", + "colName": "Imię", + "colCategory": "Kategoria", + "colLevels": "Poziomy", + "colReward": "Nagroda", + "colProgress": "Postęp", + "levelLabel": "Poziom {level}", + "rewardCredits": "{count} kredytów", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Kampanie kalendarzowe", + "subtitle": "Lista kampanii i wydarzeń w kalendarzu tylko do odczytu", + "noCampaigns": "Nie ma jeszcze kampanii w kalendarzu", + "colId": "Identyfikator", + "colName": "Imię", + "colStart": "Zacznij", + "colEnd": "Koniec", + "colType": "Wpisz", + "colReward": "Nagroda", + "colActions": "Działania", + "detail": { + "title": "Kampania: {name}", + "subtitle": "Szczegóły wydarzenia w kalendarzu", + "days": "Dni", + "dayLabel": "Dzień {day}", + "reward": "Nagroda", + "noDays": "Nie skonfigurowano dni dla tej kampanii", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Moderacja radiowa", + "subtitle": "Najnowsze krzyki, aplikacje dla DJ-ów i harmonogramy nadawania (25 najnowszych z każdego).", + "moderation": "Umiarkowanie", + "shouts": "Krzyki", + "applications": "Aplikacje", + "schedules": "Harmonogramy", + "settings": "Ustawienia", + "embed": "Osadź", + "ranks": "Rangi", + "history": "Historia", + "apiKeys": "Klucze API", + "points": "Punkty", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Monitorowanie radia", + "subtitle": "Sonda na żywo tylko do odczytu skonfigurowanych punktów końcowych radiowych (radio_now_playing_api_url, radio_listeners_api_url). Każde żądanie kończy się niepowodzeniem po upływie limitu czasu {timeout} — żadne dane nie są zapisywane. Skonfiguruj adresy URL w Ustawieniach.", + "stream": "Strumień", + "online": "W Internecie", + "offline": "Nieaktywny", + "notConfigured": "Nie skonfigurowano", + "nowPlaying": "Teraz gram", + "nowPlayingApi": "Teraz odtwarzane API", + "listenersApi": "API słuchaczy", + "listeners": "Słuchacze", + "currentSong": "Aktualna piosenka", + "bitrate": "Szybkość transmisji", + "status": "Stan", + "noNowPlayingHint": "brak aktualnie odtwarzanego zestawu API", + "noListenersHint": "brak zestawu API odbiorników", + "endpointDiagnostics": "Diagnostyka punktów końcowych", + "diagnosticsLegend": "OK: dostępne · WARN: nieskonfigurowane · ERROR: błąd żądania lub przekroczony limit czasu.", + "streamUrl": "Adres URL strumienia", + "unreachable": "nieosiągalny", + "refresh": "Odśwież" + }, + "user": "Użytkownik", + "message": "Wiadomość", + "posted": "Wysłano", + "realName": "Prawdziwe imię", + "age": "Wiek", + "style": "Styl", + "applied": "Zastosowano", + "day": "Dzień", + "start": "Zacznij", + "end": "Koniec", + "show": "Pokaż", + "status": "Stan", + "active": "aktywny", + "inactive": "nieaktywny", + "hidden": "ukryty", + "activeSchedules": "Aktywne harmonogramy", + "noShouts": "Żadnych krzyków do moderowania", + "noApplications": "Nie złożono żadnych wniosków.", + "noSchedules": "Nie skonfigurowano żadnych harmonogramów.", + "deleteShout": "Usuń", + "confirmDeleteShout": "Usunąć ten krzyk?", + "pendingApplications": "Oczekujące wnioski", + "settingsForm": { + "title": "Ustawienia radia", + "subtitle": "Zmiany zapisują w ustawieniach witryny internetowej (klucze radio_*) i niszczą pamięć podręczną ustawień środowiska wykonawczego. Wartości logiczne używają 0/1.", + "enabled": "Włączone", + "disabled": "Niepełnosprawny", + "totalKeys": "Razem klucze", + "configured": "Skonfigurowane", + "curatedHint": "wyselekcjonowane klucze z wartością", + "customKeys": "Niestandardowe klucze", + "saveAll": "Zapisz wszystko", + "singleKey": "Dodaj/zastąp pojedynczy klucz", + "keyPlaceholder": "radio_niestandardowy_klucz", + "valuePlaceholder": "wartość", + "commentPlaceholder": "komentarz (opcjonalnie)", + "saveSingle": "Zapisz", + "otherSettings": "Inne ustawienia radia", + "dbError": "Nie można wczytać ustawień (baza danych jest niedostępna). Wartości domyślne zostaną utworzone po zapisaniu." + }, + "embedPage": { + "title": "Wbudowanie radia", + "subtitle": "Gotowy do skopiowania kod do osadzenia transmisji na żywo. Tylko do odczytu — nic tutaj nie zapisuje do bazy danych. Skonfiguruj adres URL strumienia w Ustawieniach radia (radio_stream_url).", + "streamUrl": "Adres URL strumienia", + "configured": "Skonfigurowane", + "missing": "Brak", + "radioName": "Nazwa radia", + "nowPlayingApi": "Teraz odtwarzane API", + "set": "Zestaw", + "notSet": "Nie ustawiono", + "noStreamUrl": "Nie skonfigurowano adresu URL strumienia", + "noStreamUrlText": "Nie ma ustawionego radio_stream_url, więc nie ma jeszcze czego osadzać.", + "goToSettings": "Przejdź do Ustawień radia", + "livePreview": "Podgląd na żywo", + "livePreviewText": "To jest goły odtwarzacz audio, jaki zobaczą odwiedzający. Naciśnij przycisk odtwarzania, aby potwierdzić, że strumień jest osiągalny.", + "source": "Źródło", + "audioSnippet": "Fragment odtwarzacza audio", + "audioSnippetDesc": "Wpuszczany odtwarzacz audio HTML5 skierowany bezpośrednio na strumień. Działa wszędzie tam, gdzie dozwolony jest zwykły HTML.", + "iframeSnippet": "Fragment opakowania iframe", + "iframeSnippetDesc": "Osadza stronę odtwarzacza radiowego witryny w elemencie iframe — zachowuje informacje o Twoim stylu i aktualnie odtwarzanych treściach. Dostosuj szerokość/wysokość do gustu.", + "audioUnsupported": "Twoja przeglądarka nie obsługuje elementu audio." + }, + "banners": { + "title": "Banery", + "heading": "Banery radiowe", + "description": "Banery promocyjne wyświetlane na stronie radia, uporządkowane według kolejności sortowania.", + "addBanner": "Dodaj baner", + "createBanner": "Utwórz baner", + "deleteBanner": "Usuń baner", + "noBanners": "Nie ma jeszcze banerów — dodaj jeden powyżej.", + "existing": "Istniejące banery ({count})", + "save": "Zapisz", + "delete": "Usuń", + "byUser": "przez użytkownika {id}", + "active": "aktywny", + "hidden": "ukryty", + "bannerAlt": "Baner radiowy", + "statusActive": "Aktywny", + "statusHidden": "Ukryty", + "dbError": "Nie można załadować banerów (baza danych jest niedostępna).", + "form": { + "imagePath": "Ścieżka obrazu / adres URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Tytuł", + "description": "Opis", + "sortOrder": "Kolejność sortowania", + "active": "Aktywny" + } + }, + "ranksForm": { + "title": "Rangi Radia", + "subtitle": "Możliwość przypisania rang dla DJ-ów/personelu w aplikacjach radiowych.", + "dbError": "Nie można wczytać rankingów (baza danych jest niedostępna).", + "active": "Aktywny", + "addRank": "Dodaj rangę", + "name": "Imię", + "badgeCode": "Kod odznaki", + "description": "Opis", + "createRank": "Utwórz rangę", + "existing": "Istniejące stopnie ({count})", + "noRanks": "Nie ma jeszcze żadnych rang — dodaj jedną powyżej.", + "activeLabel": "aktywny", + "inactiveLabel": "nieaktywny", + "save": "Zapisz", + "deleteRank": "Usuń rangę #{id}" + }, + "historyPage": { + "title": "Historia odtwarzania radia", + "subtitle": "Wcześniejsze występy DJ-ów i czas antenowy (radio_history), najnowsze jako pierwsze. Rejestr tylko do odczytu, kto, kiedy i ilu słuchaczy był na antenie.", + "dbError": "Nie można wczytać historii radia (baza danych jest niedostępna).", + "showsLogged": "Pokazuje zalogowane", + "onAirNow": "Teraz na antenie", + "uniqueDjs": "Wyjątkowi DJe", + "peakListeners": "Szczyt słuchaczy", + "empty": "Nie zarejestrowano jeszcze historii radia.", + "showLog": "Pokaż dziennik ({count})", + "colDj": "DJ", + "colShow": "Pokaż", + "colStarted": "Rozpoczęło się", + "colEnded": "Zakończone", + "colAirtime": "Czas antenowy", + "colListeners": "Słuchacze", + "colNotes": "Notatki", + "onAir": "na antenie" + }, + "apiKeysForm": { + "title": "Klucze API radia", + "subtitle": "Klucze API do integracji zewnętrznych radiotelefonów (radio_api_keys). Klucze są generowane po stronie serwera i wyświetlane jako zamaskowane — przy pierwszym wydaniu skopiuj pełną wartość z bazy danych.", + "dbError": "Nie można załadować kluczy API (baza danych jest niedostępna).", + "totalKeys": "Razem klucze", + "active": "Aktywny", + "inactive": "Nieaktywny", + "generateKey": "Wygeneruj klucz", + "generateHint": "Tajny klucz jest generowany automatycznie z kryptograficzną losowością – nie wprowadzasz go.", + "name": "Imię", + "namePlaceholder": "Most AzureCast", + "rateLimit": "Limit szybkości (żądania/min)", + "allowedIps": "Dozwolone adresy IP (opcjonalnie)", + "allowedIpsPlaceholder": "oddzielone przecinkami, puste = dowolne", + "generate": "Wygeneruj klucz", + "existingKeys": "Istniejące klucze ({count})", + "noKeys": "Nie ma jeszcze kluczy API — wygeneruj jeden powyżej.", + "colName": "Imię", + "colKey": "Klucz", + "colAllowedIps": "Dozwolone adresy IP", + "colRateLimit": "Limit stawki", + "colLastUsed": "Ostatnio używany", + "colExpires": "Wygasa", + "colStatus": "Stan", + "colActions": "Działania", + "maskedHint": "Wyświetlanych jest tylko pierwszych 8 znaków", + "any": "dowolny", + "activeLabel": "aktywny", + "inactiveLabel": "nieaktywny", + "deactivate": "Dezaktywuj", + "activate": "Aktywuj", + "delete": "Usuń" + }, + "pointsForm": { + "title": "Punkty słuchacza radia", + "subtitle": "Nagradzaj słuchaczy walutą za czas spędzony w radiu. Zmiany zapisują w ustawieniach witryny internetowej (klucze radio_points_*) i niszczą pamięć podręczną ustawień środowiska wykonawczego. Wartości logiczne używają 0/1.", + "saved": "Zapisano", + "points": "Punkty", + "enabled": "Włączone", + "disabled": "Niepełnosprawny", + "perMinute": "Na minutę", + "paidIn": "płatne w {currency}", + "maxPerDay": "Maks./dzień", + "unlimited": "Nieograniczony", + "minListeners": "Min. słuchaczy", + "settings": "Ustawienia", + "pointsEnabled": "Punkty włączone", + "pointsEnabledHint": "Przełącznik główny do przyznawania punktów słuchacza.", + "currency": "Waluta", + "currencyHint": "Do jakiego portfela wpłacane są punkty.", + "pointsPerMinute": "Punkty na minutę", + "pointsPerMinuteHint": "Kwota przyznawana za każdą pełną minutę słuchania.", + "maxPerDayHint": "Limit dzienny na użytkownika. Użyj 0, aby uzyskać nieograniczone.", + "minListenersHint": "Punkty zostaną przyznane dopiero wtedy, gdy co najmniej tyle osób dołączy do kanału.", + "save": "Zapisz ustawienia punktów" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Zastępcza lista odtwarzania (radio_auto_dj_playlist) radio zmienia się, gdy żaden DJ nie transmituje na żywo. Uporządkowane według kolejności sortowania, a następnie tytułu.", + "dbError": "Nie można załadować listy odtwarzania AutoDJ (baza danych jest niedostępna).", + "tracks": "Utwory", + "active": "Aktywny", + "inactive": "Nieaktywny", + "addTrack": "Dodaj utwór", + "titlePlaceholder": "Tytuł utworu", + "artist": "Artysta", + "album": "Albumu", + "artworkUrl": "Adres URL grafiki", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Czas trwania (sekundy)", + "durationPlaceholder": "np. 215", + "sortOrder": "Kolejność sortowania", + "playlist": "Playlista ({count})", + "noTracks": "Nie ma jeszcze utworów AutoDJ — dodaj jeden powyżej.", + "colOrder": "Zamów", + "colTitle": "Tytuł", + "colArtist": "Artysta", + "colAlbum": "Albumu", + "colDuration": "Czas trwania", + "colPlays": "Odtwarza", + "colLastPlayed": "Ostatnio odtwarzane", + "colStatus": "Stan", + "colActions": "Działania", + "activeLabel": "aktywny", + "inactiveLabel": "nieaktywny", + "deactivate": "Dezaktywuj", + "activate": "Aktywuj", + "delete": "Usuń", + "trackTitle": "Tytuł" + }, + "moderationPage": { + "title": "Moderacja DJ-a", + "subtitle": "Przejrzyj i usuń krzyki radiowe (50 najnowszych).", + "recentShouts": "Ostatnie krzyki ({count})" + } + }, + "commandocentrum": { + "title": "Centrum Komandosów", + "subtitle": "Diagnostyka, kontrola RCON i zarządzanie użytkownikami", + "diagnostics": "Diagnostyka", + "rcon": "RCON", + "userActions": "Działania użytkownika", + "diagnosticsTitle": "Diagnostyka emulatora", + "memoryUsage": "Użycie pamięci", + "uptime": "Czas pracy", + "onlineUsers": "Użytkownicy Internetu", + "roomsLoaded": "Pokoje załadowane", + "refresh": "Odśwież", + "rconTitle": "Polecenia RCON", + "rconPlaceholder": "Wprowadź polecenie RCON…", + "rconSend": "Wyślij", + "rconSending": "Wysyłam…", + "rconResponse": "Odpowiedź", + "userActionsTitle": "Działania użytkownika", + "username": "Nazwa użytkownika", + "usernamePlaceholder": "Docelowa nazwa użytkownika", + "action": "Akcja", + "execute": "Wykonaj", + "actions": { + "disconnect": "Rozłącz", + "alert": "Wyślij powiadomienie", + "giveCredits": "Daj kredyty", + "giveBadge": "Daj odznakę", + "givePoints": "Daj punkty", + "ban": "Zakaz", + "kick": "Kopnij" + }, + "messagePlaceholder": "Wiadomość (dla alertów)…", + "amountPlaceholder": "Kwota…", + "badgePlaceholder": "Kod plakietki…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Konfiguracja emulatora", + "subtitle": "Przeglądaj i edytuj ustawienia emulatora oraz teksty ustawień regionalnych", + "settings": "Ustawienia", + "texts": "Teksty", + "search": "Szukaj", + "searchPlaceholder": "Wyszukaj klucze…", + "noSettings": "Nie znaleziono ustawień", + "noTexts": "Nie znaleziono żadnych tekstów", + "edit": "Edytuj", + "save": "Zapisz", + "saving": "Zapisuję…", + "cancel": "Anuluj", + "colKey": "Klucz", + "colValue": "Wartość", + "colType": "Wpisz", + "colActions": "Działania", + "editDialog": { + "title": "Edycja: {key}", + "value": "Wartość", + "valuePlaceholder": "Wpisz wartość…", + "save": "Zapisz zmiany", + "cancel": "Anuluj" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Alerty", + "subtitle": "Wysyłaj alerty dotyczące całego hotelu i przeglądaj najnowsze alerty", + "sendAlert": "Wyślij alert hotelowy", + "recentAlerts": "Ostatnie alerty ({count})", + "noRecentAlerts": "Brak ostatnich alertów", + "form": { + "title": "Tytuł alertu", + "titlePlaceholder": "np. Konserwacja serwera w 10 minut", + "message": "Komunikat ostrzegawczy", + "messagePlaceholder": "Napisz wiadomość ostrzegawczą…", + "type": "Wpisz", + "typeHotel": "Alarm dla całego hotelu", + "typeStaff": "Tylko personel", + "urgent": "Pilne", + "send": "Wyślij powiadomienie", + "sending": "Wysyłam…", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "Identyfikator", + "colTitle": "Tytuł", + "colSentBy": "Wysłane przez", + "colType": "Wpisz", + "colDate": "Data", + "colActions": "Działania", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Działalność personelu", + "subtitle": "Ścieżka audytu działań personelu w panelu administracyjnym", + "noLogs": "Nie zarejestrowano jeszcze żadnej aktywności personelu", + "colId": "Identyfikator", + "colUser": "Użytkownik", + "colAction": "Akcja", + "colTarget": "Cel", + "colDescription": "Opis", + "colIp": "IP", + "colTimestamp": "Znacznik czasu", + "filterByUser": "Filtruj według użytkownika…", + "filterByAction": "Filtruj według działania…", + "clearFilters": "Wyczyść filtry", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Filtr słów", + "subtitle": "Zarządzaj filtrowanymi słowami i frazami w hotelu", + "addWord": "Dodaj słowo", + "addWords": "Dodaj słowa", + "noWords": "Nie ma jeszcze odfiltrowanych słów", + "confirmDelete": "Usunąć „{word}” z filtra?", + "colId": "Identyfikator", + "colWord": "Słowo", + "colAddedBy": "Dodane przez", + "colCreated": "Utworzono", + "colActions": "Działania", + "form": { + "word": "Słowo", + "wordPlaceholder": "np. złe słowo", + "addMore": "Dodaj wiele słów (po jednym w wierszu)", + "save": "Dodaj do filtra", + "saving": "Zapisuję…", + "cancel": "Anuluj" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Tryb konserwacji", + "subtitle": "Włącz lub wyłącz konserwację obejmującą cały hotel", + "enabled": "Tryb konserwacji jest włączony", + "disabled": "Tryb konserwacji jest wyłączony", + "enable": "Włącz konserwację", + "disable": "Wyłącz konserwację", + "message": "Komunikat o konserwacji", + "messagePlaceholder": "Wkrótce wrócimy!", + "staffAccess": "Zezwól personelowi na dostęp podczas konserwacji", + "save": "Zapisz ustawienia", + "saving": "Zapisuję…", + "confirmEnable": "Włączenie konserwacji uniemożliwi dostęp do hotelu wszystkim osobom niebędącym pracownikami. Kontynuować?", + "confirmDisable": "Wyłączyć tryb konserwacji i przywrócić dostęp wszystkim użytkownikom?", + "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": "Zezwolenia na sprzątanie", + "subtitle": "Skonfiguruj, które rangi mają dostęp do poszczególnych sekcji administracyjnych", + "addPermission": "Dodaj pozwolenie", + "editPermission": "Edytuj uprawnienia", + "deletePermission": "Usuń pozwolenie", + "noPermissions": "Nie skonfigurowano uprawnień do sprzątania", + "confirmDelete": "Usunąć to uprawnienie?", + "colId": "Identyfikator", + "colRank": "Ranga", + "colSection": "Sekcja", + "colActions": "Działania", + "form": { + "rankId": "Identyfikator rangi", + "rankIdPlaceholder": "Minimalna ranga", + "section": "Klucz sekcji", + "sectionPlaceholder": "np. panel administracyjny", + "save": "Zapisz pozwolenie", + "saving": "Zapisuję…", + "cancel": "Anuluj" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset Zastosowano!", + "cleared": "All Uprawnienia cleared!", + "invalidRank": "Invalid Ranga", + "testDone": "Test done: {count} Uprawnienia found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Usuń ALL Uprawnienia? This Akcja cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Pozwolenie", + "colDescription": "Opis", + "colMinRank": "Min. Ranga", + "permissionKey": "Klucz uprawnień", + "minRank": "Min. Ranga", + "description": "Opis", + "permissions": "Uprawnienia", + "permissionsCount": "{count} Uprawnienia", + "permission": "Pozwolenie", + "highestMinRank": "Highest min. Ranga: {rank}", + "totalMinRank": "Total min. Ranga sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Rangi", + "missingDeps": "{count} Brak dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(Brak)", + "rank": "Ranga", + "count": "Count", + "searchPermission": "Szukaj Uprawnienia…", + "search": "Szukaj", + "manage": "Manage", + "importSelection": "Importuj selection", + "noGroup": "Nie group", + "allGroups": "All groups", + "perGroup": "Uprawnienia per group", + "perRank": "Uprawnienia per Ranga", + "rankOverviewHint": "All Uprawnienia grouped by the Ranga they are assigned to.", + "tabOverview": "Przegląd", + "tabManage": "Manage", + "tabImport": "Importuj / Export", + "tabRanks": "Ranga Przegląd", + "tabPresets": "Ustawienia wstępne", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "Importuj Uprawnienia", + "importHint": "Paste a JSON array of Pozwolenie objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "Importuj", + "exportTitle": "Export Uprawnienia", + "exportHint": "Export all Uprawnienia as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Pozwolenie Ustawienia wstępne", + "presetsHint": "Zastosuj a predefined Zestaw of Uprawnienia for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Umiarkowanie tools: Użytkownik lookup, Zakazy, CFH handling, chat Dzienniki.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Użytkownicy, Pokoje, news, Ustawienia, Sklep, events, Radia & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including Pozwolenie management and asset Importuj.", + "applyPreset": "Zastosuj preset", + "clearAll": "Clear all Uprawnienia", + "testTitle": "Test Ranga access", + "testHint": "Enter a Ranga number to see which Uprawnienia would be granted.", + "test": "Test", + "auditTitle": "Pozwolenie audit log", + "auditHint": "All changes to Sprzątanie Uprawnienia are logged.", + "auditLogsAt": "Audit Dzienniki are available on the Audit log page.", + "viewAuditLogs": "Zobacz audit Dzienniki", + "importedWithErrors": "Imported {count} Uprawnienia with {errors} errors", + "confirmClearAllDesc": "This will Usuń every Pozwolenie entry from the Baza danych. Are you sure?", + "confirmDeletePermission": "Usuń this Pozwolenie permanently?", + "confirmBulkDelete": "Usuń {count} selected Uprawnienia?", + "deleteSelected": "Usuń {count} selected", + "cancel": "Anuluj", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Użytkownik", + "auditAction": "Akcja", + "auditTarget": "Cel", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Pokoje", + "subtitle": "Wyszukuj pokoje hotelowe i zarządzaj nimi", + "search": "Szukaj", + "searchPlaceholder": "Szukaj według nazwy, właściciela lub identyfikatora…", + "searchResults": "Znaleziono {count, plural, one {# room} other {# rooms}} dla „{query}”", + "noResults": "Nie znaleziono pokoi", + "colId": "Identyfikator", + "colName": "Imię", + "colOwner": "Właściciel", + "colUsers": "Użytkownicy", + "colState": "Stan", + "colCategory": "Kategoria", + "colCreated": "Utworzono", + "colActions": "Działania", + "stateOpen": "Otwórz", + "stateClosed": "Zamknięte", + "stateLocked": "Zablokowane", + "stateInvisible": "Niewidzialny", + "detail": { + "title": "Pokój: {name}", + "subtitle": "Należy do: {owner}", + "overview": "Przegląd", + "actions": "Działania", + "description": "Opis", + "noDescription": "Brak opisu", + "owner": "Właściciel", + "users": "Użytkownicy w Internecie", + "maxUsers": "Maksymalna liczba użytkowników", + "category": "Kategoria", + "state": "Stan", + "tags": "Tagi", + "noTags": "Brak tagów", + "created": "Utworzono", + "deleteRoom": "Usuń pokój", + "confirmDelete": "Usunąć pokój „{name}”? Tego nie można cofnąć.", + "enterRoom": "Wejdź do pokoju", + "changeOwner": "Zmień właściciela", + "changeOwnerPlaceholder": "Nowa nazwa użytkownika właściciela" + } + }, + "emailTemplates": { + "title": "Szablony e-maili", + "subtitle": "Zarządzaj szablonami e-maili transakcyjnych", + "newTemplate": "+ Nowy szablon", + "edit": "Edytuj", + "delete": "Usuń", + "noTemplates": "Nie ma jeszcze szablonów e-maili", + "confirmDelete": "Usunąć szablon „{name}”?", + "colId": "Identyfikator", + "colName": "Imię", + "colSubject": "Temat", + "colKey": "Klucz", + "colUpdated": "Zaktualizowano", + "colActions": "Działania", + "form": { + "name": "Imię", + "namePlaceholder": "np. Witamy e-mail", + "key": "Klucz", + "keyPlaceholder": "np. powitalny_e-mail", + "subject": "Temat", + "subjectPlaceholder": "Temat wiadomości e-mail", + "body": "Treść (HTML)", + "bodyPlaceholder": "

Szanowny {username},

", + "variables": "Dostępne zmienne", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Zapisz szablon", + "saving": "Zapisuję…", + "cancel": "Anuluj", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Temat", + "subtitle": "Dostosuj wygląd CMS", + "presets": "Ustawienia wstępne", + "colours": "Kolory", + "css": "CSS", + "presetsTitle": "Wstępne ustawienia motywu", + "presetsSubtitle": "Wybierz gotowy schemat kolorów", + "applyPreset": "Zastosuj", + "presetApplied": "Zastosowano ustawienie wstępne: {preset}", + "customiseTitle": "Kolory niestandardowe", + "primary": "Podstawowy", + "secondary": "Drugorzędne", + "accent": "Akcent", + "background": "Tło", + "surface": "Powierzchnia", + "text": "Tekst", + "saveColours": "Zapisz kolory", + "savingColours": "Zapisuję…", + "cssTitle": "Niestandardowy CSS", + "cssSubtitle": "Dodaj niestandardowy CSS, aby zastąpić style motywu", + "cssPlaceholder": "/* Tutaj Twój niestandardowy CSS */", + "saveCss": "Zapisz CSS", + "savingCss": "Zapisuję…", + "reset": "Przywróć ustawienia domyślne", + "confirmReset": "Zresetować motyw do wartości domyślnych?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Biblioteka multimediów", + "subtitle": "Przesyłaj i zarządzaj plikami multimedialnymi", + "upload": "Prześlij", + "uploadTitle": "Prześlij plik", + "uploadSubtitle": "Przeciągnij i upuść lub kliknij, aby przesłać", + "uploadButton": "Wybierz plik", + "uploading": "Przesyłanie…", + "noFiles": "Nie ma jeszcze plików multimedialnych", + "delete": "Usuń", + "confirmDelete": "Trwale usunąć ten plik?", + "search": "Szukaj", + "searchPlaceholder": "Wyszukaj według nazwy pliku…", + "colPreview": "Podgląd", + "colName": "Imię", + "colSize": "Rozmiar", + "colType": "Wpisz", + "colUploaded": "Przesłano", + "colActions": "Działania", + "copyUrl": "Skopiuj adres URL", + "urlCopied": "Adres URL skopiowany do schowka" + }, + "favicon": { + "title": "Favikona", + "subtitle": "Przesyłaj favikonę witryny i zarządzaj nią", + "current": "Bieżąca ikona ulubionych", + "uploadLabel": "Prześlij favikonę", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO lub SVG. Maks. 2 MB.", + "upload": "Prześlij", + "uploading": "Przesyłanie…", + "delete": "Usuń", + "deleting": "Usuwam…", + "saved": "Favikona została zapisana pomyślnie!", + "deleted": "Favicon został pomyślnie usunięty!", + "error": "Coś poszło nie tak", + "confirmDelete": "Usunąć favikonę? Witryna nie będzie już wyświetlać niestandardowej ikony ulubionych.", + "generator": { + "title": "Wygeneruj favikonę", + "text": "Tekst", + "bgColor": "Kolor tła", + "textColor": "Kolor tekstu", + "rounded": "Zaokrąglone rogi", + "save": "Zapisz jako favikonę" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "Ustawienia CMSa", + "subtitle": "Zarządzaj konfiguracją CMS typu klucz/wartość", + "addSetting": "Dodaj ustawienie", + "edit": "Edytuj", + "delete": "Usuń", + "noSettings": "Nie znaleziono ustawień", + "confirmDelete": "Usunąć ustawienie „{key}”?", + "colKey": "Klucz", + "colValue": "Wartość", + "colUpdated": "Zaktualizowano", + "colActions": "Działania", + "form": { + "key": "Klucz", + "keyPlaceholder": "np. nazwa_hotelu", + "value": "Wartość", + "valuePlaceholder": "Wartość ustawienia", + "save": "Zapisz ustawienie", + "saving": "Zapisuję…", + "cancel": "Anuluj" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Start", + "reload": "Przeładuj", + "fullscreen": "Pełny ekran", + "logout": "Wyloguj", + "onlineUsers": "Użytkownicy online", + "emulatorOnline": "Emulator online", + "emulatorOffline": "Emulator offline", + "dragToMove": "Przeciągnij, aby przenieść", + "hide": "Ukryj pasek", + "fullscreenExit": "Zamknij pełny ekran", + "show": "Pokaż pasek", + "emulatorUnknown": "Status emulatora nieznany" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Diagnostyka plików", + "preliminary": "Wstępna kontrola adresów; zawartość zostanie sprawdzona podczas importu.", + "http": "HTTP {status}", + "network": "Połączenie nie powiodło się", + "timeout": "Źródło nie odpowiedziało na czas", + "invalidResponse": "Źródło zwróciło stronę zamiast pliku", + "available": "Plik znaleziony; oczekuje na weryfikację", + "recover": "Dołącz oryginał i wznów", + "recoveryHint": "Wybierz {file} (do 50 MB). Tożsamość pliku jest sprawdzana. Ponawiane są nieudane pozycje; ukończone importy zostają zachowane.", + "attach": "Wybierz oryginalny plik .nitro", + "working": "Sprawdzanie lub wznawianie...", + "attached": "Dołączono pasujący oryginał", + "resume": "Wznów nieudane importy z tym plikiem", + "invalidFile": "Wybierz pasujący oryginalny plik .nitro do 50 MB i spróbuj ponownie.", + "resumeError": "Odśwież historię i użyj ostatniej próby; sprawdź plik i spróbuj ponownie.", + "mismatchedFile": "Ten plik należy do innego mebla.", + "alreadyStarted": "Odzyskiwanie już rozpoczęto. Odśwież historię i użyj ostatniej próby.", + "notEligible": "Tej pozycji nie można odzyskać za pomocą załącznika." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/pt.json b/src/messages/pt.json index 2053b2a5..ab7f733a 100644 --- a/src/messages/pt.json +++ b/src/messages/pt.json @@ -1,3919 +1,4913 @@ { - "draftRecovery": { - "ready": "Uma cópia de recuperação será mantida neste navegador durante 7 dias.", - "saved": "Cópia de recuperação guardada neste navegador durante 7 dias.", - "unavailable": "A recuperação no navegador não está disponível. Mantém esta página aberta até que as alterações sejam guardadas.", - "found": "Existe uma cópia de recuperação neste navegador, guardada em", - "restore": "Restaurar cópia do navegador", - "discard": "Eliminar cópia do navegador", - "confirmRestore": "Substituir o formulário atual pela cópia de recuperação do navegador? Verifica o conteúdo antes de guardar.", - "confirmDiscard": "Eliminar esta cópia de recuperação do navegador? O formulário atual permanecerá inalterado." - }, - "nav": { - "home": "Página inicial", - "community": "Comunidade", - "articles": "Artigos", - "photos": "Fotos", - "staff": "Pessoal", - "rankings": "Classificações", - "guilds": "Guildas", - "leaderboards": "Tabelas de classificação", - "rareValues": "Valores raros", - "shop": "Loja", - "market": "Mercado", - "assistance": "Assistência", - "helpCenter": "Central de ajuda", - "myTickets": "Meus ingressos", - "badges": "Emblemas", - "radio": "Rádio", - "friends": "Amigos", - "messages": "Mensagens", - "admin": "Administrador", - "openMenu": "Abrir menu", - "closeMenu": "Fechar menu", - "drawBadge": "Desenhar distintivo", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} on-line", - "nitroClient": "Cliente Nitro", - "tagline": "Um mundo virtual online onde você pode criar seu próprio avatar, fazer amigos, conversar, criar salas e muito mais!", - "login": "Entrar", - "or": "Ou", - "createAccount": "Crie uma conta" - }, - "footer": { - "copyright": "© {year} - {hotel} é um projeto educacional sem fins lucrativos" - }, - "pages": { - "staff": { - "title": "Pessoal", - "subtitle": "A equipe por trás do hotel", - "ranksTitle": "Classificações", - "ranksSubtitle": "O que cada parte da equipe cuida", - "membersTitle": "Membros da equipe", - "membersEmptySubtitle": "Ninguém para mostrar agora", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "Nenhum membro da equipe para mostrar.", - "colUsername": "Nome de usuário", - "colRank": "Classificação", - "colMotto": "Lema" - }, - "leaderboard": { - "title": "Tabela de classificação", - "subtitle": "Os 20 melhores jogadores por {currency}", - "tab_credits": "Créditos", - "tab_diamonds": "Diamantes", - "tab_duckets": "Duckets", - "tab_achievement": "Conquistas", - "tab_respects": "Respeitos", - "tab_onlinetime": "Tempo on-line", - "emptyState": "Nenhuma classificação para mostrar ainda.", - "colAvatar": "avatar", - "colPlayer": "Jogador" - }, - "friends": { - "title": "Amigos", - "emptySubtitle": "Você ainda não adicionou amigos", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Adicione amigos no hotel e eles aparecerão aqui.", - "noMotto": "Sem lema", - "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": "Mensagens", - "subtitle": "Pedidos de amizade e mensagens off-line esperando por você", - "requestsTitle": "Pedidos de amizade", - "requestsEmptySubtitle": "Ninguém pediu para ser seu amigo ainda", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "Nenhum pedido de amizade pendente.", - "wantsToBeFriend": "quer ser seu amigo.", - "accept": "Aceitar", - "offlineTitle": "Mensagens off-line", - "offlineEmptySubtitle": "Sua caixa de entrada está vazia", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "Você não tem mensagens off-line.", - "unknownUser": "Usuário #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Sem lema", - "statRank": "Classificação", - "statCredits": "Créditos", - "statRegistered": "Registrado", - "badgesTitle": "Emblemas", - "badgesEmpty": "Ainda não há emblemas.", - "photosTitle": "Fotos", - "photosEmpty": "Ainda não há fotos.", - "guestbookTitle": "Livro de visitas", - "guestbookSubtitle": "Mensagens no mural de {username}", - "leaveMessage": "Deixe uma mensagem", - "guestbookPlaceholder": "Escreva algo no livro de visitas de {username}…", - "post": "Postar", - "loginToPost": "Faça login para deixar uma mensagem no livro de visitas.", - "guestbookEmpty": "Ainda não há entradas no livro de visitas.", - "unknownUser": "Usuário #{id}", - "statDuckets": "Duckets", - "statDiamonds": "Diamantes", - "walletTitle": "Carteira", - "friendsTitle": "Amigos", - "friendsSubtitle": "Pessoas no hotel com quem eles saem", - "friendsEmpty": "Não há amigos para mostrar.", - "roomsTitle": "Quartos", - "roomsSubtitle": "Quartos que eles possuem", - "roomsEmpty": "Não há quartos para mostrar.", - "roomUntitled": "Sala sem título", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Classificações", - "subtitle": "Os 12 melhores jogadores classificados por créditos", - "emptyState": "Nenhum jogador para classificar ainda." - }, - "home": { - "welcome": "Bem-vindo ao {hotelName}", - "welcomeSubtitle": "Seu hotel retrô, agora com tecnologia Next.js", - "welcomeBody": "Saia, colete mobis e encontre amigos.", - "enterHotel": "Digite {hotelName}", - "onlineFriends": "Amigos on-line", - "noFriendsOnline": "Nenhum amigo on-line", - "register": "INSCREVA-SE AGORA", - "joinNow": "Junte-se ao {hotelName} hoje mesmo!", - "recentUsers": "Usuários recentes", - "recentPhotos": "Fotos recentes", - "latestNews": "Últimas notícias", - "newsTitle": "Últimas notícias", - "newsSubtitle": "Fresco do hotel", - "allNews": "Todas as notícias →", - "allUsers": "Comunidade →", - "noArticles": "Nenhum artigo ainda.", - "noPhotos": "Ainda não há fotos.", - "noUsers": "Nenhum usuário on-line", - "latestArticle": "Artigo mais recente", - "latestUsers": "Novos cidadãos ({count} total)", - "statsOnline": "Online", - "statsCitizens": "Cidadãos", - "statsRooms": "Salas", - "statsArticles": "Artigos", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Crie seu visual único", - "featuresFurniture": "Móveis", - "featuresFurnitureDesc": "Decore salas com itens", - "featuresCommunity": "Comunidade", - "featuresCommunityDesc": "Faça amigos e converse", - "featuresGames": "Jogos", - "featuresGamesDesc": "Compita e divirta-se" - }, - "news": { - "title": "Notícias", - "subtitle": "Os últimos anúncios, eventos e atualizações do hotel", - "noArticles": "Nenhum artigo ainda." - }, - "article": { - "backToNews": "← Notícias", - "reactionsTitle": "Reações", - "reactionsSubtitle": "Diga-nos o que você pensa", - "reaction": { - "like": "Gosto", - "love": "Amor", - "wow": "Uau" - }, - "removeReaction": "Clique para remover sua reação", - "reactWith": "Reaja com {reaction}", - "noReactions": "Nenhuma reação ainda.", - "logIn": "Faça login", - "toReact": "para reagir.", - "commentsTitle": "Comentários", - "commentsSubtitle": "Participe da conversa", - "commentsCount": "{count} até agora", - "noComments": "Nenhum comentário ainda. Seja o primeiro a comentar.", - "userNumber": "Usuário #{id}", - "addComment": "Adicione um comentário", - "commentPlaceholder": "Escreva seu comentário…", - "postComment": "Postar comentário", - "toComment": "para deixar um comentário.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Fotos", - "subtitle": "As últimas fotos tiradas no hotel", - "noPhotos": "Ainda não há fotos.", - "photoAlt": "Foto do usuário #{id}", - "byUser": "pelo usuário #{id}" - }, - "badges": { - "title": "Emblemas", - "subtitle": "Os emblemas que você pode ganhar e exibir no hotel", - "noBadges": "Nenhum emblema disponível ainda." - }, - "community": { - "title": "Comunidade", - "subtitle": "Tudo o que acontece ao redor do hotel em um só lugar", - "open": "Abrir →", - "links": { - "rankings": { - "title": "Classificações", - "text": "Veja os jogadores mais ricos do hotel, classificados por créditos." - }, - "staff": { - "title": "Pessoal", - "text": "Conheça a equipe que mantém o hotel funcionando todos os dias." - }, - "news": { - "title": "Notícias", - "text": "Os últimos anúncios, eventos e atualizações." - }, - "photos": { - "title": "Fotos", - "text": "Instantâneos compartilhados pela comunidade de todo o hotel." - }, - "guilds": { - "title": "Guildas", - "text": "Navegue pelos grupos que os jogadores criaram e dos quais participaram." - }, - "leaderboards": { - "title": "Tabelas de classificação", - "text": "Quem está no topo nesta temporada nas estatísticas do hotel." - } - } - }, - "guilds": { - "title": "Guildas", - "subtitle": "Navegue pelos grupos que os jogadores criaram e dos quais participaram", - "empty": "Nenhuma guilda ainda.", - "unnamedGuild": "Guilda sem nome", - "noDescription": "Sem descrição" - }, - "guild": { - "allGuilds": "← Todas as guildas", - "unnamedGuild": "Guilda sem nome", - "noDescription": "Sem descrição", - "memberSingular": "Membro", - "memberPlural": "Membros", - "founded": "Fundado", - "forumLink": "Fórum →", - "discussion": "Discussão", - "membersTitle": "Membros", - "memberLowerSingular": "membro", - "memberLowerPlural": "membros", - "noMembers": "Nenhum membro.", - "owner": "Proprietário", - "noMotto": "Sem lema" - }, - "guildForum": { - "backToGuild": "← Voltar para guilda", - "unnamedGuild": "Guilda sem nome", - "forumTitle": "{guild} — Fórum", - "threadSingular": "tópico", - "threadPlural": "tópicos", - "newThread": "+ Novo tópico", - "empty": "Ainda não há tópicos neste fórum.", - "colSubject": "Assunto", - "colAuthor": "Autor", - "colPosts": "Postagens", - "colDate": "Data", - "noSubject": "(sem assunto)", - "pinned": "Fixado", - "locked": "Bloqueado", - "userNumber": "Usuário #{id}", - "unknown": "Desconhecido", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Voltar ao fórum", - "unnamedGuild": "Guilda sem nome", - "title": "Novo tópico", - "subtitle": "no fórum {guild}", - "subjectLabel": "Assunto", - "subjectPlaceholder": "Assunto do tópico", - "messageLabel": "Mensagem", - "messagePlaceholder": "Escreva sua postagem de abertura…", - "postThread": "Postar tópico", - "cancel": "Cancelar", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Loja", - "subtitle": "Recarregue sua conta e ganhe pacotes, moedas e emblemas exclusivos.", - "browsingCategory": "Navegando nos pacotes {category}.", - "all": "Todos", - "allPackages": "Todos os pacotes", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "Nenhum pacote disponível no momento.", - "buy": "Comprar", - "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": "Recarregue com PayPal", - "subtitle": "Pague com segurança com PayPal e seus créditos serão adicionados no momento em que o pagamento for confirmado.", - "cancelled": "A finalização da compra foi cancelada – nenhum pagamento foi realizado.", - "chooseAmount": "Escolha um valor", - "notConfiguredPre": "O PayPal ainda não está configurado. Um administrador precisa definir", - "notConfiguredAnd": "e", - "notConfiguredOptional": "(e opcionalmente", - "notConfiguredPost": "para sandbox vs. ao vivo).", - "balanceTitle": "Seu saldo", - "signedInAs": "Conectado como {username}", - "credits": "Créditos", - "creditsPerUnit": "Créditos por 1,00 {currency}", - "rateLine": "Você recebe {amount} créditos por 1,00 {currency}. Os créditos aparecerão no jogo na próxima vez que você fizer login." - }, - "marketplace": { - "title": "Mercado", - "subtitle": "Procure móveis e itens raros listados pelos jogadores. As listagens são colocadas no jogo e atualizadas ao vivo – vá até o hotel para fazer uma oferta.", - "activeOffers": "Ofertas ativas", - "sellers": "Vendedores", - "totalValue": "Valor total", - "activeListings": "Listagens ativas", - "mostRecentFirst": "Mais recentemente listado em primeiro lugar", - "empty": "Não há ofertas de mercado ativas no momento. Volte mais tarde.", - "colOffer": "Oferta", - "colItem": "Artigo", - "colSeller": "Vendedor", - "colPrice": "Preço", - "colListed": "Listado", - "itemLabel": "Item #{id}", - "userLabel": "Usuário #{id}", - "justNow": "agora mesmo", - "minutesAgo": "{count}m atrás", - "hoursAgo": "{count}h atrás", - "daysAgo": "{count} dias atrás" - }, - "rares": { - "title": "Valores raros", - "subtitle": "Obtenha uma visão geral de todas as raridades do hotel, agrupadas por categoria.", - "empty": "Atualmente não temos itens raros listados aqui.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Ver raridades →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Todas as raridades", - "empty": "Nenhum raro listado nesta categoria ainda.", - "colRare": "Raro", - "colCredits": "Créditos", - "colCurrency": "Moeda", - "creditsValue": "{value} créditos", - "duckets": "Duckets", - "diamonds": "Diamantes", - "credits": "Créditos" - }, - "redeem": { - "title": "Resgatar um voucher", - "subtitle": "Tem um código de voucher? Insira-o abaixo para adicionar a recompensa à sua conta.", - "enterCode": "Digite seu código", - "oncePerAccount": "Cada voucher só pode ser resgatado uma vez por conta.", - "balanceTitle": "Seu saldo", - "signedInAs": "Conectado como {username}", - "credits": "Créditos", - "instantCredit": "As recompensas resgatadas são creditadas instantaneamente e aparecem no jogo na próxima vez que você fizer login." - }, - "help": { - "title": "Central de Ajuda", - "subtitle": "Encontre guias, tópicos de suporte e regras do hotel – tudo que você precisa para obter ajuda.", - "myTickets": "Meus ingressos →", - "topicsTitle": "Tópicos de suporte", - "topicsSubtitle": "Procure guias e respostas para perguntas comuns", - "topicsEmpty": "Ainda não há tópicos de ajuda.", - "rulesTitle": "Regras do hotel", - "rulesSubtitle": "Por favor, leia-os antes de sair no hotel", - "rulesEmpty": "Nenhuma regra publicada ainda.", - "categoryEmpty": "Não há regras nesta categoria." - }, - "helpCategory": { - "back": "← Central de Ajuda", - "topicSubtitle": "Tópico da Central de Ajuda", - "moreTitle": "Mais tópicos de ajuda", - "moreSubtitle": "Ir para outro tópico de suporte" - }, - "helpTickets": { - "title": "Bilhetes de ajuda", - "subtitle": "Envie um ticket para a equipe e acompanhe suas solicitações abertas.", - "statTotal": "Total de ingressos", - "statOpen": "Abrir", - "statClosed": "Fechado", - "newTitle": "Novo ingresso", - "newSubtitle": "Descreva seu problema e a equipe fará o acompanhamento", - "subjectPlaceholder": "Assunto", - "contentPlaceholder": "Descreva seu problema…", - "submit": "Enviar tíquete", - "listTitle": "Seus ingressos", - "listSubtitle": "Cada solicitação que você enviou à equipe", - "listEmpty": "Você ainda não tem ingressos.", - "colId": "ID", - "colSubject": "Assunto", - "colStatus": "Estado", - "colCreated": "Criado", - "statusOpen": "Abrir", - "statusClosed": "Fechado", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Inscreva-se para funcionários de {hotel}", - "subtitle": "Abrimos inscrições de funcionários de vez em quando. Se você se deparar com uma posição na qual acha que se encaixaria perfeitamente, não hesite em se candidatar.", - "noPositionsTitle": "Nenhuma vaga aberta", - "noPositionsBody": "No momento não há vagas abertas. Por favor, volte mais tarde para verificar se temos vagas até lá. Obrigado pelo seu interesse.", - "noDeadline": "Sem prazo definido", - "deadline": "Prazo de inscrição: {date}", - "alreadyApplied": "Você já se inscreveu para {rank}", - "aboutYou": "Sobre você", - "aboutPlaceholder": "Diga-nos por que você seria um ótimo {rank}…", - "applyFor": "Inscreva-se para {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": "Inscreva-se na equipe do {hotel}", - "subtitle": "Abrimos inscrições de equipe periodicamente. Se você encontrar uma equipe que se encaixe, não hesite em se inscrever!", - "noPositionsTitle": "Nenhuma posição de equipe aberta", - "noPositionsBody": "No momento não há vagas de equipe abertas. Volte mais tarde para verificar novas vagas. Obrigado!", - "pending": "Sua inscrição está pendente", - "aboutYou": "Sobre você", - "aboutPlaceholder": "Conte-nos por que você seria uma ótima opção para {rank}…", - "applyFor": "Inscreva-se para {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": "Rádio", - "subtitle": "Sintonize a rádio do hotel: DJs ao vivo, pedidos e mensagens.", - "nowPlaying": "Agora jogando", - "nothingPlaying": "Nada tocando agora.", - "onAir": "No ar: {dj}", - "noDj": "Nenhum DJ no ar.", - "audioUnsupported": "Seu navegador não suporta o elemento áudio.", - "streamOffline": "A transmissão está offline no momento.", - "exploreTitle": "Explorar o rádio", - "exploreSubtitle": "Agenda, gritos, pedidos e muito mais", - "linkSchedule": "Cronograma", - "linkScheduleText": "Nossa programação semanal de DJs e shows.", - "linkShouts": "Gritos", - "linkShoutsText": "Gritos e pedidos da comunidade.", - "linkRequests": "Solicitações", - "linkRequestsText": "Peça ao DJ para tocar sua faixa favorita.", - "linkApply": "Candidate-se como DJ", - "linkApplyText": "Junte-se à equipe e vá para as ondas do rádio.", - "linkLeaderboard": "Tabela de classificação", - "linkLeaderboardText": "Principais ouvintes classificados por pontos ganhos.", - "todayTitle": "Agenda de hoje", - "todayTitleWithDay": "Programação de hoje · {day}", - "todaySubtitle": "O que está nas ondas hoje", - "fullWeek": "Semana inteira →", - "noShowsToday": "Não há shows agendados para hoje.", - "colTime": "Hora", - "colShow": "Mostrar", - "colDj": "DJ", - "untitledShow": "Programa sem título", - "userNumber": "Usuário #{id}" - }, - "radioSchedule": { - "title": "Programação de rádio", - "subtitle": "Nossa programação semanal de DJs e shows", - "empty": "Ainda não há shows agendados.", - "colDay": "Dia", - "colTime": "Hora", - "colDj": "DJ", - "colShow": "Mostrar", - "noShows": "Não comparecimento" - }, - "radioShouts": { - "title": "Gritos de rádio", - "subtitle": "Gritos e pedidos da comunidade", - "postTitle": "Poste um grito", - "postSubtitle": "Envie uma mensagem para o DJ no ar", - "messageLabel": "Sua mensagem", - "messagePlaceholder": "Mande um grito para o DJ…", - "shoutButton": "Gritar", - "loginToPost": "Faça login para postar uma mensagem.", - "latestTitle": "Últimos gritos", - "latestSubtitle": "As mensagens mais recentes dos ouvintes", - "empty": "Nenhum grito ainda. Seja o primeiro!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Concursos de Rádio", - "subtitle": "Sintonize e participe de nossos últimos concursos no ar", - "empty": "Ainda não há concursos.", - "contestLabel": "Concurso #{id}", - "dateUnknown": "Data desconhecida" - }, - "radioGiveaways": { - "title": "Brindes de rádio", - "subtitle": "Ouça sua chance de ganhar em nossos brindes de rádio", - "empty": "Ainda não há brindes.", - "giveawayLabel": "Sorteio #{id}", - "dateUnknown": "Data desconhecida" - }, - "radioLeaderboard": { - "title": "Tabela de classificação de ouvintes de rádio", - "subtitle": "Os 50 melhores ouvintes por pontos ganhos sintonizando rádio", - "empty": "Nenhum ponto de ouvinte para mostrar ainda.", - "colRank": "Classificação", - "colAvatar": "avatar", - "colListener": "Ouvinte", - "colPoints": "Pontos" - }, - "radioRequests": { - "formTitle": "Envie uma solicitação", - "formSubtitle": "Peça ao DJ para tocar sua faixa favorita", - "songLabel": "Canção", - "songPlaceholder": "Título da música", - "artistLabel": "Artista", - "artistPlaceholder": "Nome do artista (opcional)", - "submitButton": "Enviar solicitação", - "loginToRequest": "Faça login para enviar uma solicitação.", - "latestTitle": "Solicitações recentes", - "latestSubtitle": "As músicas solicitadas mais recentemente", - "empty": "Ainda não há solicitações.", - "colSong": "Canção", - "colArtist": "Artista", - "colRequester": "Solicitante", - "colDate": "Data", - "colStatus": "Estado", - "statusPending": "Pendente", - "statusApproved": "Aprovado", - "statusPlayed": "Jogado", - "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": "Inscreva-se para ser DJ de rádio", - "subtitle": "Conte-nos sobre você e por que você seria uma ótima opção para as ondas de rádio", - "latestTitle": "Seu aplicativo mais recente", - "statusLabel": "Estado:", - "submittedOn": "· enviado em {date}", - "submitAgain": "Você pode enviar novamente abaixo se seus dados foram alterados.", - "formTitle": "Formulário de inscrição", - "formSubtitle": "Todos os campos marcados como obrigatórios devem ser preenchidos", - "realNameLabel": "Nome verdadeiro", - "realNamePlaceholder": "Seu nome completo", - "ageLabel": "Idade", - "availabilityLabel": "Disponibilidade", - "availabilityPlaceholder": "Quais dias e horários você pode transmitir?", - "musicStyleLabel": "Estilo musical", - "musicStylePlaceholder": "por exemplo House, Pop, Hip-Hop", - "experienceLabel": "Experiência", - "optional": "(opcional)", - "experiencePlaceholder": "Alguma experiência anterior de DJ ou hospedagem?", - "motivationLabel": "Motivação", - "motivationPlaceholder": "Por que você quer se juntar à equipe de rádio?", - "submitButton": "Enviar inscrição", - "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": "Configurações da conta", - "accountSettingsSubtitle": "Gerencie seu perfil, segurança e contas conectadas", - "publicProfile": "Seu perfil público", - "noMotto": "Sem lema", - "noEmail": "Nenhum e-mail cadastrado", - "changeMotto": "Mudar lema", - "changeMottoSubtitle": "Atualizações instantâneas no jogo se você estiver online", - "mottoPlaceholder": "Seu lema", - "saveMotto": "Salvar lema", - "securityTitle": "Segurança", - "securitySubtitle": "Autenticação de dois fatores", - "securityDescription": "Adicione uma segunda camada de proteção à sua conta.", - "twoFactorLink": "Autenticação de dois fatores" - }, - "settings2fa": { - "backToSettings": "← Configurações", - "title": "Autenticação de dois fatores", - "subtitle": "Adicione uma segunda camada de segurança com um aplicativo autenticador", - "nowEnabled": "2FA agora está habilitado. 🔒", - "disabledNotice": "2FA foi desativado.", - "badCode": "Esse código não era válido. Tente novamente.", - "noAppKeyPrefix": "2FA está indisponível até", - "noAppKeyMiddle": "está configurado (o mesmo Laravel", - "noAppKeySuffix": "conforme a instalação do AtomCMS, para que os segredos existentes permaneçam legíveis).", - "isEnabled": "2FA está ativado", - "onYourAccount": "na sua conta.", - "disable": "Desativar 2FA", - "scanOrEnter": "Digitalize ou insira esta chave", - "scanInstructions": "Adicione-o ao Google Authenticator/Authy e insira o código de 6 dígitos para confirmar.", - "manualKey": "Chave manual:", - "codePlaceholder": "Código de 6 dígitos", - "confirm": "Confirmar", - "enableIntro": "Adicione uma segunda camada de segurança com um aplicativo autenticador.", - "enable": "Habilitar 2FA" - }, - "title": "Contas conectadas", - "subtitle": "Vincule uma conta social para poder fazer login com um clique", - "connected": "Conectado", - "unavailable": "Indisponível", - "login": { - "title": "Faça login", - "subtitle": "Bem-vindo de volta – faça login para entrar no hotel.", - "subtitle2fa": "Digite o código de 6 dígitos do seu autenticador.", - "usernamePlaceholder": "Nome de usuário", - "passwordPlaceholder": "Senha", - "codePlaceholder": "Código 2FA", - "pleaseWait": "Por favor, espere…", - "verify": "Verifique", - "signIn": "Faça login", - "or": "ou", - "noAccount": "Sem conta?", - "createOne": "Crie um", - "forgotPassword": "Esqueceu a senha?", - "errorInvalidCredentials": "Nome de usuário ou senha inválidos", - "errorInvalid2fa": "Código 2FA inválido", - "welcomeBack": "Bem-vindo de volta", - "welcomeBackSub": "Entre para continuar em {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Criar conta", - "subtitle": "Junte-se ao hotel – leva apenas um momento.", - "username": "Nome de usuário", - "email": "E-mail", - "password": "Senha", - "confirmPassword": "Repetir senha", - "usernamePlaceholder": "Nome de usuário", - "emailPlaceholder": "E-mail", - "passwordPlaceholder": "Senha (mín. 6 caracteres)", - "confirmPasswordPlaceholder": "Repetir senha", - "selectOutfit": "Selecione sua roupa", - "termsAccept": "Tenho mais de 18 anos e aceito os termos e regras do {hotel}.", - "createAccount": "Criar conta", - "creatingAccount": "Criando conta...", - "redirecting": "A redirecionar para a sua conta...", - "alreadyHaveAccount": "Já tem uma conta? Conecte-se!", - "register": "Cadastre-se", - "termsError": "Você deve aceitar os termos e regras para se registrar.", - "usernameError": "O nome de usuário é obrigatório.", - "emailError": "E-mail válido é obrigatório.", - "passwordError": "A senha deve ter pelo menos 6 caracteres.", - "confirmPasswordError": "As senhas não coincidem.", - "termsRequired": "Você deve aceitar os termos e regras.", - "usernameRequired": "O nome de usuário é obrigatório.", - "emailRequired": "O e-mail é obrigatório.", - "passwordRequired": "A senha é obrigatória.", - "passwordsDontMatch": "As senhas não coincidem.", - "alreadyHaveAccountPre": "Já tem uma conta?", - "alreadyHaveAccountLink": "Entrar", - "whoIsOnline": "Quem está online", - "usersOnline": "{count} online" - }, - "forgot": { - "title": "Redefinir senha", - "subtitle": "Enviaremos a você por e-mail um link seguro para definir uma nova senha.", - "sentNotice": "Se esse e-mail estiver registrado, um link de redefinição foi enviado. Verifique sua caixa de entrada.", - "emailPlaceholder": "Seu e-mail", - "sendResetLink": "Enviar link de redefinição", - "backToLogin": "Voltar ao login", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Defina uma nova senha", - "subtitle": "Escolha uma senha forte que você não usa em outro lugar.", - "passwordPlaceholder": "Nova senha (mínimo 6 caracteres)", - "resetPassword": "Redefinir senha", - "backToLogin": "Voltar ao login" - }, - "verify": { - "verifiedTitle": "Você está pronto", - "verifiedSubtitle": "E-mail verificado", - "verifiedBody": "Seu endereço de e-mail foi verificado. Agora você pode fazer login e jogar.", - "goToLogin": "Ir para login", - "alreadyTitle": "Já verificado", - "alreadySubtitle": "Nada mais para fazer", - "alreadyBody": "Este endereço de e-mail já foi confirmado.", - "unavailableTitle": "Tente novamente em breve", - "unavailableSubtitle": "Servidor inacessível", - "unavailableBody": "Não foi possível acessar o servidor para verificar seu e-mail. Por favor, tente acessar o link novamente em alguns instantes.", - "invalidTitle": "Verificação de e-mail", - "invalidSubtitle": "Link inválido ou expirado", - "invalidBody": "Este link de verificação não é válido. Certifique-se de abrir o link completo do seu e-mail ou solicite um novo.", - "backToLogin": "Voltar ao login" - }, - "banned": { - "title": "Você está banido", - "subtitle": "Conta suspensa", - "body": "Sua conta foi suspensa no hotel.", - "reasonLabel": "Razão:", - "permanent": "Esta proibição é permanente.", - "expires": "Expira em {date}.", - "contactStaff": "Se você acredita que isso é um erro, entre em contato com a equipe de funcionários." - }, - "maintenance": { - "title": "{hotel} está em manutenção", - "subtitle": "Estaremos de volta em breve", - "staffCanLogIn": "A equipe ainda pode fazer login." - }, - "admin": { - "nav": { - "overview": "Visão geral", - "dashboard": "Painel", - "content": "Conteúdo", - "articles": "Artigos", - "tags": "Etiquetas", - "navigator": "Navegador", - "helpCenter": "Central de ajuda", - "advertisements": "Anúncios", - "writeableBoxes": "Caixas graváveis", - "photos": "Fotos", - "tickets": "Ingressos", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Usuários e acesso", - "users": "Usuários", - "bans": "Proibições", - "ipManagement": "Gerenciamento de IP", - "vpn": "VPN", - "applications": "Aplicativos", - "teams": "Equipes", - "permissions": "Permissões", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Economia", - "catalog": "Catálogo", - "shop": "Loja", - "transactions": "Transações", - "vouchers": "Vouchers", - "subscriptions": "Assinaturas", - "rareValues": "Valores raros", - "badges": "Emblemas", - "achievements": "Conquistas", - "calendar": "Calendário", - "radio": "Rádio", - "radioHistory": "História do rádio", - "radioBanners": "Bandeiras", - "radioEmbed": "Incorporar", - "radioApiKeys": "Chaves de API", - "radioModeration": "Moderação", - "radioSettings": "Configurações", - "radioMonitoring": "Monitoramento", - "radioPoints": "Pontos", - "radioRanks": "Classificações", - "radioAutodj": "DJ automático", - "system": "Sistema", - "commandocentrum": "Centro de Comando", - "emulator": "Emulador", - "alerts": "Alertas", - "logs": "Registros", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Filtro de palavras", - "maintenance": "Manutenção", - "rooms": "Quartos", - "emailTemplates": "Modelos de e-mail", - "theme": "Tema", - "media": "Mídia", - "favicon": "Favicon", - "sounds": "Sons", - "translations": "Traduções", - "import": "Importar", - "settings": "Configurações", - "backToSite": "Voltar ao site", - "housekeeping": "Limpeza", - "hotelManagementPanel": "Painel de gestão hoteleira", - "rankLabel": "Classificação {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "studio": "Studio", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Painel", - "subtitle": "Visão geral do hotel e status ao vivo", - "playersOnline": "Jogadores on-line", - "articles": "Artigos", - "activeBans": "Banimentos ativos", - "database": "Banco de dados", - "databaseConnected": "Conectado", - "databaseDown": "Para baixo", - "usersByRank": "Usuários por classificação", - "noAccountsToBreakDown": "Nenhuma conta para dividir ainda", - "rankLabel": "Classificação {rank}", - "rankWithCount": "Classificação {rank}: {count} contas", - "recentStaffActivity": "Atividade recente da equipe", - "viewAll": "Ver tudo", - "noStaffActivityLogged": "Nenhuma atividade da equipe registrada ainda" - }, - "articles": { - "title": "Artigos", - "subtitle": "Artigos de notícias - 50 mais recentes", - "newArticle": "+ Novo artigo", - "edit": "Editar", - "delete": "Excluir", - "noArticles": "Nenhum artigo ainda", - "confirmDelete": "Tem certeza de que deseja excluir \"{title}\"?", - "colTitle": "Título", - "colSlug": "Lesma", - "colAuthor": "Autor", - "colCreated": "Criado", - "colActions": "Ações", - "form": { - "title": "Título", - "titlePlaceholder": "Título do artigo", - "slug": "Lesma", - "slugPlaceholder": "artigo-url-slug", - "category": "Categoria", - "categoryPlaceholder": "Selecione uma categoria", - "body": "Corpo", - "bodyPlaceholder": "Escreva o conteúdo do seu artigo…", - "image": "Imagem", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Miniatura", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Publicado", - "featured": "Destaque", - "save": "Salvar artigo", - "saving": "Salvando…", - "deleteArticle": "Excluir artigo", - "deleteConfirm": "Esta ação não pode ser desfeita. O artigo será removido permanentemente.", - "cancel": "Cancelar", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Etiquetas", - "subtitle": "Tags/categorias de artigos", - "addTag": "Adicionar etiqueta", - "name": "Nome", - "namePlaceholder": "Nome da etiqueta", - "backgroundColour": "Cor de fundo", - "createTag": "Criar etiqueta", - "editTag": "Editar etiqueta", - "updateTag": "Atualizar etiqueta", - "deleteTag": "Excluir etiqueta", - "confirmDelete": "Excluir \"{name}\"?", - "noTags": "Ainda não há tags", - "colId": "ID", - "colTag": "Etiqueta", - "colColour": "Cor", - "colUsedBy": "Usado por", - "colCreated": "Criado", - "colActions": "Ações" - }, - "navigation": { - "title": "Navegador", - "flatCategories": "Categorias planas", - "publicRooms": "Salas públicas", - "addCategory": "Adicionar categoria", - "editCategory": "Editar categoria", - "deleteCategory": "Excluir categoria", - "categoryName": "Nome da categoria", - "categoryNamePlaceholder": "por exemplo Relaxe e converse", - "categoryOrder": "Pedido", - "roomName": "Nome da sala", - "roomNamePlaceholder": "por exemplo Sala de boas-vindas", - "roomId": "ID da sala", - "roomIdPlaceholder": "ID numérico da sala", - "save": "Salvar", - "cancel": "Cancelar", - "noCategories": "Nenhuma categoria ainda", - "noPublicRooms": "Ainda não há salas públicas", - "colId": "ID", - "colName": "Nome", - "colOrder": "Pedido", - "colRooms": "Quartos", - "colActions": "Ações" - }, - "helpCenter": { - "title": "Central de Ajuda", - "subtitle": "Entradas de suporte e gerenciamento de perguntas frequentes", - "entries": "Entradas", - "newEntry": "+ Nova entrada", - "edit": "Editar", - "delete": "Excluir", - "noEntries": "Nenhuma entrada ainda", - "confirmDelete": "Excluir \"{title}\"?", - "colId": "ID", - "colTitle": "Título", - "colCategory": "Categoria", - "colCreated": "Criado", - "colActions": "Ações", - "form": { - "title": "Título", - "titlePlaceholder": "Título da entrada", - "category": "Categoria", - "categoryPlaceholder": "Selecione a categoria", - "body": "Corpo", - "bodyPlaceholder": "Escreva a resposta…", - "save": "Salvar entrada", - "saving": "Salvando…", - "deleteEntry": "Excluir entrada", - "cancel": "Cancelar" - } - }, - "ads": { - "title": "Anúncios", - "subtitle": "Gerenciar anúncios de hotéis e banners promocionais", - "newAd": "+ Novo anúncio", - "edit": "Editar", - "delete": "Excluir", - "noAds": "Ainda não há anúncios", - "confirmDelete": "Excluir este anúncio?", - "colId": "ID", - "colName": "Nome", - "colImage": "Imagem", - "colUrl": "URL", - "colViews": "Visualizações", - "colStatus": "Estado", - "colCreated": "Criado", - "colActions": "Ações", - "form": { - "name": "Nome", - "namePlaceholder": "Nome do anúncio", - "image": "URL da imagem", - "imagePlaceholder": "https://example.com/banner.png", - "url": "URL de destino", - "urlPlaceholder": "https://example.com", - "enabled": "Habilitado", - "save": "Salvar anúncio", - "saving": "Salvando…", - "deleteAd": "Excluir anúncio", - "cancel": "Cancelar" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Caixas graváveis", - "subtitle": "Painéis de conteúdo exibidos no hotel e no CMS", - "newBox": "Nova caixa", - "edit": "Editar", - "delete": "Excluir", - "noBoxes": "Ainda não há caixas graváveis", - "confirmDelete": "Excluir esta caixa?", - "colId": "ID", - "colName": "Nome", - "colLocation": "Localização", - "colUpdated": "Atualizado", - "colActions": "Ações", - "form": { - "name": "Nome", - "namePlaceholder": "Nome da caixa", - "location": "Localização", - "locationPlaceholder": "por exemplo página inicial, barra lateral", - "content": "Conteúdo", - "contentPlaceholder": "Escreva o conteúdo da caixa…", - "enabled": "Habilitado", - "save": "Salvar caixa", - "saving": "Salvando…", - "deleteBox": "Excluir caixa", - "cancel": "Cancelar" - } - }, - "photos": { - "title": "Moderação de fotos", - "subtitle": "Fotos recentes da câmera do jogo", - "delete": "Excluir", - "approve": "Aprovar", - "noPhotos": "Nenhuma foto para moderar", - "confirmDelete": "Excluir esta foto permanentemente?", - "colId": "ID", - "colPreview": "Visualização", - "colUser": "Usuário", - "colRoom": "Quarto", - "colTimestamp": "Carimbo de data e hora", - "colActions": "Ações", - "photoAlt": "Foto do usuário #{id}", - "byUser": "por {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Usuários", - "subtitle": "Navegue, pesquise e gerencie contas de hotéis", - "search": "Pesquisar", - "searchPlaceholder": "Pesquise por nome de usuário, e-mail ou ID…", - "searchResults": "{count, plural, one {# result} other {# results}} para \"{query}\"", - "noResults": "Nenhum usuário encontrado", - "colId": "ID", - "colUsername": "Nome de usuário", - "colEmail": "E-mail", - "colRank": "Classificação", - "colOnline": "On-line", - "colRegistered": "Registrado", - "colLastOnline": "Última vez on-line", - "colActions": "Ações", - "yes": "Sim", - "no": "Não", - "edit": "Editar", - "setRank": "Definir classificação", - "disconnect": "Desconectar", - "alert": "Alerta", - "ban": "Proibição", - "detail": { - "title": "Usuário: {username}", - "subtitle": "Detalhes e gerenciamento da conta", - "overview": "Visão geral", - "actions": "Ações", - "username": "Nome de usuário", - "email": "E-mail", - "motto": "Lema", - "rank": "Classificação", - "credits": "Créditos", - "duckets": "Duckets", - "diamonds": "Diamantes", - "online": "On-line", - "registered": "Registrado", - "lastOnline": "Última vez on-line", - "ipAddress": "Endereço IP", - "machineId": "ID da máquina", - "sendAlert": "Enviar alerta", - "sendMessage": "Enviar mensagem", - "disconnectUser": "Desconectar usuário", - "banUser": "Banir usuário", - "resetPassword": "Redefinir senha", - "deleteUser": "Excluir usuário", - "confirmDelete": "Tem certeza de que deseja excluir {username}? Isto não pode ser desfeito.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Editar usuário: {username}", - "subtitle": "Modificar detalhes da conta", - "username": "Nome de usuário", - "usernamePlaceholder": "Nome de usuário", - "email": "E-mail", - "emailPlaceholder": "usuário@exemplo.com", - "motto": "Lema", - "mottoPlaceholder": "Lema do usuário", - "rank": "Classificação", - "credits": "Créditos", - "duckets": "Duckets", - "diamonds": "Diamantes", - "save": "Salvar alterações", - "saving": "Salvando…", - "cancel": "Cancelar" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Proibições", - "subtitle": "Gerenciar banimentos de contas, IP e máquinas", - "newBan": "Nova proibição", - "edit": "Editar", - "delete": "Excluir", - "noBans": "Ainda não há proibições", - "confirmDelete": "Remover esta proibição?", - "colId": "ID", - "colValue": "Valor", - "colType": "Tipo", - "colReason": "Razão", - "colBannedBy": "Banido por", - "colExpires": "Expira", - "colCreated": "Criado", - "colActions": "Ações", - "form": { - "value": "Valor", - "valuePlaceholder": "Nome de usuário, IP ou ID de máquina", - "type": "Tipo", - "typeUser": "Usuário", - "typeIp": "PI", - "typeMachine": "Máquina", - "reason": "Razão", - "reasonPlaceholder": "Motivo do banimento", - "expiresAt": "Expira em", - "permanent": "Permanente", - "save": "Salvar proibição", - "saving": "Salvando…", - "cancel": "Cancelar" - } - }, - "ip": { - "title": "Gerenciamento de IP", - "subtitle": "Gerenciar lista branca e lista negra de IP", - "whitelist": "Lista de permissões", - "blacklist": "Lista negra", - "addIp": "Adicionar IP", - "ipAddress": "Endereço IP", - "ipAddressPlaceholder": "por exemplo 127.0.0.1", - "reason": "Razão", - "reasonPlaceholder": "Motivo da listagem", - "add": "Adicionar", - "remove": "Remover", - "confirmRemove": "Remover este IP da {list}?", - "noWhitelistedIps": "Nenhum IP na lista de permissões", - "noBlacklistedIps": "Nenhum IP na lista negra", - "colIp": "PI", - "colReason": "Razão", - "colAdded": "Adicionado", - "colActions": "Ações" - }, - "vpn": { - "title": "Detecção de VPN/proxy", - "subtitle": "Definir configurações de VPN e detecção de proxy", - "enabled": "Habilitado", - "apiKey": "Chave de API", - "apiKeyPlaceholder": "Sua chave API de detecção de VPN", - "apiKeyHint": "Deixe em branco para desativar", - "blockOnDetect": "Bloquear na detecção", - "blockOnDetectHint": "Bloqueie automaticamente usuários detectados por trás de uma VPN ou proxy", - "save": "Salvar configurações", - "saving": "Salvando…", - "settingsSaved": "Configurações de VPN salvas com sucesso" - }, - "applications": { - "title": "Candidaturas para funcionários", - "subtitle": "Solicitações de funcionários pendentes e revisadas", - "pending": "Pendente", - "approved": "Aprovado", - "rejected": "Rejeitado", - "noApplications": "Ainda não há inscrições", - "colId": "ID", - "colApplicant": "Requerente", - "colPosition": "Posição", - "colStatus": "Estado", - "colSubmitted": "Enviado", - "colActions": "Ações", - "review": "Revisão", - "approve": "Aprovar", - "reject": "Rejeitar", - "confirmApprove": "Aprovar {username} para {position}?", - "confirmReject": "Rejeitar a candidatura de {username} para {position}?", - "detail": { - "title": "Inscrição por {username}", - "subtitle": "Para {position}", - "about": "Sobre o candidato", - "message": "Mensagem do aplicativo", - "status": "Estado", - "submitted": "Enviado", - "noMessage": "Nenhuma mensagem fornecida" - } - }, - "teams": { - "title": "Equipes", - "subtitle": "Definir nomes e descrições de classificação da equipe", - "addRank": "Adicionar classificação", - "editRank": "Editar classificação", - "deleteRank": "Excluir classificação", - "noTeams": "Ainda não há definições de classificação", - "confirmDelete": "Excluir definição de classificação {id}?", - "colId": "ID", - "colRank": "Classificação", - "colName": "Nome", - "colBadge": "Distintivo", - "colColour": "Cor", - "colActions": "Ações", - "form": { - "rankId": "ID de classificação", - "rankIdPlaceholder": "ID de classificação numérica", - "name": "Nome", - "namePlaceholder": "por exemplo Administrador", - "badge": "Código do selo", - "badgePlaceholder": "por exemplo ADM001", - "colour": "Cor", - "colourPlaceholder": "por exemplo #ff0000", - "save": "Salvar definição de equipe", - "saving": "Salvando…", - "cancel": "Cancelar" - } - }, - "permissions": { - "title": "Permissões", - "subtitle": "Gerenciar permissões baseadas em classificação para o painel de administração", - "addPermission": "Adicionar permissão", - "editPermission": "Editar permissão", - "deletePermission": "Excluir permissão", - "noPermissions": "Nenhuma permissão configurada ainda", - "confirmDelete": "Excluir esta permissão?", - "colId": "ID", - "colRank": "Classificação", - "colPermission": "Permissão", - "colCreated": "Criado", - "colActions": "Ações", - "form": { - "rankId": "ID de classificação", - "rankIdPlaceholder": "Classificação mínima exigida", - "permission": "Chave de permissão", - "permissionPlaceholder": "por exemplo admin.artigos.manage", - "save": "Salvar permissão", - "saving": "Salvando…", - "cancel": "Cancelar" - } - }, - "catalog": { - "title": "Catálogo", - "subtitle": "Navegue e gerencie páginas e itens do catálogo", - "pages": "Páginas", - "items": "Itens", - "addPage": "Adicionar página", - "editPage": "Editar página", - "deletePage": "Excluir página", - "addItem": "Adicionar item", - "editItem": "Editar item", - "deleteItem": "Excluir item", - "noPages": "Ainda não há páginas de catálogo", - "noItems": "Nenhum item nesta página", - "confirmDeletePage": "Excluir a página do catálogo \"{name}\"?", - "confirmDeleteItem": "Excluir este item?", - "colId": "ID", - "colName": "Nome", - "colIcon": "Ícone", - "colOrder": "Pedido", - "colItems": "Itens", - "colEnabled": "Habilitado", - "colActions": "Ações", - "colItemId": "ID do item", - "colItemName": "Nome do item", - "colCostCredits": "Custo (créditos)", - "colCostPoints": "Custo (pontos)", - "colLimited": "Limitado", - "pageForm": { - "name": "Nome", - "namePlaceholder": "Nome da página", - "icon": "ID do ícone", - "iconPlaceholder": "ID numérico do ícone", - "order": "Pedido", - "enabled": "Habilitado", - "parent": "Página pai", - "parentNone": "Nenhum (raiz)", - "save": "Salvar página", - "saving": "Salvando…", - "cancel": "Cancelar" - }, - "itemForm": { - "itemId": "ID do item", - "itemName": "Nome do item", - "costCredits": "Custo em créditos", - "costDuckets": "Custo em patos", - "costDiamonds": "Custo em diamantes", - "limitedStack": "Tamanho de pilha limitado", - "limitedSold": "Venda limitada", - "save": "Salvar item", - "saving": "Salvando…", - "cancel": "Cancelar" - }, - "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." - } - }, - "shop": { - "title": "Loja", - "subtitle": "Gerenciar pacotes e pedidos", - "packages": "Pacotes", - "orders": "Pedidos", - "newPackage": "+ Novo pacote", - "edit": "Editar", - "delete": "Excluir", - "viewOrder": "Ver", - "noPackages": "Nenhum pacote de loja ainda", - "noOrders": "Ainda não há pedidos", - "confirmDelete": "Excluir este pacote?", - "colId": "ID", - "colName": "Nome", - "colPrice": "Preço", - "colCurrency": "Moeda", - "colType": "Tipo", - "colSold": "Vendido", - "colEnabled": "Habilitado", - "colActions": "Ações", - "colOrderId": "ID do pedido", - "colCustomer": "Cliente", - "colPackage": "Pacote", - "colAmount": "Quantidade", - "colStatus": "Estado", - "colDate": "Data", - "statusPending": "Pendente", - "statusCompleted": "Concluído", - "statusRefunded": "Reembolsado", - "form": { - "name": "Nome", - "namePlaceholder": "Nome do pacote", - "description": "Descrição", - "descriptionPlaceholder": "Descrição do pacote", - "price": "Preço", - "currency": "Moeda", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Tipo", - "typeCredits": "Créditos", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamantes", - "typeBadge": "Distintivo", - "typeFurni": "Móveis", - "typeRank": "Classificação", - "amount": "Quantidade", - "badgeCode": "Código do selo", - "badgeCodePlaceholder": "por exemplo VIP001", - "rankId": "ID de classificação", - "furniItems": "Itens de mobiliário", - "enabled": "Habilitado", - "save": "Salvar pacote", - "saving": "Salvando…", - "cancel": "Cancelar" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Transações", - "subtitle": "Registro de pagamento do PayPal", - "noTransactions": "Nenhuma transação ainda", - "colId": "ID", - "colUser": "Usuário", - "colAmount": "Quantidade", - "colCurrency": "Moeda", - "colPackage": "Pacote", - "colStatus": "Estado", - "colDate": "Data", - "colActions": "Ações", - "statusCompleted": "Concluído", - "statusPending": "Pendente", - "statusFailed": "Falha", - "statusRefunded": "Reembolsado", - "detail": { - "title": "Transação #{id}", - "paypalId": "ID do PayPal", - "payerEmail": "E-mail do pagador", - "grossAmount": "Montante bruto", - "fee": "Taxa", - "netAmount": "Valor líquido" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Vouchers de loja", - "subtitle": "Gerenciar códigos de voucher resgatáveis", - "newVoucher": "+ Novo comprovante", - "edit": "Editar", - "delete": "Excluir", - "noVouchers": "Ainda não há vouchers", - "confirmDelete": "Excluir voucher \"{code}\"?", - "colId": "ID", - "colCode": "Código", - "colValue": "Valor", - "colType": "Tipo", - "colUses": "Usos / Máx.", - "colExpires": "Expira", - "colCreated": "Criado", - "colActions": "Ações", - "form": { - "code": "Código", - "codePlaceholder": "por exemplo VERÃO2025", - "value": "Valor", - "type": "Tipo", - "typeCredits": "Créditos", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamantes", - "typeBadge": "Distintivo", - "typeFurni": "Móveis", - "typeRank": "Classificação", - "badgeCode": "Código do selo", - "badgeCodePlaceholder": "por exemplo VIP001", - "rankId": "ID de classificação", - "maxUses": "Máximo de usos", - "maxUsesPlaceholder": "0 = ilimitado", - "expiresAt": "Expira em", - "enabled": "Habilitado", - "save": "Salvar comprovante", - "saving": "Salvando…", - "cancel": "Cancelar", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Assinaturas", - "subtitle": "Assinaturas recorrentes ativas", - "noSubscriptions": "Nenhuma assinatura ativa", - "cancel": "Cancelar", - "confirmCancel": "Cancelar assinatura de {username}?", - "colId": "ID", - "colUser": "Usuário", - "colPackage": "Pacote", - "colAmount": "Quantidade", - "colInterval": "Intervalo", - "colStarted": "Iniciado", - "colNextBilling": "Próximo faturamento", - "colStatus": "Estado", - "colActions": "Ações", - "statusActive": "Ativo", - "statusCancelled": "Cancelado", - "statusExpired": "Expirado" - }, - "rareValues": { - "title": "Valores raros", - "subtitle": "Gerencie categorias de valor raro e preços de itens", - "categories": "Categorias", - "items": "Itens", - "addCategory": "Adicionar categoria", - "editCategory": "Editar categoria", - "deleteCategory": "Excluir categoria", - "noCategories": "Ainda não há categorias de valor raro", - "confirmDeleteCategory": "Excluir a categoria \"{name}\" e todos os seus itens?", - "colId": "ID", - "colName": "Nome", - "colItems": "Itens", - "colUpdated": "Atualizado", - "colActions": "Ações", - "colItemName": "Nome do item", - "colCredits": "Créditos", - "colPoints": "Pontos", - "colPointType": "Tipo de ponto", - "categoryForm": { - "name": "Nome", - "namePlaceholder": "Nome da categoria", - "save": "Salvar categoria", - "saving": "Salvando…", - "cancel": "Cancelar" - }, - "itemForm": { - "itemName": "Nome do item", - "itemNamePlaceholder": "por exemplo Trono", - "credits": "Valor dos créditos", - "points": "Valor dos pontos", - "pointType": "Tipo de ponto", - "pointTypeDuckets": "Duckets", - "pointTypeDiamonds": "Diamantes", - "save": "Salvar item", - "saving": "Salvando…", - "cancel": "Cancelar" - } - }, - "badges": { - "title": "Emblemas", - "subtitle": "Carregue, dê e gerencie o catálogo de crachás", - "upload": "Carregar", - "giveBadge": "Dê crachá", - "catalogue": "Catálogo", - "uploadTitle": "Carregar um novo selo", - "uploadSubtitle": "Carregar um arquivo de imagem do selo", - "badgeCode": "Código do selo", - "badgeCodePlaceholder": "por exemplo VIP001", - "badgeFile": "Arquivo de crachá", - "badgeFileHint": "PNG ou GIF, recomendado 40x40", - "uploadButton": "Carregar", - "uploading": "Fazendo upload…", - "giveTitle": "Dê selo ao usuário", - "giveSubtitle": "Conceda um selo a um usuário específico", - "username": "Nome de usuário", - "usernamePlaceholder": "Nome de usuário de destino", - "giveButton": "Dê crachá", - "giving": "Dando…", - "catalogueTitle": "Catálogo de emblemas", - "catalogueSubtitle": "Todos os crachás disponíveis no hotel", - "noBadges": "Não há emblemas no catálogo", - "search": "Pesquisar emblemas", - "searchPlaceholder": "Pesquise por código ou nome…", - "colCode": "Código", - "colImage": "Imagem", - "colName": "Nome", - "colDescription": "Descrição", - "colActions": "Ações" - }, - "achievements": { - "title": "Conquistas", - "subtitle": "Lista somente leitura de conquistas no jogo", - "noAchievements": "Nenhuma conquista configurada", - "colId": "ID", - "colName": "Nome", - "colCategory": "Categoria", - "colLevels": "Níveis", - "colReward": "Recompensa", - "colProgress": "Progresso", - "levelLabel": "Nível {level}", - "rewardCredits": "{count} créditos", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Campanhas de calendário", - "subtitle": "Lista somente leitura de campanhas e eventos do calendário", - "noCampaigns": "Ainda não há campanhas de calendário", - "colId": "ID", - "colName": "Nome", - "colStart": "Começar", - "colEnd": "Fim", - "colType": "Tipo", - "colReward": "Recompensa", - "colActions": "Ações", - "detail": { - "title": "Campanha: {name}", - "subtitle": "Detalhes do evento do calendário", - "days": "Dias", - "dayLabel": "Dia {day}", - "reward": "Recompensa", - "noDays": "Nenhum dia configurado para esta campanha" - } - }, - "radio": { - "title": "Moderação de rádio", - "subtitle": "Últimos gritos, inscrições de DJs e programações no ar (25 mais recentes de cada).", - "moderation": "Moderação", - "shouts": "Gritos", - "applications": "Aplicativos", - "schedules": "Horários", - "settings": "Configurações", - "embed": "Incorporar", - "ranks": "Classificações", - "history": "História", - "apiKeys": "Chaves de API", - "points": "Pontos", - "autoDj": "Auto DJ", - "monitoring": { - "title": "Monitoramento de rádio", - "subtitle": "Sonda ao vivo somente leitura dos endpoints de rádio configurados (radio_now_playing_api_url, radio_listeners_api_url). Cada solicitação falha suavemente com um tempo limite de {timeout} — nenhum dado é gravado. Configure URLs em Configurações.", - "stream": "Transmitir", - "online": "On-line", - "offline": "Off-line", - "notConfigured": "Não configurado", - "nowPlaying": "Agora jogando", - "nowPlayingApi": "API em execução", - "listenersApi": "API de ouvintes", - "listeners": "Ouvintes", - "currentSong": "Música atual", - "bitrate": "Taxa de bits", - "status": "Estado", - "noNowPlayingHint": "nenhum conjunto de API em execução", - "noListenersHint": "nenhuma API de ouvinte definida", - "endpointDiagnostics": "Diagnóstico de endpoint", - "diagnosticsLegend": "OK: acessível · WARN: não configurado · ERROR: falha no pedido ou tempo esgotado.", - "streamUrl": "URL de transmissão", - "unreachable": "inacessível", - "refresh": "Atualizar" - }, - "user": "Usuário", - "message": "Mensagem", - "posted": "Publicado", - "realName": "Nome verdadeiro", - "age": "Idade", - "style": "Estilo", - "applied": "Aplicado", - "day": "Dia", - "start": "Começar", - "end": "Fim", - "show": "Mostrar", - "status": "Estado", - "active": "ativo", - "inactive": "inativo", - "hidden": "escondido", - "activeSchedules": "Agendamentos ativos", - "noShouts": "Sem gritos para moderar", - "noApplications": "Nenhuma inscrição enviada.", - "noSchedules": "Nenhuma programação configurada.", - "deleteShout": "Excluir", - "confirmDeleteShout": "Excluir este grito?", - "pendingApplications": "Candidaturas pendentes", - "settingsForm": { - "title": "Configurações de rádio", - "subtitle": "As edições são gravadas em website_settings (teclas radio_*) e interrompem o cache de configurações de tempo de execução. Booleanos usam 0/1.", - "enabled": "Habilitado", - "disabled": "Desativado", - "totalKeys": "Total de chaves", - "configured": "Configurado", - "curatedHint": "chaves selecionadas com um valor", - "customKeys": "Chaves personalizadas", - "saveAll": "Salvar tudo", - "singleKey": "Adicionar/substituir uma única chave", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "valor", - "commentPlaceholder": "comentário (opcional)", - "saveSingle": "Salvar", - "otherSettings": "Outras configurações de rádio", - "dbError": "Não foi possível carregar as configurações (banco de dados indisponível). Os padrões serão criados ao salvar." - }, - "embedPage": { - "title": "Incorporação de rádio", - "subtitle": "Código incorporado pronto para cópia para a transmissão ao vivo. Somente leitura – nada aqui é gravado no banco de dados. Configure o URL do stream nas configurações do rádio (radio_stream_url).", - "streamUrl": "URL de transmissão", - "configured": "Configurado", - "missing": "Desaparecido", - "radioName": "Nome da rádio", - "nowPlayingApi": "API em execução", - "set": "Definir", - "notSet": "Não definido", - "noStreamUrl": "Nenhum URL de stream configurado", - "noStreamUrlText": "Não há radio_stream_url definido, então não há nada para incorporar ainda.", - "goToSettings": "Vá para configurações de rádio", - "livePreview": "Visualização ao vivo", - "livePreviewText": "Este é o player audio simples, como os visitantes o verão. Pressione play para confirmar que o stream está acessível.", - "source": "Fonte", - "audioSnippet": "Snippet do player de áudio", - "audioSnippetDesc": "Reprodutor de áudio HTML5 drop-in apontado diretamente para o stream. Funciona em qualquer lugar onde HTML simples seja permitido.", - "iframeSnippet": "Snippet de wrapper de iframe", - "iframeSnippetDesc": "Incorpora a página do player de rádio do próprio site em um iframe – mantém seu estilo e informações de reprodução atual. Ajuste largura/altura a gosto.", - "audioUnsupported": "Seu navegador não suporta o elemento áudio." - }, - "banners": { - "title": "Bandeiras", - "heading": "Banners de rádio", - "description": "Banners promocionais exibidos na página da rádio, ordenados por ordem de classificação.", - "addBanner": "Adicionar faixa", - "createBanner": "Criar banner", - "deleteBanner": "Excluir banner", - "noBanners": "Ainda não há banners – adicione um acima.", - "existing": "Banners existentes ({count})", - "save": "Salvar", - "delete": "Excluir", - "byUser": "pelo usuário {id}", - "active": "ativo", - "hidden": "escondido", - "bannerAlt": "Bandeira de rádio", - "statusActive": "Ativo", - "statusHidden": "Oculto", - "dbError": "Não foi possível carregar os banners (banco de dados indisponível).", - "form": { - "imagePath": "Caminho/URL da imagem", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Título", - "description": "Descrição", - "sortOrder": "Ordem de classificação", - "active": "Ativo" - } - }, - "ranksForm": { - "title": "Classificações de rádio", - "subtitle": "Classificações de DJ/equipe atribuíveis em aplicativos de rádio.", - "dbError": "Não foi possível carregar as classificações (banco de dados indisponível).", - "active": "Ativo", - "addRank": "Adicionar classificação", - "name": "Nome", - "badgeCode": "Código do selo", - "description": "Descrição", - "createRank": "Criar classificação", - "existing": "Classificações existentes ({count})", - "noRanks": "Nenhuma classificação ainda – adicione uma acima.", - "activeLabel": "ativo", - "inactiveLabel": "inativo", - "save": "Salvar", - "deleteRank": "Excluir classificação #{id}" - }, - "historyPage": { - "title": "Histórico de reprodução de rádio", - "subtitle": "Shows de DJs anteriores e tempo de transmissão (radio_history), os mais recentes primeiro. Registro somente leitura de quem estava no ar, quando e quantos ouvintes sintonizaram.", - "dbError": "Não foi possível carregar o histórico do rádio (banco de dados indisponível).", - "showsLogged": "Programas registrados", - "onAirNow": "No ar agora", - "uniqueDjs": "DJs exclusivos", - "peakListeners": "Pico de ouvintes", - "empty": "Nenhum histórico de rádio registrado ainda.", - "showLog": "Mostrar registro ({count})", - "colDj": "DJ", - "colShow": "Mostrar", - "colStarted": "Iniciado", - "colEnded": "Terminou", - "colAirtime": "Tempo de antena", - "colListeners": "Ouvintes", - "colNotes": "Notas", - "onAir": "no ar" - }, - "apiKeysForm": { - "title": "Chaves de API de rádio", - "subtitle": "Chaves de API para integrações de rádio externas (radio_api_keys). As chaves são geradas no lado do servidor e mostradas mascaradas – copie o valor completo do banco de dados quando emitidas pela primeira vez.", - "dbError": "Não foi possível carregar as chaves de API (banco de dados indisponível).", - "totalKeys": "Total de chaves", - "active": "Ativo", - "inactive": "Inativo", - "generateKey": "Gerar chave", - "generateHint": "A chave secreta é gerada automaticamente com aleatoriedade criptográfica — você não a insere.", - "name": "Nome", - "namePlaceholder": "Ponte AzureCast", - "rateLimit": "Limite de taxa (solicitações/min)", - "allowedIps": "IPs permitidos (opcional)", - "allowedIpsPlaceholder": "separados por vírgula, em branco = qualquer", - "generate": "Gerar chave", - "existingKeys": "Chaves existentes ({count})", - "noKeys": "Nenhuma chave de API ainda – gere uma acima.", - "colName": "Nome", - "colKey": "Chave", - "colAllowedIps": "IPs permitidos", - "colRateLimit": "Limite de taxa", - "colLastUsed": "Usado pela última vez", - "colExpires": "Expira", - "colStatus": "Estado", - "colActions": "Ações", - "maskedHint": "Apenas os primeiros 8 caracteres são mostrados", - "any": "qualquer", - "activeLabel": "ativo", - "inactiveLabel": "inativo", - "deactivate": "Desativar", - "activate": "Ativar", - "delete": "Excluir" - }, - "pointsForm": { - "title": "Pontos de ouvinte de rádio", - "subtitle": "Recompense os ouvintes com dinheiro pelo tempo gasto no rádio. As edições são gravadas em website_settings (chaves radio_points_*) e interrompem o cache de configurações de tempo de execução. Booleanos usam 0/1.", - "saved": "Salvo", - "points": "Pontos", - "enabled": "Habilitado", - "disabled": "Desativado", - "perMinute": "Por minuto", - "paidIn": "pago em {currency}", - "maxPerDay": "Máx./dia", - "unlimited": "Ilimitado", - "minListeners": "Mínimo de ouvintes", - "settings": "Configurações", - "pointsEnabled": "Pontos ativados", - "pointsEnabledHint": "Chave mestre para atribuição de pontos de ouvinte.", - "currency": "Moeda", - "currencyHint": "Em qual carteira os pontos são pagos.", - "pointsPerMinute": "Pontos por minuto", - "pointsPerMinuteHint": "Valor concedido por cada minuto completo de audição.", - "maxPerDayHint": "Limite diário por usuário. Use 0 para ilimitado.", - "minListenersHint": "Os pontos só são concedidos quando pelo menos esse número de pessoas está sintonizado.", - "save": "Salvar configurações de pontos" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Lista de reprodução alternativa (radio_auto_dj_playlist) pela qual o rádio alterna quando nenhum DJ ao vivo está transmitindo. Ordenado por ordem de classificação e depois por título.", - "dbError": "Não foi possível carregar a playlist do AutoDJ (banco de dados indisponível).", - "tracks": "Faixas", - "active": "Ativo", - "inactive": "Inativo", - "addTrack": "Adicionar faixa", - "titlePlaceholder": "Título da faixa", - "artist": "Artista", - "album": "Álbum", - "artworkUrl": "URL da arte", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Duração (segundos)", - "durationPlaceholder": "por exemplo 215", - "sortOrder": "Ordem de classificação", - "playlist": "Lista de reprodução ({count})", - "noTracks": "Nenhuma faixa do AutoDJ ainda – adicione uma acima.", - "colOrder": "Pedido", - "colTitle": "Título", - "colArtist": "Artista", - "colAlbum": "Álbum", - "colDuration": "Duração", - "colPlays": "Peças", - "colLastPlayed": "Jogado pela última vez", - "colStatus": "Estado", - "colActions": "Ações", - "activeLabel": "ativo", - "inactiveLabel": "inativo", - "deactivate": "Desativar", - "activate": "Ativar", - "delete": "Excluir", - "trackTitle": "Título" - }, - "moderationPage": { - "title": "Moderação de DJ", - "subtitle": "Revise e remova mensagens de rádio (50 mais recentes).", - "recentShouts": "Gritos recentes ({count})" - } - }, - "commandocentrum": { - "title": "Centro de Comando", - "subtitle": "Diagnóstico, controles RCON e gerenciamento de usuários", - "diagnostics": "Diagnóstico", - "rcon": "RCON", - "userActions": "Ações do usuário", - "diagnosticsTitle": "Diagnóstico do emulador", - "memoryUsage": "Uso de memória", - "uptime": "Tempo de atividade", - "onlineUsers": "Usuários on-line", - "roomsLoaded": "Salas carregadas", - "refresh": "Atualizar", - "rconTitle": "Comandos RCON", - "rconPlaceholder": "Digite o comando RCON…", - "rconSend": "Enviar", - "rconSending": "Enviando…", - "rconResponse": "Resposta", - "userActionsTitle": "Ações do usuário", - "username": "Nome de usuário", - "usernamePlaceholder": "Nome de usuário de destino", - "action": "Ação", - "execute": "Executar", - "actions": { - "disconnect": "Desconectar", - "alert": "Enviar alerta", - "giveCredits": "Dê créditos", - "giveBadge": "Dê crachá", - "givePoints": "Dê pontos", - "ban": "Proibição", - "kick": "Chute" - }, - "messagePlaceholder": "Mensagem (para alertas)…", - "amountPlaceholder": "Quantidade…", - "badgePlaceholder": "Código do selo…" - }, - "emulator": { - "title": "Configuração do emulador", - "subtitle": "Visualize e edite configurações do emulador e textos de localidade", - "settings": "Configurações", - "texts": "Textos", - "search": "Pesquisar", - "searchPlaceholder": "Chaves de pesquisa…", - "noSettings": "Nenhuma configuração encontrada", - "noTexts": "Nenhum texto encontrado", - "edit": "Editar", - "save": "Salvar", - "saving": "Salvando…", - "cancel": "Cancelar", - "colKey": "Chave", - "colValue": "Valor", - "colType": "Tipo", - "colActions": "Ações", - "editDialog": { - "title": "Editar: {key}", - "value": "Valor", - "valuePlaceholder": "Insira o valor…", - "save": "Salvar alterações", - "cancel": "Cancelar" - } - }, - "alerts": { - "title": "Alertas", - "subtitle": "Envie alertas para todo o hotel e visualize alertas recentes", - "sendAlert": "Enviar alerta de hotel", - "recentAlerts": "Alertas recentes ({count})", - "noRecentAlerts": "Nenhum alerta recente", - "form": { - "title": "Título do alerta", - "titlePlaceholder": "por exemplo Manutenção do servidor em 10 minutos", - "message": "Mensagem de alerta", - "messagePlaceholder": "Escreva a mensagem de alerta…", - "type": "Tipo", - "typeHotel": "Alerta para todo o hotel", - "typeStaff": "Somente funcionários", - "urgent": "Urgente", - "send": "Enviar alerta", - "sending": "Enviando…", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Título", - "colSentBy": "Enviado por", - "colType": "Tipo", - "colDate": "Data", - "colActions": "Ações", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Atividades da equipe", - "subtitle": "Trilha de auditoria das ações da equipe no painel de administração", - "noLogs": "Nenhuma atividade da equipe registrada ainda", - "colId": "ID", - "colUser": "Usuário", - "colAction": "Ação", - "colTarget": "Alvo", - "colDescription": "Descrição", - "colIp": "PI", - "colTimestamp": "Carimbo de data e hora", - "filterByUser": "Filtrar por usuário…", - "filterByAction": "Filtrar por ação…", - "clearFilters": "Limpar filtros", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Filtro de palavras", - "subtitle": "Gerencie palavras e frases filtradas no hotel", - "addWord": "Adicionar palavra", - "addWords": "Adicionar palavras", - "noWords": "Ainda não há palavras filtradas", - "confirmDelete": "Remover \"{word}\" do filtro?", - "colId": "ID", - "colWord": "Palavra", - "colAddedBy": "Adicionado por", - "colCreated": "Criado", - "colActions": "Ações", - "form": { - "word": "Palavra", - "wordPlaceholder": "por exemplo palavrão", - "addMore": "Adicione várias palavras (uma por linha)", - "save": "Adicionar ao filtro", - "saving": "Salvando…", - "cancel": "Cancelar" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Modo de manutenção", - "subtitle": "Ativar ou desativar a manutenção em todo o hotel", - "enabled": "O modo de manutenção está ativado", - "disabled": "O modo de manutenção está desativado", - "enable": "Habilitar manutenção", - "disable": "Desativar manutenção", - "message": "Mensagem de manutenção", - "messagePlaceholder": "Voltaremos em breve!", - "staffAccess": "Permitir acesso da equipe durante a manutenção", - "save": "Salvar configurações", - "saving": "Salvando…", - "confirmEnable": "Ativar a manutenção impedirá que todos os usuários que não sejam funcionários acessem o hotel. Continuar?", - "confirmDisable": "Desativar o modo de manutenção e restaurar o acesso para todos os usuários?" - }, - "housekeeping": { - "title": "Permissões de limpeza", - "subtitle": "Configure quais classificações podem acessar quais seções administrativas", - "addPermission": "Adicionar permissão", - "editPermission": "Editar permissão", - "deletePermission": "Excluir permissão", - "noPermissions": "Nenhuma permissão de limpeza configurada", - "confirmDelete": "Excluir esta permissão?", - "colId": "ID", - "colRank": "Classificação", - "colSection": "Seção", - "colActions": "Ações", - "form": { - "rankId": "ID de classificação", - "rankIdPlaceholder": "Classificação mínima", - "section": "Chave de seção", - "sectionPlaceholder": "por exemplo admin.dashboard", - "save": "Salvar permissão", - "saving": "Salvando…", - "cancel": "Cancelar" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset Aplicado!", - "cleared": "All Permissões cleared!", - "invalidRank": "Invalid Classificação", - "testDone": "Test done: {count} Permissões found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Excluir ALL Permissões? This Ação cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Permissão", - "colDescription": "Descrição", - "colMinRank": "Min. Classificação", - "permissionKey": "Chave de permissão", - "minRank": "Min. Classificação", - "description": "Descrição", - "permissions": "Permissões", - "permissionsCount": "{count} Permissões", - "permission": "Permissão", - "highestMinRank": "Highest min. Classificação: {rank}", - "totalMinRank": "Total min. Classificação sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Classificações", - "missingDeps": "{count} Desaparecido dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Desaparecido)", - "rank": "Classificação", - "count": "Count", - "searchPermission": "Pesquisar Permissões…", - "search": "Pesquisar", - "manage": "Manage", - "importSelection": "Importar selection", - "noGroup": "Não group", - "allGroups": "All groups", - "perGroup": "Permissões per group", - "perRank": "Permissões per Classificação", - "rankOverviewHint": "All Permissões grouped by the Classificação they are assigned to.", - "tabOverview": "Visão geral", - "tabManage": "Manage", - "tabImport": "Importar / Export", - "tabRanks": "Classificação Visão geral", - "tabPresets": "Predefinições", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Importar Permissões", - "importHint": "Paste a JSON array of Permissão objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Importar", - "exportTitle": "Export Permissões", - "exportHint": "Export all Permissões as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Permissão Predefinições", - "presetsHint": "Aplicar a predefined Definir of Permissões for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Moderação tools: Usuário lookup, Proibições, CFH handling, chat Registros.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Usuários, Quartos, news, Configurações, Loja, events, Rádio & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Permissão management and asset Importar.", - "applyPreset": "Aplicar preset", - "clearAll": "Clear all Permissões", - "testTitle": "Test Classificação access", - "testHint": "Enter a Classificação number to see which Permissões would be granted.", - "test": "Test", - "auditTitle": "Permissão audit log", - "auditHint": "All changes to Limpeza Permissões are logged.", - "auditLogsAt": "Audit Registros are available on the Audit log page.", - "viewAuditLogs": "Ver audit Registros", - "importedWithErrors": "Imported {count} Permissões with {errors} errors", - "confirmClearAllDesc": "This will Remover every Permissão entry from the Banco de dados. Are you sure?", - "confirmDeletePermission": "Excluir this Permissão permanently?", - "confirmBulkDelete": "Excluir {count} selected Permissões?", - "deleteSelected": "Excluir {count} selected", - "cancel": "Cancelar", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Usuário", - "auditAction": "Ação", - "auditTarget": "Alvo", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Quartos", - "subtitle": "Pesquise e gerencie quartos de hotel", - "search": "Pesquisar", - "searchPlaceholder": "Pesquise por nome, proprietário ou ID…", - "searchResults": "{count, plural, one {# room} other {# rooms}} encontrado para \"{query}\"", - "noResults": "Nenhum quarto encontrado", - "colId": "ID", - "colName": "Nome", - "colOwner": "Proprietário", - "colUsers": "Usuários", - "colState": "Estado", - "colCategory": "Categoria", - "colCreated": "Criado", - "colActions": "Ações", - "stateOpen": "Abrir", - "stateClosed": "Fechado", - "stateLocked": "Bloqueado", - "stateInvisible": "Invisível", - "detail": { - "title": "Sala: {name}", - "subtitle": "Propriedade de {owner}", - "overview": "Visão geral", - "actions": "Ações", - "description": "Descrição", - "noDescription": "Sem descrição", - "owner": "Proprietário", - "users": "Usuários on-line", - "maxUsers": "Máximo de usuários", - "category": "Categoria", - "state": "Estado", - "tags": "Etiquetas", - "noTags": "Sem tags", - "created": "Criado", - "deleteRoom": "Excluir sala", - "confirmDelete": "Excluir sala \"{name}\"? Isto não pode ser desfeito.", - "enterRoom": "Entre na sala", - "changeOwner": "Alterar proprietário", - "changeOwnerPlaceholder": "Nome de usuário do novo proprietário" - } - }, - "emailTemplates": { - "title": "Modelos de e-mail", - "subtitle": "Gerenciar modelos de email transacional", - "newTemplate": "+ Novo modelo", - "edit": "Editar", - "delete": "Excluir", - "noTemplates": "Ainda não há modelos de e-mail", - "confirmDelete": "Excluir modelo \"{name}\"?", - "colId": "ID", - "colName": "Nome", - "colSubject": "Assunto", - "colKey": "Chave", - "colUpdated": "Atualizado", - "colActions": "Ações", - "form": { - "name": "Nome", - "namePlaceholder": "por exemplo E-mail de boas-vindas", - "key": "Chave", - "keyPlaceholder": "por exemplo bem-vindo_e-mail", - "subject": "Assunto", - "subjectPlaceholder": "Linha de assunto do e-mail", - "body": "Corpo (HTML)", - "bodyPlaceholder": "

Prezado {username},

", - "variables": "Variáveis disponíveis", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Salvar modelo", - "saving": "Salvando…", - "cancel": "Cancelar" - } - }, - "theme": { - "title": "Tema", - "subtitle": "Personalize a aparência do CMS", - "presets": "Predefinições", - "colours": "Cores", - "css": "CSS", - "presetsTitle": "Predefinições de tema", - "presetsSubtitle": "Escolha um esquema de cores pré-construído", - "applyPreset": "Aplicar", - "presetApplied": "Predefinição aplicada: {preset}", - "customiseTitle": "Cores personalizadas", - "primary": "Primário", - "secondary": "Secundário", - "accent": "Sotaque", - "background": "Plano de fundo", - "surface": "Superfície", - "text": "Texto", - "saveColours": "Salvar cores", - "savingColours": "Salvando…", - "cssTitle": "CSS personalizado", - "cssSubtitle": "Adicione CSS personalizado para substituir estilos de tema", - "cssPlaceholder": "/* Seu CSS personalizado aqui */", - "saveCss": "Salvar CSS", - "savingCss": "Salvando…", - "reset": "Redefinir para os padrões", - "confirmReset": "Redefinir o tema para os valores padrão?" - }, - "media": { - "title": "Biblioteca de mídia", - "subtitle": "Carregar e gerenciar arquivos de mídia", - "upload": "Carregar", - "uploadTitle": "Carregar um arquivo", - "uploadSubtitle": "Arraste e solte ou clique para fazer upload", - "uploadButton": "Escolha o arquivo", - "uploading": "Fazendo upload…", - "noFiles": "Ainda não há arquivos de mídia", - "delete": "Excluir", - "confirmDelete": "Excluir este arquivo permanentemente?", - "search": "Pesquisar", - "searchPlaceholder": "Pesquise por nome de arquivo…", - "colPreview": "Visualização", - "colName": "Nome", - "colSize": "Tamanho", - "colType": "Tipo", - "colUploaded": "Enviado", - "colActions": "Ações", - "copyUrl": "Copiar URL", - "urlCopied": "URL copiado para a área de transferência" - }, - "favicon": { - "title": "Favicon", - "subtitle": "Carregar e gerenciar o favicon do site", - "current": "Favicon atual", - "uploadLabel": "Carregar favicon", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO ou SVG. Máximo de 2 MB.", - "upload": "Carregar", - "uploading": "Fazendo upload…", - "delete": "Remover", - "deleting": "Removendo…", - "saved": "Favicon salvo com sucesso!", - "deleted": "Favicon removido com sucesso!", - "error": "Algo deu errado", - "confirmDelete": "Remover o favicon? O site não exibirá mais um favicon personalizado.", - "generator": { - "title": "Gerar favicon", - "text": "Texto", - "bgColor": "Cor de fundo", - "textColor": "Cor do texto", - "rounded": "Cantos arredondados", - "save": "Salvar como favicon" - }, - "cancel": "Cancel" - }, - "settings": { - "title": "Configurações de CMS", - "subtitle": "Gerenciar a configuração do CMS de chave/valor", - "addSetting": "Adicionar configuração", - "edit": "Editar", - "delete": "Excluir", - "noSettings": "Nenhuma configuração encontrada", - "confirmDelete": "Excluir configuração \"{key}\"?", - "colKey": "Chave", - "colValue": "Valor", - "colUpdated": "Atualizado", - "colActions": "Ações", - "form": { - "key": "Chave", - "keyPlaceholder": "por exemplo nome_do_hotel", - "value": "Valor", - "valuePlaceholder": "Valor de configuração", - "save": "Salvar configuração", - "saving": "Salvando…", - "cancel": "Cancelar" - }, - "keysInDatabase": "{count} keys in database", - "managedInForm": "{count} managed in form", - "documented": "{count} documented", - "saved": "Settings saved.", - "saveFailed": "Could not save settings.", - "saveSettings": "Save settings", - "viewOnly": "You can view settings but need edit permission to change them." - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Início", - "reload": "Recarregar", - "fullscreen": "Tela cheia", - "logout": "Sair", - "onlineUsers": "Usuários online", - "emulatorOnline": "Emulador online", - "emulatorOffline": "Emulador offline", - "dragToMove": "Arraste para mover", - "hide": "Ocultar barra", - "fullscreenExit": "Sair da tela cheia", - "show": "Mostrar barra", - "emulatorUnknown": "Estado do emulador desconhecido" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Diagnóstico dos ficheiros", - "preliminary": "Verificação preliminar dos endereços; o conteúdo será validado na importação.", - "http": "HTTP {status}", - "network": "Falha na ligação", - "timeout": "A fonte não respondeu a tempo", - "invalidResponse": "A fonte devolveu uma página em vez de um ficheiro", - "available": "Ficheiro encontrado; aguarda validação", - "recover": "Anexar original e retomar", - "recoveryHint": "Escolha {file} (até 50 MB). A identidade é verificada. Os itens com falha são repetidos; as importações concluídas são preservadas.", - "attach": "Escolher o ficheiro .nitro original", - "working": "A validar ou retomar...", - "attached": "Original correspondente anexado", - "resume": "Retomar importações com falha usando este ficheiro", - "invalidFile": "Escolha um .nitro original correspondente de até 50 MB e tente novamente.", - "resumeError": "Atualize o histórico e use a última tentativa; verifique o ficheiro e tente novamente.", - "mismatchedFile": "Este ficheiro pertence a outro móvel.", - "alreadyStarted": "A recuperação já começou. Atualize o histórico e use a última tentativa.", - "notEligible": "Este item não permite recuperação por anexo." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "Uma cópia de recuperação será mantida neste navegador durante 7 dias.", + "saved": "Cópia de recuperação guardada neste navegador durante 7 dias.", + "unavailable": "A recuperação no navegador não está disponível. Mantém esta página aberta até que as alterações sejam guardadas.", + "found": "Existe uma cópia de recuperação neste navegador, guardada em", + "restore": "Restaurar cópia do navegador", + "discard": "Eliminar cópia do navegador", + "confirmRestore": "Substituir o formulário atual pela cópia de recuperação do navegador? Verifica o conteúdo antes de guardar.", + "confirmDiscard": "Eliminar esta cópia de recuperação do navegador? O formulário atual permanecerá inalterado." + }, + "nav": { + "home": "Página inicial", + "community": "Comunidade", + "articles": "Artigos", + "photos": "Fotos", + "staff": "Pessoal", + "rankings": "Classificações", + "guilds": "Guildas", + "leaderboards": "Tabelas de classificação", + "rareValues": "Valores raros", + "shop": "Loja", + "market": "Mercado", + "assistance": "Assistência", + "helpCenter": "Central de ajuda", + "myTickets": "Meus ingressos", + "badges": "Emblemas", + "radio": "Rádio", + "friends": "Amigos", + "messages": "Mensagens", + "admin": "Administrador", + "openMenu": "Abrir menu", + "closeMenu": "Fechar menu", + "drawBadge": "Desenhar distintivo", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} on-line", + "nitroClient": "Cliente Nitro", + "tagline": "Um mundo virtual online onde você pode criar seu próprio avatar, fazer amigos, conversar, criar salas e muito mais!", + "login": "Entrar", + "or": "Ou", + "createAccount": "Crie uma conta" + }, + "footer": { + "copyright": "© {year} - {hotel} é um projeto educacional sem fins lucrativos" + }, + "pages": { + "staff": { + "title": "Pessoal", + "subtitle": "A equipe por trás do hotel", + "ranksTitle": "Classificações", + "ranksSubtitle": "O que cada parte da equipe cuida", + "membersTitle": "Membros da equipe", + "membersEmptySubtitle": "Ninguém para mostrar agora", + "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", + "emptyState": "Nenhum membro da equipe para mostrar.", + "colUsername": "Nome de usuário", + "colRank": "Classificação", + "colMotto": "Lema", + "viewProfile": "View profile", + "noMotto": "No motto set", + "loadError": "Unable to load staff members. Please try again shortly.", + "retry": "Try again" + }, + "leaderboard": { + "title": "Tabela de classificação", + "subtitle": "Os 20 melhores jogadores por {currency}", + "tab_credits": "Créditos", + "tab_diamonds": "Diamantes", + "tab_duckets": "Duckets", + "tab_achievement": "Conquistas", + "tab_respects": "Respeitos", + "tab_onlinetime": "Tempo on-line", + "emptyState": "Nenhuma classificação para mostrar ainda.", + "colAvatar": "avatar", + "colPlayer": "Jogador" + }, + "friends": { + "title": "Amigos", + "emptySubtitle": "Você ainda não adicionou amigos", + "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", + "emptyState": "Adicione amigos no hotel e eles aparecerão aqui.", + "noMotto": "Sem lema", + "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": "Mensagens", + "subtitle": "Pedidos de amizade e mensagens off-line esperando por você", + "requestsTitle": "Pedidos de amizade", + "requestsEmptySubtitle": "Ninguém pediu para ser seu amigo ainda", + "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", + "requestsEmptyState": "Nenhum pedido de amizade pendente.", + "wantsToBeFriend": "quer ser seu amigo.", + "accept": "Aceitar", + "offlineTitle": "Mensagens off-line", + "offlineEmptySubtitle": "Sua caixa de entrada está vazia", + "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", + "offlineEmptyState": "Você não tem mensagens off-line.", + "unknownUser": "Usuário #{id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Sem lema", + "statRank": "Classificação", + "statCredits": "Créditos", + "statRegistered": "Registrado", + "badgesTitle": "Emblemas", + "badgesEmpty": "Ainda não há emblemas.", + "photosTitle": "Fotos", + "photosEmpty": "Ainda não há fotos.", + "guestbookTitle": "Livro de visitas", + "guestbookSubtitle": "Mensagens no mural de {username}", + "leaveMessage": "Deixe uma mensagem", + "guestbookPlaceholder": "Escreva algo no livro de visitas de {username}…", + "post": "Postar", + "loginToPost": "Faça login para deixar uma mensagem no livro de visitas.", + "guestbookEmpty": "Ainda não há entradas no livro de visitas.", + "unknownUser": "Usuário #{id}", + "statDuckets": "Duckets", + "statDiamonds": "Diamantes", + "walletTitle": "Carteira", + "friendsTitle": "Amigos", + "friendsSubtitle": "Pessoas no hotel com quem eles saem", + "friendsEmpty": "Não há amigos para mostrar.", + "roomsTitle": "Quartos", + "roomsSubtitle": "Quartos que eles possuem", + "roomsEmpty": "Não há quartos para mostrar.", + "roomUntitled": "Sala sem título", + "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": "Classificações", + "subtitle": "Os 12 melhores jogadores classificados por créditos", + "emptyState": "Nenhum jogador para classificar ainda." + }, + "home": { + "welcome": "Bem-vindo ao {hotelName}", + "welcomeSubtitle": "Seu hotel retrô, agora com tecnologia Next.js", + "welcomeBody": "Saia, colete mobis e encontre amigos.", + "enterHotel": "Digite {hotelName}", + "onlineFriends": "Amigos on-line", + "noFriendsOnline": "Nenhum amigo on-line", + "register": "INSCREVA-SE AGORA", + "joinNow": "Junte-se ao {hotelName} hoje mesmo!", + "recentUsers": "Usuários recentes", + "recentPhotos": "Fotos recentes", + "latestNews": "Últimas notícias", + "newsTitle": "Últimas notícias", + "newsSubtitle": "Fresco do hotel", + "allNews": "Todas as notícias →", + "allUsers": "Comunidade →", + "noArticles": "Nenhum artigo ainda.", + "noPhotos": "Ainda não há fotos.", + "noUsers": "Nenhum usuário on-line", + "latestArticle": "Artigo mais recente", + "latestUsers": "Novos cidadãos ({count} total)", + "statsOnline": "Online", + "statsCitizens": "Cidadãos", + "statsRooms": "Salas", + "statsArticles": "Artigos", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Crie seu visual único", + "featuresFurniture": "Móveis", + "featuresFurnitureDesc": "Decore salas com itens", + "featuresCommunity": "Comunidade", + "featuresCommunityDesc": "Faça amigos e converse", + "featuresGames": "Jogos", + "featuresGamesDesc": "Compita e divirta-se", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Notícias", + "subtitle": "Os últimos anúncios, eventos e atualizações do hotel", + "noArticles": "Nenhum artigo ainda.", + "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": "← Notícias", + "reactionsTitle": "Reações", + "reactionsSubtitle": "Diga-nos o que você pensa", + "reaction": { + "like": "Gosto", + "love": "Amor", + "wow": "Uau" + }, + "removeReaction": "Clique para remover sua reação", + "reactWith": "Reaja com {reaction}", + "noReactions": "Nenhuma reação ainda.", + "logIn": "Faça login", + "toReact": "para reagir.", + "commentsTitle": "Comentários", + "commentsSubtitle": "Participe da conversa", + "commentsCount": "{count} até agora", + "noComments": "Nenhum comentário ainda. Seja o primeiro a comentar.", + "userNumber": "Usuário #{id}", + "addComment": "Adicione um comentário", + "commentPlaceholder": "Escreva seu comentário…", + "postComment": "Postar comentário", + "toComment": "para deixar um comentário.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Fotos", + "subtitle": "As últimas fotos tiradas no hotel", + "noPhotos": "Ainda não há fotos.", + "photoAlt": "Foto do usuário #{id}", + "byUser": "pelo usuário #{id}" + }, + "badges": { + "title": "Emblemas", + "subtitle": "Os emblemas que você pode ganhar e exibir no hotel", + "noBadges": "Nenhum emblema disponível ainda." + }, + "community": { + "title": "Comunidade", + "subtitle": "Tudo o que acontece ao redor do hotel em um só lugar", + "open": "Abrir →", + "links": { + "rankings": { + "title": "Classificações", + "text": "Veja os jogadores mais ricos do hotel, classificados por créditos." + }, + "staff": { + "title": "Pessoal", + "text": "Conheça a equipe que mantém o hotel funcionando todos os dias." + }, + "news": { + "title": "Notícias", + "text": "Os últimos anúncios, eventos e atualizações." + }, + "photos": { + "title": "Fotos", + "text": "Instantâneos compartilhados pela comunidade de todo o hotel." + }, + "guilds": { + "title": "Guildas", + "text": "Navegue pelos grupos que os jogadores criaram e dos quais participaram." + }, + "leaderboards": { + "title": "Tabelas de classificação", + "text": "Quem está no topo nesta temporada nas estatísticas do hotel." + } + } + }, + "guilds": { + "title": "Guildas", + "subtitle": "Navegue pelos grupos que os jogadores criaram e dos quais participaram", + "empty": "Nenhuma guilda ainda.", + "unnamedGuild": "Guilda sem nome", + "noDescription": "Sem descrição" + }, + "guild": { + "allGuilds": "← Todas as guildas", + "unnamedGuild": "Guilda sem nome", + "noDescription": "Sem descrição", + "memberSingular": "Membro", + "memberPlural": "Membros", + "founded": "Fundado", + "forumLink": "Fórum →", + "discussion": "Discussão", + "membersTitle": "Membros", + "memberLowerSingular": "membro", + "memberLowerPlural": "membros", + "noMembers": "Nenhum membro.", + "owner": "Proprietário", + "noMotto": "Sem lema" + }, + "guildForum": { + "backToGuild": "← Voltar para guilda", + "unnamedGuild": "Guilda sem nome", + "forumTitle": "{guild} — Fórum", + "threadSingular": "tópico", + "threadPlural": "tópicos", + "newThread": "+ Novo tópico", + "empty": "Ainda não há tópicos neste fórum.", + "colSubject": "Assunto", + "colAuthor": "Autor", + "colPosts": "Postagens", + "colDate": "Data", + "noSubject": "(sem assunto)", + "pinned": "Fixado", + "locked": "Bloqueado", + "userNumber": "Usuário #{id}", + "unknown": "Desconhecido", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Voltar ao fórum", + "unnamedGuild": "Guilda sem nome", + "title": "Novo tópico", + "subtitle": "no fórum {guild}", + "subjectLabel": "Assunto", + "subjectPlaceholder": "Assunto do tópico", + "messageLabel": "Mensagem", + "messagePlaceholder": "Escreva sua postagem de abertura…", + "postThread": "Postar tópico", + "cancel": "Cancelar", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Loja", + "subtitle": "Recarregue sua conta e ganhe pacotes, moedas e emblemas exclusivos.", + "browsingCategory": "Navegando nos pacotes {category}.", + "all": "Todos", + "allPackages": "Todos os pacotes", + "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", + "empty": "Nenhum pacote disponível no momento.", + "buy": "Comprar", + "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": "Recarregue com PayPal", + "subtitle": "Pague com segurança com PayPal e seus créditos serão adicionados no momento em que o pagamento for confirmado.", + "cancelled": "A finalização da compra foi cancelada – nenhum pagamento foi realizado.", + "chooseAmount": "Escolha um valor", + "notConfiguredPre": "O PayPal ainda não está configurado. Um administrador precisa definir", + "notConfiguredAnd": "e", + "notConfiguredOptional": "(e opcionalmente", + "notConfiguredPost": "para sandbox vs. ao vivo).", + "balanceTitle": "Seu saldo", + "signedInAs": "Conectado como {username}", + "credits": "Créditos", + "creditsPerUnit": "Créditos por 1,00 {currency}", + "rateLine": "Você recebe {amount} créditos por 1,00 {currency}. Os créditos aparecerão no jogo na próxima vez que você fizer login." + }, + "marketplace": { + "title": "Mercado", + "subtitle": "Procure móveis e itens raros listados pelos jogadores. As listagens são colocadas no jogo e atualizadas ao vivo – vá até o hotel para fazer uma oferta.", + "activeOffers": "Ofertas ativas", + "sellers": "Vendedores", + "totalValue": "Valor total", + "activeListings": "Listagens ativas", + "mostRecentFirst": "Mais recentemente listado em primeiro lugar", + "empty": "Não há ofertas de mercado ativas no momento. Volte mais tarde.", + "colOffer": "Oferta", + "colItem": "Artigo", + "colSeller": "Vendedor", + "colPrice": "Preço", + "colListed": "Listado", + "itemLabel": "Item #{id}", + "userLabel": "Usuário #{id}", + "justNow": "agora mesmo", + "minutesAgo": "{count}m atrás", + "hoursAgo": "{count}h atrás", + "daysAgo": "{count} dias atrás" + }, + "rares": { + "title": "Valores raros", + "subtitle": "Obtenha uma visão geral de todas as raridades do hotel, agrupadas por categoria.", + "empty": "Atualmente não temos itens raros listados aqui.", + "rareCount": "{count, plural, one {# rare} other {# rares}}", + "viewRares": "Ver raridades →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", + "allRares": "← Todas as raridades", + "empty": "Nenhum raro listado nesta categoria ainda.", + "colRare": "Raro", + "colCredits": "Créditos", + "colCurrency": "Moeda", + "creditsValue": "{value} créditos", + "duckets": "Duckets", + "diamonds": "Diamantes", + "credits": "Créditos" + }, + "redeem": { + "title": "Resgatar um voucher", + "subtitle": "Tem um código de voucher? Insira-o abaixo para adicionar a recompensa à sua conta.", + "enterCode": "Digite seu código", + "oncePerAccount": "Cada voucher só pode ser resgatado uma vez por conta.", + "balanceTitle": "Seu saldo", + "signedInAs": "Conectado como {username}", + "credits": "Créditos", + "instantCredit": "As recompensas resgatadas são creditadas instantaneamente e aparecem no jogo na próxima vez que você fizer login." + }, + "help": { + "title": "Central de Ajuda", + "subtitle": "Encontre guias, tópicos de suporte e regras do hotel – tudo que você precisa para obter ajuda.", + "myTickets": "Meus ingressos →", + "topicsTitle": "Tópicos de suporte", + "topicsSubtitle": "Procure guias e respostas para perguntas comuns", + "topicsEmpty": "Ainda não há tópicos de ajuda.", + "rulesTitle": "Regras do hotel", + "rulesSubtitle": "Por favor, leia-os antes de sair no hotel", + "rulesEmpty": "Nenhuma regra publicada ainda.", + "categoryEmpty": "Não há regras nesta categoria." + }, + "helpCategory": { + "back": "← Central de Ajuda", + "topicSubtitle": "Tópico da Central de Ajuda", + "moreTitle": "Mais tópicos de ajuda", + "moreSubtitle": "Ir para outro tópico de suporte" + }, + "helpTickets": { + "title": "Bilhetes de ajuda", + "subtitle": "Envie um ticket para a equipe e acompanhe suas solicitações abertas.", + "statTotal": "Total de ingressos", + "statOpen": "Abrir", + "statClosed": "Fechado", + "newTitle": "Novo ingresso", + "newSubtitle": "Descreva seu problema e a equipe fará o acompanhamento", + "subjectPlaceholder": "Assunto", + "contentPlaceholder": "Descreva seu problema…", + "submit": "Enviar tíquete", + "listTitle": "Seus ingressos", + "listSubtitle": "Cada solicitação que você enviou à equipe", + "listEmpty": "Você ainda não tem ingressos.", + "colId": "ID", + "colSubject": "Assunto", + "colStatus": "Estado", + "colCreated": "Criado", + "statusOpen": "Abrir", + "statusClosed": "Fechado", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "Inscreva-se para funcionários de {hotel}", + "subtitle": "Abrimos inscrições de funcionários de vez em quando. Se você se deparar com uma posição na qual acha que se encaixaria perfeitamente, não hesite em se candidatar.", + "noPositionsTitle": "Nenhuma vaga aberta", + "noPositionsBody": "No momento não há vagas abertas. Por favor, volte mais tarde para verificar se temos vagas até lá. Obrigado pelo seu interesse.", + "noDeadline": "Sem prazo definido", + "deadline": "Prazo de inscrição: {date}", + "alreadyApplied": "Você já se inscreveu para {rank}", + "aboutYou": "Sobre você", + "aboutPlaceholder": "Diga-nos por que você seria um ótimo {rank}…", + "applyFor": "Inscreva-se para {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": "Inscreva-se na equipe do {hotel}", + "subtitle": "Abrimos inscrições de equipe periodicamente. Se você encontrar uma equipe que se encaixe, não hesite em se inscrever!", + "noPositionsTitle": "Nenhuma posição de equipe aberta", + "noPositionsBody": "No momento não há vagas de equipe abertas. Volte mais tarde para verificar novas vagas. Obrigado!", + "pending": "Sua inscrição está pendente", + "aboutYou": "Sobre você", + "aboutPlaceholder": "Conte-nos por que você seria uma ótima opção para {rank}…", + "applyFor": "Inscreva-se para {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": "Rádio", + "subtitle": "Sintonize a rádio do hotel: DJs ao vivo, pedidos e mensagens.", + "nowPlaying": "Agora jogando", + "nothingPlaying": "Nada tocando agora.", + "onAir": "No ar: {dj}", + "noDj": "Nenhum DJ no ar.", + "audioUnsupported": "Seu navegador não suporta o elemento áudio.", + "streamOffline": "A transmissão está offline no momento.", + "exploreTitle": "Explorar o rádio", + "exploreSubtitle": "Agenda, gritos, pedidos e muito mais", + "linkSchedule": "Cronograma", + "linkScheduleText": "Nossa programação semanal de DJs e shows.", + "linkShouts": "Gritos", + "linkShoutsText": "Gritos e pedidos da comunidade.", + "linkRequests": "Solicitações", + "linkRequestsText": "Peça ao DJ para tocar sua faixa favorita.", + "linkApply": "Candidate-se como DJ", + "linkApplyText": "Junte-se à equipe e vá para as ondas do rádio.", + "linkLeaderboard": "Tabela de classificação", + "linkLeaderboardText": "Principais ouvintes classificados por pontos ganhos.", + "todayTitle": "Agenda de hoje", + "todayTitleWithDay": "Programação de hoje · {day}", + "todaySubtitle": "O que está nas ondas hoje", + "fullWeek": "Semana inteira →", + "noShowsToday": "Não há shows agendados para hoje.", + "colTime": "Hora", + "colShow": "Mostrar", + "colDj": "DJ", + "untitledShow": "Programa sem título", + "userNumber": "Usuário #{id}" + }, + "radioSchedule": { + "title": "Programação de rádio", + "subtitle": "Nossa programação semanal de DJs e shows", + "empty": "Ainda não há shows agendados.", + "colDay": "Dia", + "colTime": "Hora", + "colDj": "DJ", + "colShow": "Mostrar", + "noShows": "Não comparecimento" + }, + "radioShouts": { + "title": "Gritos de rádio", + "subtitle": "Gritos e pedidos da comunidade", + "postTitle": "Poste um grito", + "postSubtitle": "Envie uma mensagem para o DJ no ar", + "messageLabel": "Sua mensagem", + "messagePlaceholder": "Mande um grito para o DJ…", + "shoutButton": "Gritar", + "loginToPost": "Faça login para postar uma mensagem.", + "latestTitle": "Últimos gritos", + "latestSubtitle": "As mensagens mais recentes dos ouvintes", + "empty": "Nenhum grito ainda. Seja o primeiro!", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Concursos de Rádio", + "subtitle": "Sintonize e participe de nossos últimos concursos no ar", + "empty": "Ainda não há concursos.", + "contestLabel": "Concurso #{id}", + "dateUnknown": "Data desconhecida" + }, + "radioGiveaways": { + "title": "Brindes de rádio", + "subtitle": "Ouça sua chance de ganhar em nossos brindes de rádio", + "empty": "Ainda não há brindes.", + "giveawayLabel": "Sorteio #{id}", + "dateUnknown": "Data desconhecida" + }, + "radioLeaderboard": { + "title": "Tabela de classificação de ouvintes de rádio", + "subtitle": "Os 50 melhores ouvintes por pontos ganhos sintonizando rádio", + "empty": "Nenhum ponto de ouvinte para mostrar ainda.", + "colRank": "Classificação", + "colAvatar": "avatar", + "colListener": "Ouvinte", + "colPoints": "Pontos" + }, + "radioRequests": { + "formTitle": "Envie uma solicitação", + "formSubtitle": "Peça ao DJ para tocar sua faixa favorita", + "songLabel": "Canção", + "songPlaceholder": "Título da música", + "artistLabel": "Artista", + "artistPlaceholder": "Nome do artista (opcional)", + "submitButton": "Enviar solicitação", + "loginToRequest": "Faça login para enviar uma solicitação.", + "latestTitle": "Solicitações recentes", + "latestSubtitle": "As músicas solicitadas mais recentemente", + "empty": "Ainda não há solicitações.", + "colSong": "Canção", + "colArtist": "Artista", + "colRequester": "Solicitante", + "colDate": "Data", + "colStatus": "Estado", + "statusPending": "Pendente", + "statusApproved": "Aprovado", + "statusPlayed": "Jogado", + "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": "Inscreva-se para ser DJ de rádio", + "subtitle": "Conte-nos sobre você e por que você seria uma ótima opção para as ondas de rádio", + "latestTitle": "Seu aplicativo mais recente", + "statusLabel": "Estado:", + "submittedOn": "· enviado em {date}", + "submitAgain": "Você pode enviar novamente abaixo se seus dados foram alterados.", + "formTitle": "Formulário de inscrição", + "formSubtitle": "Todos os campos marcados como obrigatórios devem ser preenchidos", + "realNameLabel": "Nome verdadeiro", + "realNamePlaceholder": "Seu nome completo", + "ageLabel": "Idade", + "availabilityLabel": "Disponibilidade", + "availabilityPlaceholder": "Quais dias e horários você pode transmitir?", + "musicStyleLabel": "Estilo musical", + "musicStylePlaceholder": "por exemplo House, Pop, Hip-Hop", + "experienceLabel": "Experiência", + "optional": "(opcional)", + "experiencePlaceholder": "Alguma experiência anterior de DJ ou hospedagem?", + "motivationLabel": "Motivação", + "motivationPlaceholder": "Por que você quer se juntar à equipe de rádio?", + "submitButton": "Enviar inscrição", + "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": "Configurações da conta", + "accountSettingsSubtitle": "Gerencie seu perfil, segurança e contas conectadas", + "publicProfile": "Seu perfil público", + "noMotto": "Sem lema", + "noEmail": "Nenhum e-mail cadastrado", + "changeMotto": "Mudar lema", + "changeMottoSubtitle": "Atualizações instantâneas no jogo se você estiver online", + "mottoPlaceholder": "Seu lema", + "saveMotto": "Salvar lema", + "securityTitle": "Segurança", + "securitySubtitle": "Autenticação de dois fatores", + "securityDescription": "Adicione uma segunda camada de proteção à sua conta.", + "twoFactorLink": "Autenticação de dois fatores" + }, + "settings2fa": { + "backToSettings": "← Configurações", + "title": "Autenticação de dois fatores", + "subtitle": "Adicione uma segunda camada de segurança com um aplicativo autenticador", + "nowEnabled": "2FA agora está habilitado. 🔒", + "disabledNotice": "2FA foi desativado.", + "badCode": "Esse código não era válido. Tente novamente.", + "noAppKeyPrefix": "2FA está indisponível até", + "noAppKeyMiddle": "está configurado (o mesmo Laravel", + "noAppKeySuffix": "conforme a instalação do AtomCMS, para que os segredos existentes permaneçam legíveis).", + "isEnabled": "2FA está ativado", + "onYourAccount": "na sua conta.", + "disable": "Desativar 2FA", + "scanOrEnter": "Digitalize ou insira esta chave", + "scanInstructions": "Adicione-o ao Google Authenticator/Authy e insira o código de 6 dígitos para confirmar.", + "manualKey": "Chave manual:", + "codePlaceholder": "Código de 6 dígitos", + "confirm": "Confirmar", + "enableIntro": "Adicione uma segunda camada de segurança com um aplicativo autenticador.", + "enable": "Habilitar 2FA", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Contas conectadas", + "subtitle": "Vincule uma conta social para poder fazer login com um clique", + "connected": "Conectado", + "unavailable": "Indisponível", + "login": { + "title": "Faça login", + "subtitle": "Bem-vindo de volta – faça login para entrar no hotel.", + "subtitle2fa": "Digite o código de 6 dígitos do seu autenticador.", + "usernamePlaceholder": "Nome de usuário", + "passwordPlaceholder": "Senha", + "codePlaceholder": "Código 2FA", + "pleaseWait": "Por favor, espere…", + "verify": "Verifique", + "signIn": "Faça login", + "or": "ou", + "noAccount": "Sem conta?", + "createOne": "Crie um", + "forgotPassword": "Esqueceu a senha?", + "errorInvalidCredentials": "Nome de usuário ou senha inválidos", + "errorInvalid2fa": "Código 2FA inválido", + "welcomeBack": "Bem-vindo de volta", + "welcomeBackSub": "Entre para continuar em {hotelName}", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Criar conta", + "subtitle": "Junte-se ao hotel – leva apenas um momento.", + "username": "Nome de usuário", + "email": "E-mail", + "password": "Senha", + "confirmPassword": "Repetir senha", + "usernamePlaceholder": "Nome de usuário", + "emailPlaceholder": "E-mail", + "passwordPlaceholder": "Senha (mín. 6 caracteres)", + "confirmPasswordPlaceholder": "Repetir senha", + "selectOutfit": "Selecione sua roupa", + "termsAccept": "Tenho mais de 18 anos e aceito os termos e regras do {hotel}.", + "createAccount": "Criar conta", + "creatingAccount": "Criando conta...", + "redirecting": "A redirecionar para a sua conta...", + "alreadyHaveAccount": "Já tem uma conta? Conecte-se!", + "register": "Cadastre-se", + "termsError": "Você deve aceitar os termos e regras para se registrar.", + "usernameError": "O nome de usuário é obrigatório.", + "emailError": "E-mail válido é obrigatório.", + "passwordError": "A senha deve ter pelo menos 6 caracteres.", + "confirmPasswordError": "As senhas não coincidem.", + "termsRequired": "Você deve aceitar os termos e regras.", + "usernameRequired": "O nome de usuário é obrigatório.", + "emailRequired": "O e-mail é obrigatório.", + "passwordRequired": "A senha é obrigatória.", + "passwordsDontMatch": "As senhas não coincidem.", + "alreadyHaveAccountPre": "Já tem uma conta?", + "alreadyHaveAccountLink": "Entrar", + "whoIsOnline": "Quem está online", + "usersOnline": "{count} online", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Redefinir senha", + "subtitle": "Enviaremos a você por e-mail um link seguro para definir uma nova senha.", + "sentNotice": "Se esse e-mail estiver registrado, um link de redefinição foi enviado. Verifique sua caixa de entrada.", + "emailPlaceholder": "Seu e-mail", + "sendResetLink": "Enviar link de redefinição", + "backToLogin": "Voltar ao login", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Defina uma nova senha", + "subtitle": "Escolha uma senha forte que você não usa em outro lugar.", + "passwordPlaceholder": "Nova senha (mínimo 6 caracteres)", + "resetPassword": "Redefinir senha", + "backToLogin": "Voltar ao login" + }, + "verify": { + "verifiedTitle": "Você está pronto", + "verifiedSubtitle": "E-mail verificado", + "verifiedBody": "Seu endereço de e-mail foi verificado. Agora você pode fazer login e jogar.", + "goToLogin": "Ir para login", + "alreadyTitle": "Já verificado", + "alreadySubtitle": "Nada mais para fazer", + "alreadyBody": "Este endereço de e-mail já foi confirmado.", + "unavailableTitle": "Tente novamente em breve", + "unavailableSubtitle": "Servidor inacessível", + "unavailableBody": "Não foi possível acessar o servidor para verificar seu e-mail. Por favor, tente acessar o link novamente em alguns instantes.", + "invalidTitle": "Verificação de e-mail", + "invalidSubtitle": "Link inválido ou expirado", + "invalidBody": "Este link de verificação não é válido. Certifique-se de abrir o link completo do seu e-mail ou solicite um novo.", + "backToLogin": "Voltar ao login" + }, + "banned": { + "title": "Você está banido", + "subtitle": "Conta suspensa", + "body": "Sua conta foi suspensa no hotel.", + "reasonLabel": "Razão:", + "permanent": "Esta proibição é permanente.", + "expires": "Expira em {date}.", + "contactStaff": "Se você acredita que isso é um erro, entre em contato com a equipe de funcionários." + }, + "maintenance": { + "title": "{hotel} está em manutenção", + "subtitle": "Estaremos de volta em breve", + "staffCanLogIn": "A equipe ainda pode fazer login." + }, + "admin": { + "nav": { + "overview": "Visão geral", + "dashboard": "Painel", + "content": "Conteúdo", + "articles": "Artigos", + "tags": "Etiquetas", + "navigator": "Navegador", + "helpCenter": "Central de ajuda", + "advertisements": "Anúncios", + "writeableBoxes": "Caixas graváveis", + "photos": "Fotos", + "tickets": "Ingressos", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Usuários e acesso", + "users": "Usuários", + "bans": "Proibições", + "ipManagement": "Gerenciamento de IP", + "vpn": "VPN", + "applications": "Aplicativos", + "teams": "Equipes", + "permissions": "Permissões", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "Economia", + "catalog": "Catálogo", + "shop": "Loja", + "transactions": "Transações", + "vouchers": "Vouchers", + "subscriptions": "Assinaturas", + "rareValues": "Valores raros", + "badges": "Emblemas", + "achievements": "Conquistas", + "calendar": "Calendário", + "radio": "Rádio", + "radioHistory": "História do rádio", + "radioBanners": "Bandeiras", + "radioEmbed": "Incorporar", + "radioApiKeys": "Chaves de API", + "radioModeration": "Moderação", + "radioSettings": "Configurações", + "radioMonitoring": "Monitoramento", + "radioPoints": "Pontos", + "radioRanks": "Classificações", + "radioAutodj": "DJ automático", + "system": "Sistema", + "commandocentrum": "Centro de Comando", + "emulator": "Emulador", + "alerts": "Alertas", + "logs": "Registros", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Filtro de palavras", + "maintenance": "Manutenção", + "rooms": "Quartos", + "emailTemplates": "Modelos de e-mail", + "theme": "Tema", + "media": "Mídia", + "favicon": "Favicon", + "sounds": "Sons", + "translations": "Traduções", + "import": "Importar", + "settings": "Configurações", + "backToSite": "Voltar ao site", + "housekeeping": "Limpeza", + "hotelManagementPanel": "Painel de gestão hoteleira", + "rankLabel": "Classificação {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Search menu…", + "clearMenuSearch": "Clear menu search", + "noMenuResults": "No matching pages.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "studio": "Studio", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "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" + }, + "dashboard": { + "title": "Painel", + "subtitle": "Visão geral do hotel e status ao vivo", + "playersOnline": "Jogadores on-line", + "articles": "Artigos", + "activeBans": "Banimentos ativos", + "database": "Banco de dados", + "databaseConnected": "Conectado", + "databaseDown": "Para baixo", + "usersByRank": "Usuários por classificação", + "noAccountsToBreakDown": "Nenhuma conta para dividir ainda", + "rankLabel": "Classificação {rank}", + "rankWithCount": "Classificação {rank}: {count} contas", + "recentStaffActivity": "Atividade recente da equipe", + "viewAll": "Ver tudo", + "noStaffActivityLogged": "Nenhuma atividade da equipe registrada ainda", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "Artigos", + "subtitle": "Artigos de notícias - 50 mais recentes", + "newArticle": "+ Novo artigo", + "edit": "Editar", + "delete": "Excluir", + "noArticles": "Nenhum artigo ainda", + "confirmDelete": "Tem certeza de que deseja excluir \"{title}\"?", + "colTitle": "Título", + "colSlug": "Lesma", + "colAuthor": "Autor", + "colCreated": "Criado", + "colActions": "Ações", + "form": { + "title": "Título", + "titlePlaceholder": "Título do artigo", + "slug": "Lesma", + "slugPlaceholder": "artigo-url-slug", + "category": "Categoria", + "categoryPlaceholder": "Selecione uma categoria", + "body": "Corpo", + "bodyPlaceholder": "Escreva o conteúdo do seu artigo…", + "image": "Imagem", + "imagePlaceholder": "https://example.com/image.png", + "thumbnail": "Miniatura", + "thumbnailPlaceholder": "https://example.com/thumb.png", + "published": "Publicado", + "featured": "Destaque", + "save": "Salvar artigo", + "saving": "Salvando…", + "deleteArticle": "Excluir artigo", + "deleteConfirm": "Esta ação não pode ser desfeita. O artigo será removido permanentemente.", + "cancel": "Cancelar", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "Etiquetas", + "subtitle": "Tags/categorias de artigos", + "addTag": "Adicionar etiqueta", + "name": "Nome", + "namePlaceholder": "Nome da etiqueta", + "backgroundColour": "Cor de fundo", + "createTag": "Criar etiqueta", + "editTag": "Editar etiqueta", + "updateTag": "Atualizar etiqueta", + "deleteTag": "Excluir etiqueta", + "confirmDelete": "Excluir \"{name}\"?", + "noTags": "Ainda não há tags", + "colId": "ID", + "colTag": "Etiqueta", + "colColour": "Cor", + "colUsedBy": "Usado por", + "colCreated": "Criado", + "colActions": "Ações", + "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": "Navegador", + "flatCategories": "Categorias planas", + "publicRooms": "Salas públicas", + "addCategory": "Adicionar categoria", + "editCategory": "Editar categoria", + "deleteCategory": "Excluir categoria", + "categoryName": "Nome da categoria", + "categoryNamePlaceholder": "por exemplo Relaxe e converse", + "categoryOrder": "Pedido", + "roomName": "Nome da sala", + "roomNamePlaceholder": "por exemplo Sala de boas-vindas", + "roomId": "ID da sala", + "roomIdPlaceholder": "ID numérico da sala", + "save": "Salvar", + "cancel": "Cancelar", + "noCategories": "Nenhuma categoria ainda", + "noPublicRooms": "Ainda não há salas públicas", + "colId": "ID", + "colName": "Nome", + "colOrder": "Pedido", + "colRooms": "Quartos", + "colActions": "Ações", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Central de Ajuda", + "subtitle": "Entradas de suporte e gerenciamento de perguntas frequentes", + "entries": "Entradas", + "newEntry": "+ Nova entrada", + "edit": "Editar", + "delete": "Excluir", + "noEntries": "Nenhuma entrada ainda", + "confirmDelete": "Excluir \"{title}\"?", + "colId": "ID", + "colTitle": "Título", + "colCategory": "Categoria", + "colCreated": "Criado", + "colActions": "Ações", + "form": { + "title": "Título", + "titlePlaceholder": "Título da entrada", + "category": "Categoria", + "categoryPlaceholder": "Selecione a categoria", + "body": "Corpo", + "bodyPlaceholder": "Escreva a resposta…", + "save": "Salvar entrada", + "saving": "Salvando…", + "deleteEntry": "Excluir entrada", + "cancel": "Cancelar" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Anúncios", + "subtitle": "Gerenciar anúncios de hotéis e banners promocionais", + "newAd": "+ Novo anúncio", + "edit": "Editar", + "delete": "Excluir", + "noAds": "Ainda não há anúncios", + "confirmDelete": "Excluir este anúncio?", + "colId": "ID", + "colName": "Nome", + "colImage": "Imagem", + "colUrl": "URL", + "colViews": "Visualizações", + "colStatus": "Estado", + "colCreated": "Criado", + "colActions": "Ações", + "form": { + "name": "Nome", + "namePlaceholder": "Nome do anúncio", + "image": "URL da imagem", + "imagePlaceholder": "https://example.com/banner.png", + "url": "URL de destino", + "urlPlaceholder": "https://example.com", + "enabled": "Habilitado", + "save": "Salvar anúncio", + "saving": "Salvando…", + "deleteAd": "Excluir anúncio", + "cancel": "Cancelar" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Caixas graváveis", + "subtitle": "Painéis de conteúdo exibidos no hotel e no CMS", + "newBox": "Nova caixa", + "edit": "Editar", + "delete": "Excluir", + "noBoxes": "Ainda não há caixas graváveis", + "confirmDelete": "Excluir esta caixa?", + "colId": "ID", + "colName": "Nome", + "colLocation": "Localização", + "colUpdated": "Atualizado", + "colActions": "Ações", + "form": { + "name": "Nome", + "namePlaceholder": "Nome da caixa", + "location": "Localização", + "locationPlaceholder": "por exemplo página inicial, barra lateral", + "content": "Conteúdo", + "contentPlaceholder": "Escreva o conteúdo da caixa…", + "enabled": "Habilitado", + "save": "Salvar caixa", + "saving": "Salvando…", + "deleteBox": "Excluir caixa", + "cancel": "Cancelar", + "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": "Moderação de fotos", + "subtitle": "Fotos recentes da câmera do jogo", + "delete": "Excluir", + "approve": "Aprovar", + "noPhotos": "Nenhuma foto para moderar", + "confirmDelete": "Excluir esta foto permanentemente?", + "colId": "ID", + "colPreview": "Visualização", + "colUser": "Usuário", + "colRoom": "Quarto", + "colTimestamp": "Carimbo de data e hora", + "colActions": "Ações", + "photoAlt": "Foto do usuário #{id}", + "byUser": "por {username}", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Usuários", + "subtitle": "Navegue, pesquise e gerencie contas de hotéis", + "search": "Pesquisar", + "searchPlaceholder": "Pesquise por nome de usuário, e-mail ou ID…", + "searchResults": "{count, plural, one {# result} other {# results}} para \"{query}\"", + "noResults": "Nenhum usuário encontrado", + "colId": "ID", + "colUsername": "Nome de usuário", + "colEmail": "E-mail", + "colRank": "Classificação", + "colOnline": "On-line", + "colRegistered": "Registrado", + "colLastOnline": "Última vez on-line", + "colActions": "Ações", + "yes": "Sim", + "no": "Não", + "edit": "Editar", + "setRank": "Definir classificação", + "disconnect": "Desconectar", + "alert": "Alerta", + "ban": "Proibição", + "detail": { + "title": "Usuário: {username}", + "subtitle": "Detalhes e gerenciamento da conta", + "overview": "Visão geral", + "actions": "Ações", + "username": "Nome de usuário", + "email": "E-mail", + "motto": "Lema", + "rank": "Classificação", + "credits": "Créditos", + "duckets": "Duckets", + "diamonds": "Diamantes", + "online": "On-line", + "registered": "Registrado", + "lastOnline": "Última vez on-line", + "ipAddress": "Endereço IP", + "machineId": "ID da máquina", + "sendAlert": "Enviar alerta", + "sendMessage": "Enviar mensagem", + "disconnectUser": "Desconectar usuário", + "banUser": "Banir usuário", + "resetPassword": "Redefinir senha", + "deleteUser": "Excluir usuário", + "confirmDelete": "Tem certeza de que deseja excluir {username}? Isto não pode ser desfeito.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Editar usuário: {username}", + "subtitle": "Modificar detalhes da conta", + "username": "Nome de usuário", + "usernamePlaceholder": "Nome de usuário", + "email": "E-mail", + "emailPlaceholder": "usuário@exemplo.com", + "motto": "Lema", + "mottoPlaceholder": "Lema do usuário", + "rank": "Classificação", + "credits": "Créditos", + "duckets": "Duckets", + "diamonds": "Diamantes", + "save": "Salvar alterações", + "saving": "Salvando…", + "cancel": "Cancelar" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Proibições", + "subtitle": "Gerenciar banimentos de contas, IP e máquinas", + "newBan": "Nova proibição", + "edit": "Editar", + "delete": "Excluir", + "noBans": "Ainda não há proibições", + "confirmDelete": "Remover esta proibição?", + "colId": "ID", + "colValue": "Valor", + "colType": "Tipo", + "colReason": "Razão", + "colBannedBy": "Banido por", + "colExpires": "Expira", + "colCreated": "Criado", + "colActions": "Ações", + "form": { + "value": "Valor", + "valuePlaceholder": "Nome de usuário, IP ou ID de máquina", + "type": "Tipo", + "typeUser": "Usuário", + "typeIp": "PI", + "typeMachine": "Máquina", + "reason": "Razão", + "reasonPlaceholder": "Motivo do banimento", + "expiresAt": "Expira em", + "permanent": "Permanente", + "save": "Salvar proibição", + "saving": "Salvando…", + "cancel": "Cancelar" + }, + "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": "Gerenciamento de IP", + "subtitle": "Gerenciar lista branca e lista negra de IP", + "whitelist": "Lista de permissões", + "blacklist": "Lista negra", + "addIp": "Adicionar IP", + "ipAddress": "Endereço IP", + "ipAddressPlaceholder": "por exemplo 127.0.0.1", + "reason": "Razão", + "reasonPlaceholder": "Motivo da listagem", + "add": "Adicionar", + "remove": "Remover", + "confirmRemove": "Remover este IP da {list}?", + "noWhitelistedIps": "Nenhum IP na lista de permissões", + "noBlacklistedIps": "Nenhum IP na lista negra", + "colIp": "PI", + "colReason": "Razão", + "colAdded": "Adicionado", + "colActions": "Ações", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "Detecção de VPN/proxy", + "subtitle": "Definir configurações de VPN e detecção de proxy", + "enabled": "Habilitado", + "apiKey": "Chave de API", + "apiKeyPlaceholder": "Sua chave API de detecção de VPN", + "apiKeyHint": "Deixe em branco para desativar", + "blockOnDetect": "Bloquear na detecção", + "blockOnDetectHint": "Bloqueie automaticamente usuários detectados por trás de uma VPN ou proxy", + "save": "Salvar configurações", + "saving": "Salvando…", + "settingsSaved": "Configurações de VPN salvas com sucesso", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Candidaturas para funcionários", + "subtitle": "Solicitações de funcionários pendentes e revisadas", + "pending": "Pendente", + "approved": "Aprovado", + "rejected": "Rejeitado", + "noApplications": "Ainda não há inscrições", + "colId": "ID", + "colApplicant": "Requerente", + "colPosition": "Posição", + "colStatus": "Estado", + "colSubmitted": "Enviado", + "colActions": "Ações", + "review": "Revisão", + "approve": "Aprovar", + "reject": "Rejeitar", + "confirmApprove": "Aprovar {username} para {position}?", + "confirmReject": "Rejeitar a candidatura de {username} para {position}?", + "detail": { + "title": "Inscrição por {username}", + "subtitle": "Para {position}", + "about": "Sobre o candidato", + "message": "Mensagem do aplicativo", + "status": "Estado", + "submitted": "Enviado", + "noMessage": "Nenhuma mensagem fornecida" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Equipes", + "subtitle": "Definir nomes e descrições de classificação da equipe", + "addRank": "Adicionar classificação", + "editRank": "Editar classificação", + "deleteRank": "Excluir classificação", + "noTeams": "Ainda não há definições de classificação", + "confirmDelete": "Excluir definição de classificação {id}?", + "colId": "ID", + "colRank": "Classificação", + "colName": "Nome", + "colBadge": "Distintivo", + "colColour": "Cor", + "colActions": "Ações", + "form": { + "rankId": "ID de classificação", + "rankIdPlaceholder": "ID de classificação numérica", + "name": "Nome", + "namePlaceholder": "por exemplo Administrador", + "badge": "Código do selo", + "badgePlaceholder": "por exemplo ADM001", + "colour": "Cor", + "colourPlaceholder": "por exemplo #ff0000", + "save": "Salvar definição de equipe", + "saving": "Salvando…", + "cancel": "Cancelar" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Permissões", + "subtitle": "Gerenciar permissões baseadas em classificação para o painel de administração", + "addPermission": "Adicionar permissão", + "editPermission": "Editar permissão", + "deletePermission": "Excluir permissão", + "noPermissions": "Nenhuma permissão configurada ainda", + "confirmDelete": "Excluir esta permissão?", + "colId": "ID", + "colRank": "Classificação", + "colPermission": "Permissão", + "colCreated": "Criado", + "colActions": "Ações", + "form": { + "rankId": "ID de classificação", + "rankIdPlaceholder": "Classificação mínima exigida", + "permission": "Chave de permissão", + "permissionPlaceholder": "por exemplo admin.artigos.manage", + "save": "Salvar permissão", + "saving": "Salvando…", + "cancel": "Cancelar" + } + }, + "catalog": { + "title": "Catálogo", + "subtitle": "Navegue e gerencie páginas e itens do catálogo", + "pages": "Páginas", + "items": "Itens", + "addPage": "Adicionar página", + "editPage": "Editar página", + "deletePage": "Excluir página", + "addItem": "Adicionar item", + "editItem": "Editar item", + "deleteItem": "Excluir item", + "noPages": "Ainda não há páginas de catálogo", + "noItems": "Nenhum item nesta página", + "confirmDeletePage": "Excluir a página do catálogo \"{name}\"?", + "confirmDeleteItem": "Excluir este item?", + "colId": "ID", + "colName": "Nome", + "colIcon": "Ícone", + "colOrder": "Pedido", + "colItems": "Itens", + "colEnabled": "Habilitado", + "colActions": "Ações", + "colItemId": "ID do item", + "colItemName": "Nome do item", + "colCostCredits": "Custo (créditos)", + "colCostPoints": "Custo (pontos)", + "colLimited": "Limitado", + "pageForm": { + "name": "Nome", + "namePlaceholder": "Nome da página", + "icon": "ID do ícone", + "iconPlaceholder": "ID numérico do ícone", + "order": "Pedido", + "enabled": "Habilitado", + "parent": "Página pai", + "parentNone": "Nenhum (raiz)", + "save": "Salvar página", + "saving": "Salvando…", + "cancel": "Cancelar" + }, + "itemForm": { + "itemId": "ID do item", + "itemName": "Nome do item", + "costCredits": "Custo em créditos", + "costDuckets": "Custo em patos", + "costDiamonds": "Custo em diamantes", + "limitedStack": "Tamanho de pilha limitado", + "limitedSold": "Venda limitada", + "save": "Salvar item", + "saving": "Salvando…", + "cancel": "Cancelar" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Loja", + "subtitle": "Gerenciar pacotes e pedidos", + "packages": "Pacotes", + "orders": "Pedidos", + "newPackage": "+ Novo pacote", + "edit": "Editar", + "delete": "Excluir", + "viewOrder": "Ver", + "noPackages": "Nenhum pacote de loja ainda", + "noOrders": "Ainda não há pedidos", + "confirmDelete": "Excluir este pacote?", + "colId": "ID", + "colName": "Nome", + "colPrice": "Preço", + "colCurrency": "Moeda", + "colType": "Tipo", + "colSold": "Vendido", + "colEnabled": "Habilitado", + "colActions": "Ações", + "colOrderId": "ID do pedido", + "colCustomer": "Cliente", + "colPackage": "Pacote", + "colAmount": "Quantidade", + "colStatus": "Estado", + "colDate": "Data", + "statusPending": "Pendente", + "statusCompleted": "Concluído", + "statusRefunded": "Reembolsado", + "form": { + "name": "Nome", + "namePlaceholder": "Nome do pacote", + "description": "Descrição", + "descriptionPlaceholder": "Descrição do pacote", + "price": "Preço", + "currency": "Moeda", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Tipo", + "typeCredits": "Créditos", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamantes", + "typeBadge": "Distintivo", + "typeFurni": "Móveis", + "typeRank": "Classificação", + "amount": "Quantidade", + "badgeCode": "Código do selo", + "badgeCodePlaceholder": "por exemplo VIP001", + "rankId": "ID de classificação", + "furniItems": "Itens de mobiliário", + "enabled": "Habilitado", + "save": "Salvar pacote", + "saving": "Salvando…", + "cancel": "Cancelar", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "Transações", + "subtitle": "Registro de pagamento do PayPal", + "noTransactions": "Nenhuma transação ainda", + "colId": "ID", + "colUser": "Usuário", + "colAmount": "Quantidade", + "colCurrency": "Moeda", + "colPackage": "Pacote", + "colStatus": "Estado", + "colDate": "Data", + "colActions": "Ações", + "statusCompleted": "Concluído", + "statusPending": "Pendente", + "statusFailed": "Falha", + "statusRefunded": "Reembolsado", + "detail": { + "title": "Transação #{id}", + "paypalId": "ID do PayPal", + "payerEmail": "E-mail do pagador", + "grossAmount": "Montante bruto", + "fee": "Taxa", + "netAmount": "Valor líquido" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Vouchers de loja", + "subtitle": "Gerenciar códigos de voucher resgatáveis", + "newVoucher": "+ Novo comprovante", + "edit": "Editar", + "delete": "Excluir", + "noVouchers": "Ainda não há vouchers", + "confirmDelete": "Excluir voucher \"{code}\"?", + "colId": "ID", + "colCode": "Código", + "colValue": "Valor", + "colType": "Tipo", + "colUses": "Usos / Máx.", + "colExpires": "Expira", + "colCreated": "Criado", + "colActions": "Ações", + "form": { + "code": "Código", + "codePlaceholder": "por exemplo VERÃO2025", + "value": "Valor", + "type": "Tipo", + "typeCredits": "Créditos", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamantes", + "typeBadge": "Distintivo", + "typeFurni": "Móveis", + "typeRank": "Classificação", + "badgeCode": "Código do selo", + "badgeCodePlaceholder": "por exemplo VIP001", + "rankId": "ID de classificação", + "maxUses": "Máximo de usos", + "maxUsesPlaceholder": "0 = ilimitado", + "expiresAt": "Expira em", + "enabled": "Habilitado", + "save": "Salvar comprovante", + "saving": "Salvando…", + "cancel": "Cancelar", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Assinaturas", + "subtitle": "Assinaturas recorrentes ativas", + "noSubscriptions": "Nenhuma assinatura ativa", + "cancel": "Cancelar", + "confirmCancel": "Cancelar assinatura de {username}?", + "colId": "ID", + "colUser": "Usuário", + "colPackage": "Pacote", + "colAmount": "Quantidade", + "colInterval": "Intervalo", + "colStarted": "Iniciado", + "colNextBilling": "Próximo faturamento", + "colStatus": "Estado", + "colActions": "Ações", + "statusActive": "Ativo", + "statusCancelled": "Cancelado", + "statusExpired": "Expirado", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Valores raros", + "subtitle": "Gerencie categorias de valor raro e preços de itens", + "categories": "Categorias", + "items": "Itens", + "addCategory": "Adicionar categoria", + "editCategory": "Editar categoria", + "deleteCategory": "Excluir categoria", + "noCategories": "Ainda não há categorias de valor raro", + "confirmDeleteCategory": "Excluir a categoria \"{name}\" e todos os seus itens?", + "colId": "ID", + "colName": "Nome", + "colItems": "Itens", + "colUpdated": "Atualizado", + "colActions": "Ações", + "colItemName": "Nome do item", + "colCredits": "Créditos", + "colPoints": "Pontos", + "colPointType": "Tipo de ponto", + "categoryForm": { + "name": "Nome", + "namePlaceholder": "Nome da categoria", + "save": "Salvar categoria", + "saving": "Salvando…", + "cancel": "Cancelar" + }, + "itemForm": { + "itemName": "Nome do item", + "itemNamePlaceholder": "por exemplo Trono", + "credits": "Valor dos créditos", + "points": "Valor dos pontos", + "pointType": "Tipo de ponto", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Diamantes", + "save": "Salvar item", + "saving": "Salvando…", + "cancel": "Cancelar", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Emblemas", + "subtitle": "Carregue, dê e gerencie o catálogo de crachás", + "upload": "Carregar", + "giveBadge": "Dê crachá", + "catalogue": "Catálogo", + "uploadTitle": "Carregar um novo selo", + "uploadSubtitle": "Carregar um arquivo de imagem do selo", + "badgeCode": "Código do selo", + "badgeCodePlaceholder": "por exemplo VIP001", + "badgeFile": "Arquivo de crachá", + "badgeFileHint": "PNG ou GIF, recomendado 40x40", + "uploadButton": "Carregar", + "uploading": "Fazendo upload…", + "giveTitle": "Dê selo ao usuário", + "giveSubtitle": "Conceda um selo a um usuário específico", + "username": "Nome de usuário", + "usernamePlaceholder": "Nome de usuário de destino", + "giveButton": "Dê crachá", + "giving": "Dando…", + "catalogueTitle": "Catálogo de emblemas", + "catalogueSubtitle": "Todos os crachás disponíveis no hotel", + "noBadges": "Não há emblemas no catálogo", + "search": "Pesquisar emblemas", + "searchPlaceholder": "Pesquise por código ou nome…", + "colCode": "Código", + "colImage": "Imagem", + "colName": "Nome", + "colDescription": "Descrição", + "colActions": "Ações", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Conquistas", + "subtitle": "Lista somente leitura de conquistas no jogo", + "noAchievements": "Nenhuma conquista configurada", + "colId": "ID", + "colName": "Nome", + "colCategory": "Categoria", + "colLevels": "Níveis", + "colReward": "Recompensa", + "colProgress": "Progresso", + "levelLabel": "Nível {level}", + "rewardCredits": "{count} créditos", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Campanhas de calendário", + "subtitle": "Lista somente leitura de campanhas e eventos do calendário", + "noCampaigns": "Ainda não há campanhas de calendário", + "colId": "ID", + "colName": "Nome", + "colStart": "Começar", + "colEnd": "Fim", + "colType": "Tipo", + "colReward": "Recompensa", + "colActions": "Ações", + "detail": { + "title": "Campanha: {name}", + "subtitle": "Detalhes do evento do calendário", + "days": "Dias", + "dayLabel": "Dia {day}", + "reward": "Recompensa", + "noDays": "Nenhum dia configurado para esta campanha", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Moderação de rádio", + "subtitle": "Últimos gritos, inscrições de DJs e programações no ar (25 mais recentes de cada).", + "moderation": "Moderação", + "shouts": "Gritos", + "applications": "Aplicativos", + "schedules": "Horários", + "settings": "Configurações", + "embed": "Incorporar", + "ranks": "Classificações", + "history": "História", + "apiKeys": "Chaves de API", + "points": "Pontos", + "autoDj": "Auto DJ", + "monitoring": { + "title": "Monitoramento de rádio", + "subtitle": "Sonda ao vivo somente leitura dos endpoints de rádio configurados (radio_now_playing_api_url, radio_listeners_api_url). Cada solicitação falha suavemente com um tempo limite de {timeout} — nenhum dado é gravado. Configure URLs em Configurações.", + "stream": "Transmitir", + "online": "On-line", + "offline": "Off-line", + "notConfigured": "Não configurado", + "nowPlaying": "Agora jogando", + "nowPlayingApi": "API em execução", + "listenersApi": "API de ouvintes", + "listeners": "Ouvintes", + "currentSong": "Música atual", + "bitrate": "Taxa de bits", + "status": "Estado", + "noNowPlayingHint": "nenhum conjunto de API em execução", + "noListenersHint": "nenhuma API de ouvinte definida", + "endpointDiagnostics": "Diagnóstico de endpoint", + "diagnosticsLegend": "OK: acessível · WARN: não configurado · ERROR: falha no pedido ou tempo esgotado.", + "streamUrl": "URL de transmissão", + "unreachable": "inacessível", + "refresh": "Atualizar" + }, + "user": "Usuário", + "message": "Mensagem", + "posted": "Publicado", + "realName": "Nome verdadeiro", + "age": "Idade", + "style": "Estilo", + "applied": "Aplicado", + "day": "Dia", + "start": "Começar", + "end": "Fim", + "show": "Mostrar", + "status": "Estado", + "active": "ativo", + "inactive": "inativo", + "hidden": "escondido", + "activeSchedules": "Agendamentos ativos", + "noShouts": "Sem gritos para moderar", + "noApplications": "Nenhuma inscrição enviada.", + "noSchedules": "Nenhuma programação configurada.", + "deleteShout": "Excluir", + "confirmDeleteShout": "Excluir este grito?", + "pendingApplications": "Candidaturas pendentes", + "settingsForm": { + "title": "Configurações de rádio", + "subtitle": "As edições são gravadas em website_settings (teclas radio_*) e interrompem o cache de configurações de tempo de execução. Booleanos usam 0/1.", + "enabled": "Habilitado", + "disabled": "Desativado", + "totalKeys": "Total de chaves", + "configured": "Configurado", + "curatedHint": "chaves selecionadas com um valor", + "customKeys": "Chaves personalizadas", + "saveAll": "Salvar tudo", + "singleKey": "Adicionar/substituir uma única chave", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "valor", + "commentPlaceholder": "comentário (opcional)", + "saveSingle": "Salvar", + "otherSettings": "Outras configurações de rádio", + "dbError": "Não foi possível carregar as configurações (banco de dados indisponível). Os padrões serão criados ao salvar." + }, + "embedPage": { + "title": "Incorporação de rádio", + "subtitle": "Código incorporado pronto para cópia para a transmissão ao vivo. Somente leitura – nada aqui é gravado no banco de dados. Configure o URL do stream nas configurações do rádio (radio_stream_url).", + "streamUrl": "URL de transmissão", + "configured": "Configurado", + "missing": "Desaparecido", + "radioName": "Nome da rádio", + "nowPlayingApi": "API em execução", + "set": "Definir", + "notSet": "Não definido", + "noStreamUrl": "Nenhum URL de stream configurado", + "noStreamUrlText": "Não há radio_stream_url definido, então não há nada para incorporar ainda.", + "goToSettings": "Vá para configurações de rádio", + "livePreview": "Visualização ao vivo", + "livePreviewText": "Este é o player audio simples, como os visitantes o verão. Pressione play para confirmar que o stream está acessível.", + "source": "Fonte", + "audioSnippet": "Snippet do player de áudio", + "audioSnippetDesc": "Reprodutor de áudio HTML5 drop-in apontado diretamente para o stream. Funciona em qualquer lugar onde HTML simples seja permitido.", + "iframeSnippet": "Snippet de wrapper de iframe", + "iframeSnippetDesc": "Incorpora a página do player de rádio do próprio site em um iframe – mantém seu estilo e informações de reprodução atual. Ajuste largura/altura a gosto.", + "audioUnsupported": "Seu navegador não suporta o elemento áudio." + }, + "banners": { + "title": "Bandeiras", + "heading": "Banners de rádio", + "description": "Banners promocionais exibidos na página da rádio, ordenados por ordem de classificação.", + "addBanner": "Adicionar faixa", + "createBanner": "Criar banner", + "deleteBanner": "Excluir banner", + "noBanners": "Ainda não há banners – adicione um acima.", + "existing": "Banners existentes ({count})", + "save": "Salvar", + "delete": "Excluir", + "byUser": "pelo usuário {id}", + "active": "ativo", + "hidden": "escondido", + "bannerAlt": "Bandeira de rádio", + "statusActive": "Ativo", + "statusHidden": "Oculto", + "dbError": "Não foi possível carregar os banners (banco de dados indisponível).", + "form": { + "imagePath": "Caminho/URL da imagem", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Título", + "description": "Descrição", + "sortOrder": "Ordem de classificação", + "active": "Ativo" + } + }, + "ranksForm": { + "title": "Classificações de rádio", + "subtitle": "Classificações de DJ/equipe atribuíveis em aplicativos de rádio.", + "dbError": "Não foi possível carregar as classificações (banco de dados indisponível).", + "active": "Ativo", + "addRank": "Adicionar classificação", + "name": "Nome", + "badgeCode": "Código do selo", + "description": "Descrição", + "createRank": "Criar classificação", + "existing": "Classificações existentes ({count})", + "noRanks": "Nenhuma classificação ainda – adicione uma acima.", + "activeLabel": "ativo", + "inactiveLabel": "inativo", + "save": "Salvar", + "deleteRank": "Excluir classificação #{id}" + }, + "historyPage": { + "title": "Histórico de reprodução de rádio", + "subtitle": "Shows de DJs anteriores e tempo de transmissão (radio_history), os mais recentes primeiro. Registro somente leitura de quem estava no ar, quando e quantos ouvintes sintonizaram.", + "dbError": "Não foi possível carregar o histórico do rádio (banco de dados indisponível).", + "showsLogged": "Programas registrados", + "onAirNow": "No ar agora", + "uniqueDjs": "DJs exclusivos", + "peakListeners": "Pico de ouvintes", + "empty": "Nenhum histórico de rádio registrado ainda.", + "showLog": "Mostrar registro ({count})", + "colDj": "DJ", + "colShow": "Mostrar", + "colStarted": "Iniciado", + "colEnded": "Terminou", + "colAirtime": "Tempo de antena", + "colListeners": "Ouvintes", + "colNotes": "Notas", + "onAir": "no ar" + }, + "apiKeysForm": { + "title": "Chaves de API de rádio", + "subtitle": "Chaves de API para integrações de rádio externas (radio_api_keys). As chaves são geradas no lado do servidor e mostradas mascaradas – copie o valor completo do banco de dados quando emitidas pela primeira vez.", + "dbError": "Não foi possível carregar as chaves de API (banco de dados indisponível).", + "totalKeys": "Total de chaves", + "active": "Ativo", + "inactive": "Inativo", + "generateKey": "Gerar chave", + "generateHint": "A chave secreta é gerada automaticamente com aleatoriedade criptográfica — você não a insere.", + "name": "Nome", + "namePlaceholder": "Ponte AzureCast", + "rateLimit": "Limite de taxa (solicitações/min)", + "allowedIps": "IPs permitidos (opcional)", + "allowedIpsPlaceholder": "separados por vírgula, em branco = qualquer", + "generate": "Gerar chave", + "existingKeys": "Chaves existentes ({count})", + "noKeys": "Nenhuma chave de API ainda – gere uma acima.", + "colName": "Nome", + "colKey": "Chave", + "colAllowedIps": "IPs permitidos", + "colRateLimit": "Limite de taxa", + "colLastUsed": "Usado pela última vez", + "colExpires": "Expira", + "colStatus": "Estado", + "colActions": "Ações", + "maskedHint": "Apenas os primeiros 8 caracteres são mostrados", + "any": "qualquer", + "activeLabel": "ativo", + "inactiveLabel": "inativo", + "deactivate": "Desativar", + "activate": "Ativar", + "delete": "Excluir" + }, + "pointsForm": { + "title": "Pontos de ouvinte de rádio", + "subtitle": "Recompense os ouvintes com dinheiro pelo tempo gasto no rádio. As edições são gravadas em website_settings (chaves radio_points_*) e interrompem o cache de configurações de tempo de execução. Booleanos usam 0/1.", + "saved": "Salvo", + "points": "Pontos", + "enabled": "Habilitado", + "disabled": "Desativado", + "perMinute": "Por minuto", + "paidIn": "pago em {currency}", + "maxPerDay": "Máx./dia", + "unlimited": "Ilimitado", + "minListeners": "Mínimo de ouvintes", + "settings": "Configurações", + "pointsEnabled": "Pontos ativados", + "pointsEnabledHint": "Chave mestre para atribuição de pontos de ouvinte.", + "currency": "Moeda", + "currencyHint": "Em qual carteira os pontos são pagos.", + "pointsPerMinute": "Pontos por minuto", + "pointsPerMinuteHint": "Valor concedido por cada minuto completo de audição.", + "maxPerDayHint": "Limite diário por usuário. Use 0 para ilimitado.", + "minListenersHint": "Os pontos só são concedidos quando pelo menos esse número de pessoas está sintonizado.", + "save": "Salvar configurações de pontos" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Lista de reprodução alternativa (radio_auto_dj_playlist) pela qual o rádio alterna quando nenhum DJ ao vivo está transmitindo. Ordenado por ordem de classificação e depois por título.", + "dbError": "Não foi possível carregar a playlist do AutoDJ (banco de dados indisponível).", + "tracks": "Faixas", + "active": "Ativo", + "inactive": "Inativo", + "addTrack": "Adicionar faixa", + "titlePlaceholder": "Título da faixa", + "artist": "Artista", + "album": "Álbum", + "artworkUrl": "URL da arte", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Duração (segundos)", + "durationPlaceholder": "por exemplo 215", + "sortOrder": "Ordem de classificação", + "playlist": "Lista de reprodução ({count})", + "noTracks": "Nenhuma faixa do AutoDJ ainda – adicione uma acima.", + "colOrder": "Pedido", + "colTitle": "Título", + "colArtist": "Artista", + "colAlbum": "Álbum", + "colDuration": "Duração", + "colPlays": "Peças", + "colLastPlayed": "Jogado pela última vez", + "colStatus": "Estado", + "colActions": "Ações", + "activeLabel": "ativo", + "inactiveLabel": "inativo", + "deactivate": "Desativar", + "activate": "Ativar", + "delete": "Excluir", + "trackTitle": "Título" + }, + "moderationPage": { + "title": "Moderação de DJ", + "subtitle": "Revise e remova mensagens de rádio (50 mais recentes).", + "recentShouts": "Gritos recentes ({count})" + } + }, + "commandocentrum": { + "title": "Centro de Comando", + "subtitle": "Diagnóstico, controles RCON e gerenciamento de usuários", + "diagnostics": "Diagnóstico", + "rcon": "RCON", + "userActions": "Ações do usuário", + "diagnosticsTitle": "Diagnóstico do emulador", + "memoryUsage": "Uso de memória", + "uptime": "Tempo de atividade", + "onlineUsers": "Usuários on-line", + "roomsLoaded": "Salas carregadas", + "refresh": "Atualizar", + "rconTitle": "Comandos RCON", + "rconPlaceholder": "Digite o comando RCON…", + "rconSend": "Enviar", + "rconSending": "Enviando…", + "rconResponse": "Resposta", + "userActionsTitle": "Ações do usuário", + "username": "Nome de usuário", + "usernamePlaceholder": "Nome de usuário de destino", + "action": "Ação", + "execute": "Executar", + "actions": { + "disconnect": "Desconectar", + "alert": "Enviar alerta", + "giveCredits": "Dê créditos", + "giveBadge": "Dê crachá", + "givePoints": "Dê pontos", + "ban": "Proibição", + "kick": "Chute" + }, + "messagePlaceholder": "Mensagem (para alertas)…", + "amountPlaceholder": "Quantidade…", + "badgePlaceholder": "Código do selo…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Configuração do emulador", + "subtitle": "Visualize e edite configurações do emulador e textos de localidade", + "settings": "Configurações", + "texts": "Textos", + "search": "Pesquisar", + "searchPlaceholder": "Chaves de pesquisa…", + "noSettings": "Nenhuma configuração encontrada", + "noTexts": "Nenhum texto encontrado", + "edit": "Editar", + "save": "Salvar", + "saving": "Salvando…", + "cancel": "Cancelar", + "colKey": "Chave", + "colValue": "Valor", + "colType": "Tipo", + "colActions": "Ações", + "editDialog": { + "title": "Editar: {key}", + "value": "Valor", + "valuePlaceholder": "Insira o valor…", + "save": "Salvar alterações", + "cancel": "Cancelar" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Alertas", + "subtitle": "Envie alertas para todo o hotel e visualize alertas recentes", + "sendAlert": "Enviar alerta de hotel", + "recentAlerts": "Alertas recentes ({count})", + "noRecentAlerts": "Nenhum alerta recente", + "form": { + "title": "Título do alerta", + "titlePlaceholder": "por exemplo Manutenção do servidor em 10 minutos", + "message": "Mensagem de alerta", + "messagePlaceholder": "Escreva a mensagem de alerta…", + "type": "Tipo", + "typeHotel": "Alerta para todo o hotel", + "typeStaff": "Somente funcionários", + "urgent": "Urgente", + "send": "Enviar alerta", + "sending": "Enviando…", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "ID", + "colTitle": "Título", + "colSentBy": "Enviado por", + "colType": "Tipo", + "colDate": "Data", + "colActions": "Ações", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Atividades da equipe", + "subtitle": "Trilha de auditoria das ações da equipe no painel de administração", + "noLogs": "Nenhuma atividade da equipe registrada ainda", + "colId": "ID", + "colUser": "Usuário", + "colAction": "Ação", + "colTarget": "Alvo", + "colDescription": "Descrição", + "colIp": "PI", + "colTimestamp": "Carimbo de data e hora", + "filterByUser": "Filtrar por usuário…", + "filterByAction": "Filtrar por ação…", + "clearFilters": "Limpar filtros", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Filtro de palavras", + "subtitle": "Gerencie palavras e frases filtradas no hotel", + "addWord": "Adicionar palavra", + "addWords": "Adicionar palavras", + "noWords": "Ainda não há palavras filtradas", + "confirmDelete": "Remover \"{word}\" do filtro?", + "colId": "ID", + "colWord": "Palavra", + "colAddedBy": "Adicionado por", + "colCreated": "Criado", + "colActions": "Ações", + "form": { + "word": "Palavra", + "wordPlaceholder": "por exemplo palavrão", + "addMore": "Adicione várias palavras (uma por linha)", + "save": "Adicionar ao filtro", + "saving": "Salvando…", + "cancel": "Cancelar" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Modo de manutenção", + "subtitle": "Ativar ou desativar a manutenção em todo o hotel", + "enabled": "O modo de manutenção está ativado", + "disabled": "O modo de manutenção está desativado", + "enable": "Habilitar manutenção", + "disable": "Desativar manutenção", + "message": "Mensagem de manutenção", + "messagePlaceholder": "Voltaremos em breve!", + "staffAccess": "Permitir acesso da equipe durante a manutenção", + "save": "Salvar configurações", + "saving": "Salvando…", + "confirmEnable": "Ativar a manutenção impedirá que todos os usuários que não sejam funcionários acessem o hotel. Continuar?", + "confirmDisable": "Desativar o modo de manutenção e restaurar o acesso para todos os usuários?", + "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": "Permissões de limpeza", + "subtitle": "Configure quais classificações podem acessar quais seções administrativas", + "addPermission": "Adicionar permissão", + "editPermission": "Editar permissão", + "deletePermission": "Excluir permissão", + "noPermissions": "Nenhuma permissão de limpeza configurada", + "confirmDelete": "Excluir esta permissão?", + "colId": "ID", + "colRank": "Classificação", + "colSection": "Seção", + "colActions": "Ações", + "form": { + "rankId": "ID de classificação", + "rankIdPlaceholder": "Classificação mínima", + "section": "Chave de seção", + "sectionPlaceholder": "por exemplo admin.dashboard", + "save": "Salvar permissão", + "saving": "Salvando…", + "cancel": "Cancelar" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset Aplicado!", + "cleared": "All Permissões cleared!", + "invalidRank": "Invalid Classificação", + "testDone": "Test done: {count} Permissões found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Excluir ALL Permissões? This Ação cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Permissão", + "colDescription": "Descrição", + "colMinRank": "Min. Classificação", + "permissionKey": "Chave de permissão", + "minRank": "Min. Classificação", + "description": "Descrição", + "permissions": "Permissões", + "permissionsCount": "{count} Permissões", + "permission": "Permissão", + "highestMinRank": "Highest min. Classificação: {rank}", + "totalMinRank": "Total min. Classificação sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Classificações", + "missingDeps": "{count} Desaparecido dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(Desaparecido)", + "rank": "Classificação", + "count": "Count", + "searchPermission": "Pesquisar Permissões…", + "search": "Pesquisar", + "manage": "Manage", + "importSelection": "Importar selection", + "noGroup": "Não group", + "allGroups": "All groups", + "perGroup": "Permissões per group", + "perRank": "Permissões per Classificação", + "rankOverviewHint": "All Permissões grouped by the Classificação they are assigned to.", + "tabOverview": "Visão geral", + "tabManage": "Manage", + "tabImport": "Importar / Export", + "tabRanks": "Classificação Visão geral", + "tabPresets": "Predefinições", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "Importar Permissões", + "importHint": "Paste a JSON array of Permissão objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "Importar", + "exportTitle": "Export Permissões", + "exportHint": "Export all Permissões as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Permissão Predefinições", + "presetsHint": "Aplicar a predefined Definir of Permissões for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Moderação tools: Usuário lookup, Proibições, CFH handling, chat Registros.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Usuários, Quartos, news, Configurações, Loja, events, Rádio & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including Permissão management and asset Importar.", + "applyPreset": "Aplicar preset", + "clearAll": "Clear all Permissões", + "testTitle": "Test Classificação access", + "testHint": "Enter a Classificação number to see which Permissões would be granted.", + "test": "Test", + "auditTitle": "Permissão audit log", + "auditHint": "All changes to Limpeza Permissões are logged.", + "auditLogsAt": "Audit Registros are available on the Audit log page.", + "viewAuditLogs": "Ver audit Registros", + "importedWithErrors": "Imported {count} Permissões with {errors} errors", + "confirmClearAllDesc": "This will Remover every Permissão entry from the Banco de dados. Are you sure?", + "confirmDeletePermission": "Excluir this Permissão permanently?", + "confirmBulkDelete": "Excluir {count} selected Permissões?", + "deleteSelected": "Excluir {count} selected", + "cancel": "Cancelar", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Usuário", + "auditAction": "Ação", + "auditTarget": "Alvo", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Quartos", + "subtitle": "Pesquise e gerencie quartos de hotel", + "search": "Pesquisar", + "searchPlaceholder": "Pesquise por nome, proprietário ou ID…", + "searchResults": "{count, plural, one {# room} other {# rooms}} encontrado para \"{query}\"", + "noResults": "Nenhum quarto encontrado", + "colId": "ID", + "colName": "Nome", + "colOwner": "Proprietário", + "colUsers": "Usuários", + "colState": "Estado", + "colCategory": "Categoria", + "colCreated": "Criado", + "colActions": "Ações", + "stateOpen": "Abrir", + "stateClosed": "Fechado", + "stateLocked": "Bloqueado", + "stateInvisible": "Invisível", + "detail": { + "title": "Sala: {name}", + "subtitle": "Propriedade de {owner}", + "overview": "Visão geral", + "actions": "Ações", + "description": "Descrição", + "noDescription": "Sem descrição", + "owner": "Proprietário", + "users": "Usuários on-line", + "maxUsers": "Máximo de usuários", + "category": "Categoria", + "state": "Estado", + "tags": "Etiquetas", + "noTags": "Sem tags", + "created": "Criado", + "deleteRoom": "Excluir sala", + "confirmDelete": "Excluir sala \"{name}\"? Isto não pode ser desfeito.", + "enterRoom": "Entre na sala", + "changeOwner": "Alterar proprietário", + "changeOwnerPlaceholder": "Nome de usuário do novo proprietário" + } + }, + "emailTemplates": { + "title": "Modelos de e-mail", + "subtitle": "Gerenciar modelos de email transacional", + "newTemplate": "+ Novo modelo", + "edit": "Editar", + "delete": "Excluir", + "noTemplates": "Ainda não há modelos de e-mail", + "confirmDelete": "Excluir modelo \"{name}\"?", + "colId": "ID", + "colName": "Nome", + "colSubject": "Assunto", + "colKey": "Chave", + "colUpdated": "Atualizado", + "colActions": "Ações", + "form": { + "name": "Nome", + "namePlaceholder": "por exemplo E-mail de boas-vindas", + "key": "Chave", + "keyPlaceholder": "por exemplo bem-vindo_e-mail", + "subject": "Assunto", + "subjectPlaceholder": "Linha de assunto do e-mail", + "body": "Corpo (HTML)", + "bodyPlaceholder": "

Prezado {username},

", + "variables": "Variáveis disponíveis", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Salvar modelo", + "saving": "Salvando…", + "cancel": "Cancelar", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Tema", + "subtitle": "Personalize a aparência do CMS", + "presets": "Predefinições", + "colours": "Cores", + "css": "CSS", + "presetsTitle": "Predefinições de tema", + "presetsSubtitle": "Escolha um esquema de cores pré-construído", + "applyPreset": "Aplicar", + "presetApplied": "Predefinição aplicada: {preset}", + "customiseTitle": "Cores personalizadas", + "primary": "Primário", + "secondary": "Secundário", + "accent": "Sotaque", + "background": "Plano de fundo", + "surface": "Superfície", + "text": "Texto", + "saveColours": "Salvar cores", + "savingColours": "Salvando…", + "cssTitle": "CSS personalizado", + "cssSubtitle": "Adicione CSS personalizado para substituir estilos de tema", + "cssPlaceholder": "/* Seu CSS personalizado aqui */", + "saveCss": "Salvar CSS", + "savingCss": "Salvando…", + "reset": "Redefinir para os padrões", + "confirmReset": "Redefinir o tema para os valores padrão?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Biblioteca de mídia", + "subtitle": "Carregar e gerenciar arquivos de mídia", + "upload": "Carregar", + "uploadTitle": "Carregar um arquivo", + "uploadSubtitle": "Arraste e solte ou clique para fazer upload", + "uploadButton": "Escolha o arquivo", + "uploading": "Fazendo upload…", + "noFiles": "Ainda não há arquivos de mídia", + "delete": "Excluir", + "confirmDelete": "Excluir este arquivo permanentemente?", + "search": "Pesquisar", + "searchPlaceholder": "Pesquise por nome de arquivo…", + "colPreview": "Visualização", + "colName": "Nome", + "colSize": "Tamanho", + "colType": "Tipo", + "colUploaded": "Enviado", + "colActions": "Ações", + "copyUrl": "Copiar URL", + "urlCopied": "URL copiado para a área de transferência" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Carregar e gerenciar o favicon do site", + "current": "Favicon atual", + "uploadLabel": "Carregar favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO ou SVG. Máximo de 2 MB.", + "upload": "Carregar", + "uploading": "Fazendo upload…", + "delete": "Remover", + "deleting": "Removendo…", + "saved": "Favicon salvo com sucesso!", + "deleted": "Favicon removido com sucesso!", + "error": "Algo deu errado", + "confirmDelete": "Remover o favicon? O site não exibirá mais um favicon personalizado.", + "generator": { + "title": "Gerar favicon", + "text": "Texto", + "bgColor": "Cor de fundo", + "textColor": "Cor do texto", + "rounded": "Cantos arredondados", + "save": "Salvar como favicon" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "Configurações de CMS", + "subtitle": "Gerenciar a configuração do CMS de chave/valor", + "addSetting": "Adicionar configuração", + "edit": "Editar", + "delete": "Excluir", + "noSettings": "Nenhuma configuração encontrada", + "confirmDelete": "Excluir configuração \"{key}\"?", + "colKey": "Chave", + "colValue": "Valor", + "colUpdated": "Atualizado", + "colActions": "Ações", + "form": { + "key": "Chave", + "keyPlaceholder": "por exemplo nome_do_hotel", + "value": "Valor", + "valuePlaceholder": "Valor de configuração", + "save": "Salvar configuração", + "saving": "Salvando…", + "cancel": "Cancelar" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Início", + "reload": "Recarregar", + "fullscreen": "Tela cheia", + "logout": "Sair", + "onlineUsers": "Usuários online", + "emulatorOnline": "Emulador online", + "emulatorOffline": "Emulador offline", + "dragToMove": "Arraste para mover", + "hide": "Ocultar barra", + "fullscreenExit": "Sair da tela cheia", + "show": "Mostrar barra", + "emulatorUnknown": "Estado do emulador desconhecido" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Diagnóstico dos ficheiros", + "preliminary": "Verificação preliminar dos endereços; o conteúdo será validado na importação.", + "http": "HTTP {status}", + "network": "Falha na ligação", + "timeout": "A fonte não respondeu a tempo", + "invalidResponse": "A fonte devolveu uma página em vez de um ficheiro", + "available": "Ficheiro encontrado; aguarda validação", + "recover": "Anexar original e retomar", + "recoveryHint": "Escolha {file} (até 50 MB). A identidade é verificada. Os itens com falha são repetidos; as importações concluídas são preservadas.", + "attach": "Escolher o ficheiro .nitro original", + "working": "A validar ou retomar...", + "attached": "Original correspondente anexado", + "resume": "Retomar importações com falha usando este ficheiro", + "invalidFile": "Escolha um .nitro original correspondente de até 50 MB e tente novamente.", + "resumeError": "Atualize o histórico e use a última tentativa; verifique o ficheiro e tente novamente.", + "mismatchedFile": "Este ficheiro pertence a outro móvel.", + "alreadyStarted": "A recuperação já começou. Atualize o histórico e use a última tentativa.", + "notEligible": "Este item não permite recuperação por anexo." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/ro.json b/src/messages/ro.json index ee706133..652748db 100644 --- a/src/messages/ro.json +++ b/src/messages/ro.json @@ -1,3918 +1,4913 @@ { - "draftRecovery": { - "ready": "O copie de recuperare va fi păstrată în acest browser timp de 7 zile.", - "saved": "Copia de recuperare a fost salvată în acest browser pentru 7 zile.", - "unavailable": "Recuperarea în browser nu este disponibilă. Păstrează această pagină deschisă până când modificările sunt salvate.", - "found": "În acest browser este disponibilă o copie de recuperare, salvată la", - "restore": "Restaurează copia din browser", - "discard": "Șterge copia din browser", - "confirmRestore": "Înlocuiești formularul actual cu copia de recuperare din browser? Verifică conținutul înainte de salvare.", - "confirmDiscard": "Ștergi această copie de recuperare din browser? Formularul actual va rămâne neschimbat." - }, - "nav": { - "home": "Acasă", - "community": "comunitate", - "articles": "Articole", - "photos": "Fotografii", - "staff": "Personalul", - "rankings": "Clasamente", - "guilds": "Breslele", - "leaderboards": "Clasamente", - "rareValues": "Valori rare", - "shop": "Magazin", - "market": "Piata", - "assistance": "Asistență", - "helpCenter": "Centru de ajutor", - "myTickets": "Biletele mele", - "badges": "Ecusoane", - "radio": "Radio", - "friends": "Prieteni", - "messages": "Mesaje", - "admin": "Admin", - "openMenu": "Deschide meniul", - "closeMenu": "Închide meniul", - "drawBadge": "Trage insigna", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} online", - "nitroClient": "Client Nitro", - "tagline": "O lume virtuală online în care poți să-ți creezi propriul avatar, să-ți faci prieteni, să chat, să creezi camere și multe altele!", - "login": "Autentificare", - "or": "Sau", - "createAccount": "Creați un cont" - }, - "footer": { - "copyright": "© {year} - {hotel} este un proiect educațional fără scop lucrativ" - }, - "pages": { - "staff": { - "title": "Personalul", - "subtitle": "Echipa din spatele hotelului", - "ranksTitle": "Ranguri", - "ranksSubtitle": "De ce are grijă fiecare parte a echipei", - "membersTitle": "Membrii echipei", - "membersEmptySubtitle": "Nimeni pentru a arăta acum", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "Nici un membru al personalului de arătat.", - "colUsername": "Nume de utilizator", - "colRank": "Rang", - "colMotto": "Motto" - }, - "leaderboard": { - "title": "Clasament", - "subtitle": "Top 20 de jucători după {currency}", - "tab_credits": "Credite", - "tab_diamonds": "Diamante", - "tab_duckets": "Duckets", - "tab_achievement": "Realizări", - "tab_respects": "Respecte", - "tab_onlinetime": "Timp online", - "emptyState": "Nu există clasamente de afișat încă.", - "colAvatar": "Avatar", - "colPlayer": "Jucător" - }, - "friends": { - "title": "Prieteni", - "emptySubtitle": "Nu ai niciun prieten adăugat încă", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Adăugați prieteni în hotel și aceștia vor apărea aici.", - "noMotto": "Niciun 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": "Mesaje", - "subtitle": "Solicitări de prietenie și mesaje offline vă așteaptă", - "requestsTitle": "Cereri de prietenie", - "requestsEmptySubtitle": "Nimeni nu a cerut încă să fie prietenul tău", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "Nu există solicitări de prietenie în așteptare.", - "wantsToBeFriend": "vrea să fie prietenul tău.", - "accept": "Acceptați", - "offlineTitle": "Mesaje offline", - "offlineEmptySubtitle": "Căsuța dvs. de e-mail este goală", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "Nu aveți mesaje offline.", - "unknownUser": "Utilizatorul #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Niciun motto", - "statRank": "Rang", - "statCredits": "Credite", - "statRegistered": "Înregistrat", - "badgesTitle": "Ecusoane", - "badgesEmpty": "Nicio insignă încă.", - "photosTitle": "Fotografii", - "photosEmpty": "Nicio fotografie încă.", - "guestbookTitle": "Cartea de oaspeti", - "guestbookSubtitle": "Mesaje pe peretele lui {username}", - "leaveMessage": "Lasă un mesaj", - "guestbookPlaceholder": "Scrie ceva în cartea de oaspeți a lui {username}...", - "post": "Postează", - "loginToPost": "Conectați-vă pentru a lăsa un mesaj în cartea de oaspeți.", - "guestbookEmpty": "Nicio intrare în cartea de oaspeți încă.", - "unknownUser": "Utilizatorul #{id}", - "statDuckets": "Duckets", - "statDiamonds": "Diamante", - "walletTitle": "Portofel", - "friendsTitle": "Prieteni", - "friendsSubtitle": "Oamenii din hotelul cu care ies", - "friendsEmpty": "Nu există prieteni de arătat.", - "roomsTitle": "Camerele", - "roomsSubtitle": "Camerele pe care le dețin", - "roomsEmpty": "Nu există camere de afișat.", - "roomUntitled": "Cameră fără titlu", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Clasamente", - "subtitle": "Primii 12 jucători clasați după credite", - "emptyState": "Nu există încă jucători de clasat." - }, - "home": { - "welcome": "Bun venit la {hotelName}", - "welcomeSubtitle": "Hotelul tău retro, acum dezvoltat de Next.js", - "welcomeBody": "Ieșiți, strângeți mobilier și întâlniți-vă cu prietenii.", - "enterHotel": "Introdu {hotelName}", - "onlineFriends": "Prieteni online", - "noFriendsOnline": "Fără prieteni online", - "register": "ÎNREGISTREAZĂ-TE ACUM", - "joinNow": "Alăturați-vă {hotelName} astăzi!", - "recentUsers": "Utilizatori recenti", - "recentPhotos": "Fotografii recente", - "latestNews": "Ultimele știri", - "newsTitle": "Ultimele știri", - "newsSubtitle": "Proaspăt de la hotel", - "allNews": "Toate știrile →", - "allUsers": "Comunitate →", - "noArticles": "Încă nu există articole.", - "noPhotos": "Nicio fotografie încă.", - "noUsers": "Niciun utilizator online", - "latestArticle": "Ultimul articol", - "latestUsers": "Cei mai noi cetățeni ({count} total)", - "statsOnline": "Online", - "statsCitizens": "Cetățeni", - "statsRooms": "Camere", - "statsArticles": "Articole", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Creează-ți aspectul unic", - "featuresFurniture": "Mobilier", - "featuresFurnitureDesc": "Decorează camere cu obiecte", - "featuresCommunity": "Comunitate", - "featuresCommunityDesc": "Fă-ți prieteni și discută", - "featuresGames": "Jocuri", - "featuresGamesDesc": "Concurează și distrează-te" - }, - "news": { - "title": "Știri", - "subtitle": "Cele mai recente anunțuri, evenimente și actualizări de la hotel", - "noArticles": "Încă nu există articole." - }, - "article": { - "backToNews": "← Știri", - "reactionsTitle": "Reacții", - "reactionsSubtitle": "Spune-ne ce crezi", - "reaction": { - "like": "Ca", - "love": "Dragoste", - "wow": "Uau!" - }, - "removeReaction": "Faceți clic pentru a elimina reacția", - "reactWith": "Reacționează cu {reaction}", - "noReactions": "Nicio reacție încă.", - "logIn": "Conectați-vă", - "toReact": "a reactiona.", - "commentsTitle": "Comentarii", - "commentsSubtitle": "Alăturați-vă conversației", - "commentsCount": "{count} până acum", - "noComments": "Niciun comentariu încă. Fii primul care comentează.", - "userNumber": "Utilizatorul #{id}", - "addComment": "Adaugă un comentariu", - "commentPlaceholder": "Scrie comentariul tau...", - "postComment": "Postează comentariu", - "toComment": "sa lasi un comentariu.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Fotografii", - "subtitle": "Ultimele instantanee făcute în hotel", - "noPhotos": "Nicio fotografie încă.", - "photoAlt": "Fotografie realizată de utilizatorul #{id}", - "byUser": "de utilizatorul #{id}" - }, - "badges": { - "title": "Ecusoane", - "subtitle": "Insignele pe care le poți câștiga și arăta în jurul hotelului", - "noBadges": "Nu există încă insigne disponibile." - }, - "community": { - "title": "comunitate", - "subtitle": "Totul se întâmplă în jurul hotelului într-un singur loc", - "open": "Deschide →", - "links": { - "rankings": { - "title": "Clasamente", - "text": "Vedeți cei mai bogați jucători din hotel, clasificați în funcție de credite." - }, - "staff": { - "title": "Personalul", - "text": "Faceți cunoștință cu echipa care face ca hotelul să funcționeze în fiecare zi." - }, - "news": { - "title": "Știri", - "text": "Cele mai recente anunțuri, evenimente și actualizări." - }, - "photos": { - "title": "Fotografii", - "text": "Instantanee distribuite de comunitate din jurul hotelului." - }, - "guilds": { - "title": "Breslele", - "text": "Răsfoiți grupurile pe care jucătorii le-au creat și s-au alăturat." - }, - "leaderboards": { - "title": "Clasamente", - "text": "Cine este în top în acest sezon în statisticile hotelului." - } - } - }, - "guilds": { - "title": "Breslele", - "subtitle": "Răsfoiți grupurile pe care jucătorii le-au creat și s-au alăturat", - "empty": "Încă nu există bresle.", - "unnamedGuild": "Breasla fără nume", - "noDescription": "Fără descriere" - }, - "guild": { - "allGuilds": "← Toate breslele", - "unnamedGuild": "Breasla fără nume", - "noDescription": "Fără descriere", - "memberSingular": "Membru", - "memberPlural": "Membrii", - "founded": "Fondat", - "forumLink": "Forum →", - "discussion": "Discuție", - "membersTitle": "Membrii", - "memberLowerSingular": "membru", - "memberLowerPlural": "membrii", - "noMembers": "Niciun membru.", - "owner": "Proprietar", - "noMotto": "Niciun motto" - }, - "guildForum": { - "backToGuild": "← Înapoi la breaslă", - "unnamedGuild": "Breasla fără nume", - "forumTitle": "{guild} — Forum", - "threadSingular": "fir", - "threadPlural": "fire", - "newThread": "+ thread nou", - "empty": "Încă nu există subiecte în acest forum.", - "colSubject": "Subiect", - "colAuthor": "autor", - "colPosts": "Postări", - "colDate": "Data", - "noSubject": "(fara subiect)", - "pinned": "Fixat", - "locked": "Blocat", - "userNumber": "Utilizatorul #{id}", - "unknown": "Necunoscut", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Înapoi la forum", - "unnamedGuild": "Breasla fără nume", - "title": "Un fir nou", - "subtitle": "pe forumul {guild}", - "subjectLabel": "Subiect", - "subjectPlaceholder": "Subiectul firului", - "messageLabel": "Mesaj", - "messagePlaceholder": "Scrieți postarea de deschidere...", - "postThread": "Postează subiectul", - "cancel": "Anulează", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Magazin", - "subtitle": "Încărcați-vă contul și luați pachete exclusive, monedă și insigne.", - "browsingCategory": "Răsfoind pachetele {category}.", - "all": "Toate", - "allPackages": "Toate pachetele", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "Nu există pachete disponibile momentan.", - "buy": "Cumpără", - "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": "Încărcați cu PayPal", - "subtitle": "Plătiți în siguranță cu PayPal și creditele dvs. sunt adăugate în momentul în care plata este validată.", - "cancelled": "Finalizarea a fost anulată — nu a fost efectuată nicio plată.", - "chooseAmount": "Alegeți o sumă", - "notConfiguredPre": "PayPal nu este încă configurat. Un administrator trebuie să seteze", - "notConfiguredAnd": "şi", - "notConfiguredOptional": "(și opțional", - "notConfiguredPost": "pentru sandbox vs live).", - "balanceTitle": "Bilanțul tău", - "signedInAs": "Conectat ca {username}", - "credits": "Credite", - "creditsPerUnit": "Credite pentru 1,00 {currency}", - "rateLine": "Primiți {amount} credite pentru 1,00 {currency}. Creditele apar în joc data viitoare când vă conectați." - }, - "marketplace": { - "title": "Piața", - "subtitle": "Răsfoiți mobilierul și obiectele rare listate de jucători. Listările sunt plasate în joc și se actualizează în direct - intră în hotel pentru a face o ofertă.", - "activeOffers": "Oferte active", - "sellers": "Vânzători", - "totalValue": "Valoarea totală", - "activeListings": "Listări active", - "mostRecentFirst": "Cel mai recent listat primul", - "empty": "Nu există oferte active pe piață în acest moment. Reveniți mai târziu.", - "colOffer": "Oferta", - "colItem": "Articol", - "colSeller": "Vânzător", - "colPrice": "Preț", - "colListed": "Listată", - "itemLabel": "Elementul #{id}", - "userLabel": "Utilizatorul #{id}", - "justNow": "tocmai acum", - "minutesAgo": "acum {count} m", - "hoursAgo": "acum {count} h", - "daysAgo": "acum {count} zile" - }, - "rares": { - "title": "Valori rare", - "subtitle": "Obțineți o privire de ansamblu asupra tuturor articolelor rare de pe hotel, grupate pe categorii.", - "empty": "În prezent, nu avem rare enumerate aici.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Vezi rareri →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Toate rarele", - "empty": "Nu există încă rarele enumerate în această categorie.", - "colRare": "Rar", - "colCredits": "Credite", - "colCurrency": "Moneda", - "creditsValue": "{value} credite", - "duckets": "Duckets", - "diamonds": "Diamante", - "credits": "Credite" - }, - "redeem": { - "title": "Valorificați un voucher", - "subtitle": "Ai un cod voucher? Introduceți-l mai jos pentru a adăuga recompensa în contul dvs.", - "enterCode": "Introduceți codul dvs", - "oncePerAccount": "Fiecare voucher poate fi valorificat o singură dată pe cont.", - "balanceTitle": "Bilanțul tău", - "signedInAs": "Conectat ca {username}", - "credits": "Credite", - "instantCredit": "Recompensele răscumpărate sunt creditate instantaneu și apar în joc data viitoare când vă conectați." - }, - "help": { - "title": "Centrul de ajutor", - "subtitle": "Găsiți ghiduri, subiecte de asistență și regulile hotelului - tot ce aveți nevoie pentru a obține ajutor.", - "myTickets": "Biletele mele →", - "topicsTitle": "Subiecte suport", - "topicsSubtitle": "Răsfoiți ghiduri și răspunsuri la întrebări frecvente", - "topicsEmpty": "Încă nu există subiecte de ajutor.", - "rulesTitle": "Regulile hotelului", - "rulesSubtitle": "Vă rugăm să citiți acestea înainte de a petrece timpul la hotel", - "rulesEmpty": "Nu au fost publicate reguli încă.", - "categoryEmpty": "Nu există reguli în această categorie." - }, - "helpCategory": { - "back": "← Centrul de ajutor", - "topicSubtitle": "Subiect din Centrul de ajutor", - "moreTitle": "Mai multe subiecte de ajutor", - "moreSubtitle": "Treceți la un alt subiect de asistență" - }, - "helpTickets": { - "title": "Bilete de ajutor", - "subtitle": "Trimiteți un bilet personalului și urmăriți-vă cererile deschise.", - "statTotal": "Total bilete", - "statOpen": "Deschide", - "statClosed": "Închis", - "newTitle": "Bilet nou", - "newSubtitle": "Descrieți problema dvs. și personalul vă va urmări", - "subjectPlaceholder": "Subiect", - "contentPlaceholder": "Descrieți problema dvs....", - "submit": "Trimite biletul", - "listTitle": "Biletele tale", - "listSubtitle": "Fiecare cerere pe care ați trimis-o personalului", - "listEmpty": "Încă nu aveți bilete.", - "colId": "ID", - "colSubject": "Subiect", - "colStatus": "Stare", - "colCreated": "Creat", - "statusOpen": "Deschide", - "statusClosed": "Închis", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Aplicați pentru personalul {hotel}", - "subtitle": "Deschidem cereri de personal din când în când. Dacă întâlniți o poziție în care simțiți că v-ați potrivi perfect, nu ezitați să aplicați pentru ea.", - "noPositionsTitle": "Nicio poziție deschisă", - "noPositionsBody": "Momentan nu sunt posturi deschise. Vă rugăm să reveniți mai târziu pentru a verifica dacă avem vreo deschidere până atunci. Vă mulțumim pentru interes.", - "noDeadline": "Nici un termen limită stabilit", - "deadline": "Termen limită pentru înscriere: {date}", - "alreadyApplied": "Ați aplicat deja pentru {rank}", - "aboutYou": "Despre tine", - "aboutPlaceholder": "Spune-ne de ce ai fi un {rank} grozav...", - "applyFor": "Aplicați pentru {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": "Aplicați pentru echipa {hotel}", - "subtitle": "Deschidem periodic aplicații de echipă. Dacă vezi o echipă potrivită, nu ezita să aplici!", - "noPositionsTitle": "Nicio poziție de echipă deschisă", - "noPositionsBody": "În prezent, nu există posturi de echipă deschise. Vă rugăm să reveniți mai târziu pentru a verifica dacă există noi deschideri. Multumesc!", - "pending": "Aplicația dvs. este în așteptare", - "aboutYou": "Despre tine", - "aboutPlaceholder": "Spune-ne de ce ai fi potrivit pentru {rank}...", - "applyFor": "Aplicați pentru {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": "Conectați-vă la radioul hotelului - seturi de DJ live, solicitări și strigări.", - "nowPlaying": "Acum joacă", - "nothingPlaying": "Nu se joacă nimic acum.", - "onAir": "În emisie: {dj}", - "noDj": "Fără DJ în aer.", - "audioUnsupported": "Browserul dvs. nu acceptă elementul audio.", - "streamOffline": "Fluxul este momentan offline.", - "exploreTitle": "Explorează radioul", - "exploreSubtitle": "Program, strigăte, solicitări și multe altele", - "linkSchedule": "Program", - "linkScheduleText": "Gama noastră săptămânală de DJ și spectacole.", - "linkShouts": "Strigăte", - "linkShoutsText": "Urle și solicitări din partea comunității.", - "linkRequests": "Cereri", - "linkRequestsText": "Cereți-i DJ-ului să rotească piesa dvs. preferată.", - "linkApply": "Aplicați ca DJ", - "linkApplyText": "Alăturați-vă echipei și accesați undele.", - "linkLeaderboard": "Clasament", - "linkLeaderboardText": "Cei mai buni ascultători clasați în funcție de punctele câștigate.", - "todayTitle": "Programul de azi", - "todayTitleWithDay": "Programul de astăzi · {day}", - "todaySubtitle": "Ce este pe undele de azi", - "fullWeek": "Săptămâna întreagă →", - "noShowsToday": "Nu sunt programate spectacole pentru astăzi.", - "colTime": "timpul", - "colShow": "Arată", - "colDj": "DJ", - "untitledShow": "Emisiune fără titlu", - "userNumber": "Utilizatorul #{id}" - }, - "radioSchedule": { - "title": "Program radio", - "subtitle": "Gama noastră săptămânală de DJ și spectacole", - "empty": "Încă nu sunt programate spectacole.", - "colDay": "Ziua", - "colTime": "timpul", - "colDj": "DJ", - "colShow": "Arată", - "noShows": "Fără spectacole" - }, - "radioShouts": { - "title": "Strigăte radio", - "subtitle": "Urle și solicitări din partea comunității", - "postTitle": "Postează un strigăt", - "postSubtitle": "Trimite un mesaj DJ-ului în emisie", - "messageLabel": "Mesajul dvs", - "messagePlaceholder": "Trimite un strigăt DJ-ului...", - "shoutButton": "Strigă", - "loginToPost": "Conectați-vă pentru a posta un strigăt.", - "latestTitle": "Ultimele strigăte", - "latestSubtitle": "Cele mai recente mesaje de la ascultători", - "empty": "Niciun strigăt încă. Fii primul!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Concursuri Radio", - "subtitle": "Conectați-vă și participați la cele mai recente concursuri online", - "empty": "Încă nu există concursuri.", - "contestLabel": "Concursul #{id}", - "dateUnknown": "Data necunoscută" - }, - "radioGiveaways": { - "title": "Giveaways radio", - "subtitle": "Ascultă-ți șansa de a câștiga în cadourile noastre radio", - "empty": "Nu există încă cadouri.", - "giveawayLabel": "Giveaway #{id}", - "dateUnknown": "Data necunoscută" - }, - "radioLeaderboard": { - "title": "Clasamentul ascultătorilor de radio", - "subtitle": "Top 50 de ascultători în funcție de punctele câștigate la radio", - "empty": "Niciun punct de ascultător încă de afișat.", - "colRank": "Rang", - "colAvatar": "Avatar", - "colListener": "Ascultător", - "colPoints": "Puncte" - }, - "radioRequests": { - "formTitle": "Trimiteți o cerere", - "formSubtitle": "Cereți DJ-ului să redă melodia preferată", - "songLabel": "Cântec", - "songPlaceholder": "Titlul melodiei", - "artistLabel": "Artist", - "artistPlaceholder": "Numele artistului (opțional)", - "submitButton": "Trimiteți cererea", - "loginToRequest": "Conectați-vă pentru a trimite o cerere.", - "latestTitle": "Cereri recente", - "latestSubtitle": "Cele mai recente melodii solicitate", - "empty": "Nicio solicitare încă.", - "colSong": "Cântec", - "colArtist": "Artist", - "colRequester": "Solicitantul", - "colDate": "Data", - "colStatus": "Stare", - "statusPending": "În așteptare", - "statusApproved": "Aprobat", - "statusPlayed": "Jucat", - "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": "Aplicați pentru a fi DJ Radio", - "subtitle": "Povestește-ne despre tine și de ce ai fi potrivit pentru undele radio", - "latestTitle": "Cea mai recentă aplicație", - "statusLabel": "Stare:", - "submittedOn": "· trimis la {date}", - "submitAgain": "Puteți trimite din nou mai jos dacă detaliile dvs. s-au schimbat.", - "formTitle": "Formular de cerere", - "formSubtitle": "Toate câmpurile marcate ca obligatorii trebuie completate", - "realNameLabel": "Nume adevărat", - "realNamePlaceholder": "Numele tău complet", - "ageLabel": "Vârsta", - "availabilityLabel": "Disponibilitate", - "availabilityPlaceholder": "În ce zile și ore puteți transmite?", - "musicStyleLabel": "Stilul muzical", - "musicStylePlaceholder": "de ex. House, Pop, Hip-Hop", - "experienceLabel": "Experiență", - "optional": "(optional)", - "experiencePlaceholder": "Vreo experiență anterioară de DJ sau hosting?", - "motivationLabel": "Motivația", - "motivationPlaceholder": "De ce vrei să te alături echipei radio?", - "submitButton": "Trimiteți cererea", - "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": "Setările contului", - "accountSettingsSubtitle": "Gestionați-vă profilul, securitatea și conturile conectate", - "publicProfile": "Profilul dvs. public", - "noMotto": "Niciun motto", - "noEmail": "Niciun e-mail în dosar", - "changeMotto": "Schimbați motto-ul", - "changeMottoSubtitle": "Actualizări instantanee în joc dacă ești online", - "mottoPlaceholder": "Motto-ul tău", - "saveMotto": "Salvați motto-ul", - "securityTitle": "Securitate", - "securitySubtitle": "Autentificare cu doi factori", - "securityDescription": "Adăugați un al doilea nivel de protecție contului dvs.", - "twoFactorLink": "Autentificare cu doi factori" - }, - "settings2fa": { - "backToSettings": "← Setări", - "title": "Autentificare cu doi factori", - "subtitle": "Adăugați un al doilea nivel de securitate cu o aplicație de autentificare", - "nowEnabled": "2FA este acum activat. 🔒", - "disabledNotice": "2FA a fost dezactivat.", - "badCode": "Codul acela nu era valid - încercați din nou.", - "noAppKeyPrefix": "2FA este indisponibil până la", - "noAppKeyMiddle": "este configurat (același Laravel", - "noAppKeySuffix": "pe măsură ce se instalează AtomCMS, astfel încât secretele existente rămân lizibile).", - "isEnabled": "2FA este activat", - "onYourAccount": "pe contul dvs.", - "disable": "Dezactivați 2FA", - "scanOrEnter": "Scanați sau introduceți această cheie", - "scanInstructions": "Adăugați acest lucru în Google Authenticator/Authy, apoi introduceți codul din 6 cifre pentru a confirma.", - "manualKey": "Cheie manuală:", - "codePlaceholder": "cod din 6 cifre", - "confirm": "Confirmați", - "enableIntro": "Adăugați un al doilea nivel de securitate cu o aplicație de autentificare.", - "enable": "Activați 2FA" - }, - "title": "Conturi conectate", - "subtitle": "Conectați un cont social pentru a vă putea conecta cu un singur clic", - "connected": "Conectat", - "unavailable": "Indisponibil", - "login": { - "title": "Conectați-vă", - "subtitle": "Bine ați revenit - conectați-vă pentru a intra în hotel.", - "subtitle2fa": "Introdu codul din 6 cifre de la autentificatorul tău.", - "usernamePlaceholder": "Nume de utilizator", - "passwordPlaceholder": "Parolă", - "codePlaceholder": "cod 2FA", - "pleaseWait": "Vă rugăm să așteptați…", - "verify": "Verificați", - "signIn": "Conectați-vă", - "or": "sau", - "noAccount": "Fără cont?", - "createOne": "Creați unul", - "forgotPassword": "Ai uitat parola?", - "errorInvalidCredentials": "Nume de utilizator sau parolă nevalidă", - "errorInvalid2fa": "Cod 2FA nevalid", - "welcomeBack": "Bine ai revenit", - "welcomeBackSub": "Autentifică-te pentru a continua pe {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Creați cont", - "subtitle": "Alăturați-vă la hotel - durează doar un moment.", - "username": "Nume de utilizator", - "email": "E-mail", - "password": "Parolă", - "confirmPassword": "Repetați parola", - "usernamePlaceholder": "Nume de utilizator", - "emailPlaceholder": "E-mail", - "passwordPlaceholder": "Parola (min 6 caractere)", - "confirmPasswordPlaceholder": "Repetați parola", - "selectOutfit": "Alege-ți ținuta", - "termsAccept": "Am peste 18 ani și accept termenii și regulile {hotel}.", - "createAccount": "Creați cont", - "creatingAccount": "Se creează cont...", - "redirecting": "Se redirecționează către contul tău...", - "alreadyHaveAccount": "Aveți deja un cont? Log in!", - "register": "Înregistrează-te", - "termsError": "Trebuie să acceptați termenii și regulile pentru a vă înregistra.", - "usernameError": "Numele de utilizator este obligatoriu.", - "emailError": "Este necesar un e-mail valid.", - "passwordError": "Parola trebuie să aibă cel puțin 6 caractere.", - "confirmPasswordError": "Parolele nu se potrivesc.", - "termsRequired": "Trebuie să acceptați termenii și regulile.", - "usernameRequired": "Numele de utilizator este obligatoriu.", - "emailRequired": "E-mailul este obligatoriu.", - "passwordRequired": "Parola este necesară.", - "passwordsDontMatch": "Parolele nu se potrivesc.", - "alreadyHaveAccountPre": "Ai deja un cont?", - "alreadyHaveAccountLink": "Autentificare", - "whoIsOnline": "Cine este online", - "usersOnline": "{count} online" - }, - "forgot": { - "title": "Resetează parola", - "subtitle": "Vă vom trimite prin e-mail un link securizat pentru a seta o nouă parolă.", - "sentNotice": "Dacă acel e-mail este înregistrat, a fost trimis un link de resetare. Verificați-vă căsuța de e-mail.", - "emailPlaceholder": "E-mailul dvs", - "sendResetLink": "Trimite linkul de resetare", - "backToLogin": "Înapoi la autentificare", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Setați o nouă parolă", - "subtitle": "Alegeți o parolă puternică pe care nu o utilizați în altă parte.", - "passwordPlaceholder": "Parolă nouă (min 6 caractere)", - "resetPassword": "Resetează parola", - "backToLogin": "Înapoi la autentificare" - }, - "verify": { - "verifiedTitle": "Ești gata", - "verifiedSubtitle": "E-mail verificat", - "verifiedBody": "Adresa dvs. de e-mail a fost verificată. Acum vă puteți autentifica și juca.", - "goToLogin": "Accesați autentificare", - "alreadyTitle": "Deja verificat", - "alreadySubtitle": "Nu mai rămâne nimic de făcut", - "alreadyBody": "Această adresă de e-mail a fost deja confirmată.", - "unavailableTitle": "Încercați din nou în scurt timp", - "unavailableSubtitle": "Server inaccesibil", - "unavailableBody": "Nu am putut ajunge la server pentru a vă verifica adresa de e-mail. Vă rugăm să reîncercați linkul peste un moment.", - "invalidTitle": "Verificare e-mail", - "invalidSubtitle": "Link nevalid sau expirat", - "invalidBody": "Acest link de verificare nu este valid. Asigurați-vă că ați deschis linkul complet din e-mailul dvs. sau solicitați unul nou.", - "backToLogin": "Înapoi la autentificare" - }, - "banned": { - "title": "Esti interzis", - "subtitle": "Cont suspendat", - "body": "Contul dvs. a fost suspendat de la hotel.", - "reasonLabel": "Motiv:", - "permanent": "Această interdicție este permanentă.", - "expires": "Expiră la {date}.", - "contactStaff": "Dacă credeți că aceasta este o greșeală, contactați echipa de personal." - }, - "maintenance": { - "title": "{hotel} este în întreținere", - "subtitle": "Ne vom întoarce în curând", - "staffCanLogIn": "Personalul se poate conecta în continuare." - }, - "admin": { - "nav": { - "overview": "Prezentare generală", - "dashboard": "Tabloul de bord", - "content": "Conținut", - "articles": "Articole", - "tags": "Etichete", - "navigator": "Navigator", - "helpCenter": "Centru de ajutor", - "advertisements": "Reclame", - "writeableBoxes": "Cutii care pot fi scrise", - "photos": "Fotografii", - "tickets": "bilete", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Utilizatori și acces", - "users": "Utilizatori", - "bans": "Interdicții", - "ipManagement": "managementul IP", - "vpn": "VPN", - "applications": "Aplicații", - "teams": "Echipe", - "permissions": "Permisiuni", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Economie", - "catalog": "Catalog", - "shop": "Magazin", - "transactions": "Tranzacții", - "vouchers": "Vouchere", - "subscriptions": "Abonamente", - "rareValues": "Valori rare", - "badges": "Ecusoane", - "achievements": "Realizări", - "calendar": "Calendar", - "radio": "Radio", - "radioHistory": "Istoria radioului", - "radioBanners": "Bannere", - "radioEmbed": "Încorporați", - "radioApiKeys": "Chei API", - "radioModeration": "Moderație", - "radioSettings": "Setări", - "radioMonitoring": "Monitorizare", - "radioPoints": "Puncte", - "radioRanks": "Ranguri", - "radioAutodj": "Auto DJ", - "system": "Sistem", - "commandocentrum": "Commandocentrum", - "emulator": "Emulator", - "alerts": "Alerte", - "logs": "Bușteni", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Filtru de cuvinte", - "maintenance": "Întreținere", - "rooms": "Camerele", - "emailTemplates": "Șabloane de e-mail", - "theme": "Temă", - "media": "Media", - "favicon": "Favicon", - "sounds": "Sunete", - "translations": "Traduceri", - "import": "Import", - "settings": "Setări", - "backToSite": "Înapoi la site", - "housekeeping": "Menaj", - "hotelManagementPanel": "Panoul de management al hotelului", - "rankLabel": "Clasament {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Tabloul de bord", - "subtitle": "Prezentare generală a hotelului și starea live", - "playersOnline": "Jucători online", - "articles": "Articole", - "activeBans": "Interdicții active", - "database": "Baza de date", - "databaseConnected": "Conectat", - "databaseDown": "Jos", - "usersByRank": "Utilizatori după rang", - "noAccountsToBreakDown": "Nu există încă conturi de defalcat", - "rankLabel": "Clasament {rank}", - "rankWithCount": "Clasament {rank}: {count} conturi", - "recentStaffActivity": "Activitate recentă a personalului", - "viewAll": "Vezi toate", - "noStaffActivityLogged": "Nu a fost înregistrată încă nicio activitate a personalului" - }, - "articles": { - "title": "Articole", - "subtitle": "Articole de știri – 50 cele mai recente", - "newArticle": "+ articol nou", - "edit": "Editați", - "delete": "Ștergeți", - "noArticles": "Încă nu există articole", - "confirmDelete": "Sigur doriți să ștergeți „{title}”?", - "colTitle": "Titlu", - "colSlug": "Limac", - "colAuthor": "autor", - "colCreated": "Creat", - "colActions": "Acțiuni", - "form": { - "title": "Titlu", - "titlePlaceholder": "Titlul articolului", - "slug": "Limac", - "slugPlaceholder": "articol-url-slug", - "category": "categorie", - "categoryPlaceholder": "Selectați o categorie", - "body": "Corpul", - "bodyPlaceholder": "Scrie conținutul articolului tău...", - "image": "Imagine", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Miniatură", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Publicat", - "featured": "Prezentare", - "save": "Salvați articolul", - "saving": "Se salvează…", - "deleteArticle": "Ștergeți articolul", - "deleteConfirm": "Această acțiune nu poate fi anulată. Articolul va fi eliminat definitiv.", - "cancel": "Anulează", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Etichete", - "subtitle": "Etichete / categorii de articole", - "addTag": "Adăugați etichetă", - "name": "Nume", - "namePlaceholder": "Numele etichetei", - "backgroundColour": "Culoare de fundal", - "createTag": "Creați etichetă", - "editTag": "Editați eticheta", - "updateTag": "Actualizați eticheta", - "deleteTag": "Ștergeți eticheta", - "confirmDelete": "Ștergeți „{name}”?", - "noTags": "Nicio etichetă încă", - "colId": "ID", - "colTag": "Etichetați", - "colColour": "Culoare", - "colUsedBy": "Folosit de", - "colCreated": "Creat", - "colActions": "Acțiuni" - }, - "navigation": { - "title": "Navigator", - "flatCategories": "Categorii plate", - "publicRooms": "Camere publice", - "addCategory": "Adăugați o categorie", - "editCategory": "Editați categoria", - "deleteCategory": "Ștergeți categoria", - "categoryName": "Numele categoriei", - "categoryNamePlaceholder": "de ex. Chill & Chat", - "categoryOrder": "Comanda", - "roomName": "Numele camerei", - "roomNamePlaceholder": "de ex. Salonul de bun venit", - "roomId": "ID-ul camerei", - "roomIdPlaceholder": "ID-ul numeric al camerei", - "save": "Salvați", - "cancel": "Anulează", - "noCategories": "Nicio categorie încă", - "noPublicRooms": "Încă nu există încăperi publice", - "colId": "ID", - "colName": "Nume", - "colOrder": "Comanda", - "colRooms": "Camerele", - "colActions": "Acțiuni" - }, - "helpCenter": { - "title": "Centrul de ajutor", - "subtitle": "Intrări de asistență și gestionarea întrebărilor frecvente", - "entries": "Intrări", - "newEntry": "+ Intrare nouă", - "edit": "Editați", - "delete": "Ștergeți", - "noEntries": "Nicio intrare încă", - "confirmDelete": "Ștergeți „{title}”?", - "colId": "ID", - "colTitle": "Titlu", - "colCategory": "categorie", - "colCreated": "Creat", - "colActions": "Acțiuni", - "form": { - "title": "Titlu", - "titlePlaceholder": "Titlul intrării", - "category": "categorie", - "categoryPlaceholder": "Selectați categoria", - "body": "Corpul", - "bodyPlaceholder": "Scrie raspunsul...", - "save": "Salvați intrarea", - "saving": "Se salvează…", - "deleteEntry": "Ștergeți intrarea", - "cancel": "Anulează" - } - }, - "ads": { - "title": "Reclame", - "subtitle": "Gestionați reclame la hotel și bannere promoționale", - "newAd": "+ Anunț nou", - "edit": "Editați", - "delete": "Ștergeți", - "noAds": "Nicio reclamă încă", - "confirmDelete": "Ștergeți acest anunț?", - "colId": "ID", - "colName": "Nume", - "colImage": "Imagine", - "colUrl": "URL", - "colViews": "Vizualizări", - "colStatus": "Stare", - "colCreated": "Creat", - "colActions": "Acțiuni", - "form": { - "name": "Nume", - "namePlaceholder": "Numele anunțului", - "image": "Adresa URL a imaginii", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Adresa URL țintă", - "urlPlaceholder": "https://example.com", - "enabled": "Activat", - "save": "Salvați anunțul", - "saving": "Se salvează…", - "deleteAd": "Șterge anunțul", - "cancel": "Anulează" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Cutii inscriptibile", - "subtitle": "Panouri de conținut afișate în hotel și CMS", - "newBox": "Cutie noua", - "edit": "Editați", - "delete": "Ștergeți", - "noBoxes": "Încă nu există casete care pot fi scrise", - "confirmDelete": "Ștergeți această casetă?", - "colId": "ID", - "colName": "Nume", - "colLocation": "Locație", - "colUpdated": "Actualizat", - "colActions": "Acțiuni", - "form": { - "name": "Nume", - "namePlaceholder": "Numele casetei", - "location": "Locație", - "locationPlaceholder": "de ex. pagina de pornire, bara laterală", - "content": "Conținut", - "contentPlaceholder": "Scrieți conținutul casetei...", - "enabled": "Activat", - "save": "Caseta de salvare", - "saving": "Se salvează…", - "deleteBox": "Șterge caseta", - "cancel": "Anulează" - } - }, - "photos": { - "title": "Moderare foto", - "subtitle": "Fotografii recente ale camerei din joc", - "delete": "Ștergeți", - "approve": "Aprobați", - "noPhotos": "Nicio fotografie de moderat", - "confirmDelete": "Ștergeți definitiv această fotografie?", - "colId": "ID", - "colPreview": "Previzualizare", - "colUser": "Utilizator", - "colRoom": "Cameră", - "colTimestamp": "Marca temporală", - "colActions": "Acțiuni", - "photoAlt": "Fotografia utilizatorului #{id}", - "byUser": "de {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Utilizatori", - "subtitle": "Răsfoiți, căutați și gestionați conturile de hotel", - "search": "Caută", - "searchPlaceholder": "Căutați după nume de utilizator, e-mail sau ID...", - "searchResults": "{count, plural, one {# result} other {# results}} pentru „{query}”", - "noResults": "Nu s-au găsit utilizatori", - "colId": "ID", - "colUsername": "Nume de utilizator", - "colEmail": "E-mail", - "colRank": "Rang", - "colOnline": "Online", - "colRegistered": "Înregistrat", - "colLastOnline": "Ultima online", - "colActions": "Acțiuni", - "yes": "Da", - "no": "Nu", - "edit": "Editați", - "setRank": "Stabiliți rangul", - "disconnect": "Deconectați-vă", - "alert": "Alertă", - "ban": "Ban", - "detail": { - "title": "Utilizator: {username}", - "subtitle": "Detaliile contului și gestionarea", - "overview": "Prezentare generală", - "actions": "Acțiuni", - "username": "Nume de utilizator", - "email": "E-mail", - "motto": "Motto", - "rank": "Rang", - "credits": "Credite", - "duckets": "Duckets", - "diamonds": "Diamante", - "online": "Online", - "registered": "Înregistrat", - "lastOnline": "Ultima online", - "ipAddress": "adresa IP", - "machineId": "ID mașină", - "sendAlert": "Trimite alertă", - "sendMessage": "Trimite mesaj", - "disconnectUser": "Deconectați utilizatorul", - "banUser": "Ban utilizator", - "resetPassword": "Resetează parola", - "deleteUser": "Ștergeți utilizatorul", - "confirmDelete": "Sigur doriți să ștergeți {username}? Acest lucru nu poate fi anulat.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Editați utilizatorul: {username}", - "subtitle": "Modificați detaliile contului", - "username": "Nume de utilizator", - "usernamePlaceholder": "Nume de utilizator", - "email": "E-mail", - "emailPlaceholder": "utilizator@example.com", - "motto": "Motto", - "mottoPlaceholder": "Motto-ul utilizatorului", - "rank": "Rang", - "credits": "Credite", - "duckets": "Duckets", - "diamonds": "Diamante", - "save": "Salvați modificările", - "saving": "Se salvează…", - "cancel": "Anulează" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Interdicții", - "subtitle": "Gestionați interzicerea contului, a IP-ului și a mașinilor", - "newBan": "Noua interdicție", - "edit": "Editați", - "delete": "Ștergeți", - "noBans": "Încă nu există interdicții", - "confirmDelete": "Eliminați această interdicție?", - "colId": "ID", - "colValue": "Valoare", - "colType": "Tip", - "colReason": "Motivul", - "colBannedBy": "Interzis de", - "colExpires": "Expiră", - "colCreated": "Creat", - "colActions": "Acțiuni", - "form": { - "value": "Valoare", - "valuePlaceholder": "Nume de utilizator, IP sau ID mașină", - "type": "Tip", - "typeUser": "Utilizator", - "typeIp": "IP", - "typeMachine": "Masina", - "reason": "Motivul", - "reasonPlaceholder": "Bani motiv", - "expiresAt": "Expiră la", - "permanent": "Permanent", - "save": "Salvare interdicție", - "saving": "Se salvează…", - "cancel": "Anulează" - } - }, - "ip": { - "title": "Managementul IP", - "subtitle": "Gestionați lista albă și lista neagră de IP", - "whitelist": "Lista albă", - "blacklist": "Lista neagră", - "addIp": "Adăugați IP", - "ipAddress": "adresa IP", - "ipAddressPlaceholder": "de ex. 127.0.0.1", - "reason": "Motivul", - "reasonPlaceholder": "Motivul înscrierii", - "add": "Adăugați", - "remove": "Eliminați", - "confirmRemove": "Eliminați acest IP din {list}?", - "noWhitelistedIps": "Nu există IP-uri în lista albă", - "noBlacklistedIps": "Nu există IP-uri pe lista neagră", - "colIp": "IP", - "colReason": "Motivul", - "colAdded": "Adăugat", - "colActions": "Acțiuni" - }, - "vpn": { - "title": "VPN/Detecție proxy", - "subtitle": "Configurați setările VPN și de detectare a proxy-ului", - "enabled": "Activat", - "apiKey": "cheie API", - "apiKeyPlaceholder": "Cheia dvs. API de detectare VPN", - "apiKeyHint": "Lăsați gol pentru a dezactiva", - "blockOnDetect": "Blocați la detectare", - "blockOnDetectHint": "Blocați automat utilizatorii detectați în spatele unui VPN sau proxy", - "save": "Salvați setările", - "saving": "Se salvează…", - "settingsSaved": "Setările VPN au fost salvate cu succes" - }, - "applications": { - "title": "Aplicații pentru personal", - "subtitle": "Cereri de personal în așteptare și revizuite", - "pending": "În așteptare", - "approved": "Aprobat", - "rejected": "Respins", - "noApplications": "Încă nu există aplicații", - "colId": "ID", - "colApplicant": "Solicitantul", - "colPosition": "Poziție", - "colStatus": "Stare", - "colSubmitted": "Trimis", - "colActions": "Acțiuni", - "review": "Revizuire", - "approve": "Aprobați", - "reject": "Respinge", - "confirmApprove": "Aprobați {username} pentru {position}?", - "confirmReject": "Respingeți cererea lui {username} pentru {position}?", - "detail": { - "title": "Aplicație de la {username}", - "subtitle": "Pentru {position}", - "about": "Despre solicitant", - "message": "Mesajul aplicației", - "status": "Stare", - "submitted": "Trimis", - "noMessage": "Nu a fost furnizat niciun mesaj" - } - }, - "teams": { - "title": "Echipe", - "subtitle": "Definiți numele și descrierile rangului personalului", - "addRank": "Adaugă rang", - "editRank": "Editați rangul", - "deleteRank": "Ștergeți rangul", - "noTeams": "Nu există definiții de rang încă", - "confirmDelete": "Ștergeți definiția rangului {id}?", - "colId": "ID", - "colRank": "Rang", - "colName": "Nume", - "colBadge": "Insigna", - "colColour": "Culoare", - "colActions": "Acțiuni", - "form": { - "rankId": "ID de rang", - "rankIdPlaceholder": "ID de rang numeric", - "name": "Nume", - "namePlaceholder": "de ex. Administrator", - "badge": "Codul insignei", - "badgePlaceholder": "de ex. ADM001", - "colour": "Culoare", - "colourPlaceholder": "de ex. #ff0000", - "save": "Salvați definiția echipei", - "saving": "Se salvează…", - "cancel": "Anulează" - } - }, - "permissions": { - "title": "Permisiuni", - "subtitle": "Gestionați permisiunile bazate pe rang pentru panoul de administrare", - "addPermission": "Adăugați permisiunea", - "editPermission": "Permisiune de editare", - "deletePermission": "Șterge permisiunea", - "noPermissions": "Nu au fost încă configurate permisiuni", - "confirmDelete": "Ștergeți această permisiune?", - "colId": "ID", - "colRank": "Rang", - "colPermission": "Permisiune", - "colCreated": "Creat", - "colActions": "Acțiuni", - "form": { - "rankId": "ID de rang", - "rankIdPlaceholder": "Clasament minim necesar", - "permission": "Cheie de permisiune", - "permissionPlaceholder": "de ex. admin.articole.manage", - "save": "Salvați permisiunea", - "saving": "Se salvează…", - "cancel": "Anulează" - } - }, - "catalog": { - "title": "Catalog", - "subtitle": "Răsfoiți și gestionați paginile și articolele de catalog", - "pages": "Pagini", - "items": "Articole", - "addPage": "Adăugați o pagină", - "editPage": "Editați pagina", - "deletePage": "Șterge pagina", - "addItem": "Adăugați articol", - "editItem": "Editați elementul", - "deleteItem": "Ștergeți elementul", - "noPages": "Încă nu există pagini de catalog", - "noItems": "Nu există articole în această pagină", - "confirmDeletePage": "Ștergeți pagina de catalog „{name}”?", - "confirmDeleteItem": "Ștergeți acest articol?", - "colId": "ID", - "colName": "Nume", - "colIcon": "Pictogramă", - "colOrder": "Comanda", - "colItems": "Articole", - "colEnabled": "Activat", - "colActions": "Acțiuni", - "colItemId": "ID articol", - "colItemName": "Numele articolului", - "colCostCredits": "Cost (credite)", - "colCostPoints": "Cost (puncte)", - "colLimited": "Limitat", - "pageForm": { - "name": "Nume", - "namePlaceholder": "Numele paginii", - "icon": "ID-ul pictogramei", - "iconPlaceholder": "ID-ul pictogramei numerice", - "order": "Comanda", - "enabled": "Activat", - "parent": "Pagina părinte", - "parentNone": "Niciuna (rădăcină)", - "save": "Salvați pagina", - "saving": "Se salvează…", - "cancel": "Anulează" - }, - "itemForm": { - "itemId": "ID articol", - "itemName": "Numele articolului", - "costCredits": "Costul în credite", - "costDuckets": "Costul în duchete", - "costDiamonds": "Costul în diamante", - "limitedStack": "Dimensiune limitată a stivei", - "limitedSold": "Vândut limitat", - "save": "Salvați elementul", - "saving": "Se salvează…", - "cancel": "Anulează" - }, - "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." - } - }, - "shop": { - "title": "Magazin", - "subtitle": "Gestionați pachetele și comenzile", - "packages": "Pachete", - "orders": "Comenzi", - "newPackage": "+ Pachet nou", - "edit": "Editați", - "delete": "Ștergeți", - "viewOrder": "Vedeți", - "noPackages": "Nu există încă pachete pentru magazin", - "noOrders": "Încă nu există comenzi", - "confirmDelete": "Ștergeți acest pachet?", - "colId": "ID", - "colName": "Nume", - "colPrice": "Preț", - "colCurrency": "Moneda", - "colType": "Tip", - "colSold": "Vândut", - "colEnabled": "Activat", - "colActions": "Acțiuni", - "colOrderId": "ID comandă", - "colCustomer": "Client", - "colPackage": "Pachet", - "colAmount": "Suma", - "colStatus": "Stare", - "colDate": "Data", - "statusPending": "În așteptare", - "statusCompleted": "Terminat", - "statusRefunded": "Rambursat", - "form": { - "name": "Nume", - "namePlaceholder": "Numele pachetului", - "description": "Descriere", - "descriptionPlaceholder": "Descrierea pachetului", - "price": "Preț", - "currency": "Moneda", - "currencyPlaceholder": "EUR, USD, GBP...", - "type": "Tip", - "typeCredits": "Credite", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamante", - "typeBadge": "Insigna", - "typeFurni": "Mobilier", - "typeRank": "Rang", - "amount": "Suma", - "badgeCode": "Codul insignei", - "badgeCodePlaceholder": "de ex. VIP001", - "rankId": "ID de rang", - "furniItems": "Articole de mobilier", - "enabled": "Activat", - "save": "Salvați pachetul", - "saving": "Se salvează…", - "cancel": "Anulează" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Tranzacții", - "subtitle": "Jurnal de plăți PayPal", - "noTransactions": "Nicio tranzacție încă", - "colId": "ID", - "colUser": "Utilizator", - "colAmount": "Suma", - "colCurrency": "Moneda", - "colPackage": "Pachet", - "colStatus": "Stare", - "colDate": "Data", - "colActions": "Acțiuni", - "statusCompleted": "Terminat", - "statusPending": "În așteptare", - "statusFailed": "A eșuat", - "statusRefunded": "Rambursat", - "detail": { - "title": "Tranzacție #{id}", - "paypalId": "ID PayPal", - "payerEmail": "E-mailul plătitorului", - "grossAmount": "Sumă brută", - "fee": "Taxa", - "netAmount": "Suma neta" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Vouchere pentru magazin", - "subtitle": "Gestionați codurile voucher rambursabile", - "newVoucher": "+ Voucher nou", - "edit": "Editați", - "delete": "Ștergeți", - "noVouchers": "Nu există vouchere încă", - "confirmDelete": "Ștergeți voucherul „{code}”?", - "colId": "ID", - "colCode": "Cod", - "colValue": "Valoare", - "colType": "Tip", - "colUses": "Utilizări / Max", - "colExpires": "Expiră", - "colCreated": "Creat", - "colActions": "Acțiuni", - "form": { - "code": "Cod", - "codePlaceholder": "de ex. VARA 2025", - "value": "Valoare", - "type": "Tip", - "typeCredits": "Credite", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamante", - "typeBadge": "Insigna", - "typeFurni": "Mobilier", - "typeRank": "Rang", - "badgeCode": "Codul insignei", - "badgeCodePlaceholder": "de ex. VIP001", - "rankId": "ID de rang", - "maxUses": "Utilizări maxime", - "maxUsesPlaceholder": "0 = nelimitat", - "expiresAt": "Expiră la", - "enabled": "Activat", - "save": "Salvați voucherul", - "saving": "Se salvează…", - "cancel": "Anulează", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Abonamente", - "subtitle": "Abonamente recurente active", - "noSubscriptions": "Nu există abonamente active", - "cancel": "Anulează", - "confirmCancel": "Anulați abonamentul pentru {username}?", - "colId": "ID", - "colUser": "Utilizator", - "colPackage": "Pachet", - "colAmount": "Suma", - "colInterval": "Interval", - "colStarted": "A început", - "colNextBilling": "Următoarea facturare", - "colStatus": "Stare", - "colActions": "Acțiuni", - "statusActive": "Activ", - "statusCancelled": "Anulat", - "statusExpired": "A expirat" - }, - "rareValues": { - "title": "Valori rare", - "subtitle": "Gestionați categoriile de valori rare și prețurile articolelor", - "categories": "Categorii", - "items": "Articole", - "addCategory": "Adăugați o categorie", - "editCategory": "Editați categoria", - "deleteCategory": "Ștergeți categoria", - "noCategories": "Nu există încă categorii de valori rare", - "confirmDeleteCategory": "Ștergeți categoria „{name}” și toate articolele acesteia?", - "colId": "ID", - "colName": "Nume", - "colItems": "Articole", - "colUpdated": "Actualizat", - "colActions": "Acțiuni", - "colItemName": "Numele articolului", - "colCredits": "Credite", - "colPoints": "Puncte", - "colPointType": "Tip de punct", - "categoryForm": { - "name": "Nume", - "namePlaceholder": "Numele categoriei", - "save": "Salvați categoria", - "saving": "Se salvează…", - "cancel": "Anulează" - }, - "itemForm": { - "itemName": "Numele articolului", - "itemNamePlaceholder": "de ex. Tronul", - "credits": "Valoarea creditelor", - "points": "Valoarea punctelor", - "pointType": "Tip de punct", - "pointTypeDuckets": "Duckets", - "pointTypeDiamonds": "Diamante", - "save": "Salvați elementul", - "saving": "Se salvează…", - "cancel": "Anulează" - } - }, - "badges": { - "title": "Ecusoane", - "subtitle": "Încărcați, acordați și gestionați catalogul de insigne", - "upload": "Încărcați", - "giveBadge": "Dă insigna", - "catalogue": "Catalog", - "uploadTitle": "Încărcați o insignă nouă", - "uploadSubtitle": "Încărcați un fișier imagine cu insignă", - "badgeCode": "Codul insignei", - "badgeCodePlaceholder": "de ex. VIP001", - "badgeFile": "Fișier insignă", - "badgeFileHint": "PNG sau GIF, recomandat 40x40", - "uploadButton": "Încărcați", - "uploading": "Se încarcă...", - "giveTitle": "Dați insigna utilizatorului", - "giveSubtitle": "Acordați o insignă unui anumit utilizator", - "username": "Nume de utilizator", - "usernamePlaceholder": "Nume de utilizator țintă", - "giveButton": "Dă insigna", - "giving": "Dăruind…", - "catalogueTitle": "Catalog de insigne", - "catalogueSubtitle": "Toate insignele disponibile în hotel", - "noBadges": "Nu există insigne în catalog", - "search": "Căutați insigne", - "searchPlaceholder": "Căutați după cod sau nume...", - "colCode": "Cod", - "colImage": "Imagine", - "colName": "Nume", - "colDescription": "Descriere", - "colActions": "Acțiuni" - }, - "achievements": { - "title": "Realizări", - "subtitle": "Listă numai în citire a realizărilor din joc", - "noAchievements": "Nu au fost configurate realizări", - "colId": "ID", - "colName": "Nume", - "colCategory": "categorie", - "colLevels": "Niveluri", - "colReward": "Recompensa", - "colProgress": "Progres", - "levelLabel": "Nivel {level}", - "rewardCredits": "{count} credite", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Campanii de calendar", - "subtitle": "Listă numai în citire a campaniilor și evenimentelor din calendar", - "noCampaigns": "Nu există încă campanii de calendar", - "colId": "ID", - "colName": "Nume", - "colStart": "Începeți", - "colEnd": "Sfârșit", - "colType": "Tip", - "colReward": "Recompensa", - "colActions": "Acțiuni", - "detail": { - "title": "Campanie: {name}", - "subtitle": "Detaliile evenimentului din calendar", - "days": "Zile", - "dayLabel": "Ziua {day}", - "reward": "Recompensa", - "noDays": "Nu au fost configurate zile pentru această campanie" - } - }, - "radio": { - "title": "Moderare radio", - "subtitle": "Ultimele strigăte, aplicații DJ și programe în emisie (25 cele mai recente din fiecare).", - "moderation": "Moderație", - "shouts": "Strigăte", - "applications": "Aplicații", - "schedules": "Programe", - "settings": "Setări", - "embed": "Încorporați", - "ranks": "Ranguri", - "history": "istorie", - "apiKeys": "Chei API", - "points": "Puncte", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Monitorizare radio", - "subtitle": "Sonda live numai pentru citire a punctelor terminale radio configurate (radio_now_playing_api_url, radio_listeners_api_url). Fiecare solicitare eșuează ușor cu un timeout de {timeout} - nu sunt scrise date. Configurați adresele URL în Setări.", - "stream": "Flux", - "online": "Online", - "offline": "Offline", - "notConfigured": "Neconfigurat", - "nowPlaying": "Acum joacă", - "nowPlayingApi": "API care se joacă acum", - "listenersApi": "API-ul pentru ascultători", - "listeners": "Ascultătorii", - "currentSong": "Melodia curentă", - "bitrate": "Rata de biți", - "status": "Stare", - "noNowPlayingHint": "nici un set API care se joacă acum", - "noListenersHint": "nu se setează API pentru ascultători", - "endpointDiagnostics": "Diagnosticarea punctului final", - "diagnosticsLegend": "OK: accesibil · WARN: neconfigurat · ERROR: cerere eșuată sau timp expirat.", - "streamUrl": "Adresa URL a fluxului", - "unreachable": "de neatins", - "refresh": "Reîmprospătați" - }, - "user": "Utilizator", - "message": "Mesaj", - "posted": "Postat", - "realName": "Nume adevărat", - "age": "Vârsta", - "style": "Stil", - "applied": "Aplicat", - "day": "Ziua", - "start": "Începeți", - "end": "Sfârșit", - "show": "Arată", - "status": "Stare", - "active": "activ", - "inactive": "inactiv", - "hidden": "ascuns", - "activeSchedules": "Programe active", - "noShouts": "Fără strigăte pentru a modera", - "noApplications": "Nu au fost depuse cereri.", - "noSchedules": "Nu au fost configurate programe.", - "deleteShout": "Ștergeți", - "confirmDeleteShout": "Ștergeți acest strigăt?", - "pendingApplications": "Aplicații în așteptare", - "settingsForm": { - "title": "Setări radio", - "subtitle": "Editările scriu la website_settings (taste radio_*) și distrug memoria cache a setărilor de rulare. Booleenii folosesc 0/1.", - "enabled": "Activat", - "disabled": "Dezactivat", - "totalKeys": "Total chei", - "configured": "Configurat", - "curatedHint": "chei curate cu o valoare", - "customKeys": "Chei personalizate", - "saveAll": "Salvează totul", - "singleKey": "Adăugați / suprascrieți o singură cheie", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "valoare", - "commentPlaceholder": "comentariu (optional)", - "saveSingle": "Salvați", - "otherSettings": "Alte setări radio", - "dbError": "Nu s-au putut încărca setările (baza de date indisponibilă). Valorile implicite vor fi create la salvare." - }, - "embedPage": { - "title": "Radio Embed", - "subtitle": "Cod de încorporare gata de copiere pentru streamul live. Numai citire — nimic nu scrie aici în baza de date. Configurați adresa URL a fluxului în Setări radio (radio_stream_url).", - "streamUrl": "Adresa URL a fluxului", - "configured": "Configurat", - "missing": "Lipsă", - "radioName": "Nume radio", - "nowPlayingApi": "API care se joacă acum", - "set": "Setați", - "notSet": "Nu setat", - "noStreamUrl": "Nu a fost configurată nicio adresă URL a fluxului", - "noStreamUrlText": "Nu există nicio setare radio_stream_url, așa că încă nu există nimic de încorporat.", - "goToSettings": "Accesați Setările radio", - "livePreview": "Previzualizare live", - "livePreviewText": "Acesta este playerul audio gol, așa cum îl vor vedea vizitatorii. Apăsați pe redare pentru a confirma că fluxul este accesibil.", - "source": "Sursa", - "audioSnippet": "Fragment de player audio", - "audioSnippetDesc": "Playerul audio HTML5 integrat a îndreptat direct spre flux. Funcționează oriunde este permis HTML simplu.", - "iframeSnippet": "Fragment de ambalaj Iframe", - "iframeSnippetDesc": "Încorporează propria pagină de radio player a site-ului într-un iframe - vă păstrează stilul și informațiile care se redă acum. Reglați lățimea/înălțimea după gust.", - "audioUnsupported": "Browserul dvs. nu acceptă elementul audio." - }, - "banners": { - "title": "Bannere", - "heading": "Bannere radio", - "description": "Bannerele promoționale afișate pe pagina radioului, ordonate în ordine de sortare.", - "addBanner": "Adăugați un banner", - "createBanner": "Creați un banner", - "deleteBanner": "Ștergeți bannerul", - "noBanners": "Nu există încă bannere - adăugați unul mai sus.", - "existing": "Bannere existente ({count})", - "save": "Salvați", - "delete": "Ștergeți", - "byUser": "de utilizator {id}", - "active": "activ", - "hidden": "ascuns", - "bannerAlt": "Banner radio", - "statusActive": "Activ", - "statusHidden": "Ascuns", - "dbError": "Bannerele nu au putut fi încărcate (baza de date indisponibilă).", - "form": { - "imagePath": "Calea imaginii / URL", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Titlu", - "description": "Descriere", - "sortOrder": "Ordinea de sortare", - "active": "Activ" - } - }, - "ranksForm": { - "title": "Radio Ranks", - "subtitle": "DJ / ranguri de personal atribuibile pe aplicațiile radio.", - "dbError": "Nu s-au putut încărca clasamente (baza de date indisponibilă).", - "active": "Activ", - "addRank": "Adaugă rang", - "name": "Nume", - "badgeCode": "Codul insignei", - "description": "Descriere", - "createRank": "Creați un rang", - "existing": "Clasamente existente ({count})", - "noRanks": "Nu există încă ranguri - adăugați unul mai sus.", - "activeLabel": "activ", - "inactiveLabel": "inactiv", - "save": "Salvați", - "deleteRank": "Ștergeți rangul #{id}" - }, - "historyPage": { - "title": "Istoricul redării radio", - "subtitle": "Emisiuni DJ anterioare și timpul de difuzare (radio_history), cel mai recent primul. Jurnal numai pentru citire despre cine a fost difuzat, când și câți ascultători s-au conectat.", - "dbError": "Istoricul radioului nu a putut fi încărcat (baza de date indisponibilă).", - "showsLogged": "Afișează înregistrate", - "onAirNow": "În emisie acum", - "uniqueDjs": "DJ unici", - "peakListeners": "Ascultători de vârf", - "empty": "Nu s-a înregistrat încă un istoric radio.", - "showLog": "Afișați jurnalul ({count})", - "colDj": "DJ", - "colShow": "Arată", - "colStarted": "A început", - "colEnded": "S-a încheiat", - "colAirtime": "Timp de aer", - "colListeners": "Ascultătorii", - "colNotes": "Note", - "onAir": "pe aer" - }, - "apiKeysForm": { - "title": "Chei API Radio", - "subtitle": "Chei API pentru integrări radio externe (radio_api_keys). Cheile sunt generate pe partea serverului și sunt afișate mascate - copiați valoarea completă din baza de date la prima eliberare.", - "dbError": "Nu s-au putut încărca cheile API (baza de date indisponibilă).", - "totalKeys": "Total chei", - "active": "Activ", - "inactive": "Inactiv", - "generateKey": "Generați cheia", - "generateHint": "Cheia secretă este generată automat cu caracter aleatoriu criptografic - nu o introduceți.", - "name": "Nume", - "namePlaceholder": "Puntea AzureCast", - "rateLimit": "Limită de tarif (cereri/min)", - "allowedIps": "IP-uri permise (opțional)", - "allowedIpsPlaceholder": "separate prin virgulă, gol = oricare", - "generate": "Generați cheia", - "existingKeys": "Chei existente ({count})", - "noKeys": "Încă nu există chei API - generați una mai sus.", - "colName": "Nume", - "colKey": "cheie", - "colAllowedIps": "IP-uri permise", - "colRateLimit": "Limită de rată", - "colLastUsed": "Ultima utilizare", - "colExpires": "Expiră", - "colStatus": "Stare", - "colActions": "Acțiuni", - "maskedHint": "Sunt afișate doar primele 8 caractere", - "any": "oricare", - "activeLabel": "activ", - "inactiveLabel": "inactiv", - "deactivate": "Dezactivați", - "activate": "Activați", - "delete": "Ștergeți" - }, - "pointsForm": { - "title": "Puncte de ascultare radio", - "subtitle": "Recompensați ascultătorii cu bani pentru timpul petrecut la radio. Editările scriu la website_settings (tastele radio_points_*) și distrug memoria cache a setărilor de rulare. Booleenii folosesc 0/1.", - "saved": "Salvat", - "points": "Puncte", - "enabled": "Activat", - "disabled": "Dezactivat", - "perMinute": "Pe minut", - "paidIn": "plătit în {currency}", - "maxPerDay": "Max/zi", - "unlimited": "Nelimitat", - "minListeners": "Ascultători min", - "settings": "Setări", - "pointsEnabled": "Puncte activate", - "pointsEnabledHint": "Comutator principal pentru acordarea de puncte pentru ascultător.", - "currency": "Moneda", - "currencyHint": "În ce portofel sunt plătite punctele.", - "pointsPerMinute": "Puncte pe minut", - "pointsPerMinuteHint": "Suma acordată pentru fiecare minut întreg de ascultare.", - "maxPerDayHint": "Limită zilnică per utilizator. Utilizați 0 pentru nelimitat.", - "minListenersHint": "Punctele se acordă numai atunci când sunt conectate cel puțin atât de multe persoane.", - "save": "Salvați setările punctelor" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Lista de redare alternativă (radio_auto_dj_playlist) prin care radioul se rotește atunci când niciun DJ live nu este transmis în flux. Ordonat după ordine de sortare, apoi titlu.", - "dbError": "Nu s-a putut încărca lista de redare AutoDJ (baza de date indisponibilă).", - "tracks": "Urme", - "active": "Activ", - "inactive": "Inactiv", - "addTrack": "Adăugați piesa", - "titlePlaceholder": "Titlul piesei", - "artist": "Artist", - "album": "Album", - "artworkUrl": "Adresa URL a lucrării de artă", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Durata (secunde)", - "durationPlaceholder": "de ex. 215", - "sortOrder": "Ordinea de sortare", - "playlist": "Lista de redare ({count})", - "noTracks": "Nu există încă piese AutoDJ — adăugați una mai sus.", - "colOrder": "Comanda", - "colTitle": "Titlu", - "colArtist": "Artist", - "colAlbum": "Album", - "colDuration": "Durata", - "colPlays": "Joacă", - "colLastPlayed": "Ultima jucat", - "colStatus": "Stare", - "colActions": "Acțiuni", - "activeLabel": "activ", - "inactiveLabel": "inactiv", - "deactivate": "Dezactivați", - "activate": "Activați", - "delete": "Ștergeți", - "trackTitle": "Titlu" - }, - "moderationPage": { - "title": "Moderație DJ", - "subtitle": "Examinați și eliminați strigătele radio (50 cele mai recente).", - "recentShouts": "Strigăte recente ({count})" - } - }, - "commandocentrum": { - "title": "Commandocentrum", - "subtitle": "Diagnosticare, controale RCON și gestionarea utilizatorilor", - "diagnostics": "Diagnosticare", - "rcon": "RCON", - "userActions": "Acțiunile utilizatorului", - "diagnosticsTitle": "Diagnosticarea emulatorului", - "memoryUsage": "Utilizarea memoriei", - "uptime": "Timp de funcționare", - "onlineUsers": "Utilizatori online", - "roomsLoaded": "Camerele încărcate", - "refresh": "Reîmprospătați", - "rconTitle": "comenzile RCON", - "rconPlaceholder": "Introdu comanda RCON...", - "rconSend": "Trimite", - "rconSending": "Se trimite…", - "rconResponse": "Răspuns", - "userActionsTitle": "Acțiunile utilizatorului", - "username": "Nume de utilizator", - "usernamePlaceholder": "Nume de utilizator țintă", - "action": "Acțiune", - "execute": "Execută", - "actions": { - "disconnect": "Deconectați-vă", - "alert": "Trimite alertă", - "giveCredits": "Acordați credite", - "giveBadge": "Dă insigna", - "givePoints": "Dați puncte", - "ban": "Ban", - "kick": "Lovi cu piciorul" - }, - "messagePlaceholder": "Mesaj (pentru alerte)...", - "amountPlaceholder": "Suma…", - "badgePlaceholder": "Codul insignei..." - }, - "emulator": { - "title": "Configurare emulator", - "subtitle": "Vizualizați și editați setările emulatorului și textele locale", - "settings": "Setări", - "texts": "Texte", - "search": "Caută", - "searchPlaceholder": "Tastele de căutare...", - "noSettings": "Nu s-au găsit setări", - "noTexts": "Nu s-au găsit texte", - "edit": "Editați", - "save": "Salvați", - "saving": "Se salvează…", - "cancel": "Anulează", - "colKey": "cheie", - "colValue": "Valoare", - "colType": "Tip", - "colActions": "Acțiuni", - "editDialog": { - "title": "Editare: {key}", - "value": "Valoare", - "valuePlaceholder": "Introduceți valoarea...", - "save": "Salvați modificările", - "cancel": "Anulează" - } - }, - "alerts": { - "title": "Alerte", - "subtitle": "Trimiteți alerte la nivel de hotel și vizualizați alertele recente", - "sendAlert": "Trimiteți o alertă la hotel", - "recentAlerts": "Alerte recente ({count})", - "noRecentAlerts": "Nu există alerte recente", - "form": { - "title": "Titlul alertei", - "titlePlaceholder": "de ex. Întreținere server în 10 minute", - "message": "Mesaj de alertă", - "messagePlaceholder": "Scrieți mesajul de alertă...", - "type": "Tip", - "typeHotel": "Alertă la nivel de hotel", - "typeStaff": "Doar personalul", - "urgent": "Urgent", - "send": "Trimite alertă", - "sending": "Se trimite…", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Titlu", - "colSentBy": "Trimis de", - "colType": "Tip", - "colDate": "Data", - "colActions": "Acțiuni", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Activități ale personalului", - "subtitle": "Pista de audit a acțiunilor personalului în panoul de administrare", - "noLogs": "Nu a fost înregistrată încă nicio activitate a personalului", - "colId": "ID", - "colUser": "Utilizator", - "colAction": "Acțiune", - "colTarget": "țintă", - "colDescription": "Descriere", - "colIp": "IP", - "colTimestamp": "Marca temporală", - "filterByUser": "Filtrați după utilizator...", - "filterByAction": "Filtrați după acțiune...", - "clearFilters": "Ștergeți filtrele", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Filtru de cuvinte", - "subtitle": "Gestionați cuvintele și expresiile filtrate în hotel", - "addWord": "Adaugă cuvânt", - "addWords": "Adaugă cuvinte", - "noWords": "Niciun cuvânt filtrat încă", - "confirmDelete": "Eliminați „{word}” din filtru?", - "colId": "ID", - "colWord": "Cuvânt", - "colAddedBy": "Adăugat de", - "colCreated": "Creat", - "colActions": "Acțiuni", - "form": { - "word": "Cuvânt", - "wordPlaceholder": "de ex. cuvânt rău", - "addMore": "Adăugați mai multe cuvinte (unul pe rând)", - "save": "Adăugați la filtru", - "saving": "Se salvează…", - "cancel": "Anulează" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Mod de întreținere", - "subtitle": "Activați sau dezactivați întreținerea la nivel de hotel", - "enabled": "Modul de întreținere este activat", - "disabled": "Modul de întreținere este dezactivat", - "enable": "Activați întreținerea", - "disable": "Dezactivați întreținerea", - "message": "Mesaj de întreținere", - "messagePlaceholder": "Ne vom întoarce în curând!", - "staffAccess": "Permiteți accesul personalului în timpul întreținerii", - "save": "Salvați setările", - "saving": "Se salvează…", - "confirmEnable": "Activarea întreținerii va împiedica toți utilizatorii care nu fac parte din personal să acceseze hotelul. Continua?", - "confirmDisable": "Dezactivați modul de întreținere și restabiliți accesul pentru toți utilizatorii?" - }, - "housekeeping": { - "title": "Permisiuni de menaj", - "subtitle": "Configurați ce ranguri pot accesa secțiunile de administrare", - "addPermission": "Adăugați permisiunea", - "editPermission": "Permisiune de editare", - "deletePermission": "Șterge permisiunea", - "noPermissions": "Nu au fost configurate permisiuni de menaj", - "confirmDelete": "Ștergeți această permisiune?", - "colId": "ID", - "colRank": "Rang", - "colSection": "Sectiunea", - "colActions": "Acțiuni", - "form": { - "rankId": "ID de rang", - "rankIdPlaceholder": "Rangul minim", - "section": "Cheia secțiunii", - "sectionPlaceholder": "de ex. admin.tabloul de bord", - "save": "Salvați permisiunea", - "saving": "Se salvează…", - "cancel": "Anulează" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset Aplicat!", - "cleared": "All Permisiuni cleared!", - "invalidRank": "Invalid Rang", - "testDone": "Test done: {count} Permisiuni found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Ștergeți ALL Permisiuni? This Acțiune cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Permisiune", - "colDescription": "Descriere", - "colMinRank": "Min. Rang", - "permissionKey": "Cheie de permisiune", - "minRank": "Min. Rang", - "description": "Descriere", - "permissions": "Permisiuni", - "permissionsCount": "{count} Permisiuni", - "permission": "Permisiune", - "highestMinRank": "Highest min. Rang: {rank}", - "totalMinRank": "Total min. Rang sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Ranguri", - "missingDeps": "{count} Lipsă dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Lipsă)", - "rank": "Rang", - "count": "Count", - "searchPermission": "Caută Permisiuni…", - "search": "Caută", - "manage": "Manage", - "importSelection": "Import selection", - "noGroup": "Nu group", - "allGroups": "All groups", - "perGroup": "Permisiuni per group", - "perRank": "Permisiuni per Rang", - "rankOverviewHint": "All Permisiuni grouped by the Rang they are assigned to.", - "tabOverview": "Prezentare generală", - "tabManage": "Manage", - "tabImport": "Import / Export", - "tabRanks": "Rang Prezentare generală", - "tabPresets": "Presetări", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Import Permisiuni", - "importHint": "Paste a JSON array of Permisiune objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Import", - "exportTitle": "Export Permisiuni", - "exportHint": "Export all Permisiuni as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Permisiune Presetări", - "presetsHint": "Aplicați a predefined Setați of Permisiuni for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Moderație tools: Utilizator lookup, Interdicții, CFH handling, chat Bușteni.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Utilizatori, Camerele, news, Setări, Magazin, events, radio & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Permisiune management and asset import.", - "applyPreset": "Aplicați preset", - "clearAll": "Clear all Permisiuni", - "testTitle": "Test Rang access", - "testHint": "Enter a Rang number to see which Permisiuni would be granted.", - "test": "Test", - "auditTitle": "Permisiune audit log", - "auditHint": "All changes to Menaj Permisiuni are logged.", - "auditLogsAt": "Audit Bușteni are available on the Audit log page.", - "viewAuditLogs": "Vedeți audit Bușteni", - "importedWithErrors": "Imported {count} Permisiuni with {errors} errors", - "confirmClearAllDesc": "This will Eliminați every Permisiune entry from the Baza de date. Are you sure?", - "confirmDeletePermission": "Ștergeți this Permisiune permanently?", - "confirmBulkDelete": "Ștergeți {count} selected Permisiuni?", - "deleteSelected": "Ștergeți {count} selected", - "cancel": "Anulează", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Utilizator", - "auditAction": "Acțiune", - "auditTarget": "țintă", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Camerele", - "subtitle": "Căutați și gestionați camerele de hotel", - "search": "Caută", - "searchPlaceholder": "Căutați după nume, proprietar sau ID...", - "searchResults": "{count, plural, one {# room} other {# rooms}} găsit pentru „{query}”", - "noResults": "Nu s-au găsit camere", - "colId": "ID", - "colName": "Nume", - "colOwner": "Proprietar", - "colUsers": "Utilizatori", - "colState": "de stat", - "colCategory": "categorie", - "colCreated": "Creat", - "colActions": "Acțiuni", - "stateOpen": "Deschide", - "stateClosed": "Închis", - "stateLocked": "Blocat", - "stateInvisible": "Invizibil", - "detail": { - "title": "Cameră: {name}", - "subtitle": "Deținut de {owner}", - "overview": "Prezentare generală", - "actions": "Acțiuni", - "description": "Descriere", - "noDescription": "Fără descriere", - "owner": "Proprietar", - "users": "Utilizatori online", - "maxUsers": "Max utilizatori", - "category": "categorie", - "state": "de stat", - "tags": "Etichete", - "noTags": "Fără etichete", - "created": "Creat", - "deleteRoom": "Șterge camera", - "confirmDelete": "Ștergeți camera „{name}”? Acest lucru nu poate fi anulat.", - "enterRoom": "Intră în cameră", - "changeOwner": "Schimbați proprietarul", - "changeOwnerPlaceholder": "Nume de utilizator nou proprietar" - } - }, - "emailTemplates": { - "title": "Șabloane de e-mail", - "subtitle": "Gestionați șabloanele de e-mail tranzacționale", - "newTemplate": "+ Șablon nou", - "edit": "Editați", - "delete": "Ștergeți", - "noTemplates": "Nu există încă șabloane de e-mail", - "confirmDelete": "Ștergeți șablonul „{name}”?", - "colId": "ID", - "colName": "Nume", - "colSubject": "Subiect", - "colKey": "cheie", - "colUpdated": "Actualizat", - "colActions": "Acțiuni", - "form": { - "name": "Nume", - "namePlaceholder": "de ex. E-mail de bun venit", - "key": "cheie", - "keyPlaceholder": "de ex. e-mail de bun venit", - "subject": "Subiect", - "subjectPlaceholder": "Linia de subiect al e-mailului", - "body": "Corp (HTML)", - "bodyPlaceholder": "

Dragă {username},

", - "variables": "Variabile disponibile", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Salvați șablonul", - "saving": "Se salvează…", - "cancel": "Anulează" - } - }, - "theme": { - "title": "Temă", - "subtitle": "Personalizați aspectul CMS", - "presets": "Presetări", - "colours": "Culori", - "css": "CSS", - "presetsTitle": "presetări teme", - "presetsSubtitle": "Alegeți o schemă de culori prefabricată", - "applyPreset": "Aplicați", - "presetApplied": "Presetarea aplicată: {preset}", - "customiseTitle": "Culori personalizate", - "primary": "Primar", - "secondary": "Secundar", - "accent": "Accent", - "background": "Fundal", - "surface": "Suprafata", - "text": "Text", - "saveColours": "Salvați culorile", - "savingColours": "Se salvează…", - "cssTitle": "CSS personalizat", - "cssSubtitle": "Adăugați CSS personalizat pentru a înlocui stilurile temei", - "cssPlaceholder": "/* CSS-ul dvs. personalizat aici */", - "saveCss": "Salvați CSS", - "savingCss": "Se salvează…", - "reset": "Resetați la valorile implicite", - "confirmReset": "Resetați tema la valorile implicite?" - }, - "media": { - "title": "Biblioteca media", - "subtitle": "Încărcați și gestionați fișierele media", - "upload": "Încărcați", - "uploadTitle": "Încărcați un fișier", - "uploadSubtitle": "Trageți și plasați sau faceți clic pentru a încărca", - "uploadButton": "Alegeți fișierul", - "uploading": "Se încarcă...", - "noFiles": "Nu există încă fișiere media", - "delete": "Ștergeți", - "confirmDelete": "Ștergeți definitiv acest fișier?", - "search": "Caută", - "searchPlaceholder": "Căutați după nume de fișier...", - "colPreview": "Previzualizare", - "colName": "Nume", - "colSize": "Dimensiune", - "colType": "Tip", - "colUploaded": "Încărcat", - "colActions": "Acțiuni", - "copyUrl": "Copiați adresa URL", - "urlCopied": "Adresa URL a fost copiată în clipboard" - }, - "favicon": { - "title": "Favicon", - "subtitle": "Încărcați și gestionați favicon-ul site-ului", - "current": "Favicon actual", - "uploadLabel": "Încărcați favicon", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO sau SVG. Maxim 2 MB.", - "upload": "Încărcați", - "uploading": "Se încarcă...", - "delete": "Eliminați", - "deleting": "Se elimină…", - "saved": "Favicon salvat cu succes!", - "deleted": "Faviconul a fost eliminat cu succes!", - "error": "Ceva a mers prost", - "confirmDelete": "Eliminați favicon-ul? Site-ul nu va mai afișa o favicon personalizată.", - "generator": { - "title": "Generați favicon", - "text": "Text", - "bgColor": "Culoare de fundal", - "textColor": "Culoarea textului", - "rounded": "Colțuri rotunjite", - "save": "Salvați ca favicon" - }, - "cancel": "Cancel" - }, - "settings": { - "title": "Setări CMS", - "subtitle": "Gestionați configurația CMS cheie/valoare", - "addSetting": "Adăugați o setare", - "edit": "Editați", - "delete": "Ștergeți", - "noSettings": "Nu s-au găsit setări", - "confirmDelete": "Ștergeți setarea „{key}”?", - "colKey": "cheie", - "colValue": "Valoare", - "colUpdated": "Actualizat", - "colActions": "Acțiuni", - "form": { - "key": "cheie", - "keyPlaceholder": "de ex. hotel_name", - "value": "Valoare", - "valuePlaceholder": "Valoare de setare", - "save": "Salvați setarea", - "saving": "Se salvează…", - "cancel": "Anulează" - }, - "keysInDatabase": "{count} keys in database", - "managedInForm": "{count} managed in form", - "documented": "{count} documented", - "saved": "Settings saved.", - "saveFailed": "Could not save settings.", - "saveSettings": "Save settings", - "viewOnly": "You can view settings but need edit permission to change them." - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Acasă", - "reload": "Reîncarcă", - "fullscreen": "Ecran complet", - "logout": "Deconectare", - "onlineUsers": "Utilizatori online", - "emulatorOnline": "Emulatorul este online", - "emulatorOffline": "Emulatorul este offline", - "dragToMove": "Trageți pentru a muta", - "hide": "Ascunde bara", - "fullscreenExit": "Ieșiți din ecran complet", - "show": "Afișați bara", - "emulatorUnknown": "Starea emulatorului necunoscută" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Diagnosticarea fișierelor", - "preliminary": "Verificare preliminară a adreselor; conținutul se validează la import.", - "http": "HTTP {status}", - "network": "Conexiunea a eșuat", - "timeout": "Sursa nu a răspuns la timp", - "invalidResponse": "Sursa a returnat o pagină web în loc de fișier", - "available": "Fișier găsit; așteaptă validarea", - "recover": "Atașează originalul și reia", - "recoveryHint": "Alege {file} (maximum 50 MB). Identitatea se verifică. Elementele eșuate se reîncearcă; importurile finalizate se păstrează.", - "attach": "Alege fișierul .nitro original", - "working": "Validare sau reluare...", - "attached": "Fișierul original corespunzător a fost atașat", - "resume": "Reia importurile eșuate cu acest fișier", - "invalidFile": "Alege un .nitro original corespunzător de maximum 50 MB și încearcă din nou.", - "resumeError": "Actualizează istoricul și folosește ultima încercare; verifică fișierul și încearcă din nou.", - "mismatchedFile": "Acest fișier aparține altui obiect de mobilier.", - "alreadyStarted": "Recuperarea a început deja. Actualizează istoricul și folosește ultima încercare.", - "notEligible": "Acest element nu permite recuperarea prin atașament." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "O copie de recuperare va fi păstrată în acest browser timp de 7 zile.", + "saved": "Copia de recuperare a fost salvată în acest browser pentru 7 zile.", + "unavailable": "Recuperarea în browser nu este disponibilă. Păstrează această pagină deschisă până când modificările sunt salvate.", + "found": "În acest browser este disponibilă o copie de recuperare, salvată la", + "restore": "Restaurează copia din browser", + "discard": "Șterge copia din browser", + "confirmRestore": "Înlocuiești formularul actual cu copia de recuperare din browser? Verifică conținutul înainte de salvare.", + "confirmDiscard": "Ștergi această copie de recuperare din browser? Formularul actual va rămâne neschimbat." + }, + "nav": { + "home": "Acasă", + "community": "comunitate", + "articles": "Articole", + "photos": "Fotografii", + "staff": "Personalul", + "rankings": "Clasamente", + "guilds": "Breslele", + "leaderboards": "Clasamente", + "rareValues": "Valori rare", + "shop": "Magazin", + "market": "Piata", + "assistance": "Asistență", + "helpCenter": "Centru de ajutor", + "myTickets": "Biletele mele", + "badges": "Ecusoane", + "radio": "Radio", + "friends": "Prieteni", + "messages": "Mesaje", + "admin": "Admin", + "openMenu": "Deschide meniul", + "closeMenu": "Închide meniul", + "drawBadge": "Trage insigna", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} online", + "nitroClient": "Client Nitro", + "tagline": "O lume virtuală online în care poți să-ți creezi propriul avatar, să-ți faci prieteni, să chat, să creezi camere și multe altele!", + "login": "Autentificare", + "or": "Sau", + "createAccount": "Creați un cont" + }, + "footer": { + "copyright": "© {year} - {hotel} este un proiect educațional fără scop lucrativ" + }, + "pages": { + "staff": { + "title": "Personalul", + "subtitle": "Echipa din spatele hotelului", + "ranksTitle": "Ranguri", + "ranksSubtitle": "De ce are grijă fiecare parte a echipei", + "membersTitle": "Membrii echipei", + "membersEmptySubtitle": "Nimeni pentru a arăta acum", + "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", + "emptyState": "Nici un membru al personalului de arătat.", + "colUsername": "Nume de utilizator", + "colRank": "Rang", + "colMotto": "Motto", + "viewProfile": "View profile", + "noMotto": "No motto set", + "loadError": "Unable to load staff members. Please try again shortly.", + "retry": "Try again" + }, + "leaderboard": { + "title": "Clasament", + "subtitle": "Top 20 de jucători după {currency}", + "tab_credits": "Credite", + "tab_diamonds": "Diamante", + "tab_duckets": "Duckets", + "tab_achievement": "Realizări", + "tab_respects": "Respecte", + "tab_onlinetime": "Timp online", + "emptyState": "Nu există clasamente de afișat încă.", + "colAvatar": "Avatar", + "colPlayer": "Jucător" + }, + "friends": { + "title": "Prieteni", + "emptySubtitle": "Nu ai niciun prieten adăugat încă", + "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", + "emptyState": "Adăugați prieteni în hotel și aceștia vor apărea aici.", + "noMotto": "Niciun 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": "Mesaje", + "subtitle": "Solicitări de prietenie și mesaje offline vă așteaptă", + "requestsTitle": "Cereri de prietenie", + "requestsEmptySubtitle": "Nimeni nu a cerut încă să fie prietenul tău", + "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", + "requestsEmptyState": "Nu există solicitări de prietenie în așteptare.", + "wantsToBeFriend": "vrea să fie prietenul tău.", + "accept": "Acceptați", + "offlineTitle": "Mesaje offline", + "offlineEmptySubtitle": "Căsuța dvs. de e-mail este goală", + "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", + "offlineEmptyState": "Nu aveți mesaje offline.", + "unknownUser": "Utilizatorul #{id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Niciun motto", + "statRank": "Rang", + "statCredits": "Credite", + "statRegistered": "Înregistrat", + "badgesTitle": "Ecusoane", + "badgesEmpty": "Nicio insignă încă.", + "photosTitle": "Fotografii", + "photosEmpty": "Nicio fotografie încă.", + "guestbookTitle": "Cartea de oaspeti", + "guestbookSubtitle": "Mesaje pe peretele lui {username}", + "leaveMessage": "Lasă un mesaj", + "guestbookPlaceholder": "Scrie ceva în cartea de oaspeți a lui {username}...", + "post": "Postează", + "loginToPost": "Conectați-vă pentru a lăsa un mesaj în cartea de oaspeți.", + "guestbookEmpty": "Nicio intrare în cartea de oaspeți încă.", + "unknownUser": "Utilizatorul #{id}", + "statDuckets": "Duckets", + "statDiamonds": "Diamante", + "walletTitle": "Portofel", + "friendsTitle": "Prieteni", + "friendsSubtitle": "Oamenii din hotelul cu care ies", + "friendsEmpty": "Nu există prieteni de arătat.", + "roomsTitle": "Camerele", + "roomsSubtitle": "Camerele pe care le dețin", + "roomsEmpty": "Nu există camere de afișat.", + "roomUntitled": "Cameră fără titlu", + "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": "Clasamente", + "subtitle": "Primii 12 jucători clasați după credite", + "emptyState": "Nu există încă jucători de clasat." + }, + "home": { + "welcome": "Bun venit la {hotelName}", + "welcomeSubtitle": "Hotelul tău retro, acum dezvoltat de Next.js", + "welcomeBody": "Ieșiți, strângeți mobilier și întâlniți-vă cu prietenii.", + "enterHotel": "Introdu {hotelName}", + "onlineFriends": "Prieteni online", + "noFriendsOnline": "Fără prieteni online", + "register": "ÎNREGISTREAZĂ-TE ACUM", + "joinNow": "Alăturați-vă {hotelName} astăzi!", + "recentUsers": "Utilizatori recenti", + "recentPhotos": "Fotografii recente", + "latestNews": "Ultimele știri", + "newsTitle": "Ultimele știri", + "newsSubtitle": "Proaspăt de la hotel", + "allNews": "Toate știrile →", + "allUsers": "Comunitate →", + "noArticles": "Încă nu există articole.", + "noPhotos": "Nicio fotografie încă.", + "noUsers": "Niciun utilizator online", + "latestArticle": "Ultimul articol", + "latestUsers": "Cei mai noi cetățeni ({count} total)", + "statsOnline": "Online", + "statsCitizens": "Cetățeni", + "statsRooms": "Camere", + "statsArticles": "Articole", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Creează-ți aspectul unic", + "featuresFurniture": "Mobilier", + "featuresFurnitureDesc": "Decorează camere cu obiecte", + "featuresCommunity": "Comunitate", + "featuresCommunityDesc": "Fă-ți prieteni și discută", + "featuresGames": "Jocuri", + "featuresGamesDesc": "Concurează și distrează-te", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Știri", + "subtitle": "Cele mai recente anunțuri, evenimente și actualizări de la hotel", + "noArticles": "Încă nu există articole.", + "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": "← Știri", + "reactionsTitle": "Reacții", + "reactionsSubtitle": "Spune-ne ce crezi", + "reaction": { + "like": "Ca", + "love": "Dragoste", + "wow": "Uau!" + }, + "removeReaction": "Faceți clic pentru a elimina reacția", + "reactWith": "Reacționează cu {reaction}", + "noReactions": "Nicio reacție încă.", + "logIn": "Conectați-vă", + "toReact": "a reactiona.", + "commentsTitle": "Comentarii", + "commentsSubtitle": "Alăturați-vă conversației", + "commentsCount": "{count} până acum", + "noComments": "Niciun comentariu încă. Fii primul care comentează.", + "userNumber": "Utilizatorul #{id}", + "addComment": "Adaugă un comentariu", + "commentPlaceholder": "Scrie comentariul tau...", + "postComment": "Postează comentariu", + "toComment": "sa lasi un comentariu.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Fotografii", + "subtitle": "Ultimele instantanee făcute în hotel", + "noPhotos": "Nicio fotografie încă.", + "photoAlt": "Fotografie realizată de utilizatorul #{id}", + "byUser": "de utilizatorul #{id}" + }, + "badges": { + "title": "Ecusoane", + "subtitle": "Insignele pe care le poți câștiga și arăta în jurul hotelului", + "noBadges": "Nu există încă insigne disponibile." + }, + "community": { + "title": "comunitate", + "subtitle": "Totul se întâmplă în jurul hotelului într-un singur loc", + "open": "Deschide →", + "links": { + "rankings": { + "title": "Clasamente", + "text": "Vedeți cei mai bogați jucători din hotel, clasificați în funcție de credite." + }, + "staff": { + "title": "Personalul", + "text": "Faceți cunoștință cu echipa care face ca hotelul să funcționeze în fiecare zi." + }, + "news": { + "title": "Știri", + "text": "Cele mai recente anunțuri, evenimente și actualizări." + }, + "photos": { + "title": "Fotografii", + "text": "Instantanee distribuite de comunitate din jurul hotelului." + }, + "guilds": { + "title": "Breslele", + "text": "Răsfoiți grupurile pe care jucătorii le-au creat și s-au alăturat." + }, + "leaderboards": { + "title": "Clasamente", + "text": "Cine este în top în acest sezon în statisticile hotelului." + } + } + }, + "guilds": { + "title": "Breslele", + "subtitle": "Răsfoiți grupurile pe care jucătorii le-au creat și s-au alăturat", + "empty": "Încă nu există bresle.", + "unnamedGuild": "Breasla fără nume", + "noDescription": "Fără descriere" + }, + "guild": { + "allGuilds": "← Toate breslele", + "unnamedGuild": "Breasla fără nume", + "noDescription": "Fără descriere", + "memberSingular": "Membru", + "memberPlural": "Membrii", + "founded": "Fondat", + "forumLink": "Forum →", + "discussion": "Discuție", + "membersTitle": "Membrii", + "memberLowerSingular": "membru", + "memberLowerPlural": "membrii", + "noMembers": "Niciun membru.", + "owner": "Proprietar", + "noMotto": "Niciun motto" + }, + "guildForum": { + "backToGuild": "← Înapoi la breaslă", + "unnamedGuild": "Breasla fără nume", + "forumTitle": "{guild} — Forum", + "threadSingular": "fir", + "threadPlural": "fire", + "newThread": "+ thread nou", + "empty": "Încă nu există subiecte în acest forum.", + "colSubject": "Subiect", + "colAuthor": "autor", + "colPosts": "Postări", + "colDate": "Data", + "noSubject": "(fara subiect)", + "pinned": "Fixat", + "locked": "Blocat", + "userNumber": "Utilizatorul #{id}", + "unknown": "Necunoscut", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Înapoi la forum", + "unnamedGuild": "Breasla fără nume", + "title": "Un fir nou", + "subtitle": "pe forumul {guild}", + "subjectLabel": "Subiect", + "subjectPlaceholder": "Subiectul firului", + "messageLabel": "Mesaj", + "messagePlaceholder": "Scrieți postarea de deschidere...", + "postThread": "Postează subiectul", + "cancel": "Anulează", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Magazin", + "subtitle": "Încărcați-vă contul și luați pachete exclusive, monedă și insigne.", + "browsingCategory": "Răsfoind pachetele {category}.", + "all": "Toate", + "allPackages": "Toate pachetele", + "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", + "empty": "Nu există pachete disponibile momentan.", + "buy": "Cumpără", + "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": "Încărcați cu PayPal", + "subtitle": "Plătiți în siguranță cu PayPal și creditele dvs. sunt adăugate în momentul în care plata este validată.", + "cancelled": "Finalizarea a fost anulată — nu a fost efectuată nicio plată.", + "chooseAmount": "Alegeți o sumă", + "notConfiguredPre": "PayPal nu este încă configurat. Un administrator trebuie să seteze", + "notConfiguredAnd": "şi", + "notConfiguredOptional": "(și opțional", + "notConfiguredPost": "pentru sandbox vs live).", + "balanceTitle": "Bilanțul tău", + "signedInAs": "Conectat ca {username}", + "credits": "Credite", + "creditsPerUnit": "Credite pentru 1,00 {currency}", + "rateLine": "Primiți {amount} credite pentru 1,00 {currency}. Creditele apar în joc data viitoare când vă conectați." + }, + "marketplace": { + "title": "Piața", + "subtitle": "Răsfoiți mobilierul și obiectele rare listate de jucători. Listările sunt plasate în joc și se actualizează în direct - intră în hotel pentru a face o ofertă.", + "activeOffers": "Oferte active", + "sellers": "Vânzători", + "totalValue": "Valoarea totală", + "activeListings": "Listări active", + "mostRecentFirst": "Cel mai recent listat primul", + "empty": "Nu există oferte active pe piață în acest moment. Reveniți mai târziu.", + "colOffer": "Oferta", + "colItem": "Articol", + "colSeller": "Vânzător", + "colPrice": "Preț", + "colListed": "Listată", + "itemLabel": "Elementul #{id}", + "userLabel": "Utilizatorul #{id}", + "justNow": "tocmai acum", + "minutesAgo": "acum {count} m", + "hoursAgo": "acum {count} h", + "daysAgo": "acum {count} zile" + }, + "rares": { + "title": "Valori rare", + "subtitle": "Obțineți o privire de ansamblu asupra tuturor articolelor rare de pe hotel, grupate pe categorii.", + "empty": "În prezent, nu avem rare enumerate aici.", + "rareCount": "{count, plural, one {# rare} other {# rares}}", + "viewRares": "Vezi rareri →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", + "allRares": "← Toate rarele", + "empty": "Nu există încă rarele enumerate în această categorie.", + "colRare": "Rar", + "colCredits": "Credite", + "colCurrency": "Moneda", + "creditsValue": "{value} credite", + "duckets": "Duckets", + "diamonds": "Diamante", + "credits": "Credite" + }, + "redeem": { + "title": "Valorificați un voucher", + "subtitle": "Ai un cod voucher? Introduceți-l mai jos pentru a adăuga recompensa în contul dvs.", + "enterCode": "Introduceți codul dvs", + "oncePerAccount": "Fiecare voucher poate fi valorificat o singură dată pe cont.", + "balanceTitle": "Bilanțul tău", + "signedInAs": "Conectat ca {username}", + "credits": "Credite", + "instantCredit": "Recompensele răscumpărate sunt creditate instantaneu și apar în joc data viitoare când vă conectați." + }, + "help": { + "title": "Centrul de ajutor", + "subtitle": "Găsiți ghiduri, subiecte de asistență și regulile hotelului - tot ce aveți nevoie pentru a obține ajutor.", + "myTickets": "Biletele mele →", + "topicsTitle": "Subiecte suport", + "topicsSubtitle": "Răsfoiți ghiduri și răspunsuri la întrebări frecvente", + "topicsEmpty": "Încă nu există subiecte de ajutor.", + "rulesTitle": "Regulile hotelului", + "rulesSubtitle": "Vă rugăm să citiți acestea înainte de a petrece timpul la hotel", + "rulesEmpty": "Nu au fost publicate reguli încă.", + "categoryEmpty": "Nu există reguli în această categorie." + }, + "helpCategory": { + "back": "← Centrul de ajutor", + "topicSubtitle": "Subiect din Centrul de ajutor", + "moreTitle": "Mai multe subiecte de ajutor", + "moreSubtitle": "Treceți la un alt subiect de asistență" + }, + "helpTickets": { + "title": "Bilete de ajutor", + "subtitle": "Trimiteți un bilet personalului și urmăriți-vă cererile deschise.", + "statTotal": "Total bilete", + "statOpen": "Deschide", + "statClosed": "Închis", + "newTitle": "Bilet nou", + "newSubtitle": "Descrieți problema dvs. și personalul vă va urmări", + "subjectPlaceholder": "Subiect", + "contentPlaceholder": "Descrieți problema dvs....", + "submit": "Trimite biletul", + "listTitle": "Biletele tale", + "listSubtitle": "Fiecare cerere pe care ați trimis-o personalului", + "listEmpty": "Încă nu aveți bilete.", + "colId": "ID", + "colSubject": "Subiect", + "colStatus": "Stare", + "colCreated": "Creat", + "statusOpen": "Deschide", + "statusClosed": "Închis", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "Aplicați pentru personalul {hotel}", + "subtitle": "Deschidem cereri de personal din când în când. Dacă întâlniți o poziție în care simțiți că v-ați potrivi perfect, nu ezitați să aplicați pentru ea.", + "noPositionsTitle": "Nicio poziție deschisă", + "noPositionsBody": "Momentan nu sunt posturi deschise. Vă rugăm să reveniți mai târziu pentru a verifica dacă avem vreo deschidere până atunci. Vă mulțumim pentru interes.", + "noDeadline": "Nici un termen limită stabilit", + "deadline": "Termen limită pentru înscriere: {date}", + "alreadyApplied": "Ați aplicat deja pentru {rank}", + "aboutYou": "Despre tine", + "aboutPlaceholder": "Spune-ne de ce ai fi un {rank} grozav...", + "applyFor": "Aplicați pentru {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": "Aplicați pentru echipa {hotel}", + "subtitle": "Deschidem periodic aplicații de echipă. Dacă vezi o echipă potrivită, nu ezita să aplici!", + "noPositionsTitle": "Nicio poziție de echipă deschisă", + "noPositionsBody": "În prezent, nu există posturi de echipă deschise. Vă rugăm să reveniți mai târziu pentru a verifica dacă există noi deschideri. Multumesc!", + "pending": "Aplicația dvs. este în așteptare", + "aboutYou": "Despre tine", + "aboutPlaceholder": "Spune-ne de ce ai fi potrivit pentru {rank}...", + "applyFor": "Aplicați pentru {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": "Conectați-vă la radioul hotelului - seturi de DJ live, solicitări și strigări.", + "nowPlaying": "Acum joacă", + "nothingPlaying": "Nu se joacă nimic acum.", + "onAir": "În emisie: {dj}", + "noDj": "Fără DJ în aer.", + "audioUnsupported": "Browserul dvs. nu acceptă elementul audio.", + "streamOffline": "Fluxul este momentan offline.", + "exploreTitle": "Explorează radioul", + "exploreSubtitle": "Program, strigăte, solicitări și multe altele", + "linkSchedule": "Program", + "linkScheduleText": "Gama noastră săptămânală de DJ și spectacole.", + "linkShouts": "Strigăte", + "linkShoutsText": "Urle și solicitări din partea comunității.", + "linkRequests": "Cereri", + "linkRequestsText": "Cereți-i DJ-ului să rotească piesa dvs. preferată.", + "linkApply": "Aplicați ca DJ", + "linkApplyText": "Alăturați-vă echipei și accesați undele.", + "linkLeaderboard": "Clasament", + "linkLeaderboardText": "Cei mai buni ascultători clasați în funcție de punctele câștigate.", + "todayTitle": "Programul de azi", + "todayTitleWithDay": "Programul de astăzi · {day}", + "todaySubtitle": "Ce este pe undele de azi", + "fullWeek": "Săptămâna întreagă →", + "noShowsToday": "Nu sunt programate spectacole pentru astăzi.", + "colTime": "timpul", + "colShow": "Arată", + "colDj": "DJ", + "untitledShow": "Emisiune fără titlu", + "userNumber": "Utilizatorul #{id}" + }, + "radioSchedule": { + "title": "Program radio", + "subtitle": "Gama noastră săptămânală de DJ și spectacole", + "empty": "Încă nu sunt programate spectacole.", + "colDay": "Ziua", + "colTime": "timpul", + "colDj": "DJ", + "colShow": "Arată", + "noShows": "Fără spectacole" + }, + "radioShouts": { + "title": "Strigăte radio", + "subtitle": "Urle și solicitări din partea comunității", + "postTitle": "Postează un strigăt", + "postSubtitle": "Trimite un mesaj DJ-ului în emisie", + "messageLabel": "Mesajul dvs", + "messagePlaceholder": "Trimite un strigăt DJ-ului...", + "shoutButton": "Strigă", + "loginToPost": "Conectați-vă pentru a posta un strigăt.", + "latestTitle": "Ultimele strigăte", + "latestSubtitle": "Cele mai recente mesaje de la ascultători", + "empty": "Niciun strigăt încă. Fii primul!", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Concursuri Radio", + "subtitle": "Conectați-vă și participați la cele mai recente concursuri online", + "empty": "Încă nu există concursuri.", + "contestLabel": "Concursul #{id}", + "dateUnknown": "Data necunoscută" + }, + "radioGiveaways": { + "title": "Giveaways radio", + "subtitle": "Ascultă-ți șansa de a câștiga în cadourile noastre radio", + "empty": "Nu există încă cadouri.", + "giveawayLabel": "Giveaway #{id}", + "dateUnknown": "Data necunoscută" + }, + "radioLeaderboard": { + "title": "Clasamentul ascultătorilor de radio", + "subtitle": "Top 50 de ascultători în funcție de punctele câștigate la radio", + "empty": "Niciun punct de ascultător încă de afișat.", + "colRank": "Rang", + "colAvatar": "Avatar", + "colListener": "Ascultător", + "colPoints": "Puncte" + }, + "radioRequests": { + "formTitle": "Trimiteți o cerere", + "formSubtitle": "Cereți DJ-ului să redă melodia preferată", + "songLabel": "Cântec", + "songPlaceholder": "Titlul melodiei", + "artistLabel": "Artist", + "artistPlaceholder": "Numele artistului (opțional)", + "submitButton": "Trimiteți cererea", + "loginToRequest": "Conectați-vă pentru a trimite o cerere.", + "latestTitle": "Cereri recente", + "latestSubtitle": "Cele mai recente melodii solicitate", + "empty": "Nicio solicitare încă.", + "colSong": "Cântec", + "colArtist": "Artist", + "colRequester": "Solicitantul", + "colDate": "Data", + "colStatus": "Stare", + "statusPending": "În așteptare", + "statusApproved": "Aprobat", + "statusPlayed": "Jucat", + "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": "Aplicați pentru a fi DJ Radio", + "subtitle": "Povestește-ne despre tine și de ce ai fi potrivit pentru undele radio", + "latestTitle": "Cea mai recentă aplicație", + "statusLabel": "Stare:", + "submittedOn": "· trimis la {date}", + "submitAgain": "Puteți trimite din nou mai jos dacă detaliile dvs. s-au schimbat.", + "formTitle": "Formular de cerere", + "formSubtitle": "Toate câmpurile marcate ca obligatorii trebuie completate", + "realNameLabel": "Nume adevărat", + "realNamePlaceholder": "Numele tău complet", + "ageLabel": "Vârsta", + "availabilityLabel": "Disponibilitate", + "availabilityPlaceholder": "În ce zile și ore puteți transmite?", + "musicStyleLabel": "Stilul muzical", + "musicStylePlaceholder": "de ex. House, Pop, Hip-Hop", + "experienceLabel": "Experiență", + "optional": "(optional)", + "experiencePlaceholder": "Vreo experiență anterioară de DJ sau hosting?", + "motivationLabel": "Motivația", + "motivationPlaceholder": "De ce vrei să te alături echipei radio?", + "submitButton": "Trimiteți cererea", + "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": "Setările contului", + "accountSettingsSubtitle": "Gestionați-vă profilul, securitatea și conturile conectate", + "publicProfile": "Profilul dvs. public", + "noMotto": "Niciun motto", + "noEmail": "Niciun e-mail în dosar", + "changeMotto": "Schimbați motto-ul", + "changeMottoSubtitle": "Actualizări instantanee în joc dacă ești online", + "mottoPlaceholder": "Motto-ul tău", + "saveMotto": "Salvați motto-ul", + "securityTitle": "Securitate", + "securitySubtitle": "Autentificare cu doi factori", + "securityDescription": "Adăugați un al doilea nivel de protecție contului dvs.", + "twoFactorLink": "Autentificare cu doi factori" + }, + "settings2fa": { + "backToSettings": "← Setări", + "title": "Autentificare cu doi factori", + "subtitle": "Adăugați un al doilea nivel de securitate cu o aplicație de autentificare", + "nowEnabled": "2FA este acum activat. 🔒", + "disabledNotice": "2FA a fost dezactivat.", + "badCode": "Codul acela nu era valid - încercați din nou.", + "noAppKeyPrefix": "2FA este indisponibil până la", + "noAppKeyMiddle": "este configurat (același Laravel", + "noAppKeySuffix": "pe măsură ce se instalează AtomCMS, astfel încât secretele existente rămân lizibile).", + "isEnabled": "2FA este activat", + "onYourAccount": "pe contul dvs.", + "disable": "Dezactivați 2FA", + "scanOrEnter": "Scanați sau introduceți această cheie", + "scanInstructions": "Adăugați acest lucru în Google Authenticator/Authy, apoi introduceți codul din 6 cifre pentru a confirma.", + "manualKey": "Cheie manuală:", + "codePlaceholder": "cod din 6 cifre", + "confirm": "Confirmați", + "enableIntro": "Adăugați un al doilea nivel de securitate cu o aplicație de autentificare.", + "enable": "Activați 2FA", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Conturi conectate", + "subtitle": "Conectați un cont social pentru a vă putea conecta cu un singur clic", + "connected": "Conectat", + "unavailable": "Indisponibil", + "login": { + "title": "Conectați-vă", + "subtitle": "Bine ați revenit - conectați-vă pentru a intra în hotel.", + "subtitle2fa": "Introdu codul din 6 cifre de la autentificatorul tău.", + "usernamePlaceholder": "Nume de utilizator", + "passwordPlaceholder": "Parolă", + "codePlaceholder": "cod 2FA", + "pleaseWait": "Vă rugăm să așteptați…", + "verify": "Verificați", + "signIn": "Conectați-vă", + "or": "sau", + "noAccount": "Fără cont?", + "createOne": "Creați unul", + "forgotPassword": "Ai uitat parola?", + "errorInvalidCredentials": "Nume de utilizator sau parolă nevalidă", + "errorInvalid2fa": "Cod 2FA nevalid", + "welcomeBack": "Bine ai revenit", + "welcomeBackSub": "Autentifică-te pentru a continua pe {hotelName}", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Creați cont", + "subtitle": "Alăturați-vă la hotel - durează doar un moment.", + "username": "Nume de utilizator", + "email": "E-mail", + "password": "Parolă", + "confirmPassword": "Repetați parola", + "usernamePlaceholder": "Nume de utilizator", + "emailPlaceholder": "E-mail", + "passwordPlaceholder": "Parola (min 6 caractere)", + "confirmPasswordPlaceholder": "Repetați parola", + "selectOutfit": "Alege-ți ținuta", + "termsAccept": "Am peste 18 ani și accept termenii și regulile {hotel}.", + "createAccount": "Creați cont", + "creatingAccount": "Se creează cont...", + "redirecting": "Se redirecționează către contul tău...", + "alreadyHaveAccount": "Aveți deja un cont? Log in!", + "register": "Înregistrează-te", + "termsError": "Trebuie să acceptați termenii și regulile pentru a vă înregistra.", + "usernameError": "Numele de utilizator este obligatoriu.", + "emailError": "Este necesar un e-mail valid.", + "passwordError": "Parola trebuie să aibă cel puțin 6 caractere.", + "confirmPasswordError": "Parolele nu se potrivesc.", + "termsRequired": "Trebuie să acceptați termenii și regulile.", + "usernameRequired": "Numele de utilizator este obligatoriu.", + "emailRequired": "E-mailul este obligatoriu.", + "passwordRequired": "Parola este necesară.", + "passwordsDontMatch": "Parolele nu se potrivesc.", + "alreadyHaveAccountPre": "Ai deja un cont?", + "alreadyHaveAccountLink": "Autentificare", + "whoIsOnline": "Cine este online", + "usersOnline": "{count} online", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Resetează parola", + "subtitle": "Vă vom trimite prin e-mail un link securizat pentru a seta o nouă parolă.", + "sentNotice": "Dacă acel e-mail este înregistrat, a fost trimis un link de resetare. Verificați-vă căsuța de e-mail.", + "emailPlaceholder": "E-mailul dvs", + "sendResetLink": "Trimite linkul de resetare", + "backToLogin": "Înapoi la autentificare", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Setați o nouă parolă", + "subtitle": "Alegeți o parolă puternică pe care nu o utilizați în altă parte.", + "passwordPlaceholder": "Parolă nouă (min 6 caractere)", + "resetPassword": "Resetează parola", + "backToLogin": "Înapoi la autentificare" + }, + "verify": { + "verifiedTitle": "Ești gata", + "verifiedSubtitle": "E-mail verificat", + "verifiedBody": "Adresa dvs. de e-mail a fost verificată. Acum vă puteți autentifica și juca.", + "goToLogin": "Accesați autentificare", + "alreadyTitle": "Deja verificat", + "alreadySubtitle": "Nu mai rămâne nimic de făcut", + "alreadyBody": "Această adresă de e-mail a fost deja confirmată.", + "unavailableTitle": "Încercați din nou în scurt timp", + "unavailableSubtitle": "Server inaccesibil", + "unavailableBody": "Nu am putut ajunge la server pentru a vă verifica adresa de e-mail. Vă rugăm să reîncercați linkul peste un moment.", + "invalidTitle": "Verificare e-mail", + "invalidSubtitle": "Link nevalid sau expirat", + "invalidBody": "Acest link de verificare nu este valid. Asigurați-vă că ați deschis linkul complet din e-mailul dvs. sau solicitați unul nou.", + "backToLogin": "Înapoi la autentificare" + }, + "banned": { + "title": "Esti interzis", + "subtitle": "Cont suspendat", + "body": "Contul dvs. a fost suspendat de la hotel.", + "reasonLabel": "Motiv:", + "permanent": "Această interdicție este permanentă.", + "expires": "Expiră la {date}.", + "contactStaff": "Dacă credeți că aceasta este o greșeală, contactați echipa de personal." + }, + "maintenance": { + "title": "{hotel} este în întreținere", + "subtitle": "Ne vom întoarce în curând", + "staffCanLogIn": "Personalul se poate conecta în continuare." + }, + "admin": { + "nav": { + "overview": "Prezentare generală", + "dashboard": "Tabloul de bord", + "content": "Conținut", + "articles": "Articole", + "tags": "Etichete", + "navigator": "Navigator", + "helpCenter": "Centru de ajutor", + "advertisements": "Reclame", + "writeableBoxes": "Cutii care pot fi scrise", + "photos": "Fotografii", + "tickets": "bilete", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Utilizatori și acces", + "users": "Utilizatori", + "bans": "Interdicții", + "ipManagement": "managementul IP", + "vpn": "VPN", + "applications": "Aplicații", + "teams": "Echipe", + "permissions": "Permisiuni", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "Economie", + "catalog": "Catalog", + "shop": "Magazin", + "transactions": "Tranzacții", + "vouchers": "Vouchere", + "subscriptions": "Abonamente", + "rareValues": "Valori rare", + "badges": "Ecusoane", + "achievements": "Realizări", + "calendar": "Calendar", + "radio": "Radio", + "radioHistory": "Istoria radioului", + "radioBanners": "Bannere", + "radioEmbed": "Încorporați", + "radioApiKeys": "Chei API", + "radioModeration": "Moderație", + "radioSettings": "Setări", + "radioMonitoring": "Monitorizare", + "radioPoints": "Puncte", + "radioRanks": "Ranguri", + "radioAutodj": "Auto DJ", + "system": "Sistem", + "commandocentrum": "Commandocentrum", + "emulator": "Emulator", + "alerts": "Alerte", + "logs": "Bușteni", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Filtru de cuvinte", + "maintenance": "Întreținere", + "rooms": "Camerele", + "emailTemplates": "Șabloane de e-mail", + "theme": "Temă", + "media": "Media", + "favicon": "Favicon", + "sounds": "Sunete", + "translations": "Traduceri", + "import": "Import", + "settings": "Setări", + "backToSite": "Înapoi la site", + "housekeeping": "Menaj", + "hotelManagementPanel": "Panoul de management al hotelului", + "rankLabel": "Clasament {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Search menu…", + "clearMenuSearch": "Clear menu search", + "noMenuResults": "No matching pages.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "studio": "Studio", + "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" + }, + "dashboard": { + "title": "Tabloul de bord", + "subtitle": "Prezentare generală a hotelului și starea live", + "playersOnline": "Jucători online", + "articles": "Articole", + "activeBans": "Interdicții active", + "database": "Baza de date", + "databaseConnected": "Conectat", + "databaseDown": "Jos", + "usersByRank": "Utilizatori după rang", + "noAccountsToBreakDown": "Nu există încă conturi de defalcat", + "rankLabel": "Clasament {rank}", + "rankWithCount": "Clasament {rank}: {count} conturi", + "recentStaffActivity": "Activitate recentă a personalului", + "viewAll": "Vezi toate", + "noStaffActivityLogged": "Nu a fost înregistrată încă nicio activitate a personalului", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "Articole", + "subtitle": "Articole de știri – 50 cele mai recente", + "newArticle": "+ articol nou", + "edit": "Editați", + "delete": "Ștergeți", + "noArticles": "Încă nu există articole", + "confirmDelete": "Sigur doriți să ștergeți „{title}”?", + "colTitle": "Titlu", + "colSlug": "Limac", + "colAuthor": "autor", + "colCreated": "Creat", + "colActions": "Acțiuni", + "form": { + "title": "Titlu", + "titlePlaceholder": "Titlul articolului", + "slug": "Limac", + "slugPlaceholder": "articol-url-slug", + "category": "categorie", + "categoryPlaceholder": "Selectați o categorie", + "body": "Corpul", + "bodyPlaceholder": "Scrie conținutul articolului tău...", + "image": "Imagine", + "imagePlaceholder": "https://example.com/image.png", + "thumbnail": "Miniatură", + "thumbnailPlaceholder": "https://example.com/thumb.png", + "published": "Publicat", + "featured": "Prezentare", + "save": "Salvați articolul", + "saving": "Se salvează…", + "deleteArticle": "Ștergeți articolul", + "deleteConfirm": "Această acțiune nu poate fi anulată. Articolul va fi eliminat definitiv.", + "cancel": "Anulează", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "Etichete", + "subtitle": "Etichete / categorii de articole", + "addTag": "Adăugați etichetă", + "name": "Nume", + "namePlaceholder": "Numele etichetei", + "backgroundColour": "Culoare de fundal", + "createTag": "Creați etichetă", + "editTag": "Editați eticheta", + "updateTag": "Actualizați eticheta", + "deleteTag": "Ștergeți eticheta", + "confirmDelete": "Ștergeți „{name}”?", + "noTags": "Nicio etichetă încă", + "colId": "ID", + "colTag": "Etichetați", + "colColour": "Culoare", + "colUsedBy": "Folosit de", + "colCreated": "Creat", + "colActions": "Acțiuni", + "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": "Categorii plate", + "publicRooms": "Camere publice", + "addCategory": "Adăugați o categorie", + "editCategory": "Editați categoria", + "deleteCategory": "Ștergeți categoria", + "categoryName": "Numele categoriei", + "categoryNamePlaceholder": "de ex. Chill & Chat", + "categoryOrder": "Comanda", + "roomName": "Numele camerei", + "roomNamePlaceholder": "de ex. Salonul de bun venit", + "roomId": "ID-ul camerei", + "roomIdPlaceholder": "ID-ul numeric al camerei", + "save": "Salvați", + "cancel": "Anulează", + "noCategories": "Nicio categorie încă", + "noPublicRooms": "Încă nu există încăperi publice", + "colId": "ID", + "colName": "Nume", + "colOrder": "Comanda", + "colRooms": "Camerele", + "colActions": "Acțiuni", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Centrul de ajutor", + "subtitle": "Intrări de asistență și gestionarea întrebărilor frecvente", + "entries": "Intrări", + "newEntry": "+ Intrare nouă", + "edit": "Editați", + "delete": "Ștergeți", + "noEntries": "Nicio intrare încă", + "confirmDelete": "Ștergeți „{title}”?", + "colId": "ID", + "colTitle": "Titlu", + "colCategory": "categorie", + "colCreated": "Creat", + "colActions": "Acțiuni", + "form": { + "title": "Titlu", + "titlePlaceholder": "Titlul intrării", + "category": "categorie", + "categoryPlaceholder": "Selectați categoria", + "body": "Corpul", + "bodyPlaceholder": "Scrie raspunsul...", + "save": "Salvați intrarea", + "saving": "Se salvează…", + "deleteEntry": "Ștergeți intrarea", + "cancel": "Anulează" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Reclame", + "subtitle": "Gestionați reclame la hotel și bannere promoționale", + "newAd": "+ Anunț nou", + "edit": "Editați", + "delete": "Ștergeți", + "noAds": "Nicio reclamă încă", + "confirmDelete": "Ștergeți acest anunț?", + "colId": "ID", + "colName": "Nume", + "colImage": "Imagine", + "colUrl": "URL", + "colViews": "Vizualizări", + "colStatus": "Stare", + "colCreated": "Creat", + "colActions": "Acțiuni", + "form": { + "name": "Nume", + "namePlaceholder": "Numele anunțului", + "image": "Adresa URL a imaginii", + "imagePlaceholder": "https://example.com/banner.png", + "url": "Adresa URL țintă", + "urlPlaceholder": "https://example.com", + "enabled": "Activat", + "save": "Salvați anunțul", + "saving": "Se salvează…", + "deleteAd": "Șterge anunțul", + "cancel": "Anulează" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Cutii inscriptibile", + "subtitle": "Panouri de conținut afișate în hotel și CMS", + "newBox": "Cutie noua", + "edit": "Editați", + "delete": "Ștergeți", + "noBoxes": "Încă nu există casete care pot fi scrise", + "confirmDelete": "Ștergeți această casetă?", + "colId": "ID", + "colName": "Nume", + "colLocation": "Locație", + "colUpdated": "Actualizat", + "colActions": "Acțiuni", + "form": { + "name": "Nume", + "namePlaceholder": "Numele casetei", + "location": "Locație", + "locationPlaceholder": "de ex. pagina de pornire, bara laterală", + "content": "Conținut", + "contentPlaceholder": "Scrieți conținutul casetei...", + "enabled": "Activat", + "save": "Caseta de salvare", + "saving": "Se salvează…", + "deleteBox": "Șterge caseta", + "cancel": "Anulează", + "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": "Moderare foto", + "subtitle": "Fotografii recente ale camerei din joc", + "delete": "Ștergeți", + "approve": "Aprobați", + "noPhotos": "Nicio fotografie de moderat", + "confirmDelete": "Ștergeți definitiv această fotografie?", + "colId": "ID", + "colPreview": "Previzualizare", + "colUser": "Utilizator", + "colRoom": "Cameră", + "colTimestamp": "Marca temporală", + "colActions": "Acțiuni", + "photoAlt": "Fotografia utilizatorului #{id}", + "byUser": "de {username}", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Utilizatori", + "subtitle": "Răsfoiți, căutați și gestionați conturile de hotel", + "search": "Caută", + "searchPlaceholder": "Căutați după nume de utilizator, e-mail sau ID...", + "searchResults": "{count, plural, one {# result} other {# results}} pentru „{query}”", + "noResults": "Nu s-au găsit utilizatori", + "colId": "ID", + "colUsername": "Nume de utilizator", + "colEmail": "E-mail", + "colRank": "Rang", + "colOnline": "Online", + "colRegistered": "Înregistrat", + "colLastOnline": "Ultima online", + "colActions": "Acțiuni", + "yes": "Da", + "no": "Nu", + "edit": "Editați", + "setRank": "Stabiliți rangul", + "disconnect": "Deconectați-vă", + "alert": "Alertă", + "ban": "Ban", + "detail": { + "title": "Utilizator: {username}", + "subtitle": "Detaliile contului și gestionarea", + "overview": "Prezentare generală", + "actions": "Acțiuni", + "username": "Nume de utilizator", + "email": "E-mail", + "motto": "Motto", + "rank": "Rang", + "credits": "Credite", + "duckets": "Duckets", + "diamonds": "Diamante", + "online": "Online", + "registered": "Înregistrat", + "lastOnline": "Ultima online", + "ipAddress": "adresa IP", + "machineId": "ID mașină", + "sendAlert": "Trimite alertă", + "sendMessage": "Trimite mesaj", + "disconnectUser": "Deconectați utilizatorul", + "banUser": "Ban utilizator", + "resetPassword": "Resetează parola", + "deleteUser": "Ștergeți utilizatorul", + "confirmDelete": "Sigur doriți să ștergeți {username}? Acest lucru nu poate fi anulat.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Editați utilizatorul: {username}", + "subtitle": "Modificați detaliile contului", + "username": "Nume de utilizator", + "usernamePlaceholder": "Nume de utilizator", + "email": "E-mail", + "emailPlaceholder": "utilizator@example.com", + "motto": "Motto", + "mottoPlaceholder": "Motto-ul utilizatorului", + "rank": "Rang", + "credits": "Credite", + "duckets": "Duckets", + "diamonds": "Diamante", + "save": "Salvați modificările", + "saving": "Se salvează…", + "cancel": "Anulează" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Interdicții", + "subtitle": "Gestionați interzicerea contului, a IP-ului și a mașinilor", + "newBan": "Noua interdicție", + "edit": "Editați", + "delete": "Ștergeți", + "noBans": "Încă nu există interdicții", + "confirmDelete": "Eliminați această interdicție?", + "colId": "ID", + "colValue": "Valoare", + "colType": "Tip", + "colReason": "Motivul", + "colBannedBy": "Interzis de", + "colExpires": "Expiră", + "colCreated": "Creat", + "colActions": "Acțiuni", + "form": { + "value": "Valoare", + "valuePlaceholder": "Nume de utilizator, IP sau ID mașină", + "type": "Tip", + "typeUser": "Utilizator", + "typeIp": "IP", + "typeMachine": "Masina", + "reason": "Motivul", + "reasonPlaceholder": "Bani motiv", + "expiresAt": "Expiră la", + "permanent": "Permanent", + "save": "Salvare interdicție", + "saving": "Se salvează…", + "cancel": "Anulează" + }, + "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": "Managementul IP", + "subtitle": "Gestionați lista albă și lista neagră de IP", + "whitelist": "Lista albă", + "blacklist": "Lista neagră", + "addIp": "Adăugați IP", + "ipAddress": "adresa IP", + "ipAddressPlaceholder": "de ex. 127.0.0.1", + "reason": "Motivul", + "reasonPlaceholder": "Motivul înscrierii", + "add": "Adăugați", + "remove": "Eliminați", + "confirmRemove": "Eliminați acest IP din {list}?", + "noWhitelistedIps": "Nu există IP-uri în lista albă", + "noBlacklistedIps": "Nu există IP-uri pe lista neagră", + "colIp": "IP", + "colReason": "Motivul", + "colAdded": "Adăugat", + "colActions": "Acțiuni", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "VPN/Detecție proxy", + "subtitle": "Configurați setările VPN și de detectare a proxy-ului", + "enabled": "Activat", + "apiKey": "cheie API", + "apiKeyPlaceholder": "Cheia dvs. API de detectare VPN", + "apiKeyHint": "Lăsați gol pentru a dezactiva", + "blockOnDetect": "Blocați la detectare", + "blockOnDetectHint": "Blocați automat utilizatorii detectați în spatele unui VPN sau proxy", + "save": "Salvați setările", + "saving": "Se salvează…", + "settingsSaved": "Setările VPN au fost salvate cu succes", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Aplicații pentru personal", + "subtitle": "Cereri de personal în așteptare și revizuite", + "pending": "În așteptare", + "approved": "Aprobat", + "rejected": "Respins", + "noApplications": "Încă nu există aplicații", + "colId": "ID", + "colApplicant": "Solicitantul", + "colPosition": "Poziție", + "colStatus": "Stare", + "colSubmitted": "Trimis", + "colActions": "Acțiuni", + "review": "Revizuire", + "approve": "Aprobați", + "reject": "Respinge", + "confirmApprove": "Aprobați {username} pentru {position}?", + "confirmReject": "Respingeți cererea lui {username} pentru {position}?", + "detail": { + "title": "Aplicație de la {username}", + "subtitle": "Pentru {position}", + "about": "Despre solicitant", + "message": "Mesajul aplicației", + "status": "Stare", + "submitted": "Trimis", + "noMessage": "Nu a fost furnizat niciun mesaj" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Echipe", + "subtitle": "Definiți numele și descrierile rangului personalului", + "addRank": "Adaugă rang", + "editRank": "Editați rangul", + "deleteRank": "Ștergeți rangul", + "noTeams": "Nu există definiții de rang încă", + "confirmDelete": "Ștergeți definiția rangului {id}?", + "colId": "ID", + "colRank": "Rang", + "colName": "Nume", + "colBadge": "Insigna", + "colColour": "Culoare", + "colActions": "Acțiuni", + "form": { + "rankId": "ID de rang", + "rankIdPlaceholder": "ID de rang numeric", + "name": "Nume", + "namePlaceholder": "de ex. Administrator", + "badge": "Codul insignei", + "badgePlaceholder": "de ex. ADM001", + "colour": "Culoare", + "colourPlaceholder": "de ex. #ff0000", + "save": "Salvați definiția echipei", + "saving": "Se salvează…", + "cancel": "Anulează" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Permisiuni", + "subtitle": "Gestionați permisiunile bazate pe rang pentru panoul de administrare", + "addPermission": "Adăugați permisiunea", + "editPermission": "Permisiune de editare", + "deletePermission": "Șterge permisiunea", + "noPermissions": "Nu au fost încă configurate permisiuni", + "confirmDelete": "Ștergeți această permisiune?", + "colId": "ID", + "colRank": "Rang", + "colPermission": "Permisiune", + "colCreated": "Creat", + "colActions": "Acțiuni", + "form": { + "rankId": "ID de rang", + "rankIdPlaceholder": "Clasament minim necesar", + "permission": "Cheie de permisiune", + "permissionPlaceholder": "de ex. admin.articole.manage", + "save": "Salvați permisiunea", + "saving": "Se salvează…", + "cancel": "Anulează" + } + }, + "catalog": { + "title": "Catalog", + "subtitle": "Răsfoiți și gestionați paginile și articolele de catalog", + "pages": "Pagini", + "items": "Articole", + "addPage": "Adăugați o pagină", + "editPage": "Editați pagina", + "deletePage": "Șterge pagina", + "addItem": "Adăugați articol", + "editItem": "Editați elementul", + "deleteItem": "Ștergeți elementul", + "noPages": "Încă nu există pagini de catalog", + "noItems": "Nu există articole în această pagină", + "confirmDeletePage": "Ștergeți pagina de catalog „{name}”?", + "confirmDeleteItem": "Ștergeți acest articol?", + "colId": "ID", + "colName": "Nume", + "colIcon": "Pictogramă", + "colOrder": "Comanda", + "colItems": "Articole", + "colEnabled": "Activat", + "colActions": "Acțiuni", + "colItemId": "ID articol", + "colItemName": "Numele articolului", + "colCostCredits": "Cost (credite)", + "colCostPoints": "Cost (puncte)", + "colLimited": "Limitat", + "pageForm": { + "name": "Nume", + "namePlaceholder": "Numele paginii", + "icon": "ID-ul pictogramei", + "iconPlaceholder": "ID-ul pictogramei numerice", + "order": "Comanda", + "enabled": "Activat", + "parent": "Pagina părinte", + "parentNone": "Niciuna (rădăcină)", + "save": "Salvați pagina", + "saving": "Se salvează…", + "cancel": "Anulează" + }, + "itemForm": { + "itemId": "ID articol", + "itemName": "Numele articolului", + "costCredits": "Costul în credite", + "costDuckets": "Costul în duchete", + "costDiamonds": "Costul în diamante", + "limitedStack": "Dimensiune limitată a stivei", + "limitedSold": "Vândut limitat", + "save": "Salvați elementul", + "saving": "Se salvează…", + "cancel": "Anulează" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Magazin", + "subtitle": "Gestionați pachetele și comenzile", + "packages": "Pachete", + "orders": "Comenzi", + "newPackage": "+ Pachet nou", + "edit": "Editați", + "delete": "Ștergeți", + "viewOrder": "Vedeți", + "noPackages": "Nu există încă pachete pentru magazin", + "noOrders": "Încă nu există comenzi", + "confirmDelete": "Ștergeți acest pachet?", + "colId": "ID", + "colName": "Nume", + "colPrice": "Preț", + "colCurrency": "Moneda", + "colType": "Tip", + "colSold": "Vândut", + "colEnabled": "Activat", + "colActions": "Acțiuni", + "colOrderId": "ID comandă", + "colCustomer": "Client", + "colPackage": "Pachet", + "colAmount": "Suma", + "colStatus": "Stare", + "colDate": "Data", + "statusPending": "În așteptare", + "statusCompleted": "Terminat", + "statusRefunded": "Rambursat", + "form": { + "name": "Nume", + "namePlaceholder": "Numele pachetului", + "description": "Descriere", + "descriptionPlaceholder": "Descrierea pachetului", + "price": "Preț", + "currency": "Moneda", + "currencyPlaceholder": "EUR, USD, GBP...", + "type": "Tip", + "typeCredits": "Credite", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamante", + "typeBadge": "Insigna", + "typeFurni": "Mobilier", + "typeRank": "Rang", + "amount": "Suma", + "badgeCode": "Codul insignei", + "badgeCodePlaceholder": "de ex. VIP001", + "rankId": "ID de rang", + "furniItems": "Articole de mobilier", + "enabled": "Activat", + "save": "Salvați pachetul", + "saving": "Se salvează…", + "cancel": "Anulează", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "Tranzacții", + "subtitle": "Jurnal de plăți PayPal", + "noTransactions": "Nicio tranzacție încă", + "colId": "ID", + "colUser": "Utilizator", + "colAmount": "Suma", + "colCurrency": "Moneda", + "colPackage": "Pachet", + "colStatus": "Stare", + "colDate": "Data", + "colActions": "Acțiuni", + "statusCompleted": "Terminat", + "statusPending": "În așteptare", + "statusFailed": "A eșuat", + "statusRefunded": "Rambursat", + "detail": { + "title": "Tranzacție #{id}", + "paypalId": "ID PayPal", + "payerEmail": "E-mailul plătitorului", + "grossAmount": "Sumă brută", + "fee": "Taxa", + "netAmount": "Suma neta" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Vouchere pentru magazin", + "subtitle": "Gestionați codurile voucher rambursabile", + "newVoucher": "+ Voucher nou", + "edit": "Editați", + "delete": "Ștergeți", + "noVouchers": "Nu există vouchere încă", + "confirmDelete": "Ștergeți voucherul „{code}”?", + "colId": "ID", + "colCode": "Cod", + "colValue": "Valoare", + "colType": "Tip", + "colUses": "Utilizări / Max", + "colExpires": "Expiră", + "colCreated": "Creat", + "colActions": "Acțiuni", + "form": { + "code": "Cod", + "codePlaceholder": "de ex. VARA 2025", + "value": "Valoare", + "type": "Tip", + "typeCredits": "Credite", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamante", + "typeBadge": "Insigna", + "typeFurni": "Mobilier", + "typeRank": "Rang", + "badgeCode": "Codul insignei", + "badgeCodePlaceholder": "de ex. VIP001", + "rankId": "ID de rang", + "maxUses": "Utilizări maxime", + "maxUsesPlaceholder": "0 = nelimitat", + "expiresAt": "Expiră la", + "enabled": "Activat", + "save": "Salvați voucherul", + "saving": "Se salvează…", + "cancel": "Anulează", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Abonamente", + "subtitle": "Abonamente recurente active", + "noSubscriptions": "Nu există abonamente active", + "cancel": "Anulează", + "confirmCancel": "Anulați abonamentul pentru {username}?", + "colId": "ID", + "colUser": "Utilizator", + "colPackage": "Pachet", + "colAmount": "Suma", + "colInterval": "Interval", + "colStarted": "A început", + "colNextBilling": "Următoarea facturare", + "colStatus": "Stare", + "colActions": "Acțiuni", + "statusActive": "Activ", + "statusCancelled": "Anulat", + "statusExpired": "A expirat", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Valori rare", + "subtitle": "Gestionați categoriile de valori rare și prețurile articolelor", + "categories": "Categorii", + "items": "Articole", + "addCategory": "Adăugați o categorie", + "editCategory": "Editați categoria", + "deleteCategory": "Ștergeți categoria", + "noCategories": "Nu există încă categorii de valori rare", + "confirmDeleteCategory": "Ștergeți categoria „{name}” și toate articolele acesteia?", + "colId": "ID", + "colName": "Nume", + "colItems": "Articole", + "colUpdated": "Actualizat", + "colActions": "Acțiuni", + "colItemName": "Numele articolului", + "colCredits": "Credite", + "colPoints": "Puncte", + "colPointType": "Tip de punct", + "categoryForm": { + "name": "Nume", + "namePlaceholder": "Numele categoriei", + "save": "Salvați categoria", + "saving": "Se salvează…", + "cancel": "Anulează" + }, + "itemForm": { + "itemName": "Numele articolului", + "itemNamePlaceholder": "de ex. Tronul", + "credits": "Valoarea creditelor", + "points": "Valoarea punctelor", + "pointType": "Tip de punct", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Diamante", + "save": "Salvați elementul", + "saving": "Se salvează…", + "cancel": "Anulează", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Ecusoane", + "subtitle": "Încărcați, acordați și gestionați catalogul de insigne", + "upload": "Încărcați", + "giveBadge": "Dă insigna", + "catalogue": "Catalog", + "uploadTitle": "Încărcați o insignă nouă", + "uploadSubtitle": "Încărcați un fișier imagine cu insignă", + "badgeCode": "Codul insignei", + "badgeCodePlaceholder": "de ex. VIP001", + "badgeFile": "Fișier insignă", + "badgeFileHint": "PNG sau GIF, recomandat 40x40", + "uploadButton": "Încărcați", + "uploading": "Se încarcă...", + "giveTitle": "Dați insigna utilizatorului", + "giveSubtitle": "Acordați o insignă unui anumit utilizator", + "username": "Nume de utilizator", + "usernamePlaceholder": "Nume de utilizator țintă", + "giveButton": "Dă insigna", + "giving": "Dăruind…", + "catalogueTitle": "Catalog de insigne", + "catalogueSubtitle": "Toate insignele disponibile în hotel", + "noBadges": "Nu există insigne în catalog", + "search": "Căutați insigne", + "searchPlaceholder": "Căutați după cod sau nume...", + "colCode": "Cod", + "colImage": "Imagine", + "colName": "Nume", + "colDescription": "Descriere", + "colActions": "Acțiuni", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Realizări", + "subtitle": "Listă numai în citire a realizărilor din joc", + "noAchievements": "Nu au fost configurate realizări", + "colId": "ID", + "colName": "Nume", + "colCategory": "categorie", + "colLevels": "Niveluri", + "colReward": "Recompensa", + "colProgress": "Progres", + "levelLabel": "Nivel {level}", + "rewardCredits": "{count} credite", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Campanii de calendar", + "subtitle": "Listă numai în citire a campaniilor și evenimentelor din calendar", + "noCampaigns": "Nu există încă campanii de calendar", + "colId": "ID", + "colName": "Nume", + "colStart": "Începeți", + "colEnd": "Sfârșit", + "colType": "Tip", + "colReward": "Recompensa", + "colActions": "Acțiuni", + "detail": { + "title": "Campanie: {name}", + "subtitle": "Detaliile evenimentului din calendar", + "days": "Zile", + "dayLabel": "Ziua {day}", + "reward": "Recompensa", + "noDays": "Nu au fost configurate zile pentru această campanie", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Moderare radio", + "subtitle": "Ultimele strigăte, aplicații DJ și programe în emisie (25 cele mai recente din fiecare).", + "moderation": "Moderație", + "shouts": "Strigăte", + "applications": "Aplicații", + "schedules": "Programe", + "settings": "Setări", + "embed": "Încorporați", + "ranks": "Ranguri", + "history": "istorie", + "apiKeys": "Chei API", + "points": "Puncte", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Monitorizare radio", + "subtitle": "Sonda live numai pentru citire a punctelor terminale radio configurate (radio_now_playing_api_url, radio_listeners_api_url). Fiecare solicitare eșuează ușor cu un timeout de {timeout} - nu sunt scrise date. Configurați adresele URL în Setări.", + "stream": "Flux", + "online": "Online", + "offline": "Offline", + "notConfigured": "Neconfigurat", + "nowPlaying": "Acum joacă", + "nowPlayingApi": "API care se joacă acum", + "listenersApi": "API-ul pentru ascultători", + "listeners": "Ascultătorii", + "currentSong": "Melodia curentă", + "bitrate": "Rata de biți", + "status": "Stare", + "noNowPlayingHint": "nici un set API care se joacă acum", + "noListenersHint": "nu se setează API pentru ascultători", + "endpointDiagnostics": "Diagnosticarea punctului final", + "diagnosticsLegend": "OK: accesibil · WARN: neconfigurat · ERROR: cerere eșuată sau timp expirat.", + "streamUrl": "Adresa URL a fluxului", + "unreachable": "de neatins", + "refresh": "Reîmprospătați" + }, + "user": "Utilizator", + "message": "Mesaj", + "posted": "Postat", + "realName": "Nume adevărat", + "age": "Vârsta", + "style": "Stil", + "applied": "Aplicat", + "day": "Ziua", + "start": "Începeți", + "end": "Sfârșit", + "show": "Arată", + "status": "Stare", + "active": "activ", + "inactive": "inactiv", + "hidden": "ascuns", + "activeSchedules": "Programe active", + "noShouts": "Fără strigăte pentru a modera", + "noApplications": "Nu au fost depuse cereri.", + "noSchedules": "Nu au fost configurate programe.", + "deleteShout": "Ștergeți", + "confirmDeleteShout": "Ștergeți acest strigăt?", + "pendingApplications": "Aplicații în așteptare", + "settingsForm": { + "title": "Setări radio", + "subtitle": "Editările scriu la website_settings (taste radio_*) și distrug memoria cache a setărilor de rulare. Booleenii folosesc 0/1.", + "enabled": "Activat", + "disabled": "Dezactivat", + "totalKeys": "Total chei", + "configured": "Configurat", + "curatedHint": "chei curate cu o valoare", + "customKeys": "Chei personalizate", + "saveAll": "Salvează totul", + "singleKey": "Adăugați / suprascrieți o singură cheie", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "valoare", + "commentPlaceholder": "comentariu (optional)", + "saveSingle": "Salvați", + "otherSettings": "Alte setări radio", + "dbError": "Nu s-au putut încărca setările (baza de date indisponibilă). Valorile implicite vor fi create la salvare." + }, + "embedPage": { + "title": "Radio Embed", + "subtitle": "Cod de încorporare gata de copiere pentru streamul live. Numai citire — nimic nu scrie aici în baza de date. Configurați adresa URL a fluxului în Setări radio (radio_stream_url).", + "streamUrl": "Adresa URL a fluxului", + "configured": "Configurat", + "missing": "Lipsă", + "radioName": "Nume radio", + "nowPlayingApi": "API care se joacă acum", + "set": "Setați", + "notSet": "Nu setat", + "noStreamUrl": "Nu a fost configurată nicio adresă URL a fluxului", + "noStreamUrlText": "Nu există nicio setare radio_stream_url, așa că încă nu există nimic de încorporat.", + "goToSettings": "Accesați Setările radio", + "livePreview": "Previzualizare live", + "livePreviewText": "Acesta este playerul audio gol, așa cum îl vor vedea vizitatorii. Apăsați pe redare pentru a confirma că fluxul este accesibil.", + "source": "Sursa", + "audioSnippet": "Fragment de player audio", + "audioSnippetDesc": "Playerul audio HTML5 integrat a îndreptat direct spre flux. Funcționează oriunde este permis HTML simplu.", + "iframeSnippet": "Fragment de ambalaj Iframe", + "iframeSnippetDesc": "Încorporează propria pagină de radio player a site-ului într-un iframe - vă păstrează stilul și informațiile care se redă acum. Reglați lățimea/înălțimea după gust.", + "audioUnsupported": "Browserul dvs. nu acceptă elementul audio." + }, + "banners": { + "title": "Bannere", + "heading": "Bannere radio", + "description": "Bannerele promoționale afișate pe pagina radioului, ordonate în ordine de sortare.", + "addBanner": "Adăugați un banner", + "createBanner": "Creați un banner", + "deleteBanner": "Ștergeți bannerul", + "noBanners": "Nu există încă bannere - adăugați unul mai sus.", + "existing": "Bannere existente ({count})", + "save": "Salvați", + "delete": "Ștergeți", + "byUser": "de utilizator {id}", + "active": "activ", + "hidden": "ascuns", + "bannerAlt": "Banner radio", + "statusActive": "Activ", + "statusHidden": "Ascuns", + "dbError": "Bannerele nu au putut fi încărcate (baza de date indisponibilă).", + "form": { + "imagePath": "Calea imaginii / URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Titlu", + "description": "Descriere", + "sortOrder": "Ordinea de sortare", + "active": "Activ" + } + }, + "ranksForm": { + "title": "Radio Ranks", + "subtitle": "DJ / ranguri de personal atribuibile pe aplicațiile radio.", + "dbError": "Nu s-au putut încărca clasamente (baza de date indisponibilă).", + "active": "Activ", + "addRank": "Adaugă rang", + "name": "Nume", + "badgeCode": "Codul insignei", + "description": "Descriere", + "createRank": "Creați un rang", + "existing": "Clasamente existente ({count})", + "noRanks": "Nu există încă ranguri - adăugați unul mai sus.", + "activeLabel": "activ", + "inactiveLabel": "inactiv", + "save": "Salvați", + "deleteRank": "Ștergeți rangul #{id}" + }, + "historyPage": { + "title": "Istoricul redării radio", + "subtitle": "Emisiuni DJ anterioare și timpul de difuzare (radio_history), cel mai recent primul. Jurnal numai pentru citire despre cine a fost difuzat, când și câți ascultători s-au conectat.", + "dbError": "Istoricul radioului nu a putut fi încărcat (baza de date indisponibilă).", + "showsLogged": "Afișează înregistrate", + "onAirNow": "În emisie acum", + "uniqueDjs": "DJ unici", + "peakListeners": "Ascultători de vârf", + "empty": "Nu s-a înregistrat încă un istoric radio.", + "showLog": "Afișați jurnalul ({count})", + "colDj": "DJ", + "colShow": "Arată", + "colStarted": "A început", + "colEnded": "S-a încheiat", + "colAirtime": "Timp de aer", + "colListeners": "Ascultătorii", + "colNotes": "Note", + "onAir": "pe aer" + }, + "apiKeysForm": { + "title": "Chei API Radio", + "subtitle": "Chei API pentru integrări radio externe (radio_api_keys). Cheile sunt generate pe partea serverului și sunt afișate mascate - copiați valoarea completă din baza de date la prima eliberare.", + "dbError": "Nu s-au putut încărca cheile API (baza de date indisponibilă).", + "totalKeys": "Total chei", + "active": "Activ", + "inactive": "Inactiv", + "generateKey": "Generați cheia", + "generateHint": "Cheia secretă este generată automat cu caracter aleatoriu criptografic - nu o introduceți.", + "name": "Nume", + "namePlaceholder": "Puntea AzureCast", + "rateLimit": "Limită de tarif (cereri/min)", + "allowedIps": "IP-uri permise (opțional)", + "allowedIpsPlaceholder": "separate prin virgulă, gol = oricare", + "generate": "Generați cheia", + "existingKeys": "Chei existente ({count})", + "noKeys": "Încă nu există chei API - generați una mai sus.", + "colName": "Nume", + "colKey": "cheie", + "colAllowedIps": "IP-uri permise", + "colRateLimit": "Limită de rată", + "colLastUsed": "Ultima utilizare", + "colExpires": "Expiră", + "colStatus": "Stare", + "colActions": "Acțiuni", + "maskedHint": "Sunt afișate doar primele 8 caractere", + "any": "oricare", + "activeLabel": "activ", + "inactiveLabel": "inactiv", + "deactivate": "Dezactivați", + "activate": "Activați", + "delete": "Ștergeți" + }, + "pointsForm": { + "title": "Puncte de ascultare radio", + "subtitle": "Recompensați ascultătorii cu bani pentru timpul petrecut la radio. Editările scriu la website_settings (tastele radio_points_*) și distrug memoria cache a setărilor de rulare. Booleenii folosesc 0/1.", + "saved": "Salvat", + "points": "Puncte", + "enabled": "Activat", + "disabled": "Dezactivat", + "perMinute": "Pe minut", + "paidIn": "plătit în {currency}", + "maxPerDay": "Max/zi", + "unlimited": "Nelimitat", + "minListeners": "Ascultători min", + "settings": "Setări", + "pointsEnabled": "Puncte activate", + "pointsEnabledHint": "Comutator principal pentru acordarea de puncte pentru ascultător.", + "currency": "Moneda", + "currencyHint": "În ce portofel sunt plătite punctele.", + "pointsPerMinute": "Puncte pe minut", + "pointsPerMinuteHint": "Suma acordată pentru fiecare minut întreg de ascultare.", + "maxPerDayHint": "Limită zilnică per utilizator. Utilizați 0 pentru nelimitat.", + "minListenersHint": "Punctele se acordă numai atunci când sunt conectate cel puțin atât de multe persoane.", + "save": "Salvați setările punctelor" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Lista de redare alternativă (radio_auto_dj_playlist) prin care radioul se rotește atunci când niciun DJ live nu este transmis în flux. Ordonat după ordine de sortare, apoi titlu.", + "dbError": "Nu s-a putut încărca lista de redare AutoDJ (baza de date indisponibilă).", + "tracks": "Urme", + "active": "Activ", + "inactive": "Inactiv", + "addTrack": "Adăugați piesa", + "titlePlaceholder": "Titlul piesei", + "artist": "Artist", + "album": "Album", + "artworkUrl": "Adresa URL a lucrării de artă", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Durata (secunde)", + "durationPlaceholder": "de ex. 215", + "sortOrder": "Ordinea de sortare", + "playlist": "Lista de redare ({count})", + "noTracks": "Nu există încă piese AutoDJ — adăugați una mai sus.", + "colOrder": "Comanda", + "colTitle": "Titlu", + "colArtist": "Artist", + "colAlbum": "Album", + "colDuration": "Durata", + "colPlays": "Joacă", + "colLastPlayed": "Ultima jucat", + "colStatus": "Stare", + "colActions": "Acțiuni", + "activeLabel": "activ", + "inactiveLabel": "inactiv", + "deactivate": "Dezactivați", + "activate": "Activați", + "delete": "Ștergeți", + "trackTitle": "Titlu" + }, + "moderationPage": { + "title": "Moderație DJ", + "subtitle": "Examinați și eliminați strigătele radio (50 cele mai recente).", + "recentShouts": "Strigăte recente ({count})" + } + }, + "commandocentrum": { + "title": "Commandocentrum", + "subtitle": "Diagnosticare, controale RCON și gestionarea utilizatorilor", + "diagnostics": "Diagnosticare", + "rcon": "RCON", + "userActions": "Acțiunile utilizatorului", + "diagnosticsTitle": "Diagnosticarea emulatorului", + "memoryUsage": "Utilizarea memoriei", + "uptime": "Timp de funcționare", + "onlineUsers": "Utilizatori online", + "roomsLoaded": "Camerele încărcate", + "refresh": "Reîmprospătați", + "rconTitle": "comenzile RCON", + "rconPlaceholder": "Introdu comanda RCON...", + "rconSend": "Trimite", + "rconSending": "Se trimite…", + "rconResponse": "Răspuns", + "userActionsTitle": "Acțiunile utilizatorului", + "username": "Nume de utilizator", + "usernamePlaceholder": "Nume de utilizator țintă", + "action": "Acțiune", + "execute": "Execută", + "actions": { + "disconnect": "Deconectați-vă", + "alert": "Trimite alertă", + "giveCredits": "Acordați credite", + "giveBadge": "Dă insigna", + "givePoints": "Dați puncte", + "ban": "Ban", + "kick": "Lovi cu piciorul" + }, + "messagePlaceholder": "Mesaj (pentru alerte)...", + "amountPlaceholder": "Suma…", + "badgePlaceholder": "Codul insignei...", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Configurare emulator", + "subtitle": "Vizualizați și editați setările emulatorului și textele locale", + "settings": "Setări", + "texts": "Texte", + "search": "Caută", + "searchPlaceholder": "Tastele de căutare...", + "noSettings": "Nu s-au găsit setări", + "noTexts": "Nu s-au găsit texte", + "edit": "Editați", + "save": "Salvați", + "saving": "Se salvează…", + "cancel": "Anulează", + "colKey": "cheie", + "colValue": "Valoare", + "colType": "Tip", + "colActions": "Acțiuni", + "editDialog": { + "title": "Editare: {key}", + "value": "Valoare", + "valuePlaceholder": "Introduceți valoarea...", + "save": "Salvați modificările", + "cancel": "Anulează" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Alerte", + "subtitle": "Trimiteți alerte la nivel de hotel și vizualizați alertele recente", + "sendAlert": "Trimiteți o alertă la hotel", + "recentAlerts": "Alerte recente ({count})", + "noRecentAlerts": "Nu există alerte recente", + "form": { + "title": "Titlul alertei", + "titlePlaceholder": "de ex. Întreținere server în 10 minute", + "message": "Mesaj de alertă", + "messagePlaceholder": "Scrieți mesajul de alertă...", + "type": "Tip", + "typeHotel": "Alertă la nivel de hotel", + "typeStaff": "Doar personalul", + "urgent": "Urgent", + "send": "Trimite alertă", + "sending": "Se trimite…", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "ID", + "colTitle": "Titlu", + "colSentBy": "Trimis de", + "colType": "Tip", + "colDate": "Data", + "colActions": "Acțiuni", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Activități ale personalului", + "subtitle": "Pista de audit a acțiunilor personalului în panoul de administrare", + "noLogs": "Nu a fost înregistrată încă nicio activitate a personalului", + "colId": "ID", + "colUser": "Utilizator", + "colAction": "Acțiune", + "colTarget": "țintă", + "colDescription": "Descriere", + "colIp": "IP", + "colTimestamp": "Marca temporală", + "filterByUser": "Filtrați după utilizator...", + "filterByAction": "Filtrați după acțiune...", + "clearFilters": "Ștergeți filtrele", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Filtru de cuvinte", + "subtitle": "Gestionați cuvintele și expresiile filtrate în hotel", + "addWord": "Adaugă cuvânt", + "addWords": "Adaugă cuvinte", + "noWords": "Niciun cuvânt filtrat încă", + "confirmDelete": "Eliminați „{word}” din filtru?", + "colId": "ID", + "colWord": "Cuvânt", + "colAddedBy": "Adăugat de", + "colCreated": "Creat", + "colActions": "Acțiuni", + "form": { + "word": "Cuvânt", + "wordPlaceholder": "de ex. cuvânt rău", + "addMore": "Adăugați mai multe cuvinte (unul pe rând)", + "save": "Adăugați la filtru", + "saving": "Se salvează…", + "cancel": "Anulează" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Mod de întreținere", + "subtitle": "Activați sau dezactivați întreținerea la nivel de hotel", + "enabled": "Modul de întreținere este activat", + "disabled": "Modul de întreținere este dezactivat", + "enable": "Activați întreținerea", + "disable": "Dezactivați întreținerea", + "message": "Mesaj de întreținere", + "messagePlaceholder": "Ne vom întoarce în curând!", + "staffAccess": "Permiteți accesul personalului în timpul întreținerii", + "save": "Salvați setările", + "saving": "Se salvează…", + "confirmEnable": "Activarea întreținerii va împiedica toți utilizatorii care nu fac parte din personal să acceseze hotelul. Continua?", + "confirmDisable": "Dezactivați modul de întreținere și restabiliți accesul pentru toți utilizatorii?", + "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": "Permisiuni de menaj", + "subtitle": "Configurați ce ranguri pot accesa secțiunile de administrare", + "addPermission": "Adăugați permisiunea", + "editPermission": "Permisiune de editare", + "deletePermission": "Șterge permisiunea", + "noPermissions": "Nu au fost configurate permisiuni de menaj", + "confirmDelete": "Ștergeți această permisiune?", + "colId": "ID", + "colRank": "Rang", + "colSection": "Sectiunea", + "colActions": "Acțiuni", + "form": { + "rankId": "ID de rang", + "rankIdPlaceholder": "Rangul minim", + "section": "Cheia secțiunii", + "sectionPlaceholder": "de ex. admin.tabloul de bord", + "save": "Salvați permisiunea", + "saving": "Se salvează…", + "cancel": "Anulează" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset Aplicat!", + "cleared": "All Permisiuni cleared!", + "invalidRank": "Invalid Rang", + "testDone": "Test done: {count} Permisiuni found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Ștergeți ALL Permisiuni? This Acțiune cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Permisiune", + "colDescription": "Descriere", + "colMinRank": "Min. Rang", + "permissionKey": "Cheie de permisiune", + "minRank": "Min. Rang", + "description": "Descriere", + "permissions": "Permisiuni", + "permissionsCount": "{count} Permisiuni", + "permission": "Permisiune", + "highestMinRank": "Highest min. Rang: {rank}", + "totalMinRank": "Total min. Rang sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Ranguri", + "missingDeps": "{count} Lipsă dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(Lipsă)", + "rank": "Rang", + "count": "Count", + "searchPermission": "Caută Permisiuni…", + "search": "Caută", + "manage": "Manage", + "importSelection": "Import selection", + "noGroup": "Nu group", + "allGroups": "All groups", + "perGroup": "Permisiuni per group", + "perRank": "Permisiuni per Rang", + "rankOverviewHint": "All Permisiuni grouped by the Rang they are assigned to.", + "tabOverview": "Prezentare generală", + "tabManage": "Manage", + "tabImport": "Import / Export", + "tabRanks": "Rang Prezentare generală", + "tabPresets": "Presetări", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "Import Permisiuni", + "importHint": "Paste a JSON array of Permisiune objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "Import", + "exportTitle": "Export Permisiuni", + "exportHint": "Export all Permisiuni as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Permisiune Presetări", + "presetsHint": "Aplicați a predefined Setați of Permisiuni for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Moderație tools: Utilizator lookup, Interdicții, CFH handling, chat Bușteni.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Utilizatori, Camerele, news, Setări, Magazin, events, radio & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including Permisiune management and asset import.", + "applyPreset": "Aplicați preset", + "clearAll": "Clear all Permisiuni", + "testTitle": "Test Rang access", + "testHint": "Enter a Rang number to see which Permisiuni would be granted.", + "test": "Test", + "auditTitle": "Permisiune audit log", + "auditHint": "All changes to Menaj Permisiuni are logged.", + "auditLogsAt": "Audit Bușteni are available on the Audit log page.", + "viewAuditLogs": "Vedeți audit Bușteni", + "importedWithErrors": "Imported {count} Permisiuni with {errors} errors", + "confirmClearAllDesc": "This will Eliminați every Permisiune entry from the Baza de date. Are you sure?", + "confirmDeletePermission": "Ștergeți this Permisiune permanently?", + "confirmBulkDelete": "Ștergeți {count} selected Permisiuni?", + "deleteSelected": "Ștergeți {count} selected", + "cancel": "Anulează", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Utilizator", + "auditAction": "Acțiune", + "auditTarget": "țintă", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Camerele", + "subtitle": "Căutați și gestionați camerele de hotel", + "search": "Caută", + "searchPlaceholder": "Căutați după nume, proprietar sau ID...", + "searchResults": "{count, plural, one {# room} other {# rooms}} găsit pentru „{query}”", + "noResults": "Nu s-au găsit camere", + "colId": "ID", + "colName": "Nume", + "colOwner": "Proprietar", + "colUsers": "Utilizatori", + "colState": "de stat", + "colCategory": "categorie", + "colCreated": "Creat", + "colActions": "Acțiuni", + "stateOpen": "Deschide", + "stateClosed": "Închis", + "stateLocked": "Blocat", + "stateInvisible": "Invizibil", + "detail": { + "title": "Cameră: {name}", + "subtitle": "Deținut de {owner}", + "overview": "Prezentare generală", + "actions": "Acțiuni", + "description": "Descriere", + "noDescription": "Fără descriere", + "owner": "Proprietar", + "users": "Utilizatori online", + "maxUsers": "Max utilizatori", + "category": "categorie", + "state": "de stat", + "tags": "Etichete", + "noTags": "Fără etichete", + "created": "Creat", + "deleteRoom": "Șterge camera", + "confirmDelete": "Ștergeți camera „{name}”? Acest lucru nu poate fi anulat.", + "enterRoom": "Intră în cameră", + "changeOwner": "Schimbați proprietarul", + "changeOwnerPlaceholder": "Nume de utilizator nou proprietar" + } + }, + "emailTemplates": { + "title": "Șabloane de e-mail", + "subtitle": "Gestionați șabloanele de e-mail tranzacționale", + "newTemplate": "+ Șablon nou", + "edit": "Editați", + "delete": "Ștergeți", + "noTemplates": "Nu există încă șabloane de e-mail", + "confirmDelete": "Ștergeți șablonul „{name}”?", + "colId": "ID", + "colName": "Nume", + "colSubject": "Subiect", + "colKey": "cheie", + "colUpdated": "Actualizat", + "colActions": "Acțiuni", + "form": { + "name": "Nume", + "namePlaceholder": "de ex. E-mail de bun venit", + "key": "cheie", + "keyPlaceholder": "de ex. e-mail de bun venit", + "subject": "Subiect", + "subjectPlaceholder": "Linia de subiect al e-mailului", + "body": "Corp (HTML)", + "bodyPlaceholder": "

Dragă {username},

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

Dear {username},

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

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", + "presetApplied": "Preset applied: {preset}", + "customiseTitle": "Custom colours", + "primary": "Primary", + "secondary": "Secondary", + "accent": "Accent", + "background": "Background", + "surface": "Surface", + "text": "Text", + "saveColours": "Save colours", + "savingColours": "Saving…", + "cssTitle": "Custom CSS", + "cssSubtitle": "Add custom CSS to override theme styles", + "cssPlaceholder": "/* Your custom CSS here */", + "saveCss": "Save CSS", + "savingCss": "Saving…", + "reset": "Reset to defaults", + "confirmReset": "Reset theme to default values?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Media Library", + "subtitle": "Upload and manage media files", + "upload": "Upload", + "uploadTitle": "Upload a file", + "uploadSubtitle": "Drag and drop or click to upload", + "uploadButton": "Choose file", + "uploading": "Uploading…", + "noFiles": "No media files yet", + "delete": "Delete", + "confirmDelete": "Delete this file permanently?", + "search": "Search", + "searchPlaceholder": "Search by filename…", + "colPreview": "Preview", + "colName": "Name", + "colSize": "Size", + "colType": "Type", + "colUploaded": "Uploaded", + "colActions": "Actions", + "copyUrl": "Copy URL", + "urlCopied": "URL copied to clipboard" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Upload and manage the site favicon", + "current": "Current favicon", + "uploadLabel": "Upload favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Max 2MB.", + "upload": "Upload", + "uploading": "Uploading…", + "delete": "Remove", + "deleting": "Removing…", + "saved": "Favicon saved successfully!", + "deleted": "Favicon removed successfully!", + "error": "Something went wrong", + "confirmDelete": "Remove the favicon? The site will no longer show a custom favicon.", + "generator": { + "title": "Generate favicon", + "text": "Text", + "bgColor": "Background color", + "textColor": "Text color", + "rounded": "Rounded corners", + "save": "Save as favicon" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "CMS Settings", + "subtitle": "Manage key/value CMS configuration", + "addSetting": "Add setting", + "edit": "Edit", + "delete": "Delete", + "noSettings": "No settings found", + "confirmDelete": "Delete setting \"{key}\"?", + "colKey": "Key", + "colValue": "Value", + "colUpdated": "Updated", + "colActions": "Actions", + "form": { + "key": "Key", + "keyPlaceholder": "e.g. hotel_name", + "value": "Value", + "valuePlaceholder": "Setting value", + "save": "Save setting", + "saving": "Saving…", + "cancel": "Cancel" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Главная", + "reload": "Перезагрузить", + "fullscreen": "Полный экран", + "logout": "Выйти", + "onlineUsers": "Пользователи онлайн", + "emulatorOnline": "Эмулятор онлайн", + "emulatorOffline": "Эмулятор офлайн", + "dragToMove": "Перетащите, чтобы переместить", + "hide": "Скрыть панель", + "fullscreenExit": "Выйти из полноэкранного режима", + "show": "Показать панель", + "emulatorUnknown": "Состояние эмулятора неизвестно" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Диагностика файлов", + "preliminary": "Предварительная проверка адресов; содержимое проверяется при импорте.", + "http": "HTTP {status}", + "network": "Не удалось подключиться", + "timeout": "Источник не ответил вовремя", + "invalidResponse": "Источник вернул веб-страницу вместо файла", + "available": "Файл найден; ожидает проверки", + "recover": "Прикрепить оригинал и продолжить", + "recoveryHint": "Выберите {file} (до 50 MB). Подлинность соответствия проверяется. Повторяются неудачные элементы; завершённые импорты сохраняются.", + "attach": "Выберите исходный файл .nitro", + "working": "Проверка или возобновление...", + "attached": "Соответствующий оригинал прикреплён", + "resume": "Повторить неудачные импорты с этим файлом", + "invalidFile": "Выберите соответствующий исходный .nitro до 50 MB и повторите попытку.", + "resumeError": "Обновите историю и используйте последнюю попытку; проверьте файл и попробуйте снова.", + "mismatchedFile": "Этот файл относится к другой мебели.", + "alreadyStarted": "Восстановление уже началось. Обновите историю и используйте последнюю попытку.", + "notEligible": "Этот элемент нельзя восстановить вложением." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/sk.json b/src/messages/sk.json index 65725d29..53a68cfc 100644 --- a/src/messages/sk.json +++ b/src/messages/sk.json @@ -1,3918 +1,4913 @@ { - "draftRecovery": { - "ready": "Kópia na obnovenie bude v tomto prehliadači uchovaná 7 dní.", - "saved": "Kópia na obnovenie bola v tomto prehliadači uložená na 7 dní.", - "unavailable": "Obnovenie v prehliadači nie je dostupné. Nechaj túto stránku otvorenú, kým sa zmeny neuložia.", - "found": "V tomto prehliadači je dostupná kópia na obnovenie, uložená", - "restore": "Obnoviť kópiu z prehliadača", - "discard": "Odstrániť kópiu z prehliadača", - "confirmRestore": "Nahradiť aktuálny formulár kópiou z prehliadača? Pred uložením skontroluj obsah.", - "confirmDiscard": "Odstrániť túto kópiu z prehliadača? Aktuálny formulár zostane nezmenený." - }, - "nav": { - "home": "Domov", - "community": "Spoločenstva", - "articles": "články", - "photos": "Fotografie", - "staff": "personál", - "rankings": "Rebríček", - "guilds": "cechy", - "leaderboards": "Rebríčky", - "rareValues": "Vzácne hodnoty", - "shop": "Obchod", - "market": "trhu", - "assistance": "Pomoc", - "helpCenter": "Centrum pomoci", - "myTickets": "Moje lístky", - "badges": "Odznaky", - "radio": "Rádio", - "friends": "Priatelia", - "messages": "Správy", - "admin": "Admin", - "openMenu": "Otvoriť menu", - "closeMenu": "Zatvoriť ponuku", - "drawBadge": "Nakreslite odznak", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} online", - "nitroClient": "Nitro klient", - "tagline": "Online virtuálny svet, kde si môžete vytvoriť svojho vlastného avatara, nadviazať priateľstvo, chatovať, vytvárať miestnosti a oveľa viac!", - "login": "Prihláste sa", - "or": "Alebo", - "createAccount": "Vytvorte si účet" - }, - "footer": { - "copyright": "© {year} - {hotel} je neziskový vzdelávací projekt" - }, - "pages": { - "staff": { - "title": "personál", - "subtitle": "Tím za hotelom", - "ranksTitle": "hodnosti", - "ranksSubtitle": "O čo sa stará každá časť tímu", - "membersTitle": "Členovia tímu", - "membersEmptySubtitle": "Momentálne niet koho ukázať", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "Žiadni zamestnanci na zobrazenie.", - "colUsername": "Používateľské meno", - "colRank": "Poradie", - "colMotto": "Motto" - }, - "leaderboard": { - "title": "Rebríček", - "subtitle": "20 najlepších hráčov podľa {currency}", - "tab_credits": "Kredity", - "tab_diamonds": "Diamanty", - "tab_duckets": "Duckets", - "tab_achievement": "Úspechy", - "tab_respects": "Úcta", - "tab_onlinetime": "Online čas", - "emptyState": "Zatiaľ žiadne hodnotenia na zobrazenie.", - "colAvatar": "Avatar", - "colPlayer": "Hráč" - }, - "friends": { - "title": "Priatelia", - "emptySubtitle": "Zatiaľ ste nepridali žiadnych priateľov", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Pridajte priateľov do hotela a zobrazia sa tu.", - "noMotto": "Žiadne 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": "Správy", - "subtitle": "Žiadosti o priateľstvo a offline správy na vás čakajú", - "requestsTitle": "Žiadosti o priateľstvo", - "requestsEmptySubtitle": "Nikto ešte nepožiadal, aby bol tvojím priateľom", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "Žiadne čakajúce žiadosti o priateľstvo.", - "wantsToBeFriend": "chce byť tvojím priateľom.", - "accept": "Prijať", - "offlineTitle": "Offline správy", - "offlineEmptySubtitle": "Vaša doručená pošta je prázdna", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "Nemáte žiadne offline správy.", - "unknownUser": "Používateľ #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Žiadne motto", - "statRank": "Poradie", - "statCredits": "Kredity", - "statRegistered": "Registrovaný", - "badgesTitle": "Odznaky", - "badgesEmpty": "Zatiaľ žiadne odznaky.", - "photosTitle": "Fotografie", - "photosEmpty": "Zatiaľ žiadne fotky.", - "guestbookTitle": "Kniha návštev", - "guestbookSubtitle": "Správy na nástenke používateľa {username}", - "leaveMessage": "Zanechajte odkaz", - "guestbookPlaceholder": "Napíšte niečo do knihy návštev používateľa {username}…", - "post": "Príspevok", - "loginToPost": "Ak chcete zanechať odkaz v knihe návštev, prihláste sa.", - "guestbookEmpty": "Zatiaľ žiadne záznamy v knihe návštev.", - "unknownUser": "Používateľ #{id}", - "statDuckets": "Duckets", - "statDiamonds": "Diamanty", - "walletTitle": "Peňaženka", - "friendsTitle": "Priatelia", - "friendsSubtitle": "Ľudia v hoteli, s ktorými sa stretávajú", - "friendsEmpty": "Žiadni priatelia na zobrazenie.", - "roomsTitle": "Izby", - "roomsSubtitle": "Izby, ktoré vlastnia", - "roomsEmpty": "Žiadne miestnosti na zobrazenie.", - "roomUntitled": "Izba bez názvu", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Rebríček", - "subtitle": "12 najlepších hráčov zoradených podľa kreditov", - "emptyState": "Zatiaľ žiadni hráči na hodnotenie." - }, - "home": { - "welcome": "Vitajte v {hotelName}", - "welcomeSubtitle": "Váš retro hotel, ktorý teraz používa Next.js", - "welcomeBody": "Stretnite sa, zbierajte nábytok a stretávajte sa s priateľmi.", - "enterHotel": "Zadajte {hotelName}", - "onlineFriends": "Priatelia online", - "noFriendsOnline": "Žiadni priatelia online", - "register": "ZAREGISTRUJTE SA TERAZ", - "joinNow": "Pripojte sa k {hotelName} ešte dnes!", - "recentUsers": "Nedávni používatelia", - "recentPhotos": "Najnovšie fotografie", - "latestNews": "Najnovšie správy", - "newsTitle": "Najnovšie správy", - "newsSubtitle": "Čerstvé z hotela", - "allNews": "Všetky novinky →", - "allUsers": "Komunita →", - "noArticles": "Zatiaľ žiadne články.", - "noPhotos": "Zatiaľ žiadne fotky.", - "noUsers": "Žiadni používatelia online", - "latestArticle": "Najnovší článok", - "latestUsers": "Najnovší občania ({count} celkom)", - "statsOnline": "Online", - "statsCitizens": "Občania", - "statsRooms": "Izby", - "statsArticles": "Články", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Vytvor si svoj jedinečný vzhľad", - "featuresFurniture": "Nábytok", - "featuresFurnitureDesc": "Vyzdob si izby predmetmi", - "featuresCommunity": "Komunita", - "featuresCommunityDesc": "Nájdi priateľov a chatuj", - "featuresGames": "Hry", - "featuresGamesDesc": "Súťaž a zabav sa" - }, - "news": { - "title": "Správy", - "subtitle": "Najnovšie oznámenia, udalosti a aktualizácie z hotela", - "noArticles": "Zatiaľ žiadne články." - }, - "article": { - "backToNews": "← Novinky", - "reactionsTitle": "Reakcie", - "reactionsSubtitle": "Povedzte nám, čo si myslíte", - "reaction": { - "like": "Ako", - "love": "láska", - "wow": "Páni" - }, - "removeReaction": "Kliknutím odstránite svoju reakciu", - "reactWith": "Reagovať pomocou {reaction}", - "noReactions": "Zatiaľ žiadne reakcie.", - "logIn": "Prihláste sa", - "toReact": "reagovať.", - "commentsTitle": "Komentáre", - "commentsSubtitle": "Zapojte sa do rozhovoru", - "commentsCount": "zatiaľ {count}", - "noComments": "Zatiaľ žiadne komentáre. Pridajte komentár ako prvý.", - "userNumber": "Používateľ #{id}", - "addComment": "Pridať komentár", - "commentPlaceholder": "Napíšte svoj komentár…", - "postComment": "Uverejniť komentár", - "toComment": "zanechať komentár.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Fotografie", - "subtitle": "Najnovšie snímky urobené v hoteli", - "noPhotos": "Zatiaľ žiadne fotky.", - "photoAlt": "Fotografia používateľa #{id}", - "byUser": "od používateľa #{id}" - }, - "badges": { - "title": "Odznaky", - "subtitle": "Odznaky, ktoré môžete získať a pochváliť sa nimi v okolí hotela", - "noBadges": "Zatiaľ nie sú k dispozícii žiadne odznaky." - }, - "community": { - "title": "Spoločenstva", - "subtitle": "Všetko sa deje okolo hotela na jednom mieste", - "open": "Otvorte →", - "links": { - "rankings": { - "title": "Rebríček", - "text": "Pozrite si najbohatších hráčov v hoteli zoradených podľa kreditov." - }, - "staff": { - "title": "personál", - "text": "Zoznámte sa s tímom, ktorý zabezpečuje chod hotela každý deň." - }, - "news": { - "title": "Správy", - "text": "Najnovšie oznámenia, udalosti a aktualizácie." - }, - "photos": { - "title": "Fotografie", - "text": "Snímky zdieľané komunitou z celého hotela." - }, - "guilds": { - "title": "cechy", - "text": "Prezrite si skupiny, ktoré hráči vytvorili a ku ktorým sa pridali." - }, - "leaderboards": { - "title": "Rebríčky", - "text": "Kto je v tejto sezóne na vrchole v štatistikách hotela." - } - } - }, - "guilds": { - "title": "cechy", - "subtitle": "Prezrite si skupiny, ktoré hráči vytvorili a ku ktorým sa pridali", - "empty": "Zatiaľ žiadne cechy.", - "unnamedGuild": "Nemenovaný spolok", - "noDescription": "Bez popisu" - }, - "guild": { - "allGuilds": "← Všetky cechy", - "unnamedGuild": "Nemenovaný spolok", - "noDescription": "Bez popisu", - "memberSingular": "člen", - "memberPlural": "členov", - "founded": "Založená", - "forumLink": "Fórum →", - "discussion": "Diskusia", - "membersTitle": "členov", - "memberLowerSingular": "členom", - "memberLowerPlural": "členov", - "noMembers": "Žiadni členovia.", - "owner": "Vlastník", - "noMotto": "Žiadne motto" - }, - "guildForum": { - "backToGuild": "← Späť do cechu", - "unnamedGuild": "Nemenovaný spolok", - "forumTitle": "{guild} — Fórum", - "threadSingular": "niť", - "threadPlural": "vlákna", - "newThread": "+ Nové vlákno", - "empty": "V tomto fóre zatiaľ nie sú žiadne vlákna.", - "colSubject": "Predmet", - "colAuthor": "Autor", - "colPosts": "Príspevky", - "colDate": "Dátum", - "noSubject": "(bez predmetu)", - "pinned": "Pripnuté", - "locked": "Zamknuté", - "userNumber": "Používateľ #{id}", - "unknown": "Neznámy", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Späť na fórum", - "unnamedGuild": "Nemenovaný spolok", - "title": "Nové vlákno", - "subtitle": "vo fóre {guild}", - "subjectLabel": "Predmet", - "subjectPlaceholder": "Predmet vlákna", - "messageLabel": "Správa", - "messagePlaceholder": "Napíšte svoj úvodný príspevok...", - "postThread": "Uverejniť vlákno", - "cancel": "Zrušiť", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Obchod", - "subtitle": "Doplňte si účet a získajte exkluzívne balíčky, menu a odznaky.", - "browsingCategory": "Prehliadanie balíkov {category}.", - "all": "Všetky", - "allPackages": "Všetky balíčky", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "Momentálne nie sú k dispozícii žiadne balíčky.", - "buy": "Kúpiť", - "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": "Doplňte cez PayPal", - "subtitle": "Plaťte bezpečne cez PayPal a vaše kredity sa pripočítajú v momente, keď sa platba zúčtuje.", - "cancelled": "Pokladňa bola zrušená – neprijala sa žiadna platba.", - "chooseAmount": "Vyberte sumu", - "notConfiguredPre": "PayPal ešte nie je nakonfigurovaný. Musí nastaviť správca", - "notConfiguredAnd": "a", - "notConfiguredOptional": "(a voliteľne", - "notConfiguredPost": "pre sandbox vs. live).", - "balanceTitle": "Vaša rovnováha", - "signedInAs": "Prihlásený ako {username}", - "credits": "Kredity", - "creditsPerUnit": "Kredity za 1,00 {currency}", - "rateLine": "Dostanete {amount} kreditov za 1,00 {currency}. Kredity sa objavia v hre pri ďalšom prihlásení." - }, - "marketplace": { - "title": "Trhovisko", - "subtitle": "Prehliadajte nábytok a vzácne predmety uvedené hráčmi. Záznamy sa umiestňujú do hry a aktualizujú sa naživo – vstúpte do hotela a urobte ponuku.", - "activeOffers": "Aktívne ponuky", - "sellers": "Predajcovia", - "totalValue": "Celková hodnota", - "activeListings": "Aktívne záznamy", - "mostRecentFirst": "Naposledy uvedené ako prvé", - "empty": "Momentálne neexistujú žiadne aktívne ponuky na trhu. Vráťte sa sem neskôr.", - "colOffer": "Ponuka", - "colItem": "Položka", - "colSeller": "Predávajúci", - "colPrice": "Cena", - "colListed": "Uvedené", - "itemLabel": "Položka č. {id}", - "userLabel": "Používateľ #{id}", - "justNow": "práve teraz", - "minutesAgo": "pred {count}m", - "hoursAgo": "pred {count}h", - "daysAgo": "pred {count}d" - }, - "rares": { - "title": "Vzácne hodnoty", - "subtitle": "Získajte prehľad o všetkých vzácnych hoteloch, zoskupených podľa kategórií.", - "empty": "Momentálne tu nemáme uvedené žiadne vzácne.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Zobraziť vzácne →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Všetky vzácne", - "empty": "V tejto kategórii zatiaľ nie sú uvedené žiadne zriedkavé.", - "colRare": "Zriedkavé", - "colCredits": "Kredity", - "colCurrency": "mena", - "creditsValue": "{value} kreditov", - "duckets": "Duckets", - "diamonds": "Diamanty", - "credits": "Kredity" - }, - "redeem": { - "title": "Uplatniť voucher", - "subtitle": "Máte kód voucheru? Zadajte ho nižšie a pridajte odmenu na svoj účet.", - "enterCode": "Zadajte kód", - "oncePerAccount": "Každý kupón je možné uplatniť iba raz na účet.", - "balanceTitle": "Vaša rovnováha", - "signedInAs": "Prihlásený ako {username}", - "credits": "Kredity", - "instantCredit": "Uplatnené odmeny sa pripíšu okamžite a zobrazia sa v hre pri ďalšom prihlásení." - }, - "help": { - "title": "Centrum pomoci", - "subtitle": "Nájdite sprievodcov, témy podpory a pravidlá hotela – všetko, čo potrebujete na získanie pomoci.", - "myTickets": "Moje lístky →", - "topicsTitle": "Témy podpory", - "topicsSubtitle": "Prezrite si sprievodcov a odpovede na bežné otázky", - "topicsEmpty": "Zatiaľ žiadne témy pomoci.", - "rulesTitle": "Pravidlá hotela", - "rulesSubtitle": "Pred pobytom v hoteli si ich prečítajte", - "rulesEmpty": "Zatiaľ neboli zverejnené žiadne pravidlá.", - "categoryEmpty": "V tejto kategórii nie sú žiadne pravidlá." - }, - "helpCategory": { - "back": "← Centrum pomoci", - "topicSubtitle": "Téma Centra pomoci", - "moreTitle": "Ďalšie témy pomoci", - "moreSubtitle": "Prejsť na inú tému podpory" - }, - "helpTickets": { - "title": "Pomoc Vstupenky", - "subtitle": "Odošlite lístok personálu a sledujte svoje otvorené požiadavky.", - "statTotal": "Celkový počet lístkov", - "statOpen": "Otvorte", - "statClosed": "Zatvorené", - "newTitle": "Nový lístok", - "newSubtitle": "Popíšte svoj problém a personál vás bude nasledovať", - "subjectPlaceholder": "Predmet", - "contentPlaceholder": "Opíšte svoj problém…", - "submit": "Odoslať lístok", - "listTitle": "Vaše lístky", - "listSubtitle": "Každá žiadosť, ktorú ste poslali personálu", - "listEmpty": "Ešte nemáte lístky.", - "colId": "ID", - "colSubject": "Predmet", - "colStatus": "Stav", - "colCreated": "Vytvorené", - "statusOpen": "Otvorte", - "statusClosed": "Zatvorené", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Požiadajte o personál {hotel}", - "subtitle": "Z času na čas otvárame aplikácie pre zamestnancov. Ak narazíte na pozíciu, o ktorej máte pocit, že by ste sa na ňu perfektne hodili, neváhajte sa o ňu uchádzať.", - "noPositionsTitle": "Nie sú otvorené žiadne pozície", - "noPositionsBody": "Momentálne nie sú otvorené žiadne pozície. Vráťte sa neskôr a skontrolujte, či dovtedy máme nejaké voľné miesta. Ďakujeme za váš záujem.", - "noDeadline": "Nie je stanovený žiadny termín", - "deadline": "Uzávierka prihlášok: {date}", - "alreadyApplied": "Už ste požiadali o {rank}", - "aboutYou": "O vás", - "aboutPlaceholder": "Povedzte nám, prečo by ste boli skvelým {rank}…", - "applyFor": "Požiadať o {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": "Prihláste sa do tímu {hotel}", - "subtitle": "Tímové aplikácie otvárame pravidelne. Ak vidíte tím, ktorý sa vám hodí, neváhajte a prihláste sa!", - "noPositionsTitle": "Nie sú otvorené žiadne tímové pozície", - "noPositionsBody": "Momentálne nie sú otvorené žiadne tímové pozície. Vráťte sa neskôr a skontrolujte nové otvory. dakujem!", - "pending": "Vaša žiadosť čaká na spracovanie", - "aboutYou": "O vás", - "aboutPlaceholder": "Povedzte nám, prečo by ste sa skvele hodili na {rank}…", - "applyFor": "Požiadať o {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": "Rádio", - "subtitle": "Nalaďte si hotelové rádio – živé DJ sety, požiadavky a výkriky.", - "nowPlaying": "Teraz sa hrá", - "nothingPlaying": "Momentálne sa nič nehrá.", - "onAir": "Vysielané: {dj}", - "noDj": "Žiadny DJ vo vysielaní.", - "audioUnsupported": "Váš prehliadač nepodporuje zvukový prvok.", - "streamOffline": "Stream je momentálne offline.", - "exploreTitle": "Preskúmajte rádio", - "exploreSubtitle": "Plán, výkriky, žiadosti a ďalšie", - "linkSchedule": "Rozvrh", - "linkScheduleText": "Naša týždenná zostava DJov a show.", - "linkShouts": "Výkriky", - "linkShoutsText": "Výkriky a žiadosti komunity.", - "linkRequests": "Žiadosti", - "linkRequestsText": "Požiadajte DJa, aby zahral vašu obľúbenú skladbu.", - "linkApply": "Prihláste sa ako DJ", - "linkApplyText": "Pripojte sa k tímu a vydajte sa do éteru.", - "linkLeaderboard": "Rebríček", - "linkLeaderboardText": "Najlepší poslucháči zoradení podľa získaných bodov.", - "todayTitle": "Dnešný rozvrh", - "todayTitleWithDay": "Dnešný plán · {day}", - "todaySubtitle": "Čo je dnes v éteri", - "fullWeek": "Celý týždeň →", - "noShowsToday": "Na dnes nie sú naplánované žiadne predstavenia.", - "colTime": "Čas", - "colShow": "Zobraziť", - "colDj": "DJ", - "untitledShow": "Predstavenie bez názvu", - "userNumber": "Používateľ #{id}" - }, - "radioSchedule": { - "title": "Rozvrh rádia", - "subtitle": "Naša týždenná zostava DJov a show", - "empty": "Zatiaľ nie sú naplánované žiadne predstavenia.", - "colDay": "deň", - "colTime": "Čas", - "colDj": "DJ", - "colShow": "Zobraziť", - "noShows": "Žiadne predstavenia" - }, - "radioShouts": { - "title": "Rádiové výkriky", - "subtitle": "Výkriky a žiadosti komunity", - "postTitle": "Uverejnite výkrik", - "postSubtitle": "Pošlite správu DJovi do vysielania", - "messageLabel": "Vaša správa", - "messagePlaceholder": "Pošlite krik DJovi…", - "shoutButton": "Kričať", - "loginToPost": "Ak chcete uverejniť výkrik, prihláste sa.", - "latestTitle": "Najnovšie výkriky", - "latestSubtitle": "Najnovšie správy od poslucháčov", - "empty": "Zatiaľ žiadne výkriky. Buďte prvý!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Rádiové súťaže", - "subtitle": "Nalaďte sa a zúčastnite sa našich najnovších on-air súťaží", - "empty": "Zatiaľ žiadne súťaže.", - "contestLabel": "súťaž č. {id}", - "dateUnknown": "Dátum neznámy" - }, - "radioGiveaways": { - "title": "Darčeky v rádiu", - "subtitle": "Vypočujte si svoju šancu vyhrať v našich rozhlasových darčekoch", - "empty": "Zatiaľ žiadne darčeky.", - "giveawayLabel": "Darček č. {id}", - "dateUnknown": "Dátum neznámy" - }, - "radioLeaderboard": { - "title": "Rebríček poslucháčov rádia", - "subtitle": "50 najlepších poslucháčov podľa bodov získaných naladením rádia", - "empty": "Zatiaľ žiadne body poslucháča na zobrazenie.", - "colRank": "Poradie", - "colAvatar": "Avatar", - "colListener": "Poslucháč", - "colPoints": "Body" - }, - "radioRequests": { - "formTitle": "Odoslať žiadosť", - "formSubtitle": "Požiadajte DJa, aby prehral vašu obľúbenú skladbu", - "songLabel": "Pieseň", - "songPlaceholder": "Názov piesne", - "artistLabel": "Umelec", - "artistPlaceholder": "Meno umelca (voliteľné)", - "submitButton": "Odoslať žiadosť", - "loginToRequest": "Ak chcete odoslať žiadosť, prihláste sa.", - "latestTitle": "Nedávne žiadosti", - "latestSubtitle": "Najnovšie požadované skladby", - "empty": "Zatiaľ žiadne žiadosti.", - "colSong": "Pieseň", - "colArtist": "Umelec", - "colRequester": "Žiadateľ", - "colDate": "Dátum", - "colStatus": "Stav", - "statusPending": "Čaká na spracovanie", - "statusApproved": "Schválené", - "statusPlayed": "Hrané", - "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": "Prihláste sa ako Rádio DJ", - "subtitle": "Povedzte nám o sebe a o tom, prečo by ste sa skvele hodili do éteru", - "latestTitle": "Vaša najnovšia aplikácia", - "statusLabel": "Stav:", - "submittedOn": "· odoslané {date}", - "submitAgain": "Ak sa vaše údaje zmenili, môžete ich znova odoslať nižšie.", - "formTitle": "Formulár žiadosti", - "formSubtitle": "Všetky polia označené ako povinné musia byť vyplnené", - "realNameLabel": "Skutočné meno", - "realNamePlaceholder": "Vaše celé meno", - "ageLabel": "Vek", - "availabilityLabel": "Dostupnosť", - "availabilityPlaceholder": "Ktoré dni a časy môžete vysielať?", - "musicStyleLabel": "Hudobný štýl", - "musicStylePlaceholder": "napr. House, Pop, Hip-Hop", - "experienceLabel": "Skúsenosti", - "optional": "(voliteľné)", - "experiencePlaceholder": "Máte nejaké predchádzajúce skúsenosti s DJ-om alebo hosťovaním?", - "motivationLabel": "Motivácia", - "motivationPlaceholder": "Prečo sa chceš stať členom rozhlasového tímu?", - "submitButton": "Odoslať žiadosť", - "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": "Nastavenia účtu", - "accountSettingsSubtitle": "Spravujte svoj profil, zabezpečenie a prepojené účty", - "publicProfile": "Váš verejný profil", - "noMotto": "Žiadne motto", - "noEmail": "Žiadny e-mail v zázname", - "changeMotto": "Zmeňte motto", - "changeMottoSubtitle": "Aktualizuje sa okamžite v hre, ak ste online", - "mottoPlaceholder": "Tvoje motto", - "saveMotto": "Uložiť motto", - "securityTitle": "Bezpečnosť", - "securitySubtitle": "Dvojfaktorové overenie", - "securityDescription": "Pridajte do svojho účtu druhú vrstvu ochrany.", - "twoFactorLink": "Dvojfaktorové overenie" - }, - "settings2fa": { - "backToSettings": "← Nastavenia", - "title": "Dvojfaktorové overenie", - "subtitle": "Pridajte druhú vrstvu zabezpečenia pomocou autentifikačnej aplikácie", - "nowEnabled": "2FA je teraz povolená. 🔒", - "disabledNotice": "2FA bola zakázaná.", - "badCode": "Tento kód nebol platný – skúste to znova.", - "noAppKeyPrefix": "2FA nie je k dispozícii do", - "noAppKeyMiddle": "je nakonfigurovaný (rovnaký Laravel", - "noAppKeySuffix": "ako váš AtomCMS nainštalujete, takže existujúce tajomstvá zostanú čitateľné).", - "isEnabled": "2FA je povolená", - "onYourAccount": "na vašom účte.", - "disable": "Zakázať 2FA", - "scanOrEnter": "Naskenujte alebo zadajte tento kľúč", - "scanInstructions": "Pridajte to do aplikácie Google Authenticator / Authy a potvrďte zadaním 6-ciferného kódu.", - "manualKey": "Manuálny kľúč:", - "codePlaceholder": "6-miestny kód", - "confirm": "Potvrďte", - "enableIntro": "Pridajte druhú vrstvu zabezpečenia pomocou autentifikačnej aplikácie.", - "enable": "Povoliť 2FA" - }, - "title": "Prepojené účty", - "subtitle": "Prepojte sociálny účet, aby ste sa mohli prihlásiť jedným kliknutím", - "connected": "Pripojené", - "unavailable": "nedostupné", - "login": { - "title": "Prihláste sa", - "subtitle": "Vitajte späť — prihláste sa pre vstup do hotela.", - "subtitle2fa": "Zadajte 6-miestny kód z vášho autentifikátora.", - "usernamePlaceholder": "Používateľské meno", - "passwordPlaceholder": "heslo", - "codePlaceholder": "2FA kód", - "pleaseWait": "Čakajte prosím…", - "verify": "Overiť", - "signIn": "Prihláste sa", - "or": "alebo", - "noAccount": "Žiadny účet?", - "createOne": "Vytvorte si ho", - "forgotPassword": "Zabudli ste heslo?", - "errorInvalidCredentials": "Neplatné používateľské meno alebo heslo", - "errorInvalid2fa": "Neplatný kód 2FA", - "welcomeBack": "Vitaj späť", - "welcomeBackSub": "Prihlás sa pre pokračovanie do {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Vytvoriť účet", - "subtitle": "Pripojte sa k hotelu – trvá to len chvíľu.", - "username": "Používateľské meno", - "email": "Email", - "password": "heslo", - "confirmPassword": "Zopakujte heslo", - "usernamePlaceholder": "Používateľské meno", - "emailPlaceholder": "Email", - "passwordPlaceholder": "Heslo (min. 6 znakov)", - "confirmPasswordPlaceholder": "Zopakujte heslo", - "selectOutfit": "Vyberte si oblečenie", - "termsAccept": "Mám 18+ a súhlasím so zmluvnými podmienkami a pravidlami {hotel}.", - "createAccount": "Vytvoriť účet", - "creatingAccount": "Vytvára sa účet...", - "redirecting": "Presmerovávam na váš účet...", - "alreadyHaveAccount": "Už máte účet? Prihláste sa!", - "register": "Zaregistrujte sa", - "termsError": "Ak sa chcete zaregistrovať, musíte prijať podmienky a pravidlá.", - "usernameError": "Vyžaduje sa používateľské meno.", - "emailError": "Vyžaduje sa platný e-mail.", - "passwordError": "Heslo musí mať aspoň 6 znakov.", - "confirmPasswordError": "Heslá sa nezhodujú.", - "termsRequired": "Musíte prijať podmienky a pravidlá.", - "usernameRequired": "Vyžaduje sa používateľské meno.", - "emailRequired": "Vyžaduje sa e-mail.", - "passwordRequired": "Vyžaduje sa heslo.", - "passwordsDontMatch": "Heslá sa nezhodujú.", - "alreadyHaveAccountPre": "Už máš účet?", - "alreadyHaveAccountLink": "Prihlásiť sa", - "whoIsOnline": "Kto je online", - "usersOnline": "{count} online" - }, - "forgot": { - "title": "Obnoviť heslo", - "subtitle": "Pošleme vám e-mailom zabezpečený odkaz na nastavenie nového hesla.", - "sentNotice": "Ak je tento e-mail zaregistrovaný, bol odoslaný odkaz na obnovenie. Skontrolujte si doručenú poštu.", - "emailPlaceholder": "Váš email", - "sendResetLink": "Odoslať odkaz na obnovenie", - "backToLogin": "Späť na prihlásenie", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Nastavte si nové heslo", - "subtitle": "Zvoľte si silné heslo, ktoré inde nepoužívate.", - "passwordPlaceholder": "Nové heslo (min. 6 znakov)", - "resetPassword": "Obnoviť heslo", - "backToLogin": "Späť na prihlásenie" - }, - "verify": { - "verifiedTitle": "Všetko je pripravené", - "verifiedSubtitle": "E-mail overený", - "verifiedBody": "Vaša e-mailová adresa bola overená. Teraz sa môžete prihlásiť a hrať.", - "goToLogin": "Prejdite na prihlásenie", - "alreadyTitle": "Už overené", - "alreadySubtitle": "Už nie je čo robiť", - "alreadyBody": "Táto e-mailová adresa už bola potvrdená.", - "unavailableTitle": "Skúste to znova o chvíľu", - "unavailableSubtitle": "Server je nedostupný", - "unavailableBody": "Nepodarilo sa nám spojiť so serverom a overiť váš e-mail. Skúste odkaz znova o chvíľu.", - "invalidTitle": "Overenie e-mailom", - "invalidSubtitle": "Neplatný odkaz alebo odkaz, ktorého platnosť vypršala", - "invalidBody": "Tento overovací odkaz nie je platný. Uistite sa, že ste otvorili celý odkaz zo svojho e-mailu, alebo požiadajte o nový.", - "backToLogin": "Späť na prihlásenie" - }, - "banned": { - "title": "Máte zákaz", - "subtitle": "Účet pozastavený", - "body": "Váš účet bol v hoteli pozastavený.", - "reasonLabel": "dôvod:", - "permanent": "Tento zákaz je trvalý.", - "expires": "Platnosť vyprší {date}.", - "contactStaff": "Ak si myslíte, že ide o chybu, kontaktujte tím zamestnancov." - }, - "maintenance": { - "title": "{hotel} je v údržbe", - "subtitle": "Čoskoro sa vrátime", - "staffCanLogIn": "Zamestnanci sa stále môžu prihlásiť." - }, - "admin": { - "nav": { - "overview": "Prehľad", - "dashboard": "Dashboard", - "content": "Obsah", - "articles": "články", - "tags": "Tagy", - "navigator": "Navigátor", - "helpCenter": "Centrum pomoci", - "advertisements": "Reklamy", - "writeableBoxes": "Popisovateľné boxy", - "photos": "Fotografie", - "tickets": "Vstupenky", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Používatelia a prístup", - "users": "Používatelia", - "bans": "Zákazy", - "ipManagement": "Správa IP", - "vpn": "VPN", - "applications": "Aplikácie", - "teams": "Tímy", - "permissions": "Povolenia", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "ekonomika", - "catalog": "Katalóg", - "shop": "Obchod", - "transactions": "Transakcie", - "vouchers": "poukážky", - "subscriptions": "Predplatné", - "rareValues": "Vzácne hodnoty", - "badges": "Odznaky", - "achievements": "Úspechy", - "calendar": "Kalendár", - "radio": "Rádio", - "radioHistory": "História rádia", - "radioBanners": "Bannery", - "radioEmbed": "Vložiť", - "radioApiKeys": "API kľúče", - "radioModeration": "Moderovanie", - "radioSettings": "Nastavenia", - "radioMonitoring": "Monitorovanie", - "radioPoints": "Body", - "radioRanks": "hodnosti", - "radioAutodj": "Auto DJ", - "system": "Systém", - "commandocentrum": "Commandocentrum", - "emulator": "Emulátor", - "alerts": "Upozornenia", - "logs": "Denníky", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Filter slov", - "maintenance": "Údržba", - "rooms": "Izby", - "emailTemplates": "E-mailové šablóny", - "theme": "Téma", - "media": "Médiá", - "favicon": "Favicon", - "sounds": "Zvuky", - "translations": "Preklady", - "import": "Importovať", - "settings": "Nastavenia", - "backToSite": "Späť na stránku", - "housekeeping": "Upratovanie", - "hotelManagementPanel": "Panel riadenia hotela", - "rankLabel": "Hodnotenie {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Dashboard", - "subtitle": "Prehľad hotela a aktuálny stav", - "playersOnline": "Hráči online", - "articles": "články", - "activeBans": "Aktívne zákazy", - "database": "Databáza", - "databaseConnected": "Pripojené", - "databaseDown": "Dole", - "usersByRank": "Používatelia podľa hodnosti", - "noAccountsToBreakDown": "Zatiaľ žiadne účty na rozdelenie", - "rankLabel": "Hodnotenie {rank}", - "rankWithCount": "Hodnosť {rank}: {count} účtov", - "recentStaffActivity": "Nedávna aktivita zamestnancov", - "viewAll": "Zobraziť všetky", - "noStaffActivityLogged": "Zatiaľ nie je zaznamenaná žiadna aktivita zamestnancov" - }, - "articles": { - "title": "články", - "subtitle": "Spravodajské články — 50 najnovších", - "newArticle": "+ Nový článok", - "edit": "Upraviť", - "delete": "Odstrániť", - "noArticles": "Zatiaľ žiadne články", - "confirmDelete": "Naozaj chcete odstrániť „{title}“?", - "colTitle": "Názov", - "colSlug": "Slimák", - "colAuthor": "Autor", - "colCreated": "Vytvorené", - "colActions": "Akcie", - "form": { - "title": "Názov", - "titlePlaceholder": "Názov článku", - "slug": "Slimák", - "slugPlaceholder": "article-url-slug", - "category": "Kategória", - "categoryPlaceholder": "Vyberte kategóriu", - "body": "Telo", - "bodyPlaceholder": "Napíšte obsah článku...", - "image": "Obrázok", - "imagePlaceholder": "https://example.com/obrazok.png", - "thumbnail": "Miniatúra", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Zverejnené", - "featured": "Odporúčané", - "save": "Uložiť článok", - "saving": "Ukladá sa…", - "deleteArticle": "Odstrániť článok", - "deleteConfirm": "Túto akciu nie je možné vrátiť späť. Článok bude natrvalo odstránený.", - "cancel": "Zrušiť", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Tagy", - "subtitle": "Štítky / kategórie článkov", - "addTag": "Pridať značku", - "name": "Meno", - "namePlaceholder": "Názov značky", - "backgroundColour": "Farba pozadia", - "createTag": "Vytvorte značku", - "editTag": "Upraviť značku", - "updateTag": "Aktualizovať značku", - "deleteTag": "Odstrániť značku", - "confirmDelete": "Odstrániť „{name}“?", - "noTags": "Zatiaľ žiadne značky", - "colId": "ID", - "colTag": "Tag", - "colColour": "Farba", - "colUsedBy": "Používa", - "colCreated": "Vytvorené", - "colActions": "Akcie" - }, - "navigation": { - "title": "Navigátor", - "flatCategories": "Ploché kategórie", - "publicRooms": "Verejné miestnosti", - "addCategory": "Pridať kategóriu", - "editCategory": "Upraviť kategóriu", - "deleteCategory": "Odstrániť kategóriu", - "categoryName": "Názov kategórie", - "categoryNamePlaceholder": "napr. Chill & Chat", - "categoryOrder": "Objednať", - "roomName": "Názov miestnosti", - "roomNamePlaceholder": "napr. Welcome Lounge", - "roomId": "ID miestnosti", - "roomIdPlaceholder": "Číselné ID miestnosti", - "save": "Uložiť", - "cancel": "Zrušiť", - "noCategories": "Zatiaľ žiadne kategórie", - "noPublicRooms": "Zatiaľ žiadne verejné miestnosti", - "colId": "ID", - "colName": "Meno", - "colOrder": "Objednať", - "colRooms": "Izby", - "colActions": "Akcie" - }, - "helpCenter": { - "title": "Centrum pomoci", - "subtitle": "Podporné položky a správa často kladených otázok", - "entries": "Príspevky", - "newEntry": "+ Nový záznam", - "edit": "Upraviť", - "delete": "Odstrániť", - "noEntries": "Zatiaľ žiadne záznamy", - "confirmDelete": "Odstrániť „{title}“?", - "colId": "ID", - "colTitle": "Názov", - "colCategory": "Kategória", - "colCreated": "Vytvorené", - "colActions": "Akcie", - "form": { - "title": "Názov", - "titlePlaceholder": "Názov položky", - "category": "Kategória", - "categoryPlaceholder": "Vyberte kategóriu", - "body": "Telo", - "bodyPlaceholder": "Napíšte odpoveď…", - "save": "Uložiť záznam", - "saving": "Ukladá sa…", - "deleteEntry": "Odstrániť záznam", - "cancel": "Zrušiť" - } - }, - "ads": { - "title": "Reklamy", - "subtitle": "Správa hotelových reklám a propagačných bannerov", - "newAd": "+ Nová reklama", - "edit": "Upraviť", - "delete": "Odstrániť", - "noAds": "Zatiaľ žiadne inzeráty", - "confirmDelete": "Odstrániť túto reklamu?", - "colId": "ID", - "colName": "Meno", - "colImage": "Obrázok", - "colUrl": "URL", - "colViews": "Zobrazenia", - "colStatus": "Stav", - "colCreated": "Vytvorené", - "colActions": "Akcie", - "form": { - "name": "Meno", - "namePlaceholder": "Názov reklamy", - "image": "Adresa URL obrázka", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Cieľová adresa URL", - "urlPlaceholder": "https://example.com", - "enabled": "Povolené", - "save": "Uložiť reklamu", - "saving": "Ukladá sa…", - "deleteAd": "Odstrániť inzerát", - "cancel": "Zrušiť" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Zapisovateľné boxy", - "subtitle": "Panely obsahu zobrazené v hoteli a CMS", - "newBox": "Nová krabica", - "edit": "Upraviť", - "delete": "Odstrániť", - "noBoxes": "Zatiaľ žiadne zapisovateľné políčka", - "confirmDelete": "Odstrániť toto pole?", - "colId": "ID", - "colName": "Meno", - "colLocation": "Poloha", - "colUpdated": "Aktualizované", - "colActions": "Akcie", - "form": { - "name": "Meno", - "namePlaceholder": "Názov krabice", - "location": "Poloha", - "locationPlaceholder": "napr. domovská stránka, bočný panel", - "content": "Obsah", - "contentPlaceholder": "Napíšte obsah krabice...", - "enabled": "Povolené", - "save": "Uložiť pole", - "saving": "Ukladá sa…", - "deleteBox": "Odstrániť pole", - "cancel": "Zrušiť" - } - }, - "photos": { - "title": "Moderovanie fotografií", - "subtitle": "Najnovšie fotografie z fotoaparátu v hre", - "delete": "Odstrániť", - "approve": "schváliť", - "noPhotos": "Žiadne fotky na moderovanie", - "confirmDelete": "Chcete túto fotku natrvalo odstrániť?", - "colId": "ID", - "colPreview": "Ukážka", - "colUser": "Používateľ", - "colRoom": "Izba", - "colTimestamp": "Časová pečiatka", - "colActions": "Akcie", - "photoAlt": "Používateľská fotografia č. {id}", - "byUser": "od používateľa {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Používatelia", - "subtitle": "Prehliadajte, vyhľadávajte a spravujte hotelové účty", - "search": "Hľadať", - "searchPlaceholder": "Hľadajte podľa používateľského mena, e-mailu alebo ID…", - "searchResults": "{count, plural, one {# result} other {# results}} for \"{query}\"", - "noResults": "Nenašli sa žiadni používatelia", - "colId": "ID", - "colUsername": "Používateľské meno", - "colEmail": "Email", - "colRank": "Poradie", - "colOnline": "Online", - "colRegistered": "Registrovaný", - "colLastOnline": "Naposledy online", - "colActions": "Akcie", - "yes": "áno", - "no": "Nie", - "edit": "Upraviť", - "setRank": "Nastaviť hodnosť", - "disconnect": "Odpojiť", - "alert": "Upozornenie", - "ban": "Zákaz", - "detail": { - "title": "Používateľ: {username}", - "subtitle": "Podrobnosti o účte a správa", - "overview": "Prehľad", - "actions": "Akcie", - "username": "Používateľské meno", - "email": "Email", - "motto": "Motto", - "rank": "Poradie", - "credits": "Kredity", - "duckets": "Duckets", - "diamonds": "Diamanty", - "online": "Online", - "registered": "Registrovaný", - "lastOnline": "Naposledy online", - "ipAddress": "IP adresa", - "machineId": "ID stroja", - "sendAlert": "Odoslať upozornenie", - "sendMessage": "Odoslať správu", - "disconnectUser": "Odpojiť používateľa", - "banUser": "Zakázať používateľovi", - "resetPassword": "Obnoviť heslo", - "deleteUser": "Odstrániť používateľa", - "confirmDelete": "Naozaj chcete odstrániť používateľa {username}? Toto sa nedá vrátiť späť.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Upraviť používateľa: {username}", - "subtitle": "Upravte podrobnosti účtu", - "username": "Používateľské meno", - "usernamePlaceholder": "Používateľské meno", - "email": "Email", - "emailPlaceholder": "user@example.com", - "motto": "Motto", - "mottoPlaceholder": "Motto užívateľa", - "rank": "Poradie", - "credits": "Kredity", - "duckets": "Duckets", - "diamonds": "Diamanty", - "save": "Uložiť zmeny", - "saving": "Ukladá sa…", - "cancel": "Zrušiť" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Zákazy", - "subtitle": "Spravujte zákazy účtu, IP a strojov", - "newBan": "Nový zákaz", - "edit": "Upraviť", - "delete": "Odstrániť", - "noBans": "Zatiaľ žiadne zákazy", - "confirmDelete": "Odstrániť tento zákaz?", - "colId": "ID", - "colValue": "Hodnota", - "colType": "Typ", - "colReason": "Dôvod", - "colBannedBy": "Zakázané používateľom", - "colExpires": "Platnosť vyprší", - "colCreated": "Vytvorené", - "colActions": "Akcie", - "form": { - "value": "Hodnota", - "valuePlaceholder": "Používateľské meno, IP alebo ID počítača", - "type": "Typ", - "typeUser": "Používateľ", - "typeIp": "IP", - "typeMachine": "Stroj", - "reason": "Dôvod", - "reasonPlaceholder": "Dôvod zákazu", - "expiresAt": "Platnosť vyprší o", - "permanent": "Trvalé", - "save": "Uložiť zákaz", - "saving": "Ukladá sa…", - "cancel": "Zrušiť" - } - }, - "ip": { - "title": "Správa IP", - "subtitle": "Spravujte bielu a čiernu listinu IP adries", - "whitelist": "Whitelist", - "blacklist": "Čierna listina", - "addIp": "Pridajte IP", - "ipAddress": "IP adresa", - "ipAddressPlaceholder": "napr. 127.0.0.1", - "reason": "Dôvod", - "reasonPlaceholder": "Dôvod zaradenia do zoznamu", - "add": "Pridať", - "remove": "Odstrániť", - "confirmRemove": "Chcete odstrániť túto adresu IP zo {list}?", - "noWhitelistedIps": "Žiadne adresy IP na zozname povolených", - "noBlacklistedIps": "Žiadne adresy IP na čiernej listine", - "colIp": "IP", - "colReason": "Dôvod", - "colAdded": "Pridané", - "colActions": "Akcie" - }, - "vpn": { - "title": "Detekcia VPN / proxy", - "subtitle": "Nakonfigurujte nastavenia detekcie VPN a proxy", - "enabled": "Povolené", - "apiKey": "API kľúč", - "apiKeyPlaceholder": "Váš kľúč API na detekciu VPN", - "apiKeyHint": "Ak chcete deaktivovať, ponechajte prázdne", - "blockOnDetect": "Blokovať pri detekcii", - "blockOnDetectHint": "Automaticky blokovať používateľov zistených za VPN alebo proxy", - "save": "Uložiť nastavenia", - "saving": "Ukladá sa…", - "settingsSaved": "Nastavenia VPN boli úspešne uložené" - }, - "applications": { - "title": "Zamestnanecké aplikácie", - "subtitle": "Čakajúce a skontrolované žiadosti zamestnancov", - "pending": "Čaká na spracovanie", - "approved": "Schválené", - "rejected": "Odmietnuté", - "noApplications": "Zatiaľ žiadne aplikácie", - "colId": "ID", - "colApplicant": "Žiadateľ", - "colPosition": "pozícia", - "colStatus": "Stav", - "colSubmitted": "Predložené", - "colActions": "Akcie", - "review": "recenzia", - "approve": "schváliť", - "reject": "Odmietnuť", - "confirmApprove": "Schváliť používateľa {username} na pozícii {position}?", - "confirmReject": "Odmietnuť žiadosť používateľa {username} o pozíciu {position}?", - "detail": { - "title": "Žiadosť od používateľa {username}", - "subtitle": "Pre {position}", - "about": "O žiadateľovi", - "message": "Správa aplikácie", - "status": "Stav", - "submitted": "Predložené", - "noMessage": "Nebola poskytnutá žiadna správa" - } - }, - "teams": { - "title": "Tímy", - "subtitle": "Definujte názvy a popisy hodností zamestnancov", - "addRank": "Pridať hodnosť", - "editRank": "Upraviť hodnosť", - "deleteRank": "Odstrániť hodnosť", - "noTeams": "Zatiaľ žiadne definície hodností", - "confirmDelete": "Chcete odstrániť definíciu hodnosti {id}?", - "colId": "ID", - "colRank": "Poradie", - "colName": "Meno", - "colBadge": "Odznak", - "colColour": "Farba", - "colActions": "Akcie", - "form": { - "rankId": "ID hodnosti", - "rankIdPlaceholder": "Číselné ID hodnosti", - "name": "Meno", - "namePlaceholder": "napr. správca", - "badge": "Kód odznaku", - "badgePlaceholder": "napr. ADM001", - "colour": "Farba", - "colourPlaceholder": "napr. #ff0000", - "save": "Uložiť definíciu tímu", - "saving": "Ukladá sa…", - "cancel": "Zrušiť" - } - }, - "permissions": { - "title": "Povolenia", - "subtitle": "Spravujte povolenia na základe hodnotenia pre panel správcu", - "addPermission": "Pridajte povolenie", - "editPermission": "Povolenie na úpravu", - "deletePermission": "Odstrániť povolenie", - "noPermissions": "Zatiaľ nie sú nakonfigurované žiadne povolenia", - "confirmDelete": "Odstrániť toto povolenie?", - "colId": "ID", - "colRank": "Poradie", - "colPermission": "Povolenie", - "colCreated": "Vytvorené", - "colActions": "Akcie", - "form": { - "rankId": "ID hodnosti", - "rankIdPlaceholder": "Vyžaduje sa minimálna hodnosť", - "permission": "Povolovací kľúč", - "permissionPlaceholder": "napr. spravovať.články", - "save": "Uložiť povolenie", - "saving": "Ukladá sa…", - "cancel": "Zrušiť" - } - }, - "catalog": { - "title": "Katalóg", - "subtitle": "Prehliadajte a spravujte katalógové stránky a položky", - "pages": "Stránky", - "items": "Položky", - "addPage": "Pridať stránku", - "editPage": "Upraviť stránku", - "deletePage": "Odstrániť stránku", - "addItem": "Pridať položku", - "editItem": "Upraviť položku", - "deleteItem": "Odstrániť položku", - "noPages": "Zatiaľ žiadne stránky katalógu", - "noItems": "Na tejto stránke nie sú žiadne položky", - "confirmDeletePage": "Odstrániť stránku katalógu „{name}“?", - "confirmDeleteItem": "Odstrániť túto položku?", - "colId": "ID", - "colName": "Meno", - "colIcon": "Ikona", - "colOrder": "Objednať", - "colItems": "Položky", - "colEnabled": "Povolené", - "colActions": "Akcie", - "colItemId": "ID položky", - "colItemName": "Názov položky", - "colCostCredits": "Cena (kredity)", - "colCostPoints": "Cena (body)", - "colLimited": "Obmedzené", - "pageForm": { - "name": "Meno", - "namePlaceholder": "Názov stránky", - "icon": "ID ikony", - "iconPlaceholder": "Číselné ID ikony", - "order": "Objednať", - "enabled": "Povolené", - "parent": "Rodičovská stránka", - "parentNone": "Žiadny (root)", - "save": "Uložiť stránku", - "saving": "Ukladá sa…", - "cancel": "Zrušiť" - }, - "itemForm": { - "itemId": "ID položky", - "itemName": "Názov položky", - "costCredits": "Náklady v kreditoch", - "costDuckets": "Náklady v kačkách", - "costDiamonds": "Cena v diamantoch", - "limitedStack": "Obmedzená veľkosť zásobníka", - "limitedSold": "Limitovane predané", - "save": "Uložiť položku", - "saving": "Ukladá sa…", - "cancel": "Zrušiť" - }, - "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." - } - }, - "shop": { - "title": "Obchod", - "subtitle": "Spravujte balíky a objednávky", - "packages": "Balíčky", - "orders": "objednávky", - "newPackage": "+ Nové balenie", - "edit": "Upraviť", - "delete": "Odstrániť", - "viewOrder": "Zobraziť", - "noPackages": "Zatiaľ žiadne nákupné balíčky", - "noOrders": "Zatiaľ žiadne objednávky", - "confirmDelete": "Odstrániť tento balík?", - "colId": "ID", - "colName": "Meno", - "colPrice": "Cena", - "colCurrency": "mena", - "colType": "Typ", - "colSold": "Predané", - "colEnabled": "Povolené", - "colActions": "Akcie", - "colOrderId": "ID objednávky", - "colCustomer": "Zákazník", - "colPackage": "Balíček", - "colAmount": "Suma", - "colStatus": "Stav", - "colDate": "Dátum", - "statusPending": "Čaká na spracovanie", - "statusCompleted": "Dokončené", - "statusRefunded": "Vrátené", - "form": { - "name": "Meno", - "namePlaceholder": "Názov balíka", - "description": "Popis", - "descriptionPlaceholder": "Popis balíka", - "price": "Cena", - "currency": "mena", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Typ", - "typeCredits": "Kredity", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamanty", - "typeBadge": "Odznak", - "typeFurni": "Nábytok", - "typeRank": "Poradie", - "amount": "Suma", - "badgeCode": "Kód odznaku", - "badgeCodePlaceholder": "napr. VIP001", - "rankId": "ID hodnosti", - "furniItems": "Nábytkové predmety", - "enabled": "Povolené", - "save": "Uložiť balík", - "saving": "Ukladá sa…", - "cancel": "Zrušiť" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Transakcie", - "subtitle": "denník platieb cez PayPal", - "noTransactions": "Zatiaľ žiadne transakcie", - "colId": "ID", - "colUser": "Používateľ", - "colAmount": "Suma", - "colCurrency": "mena", - "colPackage": "Balíček", - "colStatus": "Stav", - "colDate": "Dátum", - "colActions": "Akcie", - "statusCompleted": "Dokončené", - "statusPending": "Čaká na spracovanie", - "statusFailed": "Nepodarilo sa", - "statusRefunded": "Vrátené", - "detail": { - "title": "Transakcia č. {id}", - "paypalId": "PayPal ID", - "payerEmail": "E-mail platiteľa", - "grossAmount": "Hrubá suma", - "fee": "Poplatok", - "netAmount": "Čistá suma" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Nakupujte poukážky", - "subtitle": "Spravujte kódy kupónov s možnosťou uplatnenia", - "newVoucher": "+ Nový voucher", - "edit": "Upraviť", - "delete": "Odstrániť", - "noVouchers": "Zatiaľ žiadne poukážky", - "confirmDelete": "Odstrániť kupón „{code}“?", - "colId": "ID", - "colCode": "kód", - "colValue": "Hodnota", - "colType": "Typ", - "colUses": "Použitie / Max", - "colExpires": "Platnosť vyprší", - "colCreated": "Vytvorené", - "colActions": "Akcie", - "form": { - "code": "kód", - "codePlaceholder": "napr. LETO 2025", - "value": "Hodnota", - "type": "Typ", - "typeCredits": "Kredity", - "typeDuckets": "Duckets", - "typeDiamonds": "Diamanty", - "typeBadge": "Odznak", - "typeFurni": "Nábytok", - "typeRank": "Poradie", - "badgeCode": "Kód odznaku", - "badgeCodePlaceholder": "napr. VIP001", - "rankId": "ID hodnosti", - "maxUses": "Maximálne využitie", - "maxUsesPlaceholder": "0 = neobmedzené", - "expiresAt": "Platnosť vyprší o", - "enabled": "Povolené", - "save": "Uložiť voucher", - "saving": "Ukladá sa…", - "cancel": "Zrušiť", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Predplatné", - "subtitle": "Aktívne opakované odbery", - "noSubscriptions": "Žiadne aktívne odbery", - "cancel": "Zrušiť", - "confirmCancel": "Zrušiť odber pre používateľa {username}?", - "colId": "ID", - "colUser": "Používateľ", - "colPackage": "Balíček", - "colAmount": "Suma", - "colInterval": "Interval", - "colStarted": "Začaté", - "colNextBilling": "Ďalšie účtovanie", - "colStatus": "Stav", - "colActions": "Akcie", - "statusActive": "Aktívne", - "statusCancelled": "Zrušené", - "statusExpired": "Platnosť vypršala" - }, - "rareValues": { - "title": "Vzácne hodnoty", - "subtitle": "Spravujte kategórie vzácnych hodnôt a ceny položiek", - "categories": "kategórie", - "items": "Položky", - "addCategory": "Pridať kategóriu", - "editCategory": "Upraviť kategóriu", - "deleteCategory": "Odstrániť kategóriu", - "noCategories": "Zatiaľ žiadne vzácne hodnotové kategórie", - "confirmDeleteCategory": "Chcete odstrániť kategóriu „{name}“ a všetky jej položky?", - "colId": "ID", - "colName": "Meno", - "colItems": "Položky", - "colUpdated": "Aktualizované", - "colActions": "Akcie", - "colItemName": "Názov položky", - "colCredits": "Kredity", - "colPoints": "Body", - "colPointType": "Typ bodu", - "categoryForm": { - "name": "Meno", - "namePlaceholder": "Názov kategórie", - "save": "Uložiť kategóriu", - "saving": "Ukladá sa…", - "cancel": "Zrušiť" - }, - "itemForm": { - "itemName": "Názov položky", - "itemNamePlaceholder": "napr. Trón", - "credits": "Hodnota kreditov", - "points": "Hodnota bodov", - "pointType": "Typ bodu", - "pointTypeDuckets": "Duckets", - "pointTypeDiamonds": "Diamanty", - "save": "Uložiť položku", - "saving": "Ukladá sa…", - "cancel": "Zrušiť" - } - }, - "badges": { - "title": "Odznaky", - "subtitle": "Nahrávajte, dávajte a spravujte katalóg odznakov", - "upload": "Nahrať", - "giveBadge": "Dajte odznak", - "catalogue": "Katalóg", - "uploadTitle": "Nahrajte nový odznak", - "uploadSubtitle": "Nahrajte súbor obrázka odznaku", - "badgeCode": "Kód odznaku", - "badgeCodePlaceholder": "napr. VIP001", - "badgeFile": "Súbor odznaku", - "badgeFileHint": "PNG alebo GIF, odporúčané rozmery 40 x 40", - "uploadButton": "Nahrať", - "uploading": "Nahráva sa…", - "giveTitle": "Dajte používateľovi odznak", - "giveSubtitle": "Udeliť odznak konkrétnemu používateľovi", - "username": "Používateľské meno", - "usernamePlaceholder": "Cieľové používateľské meno", - "giveButton": "Dajte odznak", - "giving": "Dávať…", - "catalogueTitle": "Katalóg odznakov", - "catalogueSubtitle": "Všetky dostupné odznaky v hoteli", - "noBadges": "V katalógu nie sú žiadne odznaky", - "search": "Hľadať odznaky", - "searchPlaceholder": "Hľadať podľa kódu alebo názvu…", - "colCode": "kód", - "colImage": "Obrázok", - "colName": "Meno", - "colDescription": "Popis", - "colActions": "Akcie" - }, - "achievements": { - "title": "Úspechy", - "subtitle": "Zoznam herných úspechov iba na čítanie", - "noAchievements": "Nie sú nakonfigurované žiadne úspechy", - "colId": "ID", - "colName": "Meno", - "colCategory": "Kategória", - "colLevels": "Úrovne", - "colReward": "Odmena", - "colProgress": "Pokrok", - "levelLabel": "Úroveň {level}", - "rewardCredits": "{count} kreditov", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Kalendárové kampane", - "subtitle": "Zoznam kampaní a udalostí v kalendári iba na čítanie", - "noCampaigns": "Zatiaľ žiadne kampane v kalendári", - "colId": "ID", - "colName": "Meno", - "colStart": "Štart", - "colEnd": "Koniec", - "colType": "Typ", - "colReward": "Odmena", - "colActions": "Akcie", - "detail": { - "title": "Kampaň: {name}", - "subtitle": "Podrobnosti udalosti kalendára", - "days": "dní", - "dayLabel": "deň {day}", - "reward": "Odmena", - "noDays": "Pre túto kampaň nie sú nakonfigurované žiadne dni" - } - }, - "radio": { - "title": "Moderovanie rádia", - "subtitle": "Najnovšie výkriky, DJ aplikácie a on-air plány (25 najnovších z každého).", - "moderation": "Moderovanie", - "shouts": "Výkriky", - "applications": "Aplikácie", - "schedules": "Rozvrhy", - "settings": "Nastavenia", - "embed": "Vložiť", - "ranks": "hodnosti", - "history": "História", - "apiKeys": "API kľúče", - "points": "Body", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Rádiové monitorovanie", - "subtitle": "Živá sonda nakonfigurovaných rádiových koncových bodov iba na čítanie (radio_now_playing_api_url, radio_listeners_api_url). Každá požiadavka zlyhá s časovým limitom {timeout} s – nezapíšu sa žiadne dáta. Nakonfigurujte adresy URL v časti Nastavenia.", - "stream": "Stream", - "online": "Online", - "offline": "Offline", - "notConfigured": "Nie je nakonfigurované", - "nowPlaying": "Teraz sa hrá", - "nowPlayingApi": "Aktuálne prehrávané API", - "listenersApi": "Rozhranie API pre poslucháčov", - "listeners": "Poslucháči", - "currentSong": "Aktuálna skladba", - "bitrate": "Bitová rýchlosť", - "status": "Stav", - "noNowPlayingHint": "nie je teraz nastavené rozhranie API", - "noListenersHint": "nie je nastavené žiadne rozhranie API poslucháčov", - "endpointDiagnostics": "Diagnostika koncového bodu", - "diagnosticsLegend": "OK: dostupné · WARN: nenastavené · ERROR: požiadavka zlyhala alebo vypršal časový limit.", - "streamUrl": "Webová adresa streamu", - "unreachable": "nedosiahnuteľný", - "refresh": "Obnoviť" - }, - "user": "Používateľ", - "message": "Správa", - "posted": "Uverejnené", - "realName": "Skutočné meno", - "age": "Vek", - "style": "štýl", - "applied": "Aplikované", - "day": "deň", - "start": "Štart", - "end": "Koniec", - "show": "Zobraziť", - "status": "Stav", - "active": "aktívny", - "inactive": "neaktívne", - "hidden": "skryté", - "activeSchedules": "Aktívne rozvrhy", - "noShouts": "Žiadne výkriky na moderovanie", - "noApplications": "Neboli predložené žiadne žiadosti.", - "noSchedules": "Nie sú nakonfigurované žiadne plány.", - "deleteShout": "Odstrániť", - "confirmDeleteShout": "Odstrániť tento výkrik?", - "pendingApplications": "Čakajúce žiadosti", - "settingsForm": { - "title": "Nastavenia rádia", - "subtitle": "Úpravy sa zapisujú do website_settings (radio_* kľúče) a ničia vyrovnávaciu pamäť nastavení runtime. Booleany používajú 0/1.", - "enabled": "Povolené", - "disabled": "Zakázané", - "totalKeys": "Celkový počet kľúčov", - "configured": "Nakonfigurované", - "curatedHint": "spravované kľúče s hodnotou", - "customKeys": "Vlastné kľúče", - "saveAll": "Uložiť všetky", - "singleKey": "Pridať/prepísať jeden kľúč", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "hodnotu", - "commentPlaceholder": "komentár (voliteľné)", - "saveSingle": "Uložiť", - "otherSettings": "Ďalšie nastavenia rádia", - "dbError": "Nepodarilo sa načítať nastavenia (databáza nie je k dispozícii). Predvolené nastavenia sa vytvoria pri uložení." - }, - "embedPage": { - "title": "Rádio Embed", - "subtitle": "Kód na vloženie priameho prenosu pripravený na kopírovanie. Iba na čítanie — nič tu nezapisuje do databázy. Nakonfigurujte webovú adresu streamu v nastaveniach rádia (radio_stream_url).", - "streamUrl": "Webová adresa streamu", - "configured": "Nakonfigurované", - "missing": "Chýba", - "radioName": "Názov rádia", - "nowPlayingApi": "Aktuálne prehrávané API", - "set": "Set", - "notSet": "Nie je nastavené", - "noStreamUrl": "Nie je nakonfigurovaná žiadna adresa URL streamu", - "noStreamUrlText": "Nie je nastavená žiadna adresa_url rádia, takže zatiaľ nie je čo vkladať.", - "goToSettings": "Prejdite do časti Nastavenia rádia", - "livePreview": "Živá ukážka", - "livePreviewText": "Toto je holý audio prehrávač, ako ho uvidia návštevníci. Stlačením tlačidla prehrávania potvrďte, že stream je dostupný.", - "source": "Zdroj", - "audioSnippet": "Útržok zvukového prehrávača", - "audioSnippetDesc": "Zvukový prehrávač HTML5 nasmerovaný priamo na stream. Funguje všade, kde je povolený obyčajný HTML.", - "iframeSnippet": "Útržok obálky iframe", - "iframeSnippetDesc": "Vloží vlastnú stránku rádiového prehrávača do prvku iframe – zachová váš štýl a informácie o prehrávaní. Upravte šírku/výšku podľa chuti.", - "audioUnsupported": "Váš prehliadač nepodporuje zvukový prvok." - }, - "banners": { - "title": "Bannery", - "heading": "Rádiové bannery", - "description": "Propagačné bannery zobrazené na stránke rádia zoradené podľa poradia zoradenia.", - "addBanner": "Pridať banner", - "createBanner": "Vytvorte banner", - "deleteBanner": "Odstrániť banner", - "noBanners": "Zatiaľ žiadne bannery – pridajte jeden vyššie.", - "existing": "Existujúce bannery ({count})", - "save": "Uložiť", - "delete": "Odstrániť", - "byUser": "od používateľa {id}", - "active": "aktívny", - "hidden": "skryté", - "bannerAlt": "Rádiový banner", - "statusActive": "Aktívne", - "statusHidden": "Skryté", - "dbError": "Nepodarilo sa načítať bannery (databáza nie je k dispozícii).", - "form": { - "imagePath": "Cesta k obrázku / adresa URL", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Názov", - "description": "Popis", - "sortOrder": "Zoradiť poradie", - "active": "Aktívne" - } - }, - "ranksForm": { - "title": "Poradie rádia", - "subtitle": "Hodnosti DJov / zamestnancov priraditeľné v rádiových aplikáciách.", - "dbError": "Nepodarilo sa načítať hodnotenia (databáza nie je k dispozícii).", - "active": "Aktívne", - "addRank": "Pridať hodnosť", - "name": "Meno", - "badgeCode": "Kód odznaku", - "description": "Popis", - "createRank": "Vytvorte hodnosť", - "existing": "Existujúce hodnosti ({count})", - "noRanks": "Zatiaľ žiadne hodnotenia – pridajte vyššie.", - "activeLabel": "aktívny", - "inactiveLabel": "neaktívne", - "save": "Uložiť", - "deleteRank": "Odstrániť poradie č. {id}" - }, - "historyPage": { - "title": "História prehrávania rádia", - "subtitle": "Minulé dídžejské vystúpenia a vysielací čas (radio_history), najnovšie prvé. Záznam iba na čítanie o tom, kto, kedy vysielal a koľko poslucháčov si ho naladilo.", - "dbError": "Nepodarilo sa načítať históriu rádia (databáza nie je k dispozícii).", - "showsLogged": "Zobrazuje prihlásený", - "onAirNow": "Teraz vo vysielaní", - "uniqueDjs": "Jedineční DJs", - "peakListeners": "Špičkoví poslucháči", - "empty": "Zatiaľ nebola zaznamenaná žiadna história rádia.", - "showLog": "Zobraziť denník ({count})", - "colDj": "DJ", - "colShow": "Zobraziť", - "colStarted": "Začaté", - "colEnded": "Ukončené", - "colAirtime": "Vysielací čas", - "colListeners": "Poslucháči", - "colNotes": "Poznámky", - "onAir": "vo vzduchu" - }, - "apiKeysForm": { - "title": "Rádiové kľúče API", - "subtitle": "Kľúče API pre externé rádiové integrácie (radio_api_keys). Kľúče sa generujú na strane servera a zobrazujú sa maskované – pri prvom vydaní skopírujte celú hodnotu z databázy.", - "dbError": "Nepodarilo sa načítať kľúče API (databáza nie je k dispozícii).", - "totalKeys": "Celkový počet kľúčov", - "active": "Aktívne", - "inactive": "Neaktívne", - "generateKey": "Generovať kľúč", - "generateHint": "Tajný kľúč sa generuje automaticky s kryptografickou náhodnosťou — nezadávate ho.", - "name": "Meno", - "namePlaceholder": "Most AzureCast", - "rateLimit": "Limit sadzby (požiadavky/min)", - "allowedIps": "Povolené adresy IP (voliteľné)", - "allowedIpsPlaceholder": "oddelené čiarkou, prázdne = ľubovoľné", - "generate": "Generovať kľúč", - "existingKeys": "Existujúce kľúče ({count})", - "noKeys": "Zatiaľ žiadne kľúče API – vygenerujte si jeden vyššie.", - "colName": "Meno", - "colKey": "kľúč", - "colAllowedIps": "Povolené adresy IP", - "colRateLimit": "Limit sadzby", - "colLastUsed": "Naposledy použité", - "colExpires": "Platnosť vyprší", - "colStatus": "Stav", - "colActions": "Akcie", - "maskedHint": "Zobrazuje sa iba prvých 8 znakov", - "any": "akékoľvek", - "activeLabel": "aktívny", - "inactiveLabel": "neaktívne", - "deactivate": "Deaktivovať", - "activate": "Aktivovať", - "delete": "Odstrániť" - }, - "pointsForm": { - "title": "Body poslucháčov rádia", - "subtitle": "Odmeňte poslucháčov menami za čas strávený v rádiu. Úpravy sa zapisujú do website_settings (radio_points_* kľúče) a ničia vyrovnávaciu pamäť nastavení runtime. Booleany používajú 0/1.", - "saved": "Uložené", - "points": "Body", - "enabled": "Povolené", - "disabled": "Zakázané", - "perMinute": "Za minútu", - "paidIn": "zaplatené v {currency}", - "maxPerDay": "Max / deň", - "unlimited": "Neobmedzené", - "minListeners": "Min. poslucháčov", - "settings": "Nastavenia", - "pointsEnabled": "Body sú povolené", - "pointsEnabledHint": "Hlavný spínač na udeľovanie bodov poslucháčov.", - "currency": "mena", - "currencyHint": "Do ktorej peňaženky sa body vyplácajú.", - "pointsPerMinute": "Body za minútu", - "pointsPerMinuteHint": "Suma udelená za každú celú minútu počúvania.", - "maxPerDayHint": "Denný limit na používateľa. Použite 0 pre neobmedzené.", - "minListenersHint": "Body sa udeľujú len vtedy, keď je naladených aspoň toľko ľudí.", - "save": "Uložte nastavenia bodov" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Záložný zoznam skladieb (radio_auto_dj_playlist) rádio rotuje, keď nevysiela žiadny živý DJ. Zoradené podľa zoradenia a potom podľa názvu.", - "dbError": "Nepodarilo sa načítať zoznam skladieb AutoDJ (databáza nie je k dispozícii).", - "tracks": "Skladby", - "active": "Aktívne", - "inactive": "Neaktívne", - "addTrack": "Pridať skladbu", - "titlePlaceholder": "Názov skladby", - "artist": "Umelec", - "album": "album", - "artworkUrl": "Adresa URL umeleckého diela", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Trvanie (sekundy)", - "durationPlaceholder": "napr. 215", - "sortOrder": "Zoradiť poradie", - "playlist": "Zoznam videí ({count})", - "noTracks": "Zatiaľ žiadne stopy AutoDJ – pridajte jednu vyššie.", - "colOrder": "Objednať", - "colTitle": "Názov", - "colArtist": "Umelec", - "colAlbum": "album", - "colDuration": "Trvanie", - "colPlays": "Hrá", - "colLastPlayed": "Naposledy hrané", - "colStatus": "Stav", - "colActions": "Akcie", - "activeLabel": "aktívny", - "inactiveLabel": "neaktívne", - "deactivate": "Deaktivovať", - "activate": "Aktivovať", - "delete": "Odstrániť", - "trackTitle": "Názov" - }, - "moderationPage": { - "title": "Moderovanie DJ", - "subtitle": "Skontrolujte a odstráňte rozhlasové výkriky (50 najnovších).", - "recentShouts": "Nedávne výkriky ({count})" - } - }, - "commandocentrum": { - "title": "Commandocentrum", - "subtitle": "Diagnostika, ovládacie prvky RCON a správa používateľov", - "diagnostics": "Diagnostika", - "rcon": "RCON", - "userActions": "Akcie používateľa", - "diagnosticsTitle": "Diagnostika emulátora", - "memoryUsage": "Využitie pamäte", - "uptime": "Uptime", - "onlineUsers": "Online používatelia", - "roomsLoaded": "Izby nabité", - "refresh": "Obnoviť", - "rconTitle": "RCON príkazy", - "rconPlaceholder": "Zadajte príkaz RCON…", - "rconSend": "Odoslať", - "rconSending": "Odosiela sa…", - "rconResponse": "odpoveď", - "userActionsTitle": "Akcie používateľa", - "username": "Používateľské meno", - "usernamePlaceholder": "Cieľové používateľské meno", - "action": "Akcia", - "execute": "Vykonať", - "actions": { - "disconnect": "Odpojiť", - "alert": "Odoslať upozornenie", - "giveCredits": "Dajte kredity", - "giveBadge": "Dajte odznak", - "givePoints": "Dajte body", - "ban": "Zákaz", - "kick": "Kopať" - }, - "messagePlaceholder": "Správa (pre upozornenia)…", - "amountPlaceholder": "Suma…", - "badgePlaceholder": "Kód odznaku…" - }, - "emulator": { - "title": "Konfigurácia emulátora", - "subtitle": "Zobrazte a upravte nastavenia emulátora a texty miestnych nastavení", - "settings": "Nastavenia", - "texts": "Texty", - "search": "Hľadať", - "searchPlaceholder": "Vyhľadávacie klávesy…", - "noSettings": "Nenašli sa žiadne nastavenia", - "noTexts": "Nenašli sa žiadne texty", - "edit": "Upraviť", - "save": "Uložiť", - "saving": "Ukladá sa…", - "cancel": "Zrušiť", - "colKey": "kľúč", - "colValue": "Hodnota", - "colType": "Typ", - "colActions": "Akcie", - "editDialog": { - "title": "Upraviť: {key}", - "value": "Hodnota", - "valuePlaceholder": "Zadajte hodnotu…", - "save": "Uložiť zmeny", - "cancel": "Zrušiť" - } - }, - "alerts": { - "title": "Upozornenia", - "subtitle": "Odosielajte upozornenia pre celý hotel a zobrazujte posledné upozornenia", - "sendAlert": "Odoslať upozornenie na hotel", - "recentAlerts": "Nedávne upozornenia ({count})", - "noRecentAlerts": "Žiadne nedávne upozornenia", - "form": { - "title": "Názov upozornenia", - "titlePlaceholder": "napr. Údržba servera za 10 minút", - "message": "Výstražná správa", - "messagePlaceholder": "Napíšte varovnú správu…", - "type": "Typ", - "typeHotel": "Upozornenie pre celý hotel", - "typeStaff": "Iba personál", - "urgent": "Naliehavé", - "send": "Odoslať upozornenie", - "sending": "Odosiela sa…", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Názov", - "colSentBy": "Odoslal", - "colType": "Typ", - "colDate": "Dátum", - "colActions": "Akcie", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Aktivity zamestnancov", - "subtitle": "Kontrolný záznam akcií zamestnancov na paneli správcu", - "noLogs": "Zatiaľ nie je zaznamenaná žiadna aktivita zamestnancov", - "colId": "ID", - "colUser": "Používateľ", - "colAction": "Akcia", - "colTarget": "Cieľ", - "colDescription": "Popis", - "colIp": "IP", - "colTimestamp": "Časová pečiatka", - "filterByUser": "Filtrovať podľa používateľa…", - "filterByAction": "Filtrovať podľa akcie…", - "clearFilters": "Vymazať filtre", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Filter slov", - "subtitle": "Spravujte filtrované slová a frázy v hoteli", - "addWord": "Pridajte slovo", - "addWords": "Pridajte slová", - "noWords": "Zatiaľ žiadne filtrované slová", - "confirmDelete": "Chcete odstrániť slovo „{word}“ z filtra?", - "colId": "ID", - "colWord": "Slovo", - "colAddedBy": "Pridal", - "colCreated": "Vytvorené", - "colActions": "Akcie", - "form": { - "word": "Slovo", - "wordPlaceholder": "napr. zlé slovo", - "addMore": "Pridajte viacero slov (jedno na riadok)", - "save": "Pridať do filtra", - "saving": "Ukladá sa…", - "cancel": "Zrušiť" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Režim údržby", - "subtitle": "Povoliť alebo zakázať údržbu v celom hoteli", - "enabled": "Režim údržby je povolený", - "disabled": "Režim údržby je vypnutý", - "enable": "Povoliť údržbu", - "disable": "Zakázať údržbu", - "message": "Správa o údržbe", - "messagePlaceholder": "Čoskoro sa vrátime!", - "staffAccess": "Umožnite personálu prístup počas údržby", - "save": "Uložiť nastavenia", - "saving": "Ukladá sa…", - "confirmEnable": "Povolenie údržby zabráni všetkým používateľom, ktorí nie sú zamestnancami, v prístupe do hotela. Pokračovať?", - "confirmDisable": "Zakázať režim údržby a obnoviť prístup pre všetkých používateľov?" - }, - "housekeeping": { - "title": "Povolenia na upratovanie", - "subtitle": "Nakonfigurujte, ktoré hodnosti môžu pristupovať ku ktorým sekciám správcu", - "addPermission": "Pridajte povolenie", - "editPermission": "Povolenie na úpravu", - "deletePermission": "Odstrániť povolenie", - "noPermissions": "Nie sú nakonfigurované žiadne povolenia na upratovanie", - "confirmDelete": "Odstrániť toto povolenie?", - "colId": "ID", - "colRank": "Poradie", - "colSection": "oddiel", - "colActions": "Akcie", - "form": { - "rankId": "ID hodnosti", - "rankIdPlaceholder": "Minimálna hodnosť", - "section": "Sekčný kľúč", - "sectionPlaceholder": "napr. admin.dashboard", - "save": "Uložiť povolenie", - "saving": "Ukladá sa…", - "cancel": "Zrušiť" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset Aplikované!", - "cleared": "All Povolenia cleared!", - "invalidRank": "Invalid Poradie", - "testDone": "Test done: {count} Povolenia found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Odstrániť ALL Povolenia? This Akcia cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Povolenie", - "colDescription": "Popis", - "colMinRank": "Min. Poradie", - "permissionKey": "Povolovací kľúč", - "minRank": "Min. Poradie", - "description": "Popis", - "permissions": "Povolenia", - "permissionsCount": "{count} Povolenia", - "permission": "Povolenie", - "highestMinRank": "Highest min. Poradie: {rank}", - "totalMinRank": "Total min. Poradie sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} hodnosti", - "missingDeps": "{count} Chýba dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Chýba)", - "rank": "Poradie", - "count": "Count", - "searchPermission": "Hľadať Povolenia…", - "search": "Hľadať", - "manage": "Manage", - "importSelection": "Importovať selection", - "noGroup": "Nie group", - "allGroups": "All groups", - "perGroup": "Povolenia per group", - "perRank": "Povolenia per Poradie", - "rankOverviewHint": "All Povolenia grouped by the Poradie they are assigned to.", - "tabOverview": "Prehľad", - "tabManage": "Manage", - "tabImport": "Importovať / Export", - "tabRanks": "Poradie Prehľad", - "tabPresets": "Predvoľby", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Importovať Povolenia", - "importHint": "Paste a JSON array of Povolenie objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Importovať", - "exportTitle": "Export Povolenia", - "exportHint": "Export all Povolenia as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Povolenie Predvoľby", - "presetsHint": "Použiť a predefined set of Povolenia for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Moderovanie tools: Používateľ lookup, Zákazy, CFH handling, chat Denníky.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Používatelia, Izby, news, Nastavenia, Obchod, events, Rádio & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Povolenie management and asset Importovať.", - "applyPreset": "Použiť preset", - "clearAll": "Clear all Povolenia", - "testTitle": "Test Poradie access", - "testHint": "Enter a Poradie number to see which Povolenia would be granted.", - "test": "Test", - "auditTitle": "Povolenie audit log", - "auditHint": "All changes to Upratovanie Povolenia are logged.", - "auditLogsAt": "Audit Denníky are available on the Audit log page.", - "viewAuditLogs": "Zobraziť audit Denníky", - "importedWithErrors": "Imported {count} Povolenia with {errors} errors", - "confirmClearAllDesc": "This will Odstrániť every Povolenie entry from the Databáza. Are you sure?", - "confirmDeletePermission": "Odstrániť this Povolenie permanently?", - "confirmBulkDelete": "Odstrániť {count} selected Povolenia?", - "deleteSelected": "Odstrániť {count} selected", - "cancel": "Zrušiť", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Používateľ", - "auditAction": "Akcia", - "auditTarget": "Cieľ", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Izby", - "subtitle": "Vyhľadávajte a spravujte hotelové izby", - "search": "Hľadať", - "searchPlaceholder": "Hľadajte podľa mena, vlastníka alebo ID…", - "searchResults": "{count, plural, one {# room} other {# rooms}} nájdených pre dopyt „{query}“", - "noResults": "Nenašli sa žiadne izby", - "colId": "ID", - "colName": "Meno", - "colOwner": "Vlastník", - "colUsers": "Používatelia", - "colState": "štátu", - "colCategory": "Kategória", - "colCreated": "Vytvorené", - "colActions": "Akcie", - "stateOpen": "Otvorte", - "stateClosed": "Zatvorené", - "stateLocked": "Zamknuté", - "stateInvisible": "Neviditeľný", - "detail": { - "title": "Miestnosť: {name}", - "subtitle": "Vlastník: {owner}", - "overview": "Prehľad", - "actions": "Akcie", - "description": "Popis", - "noDescription": "Bez popisu", - "owner": "Vlastník", - "users": "Používatelia online", - "maxUsers": "Maximálny počet používateľov", - "category": "Kategória", - "state": "štátu", - "tags": "Tagy", - "noTags": "Žiadne značky", - "created": "Vytvorené", - "deleteRoom": "Odstrániť miestnosť", - "confirmDelete": "Odstrániť miestnosť „{name}“? Toto sa nedá vrátiť späť.", - "enterRoom": "Vstúpte do miestnosti", - "changeOwner": "Zmeniť vlastníka", - "changeOwnerPlaceholder": "Používateľské meno nového vlastníka" - } - }, - "emailTemplates": { - "title": "E-mailové šablóny", - "subtitle": "Spravujte šablóny transakčných e-mailov", - "newTemplate": "+ Nová šablóna", - "edit": "Upraviť", - "delete": "Odstrániť", - "noTemplates": "Zatiaľ žiadne e-mailové šablóny", - "confirmDelete": "Chcete odstrániť šablónu „{name}“?", - "colId": "ID", - "colName": "Meno", - "colSubject": "Predmet", - "colKey": "kľúč", - "colUpdated": "Aktualizované", - "colActions": "Akcie", - "form": { - "name": "Meno", - "namePlaceholder": "napr. Uvítací email", - "key": "kľúč", - "keyPlaceholder": "napr. uvítací_e-mail", - "subject": "Predmet", - "subjectPlaceholder": "Predmet e-mailu", - "body": "telo (HTML)", - "bodyPlaceholder": "

Vážený {username},

", - "variables": "Dostupné premenné", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Uložiť šablónu", - "saving": "Ukladá sa…", - "cancel": "Zrušiť" - } - }, - "theme": { - "title": "Téma", - "subtitle": "Prispôsobte si vzhľad CMS", - "presets": "Predvoľby", - "colours": "Farby", - "css": "CSS", - "presetsTitle": "Prednastavenia tém", - "presetsSubtitle": "Vyberte si vopred zostavenú farebnú schému", - "applyPreset": "Použiť", - "presetApplied": "Predvoľba bola použitá: {preset}", - "customiseTitle": "Vlastné farby", - "primary": "Primárne", - "secondary": "Sekundárne", - "accent": "Prízvuk", - "background": "Pozadie", - "surface": "Povrch", - "text": "Text", - "saveColours": "Uložiť farby", - "savingColours": "Ukladá sa…", - "cssTitle": "Vlastné CSS", - "cssSubtitle": "Pridajte vlastný CSS na prepísanie štýlov tém", - "cssPlaceholder": "/* Váš vlastný CSS tu */", - "saveCss": "Uložiť CSS", - "savingCss": "Ukladá sa…", - "reset": "Obnoviť predvolené nastavenia", - "confirmReset": "Obnoviť predvolené hodnoty motívu?" - }, - "media": { - "title": "Knižnica médií", - "subtitle": "Nahrávajte a spravujte mediálne súbory", - "upload": "Nahrať", - "uploadTitle": "Nahrajte súbor", - "uploadSubtitle": "Presuňte myšou alebo kliknutím nahrajte", - "uploadButton": "Vyberte súbor", - "uploading": "Nahráva sa…", - "noFiles": "Zatiaľ žiadne mediálne súbory", - "delete": "Odstrániť", - "confirmDelete": "Odstrániť tento súbor natrvalo?", - "search": "Hľadať", - "searchPlaceholder": "Hľadať podľa názvu súboru…", - "colPreview": "Ukážka", - "colName": "Meno", - "colSize": "Veľkosť", - "colType": "Typ", - "colUploaded": "Nahrané", - "colActions": "Akcie", - "copyUrl": "Kopírovať URL", - "urlCopied": "Adresa URL bola skopírovaná do schránky" - }, - "favicon": { - "title": "Favicon", - "subtitle": "Nahrajte a spravujte favicon stránky", - "current": "Aktuálna favicon", - "uploadLabel": "Nahrať favicon", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO alebo SVG. Maximálne 2 MB.", - "upload": "Nahrať", - "uploading": "Nahráva sa…", - "delete": "Odstrániť", - "deleting": "Odstraňuje sa…", - "saved": "Favicon úspešne uložený!", - "deleted": "Favicon bola úspešne odstránená!", - "error": "Niečo sa pokazilo", - "confirmDelete": "Chcete odstrániť favicon? Stránka už nebude zobrazovať vlastnú favicon.", - "generator": { - "title": "Generovať favicon", - "text": "Text", - "bgColor": "Farba pozadia", - "textColor": "Farba textu", - "rounded": "Zaoblené rohy", - "save": "Uložiť ako favicon" - }, - "cancel": "Cancel" - }, - "settings": { - "title": "Nastavenia CMS", - "subtitle": "Spravujte konfiguráciu CMS pre páry kľúč/hodnota", - "addSetting": "Pridať nastavenie", - "edit": "Upraviť", - "delete": "Odstrániť", - "noSettings": "Nenašli sa žiadne nastavenia", - "confirmDelete": "Odstrániť nastavenie „{key}“?", - "colKey": "kľúč", - "colValue": "Hodnota", - "colUpdated": "Aktualizované", - "colActions": "Akcie", - "form": { - "key": "kľúč", - "keyPlaceholder": "napr. hotel_name", - "value": "Hodnota", - "valuePlaceholder": "Nastavenie hodnoty", - "save": "Uložiť nastavenie", - "saving": "Ukladá sa…", - "cancel": "Zrušiť" - }, - "keysInDatabase": "{count} keys in database", - "managedInForm": "{count} managed in form", - "documented": "{count} documented", - "saved": "Settings saved.", - "saveFailed": "Could not save settings.", - "saveSettings": "Save settings", - "viewOnly": "You can view settings but need edit permission to change them." - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Domov", - "reload": "Obnoviť", - "fullscreen": "Celá obrazovka", - "logout": "Odhlásiť", - "onlineUsers": "Používatelia online", - "emulatorOnline": "Emulátor online", - "emulatorOffline": "Emulátor offline", - "dragToMove": "Potiahnite na presun", - "hide": "Skryť panel", - "fullscreenExit": "Ukončiť celú obrazovku", - "show": "Zobraziť panel", - "emulatorUnknown": "Stav emulátora neznámy" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Diagnostika súborov", - "preliminary": "Predbežná kontrola adries; obsah sa overí pri importe.", - "http": "HTTP {status}", - "network": "Pripojenie zlyhalo", - "timeout": "Zdroj neodpovedal včas", - "invalidResponse": "Zdroj vrátil webovú stránku namiesto súboru", - "available": "Súbor nájdený; čaká na overenie", - "recover": "Priložiť originál a pokračovať", - "recoveryHint": "Vyberte {file} (do 50 MB). Overí sa jeho identita. Opakujú sa neúspešné položky; dokončené importy zostanú zachované.", - "attach": "Vyberte pôvodný súbor .nitro", - "working": "Overovanie alebo pokračovanie...", - "attached": "Zodpovedajúci súbor priložený", - "resume": "Obnoviť neúspešné importy s týmto súborom", - "invalidFile": "Vyberte zodpovedajúci pôvodný .nitro do 50 MB a skúste to znova.", - "resumeError": "Obnovte históriu a použite posledný pokus; skontrolujte súbor a skúste to znova.", - "mismatchedFile": "Tento súbor patrí inému nábytku.", - "alreadyStarted": "Obnova už začala. Obnovte históriu a použite posledný pokus.", - "notEligible": "Túto položku nemožno obnoviť prílohou." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "Kópia na obnovenie bude v tomto prehliadači uchovaná 7 dní.", + "saved": "Kópia na obnovenie bola v tomto prehliadači uložená na 7 dní.", + "unavailable": "Obnovenie v prehliadači nie je dostupné. Nechaj túto stránku otvorenú, kým sa zmeny neuložia.", + "found": "V tomto prehliadači je dostupná kópia na obnovenie, uložená", + "restore": "Obnoviť kópiu z prehliadača", + "discard": "Odstrániť kópiu z prehliadača", + "confirmRestore": "Nahradiť aktuálny formulár kópiou z prehliadača? Pred uložením skontroluj obsah.", + "confirmDiscard": "Odstrániť túto kópiu z prehliadača? Aktuálny formulár zostane nezmenený." + }, + "nav": { + "home": "Domov", + "community": "Spoločenstva", + "articles": "články", + "photos": "Fotografie", + "staff": "personál", + "rankings": "Rebríček", + "guilds": "cechy", + "leaderboards": "Rebríčky", + "rareValues": "Vzácne hodnoty", + "shop": "Obchod", + "market": "trhu", + "assistance": "Pomoc", + "helpCenter": "Centrum pomoci", + "myTickets": "Moje lístky", + "badges": "Odznaky", + "radio": "Rádio", + "friends": "Priatelia", + "messages": "Správy", + "admin": "Admin", + "openMenu": "Otvoriť menu", + "closeMenu": "Zatvoriť ponuku", + "drawBadge": "Nakreslite odznak", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} online", + "nitroClient": "Nitro klient", + "tagline": "Online virtuálny svet, kde si môžete vytvoriť svojho vlastného avatara, nadviazať priateľstvo, chatovať, vytvárať miestnosti a oveľa viac!", + "login": "Prihláste sa", + "or": "Alebo", + "createAccount": "Vytvorte si účet" + }, + "footer": { + "copyright": "© {year} - {hotel} je neziskový vzdelávací projekt" + }, + "pages": { + "staff": { + "title": "personál", + "subtitle": "Tím za hotelom", + "ranksTitle": "hodnosti", + "ranksSubtitle": "O čo sa stará každá časť tímu", + "membersTitle": "Členovia tímu", + "membersEmptySubtitle": "Momentálne niet koho ukázať", + "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", + "emptyState": "Žiadni zamestnanci na zobrazenie.", + "colUsername": "Používateľské meno", + "colRank": "Poradie", + "colMotto": "Motto", + "viewProfile": "View profile", + "noMotto": "No motto set", + "loadError": "Unable to load staff members. Please try again shortly.", + "retry": "Try again" + }, + "leaderboard": { + "title": "Rebríček", + "subtitle": "20 najlepších hráčov podľa {currency}", + "tab_credits": "Kredity", + "tab_diamonds": "Diamanty", + "tab_duckets": "Duckets", + "tab_achievement": "Úspechy", + "tab_respects": "Úcta", + "tab_onlinetime": "Online čas", + "emptyState": "Zatiaľ žiadne hodnotenia na zobrazenie.", + "colAvatar": "Avatar", + "colPlayer": "Hráč" + }, + "friends": { + "title": "Priatelia", + "emptySubtitle": "Zatiaľ ste nepridali žiadnych priateľov", + "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", + "emptyState": "Pridajte priateľov do hotela a zobrazia sa tu.", + "noMotto": "Žiadne 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": "Správy", + "subtitle": "Žiadosti o priateľstvo a offline správy na vás čakajú", + "requestsTitle": "Žiadosti o priateľstvo", + "requestsEmptySubtitle": "Nikto ešte nepožiadal, aby bol tvojím priateľom", + "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", + "requestsEmptyState": "Žiadne čakajúce žiadosti o priateľstvo.", + "wantsToBeFriend": "chce byť tvojím priateľom.", + "accept": "Prijať", + "offlineTitle": "Offline správy", + "offlineEmptySubtitle": "Vaša doručená pošta je prázdna", + "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", + "offlineEmptyState": "Nemáte žiadne offline správy.", + "unknownUser": "Používateľ #{id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Žiadne motto", + "statRank": "Poradie", + "statCredits": "Kredity", + "statRegistered": "Registrovaný", + "badgesTitle": "Odznaky", + "badgesEmpty": "Zatiaľ žiadne odznaky.", + "photosTitle": "Fotografie", + "photosEmpty": "Zatiaľ žiadne fotky.", + "guestbookTitle": "Kniha návštev", + "guestbookSubtitle": "Správy na nástenke používateľa {username}", + "leaveMessage": "Zanechajte odkaz", + "guestbookPlaceholder": "Napíšte niečo do knihy návštev používateľa {username}…", + "post": "Príspevok", + "loginToPost": "Ak chcete zanechať odkaz v knihe návštev, prihláste sa.", + "guestbookEmpty": "Zatiaľ žiadne záznamy v knihe návštev.", + "unknownUser": "Používateľ #{id}", + "statDuckets": "Duckets", + "statDiamonds": "Diamanty", + "walletTitle": "Peňaženka", + "friendsTitle": "Priatelia", + "friendsSubtitle": "Ľudia v hoteli, s ktorými sa stretávajú", + "friendsEmpty": "Žiadni priatelia na zobrazenie.", + "roomsTitle": "Izby", + "roomsSubtitle": "Izby, ktoré vlastnia", + "roomsEmpty": "Žiadne miestnosti na zobrazenie.", + "roomUntitled": "Izba bez názvu", + "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": "Rebríček", + "subtitle": "12 najlepších hráčov zoradených podľa kreditov", + "emptyState": "Zatiaľ žiadni hráči na hodnotenie." + }, + "home": { + "welcome": "Vitajte v {hotelName}", + "welcomeSubtitle": "Váš retro hotel, ktorý teraz používa Next.js", + "welcomeBody": "Stretnite sa, zbierajte nábytok a stretávajte sa s priateľmi.", + "enterHotel": "Zadajte {hotelName}", + "onlineFriends": "Priatelia online", + "noFriendsOnline": "Žiadni priatelia online", + "register": "ZAREGISTRUJTE SA TERAZ", + "joinNow": "Pripojte sa k {hotelName} ešte dnes!", + "recentUsers": "Nedávni používatelia", + "recentPhotos": "Najnovšie fotografie", + "latestNews": "Najnovšie správy", + "newsTitle": "Najnovšie správy", + "newsSubtitle": "Čerstvé z hotela", + "allNews": "Všetky novinky →", + "allUsers": "Komunita →", + "noArticles": "Zatiaľ žiadne články.", + "noPhotos": "Zatiaľ žiadne fotky.", + "noUsers": "Žiadni používatelia online", + "latestArticle": "Najnovší článok", + "latestUsers": "Najnovší občania ({count} celkom)", + "statsOnline": "Online", + "statsCitizens": "Občania", + "statsRooms": "Izby", + "statsArticles": "Články", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Vytvor si svoj jedinečný vzhľad", + "featuresFurniture": "Nábytok", + "featuresFurnitureDesc": "Vyzdob si izby predmetmi", + "featuresCommunity": "Komunita", + "featuresCommunityDesc": "Nájdi priateľov a chatuj", + "featuresGames": "Hry", + "featuresGamesDesc": "Súťaž a zabav sa", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Správy", + "subtitle": "Najnovšie oznámenia, udalosti a aktualizácie z hotela", + "noArticles": "Zatiaľ žiadne články.", + "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": "← Novinky", + "reactionsTitle": "Reakcie", + "reactionsSubtitle": "Povedzte nám, čo si myslíte", + "reaction": { + "like": "Ako", + "love": "láska", + "wow": "Páni" + }, + "removeReaction": "Kliknutím odstránite svoju reakciu", + "reactWith": "Reagovať pomocou {reaction}", + "noReactions": "Zatiaľ žiadne reakcie.", + "logIn": "Prihláste sa", + "toReact": "reagovať.", + "commentsTitle": "Komentáre", + "commentsSubtitle": "Zapojte sa do rozhovoru", + "commentsCount": "zatiaľ {count}", + "noComments": "Zatiaľ žiadne komentáre. Pridajte komentár ako prvý.", + "userNumber": "Používateľ #{id}", + "addComment": "Pridať komentár", + "commentPlaceholder": "Napíšte svoj komentár…", + "postComment": "Uverejniť komentár", + "toComment": "zanechať komentár.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Fotografie", + "subtitle": "Najnovšie snímky urobené v hoteli", + "noPhotos": "Zatiaľ žiadne fotky.", + "photoAlt": "Fotografia používateľa #{id}", + "byUser": "od používateľa #{id}" + }, + "badges": { + "title": "Odznaky", + "subtitle": "Odznaky, ktoré môžete získať a pochváliť sa nimi v okolí hotela", + "noBadges": "Zatiaľ nie sú k dispozícii žiadne odznaky." + }, + "community": { + "title": "Spoločenstva", + "subtitle": "Všetko sa deje okolo hotela na jednom mieste", + "open": "Otvorte →", + "links": { + "rankings": { + "title": "Rebríček", + "text": "Pozrite si najbohatších hráčov v hoteli zoradených podľa kreditov." + }, + "staff": { + "title": "personál", + "text": "Zoznámte sa s tímom, ktorý zabezpečuje chod hotela každý deň." + }, + "news": { + "title": "Správy", + "text": "Najnovšie oznámenia, udalosti a aktualizácie." + }, + "photos": { + "title": "Fotografie", + "text": "Snímky zdieľané komunitou z celého hotela." + }, + "guilds": { + "title": "cechy", + "text": "Prezrite si skupiny, ktoré hráči vytvorili a ku ktorým sa pridali." + }, + "leaderboards": { + "title": "Rebríčky", + "text": "Kto je v tejto sezóne na vrchole v štatistikách hotela." + } + } + }, + "guilds": { + "title": "cechy", + "subtitle": "Prezrite si skupiny, ktoré hráči vytvorili a ku ktorým sa pridali", + "empty": "Zatiaľ žiadne cechy.", + "unnamedGuild": "Nemenovaný spolok", + "noDescription": "Bez popisu" + }, + "guild": { + "allGuilds": "← Všetky cechy", + "unnamedGuild": "Nemenovaný spolok", + "noDescription": "Bez popisu", + "memberSingular": "člen", + "memberPlural": "členov", + "founded": "Založená", + "forumLink": "Fórum →", + "discussion": "Diskusia", + "membersTitle": "členov", + "memberLowerSingular": "členom", + "memberLowerPlural": "členov", + "noMembers": "Žiadni členovia.", + "owner": "Vlastník", + "noMotto": "Žiadne motto" + }, + "guildForum": { + "backToGuild": "← Späť do cechu", + "unnamedGuild": "Nemenovaný spolok", + "forumTitle": "{guild} — Fórum", + "threadSingular": "niť", + "threadPlural": "vlákna", + "newThread": "+ Nové vlákno", + "empty": "V tomto fóre zatiaľ nie sú žiadne vlákna.", + "colSubject": "Predmet", + "colAuthor": "Autor", + "colPosts": "Príspevky", + "colDate": "Dátum", + "noSubject": "(bez predmetu)", + "pinned": "Pripnuté", + "locked": "Zamknuté", + "userNumber": "Používateľ #{id}", + "unknown": "Neznámy", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Späť na fórum", + "unnamedGuild": "Nemenovaný spolok", + "title": "Nové vlákno", + "subtitle": "vo fóre {guild}", + "subjectLabel": "Predmet", + "subjectPlaceholder": "Predmet vlákna", + "messageLabel": "Správa", + "messagePlaceholder": "Napíšte svoj úvodný príspevok...", + "postThread": "Uverejniť vlákno", + "cancel": "Zrušiť", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Obchod", + "subtitle": "Doplňte si účet a získajte exkluzívne balíčky, menu a odznaky.", + "browsingCategory": "Prehliadanie balíkov {category}.", + "all": "Všetky", + "allPackages": "Všetky balíčky", + "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", + "empty": "Momentálne nie sú k dispozícii žiadne balíčky.", + "buy": "Kúpiť", + "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": "Doplňte cez PayPal", + "subtitle": "Plaťte bezpečne cez PayPal a vaše kredity sa pripočítajú v momente, keď sa platba zúčtuje.", + "cancelled": "Pokladňa bola zrušená – neprijala sa žiadna platba.", + "chooseAmount": "Vyberte sumu", + "notConfiguredPre": "PayPal ešte nie je nakonfigurovaný. Musí nastaviť správca", + "notConfiguredAnd": "a", + "notConfiguredOptional": "(a voliteľne", + "notConfiguredPost": "pre sandbox vs. live).", + "balanceTitle": "Vaša rovnováha", + "signedInAs": "Prihlásený ako {username}", + "credits": "Kredity", + "creditsPerUnit": "Kredity za 1,00 {currency}", + "rateLine": "Dostanete {amount} kreditov za 1,00 {currency}. Kredity sa objavia v hre pri ďalšom prihlásení." + }, + "marketplace": { + "title": "Trhovisko", + "subtitle": "Prehliadajte nábytok a vzácne predmety uvedené hráčmi. Záznamy sa umiestňujú do hry a aktualizujú sa naživo – vstúpte do hotela a urobte ponuku.", + "activeOffers": "Aktívne ponuky", + "sellers": "Predajcovia", + "totalValue": "Celková hodnota", + "activeListings": "Aktívne záznamy", + "mostRecentFirst": "Naposledy uvedené ako prvé", + "empty": "Momentálne neexistujú žiadne aktívne ponuky na trhu. Vráťte sa sem neskôr.", + "colOffer": "Ponuka", + "colItem": "Položka", + "colSeller": "Predávajúci", + "colPrice": "Cena", + "colListed": "Uvedené", + "itemLabel": "Položka č. {id}", + "userLabel": "Používateľ #{id}", + "justNow": "práve teraz", + "minutesAgo": "pred {count}m", + "hoursAgo": "pred {count}h", + "daysAgo": "pred {count}d" + }, + "rares": { + "title": "Vzácne hodnoty", + "subtitle": "Získajte prehľad o všetkých vzácnych hoteloch, zoskupených podľa kategórií.", + "empty": "Momentálne tu nemáme uvedené žiadne vzácne.", + "rareCount": "{count, plural, one {# rare} other {# rares}}", + "viewRares": "Zobraziť vzácne →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", + "allRares": "← Všetky vzácne", + "empty": "V tejto kategórii zatiaľ nie sú uvedené žiadne zriedkavé.", + "colRare": "Zriedkavé", + "colCredits": "Kredity", + "colCurrency": "mena", + "creditsValue": "{value} kreditov", + "duckets": "Duckets", + "diamonds": "Diamanty", + "credits": "Kredity" + }, + "redeem": { + "title": "Uplatniť voucher", + "subtitle": "Máte kód voucheru? Zadajte ho nižšie a pridajte odmenu na svoj účet.", + "enterCode": "Zadajte kód", + "oncePerAccount": "Každý kupón je možné uplatniť iba raz na účet.", + "balanceTitle": "Vaša rovnováha", + "signedInAs": "Prihlásený ako {username}", + "credits": "Kredity", + "instantCredit": "Uplatnené odmeny sa pripíšu okamžite a zobrazia sa v hre pri ďalšom prihlásení." + }, + "help": { + "title": "Centrum pomoci", + "subtitle": "Nájdite sprievodcov, témy podpory a pravidlá hotela – všetko, čo potrebujete na získanie pomoci.", + "myTickets": "Moje lístky →", + "topicsTitle": "Témy podpory", + "topicsSubtitle": "Prezrite si sprievodcov a odpovede na bežné otázky", + "topicsEmpty": "Zatiaľ žiadne témy pomoci.", + "rulesTitle": "Pravidlá hotela", + "rulesSubtitle": "Pred pobytom v hoteli si ich prečítajte", + "rulesEmpty": "Zatiaľ neboli zverejnené žiadne pravidlá.", + "categoryEmpty": "V tejto kategórii nie sú žiadne pravidlá." + }, + "helpCategory": { + "back": "← Centrum pomoci", + "topicSubtitle": "Téma Centra pomoci", + "moreTitle": "Ďalšie témy pomoci", + "moreSubtitle": "Prejsť na inú tému podpory" + }, + "helpTickets": { + "title": "Pomoc Vstupenky", + "subtitle": "Odošlite lístok personálu a sledujte svoje otvorené požiadavky.", + "statTotal": "Celkový počet lístkov", + "statOpen": "Otvorte", + "statClosed": "Zatvorené", + "newTitle": "Nový lístok", + "newSubtitle": "Popíšte svoj problém a personál vás bude nasledovať", + "subjectPlaceholder": "Predmet", + "contentPlaceholder": "Opíšte svoj problém…", + "submit": "Odoslať lístok", + "listTitle": "Vaše lístky", + "listSubtitle": "Každá žiadosť, ktorú ste poslali personálu", + "listEmpty": "Ešte nemáte lístky.", + "colId": "ID", + "colSubject": "Predmet", + "colStatus": "Stav", + "colCreated": "Vytvorené", + "statusOpen": "Otvorte", + "statusClosed": "Zatvorené", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "Požiadajte o personál {hotel}", + "subtitle": "Z času na čas otvárame aplikácie pre zamestnancov. Ak narazíte na pozíciu, o ktorej máte pocit, že by ste sa na ňu perfektne hodili, neváhajte sa o ňu uchádzať.", + "noPositionsTitle": "Nie sú otvorené žiadne pozície", + "noPositionsBody": "Momentálne nie sú otvorené žiadne pozície. Vráťte sa neskôr a skontrolujte, či dovtedy máme nejaké voľné miesta. Ďakujeme za váš záujem.", + "noDeadline": "Nie je stanovený žiadny termín", + "deadline": "Uzávierka prihlášok: {date}", + "alreadyApplied": "Už ste požiadali o {rank}", + "aboutYou": "O vás", + "aboutPlaceholder": "Povedzte nám, prečo by ste boli skvelým {rank}…", + "applyFor": "Požiadať o {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": "Prihláste sa do tímu {hotel}", + "subtitle": "Tímové aplikácie otvárame pravidelne. Ak vidíte tím, ktorý sa vám hodí, neváhajte a prihláste sa!", + "noPositionsTitle": "Nie sú otvorené žiadne tímové pozície", + "noPositionsBody": "Momentálne nie sú otvorené žiadne tímové pozície. Vráťte sa neskôr a skontrolujte nové otvory. dakujem!", + "pending": "Vaša žiadosť čaká na spracovanie", + "aboutYou": "O vás", + "aboutPlaceholder": "Povedzte nám, prečo by ste sa skvele hodili na {rank}…", + "applyFor": "Požiadať o {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": "Rádio", + "subtitle": "Nalaďte si hotelové rádio – živé DJ sety, požiadavky a výkriky.", + "nowPlaying": "Teraz sa hrá", + "nothingPlaying": "Momentálne sa nič nehrá.", + "onAir": "Vysielané: {dj}", + "noDj": "Žiadny DJ vo vysielaní.", + "audioUnsupported": "Váš prehliadač nepodporuje zvukový prvok.", + "streamOffline": "Stream je momentálne offline.", + "exploreTitle": "Preskúmajte rádio", + "exploreSubtitle": "Plán, výkriky, žiadosti a ďalšie", + "linkSchedule": "Rozvrh", + "linkScheduleText": "Naša týždenná zostava DJov a show.", + "linkShouts": "Výkriky", + "linkShoutsText": "Výkriky a žiadosti komunity.", + "linkRequests": "Žiadosti", + "linkRequestsText": "Požiadajte DJa, aby zahral vašu obľúbenú skladbu.", + "linkApply": "Prihláste sa ako DJ", + "linkApplyText": "Pripojte sa k tímu a vydajte sa do éteru.", + "linkLeaderboard": "Rebríček", + "linkLeaderboardText": "Najlepší poslucháči zoradení podľa získaných bodov.", + "todayTitle": "Dnešný rozvrh", + "todayTitleWithDay": "Dnešný plán · {day}", + "todaySubtitle": "Čo je dnes v éteri", + "fullWeek": "Celý týždeň →", + "noShowsToday": "Na dnes nie sú naplánované žiadne predstavenia.", + "colTime": "Čas", + "colShow": "Zobraziť", + "colDj": "DJ", + "untitledShow": "Predstavenie bez názvu", + "userNumber": "Používateľ #{id}" + }, + "radioSchedule": { + "title": "Rozvrh rádia", + "subtitle": "Naša týždenná zostava DJov a show", + "empty": "Zatiaľ nie sú naplánované žiadne predstavenia.", + "colDay": "deň", + "colTime": "Čas", + "colDj": "DJ", + "colShow": "Zobraziť", + "noShows": "Žiadne predstavenia" + }, + "radioShouts": { + "title": "Rádiové výkriky", + "subtitle": "Výkriky a žiadosti komunity", + "postTitle": "Uverejnite výkrik", + "postSubtitle": "Pošlite správu DJovi do vysielania", + "messageLabel": "Vaša správa", + "messagePlaceholder": "Pošlite krik DJovi…", + "shoutButton": "Kričať", + "loginToPost": "Ak chcete uverejniť výkrik, prihláste sa.", + "latestTitle": "Najnovšie výkriky", + "latestSubtitle": "Najnovšie správy od poslucháčov", + "empty": "Zatiaľ žiadne výkriky. Buďte prvý!", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Rádiové súťaže", + "subtitle": "Nalaďte sa a zúčastnite sa našich najnovších on-air súťaží", + "empty": "Zatiaľ žiadne súťaže.", + "contestLabel": "súťaž č. {id}", + "dateUnknown": "Dátum neznámy" + }, + "radioGiveaways": { + "title": "Darčeky v rádiu", + "subtitle": "Vypočujte si svoju šancu vyhrať v našich rozhlasových darčekoch", + "empty": "Zatiaľ žiadne darčeky.", + "giveawayLabel": "Darček č. {id}", + "dateUnknown": "Dátum neznámy" + }, + "radioLeaderboard": { + "title": "Rebríček poslucháčov rádia", + "subtitle": "50 najlepších poslucháčov podľa bodov získaných naladením rádia", + "empty": "Zatiaľ žiadne body poslucháča na zobrazenie.", + "colRank": "Poradie", + "colAvatar": "Avatar", + "colListener": "Poslucháč", + "colPoints": "Body" + }, + "radioRequests": { + "formTitle": "Odoslať žiadosť", + "formSubtitle": "Požiadajte DJa, aby prehral vašu obľúbenú skladbu", + "songLabel": "Pieseň", + "songPlaceholder": "Názov piesne", + "artistLabel": "Umelec", + "artistPlaceholder": "Meno umelca (voliteľné)", + "submitButton": "Odoslať žiadosť", + "loginToRequest": "Ak chcete odoslať žiadosť, prihláste sa.", + "latestTitle": "Nedávne žiadosti", + "latestSubtitle": "Najnovšie požadované skladby", + "empty": "Zatiaľ žiadne žiadosti.", + "colSong": "Pieseň", + "colArtist": "Umelec", + "colRequester": "Žiadateľ", + "colDate": "Dátum", + "colStatus": "Stav", + "statusPending": "Čaká na spracovanie", + "statusApproved": "Schválené", + "statusPlayed": "Hrané", + "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": "Prihláste sa ako Rádio DJ", + "subtitle": "Povedzte nám o sebe a o tom, prečo by ste sa skvele hodili do éteru", + "latestTitle": "Vaša najnovšia aplikácia", + "statusLabel": "Stav:", + "submittedOn": "· odoslané {date}", + "submitAgain": "Ak sa vaše údaje zmenili, môžete ich znova odoslať nižšie.", + "formTitle": "Formulár žiadosti", + "formSubtitle": "Všetky polia označené ako povinné musia byť vyplnené", + "realNameLabel": "Skutočné meno", + "realNamePlaceholder": "Vaše celé meno", + "ageLabel": "Vek", + "availabilityLabel": "Dostupnosť", + "availabilityPlaceholder": "Ktoré dni a časy môžete vysielať?", + "musicStyleLabel": "Hudobný štýl", + "musicStylePlaceholder": "napr. House, Pop, Hip-Hop", + "experienceLabel": "Skúsenosti", + "optional": "(voliteľné)", + "experiencePlaceholder": "Máte nejaké predchádzajúce skúsenosti s DJ-om alebo hosťovaním?", + "motivationLabel": "Motivácia", + "motivationPlaceholder": "Prečo sa chceš stať členom rozhlasového tímu?", + "submitButton": "Odoslať žiadosť", + "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": "Nastavenia účtu", + "accountSettingsSubtitle": "Spravujte svoj profil, zabezpečenie a prepojené účty", + "publicProfile": "Váš verejný profil", + "noMotto": "Žiadne motto", + "noEmail": "Žiadny e-mail v zázname", + "changeMotto": "Zmeňte motto", + "changeMottoSubtitle": "Aktualizuje sa okamžite v hre, ak ste online", + "mottoPlaceholder": "Tvoje motto", + "saveMotto": "Uložiť motto", + "securityTitle": "Bezpečnosť", + "securitySubtitle": "Dvojfaktorové overenie", + "securityDescription": "Pridajte do svojho účtu druhú vrstvu ochrany.", + "twoFactorLink": "Dvojfaktorové overenie" + }, + "settings2fa": { + "backToSettings": "← Nastavenia", + "title": "Dvojfaktorové overenie", + "subtitle": "Pridajte druhú vrstvu zabezpečenia pomocou autentifikačnej aplikácie", + "nowEnabled": "2FA je teraz povolená. 🔒", + "disabledNotice": "2FA bola zakázaná.", + "badCode": "Tento kód nebol platný – skúste to znova.", + "noAppKeyPrefix": "2FA nie je k dispozícii do", + "noAppKeyMiddle": "je nakonfigurovaný (rovnaký Laravel", + "noAppKeySuffix": "ako váš AtomCMS nainštalujete, takže existujúce tajomstvá zostanú čitateľné).", + "isEnabled": "2FA je povolená", + "onYourAccount": "na vašom účte.", + "disable": "Zakázať 2FA", + "scanOrEnter": "Naskenujte alebo zadajte tento kľúč", + "scanInstructions": "Pridajte to do aplikácie Google Authenticator / Authy a potvrďte zadaním 6-ciferného kódu.", + "manualKey": "Manuálny kľúč:", + "codePlaceholder": "6-miestny kód", + "confirm": "Potvrďte", + "enableIntro": "Pridajte druhú vrstvu zabezpečenia pomocou autentifikačnej aplikácie.", + "enable": "Povoliť 2FA", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Prepojené účty", + "subtitle": "Prepojte sociálny účet, aby ste sa mohli prihlásiť jedným kliknutím", + "connected": "Pripojené", + "unavailable": "nedostupné", + "login": { + "title": "Prihláste sa", + "subtitle": "Vitajte späť — prihláste sa pre vstup do hotela.", + "subtitle2fa": "Zadajte 6-miestny kód z vášho autentifikátora.", + "usernamePlaceholder": "Používateľské meno", + "passwordPlaceholder": "heslo", + "codePlaceholder": "2FA kód", + "pleaseWait": "Čakajte prosím…", + "verify": "Overiť", + "signIn": "Prihláste sa", + "or": "alebo", + "noAccount": "Žiadny účet?", + "createOne": "Vytvorte si ho", + "forgotPassword": "Zabudli ste heslo?", + "errorInvalidCredentials": "Neplatné používateľské meno alebo heslo", + "errorInvalid2fa": "Neplatný kód 2FA", + "welcomeBack": "Vitaj späť", + "welcomeBackSub": "Prihlás sa pre pokračovanie do {hotelName}", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Vytvoriť účet", + "subtitle": "Pripojte sa k hotelu – trvá to len chvíľu.", + "username": "Používateľské meno", + "email": "Email", + "password": "heslo", + "confirmPassword": "Zopakujte heslo", + "usernamePlaceholder": "Používateľské meno", + "emailPlaceholder": "Email", + "passwordPlaceholder": "Heslo (min. 6 znakov)", + "confirmPasswordPlaceholder": "Zopakujte heslo", + "selectOutfit": "Vyberte si oblečenie", + "termsAccept": "Mám 18+ a súhlasím so zmluvnými podmienkami a pravidlami {hotel}.", + "createAccount": "Vytvoriť účet", + "creatingAccount": "Vytvára sa účet...", + "redirecting": "Presmerovávam na váš účet...", + "alreadyHaveAccount": "Už máte účet? Prihláste sa!", + "register": "Zaregistrujte sa", + "termsError": "Ak sa chcete zaregistrovať, musíte prijať podmienky a pravidlá.", + "usernameError": "Vyžaduje sa používateľské meno.", + "emailError": "Vyžaduje sa platný e-mail.", + "passwordError": "Heslo musí mať aspoň 6 znakov.", + "confirmPasswordError": "Heslá sa nezhodujú.", + "termsRequired": "Musíte prijať podmienky a pravidlá.", + "usernameRequired": "Vyžaduje sa používateľské meno.", + "emailRequired": "Vyžaduje sa e-mail.", + "passwordRequired": "Vyžaduje sa heslo.", + "passwordsDontMatch": "Heslá sa nezhodujú.", + "alreadyHaveAccountPre": "Už máš účet?", + "alreadyHaveAccountLink": "Prihlásiť sa", + "whoIsOnline": "Kto je online", + "usersOnline": "{count} online", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Obnoviť heslo", + "subtitle": "Pošleme vám e-mailom zabezpečený odkaz na nastavenie nového hesla.", + "sentNotice": "Ak je tento e-mail zaregistrovaný, bol odoslaný odkaz na obnovenie. Skontrolujte si doručenú poštu.", + "emailPlaceholder": "Váš email", + "sendResetLink": "Odoslať odkaz na obnovenie", + "backToLogin": "Späť na prihlásenie", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Nastavte si nové heslo", + "subtitle": "Zvoľte si silné heslo, ktoré inde nepoužívate.", + "passwordPlaceholder": "Nové heslo (min. 6 znakov)", + "resetPassword": "Obnoviť heslo", + "backToLogin": "Späť na prihlásenie" + }, + "verify": { + "verifiedTitle": "Všetko je pripravené", + "verifiedSubtitle": "E-mail overený", + "verifiedBody": "Vaša e-mailová adresa bola overená. Teraz sa môžete prihlásiť a hrať.", + "goToLogin": "Prejdite na prihlásenie", + "alreadyTitle": "Už overené", + "alreadySubtitle": "Už nie je čo robiť", + "alreadyBody": "Táto e-mailová adresa už bola potvrdená.", + "unavailableTitle": "Skúste to znova o chvíľu", + "unavailableSubtitle": "Server je nedostupný", + "unavailableBody": "Nepodarilo sa nám spojiť so serverom a overiť váš e-mail. Skúste odkaz znova o chvíľu.", + "invalidTitle": "Overenie e-mailom", + "invalidSubtitle": "Neplatný odkaz alebo odkaz, ktorého platnosť vypršala", + "invalidBody": "Tento overovací odkaz nie je platný. Uistite sa, že ste otvorili celý odkaz zo svojho e-mailu, alebo požiadajte o nový.", + "backToLogin": "Späť na prihlásenie" + }, + "banned": { + "title": "Máte zákaz", + "subtitle": "Účet pozastavený", + "body": "Váš účet bol v hoteli pozastavený.", + "reasonLabel": "dôvod:", + "permanent": "Tento zákaz je trvalý.", + "expires": "Platnosť vyprší {date}.", + "contactStaff": "Ak si myslíte, že ide o chybu, kontaktujte tím zamestnancov." + }, + "maintenance": { + "title": "{hotel} je v údržbe", + "subtitle": "Čoskoro sa vrátime", + "staffCanLogIn": "Zamestnanci sa stále môžu prihlásiť." + }, + "admin": { + "nav": { + "overview": "Prehľad", + "dashboard": "Dashboard", + "content": "Obsah", + "articles": "články", + "tags": "Tagy", + "navigator": "Navigátor", + "helpCenter": "Centrum pomoci", + "advertisements": "Reklamy", + "writeableBoxes": "Popisovateľné boxy", + "photos": "Fotografie", + "tickets": "Vstupenky", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Používatelia a prístup", + "users": "Používatelia", + "bans": "Zákazy", + "ipManagement": "Správa IP", + "vpn": "VPN", + "applications": "Aplikácie", + "teams": "Tímy", + "permissions": "Povolenia", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "ekonomika", + "catalog": "Katalóg", + "shop": "Obchod", + "transactions": "Transakcie", + "vouchers": "poukážky", + "subscriptions": "Predplatné", + "rareValues": "Vzácne hodnoty", + "badges": "Odznaky", + "achievements": "Úspechy", + "calendar": "Kalendár", + "radio": "Rádio", + "radioHistory": "História rádia", + "radioBanners": "Bannery", + "radioEmbed": "Vložiť", + "radioApiKeys": "API kľúče", + "radioModeration": "Moderovanie", + "radioSettings": "Nastavenia", + "radioMonitoring": "Monitorovanie", + "radioPoints": "Body", + "radioRanks": "hodnosti", + "radioAutodj": "Auto DJ", + "system": "Systém", + "commandocentrum": "Commandocentrum", + "emulator": "Emulátor", + "alerts": "Upozornenia", + "logs": "Denníky", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Filter slov", + "maintenance": "Údržba", + "rooms": "Izby", + "emailTemplates": "E-mailové šablóny", + "theme": "Téma", + "media": "Médiá", + "favicon": "Favicon", + "sounds": "Zvuky", + "translations": "Preklady", + "import": "Importovať", + "settings": "Nastavenia", + "backToSite": "Späť na stránku", + "housekeeping": "Upratovanie", + "hotelManagementPanel": "Panel riadenia hotela", + "rankLabel": "Hodnotenie {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Search menu…", + "clearMenuSearch": "Clear menu search", + "noMenuResults": "No matching pages.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "studio": "Studio", + "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" + }, + "dashboard": { + "title": "Dashboard", + "subtitle": "Prehľad hotela a aktuálny stav", + "playersOnline": "Hráči online", + "articles": "články", + "activeBans": "Aktívne zákazy", + "database": "Databáza", + "databaseConnected": "Pripojené", + "databaseDown": "Dole", + "usersByRank": "Používatelia podľa hodnosti", + "noAccountsToBreakDown": "Zatiaľ žiadne účty na rozdelenie", + "rankLabel": "Hodnotenie {rank}", + "rankWithCount": "Hodnosť {rank}: {count} účtov", + "recentStaffActivity": "Nedávna aktivita zamestnancov", + "viewAll": "Zobraziť všetky", + "noStaffActivityLogged": "Zatiaľ nie je zaznamenaná žiadna aktivita zamestnancov", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "články", + "subtitle": "Spravodajské články — 50 najnovších", + "newArticle": "+ Nový článok", + "edit": "Upraviť", + "delete": "Odstrániť", + "noArticles": "Zatiaľ žiadne články", + "confirmDelete": "Naozaj chcete odstrániť „{title}“?", + "colTitle": "Názov", + "colSlug": "Slimák", + "colAuthor": "Autor", + "colCreated": "Vytvorené", + "colActions": "Akcie", + "form": { + "title": "Názov", + "titlePlaceholder": "Názov článku", + "slug": "Slimák", + "slugPlaceholder": "article-url-slug", + "category": "Kategória", + "categoryPlaceholder": "Vyberte kategóriu", + "body": "Telo", + "bodyPlaceholder": "Napíšte obsah článku...", + "image": "Obrázok", + "imagePlaceholder": "https://example.com/obrazok.png", + "thumbnail": "Miniatúra", + "thumbnailPlaceholder": "https://example.com/thumb.png", + "published": "Zverejnené", + "featured": "Odporúčané", + "save": "Uložiť článok", + "saving": "Ukladá sa…", + "deleteArticle": "Odstrániť článok", + "deleteConfirm": "Túto akciu nie je možné vrátiť späť. Článok bude natrvalo odstránený.", + "cancel": "Zrušiť", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "Tagy", + "subtitle": "Štítky / kategórie článkov", + "addTag": "Pridať značku", + "name": "Meno", + "namePlaceholder": "Názov značky", + "backgroundColour": "Farba pozadia", + "createTag": "Vytvorte značku", + "editTag": "Upraviť značku", + "updateTag": "Aktualizovať značku", + "deleteTag": "Odstrániť značku", + "confirmDelete": "Odstrániť „{name}“?", + "noTags": "Zatiaľ žiadne značky", + "colId": "ID", + "colTag": "Tag", + "colColour": "Farba", + "colUsedBy": "Používa", + "colCreated": "Vytvorené", + "colActions": "Akcie", + "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": "Navigátor", + "flatCategories": "Ploché kategórie", + "publicRooms": "Verejné miestnosti", + "addCategory": "Pridať kategóriu", + "editCategory": "Upraviť kategóriu", + "deleteCategory": "Odstrániť kategóriu", + "categoryName": "Názov kategórie", + "categoryNamePlaceholder": "napr. Chill & Chat", + "categoryOrder": "Objednať", + "roomName": "Názov miestnosti", + "roomNamePlaceholder": "napr. Welcome Lounge", + "roomId": "ID miestnosti", + "roomIdPlaceholder": "Číselné ID miestnosti", + "save": "Uložiť", + "cancel": "Zrušiť", + "noCategories": "Zatiaľ žiadne kategórie", + "noPublicRooms": "Zatiaľ žiadne verejné miestnosti", + "colId": "ID", + "colName": "Meno", + "colOrder": "Objednať", + "colRooms": "Izby", + "colActions": "Akcie", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Centrum pomoci", + "subtitle": "Podporné položky a správa často kladených otázok", + "entries": "Príspevky", + "newEntry": "+ Nový záznam", + "edit": "Upraviť", + "delete": "Odstrániť", + "noEntries": "Zatiaľ žiadne záznamy", + "confirmDelete": "Odstrániť „{title}“?", + "colId": "ID", + "colTitle": "Názov", + "colCategory": "Kategória", + "colCreated": "Vytvorené", + "colActions": "Akcie", + "form": { + "title": "Názov", + "titlePlaceholder": "Názov položky", + "category": "Kategória", + "categoryPlaceholder": "Vyberte kategóriu", + "body": "Telo", + "bodyPlaceholder": "Napíšte odpoveď…", + "save": "Uložiť záznam", + "saving": "Ukladá sa…", + "deleteEntry": "Odstrániť záznam", + "cancel": "Zrušiť" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Reklamy", + "subtitle": "Správa hotelových reklám a propagačných bannerov", + "newAd": "+ Nová reklama", + "edit": "Upraviť", + "delete": "Odstrániť", + "noAds": "Zatiaľ žiadne inzeráty", + "confirmDelete": "Odstrániť túto reklamu?", + "colId": "ID", + "colName": "Meno", + "colImage": "Obrázok", + "colUrl": "URL", + "colViews": "Zobrazenia", + "colStatus": "Stav", + "colCreated": "Vytvorené", + "colActions": "Akcie", + "form": { + "name": "Meno", + "namePlaceholder": "Názov reklamy", + "image": "Adresa URL obrázka", + "imagePlaceholder": "https://example.com/banner.png", + "url": "Cieľová adresa URL", + "urlPlaceholder": "https://example.com", + "enabled": "Povolené", + "save": "Uložiť reklamu", + "saving": "Ukladá sa…", + "deleteAd": "Odstrániť inzerát", + "cancel": "Zrušiť" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Zapisovateľné boxy", + "subtitle": "Panely obsahu zobrazené v hoteli a CMS", + "newBox": "Nová krabica", + "edit": "Upraviť", + "delete": "Odstrániť", + "noBoxes": "Zatiaľ žiadne zapisovateľné políčka", + "confirmDelete": "Odstrániť toto pole?", + "colId": "ID", + "colName": "Meno", + "colLocation": "Poloha", + "colUpdated": "Aktualizované", + "colActions": "Akcie", + "form": { + "name": "Meno", + "namePlaceholder": "Názov krabice", + "location": "Poloha", + "locationPlaceholder": "napr. domovská stránka, bočný panel", + "content": "Obsah", + "contentPlaceholder": "Napíšte obsah krabice...", + "enabled": "Povolené", + "save": "Uložiť pole", + "saving": "Ukladá sa…", + "deleteBox": "Odstrániť pole", + "cancel": "Zrušiť", + "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": "Moderovanie fotografií", + "subtitle": "Najnovšie fotografie z fotoaparátu v hre", + "delete": "Odstrániť", + "approve": "schváliť", + "noPhotos": "Žiadne fotky na moderovanie", + "confirmDelete": "Chcete túto fotku natrvalo odstrániť?", + "colId": "ID", + "colPreview": "Ukážka", + "colUser": "Používateľ", + "colRoom": "Izba", + "colTimestamp": "Časová pečiatka", + "colActions": "Akcie", + "photoAlt": "Používateľská fotografia č. {id}", + "byUser": "od používateľa {username}", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Používatelia", + "subtitle": "Prehliadajte, vyhľadávajte a spravujte hotelové účty", + "search": "Hľadať", + "searchPlaceholder": "Hľadajte podľa používateľského mena, e-mailu alebo ID…", + "searchResults": "{count, plural, one {# result} other {# results}} for \"{query}\"", + "noResults": "Nenašli sa žiadni používatelia", + "colId": "ID", + "colUsername": "Používateľské meno", + "colEmail": "Email", + "colRank": "Poradie", + "colOnline": "Online", + "colRegistered": "Registrovaný", + "colLastOnline": "Naposledy online", + "colActions": "Akcie", + "yes": "áno", + "no": "Nie", + "edit": "Upraviť", + "setRank": "Nastaviť hodnosť", + "disconnect": "Odpojiť", + "alert": "Upozornenie", + "ban": "Zákaz", + "detail": { + "title": "Používateľ: {username}", + "subtitle": "Podrobnosti o účte a správa", + "overview": "Prehľad", + "actions": "Akcie", + "username": "Používateľské meno", + "email": "Email", + "motto": "Motto", + "rank": "Poradie", + "credits": "Kredity", + "duckets": "Duckets", + "diamonds": "Diamanty", + "online": "Online", + "registered": "Registrovaný", + "lastOnline": "Naposledy online", + "ipAddress": "IP adresa", + "machineId": "ID stroja", + "sendAlert": "Odoslať upozornenie", + "sendMessage": "Odoslať správu", + "disconnectUser": "Odpojiť používateľa", + "banUser": "Zakázať používateľovi", + "resetPassword": "Obnoviť heslo", + "deleteUser": "Odstrániť používateľa", + "confirmDelete": "Naozaj chcete odstrániť používateľa {username}? Toto sa nedá vrátiť späť.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Upraviť používateľa: {username}", + "subtitle": "Upravte podrobnosti účtu", + "username": "Používateľské meno", + "usernamePlaceholder": "Používateľské meno", + "email": "Email", + "emailPlaceholder": "user@example.com", + "motto": "Motto", + "mottoPlaceholder": "Motto užívateľa", + "rank": "Poradie", + "credits": "Kredity", + "duckets": "Duckets", + "diamonds": "Diamanty", + "save": "Uložiť zmeny", + "saving": "Ukladá sa…", + "cancel": "Zrušiť" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Zákazy", + "subtitle": "Spravujte zákazy účtu, IP a strojov", + "newBan": "Nový zákaz", + "edit": "Upraviť", + "delete": "Odstrániť", + "noBans": "Zatiaľ žiadne zákazy", + "confirmDelete": "Odstrániť tento zákaz?", + "colId": "ID", + "colValue": "Hodnota", + "colType": "Typ", + "colReason": "Dôvod", + "colBannedBy": "Zakázané používateľom", + "colExpires": "Platnosť vyprší", + "colCreated": "Vytvorené", + "colActions": "Akcie", + "form": { + "value": "Hodnota", + "valuePlaceholder": "Používateľské meno, IP alebo ID počítača", + "type": "Typ", + "typeUser": "Používateľ", + "typeIp": "IP", + "typeMachine": "Stroj", + "reason": "Dôvod", + "reasonPlaceholder": "Dôvod zákazu", + "expiresAt": "Platnosť vyprší o", + "permanent": "Trvalé", + "save": "Uložiť zákaz", + "saving": "Ukladá sa…", + "cancel": "Zrušiť" + }, + "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": "Správa IP", + "subtitle": "Spravujte bielu a čiernu listinu IP adries", + "whitelist": "Whitelist", + "blacklist": "Čierna listina", + "addIp": "Pridajte IP", + "ipAddress": "IP adresa", + "ipAddressPlaceholder": "napr. 127.0.0.1", + "reason": "Dôvod", + "reasonPlaceholder": "Dôvod zaradenia do zoznamu", + "add": "Pridať", + "remove": "Odstrániť", + "confirmRemove": "Chcete odstrániť túto adresu IP zo {list}?", + "noWhitelistedIps": "Žiadne adresy IP na zozname povolených", + "noBlacklistedIps": "Žiadne adresy IP na čiernej listine", + "colIp": "IP", + "colReason": "Dôvod", + "colAdded": "Pridané", + "colActions": "Akcie", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "Detekcia VPN / proxy", + "subtitle": "Nakonfigurujte nastavenia detekcie VPN a proxy", + "enabled": "Povolené", + "apiKey": "API kľúč", + "apiKeyPlaceholder": "Váš kľúč API na detekciu VPN", + "apiKeyHint": "Ak chcete deaktivovať, ponechajte prázdne", + "blockOnDetect": "Blokovať pri detekcii", + "blockOnDetectHint": "Automaticky blokovať používateľov zistených za VPN alebo proxy", + "save": "Uložiť nastavenia", + "saving": "Ukladá sa…", + "settingsSaved": "Nastavenia VPN boli úspešne uložené", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Zamestnanecké aplikácie", + "subtitle": "Čakajúce a skontrolované žiadosti zamestnancov", + "pending": "Čaká na spracovanie", + "approved": "Schválené", + "rejected": "Odmietnuté", + "noApplications": "Zatiaľ žiadne aplikácie", + "colId": "ID", + "colApplicant": "Žiadateľ", + "colPosition": "pozícia", + "colStatus": "Stav", + "colSubmitted": "Predložené", + "colActions": "Akcie", + "review": "recenzia", + "approve": "schváliť", + "reject": "Odmietnuť", + "confirmApprove": "Schváliť používateľa {username} na pozícii {position}?", + "confirmReject": "Odmietnuť žiadosť používateľa {username} o pozíciu {position}?", + "detail": { + "title": "Žiadosť od používateľa {username}", + "subtitle": "Pre {position}", + "about": "O žiadateľovi", + "message": "Správa aplikácie", + "status": "Stav", + "submitted": "Predložené", + "noMessage": "Nebola poskytnutá žiadna správa" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Tímy", + "subtitle": "Definujte názvy a popisy hodností zamestnancov", + "addRank": "Pridať hodnosť", + "editRank": "Upraviť hodnosť", + "deleteRank": "Odstrániť hodnosť", + "noTeams": "Zatiaľ žiadne definície hodností", + "confirmDelete": "Chcete odstrániť definíciu hodnosti {id}?", + "colId": "ID", + "colRank": "Poradie", + "colName": "Meno", + "colBadge": "Odznak", + "colColour": "Farba", + "colActions": "Akcie", + "form": { + "rankId": "ID hodnosti", + "rankIdPlaceholder": "Číselné ID hodnosti", + "name": "Meno", + "namePlaceholder": "napr. správca", + "badge": "Kód odznaku", + "badgePlaceholder": "napr. ADM001", + "colour": "Farba", + "colourPlaceholder": "napr. #ff0000", + "save": "Uložiť definíciu tímu", + "saving": "Ukladá sa…", + "cancel": "Zrušiť" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Povolenia", + "subtitle": "Spravujte povolenia na základe hodnotenia pre panel správcu", + "addPermission": "Pridajte povolenie", + "editPermission": "Povolenie na úpravu", + "deletePermission": "Odstrániť povolenie", + "noPermissions": "Zatiaľ nie sú nakonfigurované žiadne povolenia", + "confirmDelete": "Odstrániť toto povolenie?", + "colId": "ID", + "colRank": "Poradie", + "colPermission": "Povolenie", + "colCreated": "Vytvorené", + "colActions": "Akcie", + "form": { + "rankId": "ID hodnosti", + "rankIdPlaceholder": "Vyžaduje sa minimálna hodnosť", + "permission": "Povolovací kľúč", + "permissionPlaceholder": "napr. spravovať.články", + "save": "Uložiť povolenie", + "saving": "Ukladá sa…", + "cancel": "Zrušiť" + } + }, + "catalog": { + "title": "Katalóg", + "subtitle": "Prehliadajte a spravujte katalógové stránky a položky", + "pages": "Stránky", + "items": "Položky", + "addPage": "Pridať stránku", + "editPage": "Upraviť stránku", + "deletePage": "Odstrániť stránku", + "addItem": "Pridať položku", + "editItem": "Upraviť položku", + "deleteItem": "Odstrániť položku", + "noPages": "Zatiaľ žiadne stránky katalógu", + "noItems": "Na tejto stránke nie sú žiadne položky", + "confirmDeletePage": "Odstrániť stránku katalógu „{name}“?", + "confirmDeleteItem": "Odstrániť túto položku?", + "colId": "ID", + "colName": "Meno", + "colIcon": "Ikona", + "colOrder": "Objednať", + "colItems": "Položky", + "colEnabled": "Povolené", + "colActions": "Akcie", + "colItemId": "ID položky", + "colItemName": "Názov položky", + "colCostCredits": "Cena (kredity)", + "colCostPoints": "Cena (body)", + "colLimited": "Obmedzené", + "pageForm": { + "name": "Meno", + "namePlaceholder": "Názov stránky", + "icon": "ID ikony", + "iconPlaceholder": "Číselné ID ikony", + "order": "Objednať", + "enabled": "Povolené", + "parent": "Rodičovská stránka", + "parentNone": "Žiadny (root)", + "save": "Uložiť stránku", + "saving": "Ukladá sa…", + "cancel": "Zrušiť" + }, + "itemForm": { + "itemId": "ID položky", + "itemName": "Názov položky", + "costCredits": "Náklady v kreditoch", + "costDuckets": "Náklady v kačkách", + "costDiamonds": "Cena v diamantoch", + "limitedStack": "Obmedzená veľkosť zásobníka", + "limitedSold": "Limitovane predané", + "save": "Uložiť položku", + "saving": "Ukladá sa…", + "cancel": "Zrušiť" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Obchod", + "subtitle": "Spravujte balíky a objednávky", + "packages": "Balíčky", + "orders": "objednávky", + "newPackage": "+ Nové balenie", + "edit": "Upraviť", + "delete": "Odstrániť", + "viewOrder": "Zobraziť", + "noPackages": "Zatiaľ žiadne nákupné balíčky", + "noOrders": "Zatiaľ žiadne objednávky", + "confirmDelete": "Odstrániť tento balík?", + "colId": "ID", + "colName": "Meno", + "colPrice": "Cena", + "colCurrency": "mena", + "colType": "Typ", + "colSold": "Predané", + "colEnabled": "Povolené", + "colActions": "Akcie", + "colOrderId": "ID objednávky", + "colCustomer": "Zákazník", + "colPackage": "Balíček", + "colAmount": "Suma", + "colStatus": "Stav", + "colDate": "Dátum", + "statusPending": "Čaká na spracovanie", + "statusCompleted": "Dokončené", + "statusRefunded": "Vrátené", + "form": { + "name": "Meno", + "namePlaceholder": "Názov balíka", + "description": "Popis", + "descriptionPlaceholder": "Popis balíka", + "price": "Cena", + "currency": "mena", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Typ", + "typeCredits": "Kredity", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamanty", + "typeBadge": "Odznak", + "typeFurni": "Nábytok", + "typeRank": "Poradie", + "amount": "Suma", + "badgeCode": "Kód odznaku", + "badgeCodePlaceholder": "napr. VIP001", + "rankId": "ID hodnosti", + "furniItems": "Nábytkové predmety", + "enabled": "Povolené", + "save": "Uložiť balík", + "saving": "Ukladá sa…", + "cancel": "Zrušiť", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "Transakcie", + "subtitle": "denník platieb cez PayPal", + "noTransactions": "Zatiaľ žiadne transakcie", + "colId": "ID", + "colUser": "Používateľ", + "colAmount": "Suma", + "colCurrency": "mena", + "colPackage": "Balíček", + "colStatus": "Stav", + "colDate": "Dátum", + "colActions": "Akcie", + "statusCompleted": "Dokončené", + "statusPending": "Čaká na spracovanie", + "statusFailed": "Nepodarilo sa", + "statusRefunded": "Vrátené", + "detail": { + "title": "Transakcia č. {id}", + "paypalId": "PayPal ID", + "payerEmail": "E-mail platiteľa", + "grossAmount": "Hrubá suma", + "fee": "Poplatok", + "netAmount": "Čistá suma" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Nakupujte poukážky", + "subtitle": "Spravujte kódy kupónov s možnosťou uplatnenia", + "newVoucher": "+ Nový voucher", + "edit": "Upraviť", + "delete": "Odstrániť", + "noVouchers": "Zatiaľ žiadne poukážky", + "confirmDelete": "Odstrániť kupón „{code}“?", + "colId": "ID", + "colCode": "kód", + "colValue": "Hodnota", + "colType": "Typ", + "colUses": "Použitie / Max", + "colExpires": "Platnosť vyprší", + "colCreated": "Vytvorené", + "colActions": "Akcie", + "form": { + "code": "kód", + "codePlaceholder": "napr. LETO 2025", + "value": "Hodnota", + "type": "Typ", + "typeCredits": "Kredity", + "typeDuckets": "Duckets", + "typeDiamonds": "Diamanty", + "typeBadge": "Odznak", + "typeFurni": "Nábytok", + "typeRank": "Poradie", + "badgeCode": "Kód odznaku", + "badgeCodePlaceholder": "napr. VIP001", + "rankId": "ID hodnosti", + "maxUses": "Maximálne využitie", + "maxUsesPlaceholder": "0 = neobmedzené", + "expiresAt": "Platnosť vyprší o", + "enabled": "Povolené", + "save": "Uložiť voucher", + "saving": "Ukladá sa…", + "cancel": "Zrušiť", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Predplatné", + "subtitle": "Aktívne opakované odbery", + "noSubscriptions": "Žiadne aktívne odbery", + "cancel": "Zrušiť", + "confirmCancel": "Zrušiť odber pre používateľa {username}?", + "colId": "ID", + "colUser": "Používateľ", + "colPackage": "Balíček", + "colAmount": "Suma", + "colInterval": "Interval", + "colStarted": "Začaté", + "colNextBilling": "Ďalšie účtovanie", + "colStatus": "Stav", + "colActions": "Akcie", + "statusActive": "Aktívne", + "statusCancelled": "Zrušené", + "statusExpired": "Platnosť vypršala", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Vzácne hodnoty", + "subtitle": "Spravujte kategórie vzácnych hodnôt a ceny položiek", + "categories": "kategórie", + "items": "Položky", + "addCategory": "Pridať kategóriu", + "editCategory": "Upraviť kategóriu", + "deleteCategory": "Odstrániť kategóriu", + "noCategories": "Zatiaľ žiadne vzácne hodnotové kategórie", + "confirmDeleteCategory": "Chcete odstrániť kategóriu „{name}“ a všetky jej položky?", + "colId": "ID", + "colName": "Meno", + "colItems": "Položky", + "colUpdated": "Aktualizované", + "colActions": "Akcie", + "colItemName": "Názov položky", + "colCredits": "Kredity", + "colPoints": "Body", + "colPointType": "Typ bodu", + "categoryForm": { + "name": "Meno", + "namePlaceholder": "Názov kategórie", + "save": "Uložiť kategóriu", + "saving": "Ukladá sa…", + "cancel": "Zrušiť" + }, + "itemForm": { + "itemName": "Názov položky", + "itemNamePlaceholder": "napr. Trón", + "credits": "Hodnota kreditov", + "points": "Hodnota bodov", + "pointType": "Typ bodu", + "pointTypeDuckets": "Duckets", + "pointTypeDiamonds": "Diamanty", + "save": "Uložiť položku", + "saving": "Ukladá sa…", + "cancel": "Zrušiť", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Odznaky", + "subtitle": "Nahrávajte, dávajte a spravujte katalóg odznakov", + "upload": "Nahrať", + "giveBadge": "Dajte odznak", + "catalogue": "Katalóg", + "uploadTitle": "Nahrajte nový odznak", + "uploadSubtitle": "Nahrajte súbor obrázka odznaku", + "badgeCode": "Kód odznaku", + "badgeCodePlaceholder": "napr. VIP001", + "badgeFile": "Súbor odznaku", + "badgeFileHint": "PNG alebo GIF, odporúčané rozmery 40 x 40", + "uploadButton": "Nahrať", + "uploading": "Nahráva sa…", + "giveTitle": "Dajte používateľovi odznak", + "giveSubtitle": "Udeliť odznak konkrétnemu používateľovi", + "username": "Používateľské meno", + "usernamePlaceholder": "Cieľové používateľské meno", + "giveButton": "Dajte odznak", + "giving": "Dávať…", + "catalogueTitle": "Katalóg odznakov", + "catalogueSubtitle": "Všetky dostupné odznaky v hoteli", + "noBadges": "V katalógu nie sú žiadne odznaky", + "search": "Hľadať odznaky", + "searchPlaceholder": "Hľadať podľa kódu alebo názvu…", + "colCode": "kód", + "colImage": "Obrázok", + "colName": "Meno", + "colDescription": "Popis", + "colActions": "Akcie", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Úspechy", + "subtitle": "Zoznam herných úspechov iba na čítanie", + "noAchievements": "Nie sú nakonfigurované žiadne úspechy", + "colId": "ID", + "colName": "Meno", + "colCategory": "Kategória", + "colLevels": "Úrovne", + "colReward": "Odmena", + "colProgress": "Pokrok", + "levelLabel": "Úroveň {level}", + "rewardCredits": "{count} kreditov", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Kalendárové kampane", + "subtitle": "Zoznam kampaní a udalostí v kalendári iba na čítanie", + "noCampaigns": "Zatiaľ žiadne kampane v kalendári", + "colId": "ID", + "colName": "Meno", + "colStart": "Štart", + "colEnd": "Koniec", + "colType": "Typ", + "colReward": "Odmena", + "colActions": "Akcie", + "detail": { + "title": "Kampaň: {name}", + "subtitle": "Podrobnosti udalosti kalendára", + "days": "dní", + "dayLabel": "deň {day}", + "reward": "Odmena", + "noDays": "Pre túto kampaň nie sú nakonfigurované žiadne dni", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Moderovanie rádia", + "subtitle": "Najnovšie výkriky, DJ aplikácie a on-air plány (25 najnovších z každého).", + "moderation": "Moderovanie", + "shouts": "Výkriky", + "applications": "Aplikácie", + "schedules": "Rozvrhy", + "settings": "Nastavenia", + "embed": "Vložiť", + "ranks": "hodnosti", + "history": "História", + "apiKeys": "API kľúče", + "points": "Body", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Rádiové monitorovanie", + "subtitle": "Živá sonda nakonfigurovaných rádiových koncových bodov iba na čítanie (radio_now_playing_api_url, radio_listeners_api_url). Každá požiadavka zlyhá s časovým limitom {timeout} s – nezapíšu sa žiadne dáta. Nakonfigurujte adresy URL v časti Nastavenia.", + "stream": "Stream", + "online": "Online", + "offline": "Offline", + "notConfigured": "Nie je nakonfigurované", + "nowPlaying": "Teraz sa hrá", + "nowPlayingApi": "Aktuálne prehrávané API", + "listenersApi": "Rozhranie API pre poslucháčov", + "listeners": "Poslucháči", + "currentSong": "Aktuálna skladba", + "bitrate": "Bitová rýchlosť", + "status": "Stav", + "noNowPlayingHint": "nie je teraz nastavené rozhranie API", + "noListenersHint": "nie je nastavené žiadne rozhranie API poslucháčov", + "endpointDiagnostics": "Diagnostika koncového bodu", + "diagnosticsLegend": "OK: dostupné · WARN: nenastavené · ERROR: požiadavka zlyhala alebo vypršal časový limit.", + "streamUrl": "Webová adresa streamu", + "unreachable": "nedosiahnuteľný", + "refresh": "Obnoviť" + }, + "user": "Používateľ", + "message": "Správa", + "posted": "Uverejnené", + "realName": "Skutočné meno", + "age": "Vek", + "style": "štýl", + "applied": "Aplikované", + "day": "deň", + "start": "Štart", + "end": "Koniec", + "show": "Zobraziť", + "status": "Stav", + "active": "aktívny", + "inactive": "neaktívne", + "hidden": "skryté", + "activeSchedules": "Aktívne rozvrhy", + "noShouts": "Žiadne výkriky na moderovanie", + "noApplications": "Neboli predložené žiadne žiadosti.", + "noSchedules": "Nie sú nakonfigurované žiadne plány.", + "deleteShout": "Odstrániť", + "confirmDeleteShout": "Odstrániť tento výkrik?", + "pendingApplications": "Čakajúce žiadosti", + "settingsForm": { + "title": "Nastavenia rádia", + "subtitle": "Úpravy sa zapisujú do website_settings (radio_* kľúče) a ničia vyrovnávaciu pamäť nastavení runtime. Booleany používajú 0/1.", + "enabled": "Povolené", + "disabled": "Zakázané", + "totalKeys": "Celkový počet kľúčov", + "configured": "Nakonfigurované", + "curatedHint": "spravované kľúče s hodnotou", + "customKeys": "Vlastné kľúče", + "saveAll": "Uložiť všetky", + "singleKey": "Pridať/prepísať jeden kľúč", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "hodnotu", + "commentPlaceholder": "komentár (voliteľné)", + "saveSingle": "Uložiť", + "otherSettings": "Ďalšie nastavenia rádia", + "dbError": "Nepodarilo sa načítať nastavenia (databáza nie je k dispozícii). Predvolené nastavenia sa vytvoria pri uložení." + }, + "embedPage": { + "title": "Rádio Embed", + "subtitle": "Kód na vloženie priameho prenosu pripravený na kopírovanie. Iba na čítanie — nič tu nezapisuje do databázy. Nakonfigurujte webovú adresu streamu v nastaveniach rádia (radio_stream_url).", + "streamUrl": "Webová adresa streamu", + "configured": "Nakonfigurované", + "missing": "Chýba", + "radioName": "Názov rádia", + "nowPlayingApi": "Aktuálne prehrávané API", + "set": "Set", + "notSet": "Nie je nastavené", + "noStreamUrl": "Nie je nakonfigurovaná žiadna adresa URL streamu", + "noStreamUrlText": "Nie je nastavená žiadna adresa_url rádia, takže zatiaľ nie je čo vkladať.", + "goToSettings": "Prejdite do časti Nastavenia rádia", + "livePreview": "Živá ukážka", + "livePreviewText": "Toto je holý audio prehrávač, ako ho uvidia návštevníci. Stlačením tlačidla prehrávania potvrďte, že stream je dostupný.", + "source": "Zdroj", + "audioSnippet": "Útržok zvukového prehrávača", + "audioSnippetDesc": "Zvukový prehrávač HTML5 nasmerovaný priamo na stream. Funguje všade, kde je povolený obyčajný HTML.", + "iframeSnippet": "Útržok obálky iframe", + "iframeSnippetDesc": "Vloží vlastnú stránku rádiového prehrávača do prvku iframe – zachová váš štýl a informácie o prehrávaní. Upravte šírku/výšku podľa chuti.", + "audioUnsupported": "Váš prehliadač nepodporuje zvukový prvok." + }, + "banners": { + "title": "Bannery", + "heading": "Rádiové bannery", + "description": "Propagačné bannery zobrazené na stránke rádia zoradené podľa poradia zoradenia.", + "addBanner": "Pridať banner", + "createBanner": "Vytvorte banner", + "deleteBanner": "Odstrániť banner", + "noBanners": "Zatiaľ žiadne bannery – pridajte jeden vyššie.", + "existing": "Existujúce bannery ({count})", + "save": "Uložiť", + "delete": "Odstrániť", + "byUser": "od používateľa {id}", + "active": "aktívny", + "hidden": "skryté", + "bannerAlt": "Rádiový banner", + "statusActive": "Aktívne", + "statusHidden": "Skryté", + "dbError": "Nepodarilo sa načítať bannery (databáza nie je k dispozícii).", + "form": { + "imagePath": "Cesta k obrázku / adresa URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Názov", + "description": "Popis", + "sortOrder": "Zoradiť poradie", + "active": "Aktívne" + } + }, + "ranksForm": { + "title": "Poradie rádia", + "subtitle": "Hodnosti DJov / zamestnancov priraditeľné v rádiových aplikáciách.", + "dbError": "Nepodarilo sa načítať hodnotenia (databáza nie je k dispozícii).", + "active": "Aktívne", + "addRank": "Pridať hodnosť", + "name": "Meno", + "badgeCode": "Kód odznaku", + "description": "Popis", + "createRank": "Vytvorte hodnosť", + "existing": "Existujúce hodnosti ({count})", + "noRanks": "Zatiaľ žiadne hodnotenia – pridajte vyššie.", + "activeLabel": "aktívny", + "inactiveLabel": "neaktívne", + "save": "Uložiť", + "deleteRank": "Odstrániť poradie č. {id}" + }, + "historyPage": { + "title": "História prehrávania rádia", + "subtitle": "Minulé dídžejské vystúpenia a vysielací čas (radio_history), najnovšie prvé. Záznam iba na čítanie o tom, kto, kedy vysielal a koľko poslucháčov si ho naladilo.", + "dbError": "Nepodarilo sa načítať históriu rádia (databáza nie je k dispozícii).", + "showsLogged": "Zobrazuje prihlásený", + "onAirNow": "Teraz vo vysielaní", + "uniqueDjs": "Jedineční DJs", + "peakListeners": "Špičkoví poslucháči", + "empty": "Zatiaľ nebola zaznamenaná žiadna história rádia.", + "showLog": "Zobraziť denník ({count})", + "colDj": "DJ", + "colShow": "Zobraziť", + "colStarted": "Začaté", + "colEnded": "Ukončené", + "colAirtime": "Vysielací čas", + "colListeners": "Poslucháči", + "colNotes": "Poznámky", + "onAir": "vo vzduchu" + }, + "apiKeysForm": { + "title": "Rádiové kľúče API", + "subtitle": "Kľúče API pre externé rádiové integrácie (radio_api_keys). Kľúče sa generujú na strane servera a zobrazujú sa maskované – pri prvom vydaní skopírujte celú hodnotu z databázy.", + "dbError": "Nepodarilo sa načítať kľúče API (databáza nie je k dispozícii).", + "totalKeys": "Celkový počet kľúčov", + "active": "Aktívne", + "inactive": "Neaktívne", + "generateKey": "Generovať kľúč", + "generateHint": "Tajný kľúč sa generuje automaticky s kryptografickou náhodnosťou — nezadávate ho.", + "name": "Meno", + "namePlaceholder": "Most AzureCast", + "rateLimit": "Limit sadzby (požiadavky/min)", + "allowedIps": "Povolené adresy IP (voliteľné)", + "allowedIpsPlaceholder": "oddelené čiarkou, prázdne = ľubovoľné", + "generate": "Generovať kľúč", + "existingKeys": "Existujúce kľúče ({count})", + "noKeys": "Zatiaľ žiadne kľúče API – vygenerujte si jeden vyššie.", + "colName": "Meno", + "colKey": "kľúč", + "colAllowedIps": "Povolené adresy IP", + "colRateLimit": "Limit sadzby", + "colLastUsed": "Naposledy použité", + "colExpires": "Platnosť vyprší", + "colStatus": "Stav", + "colActions": "Akcie", + "maskedHint": "Zobrazuje sa iba prvých 8 znakov", + "any": "akékoľvek", + "activeLabel": "aktívny", + "inactiveLabel": "neaktívne", + "deactivate": "Deaktivovať", + "activate": "Aktivovať", + "delete": "Odstrániť" + }, + "pointsForm": { + "title": "Body poslucháčov rádia", + "subtitle": "Odmeňte poslucháčov menami za čas strávený v rádiu. Úpravy sa zapisujú do website_settings (radio_points_* kľúče) a ničia vyrovnávaciu pamäť nastavení runtime. Booleany používajú 0/1.", + "saved": "Uložené", + "points": "Body", + "enabled": "Povolené", + "disabled": "Zakázané", + "perMinute": "Za minútu", + "paidIn": "zaplatené v {currency}", + "maxPerDay": "Max / deň", + "unlimited": "Neobmedzené", + "minListeners": "Min. poslucháčov", + "settings": "Nastavenia", + "pointsEnabled": "Body sú povolené", + "pointsEnabledHint": "Hlavný spínač na udeľovanie bodov poslucháčov.", + "currency": "mena", + "currencyHint": "Do ktorej peňaženky sa body vyplácajú.", + "pointsPerMinute": "Body za minútu", + "pointsPerMinuteHint": "Suma udelená za každú celú minútu počúvania.", + "maxPerDayHint": "Denný limit na používateľa. Použite 0 pre neobmedzené.", + "minListenersHint": "Body sa udeľujú len vtedy, keď je naladených aspoň toľko ľudí.", + "save": "Uložte nastavenia bodov" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Záložný zoznam skladieb (radio_auto_dj_playlist) rádio rotuje, keď nevysiela žiadny živý DJ. Zoradené podľa zoradenia a potom podľa názvu.", + "dbError": "Nepodarilo sa načítať zoznam skladieb AutoDJ (databáza nie je k dispozícii).", + "tracks": "Skladby", + "active": "Aktívne", + "inactive": "Neaktívne", + "addTrack": "Pridať skladbu", + "titlePlaceholder": "Názov skladby", + "artist": "Umelec", + "album": "album", + "artworkUrl": "Adresa URL umeleckého diela", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Trvanie (sekundy)", + "durationPlaceholder": "napr. 215", + "sortOrder": "Zoradiť poradie", + "playlist": "Zoznam videí ({count})", + "noTracks": "Zatiaľ žiadne stopy AutoDJ – pridajte jednu vyššie.", + "colOrder": "Objednať", + "colTitle": "Názov", + "colArtist": "Umelec", + "colAlbum": "album", + "colDuration": "Trvanie", + "colPlays": "Hrá", + "colLastPlayed": "Naposledy hrané", + "colStatus": "Stav", + "colActions": "Akcie", + "activeLabel": "aktívny", + "inactiveLabel": "neaktívne", + "deactivate": "Deaktivovať", + "activate": "Aktivovať", + "delete": "Odstrániť", + "trackTitle": "Názov" + }, + "moderationPage": { + "title": "Moderovanie DJ", + "subtitle": "Skontrolujte a odstráňte rozhlasové výkriky (50 najnovších).", + "recentShouts": "Nedávne výkriky ({count})" + } + }, + "commandocentrum": { + "title": "Commandocentrum", + "subtitle": "Diagnostika, ovládacie prvky RCON a správa používateľov", + "diagnostics": "Diagnostika", + "rcon": "RCON", + "userActions": "Akcie používateľa", + "diagnosticsTitle": "Diagnostika emulátora", + "memoryUsage": "Využitie pamäte", + "uptime": "Uptime", + "onlineUsers": "Online používatelia", + "roomsLoaded": "Izby nabité", + "refresh": "Obnoviť", + "rconTitle": "RCON príkazy", + "rconPlaceholder": "Zadajte príkaz RCON…", + "rconSend": "Odoslať", + "rconSending": "Odosiela sa…", + "rconResponse": "odpoveď", + "userActionsTitle": "Akcie používateľa", + "username": "Používateľské meno", + "usernamePlaceholder": "Cieľové používateľské meno", + "action": "Akcia", + "execute": "Vykonať", + "actions": { + "disconnect": "Odpojiť", + "alert": "Odoslať upozornenie", + "giveCredits": "Dajte kredity", + "giveBadge": "Dajte odznak", + "givePoints": "Dajte body", + "ban": "Zákaz", + "kick": "Kopať" + }, + "messagePlaceholder": "Správa (pre upozornenia)…", + "amountPlaceholder": "Suma…", + "badgePlaceholder": "Kód odznaku…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Konfigurácia emulátora", + "subtitle": "Zobrazte a upravte nastavenia emulátora a texty miestnych nastavení", + "settings": "Nastavenia", + "texts": "Texty", + "search": "Hľadať", + "searchPlaceholder": "Vyhľadávacie klávesy…", + "noSettings": "Nenašli sa žiadne nastavenia", + "noTexts": "Nenašli sa žiadne texty", + "edit": "Upraviť", + "save": "Uložiť", + "saving": "Ukladá sa…", + "cancel": "Zrušiť", + "colKey": "kľúč", + "colValue": "Hodnota", + "colType": "Typ", + "colActions": "Akcie", + "editDialog": { + "title": "Upraviť: {key}", + "value": "Hodnota", + "valuePlaceholder": "Zadajte hodnotu…", + "save": "Uložiť zmeny", + "cancel": "Zrušiť" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Upozornenia", + "subtitle": "Odosielajte upozornenia pre celý hotel a zobrazujte posledné upozornenia", + "sendAlert": "Odoslať upozornenie na hotel", + "recentAlerts": "Nedávne upozornenia ({count})", + "noRecentAlerts": "Žiadne nedávne upozornenia", + "form": { + "title": "Názov upozornenia", + "titlePlaceholder": "napr. Údržba servera za 10 minút", + "message": "Výstražná správa", + "messagePlaceholder": "Napíšte varovnú správu…", + "type": "Typ", + "typeHotel": "Upozornenie pre celý hotel", + "typeStaff": "Iba personál", + "urgent": "Naliehavé", + "send": "Odoslať upozornenie", + "sending": "Odosiela sa…", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "ID", + "colTitle": "Názov", + "colSentBy": "Odoslal", + "colType": "Typ", + "colDate": "Dátum", + "colActions": "Akcie", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Aktivity zamestnancov", + "subtitle": "Kontrolný záznam akcií zamestnancov na paneli správcu", + "noLogs": "Zatiaľ nie je zaznamenaná žiadna aktivita zamestnancov", + "colId": "ID", + "colUser": "Používateľ", + "colAction": "Akcia", + "colTarget": "Cieľ", + "colDescription": "Popis", + "colIp": "IP", + "colTimestamp": "Časová pečiatka", + "filterByUser": "Filtrovať podľa používateľa…", + "filterByAction": "Filtrovať podľa akcie…", + "clearFilters": "Vymazať filtre", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Filter slov", + "subtitle": "Spravujte filtrované slová a frázy v hoteli", + "addWord": "Pridajte slovo", + "addWords": "Pridajte slová", + "noWords": "Zatiaľ žiadne filtrované slová", + "confirmDelete": "Chcete odstrániť slovo „{word}“ z filtra?", + "colId": "ID", + "colWord": "Slovo", + "colAddedBy": "Pridal", + "colCreated": "Vytvorené", + "colActions": "Akcie", + "form": { + "word": "Slovo", + "wordPlaceholder": "napr. zlé slovo", + "addMore": "Pridajte viacero slov (jedno na riadok)", + "save": "Pridať do filtra", + "saving": "Ukladá sa…", + "cancel": "Zrušiť" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Režim údržby", + "subtitle": "Povoliť alebo zakázať údržbu v celom hoteli", + "enabled": "Režim údržby je povolený", + "disabled": "Režim údržby je vypnutý", + "enable": "Povoliť údržbu", + "disable": "Zakázať údržbu", + "message": "Správa o údržbe", + "messagePlaceholder": "Čoskoro sa vrátime!", + "staffAccess": "Umožnite personálu prístup počas údržby", + "save": "Uložiť nastavenia", + "saving": "Ukladá sa…", + "confirmEnable": "Povolenie údržby zabráni všetkým používateľom, ktorí nie sú zamestnancami, v prístupe do hotela. Pokračovať?", + "confirmDisable": "Zakázať režim údržby a obnoviť prístup pre všetkých používateľov?", + "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": "Povolenia na upratovanie", + "subtitle": "Nakonfigurujte, ktoré hodnosti môžu pristupovať ku ktorým sekciám správcu", + "addPermission": "Pridajte povolenie", + "editPermission": "Povolenie na úpravu", + "deletePermission": "Odstrániť povolenie", + "noPermissions": "Nie sú nakonfigurované žiadne povolenia na upratovanie", + "confirmDelete": "Odstrániť toto povolenie?", + "colId": "ID", + "colRank": "Poradie", + "colSection": "oddiel", + "colActions": "Akcie", + "form": { + "rankId": "ID hodnosti", + "rankIdPlaceholder": "Minimálna hodnosť", + "section": "Sekčný kľúč", + "sectionPlaceholder": "napr. admin.dashboard", + "save": "Uložiť povolenie", + "saving": "Ukladá sa…", + "cancel": "Zrušiť" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset Aplikované!", + "cleared": "All Povolenia cleared!", + "invalidRank": "Invalid Poradie", + "testDone": "Test done: {count} Povolenia found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Odstrániť ALL Povolenia? This Akcia cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Povolenie", + "colDescription": "Popis", + "colMinRank": "Min. Poradie", + "permissionKey": "Povolovací kľúč", + "minRank": "Min. Poradie", + "description": "Popis", + "permissions": "Povolenia", + "permissionsCount": "{count} Povolenia", + "permission": "Povolenie", + "highestMinRank": "Highest min. Poradie: {rank}", + "totalMinRank": "Total min. Poradie sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} hodnosti", + "missingDeps": "{count} Chýba dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(Chýba)", + "rank": "Poradie", + "count": "Count", + "searchPermission": "Hľadať Povolenia…", + "search": "Hľadať", + "manage": "Manage", + "importSelection": "Importovať selection", + "noGroup": "Nie group", + "allGroups": "All groups", + "perGroup": "Povolenia per group", + "perRank": "Povolenia per Poradie", + "rankOverviewHint": "All Povolenia grouped by the Poradie they are assigned to.", + "tabOverview": "Prehľad", + "tabManage": "Manage", + "tabImport": "Importovať / Export", + "tabRanks": "Poradie Prehľad", + "tabPresets": "Predvoľby", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "Importovať Povolenia", + "importHint": "Paste a JSON array of Povolenie objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "Importovať", + "exportTitle": "Export Povolenia", + "exportHint": "Export all Povolenia as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Povolenie Predvoľby", + "presetsHint": "Použiť a predefined set of Povolenia for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Moderovanie tools: Používateľ lookup, Zákazy, CFH handling, chat Denníky.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Používatelia, Izby, news, Nastavenia, Obchod, events, Rádio & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including Povolenie management and asset Importovať.", + "applyPreset": "Použiť preset", + "clearAll": "Clear all Povolenia", + "testTitle": "Test Poradie access", + "testHint": "Enter a Poradie number to see which Povolenia would be granted.", + "test": "Test", + "auditTitle": "Povolenie audit log", + "auditHint": "All changes to Upratovanie Povolenia are logged.", + "auditLogsAt": "Audit Denníky are available on the Audit log page.", + "viewAuditLogs": "Zobraziť audit Denníky", + "importedWithErrors": "Imported {count} Povolenia with {errors} errors", + "confirmClearAllDesc": "This will Odstrániť every Povolenie entry from the Databáza. Are you sure?", + "confirmDeletePermission": "Odstrániť this Povolenie permanently?", + "confirmBulkDelete": "Odstrániť {count} selected Povolenia?", + "deleteSelected": "Odstrániť {count} selected", + "cancel": "Zrušiť", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Používateľ", + "auditAction": "Akcia", + "auditTarget": "Cieľ", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Izby", + "subtitle": "Vyhľadávajte a spravujte hotelové izby", + "search": "Hľadať", + "searchPlaceholder": "Hľadajte podľa mena, vlastníka alebo ID…", + "searchResults": "{count, plural, one {# room} other {# rooms}} nájdených pre dopyt „{query}“", + "noResults": "Nenašli sa žiadne izby", + "colId": "ID", + "colName": "Meno", + "colOwner": "Vlastník", + "colUsers": "Používatelia", + "colState": "štátu", + "colCategory": "Kategória", + "colCreated": "Vytvorené", + "colActions": "Akcie", + "stateOpen": "Otvorte", + "stateClosed": "Zatvorené", + "stateLocked": "Zamknuté", + "stateInvisible": "Neviditeľný", + "detail": { + "title": "Miestnosť: {name}", + "subtitle": "Vlastník: {owner}", + "overview": "Prehľad", + "actions": "Akcie", + "description": "Popis", + "noDescription": "Bez popisu", + "owner": "Vlastník", + "users": "Používatelia online", + "maxUsers": "Maximálny počet používateľov", + "category": "Kategória", + "state": "štátu", + "tags": "Tagy", + "noTags": "Žiadne značky", + "created": "Vytvorené", + "deleteRoom": "Odstrániť miestnosť", + "confirmDelete": "Odstrániť miestnosť „{name}“? Toto sa nedá vrátiť späť.", + "enterRoom": "Vstúpte do miestnosti", + "changeOwner": "Zmeniť vlastníka", + "changeOwnerPlaceholder": "Používateľské meno nového vlastníka" + } + }, + "emailTemplates": { + "title": "E-mailové šablóny", + "subtitle": "Spravujte šablóny transakčných e-mailov", + "newTemplate": "+ Nová šablóna", + "edit": "Upraviť", + "delete": "Odstrániť", + "noTemplates": "Zatiaľ žiadne e-mailové šablóny", + "confirmDelete": "Chcete odstrániť šablónu „{name}“?", + "colId": "ID", + "colName": "Meno", + "colSubject": "Predmet", + "colKey": "kľúč", + "colUpdated": "Aktualizované", + "colActions": "Akcie", + "form": { + "name": "Meno", + "namePlaceholder": "napr. Uvítací email", + "key": "kľúč", + "keyPlaceholder": "napr. uvítací_e-mail", + "subject": "Predmet", + "subjectPlaceholder": "Predmet e-mailu", + "body": "telo (HTML)", + "bodyPlaceholder": "

Vážený {username},

", + "variables": "Dostupné premenné", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Uložiť šablónu", + "saving": "Ukladá sa…", + "cancel": "Zrušiť", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Téma", + "subtitle": "Prispôsobte si vzhľad CMS", + "presets": "Predvoľby", + "colours": "Farby", + "css": "CSS", + "presetsTitle": "Prednastavenia tém", + "presetsSubtitle": "Vyberte si vopred zostavenú farebnú schému", + "applyPreset": "Použiť", + "presetApplied": "Predvoľba bola použitá: {preset}", + "customiseTitle": "Vlastné farby", + "primary": "Primárne", + "secondary": "Sekundárne", + "accent": "Prízvuk", + "background": "Pozadie", + "surface": "Povrch", + "text": "Text", + "saveColours": "Uložiť farby", + "savingColours": "Ukladá sa…", + "cssTitle": "Vlastné CSS", + "cssSubtitle": "Pridajte vlastný CSS na prepísanie štýlov tém", + "cssPlaceholder": "/* Váš vlastný CSS tu */", + "saveCss": "Uložiť CSS", + "savingCss": "Ukladá sa…", + "reset": "Obnoviť predvolené nastavenia", + "confirmReset": "Obnoviť predvolené hodnoty motívu?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Knižnica médií", + "subtitle": "Nahrávajte a spravujte mediálne súbory", + "upload": "Nahrať", + "uploadTitle": "Nahrajte súbor", + "uploadSubtitle": "Presuňte myšou alebo kliknutím nahrajte", + "uploadButton": "Vyberte súbor", + "uploading": "Nahráva sa…", + "noFiles": "Zatiaľ žiadne mediálne súbory", + "delete": "Odstrániť", + "confirmDelete": "Odstrániť tento súbor natrvalo?", + "search": "Hľadať", + "searchPlaceholder": "Hľadať podľa názvu súboru…", + "colPreview": "Ukážka", + "colName": "Meno", + "colSize": "Veľkosť", + "colType": "Typ", + "colUploaded": "Nahrané", + "colActions": "Akcie", + "copyUrl": "Kopírovať URL", + "urlCopied": "Adresa URL bola skopírovaná do schránky" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Nahrajte a spravujte favicon stránky", + "current": "Aktuálna favicon", + "uploadLabel": "Nahrať favicon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO alebo SVG. Maximálne 2 MB.", + "upload": "Nahrať", + "uploading": "Nahráva sa…", + "delete": "Odstrániť", + "deleting": "Odstraňuje sa…", + "saved": "Favicon úspešne uložený!", + "deleted": "Favicon bola úspešne odstránená!", + "error": "Niečo sa pokazilo", + "confirmDelete": "Chcete odstrániť favicon? Stránka už nebude zobrazovať vlastnú favicon.", + "generator": { + "title": "Generovať favicon", + "text": "Text", + "bgColor": "Farba pozadia", + "textColor": "Farba textu", + "rounded": "Zaoblené rohy", + "save": "Uložiť ako favicon" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "Nastavenia CMS", + "subtitle": "Spravujte konfiguráciu CMS pre páry kľúč/hodnota", + "addSetting": "Pridať nastavenie", + "edit": "Upraviť", + "delete": "Odstrániť", + "noSettings": "Nenašli sa žiadne nastavenia", + "confirmDelete": "Odstrániť nastavenie „{key}“?", + "colKey": "kľúč", + "colValue": "Hodnota", + "colUpdated": "Aktualizované", + "colActions": "Akcie", + "form": { + "key": "kľúč", + "keyPlaceholder": "napr. hotel_name", + "value": "Hodnota", + "valuePlaceholder": "Nastavenie hodnoty", + "save": "Uložiť nastavenie", + "saving": "Ukladá sa…", + "cancel": "Zrušiť" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Domov", + "reload": "Obnoviť", + "fullscreen": "Celá obrazovka", + "logout": "Odhlásiť", + "onlineUsers": "Používatelia online", + "emulatorOnline": "Emulátor online", + "emulatorOffline": "Emulátor offline", + "dragToMove": "Potiahnite na presun", + "hide": "Skryť panel", + "fullscreenExit": "Ukončiť celú obrazovku", + "show": "Zobraziť panel", + "emulatorUnknown": "Stav emulátora neznámy" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Diagnostika súborov", + "preliminary": "Predbežná kontrola adries; obsah sa overí pri importe.", + "http": "HTTP {status}", + "network": "Pripojenie zlyhalo", + "timeout": "Zdroj neodpovedal včas", + "invalidResponse": "Zdroj vrátil webovú stránku namiesto súboru", + "available": "Súbor nájdený; čaká na overenie", + "recover": "Priložiť originál a pokračovať", + "recoveryHint": "Vyberte {file} (do 50 MB). Overí sa jeho identita. Opakujú sa neúspešné položky; dokončené importy zostanú zachované.", + "attach": "Vyberte pôvodný súbor .nitro", + "working": "Overovanie alebo pokračovanie...", + "attached": "Zodpovedajúci súbor priložený", + "resume": "Obnoviť neúspešné importy s týmto súborom", + "invalidFile": "Vyberte zodpovedajúci pôvodný .nitro do 50 MB a skúste to znova.", + "resumeError": "Obnovte históriu a použite posledný pokus; skontrolujte súbor a skúste to znova.", + "mismatchedFile": "Tento súbor patrí inému nábytku.", + "alreadyStarted": "Obnova už začala. Obnovte históriu a použite posledný pokus.", + "notEligible": "Túto položku nemožno obnoviť prílohou." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/sr.json b/src/messages/sr.json index f6d6b7a7..5f2251dc 100644 --- a/src/messages/sr.json +++ b/src/messages/sr.json @@ -1,3918 +1,4913 @@ { - "draftRecovery": { - "ready": "Копија за опоравак чуваће се у овом прегледачу 7 дана.", - "saved": "Копија за опоравак сачувана је у овом прегледачу на 7 дана.", - "unavailable": "Опоравак у прегледачу није доступан. Остави ову страницу отвореном док се промене не сачувају.", - "found": "У овом прегледачу доступна је копија за опоравак, сачувана", - "restore": "Врати копију из прегледача", - "discard": "Избриши копију из прегледача", - "confirmRestore": "Заменити тренутни образац копијом из прегледача? Провери садржај пре чувања.", - "confirmDiscard": "Избрисати ову копију из прегледача? Тренутни образац остаће непромењен." - }, - "nav": { - "home": "Хоме", - "community": "Заједница", - "articles": "Чланци", - "photos": "Фотографије", - "staff": "Особље", - "rankings": "Ранкингс", - "guilds": "Гуилдс", - "leaderboards": "Леадербоардс", - "rareValues": "Ретке вредности", - "shop": "Схоп", - "market": "Маркет", - "assistance": "Помоћ", - "helpCenter": "Центар за помоћ", - "myTickets": "Моје карте", - "badges": "Значке", - "radio": "Радио", - "friends": "Пријатељи", - "messages": "Поруке", - "admin": "Админ", - "openMenu": "Отворите мени", - "closeMenu": "Затвори мени", - "drawBadge": "Нацртај значку", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} на мрежи", - "nitroClient": "Нитро клијент", - "tagline": "An online virtual world where you can create your own avatar, make friends, chat, create rooms and much more!", - "login": "Логин", - "or": "Ор", - "createAccount": "Направите налог" - }, - "footer": { - "copyright": "© {year} - {hotel} is a not for profit educational project" - }, - "pages": { - "staff": { - "title": "Особље", - "subtitle": "The team behind the hotel", - "ranksTitle": "Чинови", - "ranksSubtitle": "What each part of the team takes care of", - "membersTitle": "Чланови тима", - "membersEmptySubtitle": "Тренутно нема коме да се покаже", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "No staff members to show.", - "colUsername": "Корисничко име", - "colRank": "Ранг", - "colMotto": "Мото" - }, - "leaderboard": { - "title": "Леадербоард", - "subtitle": "Top 20 players by {currency}", - "tab_credits": "Цредитс", - "tab_diamonds": "Дијаманти", - "tab_duckets": "Дуцкетс", - "tab_achievement": "Достигнућа", - "tab_respects": "Поштовање", - "tab_onlinetime": "Онлине Тиме", - "emptyState": "Још увек нема рангирања за приказ.", - "colAvatar": "Аватар", - "colPlayer": "Плаиер" - }, - "friends": { - "title": "Пријатељи", - "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": "Нема мото", - "remove": "Remove", - "success": { - "removed": "Friend removed." - }, - "errors": { - "notFound": "That friendship was not found.", - "invalid": "Invalid friend.", - "error": "Something went wrong. Please try again." - } - }, - "messages": { - "title": "Поруке", - "subtitle": "Friend requests and offline messages waiting for you", - "requestsTitle": "Захтеви за пријатеље", - "requestsEmptySubtitle": "Nobody's asked to be your friend yet", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "No pending friend requests.", - "wantsToBeFriend": "жели да буде твој пријатељ.", - "accept": "Прихвати", - "offlineTitle": "Офлајн поруке", - "offlineEmptySubtitle": "Ваше пријемно сандуче је празно", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "You have no offline messages.", - "unknownUser": "Корисник #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Нема мото", - "statRank": "Ранг", - "statCredits": "Цредитс", - "statRegistered": "Регистрован", - "badgesTitle": "Значке", - "badgesEmpty": "Још нема беџева.", - "photosTitle": "Фотографије", - "photosEmpty": "Још нема фотографија.", - "guestbookTitle": "Књига гостију", - "guestbookSubtitle": "Messages on {username}'s wall", - "leaveMessage": "Оставите поруку", - "guestbookPlaceholder": "Write something on {username}'s guestbook…", - "post": "Пост", - "loginToPost": "Log in to leave a guestbook message.", - "guestbookEmpty": "No guestbook entries yet.", - "unknownUser": "Корисник #{id}", - "statDuckets": "Дуцкетс", - "statDiamonds": "Дијаманти", - "walletTitle": "Новчаник", - "friendsTitle": "Пријатељи", - "friendsSubtitle": "People in the hotel they hang out with", - "friendsEmpty": "Нема пријатеља за приказ.", - "roomsTitle": "Собе", - "roomsSubtitle": "Собе које поседују", - "roomsEmpty": "Нема соба за приказ.", - "roomUntitled": "Унтитлед роом", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Ранкингс", - "subtitle": "The top 12 players ranked by credits", - "emptyState": "Још нема играча за рангирање." - }, - "home": { - "welcome": "Добро дошли у {hotelName}", - "welcomeSubtitle": "Your retro hotel, now powered by Next.js", - "welcomeBody": "Hang out, collect furni, and meet friends.", - "enterHotel": "Унесите {hotelName}", - "onlineFriends": "Онлине Фриендс", - "noFriendsOnline": "Нема пријатеља на мрежи", - "register": "РЕГИСТРИРАЈ СЕ САДА", - "joinNow": "Придружите се {hotelName} данас!", - "recentUsers": "Недавни корисници", - "recentPhotos": "Недавне фотографије", - "latestNews": "Најновије вести", - "newsTitle": "Најновије вести", - "newsSubtitle": "Свеже из хотела", - "allNews": "Све вести →", - "allUsers": "Заједница →", - "noArticles": "Још нема чланака.", - "noPhotos": "Још нема фотографија.", - "noUsers": "Нема корисника на мрежи", - "latestArticle": "Најновији чланак", - "latestUsers": "Најновији грађани ({count} укупно)", - "statsOnline": "Онлајн", - "statsCitizens": "Грађани", - "statsRooms": "Собе", - "statsArticles": "Чланци", - "featuresAvatar": "Аватар", - "featuresAvatarDesc": "Направи свој јединствени изглед", - "featuresFurniture": "Намештај", - "featuresFurnitureDesc": "Уреди собе предметима", - "featuresCommunity": "Заједница", - "featuresCommunityDesc": "Створи пријатеље и ћаскај", - "featuresGames": "Игре", - "featuresGamesDesc": "Такмичи се и забави се" - }, - "news": { - "title": "Вести", - "subtitle": "The latest announcements, events and updates from the hotel", - "noArticles": "Још нема чланака." - }, - "article": { - "backToNews": "← Вести", - "reactionsTitle": "Реакције", - "reactionsSubtitle": "Реците нам шта мислите", - "reaction": { - "like": "Лике", - "love": "Љубав", - "wow": "Вау" - }, - "removeReaction": "Click to remove your reaction", - "reactWith": "Реагујте са {reaction}", - "noReactions": "Још нема реакција.", - "logIn": "Пријавите се", - "toReact": "реаговати.", - "commentsTitle": "Коментари", - "commentsSubtitle": "Придружите се разговору", - "commentsCount": "{count} до сада", - "noComments": "Још нема коментара. Будите први који ће оставити коментар.", - "userNumber": "Корисник #{id}", - "addComment": "Додајте коментар", - "commentPlaceholder": "Напишите свој коментар…", - "postComment": "Објавите коментар", - "toComment": "да оставите коментар.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Фотографије", - "subtitle": "The latest snapshots taken in the hotel", - "noPhotos": "Још нема фотографија.", - "photoAlt": "Фотографија корисника #{id}", - "byUser": "од корисника #{id}" - }, - "badges": { - "title": "Значке", - "subtitle": "The badges you can earn and show off around the hotel", - "noBadges": "Још нема доступних беџева." - }, - "community": { - "title": "Заједница", - "subtitle": "Everything happening around the hotel in one place", - "open": "Отвори →", - "links": { - "rankings": { - "title": "Ранкингс", - "text": "See the wealthiest players in the hotel, ranked by credits." - }, - "staff": { - "title": "Особље", - "text": "Meet the team that keeps the hotel running every day." - }, - "news": { - "title": "Вести", - "text": "The latest announcements, events and updates." - }, - "photos": { - "title": "Фотографије", - "text": "Snapshots shared by the community from around the hotel." - }, - "guilds": { - "title": "Гуилдс", - "text": "Прегледајте групе које су играчи креирали и придружили им се." - }, - "leaderboards": { - "title": "Леадербоардс", - "text": "Who's on top this season across the hotel's stats." - } - } - }, - "guilds": { - "title": "Гуилдс", - "subtitle": "Browse the groups players have created and joined", - "empty": "Још нема цехова.", - "unnamedGuild": "Неименовани цех", - "noDescription": "Нема описа" - }, - "guild": { - "allGuilds": "← Сви цехови", - "unnamedGuild": "Неименовани цех", - "noDescription": "Нема описа", - "memberSingular": "Члан", - "memberPlural": "Чланови", - "founded": "Основан", - "forumLink": "Форум →", - "discussion": "Дискусија", - "membersTitle": "Чланови", - "memberLowerSingular": "члан", - "memberLowerPlural": "чланова", - "noMembers": "Нема чланова.", - "owner": "Власник", - "noMotto": "Нема мото" - }, - "guildForum": { - "backToGuild": "← Назад на цех", - "unnamedGuild": "Неименовани цех", - "forumTitle": "{guild} — Форум", - "threadSingular": "конац", - "threadPlural": "нити", - "newThread": "+ Нова тема", - "empty": "No threads in this forum yet.", - "colSubject": "Предмет", - "colAuthor": "Аутор", - "colPosts": "Постови", - "colDate": "Датум", - "noSubject": "(без предмета)", - "pinned": "Закачен", - "locked": "Закључано", - "userNumber": "Корисник #{id}", - "unknown": "Непознато", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Назад на форум", - "unnamedGuild": "Неименовани цех", - "title": "Нова тема", - "subtitle": "на форуму {guild}", - "subjectLabel": "Предмет", - "subjectPlaceholder": "Тема теме", - "messageLabel": "Порука", - "messagePlaceholder": "Write your opening post…", - "postThread": "Пост тхреад", - "cancel": "Откажи", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Схоп", - "subtitle": "Допуните свој рачун и узмите ексклузивне пакете, валуту и значке.", - "browsingCategory": "Browsing the {category} packages.", - "all": "Све", - "allPackages": "Сви пакети", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "No packages available right now.", - "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": "Допуните преко ПаиПал-а", - "subtitle": "Плаћајте безбедно помоћу ПаиПал-а и ваши кредити се додају оног тренутка када се уплата изврши.", - "cancelled": "Checkout was cancelled — no payment was taken.", - "chooseAmount": "Изаберите износ", - "notConfiguredPre": "PayPal isn't configured yet. An administrator needs to set", - "notConfiguredAnd": "и", - "notConfiguredOptional": "(и опционо", - "notConfiguredPost": "за сандбок у односу на уживо).", - "balanceTitle": "Ваш баланс", - "signedInAs": "Пријављен као {username}", - "credits": "Цредитс", - "creditsPerUnit": "Credits per 1.00 {currency}", - "rateLine": "Добијате {amount} кредита по 1,00 {currency}. Credits appear in-game the next time you log in." - }, - "marketplace": { - "title": "Маркетплаце", - "subtitle": "Browse furniture and rares listed by players. Огласи се постављају у игрици и ажурирају се уживо - идите у хотел да бисте дали понуду.", - "activeOffers": "Активне понуде", - "sellers": "Продавци", - "totalValue": "Укупна вредност", - "activeListings": "Активни огласи", - "mostRecentFirst": "Most recently listed first", - "empty": "Тренутно нема активних понуда на тржишту. Проверите поново касније.", - "colOffer": "Понуда", - "colItem": "Ставка", - "colSeller": "продавац", - "colPrice": "Цена", - "colListed": "Наведено", - "itemLabel": "Ставка #{id}", - "userLabel": "Корисник #{id}", - "justNow": "управо сада", - "minutesAgo": "пре {count} м", - "hoursAgo": "пре {count} х", - "daysAgo": "пре {count} д" - }, - "rares": { - "title": "Ретке вредности", - "subtitle": "Добијте преглед свих ретких у хотелу, груписаних по категоријама.", - "empty": "We currently have no rares listed here.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Погледајте ретке →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Све ретке", - "empty": "No rares listed in this category yet.", - "colRare": "Ретко", - "colCredits": "Цредитс", - "colCurrency": "Валута", - "creditsValue": "{value} кредита", - "duckets": "Дуцкетс", - "diamonds": "Дијаманти", - "credits": "Цредитс" - }, - "redeem": { - "title": "Искористите ваучер", - "subtitle": "Имате ваучер код? Унесите га испод да бисте додали награду на свој налог.", - "enterCode": "Унесите свој код", - "oncePerAccount": "Сваки ваучер се може искористити само једном по налогу.", - "balanceTitle": "Ваш баланс", - "signedInAs": "Пријављен као {username}", - "credits": "Цредитс", - "instantCredit": "Исплаћене награде се тренутно приписују и појављују се у игри следећи пут када се пријавите." - }, - "help": { - "title": "Центар за помоћ", - "subtitle": "Пронађите водиче, теме подршке и хотелска правила — све што вам је потребно да добијете помоћ.", - "myTickets": "Моје карте →", - "topicsTitle": "Теме подршке", - "topicsSubtitle": "Browse guides and answers to common questions", - "topicsEmpty": "Још нема тема помоћи.", - "rulesTitle": "Хотелска правила", - "rulesSubtitle": "Молимо вас да прочитате ово пре дружења у хотелу", - "rulesEmpty": "Још нема објављених правила.", - "categoryEmpty": "No rules in this category." - }, - "helpCategory": { - "back": "← Центар за помоћ", - "topicSubtitle": "Тема центра за помоћ", - "moreTitle": "Више тема за помоћ", - "moreSubtitle": "Jump to another support topic" - }, - "helpTickets": { - "title": "Хелп Тицкетс", - "subtitle": "Пошаљите карту особљу и пратите своје отворене захтеве.", - "statTotal": "Укупно улазница", - "statOpen": "Отвори", - "statClosed": "Затворено", - "newTitle": "Нова карта", - "newSubtitle": "Describe your issue and staff will follow up", - "subjectPlaceholder": "Предмет", - "contentPlaceholder": "Опишите свој проблем…", - "submit": "Пошаљи карту", - "listTitle": "Ваше карте", - "listSubtitle": "Every request you have sent to staff", - "listEmpty": "Још немате карте.", - "colId": "ИД", - "colSubject": "Предмет", - "colStatus": "Статус", - "colCreated": "Цреатед", - "statusOpen": "Отвори", - "statusClosed": "Затворено", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Пријавите се за особље {hotel}", - "subtitle": "We open staff applications every now and then. Ако наиђете на позицију за коју сматрате да бисте се савршено уклопили, немојте оклевати да се пријавите за њу.", - "noPositionsTitle": "Нема отворених позиција", - "noPositionsBody": "There are currently no positions open. Молимо вас да се вратите касније да проверите да ли имамо слободних места до тада. Thank you for your interest.", - "noDeadline": "Није постављен рок", - "deadline": "Application deadline: {date}", - "alreadyApplied": "You have already applied for {rank}", - "aboutYou": "О теби", - "aboutPlaceholder": "Tell us why you'd be a great {rank}…", - "applyFor": "Пријавите се за {rank}", - "success": { - "submitted": "Application submitted — staff will review it soon." - }, - "errors": { - "empty": "Please write at least 10 characters about yourself.", - "invalid": "Invalid application.", - "duplicate": "You have already applied for this position.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "applyTeam": { - "title": "Пријавите се за {hotel} тим", - "subtitle": "Тимске пријаве отварамо периодично. Ако видите тим који вам одговара, не оклевајте да се пријавите!", - "noPositionsTitle": "Нема отворених тимских позиција", - "noPositionsBody": "Тренутно нема отворених тимских позиција. Вратите се касније да проверите да ли постоје нова отварања. Хвала вам!", - "pending": "Your application is pending", - "aboutYou": "О теби", - "aboutPlaceholder": "Tell us why you'd be a great fit for {rank}…", - "applyFor": "Пријавите се за {rank}", - "success": { - "submitted": "Application submitted — staff will review it soon." - }, - "errors": { - "empty": "Please write at least 10 characters about yourself.", - "invalid": "Invalid application.", - "duplicate": "You have already applied for this team.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radio": { - "title": "Радио", - "subtitle": "Укључите хотелски радио — ДЈ сетови уживо, захтеви и узвици.", - "nowPlaying": "Сада свирам", - "nothingPlaying": "Nothing playing right now.", - "onAir": "У емисији: {dj}", - "noDj": "Нема ДЈ-а у етеру.", - "audioUnsupported": "Ваш претраживач не подржава аудио елемент.", - "streamOffline": "Стрим је тренутно ван мреже.", - "exploreTitle": "Истражите радио", - "exploreSubtitle": "Распоред, узвици, молбе и друго", - "linkSchedule": "Распоред", - "linkScheduleText": "Наша недељна постава ДЈ-ева и емисија.", - "linkShouts": "узвици", - "linkShoutsText": "Повици и захтеви заједнице.", - "linkRequests": "Захтеви", - "linkRequestsText": "Замолите ДЈ-а да заврти вашу омиљену нумеру.", - "linkApply": "Пријавите се као ДЈ", - "linkApplyText": "Придружите се тиму и крените у етар.", - "linkLeaderboard": "Леадербоард", - "linkLeaderboardText": "Најбољи слушаоци рангирани према зарађеним поенима.", - "todayTitle": "Данашњи распоред", - "todayTitleWithDay": "Данашњи распоред · {day}", - "todaySubtitle": "Шта је данас у етру", - "fullWeek": "Цела недеља →", - "noShowsToday": "Нема заказаних емисија за данас.", - "colTime": "Време", - "colShow": "Схов", - "colDj": "ДЈ", - "untitledShow": "Унтитлед схов", - "userNumber": "Корисник #{id}" - }, - "radioSchedule": { - "title": "Радио распоред", - "subtitle": "Our weekly line-up of DJs and shows", - "empty": "Још увек нема заказаних емисија.", - "colDay": "Дан", - "colTime": "Време", - "colDj": "ДЈ", - "colShow": "Схов", - "noShows": "Нема емисија" - }, - "radioShouts": { - "title": "Радио Схоутс", - "subtitle": "Повици и захтеви заједнице", - "postTitle": "Позовите", - "postSubtitle": "Пошаљите поруку ДЈ-у у етеру", - "messageLabel": "Ваша порука", - "messagePlaceholder": "Send a shout to the DJ…", - "shoutButton": "викати", - "loginToPost": "Пријавите се да бисте објавили узвик.", - "latestTitle": "Најновији узвици", - "latestSubtitle": "Најновије поруке слушалаца", - "empty": "Још нема вике. Будите први!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Радио Цонтестс", - "subtitle": "Укључите се и учествујте у нашим најновијим такмичењима у етеру", - "empty": "Још нема такмичења.", - "contestLabel": "Такмичење #{id}", - "dateUnknown": "Датум непознат" - }, - "radioGiveaways": { - "title": "Радио Гивеаваис", - "subtitle": "Послушајте своју прилику да освојите наше радио поклоне", - "empty": "Још нема поклона.", - "giveawayLabel": "Поклон #{id}", - "dateUnknown": "Датум непознат" - }, - "radioLeaderboard": { - "title": "Табела најбољих слушалаца радија", - "subtitle": "50 најбољих слушалаца по зарађеним поенима слушајући радио", - "empty": "No listener points to show yet.", - "colRank": "Ранг", - "colAvatar": "Аватар", - "colListener": "Слушалац", - "colPoints": "Поени" - }, - "radioRequests": { - "formTitle": "Пошаљите захтев", - "formSubtitle": "Ask the DJ to play your favourite track", - "songLabel": "Сонг", - "songPlaceholder": "Наслов песме", - "artistLabel": "Уметник", - "artistPlaceholder": "Name of the artist (optional)", - "submitButton": "Пошаљите захтев", - "loginToRequest": "Log in to submit a request.", - "latestTitle": "Недавни захтеви", - "latestSubtitle": "The most recently requested songs", - "empty": "Још нема захтева.", - "colSong": "Сонг", - "colArtist": "Уметник", - "colRequester": "Подносилац захтева", - "colDate": "Датум", - "colStatus": "Статус", - "statusPending": "На чекању", - "statusApproved": "Одобрено", - "statusPlayed": "Играо", - "success": { - "posted": "Request submitted." - }, - "errors": { - "empty": "Please enter a song title or artist.", - "invalid": "Invalid request.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioApply": { - "title": "Пријавите се за радио ДЈ-а", - "subtitle": "Реците нам нешто о себи и зашто бисте се одлично уклапали у етар", - "latestTitle": "Ваша најновија апликација", - "statusLabel": "Статус:", - "submittedOn": "· послато {date}", - "submitAgain": "Можете поново да пошаљете испод ако су се ваши подаци променили.", - "formTitle": "Пријавни формулар", - "formSubtitle": "All fields marked required must be filled in", - "realNameLabel": "Право име", - "realNamePlaceholder": "Ваше пуно име", - "ageLabel": "Старост", - "availabilityLabel": "Доступност", - "availabilityPlaceholder": "Које дане и време можете емитовати?", - "musicStyleLabel": "Музички стил", - "musicStylePlaceholder": "нпр. Хоусе, поп, хип-хоп", - "experienceLabel": "Искуство", - "optional": "(опционо)", - "experiencePlaceholder": "Any prior DJ or hosting experience?", - "motivationLabel": "Мотивација", - "motivationPlaceholder": "Why do you want to join the radio team?", - "submitButton": "Пошаљите пријаву", - "success": { - "submitted": "Application submitted — we will get back to you soon." - }, - "errors": { - "invalid": "Please fill in all required fields.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "settings": { - "accountSettings": "Подешавања налога", - "accountSettingsSubtitle": "Управљајте својим профилом, безбедношћу и повезаним налозима", - "publicProfile": "Ваш јавни профил", - "noMotto": "Нема мото", - "noEmail": "Нема е-поште у досијеу", - "changeMotto": "Промени мото", - "changeMottoSubtitle": "Ажурира се одмах у игри ако сте на мрежи", - "mottoPlaceholder": "Ваш мото", - "saveMotto": "Сачувај мото", - "securityTitle": "Безбедност", - "securitySubtitle": "Two-factor authentication", - "securityDescription": "Додајте други слој заштите свом налогу.", - "twoFactorLink": "Two-factor authentication" - }, - "settings2fa": { - "backToSettings": "← Подешавања", - "title": "Двофакторска аутентификација", - "subtitle": "Додајте други ниво безбедности помоћу апликације за аутентификацију", - "nowEnabled": "2ФА је сада омогућена. 🔒", - "disabledNotice": "2ФА је онемогућен.", - "badCode": "That code wasn't valid — try again.", - "noAppKeyPrefix": "2ФА је недоступан до", - "noAppKeyMiddle": "је конфигурисан (исти Ларавел", - "noAppKeySuffix": "како ваш АтомЦМС инсталира, тако да постојеће тајне остају читљиве).", - "isEnabled": "2ФА је омогућена", - "onYourAccount": "на свој рачун.", - "disable": "Онемогућите 2ФА", - "scanOrEnter": "Скенирајте или унесите овај кључ", - "scanInstructions": "Додајте ово у Гоогле Аутхентицатор / Аутхи, а затим унесите 6-цифрени код да бисте потврдили.", - "manualKey": "Ручни кључ:", - "codePlaceholder": "6-цифрени код", - "confirm": "Потврди", - "enableIntro": "Додајте други ниво безбедности помоћу апликације за аутентификацију.", - "enable": "Омогући 2ФА" - }, - "title": "Повезани налози", - "subtitle": "Повежите друштвени налог да бисте се могли пријавити једним кликом", - "connected": "Повезано", - "unavailable": "Недоступно", - "login": { - "title": "Пријавите се", - "subtitle": "Добродошли назад — пријавите се да бисте ушли у хотел.", - "subtitle2fa": "Унесите шестоцифрени код са аутентификатора.", - "usernamePlaceholder": "Корисничко име", - "passwordPlaceholder": "Лозинка", - "codePlaceholder": "2ФА код", - "pleaseWait": "Молимо сачекајте…", - "verify": "Верифи", - "signIn": "Пријавите се", - "or": "или", - "noAccount": "Немате налог?", - "createOne": "Направите један", - "forgotPassword": "Заборавили сте лозинку?", - "errorInvalidCredentials": "Неважеће корисничко име или лозинка", - "errorInvalid2fa": "Неважећи 2ФА код", - "welcomeBack": "Добродошао назад", - "welcomeBackSub": "Пријави се да наставиш ка {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Креирајте налог", - "subtitle": "Join the hotel — it only takes a moment.", - "username": "Корисничко име", - "email": "Емаил", - "password": "Лозинка", - "confirmPassword": "Поновите лозинку", - "usernamePlaceholder": "Корисничко име", - "emailPlaceholder": "Емаил", - "passwordPlaceholder": "Лозинка (мин 6 знакова)", - "confirmPasswordPlaceholder": "Поновите лозинку", - "selectOutfit": "Изаберите своју одећу", - "termsAccept": "I am 18+ and accept the {hotel} terms & rules.", - "createAccount": "Креирајте налог", - "creatingAccount": "Прављење налога...", - "redirecting": "Преусмеравање на ваш налог...", - "alreadyHaveAccount": "Већ имате налог? Пријавите се!", - "register": "Региструјте се", - "termsError": "Морате прихватити услове и правила да бисте се регистровали.", - "usernameError": "Корисничко име је обавезно.", - "emailError": "Потребан је важећи имејл.", - "passwordError": "Лозинка мора имати најмање 6 знакова.", - "confirmPasswordError": "Лозинке се не поклапају.", - "termsRequired": "Морате прихватити услове и правила.", - "usernameRequired": "Корисничко име је обавезно.", - "emailRequired": "Емаил је обавезан.", - "passwordRequired": "Лозинка је обавезна.", - "passwordsDontMatch": "Лозинке се не поклапају.", - "alreadyHaveAccountPre": "Већ имаш налог?", - "alreadyHaveAccountLink": "Пријави се", - "whoIsOnline": "Ко је онлајн", - "usersOnline": "{count} онлајн" - }, - "forgot": { - "title": "Ресетујте лозинку", - "subtitle": "Послаћемо вам е-пошту безбедну везу за постављање нове лозинке.", - "sentNotice": "Ако је тај емаил регистрован, послата је веза за ресетовање. Проверите пријемно сандуче.", - "emailPlaceholder": "Ваш емаил", - "sendResetLink": "Пошаљи везу за ресетовање", - "backToLogin": "Назад на пријаву", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Поставите нову лозинку", - "subtitle": "Изаберите јаку лозинку коју не користите другде.", - "passwordPlaceholder": "Нова лозинка (мин 6 знакова)", - "resetPassword": "Ресетујте лозинку", - "backToLogin": "Назад на пријаву" - }, - "verify": { - "verifiedTitle": "Све је спремно", - "verifiedSubtitle": "Имејл је верификован", - "verifiedBody": "Your email address has been verified. You can now log in and play.", - "goToLogin": "Идите на пријаву", - "alreadyTitle": "Већ проверено", - "alreadySubtitle": "Нема шта да се уради", - "alreadyBody": "This email address has already been confirmed.", - "unavailableTitle": "Покушајте поново ускоро", - "unavailableSubtitle": "Сервер недоступан", - "unavailableBody": "Нисмо могли да дођемо до сервера да бисмо верификовали вашу е-пошту. Please retry the link in a moment.", - "invalidTitle": "Верификација е-поште", - "invalidSubtitle": "Неважећа или истекла веза", - "invalidBody": "Ова веза за верификацију није важећа. Уверите се да сте отворили целу везу из своје е-поште или затражите нову.", - "backToLogin": "Назад на пријаву" - }, - "banned": { - "title": "Забрањени сте", - "subtitle": "Налог је суспендован", - "body": "Your account has been suspended from the hotel.", - "reasonLabel": "Разлог:", - "permanent": "Ова забрана је трајна.", - "expires": "Истиче {date}.", - "contactStaff": "Ако верујете да је ово грешка, контактирајте тим особља." - }, - "maintenance": { - "title": "{hotel} is under maintenance", - "subtitle": "Вратићемо се ускоро", - "staffCanLogIn": "Особље се и даље може пријавити." - }, - "admin": { - "nav": { - "overview": "Преглед", - "dashboard": "Дасхбоард", - "content": "Садржај", - "articles": "Чланци", - "tags": "Ознаке", - "navigator": "Навигатор", - "helpCenter": "Центар за помоћ", - "advertisements": "Огласи", - "writeableBoxes": "Кутије за писање", - "photos": "Фотографије", - "tickets": "Улазнице", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Корисници и приступ", - "users": "Корисници", - "bans": "Банс", - "ipManagement": "ИП менаџмент", - "vpn": "ВПН", - "applications": "Апликације", - "teams": "Тимови", - "permissions": "Дозволе", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Економија", - "catalog": "Каталог", - "shop": "Схоп", - "transactions": "Трансакције", - "vouchers": "Ваучери", - "subscriptions": "Претплате", - "rareValues": "Ретке вредности", - "badges": "Значке", - "achievements": "Достигнућа", - "calendar": "Календар", - "radio": "Радио", - "radioHistory": "Радио историја", - "radioBanners": "Баннери", - "radioEmbed": "Ембед", - "radioApiKeys": "АПИ кључеви", - "radioModeration": "Умереност", - "radioSettings": "Подешавања", - "radioMonitoring": "Мониторинг", - "radioPoints": "Поени", - "radioRanks": "Чинови", - "radioAutodj": "Ауто ДЈ", - "system": "Систем", - "commandocentrum": "Цоммандоцентрум", - "emulator": "Емулатор", - "alerts": "Алертс", - "logs": "Дневници", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Филтер речи", - "maintenance": "Одржавање", - "rooms": "Собе", - "emailTemplates": "Шаблони е-поште", - "theme": "Тема", - "media": "Медији", - "favicon": "Фавицон", - "sounds": "Звуци", - "translations": "Преводи", - "import": "Увоз", - "settings": "Подешавања", - "backToSite": "Назад на сајт", - "housekeeping": "Домаћинство", - "hotelManagementPanel": "Панел за управљање хотелом", - "rankLabel": "Ранг {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Дасхбоард", - "subtitle": "Hotel overview & live status", - "playersOnline": "Играчи на мрежи", - "articles": "Чланци", - "activeBans": "Активне забране", - "database": "База података", - "databaseConnected": "Повезано", - "databaseDown": "Доле", - "usersByRank": "Корисници по рангу", - "noAccountsToBreakDown": "No accounts to break down yet", - "rankLabel": "Ранг {rank}", - "rankWithCount": "Rank {rank}: {count} accounts", - "recentStaffActivity": "Недавне активности особља", - "viewAll": "Прикажи све", - "noStaffActivityLogged": "No staff activity logged yet" - }, - "articles": { - "title": "Чланци", - "subtitle": "News articles — 50 most recent", - "newArticle": "+ Нови чланак", - "edit": "Уреди", - "delete": "Избриши", - "noArticles": "Још нема чланака", - "confirmDelete": "Are you sure you want to delete \"{title}\"?", - "colTitle": "Наслов", - "colSlug": "Слуг", - "colAuthor": "Аутор", - "colCreated": "Цреатед", - "colActions": "Акције", - "form": { - "title": "Наслов", - "titlePlaceholder": "Наслов чланка", - "slug": "Слуг", - "slugPlaceholder": "чланак-урл-слуг", - "category": "Категорија", - "categoryPlaceholder": "Изаберите категорију", - "body": "Тело", - "bodyPlaceholder": "Write your article content…", - "image": "Слика", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Тхумбнаил", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Објављено", - "featured": "Феатуред", - "save": "Сачувај чланак", - "saving": "Чување…", - "deleteArticle": "Избриши чланак", - "deleteConfirm": "Ова радња се не може опозвати. The article will be permanently removed.", - "cancel": "Откажи", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Ознаке", - "subtitle": "Article tags / categories", - "addTag": "Додај ознаку", - "name": "Име", - "namePlaceholder": "Име ознаке", - "backgroundColour": "Боја позадине", - "createTag": "Креирајте ознаку", - "editTag": "Уреди ознаку", - "updateTag": "Ажурирај ознаку", - "deleteTag": "Обриши ознаку", - "confirmDelete": "Избрисати „{name}“?", - "noTags": "Још нема ознака", - "colId": "ИД", - "colTag": "Таг", - "colColour": "Боја", - "colUsedBy": "Користи од", - "colCreated": "Цреатед", - "colActions": "Акције" - }, - "navigation": { - "title": "Навигатор", - "flatCategories": "Равне категорије", - "publicRooms": "Јавне просторије", - "addCategory": "Додај категорију", - "editCategory": "Уреди категорију", - "deleteCategory": "Избриши категорију", - "categoryName": "Назив категорије", - "categoryNamePlaceholder": "нпр. Цхилл & Цхат", - "categoryOrder": "Ред", - "roomName": "Име собе", - "roomNamePlaceholder": "нпр. Велцоме Лоунге", - "roomId": "ИД собе", - "roomIdPlaceholder": "Бројчани ИД собе", - "save": "Сачувај", - "cancel": "Откажи", - "noCategories": "Још нема категорија", - "noPublicRooms": "Још нема јавних просторија", - "colId": "ИД", - "colName": "Име", - "colOrder": "Ред", - "colRooms": "Собе", - "colActions": "Акције" - }, - "helpCenter": { - "title": "Центар за помоћ", - "subtitle": "Support entries and FAQ management", - "entries": "Ентриес", - "newEntry": "+ Нови унос", - "edit": "Уреди", - "delete": "Избриши", - "noEntries": "Још нема уноса", - "confirmDelete": "Избрисати „{title}“?", - "colId": "ИД", - "colTitle": "Наслов", - "colCategory": "Категорија", - "colCreated": "Цреатед", - "colActions": "Акције", - "form": { - "title": "Наслов", - "titlePlaceholder": "Наслов уноса", - "category": "Категорија", - "categoryPlaceholder": "Изаберите категорију", - "body": "Тело", - "bodyPlaceholder": "Напиши одговор…", - "save": "Сачувај унос", - "saving": "Чување…", - "deleteEntry": "Обриши унос", - "cancel": "Откажи" - } - }, - "ads": { - "title": "Огласи", - "subtitle": "Управљајте хотелским рекламама и промотивним банерима", - "newAd": "+ Нови оглас", - "edit": "Уреди", - "delete": "Избриши", - "noAds": "Још нема огласа", - "confirmDelete": "Избрисати овај оглас?", - "colId": "ИД", - "colName": "Име", - "colImage": "Слика", - "colUrl": "УРЛ", - "colViews": "Погледи", - "colStatus": "Статус", - "colCreated": "Цреатед", - "colActions": "Акције", - "form": { - "name": "Име", - "namePlaceholder": "Назив огласа", - "image": "УРЛ слике", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Циљна УРЛ адреса", - "urlPlaceholder": "хттпс://екампле.цом", - "enabled": "Омогућено", - "save": "Сачувај оглас", - "saving": "Чување…", - "deleteAd": "Избриши оглас", - "cancel": "Откажи" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Кутије за писање", - "subtitle": "Content panels shown across the hotel and CMS", - "newBox": "Нова кутија", - "edit": "Уреди", - "delete": "Избриши", - "noBoxes": "Још увек нема поља за писање", - "confirmDelete": "Избрисати ово поље?", - "colId": "ИД", - "colName": "Име", - "colLocation": "Локација", - "colUpdated": "Ажурирано", - "colActions": "Акције", - "form": { - "name": "Име", - "namePlaceholder": "Име кутије", - "location": "Локација", - "locationPlaceholder": "нпр. почетна страница, бочна трака", - "content": "Садржај", - "contentPlaceholder": "Напишите садржај кутије...", - "enabled": "Омогућено", - "save": "Сачувај кутију", - "saving": "Чување…", - "deleteBox": "Делете бок", - "cancel": "Откажи" - } - }, - "photos": { - "title": "Пхото Модератион", - "subtitle": "Recent in-game camera photos", - "delete": "Избриши", - "approve": "Одобре", - "noPhotos": "Нема слика за модерирање", - "confirmDelete": "Delete this photo permanently?", - "colId": "ИД", - "colPreview": "Преглед", - "colUser": "Корисник", - "colRoom": "Соба", - "colTimestamp": "Временска ознака", - "colActions": "Акције", - "photoAlt": "Корисничка фотографија #{id}", - "byUser": "од {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Корисници", - "subtitle": "Browse, search and manage hotel accounts", - "search": "Тражи", - "searchPlaceholder": "Search by username, email or ID…", - "searchResults": "{count, plural, one {# result} other {# results}} за „{query}“", - "noResults": "Није пронађен ниједан корисник", - "colId": "ИД", - "colUsername": "Корисничко име", - "colEmail": "Емаил", - "colRank": "Ранг", - "colOnline": "Онлине", - "colRegistered": "Регистрован", - "colLastOnline": "Ласт онлине", - "colActions": "Акције", - "yes": "Да", - "no": "бр", - "edit": "Уреди", - "setRank": "Поставите ранг", - "disconnect": "Прекини везу", - "alert": "Алерт", - "ban": "Бан", - "detail": { - "title": "Корисник: {username}", - "subtitle": "Account details and management", - "overview": "Преглед", - "actions": "Акције", - "username": "Корисничко име", - "email": "Емаил", - "motto": "Мото", - "rank": "Ранг", - "credits": "Цредитс", - "duckets": "Дуцкетс", - "diamonds": "Дијаманти", - "online": "Онлине", - "registered": "Регистрован", - "lastOnline": "Ласт онлине", - "ipAddress": "ИП адреса", - "machineId": "ИД машине", - "sendAlert": "Пошаљи упозорење", - "sendMessage": "Пошаљи поруку", - "disconnectUser": "Искључите корисника", - "banUser": "Бан корисника", - "resetPassword": "Ресетујте лозинку", - "deleteUser": "Избриши корисника", - "confirmDelete": "Are you sure you want to delete {username}? Ово се не може поништити.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Уреди корисника: {username}", - "subtitle": "Измените детаље налога", - "username": "Корисничко име", - "usernamePlaceholder": "Корисничко име", - "email": "Емаил", - "emailPlaceholder": "корисник@пример.цом", - "motto": "Мото", - "mottoPlaceholder": "Мото корисника", - "rank": "Ранг", - "credits": "Цредитс", - "duckets": "Дуцкетс", - "diamonds": "Дијаманти", - "save": "Сачувај промене", - "saving": "Чување…", - "cancel": "Откажи" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Банс", - "subtitle": "Manage account, IP and machine bans", - "newBan": "Нова забрана", - "edit": "Уреди", - "delete": "Избриши", - "noBans": "Још нема забрана", - "confirmDelete": "Уклонити ову забрану?", - "colId": "ИД", - "colValue": "Валуе", - "colType": "Тип", - "colReason": "Разлог", - "colBannedBy": "Баннед би", - "colExpires": "Истиче", - "colCreated": "Цреатед", - "colActions": "Акције", - "form": { - "value": "Валуе", - "valuePlaceholder": "Username, IP, or machine ID", - "type": "Тип", - "typeUser": "Корисник", - "typeIp": "ИП", - "typeMachine": "Машина", - "reason": "Разлог", - "reasonPlaceholder": "Бан разлог", - "expiresAt": "Истиче у", - "permanent": "Перманентно", - "save": "Сачувај забрану", - "saving": "Чување…", - "cancel": "Откажи" - } - }, - "ip": { - "title": "ИП менаџмент", - "subtitle": "Manage IP whitelist and blacklist", - "whitelist": "Бела листа", - "blacklist": "Црна листа", - "addIp": "Додајте ИП", - "ipAddress": "ИП адреса", - "ipAddressPlaceholder": "нпр. 127.0.0.1", - "reason": "Разлог", - "reasonPlaceholder": "Разлог за уврштавање", - "add": "Додај", - "remove": "Уклони", - "confirmRemove": "Remove this IP from the {list}?", - "noWhitelistedIps": "Нема ИП адреса на белој листи", - "noBlacklistedIps": "Нема ИП адреса на црној листи", - "colIp": "ИП", - "colReason": "Разлог", - "colAdded": "Додато", - "colActions": "Акције" - }, - "vpn": { - "title": "ВПН / Детекција проксија", - "subtitle": "Configure VPN and proxy detection settings", - "enabled": "Омогућено", - "apiKey": "АПИ кључ", - "apiKeyPlaceholder": "Your VPN detection API key", - "apiKeyHint": "Оставите празно да бисте онемогућили", - "blockOnDetect": "Блокирај при откривању", - "blockOnDetectHint": "Аутоматски блокирајте кориснике откривене иза ВПН-а или проксија", - "save": "Сачувај подешавања", - "saving": "Чување…", - "settingsSaved": "VPN settings saved successfully" - }, - "applications": { - "title": "Пријаве особља", - "subtitle": "Pending and reviewed staff applications", - "pending": "На чекању", - "approved": "Одобрено", - "rejected": "Одбијено", - "noApplications": "Још нема апликација", - "colId": "ИД", - "colApplicant": "апликант", - "colPosition": "Положај", - "colStatus": "Статус", - "colSubmitted": "Субмиттед", - "colActions": "Акције", - "review": "Преглед", - "approve": "Одобре", - "reject": "Одбити", - "confirmApprove": "Approve {username} for {position}?", - "confirmReject": "Reject {username}'s application for {position}?", - "detail": { - "title": "Application by {username}", - "subtitle": "За {position}", - "about": "О подносиоцу захтева", - "message": "Порука апликације", - "status": "Статус", - "submitted": "Субмиттед", - "noMessage": "Није наведена порука" - } - }, - "teams": { - "title": "Тимови", - "subtitle": "Define staff rank names and descriptions", - "addRank": "Додајте ранг", - "editRank": "Уреди ранг", - "deleteRank": "Обриши ранг", - "noTeams": "Још нема дефиниција ранга", - "confirmDelete": "Delete rank {id} definition?", - "colId": "ИД", - "colRank": "Ранг", - "colName": "Име", - "colBadge": "Значка", - "colColour": "Боја", - "colActions": "Акције", - "form": { - "rankId": "Ранг ИД", - "rankIdPlaceholder": "Бројчани ранг ИД", - "name": "Име", - "namePlaceholder": "нпр. Администратор", - "badge": "Шифра значке", - "badgePlaceholder": "нпр. АДМ001", - "colour": "Боја", - "colourPlaceholder": "нпр. #фф0000", - "save": "Сачувајте дефиницију тима", - "saving": "Чување…", - "cancel": "Откажи" - } - }, - "permissions": { - "title": "Дозволе", - "subtitle": "Управљајте дозволама заснованим на рангу за административни панел", - "addPermission": "Додајте дозволу", - "editPermission": "Дозволу за уређивање", - "deletePermission": "Избриши дозволу", - "noPermissions": "No permissions configured yet", - "confirmDelete": "Желите ли да избришете ову дозволу?", - "colId": "ИД", - "colRank": "Ранг", - "colPermission": "Дозвола", - "colCreated": "Цреатед", - "colActions": "Акције", - "form": { - "rankId": "Ранг ИД", - "rankIdPlaceholder": "Потребан минимални ранг", - "permission": "Кључ за дозволу", - "permissionPlaceholder": "нпр. админ.артицлес.манаге", - "save": "Сачувај дозволу", - "saving": "Чување…", - "cancel": "Откажи" - } - }, - "catalog": { - "title": "Каталог", - "subtitle": "Browse and manage catalog pages and items", - "pages": "Пагес", - "items": "Предмети", - "addPage": "Додај страницу", - "editPage": "Уреди страницу", - "deletePage": "Обриши страницу", - "addItem": "Додај ставку", - "editItem": "Уреди ставку", - "deleteItem": "Избриши ставку", - "noPages": "Још нема страница каталога", - "noItems": "Нема ставки на овој страници", - "confirmDeletePage": "Delete catalog page \"{name}\"?", - "confirmDeleteItem": "Избрисати ову ставку?", - "colId": "ИД", - "colName": "Име", - "colIcon": "Икона", - "colOrder": "Ред", - "colItems": "Предмети", - "colEnabled": "Омогућено", - "colActions": "Акције", - "colItemId": "ИД артикла", - "colItemName": "Назив ставке", - "colCostCredits": "Цена (кредити)", - "colCostPoints": "Цена (поени)", - "colLimited": "Ограничено", - "pageForm": { - "name": "Име", - "namePlaceholder": "Име странице", - "icon": "Икона ИД", - "iconPlaceholder": "ИД нумеричке иконе", - "order": "Ред", - "enabled": "Омогућено", - "parent": "Родитељска страница", - "parentNone": "Ништа (роот)", - "save": "Сачувај страницу", - "saving": "Чување…", - "cancel": "Откажи" - }, - "itemForm": { - "itemId": "ИД артикла", - "itemName": "Назив ставке", - "costCredits": "Цена у кредитима", - "costDuckets": "Цена у паткама", - "costDiamonds": "Цена у дијамантима", - "limitedStack": "Ограничена величина стека", - "limitedSold": "Ограничено продато", - "save": "Сачувај ставку", - "saving": "Чување…", - "cancel": "Откажи" - }, - "packages": { - "openPackages": "Catalog packages", - "title": "Catalog packages", - "description": "Prepare category and price changes in a separate draft. Review the catalog before publishing.", - "createPackage": "New package", - "createDraft": "Create draft", - "draftCreated": "Package draft created. The live catalog has not changed.", - "refresh": "Refresh list", - "searchPackages": "Search packages", - "noPackages": "No packages match this search.", - "choosePackage": "Open a package or create a draft from existing categories.", - "name": "Package name", - "mode": "Publication mode", - "update": "Update existing categories", - "copy": "Create copies", - "updateHint": "Publication applies the package to its existing categories and offers.", - "copyHint": "Publication creates new categories and offers under the selected parent. Furniture references are preserved.", - "sourceCategories": "Source categories", - "packageLimits": "Descendant categories are included. Each package supports up to 200 categories and 500 offers.", - "searchCategories": "Search categories", - "selectedCategories": "Selected: {count}", - "targetParent": "Destination parent category", - "rootCategory": "Catalog root", - "draft": "Draft", - "published": "Published", - "editDraft": "Edit draft", - "catalogPreview": "Catalog preview", - "showBaseline": "Show the original saved snapshot", - "changes": "Before and after", - "entry": "Entry", - "field": "Field", - "before": "Before", - "after": "After", - "noChanges": "No edited fields compared with the original snapshot.", - "copyReview": "The entire package will be copied on publication, even if no fields were edited. The table lists edits to the original snapshot.", - "updateReview": "These draft changes will update existing catalog entries after publication.", - "saveDraft": "Save draft", - "saveHint": "Saving keeps the package as a draft. Save all changes before requesting a publication review.", - "draftSaved": "Draft saved. Publication is a separate step.", - "reviewPublication": "Review publication", - "publicationImpact": "Publication affects {pages} categories and {offers} offers.", - "conflicts": "Publication is blocked by conflicts. Resolve them before requesting another review.", - "readyToPublish": "The saved version passed the publication check. Publishing changes the live catalog.", - "publish": "Publish package", - "confirmPublish": "Publish this reviewed package to the live catalog now?", - "publishedSuccess": "Package published: {pages} categories and {offers} offers.", - "staleReview": "This package changed in another session. Reopen it to review the latest saved version.", - "unsaved": "Unsaved changes", - "discardChanges": "Discard unsaved package changes and continue?", - "working": "Working…", - "requestFailed": "The request failed. Try again.", - "invalidFields": "Check required names, layouts and whole-number fields before saving.", - "category": "Category", - "caption": "Category caption", - "iconImage": "Category icon ID", - "minRank": "Minimum rank", - "orderNum": "Display order", - "pageLayout": "Page layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "offers": "Offers ({count})", - "offer": "Offer", - "catalogName": "Offer name", - "costCredits": "Credits", - "costPoints": "Points", - "pointsType": "Points currency ID", - "amount": "Amount", - "searchOffers": "Search offers", - "currentCategoryOffers": "Only the selected category", - "selectMatching": "Select all matching offers ({count})", - "clearSelection": "Clear selection", - "selectedOffers": "Selected offers: {count}", - "select": "Select", - "selectOffer": "Select offer #{id}", - "noOffers": "No offers match these filters.", - "bulkPrices": "Bulk draft prices ({count} selected)", - "bulkHint": "Preview the selected price changes, then accept them into this draft. The live catalog remains unchanged until publication.", - "operation": "Operation", - "set": "Set value", - "add": "Add or subtract", - "percent": "Adjust by percent", - "value": "Value", - "reviewBulk": "Preview prices", - "invalidBulk": "Choose valid numbers and at least one offer. Resulting prices must be nonnegative and within the supported range.", - "acceptBulk": "Accept prices into draft", - "previous": "Previous", - "next": "Next" - }, - "integrity": { - "title": "Catalog integrity", - "description": "Check references, category paths, identifiers and furniture icons. Scanning does not change records.", - "catalog": "Catalog", - "normal": "Normal catalog", - "bc": "Builders Club", - "refresh": "Scan again", - "working": "Checking…", - "failed": "The operation could not be completed. Try again.", - "stalePreview": "The catalog changed after the preview. Create a new preview before applying repairs.", - "applied": "{count} categories reattached to the catalog root.", - "iconsUnavailable": "The icon folder could not be read. Icon availability has not been verified.", - "healthy": "No issues found in the completed checks.", - "total": "{count} issues found. Showing {shown}.", - "open": "Open", - "reference": "Reference: {value}", - "repairHint": "Preview categories whose parent no longer exists. Applying moves only these categories to the root and preserves every record. Cycles, missing furniture, icons and identifier conflicts require individual review.", - "preview": "Preview safe repairs", - "planned": "{count} categories will be moved:", - "parentChange": "parent #{from} → catalog root", - "apply": "Apply previewed repairs", - "legacyTitle": "Advanced maintenance actions", - "legacyHint": "These existing maintenance tools can rewrite identifiers and merge or remove duplicate records. They are separate from the non-destructive integrity check and its previewed parent repair.", - "issues": { - "missing_furniture": "Offer references missing furniture", - "invalid_item_ids": "Invalid furniture identifiers", - "missing_page": "Offer references a missing category", - "unreachable_page": "Unreachable category", - "category_cycle": "Category path contains a cycle", - "missing_icon": "Missing furniture icon", - "invalid_offer_id": "Invalid offer identifier", - "duplicate_offer_id": "Repeated offer identifier" - } - }, - "bulk": { - "undo": "Undo", - "undoHint": "You can also restore individual offers from audit history.", - "undoSuccess": "Restored {count} offers." - } - }, - "shop": { - "title": "Схоп", - "subtitle": "Manage packages and orders", - "packages": "Пакети", - "orders": "Наређења", - "newPackage": "+ Нови пакет", - "edit": "Уреди", - "delete": "Избриши", - "viewOrder": "Виев", - "noPackages": "Још нема пакета за куповину", - "noOrders": "Још нема наруџби", - "confirmDelete": "Избрисати овај пакет?", - "colId": "ИД", - "colName": "Име", - "colPrice": "Цена", - "colCurrency": "Валута", - "colType": "Тип", - "colSold": "Продато", - "colEnabled": "Омогућено", - "colActions": "Акције", - "colOrderId": "ИД поруџбине", - "colCustomer": "Цустомер", - "colPackage": "Пакет", - "colAmount": "Износ", - "colStatus": "Статус", - "colDate": "Датум", - "statusPending": "На чекању", - "statusCompleted": "Завршено", - "statusRefunded": "Рефундирано", - "form": { - "name": "Име", - "namePlaceholder": "Назив пакета", - "description": "Опис", - "descriptionPlaceholder": "Опис пакета", - "price": "Цена", - "currency": "Валута", - "currencyPlaceholder": "ЕУР, УСД, ГБП…", - "type": "Тип", - "typeCredits": "Цредитс", - "typeDuckets": "Дуцкетс", - "typeDiamonds": "Дијаманти", - "typeBadge": "Значка", - "typeFurni": "Намештај", - "typeRank": "Ранг", - "amount": "Износ", - "badgeCode": "Шифра значке", - "badgeCodePlaceholder": "нпр. ВИП001", - "rankId": "Ранг ИД", - "furniItems": "Предмети намештаја", - "enabled": "Омогућено", - "save": "Сачувај пакет", - "saving": "Чување…", - "cancel": "Откажи" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Трансакције", - "subtitle": "ПаиПал дневник плаћања", - "noTransactions": "Још нема трансакција", - "colId": "ИД", - "colUser": "Корисник", - "colAmount": "Износ", - "colCurrency": "Валута", - "colPackage": "Пакет", - "colStatus": "Статус", - "colDate": "Датум", - "colActions": "Акције", - "statusCompleted": "Завршено", - "statusPending": "На чекању", - "statusFailed": "Није успело", - "statusRefunded": "Рефундирано", - "detail": { - "title": "Трансакција #{id}", - "paypalId": "ПаиПал ИД", - "payerEmail": "Е-маил платитеља", - "grossAmount": "Бруто износ", - "fee": "Накнада", - "netAmount": "Нето износ" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Ваучери за куповину", - "subtitle": "Manage redeemable voucher codes", - "newVoucher": "+ Нови ваучер", - "edit": "Уреди", - "delete": "Избриши", - "noVouchers": "Још нема ваучера", - "confirmDelete": "Избрисати ваучер „{code}“?", - "colId": "ИД", - "colCode": "Код", - "colValue": "Валуе", - "colType": "Тип", - "colUses": "Користи / Макс", - "colExpires": "Истиче", - "colCreated": "Цреатед", - "colActions": "Акције", - "form": { - "code": "Код", - "codePlaceholder": "нпр. ЛЕТО2025", - "value": "Валуе", - "type": "Тип", - "typeCredits": "Цредитс", - "typeDuckets": "Дуцкетс", - "typeDiamonds": "Дијаманти", - "typeBadge": "Значка", - "typeFurni": "Намештај", - "typeRank": "Ранг", - "badgeCode": "Шифра значке", - "badgeCodePlaceholder": "нпр. ВИП001", - "rankId": "Ранг ИД", - "maxUses": "Макс користи", - "maxUsesPlaceholder": "0 = неограничено", - "expiresAt": "Истиче у", - "enabled": "Омогућено", - "save": "Сачувај ваучер", - "saving": "Чување…", - "cancel": "Откажи", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Претплате", - "subtitle": "Active recurring subscriptions", - "noSubscriptions": "Нема активних претплата", - "cancel": "Откажи", - "confirmCancel": "Cancel subscription for {username}?", - "colId": "ИД", - "colUser": "Корисник", - "colPackage": "Пакет", - "colAmount": "Износ", - "colInterval": "Интервал", - "colStarted": "Почело", - "colNextBilling": "Следећи обрачун", - "colStatus": "Статус", - "colActions": "Акције", - "statusActive": "Ацтиве", - "statusCancelled": "Отказано", - "statusExpired": "Истекао" - }, - "rareValues": { - "title": "Раре Валуес", - "subtitle": "Manage rare value categories and item prices", - "categories": "Категорије", - "items": "Предмети", - "addCategory": "Додај категорију", - "editCategory": "Уреди категорију", - "deleteCategory": "Избриши категорију", - "noCategories": "No rare value categories yet", - "confirmDeleteCategory": "Delete category \"{name}\" and all its items?", - "colId": "ИД", - "colName": "Име", - "colItems": "Предмети", - "colUpdated": "Ажурирано", - "colActions": "Акције", - "colItemName": "Назив ставке", - "colCredits": "Цредитс", - "colPoints": "Поени", - "colPointType": "Тип тачке", - "categoryForm": { - "name": "Име", - "namePlaceholder": "Назив категорије", - "save": "Сачувај категорију", - "saving": "Чување…", - "cancel": "Откажи" - }, - "itemForm": { - "itemName": "Назив ставке", - "itemNamePlaceholder": "нпр. Тхроне", - "credits": "Вредност кредита", - "points": "Вредност поена", - "pointType": "Тип тачке", - "pointTypeDuckets": "Дуцкетс", - "pointTypeDiamonds": "Дијаманти", - "save": "Сачувај ставку", - "saving": "Чување…", - "cancel": "Откажи" - } - }, - "badges": { - "title": "Значке", - "subtitle": "Upload, give and manage badge catalogue", - "upload": "Уплоад", - "giveBadge": "Дајте значку", - "catalogue": "Каталог", - "uploadTitle": "Отпремите нову значку", - "uploadSubtitle": "Upload a badge image file", - "badgeCode": "Шифра значке", - "badgeCodePlaceholder": "нпр. ВИП001", - "badgeFile": "Фајл са значком", - "badgeFileHint": "PNG or GIF, recommended 40x40", - "uploadButton": "Уплоад", - "uploading": "Отпремање…", - "giveTitle": "Дајте беџ кориснику", - "giveSubtitle": "Grant a badge to a specific user", - "username": "Корисничко име", - "usernamePlaceholder": "Циљно корисничко име", - "giveButton": "Дајте значку", - "giving": "Давање…", - "catalogueTitle": "Каталог значка", - "catalogueSubtitle": "All available badges in the hotel", - "noBadges": "No badges in the catalogue", - "search": "Претражите значке", - "searchPlaceholder": "Search by code or name…", - "colCode": "Код", - "colImage": "Слика", - "colName": "Име", - "colDescription": "Опис", - "colActions": "Акције" - }, - "achievements": { - "title": "Достигнућа", - "subtitle": "Read-only list of in-game achievements", - "noAchievements": "No achievements configured", - "colId": "ИД", - "colName": "Име", - "colCategory": "Категорија", - "colLevels": "Нивои", - "colReward": "Награда", - "colProgress": "Напредак", - "levelLabel": "Ниво {level}", - "rewardCredits": "{count} кредита", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Календарске кампање", - "subtitle": "Read-only list of calendar campaigns and events", - "noCampaigns": "No calendar campaigns yet", - "colId": "ИД", - "colName": "Име", - "colStart": "Почни", - "colEnd": "Крај", - "colType": "Тип", - "colReward": "Награда", - "colActions": "Акције", - "detail": { - "title": "Кампања: {name}", - "subtitle": "Детаљи календарског догађаја", - "days": "Дани", - "dayLabel": "дан {day}", - "reward": "Награда", - "noDays": "Ниједан дан није конфигурисан за ову кампању" - } - }, - "radio": { - "title": "Радио Модерација", - "subtitle": "Најновији узвици, ДЈ апликације и распореди у етру (25 најновијих од сваког).", - "moderation": "Умереност", - "shouts": "узвици", - "applications": "Апликације", - "schedules": "Распореди", - "settings": "Подешавања", - "embed": "Ембед", - "ranks": "Чинови", - "history": "Историја", - "apiKeys": "АПИ кључеви", - "points": "Поени", - "autoDj": "АутоДЈ", - "monitoring": { - "title": "Радио Мониторинг", - "subtitle": "Проба уживо конфигурисаних радио крајњих тачака само за читање (радио_нов_плаиинг_апи_урл, радио_листенерс_апи_урл). Сваки захтев не успева са временским ограничењем од {timeout} — подаци се не уписују. Конфигуришите УРЛ-ове у оквиру Подешавања.", - "stream": "Стреам", - "online": "Онлине", - "offline": "Оффлине", - "notConfigured": "Није конфигурисано", - "nowPlaying": "Сада свирам", - "nowPlayingApi": "АПИ који се тренутно игра", - "listenersApi": "Листенерс АПИ", - "listeners": "Слушаоци", - "currentSong": "Тренутна песма", - "bitrate": "Битрате", - "status": "Статус", - "noNowPlayingHint": "нема скупа АПИ-ја који се тренутно репродукује", - "noListenersHint": "није постављен АПИ слушалаца", - "endpointDiagnostics": "Ендпоинт диагностицс", - "diagnosticsLegend": "OK: доступно · WARN: није подешено · ERROR: захтев није успео или је истекао.", - "streamUrl": "УРЛ стрима", - "unreachable": "недостижан", - "refresh": "Освежи" - }, - "user": "Корисник", - "message": "Порука", - "posted": "Објављено", - "realName": "Право име", - "age": "Старост", - "style": "Стиле", - "applied": "Примењено", - "day": "Дан", - "start": "Почни", - "end": "Крај", - "show": "Схов", - "status": "Статус", - "active": "активан", - "inactive": "неактиван", - "hidden": "скривено", - "activeSchedules": "Активни распореди", - "noShouts": "Нема вике за умерено", - "noApplications": "Није поднета ниједна пријава.", - "noSchedules": "Нема конфигурисаних распореда.", - "deleteShout": "Избриши", - "confirmDeleteShout": "Избрисати овај узвик?", - "pendingApplications": "Пријаве на чекању", - "settingsForm": { - "title": "Радио Сеттингс", - "subtitle": "Измене се уписују у вебсите_сеттингс (радио_* тастери) и разбијају кеш подешавања времена извршавања. Булови користе 0/1.", - "enabled": "Омогућено", - "disabled": "Онемогућено", - "totalKeys": "Укупно кључева", - "configured": "Конфигурисано", - "curatedHint": "курирани кључеви са вредношћу", - "customKeys": "Прилагођени кључеви", - "saveAll": "Сачувај све", - "singleKey": "Додајте/замените један кључ", - "keyPlaceholder": "радио_цустом_кеи", - "valuePlaceholder": "вредност", - "commentPlaceholder": "коментар (опционо)", - "saveSingle": "Сачувај", - "otherSettings": "Остала подешавања радија", - "dbError": "Није могуће учитати подешавања (база података није доступна). Подразумеване вредности ће бити креиране приликом чувања." - }, - "embedPage": { - "title": "Радио Ембед", - "subtitle": "Код за уградњу спреман за копирање за стрим уживо. Само за читање — ништа овде не пише у базу података. Конфигуришите УРЛ стрима у подешавањима радија (радио_стреам_урл).", - "streamUrl": "УРЛ стрима", - "configured": "Конфигурисано", - "missing": "Недостаје", - "radioName": "Име радија", - "nowPlayingApi": "АПИ који се тренутно игра", - "set": "Сет", - "notSet": "Није постављено", - "noStreamUrl": "УРЛ стрима није конфигурисан", - "noStreamUrlText": "Радио_стреам_урл није постављен, тако да још нема шта да се угради.", - "goToSettings": "Идите на Подешавања радија", - "livePreview": "Преглед уживо", - "livePreviewText": "Ово је голи audio плејер како ће га посетиоци видети. Притисните плаи да бисте потврдили да је стрим доступан.", - "source": "Извор", - "audioSnippet": "Исечак аудио плејера", - "audioSnippetDesc": "Улазни ХТМЛ5 аудио плејер усмерен право на ток. Ради свуда где је обичан ХТМЛ дозвољен.", - "iframeSnippet": "Исечак омота унутар оквира", - "iframeSnippetDesc": "Уграђује сопствену страницу радио плејера сајта у ифраме — чува ваш стил и информације које се сада репродукују. Подесите ширину/висину по укусу.", - "audioUnsupported": "Ваш претраживач не подржава аудио елемент." - }, - "banners": { - "title": "Баннери", - "heading": "Радио Баннери", - "description": "Промотивни банери приказани на радио страници, поређани по редоследу сортирања.", - "addBanner": "Додај банер", - "createBanner": "Креирајте банер", - "deleteBanner": "Избриши банер", - "noBanners": "Још нема банера — додајте један изнад.", - "existing": "Постојећи банери ({count})", - "save": "Сачувај", - "delete": "Избриши", - "byUser": "од корисника {id}", - "active": "активан", - "hidden": "скривено", - "bannerAlt": "Радио банер", - "statusActive": "Ацтиве", - "statusHidden": "Скривено", - "dbError": "Није могуће учитати банере (база података није доступна).", - "form": { - "imagePath": "Путања/УРЛ слике", - "imagePathPlaceholder": "/стораге/радио/баннер.пнг", - "title": "Наслов", - "description": "Опис", - "sortOrder": "Редослед сортирања", - "active": "Ацтиве" - } - }, - "ranksForm": { - "title": "Радио Ранкс", - "subtitle": "Ранг ДЈ-а/особља се може доделити на радио апликацијама.", - "dbError": "Није могуће учитати рангове (база података није доступна).", - "active": "Ацтиве", - "addRank": "Додајте ранг", - "name": "Име", - "badgeCode": "Шифра значке", - "description": "Опис", - "createRank": "Направите ранг", - "existing": "Постојећи рангови ({count})", - "noRanks": "Још нема рангова — додајте један изнад.", - "activeLabel": "активан", - "inactiveLabel": "неактиван", - "save": "Сачувај", - "deleteRank": "Избриши ранг #{id}" - }, - "historyPage": { - "title": "Радио Плаи Хистори", - "subtitle": "Прошле ДЈ емисије и време емитовања (радио_хистори), најновија прва. Дневник само за читање ко је био у етру, када и колико слушалаца се укључило.", - "dbError": "Није могуће учитати историју радија (база података није доступна).", - "showsLogged": "Емисије евидентиране", - "onAirNow": "Сада у етеру", - "uniqueDjs": "Јединствени ДЈ-еви", - "peakListeners": "Врхунски слушаоци", - "empty": "Још увек није забележена историја радија.", - "showLog": "Прикажи дневник ({count})", - "colDj": "ДЈ", - "colShow": "Схов", - "colStarted": "Почело", - "colEnded": "Завршено", - "colAirtime": "Време емитовања", - "colListeners": "Слушаоци", - "colNotes": "Напомене", - "onAir": "у ваздуху" - }, - "apiKeysForm": { - "title": "Радио АПИ кључеви", - "subtitle": "АПИ кључеви за спољне радио интеграције (радио_апи_кеис). Кључеви се генеришу на страни сервера и приказују маскирани — копирајте пуну вредност из базе података када се први пут издају.", - "dbError": "Није могуће учитати АПИ кључеве (база података није доступна).", - "totalKeys": "Укупно кључева", - "active": "Ацтиве", - "inactive": "Неактиван", - "generateKey": "Генеришите кључ", - "generateHint": "Тајни кључ се генерише аутоматски са криптографском насумичношћу — ви га не уносите.", - "name": "Име", - "namePlaceholder": "АзуреЦаст мост", - "rateLimit": "Ограничење брзине (захтеви/мин)", - "allowedIps": "Дозвољене ИП адресе (опционо)", - "allowedIpsPlaceholder": "одвојено зарезом, празно = било који", - "generate": "Генеришите кључ", - "existingKeys": "Постојећи кључеви ({count})", - "noKeys": "Још нема АПИ кључева — генеришите један изнад.", - "colName": "Име", - "colKey": "Кључ", - "colAllowedIps": "Дозвољене ИП адресе", - "colRateLimit": "Ограничење стопе", - "colLastUsed": "Последње коришћено", - "colExpires": "Истиче", - "colStatus": "Статус", - "colActions": "Акције", - "maskedHint": "Приказује се само првих 8 знакова", - "any": "било који", - "activeLabel": "активан", - "inactiveLabel": "неактиван", - "deactivate": "Деактивирај", - "activate": "Активирај", - "delete": "Избриши" - }, - "pointsForm": { - "title": "Поени радио слушалаца", - "subtitle": "Наградите слушаоце валутом за време проведено на радију. Измене се уписују у вебсите_сеттингс (тастери за радио_тачке_*) и разбијају кеш подешавања времена извршавања. Булови користе 0/1.", - "saved": "Сачувано", - "points": "Поени", - "enabled": "Омогућено", - "disabled": "Онемогућено", - "perMinute": "По минути", - "paidIn": "плаћено у {currency}", - "maxPerDay": "Макс / дан", - "unlimited": "Неограничено", - "minListeners": "Мин слушалаца", - "settings": "Подешавања", - "pointsEnabled": "Поени су омогућени", - "pointsEnabledHint": "Главни прекидач за доделу поена слушаоца.", - "currency": "Валута", - "currencyHint": "У који новчаник се уплаћују бодови.", - "pointsPerMinute": "Поена у минути", - "pointsPerMinuteHint": "Износ који се додељује за сваки пун минут слушања.", - "maxPerDayHint": "Дневно ограничење по кориснику. Користите 0 за неограничено.", - "minListenersHint": "Поени се додељују само када је укључено најмање оволико људи.", - "save": "Сачувајте подешавања поена" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Резервна листа за репродукцију (радио_ауто_дј_плаилист) радио ротира када ниједан ДЈ не емитује уживо. Поредано по редоследу сортирања, а затим наслову.", - "dbError": "Није могуће учитати АутоДЈ листу за репродукцију (база података није доступна).", - "tracks": "Стазе", - "active": "Ацтиве", - "inactive": "Неактиван", - "addTrack": "Додај нумеру", - "titlePlaceholder": "Наслов нумере", - "artist": "Уметник", - "album": "Албум", - "artworkUrl": "УРЛ уметничког дела", - "artworkUrlPlaceholder": "хттпс://…/цовер.пнг", - "duration": "Трајање (секунде)", - "durationPlaceholder": "нпр. 215", - "sortOrder": "Редослед сортирања", - "playlist": "Плејлиста ({count})", - "noTracks": "Још нема АутоДЈ нумера — додајте једну изнад.", - "colOrder": "Ред", - "colTitle": "Наслов", - "colArtist": "Уметник", - "colAlbum": "Албум", - "colDuration": "Трајање", - "colPlays": "Плаис", - "colLastPlayed": "Последње играно", - "colStatus": "Статус", - "colActions": "Акције", - "activeLabel": "активан", - "inactiveLabel": "неактиван", - "deactivate": "Деактивирај", - "activate": "Активирај", - "delete": "Избриши", - "trackTitle": "Наслов" - }, - "moderationPage": { - "title": "ДЈ Модератион", - "subtitle": "Прегледајте и уклоните радио повике (50 најновијих).", - "recentShouts": "Недавни узвици ({count})" - } - }, - "commandocentrum": { - "title": "Цоммандоцентрум", - "subtitle": "Дијагностика, РЦОН контроле и управљање корисницима", - "diagnostics": "Дијагностика", - "rcon": "РЦОН", - "userActions": "Радње корисника", - "diagnosticsTitle": "Дијагностика емулатора", - "memoryUsage": "Употреба меморије", - "uptime": "Уптиме", - "onlineUsers": "Онлине корисници", - "roomsLoaded": "Собе су напуњене", - "refresh": "Освежи", - "rconTitle": "РЦОН команде", - "rconPlaceholder": "Унесите РЦОН команду…", - "rconSend": "Пошаљи", - "rconSending": "Шаље се…", - "rconResponse": "Одговор", - "userActionsTitle": "Радње корисника", - "username": "Корисничко име", - "usernamePlaceholder": "Циљно корисничко име", - "action": "Акција", - "execute": "Извршити", - "actions": { - "disconnect": "Прекини везу", - "alert": "Пошаљи упозорење", - "giveCredits": "Дајте кредите", - "giveBadge": "Дајте значку", - "givePoints": "Дајте бодове", - "ban": "Бан", - "kick": "Кицк" - }, - "messagePlaceholder": "Порука (за упозорења)…", - "amountPlaceholder": "Износ…", - "badgePlaceholder": "Шифра значке…" - }, - "emulator": { - "title": "Емулатор Цонфиг", - "subtitle": "Прегледајте и уредите подешавања емулатора и текстове локализације", - "settings": "Подешавања", - "texts": "Текстови", - "search": "Тражи", - "searchPlaceholder": "Кључеви за претрагу…", - "noSettings": "Нису пронађена подешавања", - "noTexts": "Није пронађен ниједан текст", - "edit": "Уреди", - "save": "Сачувај", - "saving": "Чување…", - "cancel": "Откажи", - "colKey": "Кључ", - "colValue": "Валуе", - "colType": "Тип", - "colActions": "Акције", - "editDialog": { - "title": "Измени: {key}", - "value": "Валуе", - "valuePlaceholder": "Унесите вредност…", - "save": "Сачувај промене", - "cancel": "Откажи" - } - }, - "alerts": { - "title": "Алертс", - "subtitle": "Шаљите упозорења широм хотела и погледајте недавна упозорења", - "sendAlert": "Пошаљите хотелско обавештење", - "recentAlerts": "Недавна упозорења ({count})", - "noRecentAlerts": "Нема недавних упозорења", - "form": { - "title": "Наслов упозорења", - "titlePlaceholder": "нпр. Одржавање сервера за 10 минута", - "message": "Порука упозорења", - "messagePlaceholder": "Напишите поруку упозорења…", - "type": "Тип", - "typeHotel": "Упозорење за цео хотел", - "typeStaff": "Само особље", - "urgent": "Хитно", - "send": "Пошаљи упозорење", - "sending": "Шаље се…", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ИД", - "colTitle": "Наслов", - "colSentBy": "Послао", - "colType": "Тип", - "colDate": "Датум", - "colActions": "Акције", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Активности особља", - "subtitle": "Ревизорски траг радњи особља у админ панелу", - "noLogs": "Још увек није забележена ниједна активност особља", - "colId": "ИД", - "colUser": "Корисник", - "colAction": "Акција", - "colTarget": "Таргет", - "colDescription": "Опис", - "colIp": "ИП", - "colTimestamp": "Временска ознака", - "filterByUser": "Филтрирај по кориснику…", - "filterByAction": "Филтрирај по радњи…", - "clearFilters": "Обриши филтере", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Филтер речи", - "subtitle": "Управљајте филтрираним речима и фразама у хотелу", - "addWord": "Додајте реч", - "addWords": "Додајте речи", - "noWords": "Још нема филтрираних речи", - "confirmDelete": "Уклонити „{word}“ из филтера?", - "colId": "ИД", - "colWord": "Реч", - "colAddedBy": "Додао/ла", - "colCreated": "Цреатед", - "colActions": "Акције", - "form": { - "word": "Реч", - "wordPlaceholder": "нпр. бадворд", - "addMore": "Додајте више речи (по једну у сваки ред)", - "save": "Додајте у филтер", - "saving": "Чување…", - "cancel": "Откажи" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Режим одржавања", - "subtitle": "Омогућите или онемогућите одржавање у целом хотелу", - "enabled": "Режим одржавања је омогућен", - "disabled": "Режим одржавања је онемогућен", - "enable": "Омогући одржавање", - "disable": "Онемогућите одржавање", - "message": "Порука о одржавању", - "messagePlaceholder": "Вратићемо се ускоро!", - "staffAccess": "Омогућите приступ особљу током одржавања", - "save": "Сачувај подешавања", - "saving": "Чување…", - "confirmEnable": "Омогућавање одржавања ће спречити све кориснике који нису запослени да приступе хотелу. Наставити?", - "confirmDisable": "Онемогућити режим одржавања и вратити приступ свим корисницима?" - }, - "housekeeping": { - "title": "Дозволе за одржавање", - "subtitle": "Конфигуришите који рангови могу да приступе којим администраторским одељцима", - "addPermission": "Додајте дозволу", - "editPermission": "Дозволу за уређивање", - "deletePermission": "Избриши дозволу", - "noPermissions": "Нема конфигурисаних дозвола за одржавање", - "confirmDelete": "Желите ли да избришете ову дозволу?", - "colId": "ИД", - "colRank": "Ранг", - "colSection": "Секција", - "colActions": "Акције", - "form": { - "rankId": "Ранг ИД", - "rankIdPlaceholder": "Минимални чин", - "section": "Кључ одељка", - "sectionPlaceholder": "нпр. админ.дасхбоард", - "save": "Сачувај дозволу", - "saving": "Чување…", - "cancel": "Откажи" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset Примењено!", - "cleared": "All Дозволе cleared!", - "invalidRank": "Invalid Ранг", - "testDone": "Test done: {count} Дозволе found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Избриши ALL Дозволе? This Акција cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Дозвола", - "colDescription": "Опис", - "colMinRank": "Min. Ранг", - "permissionKey": "Кључ за дозволу", - "minRank": "Min. Ранг", - "description": "Опис", - "permissions": "Дозволе", - "permissionsCount": "{count} Дозволе", - "permission": "Дозвола", - "highestMinRank": "Highest min. Ранг: {rank}", - "totalMinRank": "Total min. Ранг sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Чинови", - "missingDeps": "{count} Недостаје dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Недостаје)", - "rank": "Ранг", - "count": "Count", - "searchPermission": "Тражи Дозволе…", - "search": "Тражи", - "manage": "Manage", - "importSelection": "Увоз selection", - "noGroup": "Бр group", - "allGroups": "All groups", - "perGroup": "Дозволе per group", - "perRank": "Дозволе per Ранг", - "rankOverviewHint": "All Дозволе grouped by the Ранг they are assigned to.", - "tabOverview": "Преглед", - "tabManage": "Manage", - "tabImport": "Увоз / Export", - "tabRanks": "Ранг Преглед", - "tabPresets": "Пресетс", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Увоз Дозволе", - "importHint": "Paste a JSON array of Дозвола objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Увоз", - "exportTitle": "Export Дозволе", - "exportHint": "Export all Дозволе as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Дозвола Пресетс", - "presetsHint": "Пријавите се a predefined Сет of Дозволе for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Умереност tools: Корисник lookup, Банс, CFH handling, chat Дневници.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Корисници, Собе, news, Подешавања, Схоп, events, Радио & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Дозвола management and asset Увоз.", - "applyPreset": "Пријавите се preset", - "clearAll": "Clear all Дозволе", - "testTitle": "Test Ранг access", - "testHint": "Enter a Ранг number to see which Дозволе would be granted.", - "test": "Test", - "auditTitle": "Дозвола audit log", - "auditHint": "All changes to Домаћинство Дозволе are logged.", - "auditLogsAt": "Audit Дневници are available on the Audit log page.", - "viewAuditLogs": "Виев audit Дневници", - "importedWithErrors": "Imported {count} Дозволе with {errors} errors", - "confirmClearAllDesc": "This will Уклони every Дозвола entry from the База података. Are you sure?", - "confirmDeletePermission": "Избриши this Дозвола permanently?", - "confirmBulkDelete": "Избриши {count} selected Дозволе?", - "deleteSelected": "Избриши {count} selected", - "cancel": "Откажи", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Корисник", - "auditAction": "Акција", - "auditTarget": "Таргет", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Собе", - "subtitle": "Претражујте хотелске собе и управљајте њима", - "search": "Тражи", - "searchPlaceholder": "Претражите по имену, власнику или ИД-у…", - "searchResults": "{count, plural, one {# room} other {# rooms}} пронађено за „{query}“", - "noResults": "Нема пронађених соба", - "colId": "ИД", - "colName": "Име", - "colOwner": "Власник", - "colUsers": "Корисници", - "colState": "Држава", - "colCategory": "Категорија", - "colCreated": "Цреатед", - "colActions": "Акције", - "stateOpen": "Отвори", - "stateClosed": "Затворено", - "stateLocked": "Закључано", - "stateInvisible": "Невидљиви", - "detail": { - "title": "Соба: {name}", - "subtitle": "Власник {owner}", - "overview": "Преглед", - "actions": "Акције", - "description": "Опис", - "noDescription": "Нема описа", - "owner": "Власник", - "users": "Корисници на мрежи", - "maxUsers": "Макс. корисника", - "category": "Категорија", - "state": "Држава", - "tags": "Ознаке", - "noTags": "Нема ознака", - "created": "Цреатед", - "deleteRoom": "Избриши собу", - "confirmDelete": "Избрисати собу „{name}“? Ово се не може поништити.", - "enterRoom": "Уђите у собу", - "changeOwner": "Промени власника", - "changeOwnerPlaceholder": "Ново корисничко име власника" - } - }, - "emailTemplates": { - "title": "Шаблони е-поште", - "subtitle": "Manage transactional email templates", - "newTemplate": "+ Нови шаблон", - "edit": "Уреди", - "delete": "Избриши", - "noTemplates": "Још нема шаблона е-поште", - "confirmDelete": "Delete template \"{name}\"?", - "colId": "ИД", - "colName": "Име", - "colSubject": "Предмет", - "colKey": "Кључ", - "colUpdated": "Ажурирано", - "colActions": "Акције", - "form": { - "name": "Име", - "namePlaceholder": "нпр. Е-маил добродошлице", - "key": "Кључ", - "keyPlaceholder": "нпр. велцоме_емаил", - "subject": "Предмет", - "subjectPlaceholder": "Наслов е-поште", - "body": "Тело (ХТМЛ)", - "bodyPlaceholder": "

Поштовани {username},

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

Поштовани {username},

", + "variables": "Доступне варијабле", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Сачувај шаблон", + "saving": "Чување…", + "cancel": "Откажи", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Тема", + "subtitle": "Customise the CMS appearance", + "presets": "Пресетс", + "colours": "Боје", + "css": "ЦСС", + "presetsTitle": "Унапред подешене теме", + "presetsSubtitle": "Choose a pre-built colour scheme", + "applyPreset": "Пријавите се", + "presetApplied": "Пресет је примењен: {preset}", + "customiseTitle": "Прилагођене боје", + "primary": "Примарни", + "secondary": "Секундарни", + "accent": "Аццент", + "background": "Позадина", + "surface": "Површина", + "text": "Текст", + "saveColours": "Сачувајте боје", + "savingColours": "Чување…", + "cssTitle": "Прилагођени ЦСС", + "cssSubtitle": "Add custom CSS to override theme styles", + "cssPlaceholder": "/* Your custom CSS here */", + "saveCss": "Сачувај ЦСС", + "savingCss": "Чување…", + "reset": "Ресетујте на подразумеване вредности", + "confirmReset": "Reset theme to default values?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Медиа Либрари", + "subtitle": "Upload and manage media files", + "upload": "Уплоад", + "uploadTitle": "Отпремите датотеку", + "uploadSubtitle": "Drag and drop or click to upload", + "uploadButton": "Изаберите датотеку", + "uploading": "Отпремање…", + "noFiles": "Још нема медијских датотека", + "delete": "Избриши", + "confirmDelete": "Delete this file permanently?", + "search": "Тражи", + "searchPlaceholder": "Претражи по имену датотеке…", + "colPreview": "Преглед", + "colName": "Име", + "colSize": "Величина", + "colType": "Тип", + "colUploaded": "Отпремљено", + "colActions": "Акције", + "copyUrl": "Копирај УРЛ", + "urlCopied": "УРЛ је копиран у међуспремник" + }, + "favicon": { + "title": "Фавицон", + "subtitle": "Upload and manage the site favicon", + "current": "Тренутни фавицон", + "uploadLabel": "Уплоад фавицон", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO or SVG. Мак 2МБ.", + "upload": "Уплоад", + "uploading": "Отпремање…", + "delete": "Уклони", + "deleting": "Уклањање…", + "saved": "Favicon saved successfully!", + "deleted": "Favicon removed successfully!", + "error": "Нешто је пошло по злу", + "confirmDelete": "Уклоните фавицон? The site will no longer show a custom favicon.", + "generator": { + "title": "Генериши фавицон", + "text": "Текст", + "bgColor": "Боја позадине", + "textColor": "Боја текста", + "rounded": "Заобљени углови", + "save": "Сачувај као фавицон" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "ЦМС подешавања", + "subtitle": "Управљајте ЦМС конфигурацијом кључ/вредност", + "addSetting": "Додајте подешавање", + "edit": "Уреди", + "delete": "Избриши", + "noSettings": "Нису пронађена подешавања", + "confirmDelete": "Желите ли да избришете подешавање „{key}“?", + "colKey": "Кључ", + "colValue": "Валуе", + "colUpdated": "Ажурирано", + "colActions": "Акције", + "form": { + "key": "Кључ", + "keyPlaceholder": "нпр. хотел_наме", + "value": "Валуе", + "valuePlaceholder": "Подешавање вредности", + "save": "Сачувај подешавање", + "saving": "Чување…", + "cancel": "Откажи" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Почетна", + "reload": "Освежи", + "fullscreen": "Цео екран", + "logout": "Одјава", + "onlineUsers": "Корисници на мрежи", + "emulatorOnline": "Емулатор онлајн", + "emulatorOffline": "Емулатор офлајн", + "dragToMove": "Превуците да померите", + "hide": "Сакриј траку", + "fullscreenExit": "Изађи из целог екрана", + "show": "Прикажи траку", + "emulatorUnknown": "Статус емулатора непознат" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Дијагностика датотека", + "preliminary": "Прелиминарна провера адреса; садржај се проверава при увозу.", + "http": "HTTP {status}", + "network": "Повезивање није успело", + "timeout": "Извор није одговорио на време", + "invalidResponse": "Извор је вратио веб-страницу уместо датотеке", + "available": "Датотека пронађена; чека проверу", + "recover": "Приложи оригинал и настави", + "recoveryHint": "Изаберите {file} (до 50 MB). Проверава се идентитет. Понављају се неуспеле ставке; завршени увози се чувају.", + "attach": "Изаберите изворну .nitro датотеку", + "working": "Провера или наставак...", + "attached": "Одговарајућа датотека је приложена", + "resume": "Настави неуспеле увозе са датотеком", + "invalidFile": "Изаберите одговарајућу изворну .nitro датотеку до 50 MB и покушајте поново.", + "resumeError": "Освежите историју и користите последњи покушај; проверите датотеку и покушајте поново.", + "mismatchedFile": "Ова датотека припада другом комаду намештаја.", + "alreadyStarted": "Опоравак је већ покренут. Освежите историју и користите последњи покушај.", + "notEligible": "Ова ставка не подржава опоравак прилогом." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/sv.json b/src/messages/sv.json index f347cc9a..11e65c36 100644 --- a/src/messages/sv.json +++ b/src/messages/sv.json @@ -1,3918 +1,4913 @@ { - "draftRecovery": { - "ready": "En återställningskopia sparas i den här webbläsaren i 7 dagar.", - "saved": "En återställningskopia har sparats i den här webbläsaren i 7 dagar.", - "unavailable": "Återställning i webbläsaren är inte tillgänglig. Låt sidan vara öppen tills dina ändringar har sparats.", - "found": "En återställningskopia finns i den här webbläsaren, sparad", - "restore": "Återställ webbläsarkopia", - "discard": "Ta bort webbläsarkopia", - "confirmRestore": "Ersätta det aktuella formuläret med webbläsarens återställningskopia? Kontrollera innehållet innan du sparar.", - "confirmDiscard": "Ta bort den här återställningskopian från webbläsaren? Det aktuella formuläret förblir oförändrat." - }, - "nav": { - "home": "Hem", - "community": "gemenskapen", - "articles": "Artiklar", - "photos": "Foton", - "staff": "Personal", - "rankings": "Ranking", - "guilds": "Skrån", - "leaderboards": "Topplistor", - "rareValues": "Sällsynta värden", - "shop": "Handla", - "market": "Marknad", - "assistance": "Assistans", - "helpCenter": "Hjälpcenter", - "myTickets": "Mina biljetter", - "badges": "Märken", - "radio": "Radio", - "friends": "Vänner", - "messages": "Meddelanden", - "admin": "Admin", - "openMenu": "Öppna menyn", - "closeMenu": "Stäng menyn", - "drawBadge": "Rita märke", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} online", - "nitroClient": "Nitro klient", - "tagline": "En virtuell värld online där du kan skapa din egen avatar, få vänner, chatta, skapa rum och mycket mer!", - "login": "Logga in", - "or": "Eller", - "createAccount": "Skapa ett konto" - }, - "footer": { - "copyright": "© {year} - {hotel} är ett utbildningsprojekt utan vinstsyfte" - }, - "pages": { - "staff": { - "title": "Personal", - "subtitle": "Teamet bakom hotellet", - "ranksTitle": "Rank", - "ranksSubtitle": "Vad varje del av laget tar hand om", - "membersTitle": "Teammedlemmar", - "membersEmptySubtitle": "Ingen att visa just nu", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "Ingen personal att visa.", - "colUsername": "Användarnamn", - "colRank": "Rank", - "colMotto": "Motto" - }, - "leaderboard": { - "title": "Leaderboard", - "subtitle": "Topp 20 spelare efter {currency}", - "tab_credits": "Krediter", - "tab_diamonds": "Diamanter", - "tab_duckets": "Ankor", - "tab_achievement": "Prestationer", - "tab_respects": "Respekter", - "tab_onlinetime": "Onlinetid", - "emptyState": "Ingen ranking att visa ännu.", - "colAvatar": "Avatar", - "colPlayer": "Spelare" - }, - "friends": { - "title": "Vänner", - "emptySubtitle": "Du har inga vänner lagt till än", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Lägg till vänner på hotellet så dyker de upp här.", - "noMotto": "Inget 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": "Meddelanden", - "subtitle": "Vänförfrågningar och offlinemeddelanden väntar på dig", - "requestsTitle": "Vänförfrågningar", - "requestsEmptySubtitle": "Ingen har bett om att bli din vän än", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "Inga väntande vänförfrågningar.", - "wantsToBeFriend": "vill vara din vän.", - "accept": "Acceptera", - "offlineTitle": "Offlinemeddelanden", - "offlineEmptySubtitle": "Din inkorg är tom", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "Du har inga offlinemeddelanden.", - "unknownUser": "Användare #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Inget motto", - "statRank": "Rank", - "statCredits": "Krediter", - "statRegistered": "Registrerad", - "badgesTitle": "Märken", - "badgesEmpty": "Inga märken än.", - "photosTitle": "Foton", - "photosEmpty": "Inga foton än.", - "guestbookTitle": "Gästbok", - "guestbookSubtitle": "Meddelanden på {username}s vägg", - "leaveMessage": "Lämna ett meddelande", - "guestbookPlaceholder": "Skriv något i {username}s gästbok...", - "post": "Posta", - "loginToPost": "Logga in för att lämna ett gästboksmeddelande.", - "guestbookEmpty": "Inga gästboksinlägg ännu.", - "unknownUser": "Användare #{id}", - "statDuckets": "Ankor", - "statDiamonds": "Diamanter", - "walletTitle": "Plånbok", - "friendsTitle": "Vänner", - "friendsSubtitle": "Folk på hotellet de umgås med", - "friendsEmpty": "Inga vänner att visa.", - "roomsTitle": "Rum", - "roomsSubtitle": "Rum de äger", - "roomsEmpty": "Inga rum att visa.", - "roomUntitled": "Namnlöst rum", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Ranking", - "subtitle": "De 12 bästa spelarna rankade efter poäng", - "emptyState": "Inga spelare att ranka än." - }, - "home": { - "welcome": "Välkommen till {hotelName}", - "welcomeSubtitle": "Ditt retrohotell, nu drivs av Next.js", - "welcomeBody": "Umgås, samla möbler och träffa vänner.", - "enterHotel": "Ange {hotelName}", - "onlineFriends": "Vänner online", - "noFriendsOnline": "Inga vänner online", - "register": "REGISTRERA DIG NU", - "joinNow": "Gå med i {hotelName} idag!", - "recentUsers": "Senaste användare", - "recentPhotos": "Senaste foton", - "latestNews": "Senaste nyheterna", - "newsTitle": "Senaste nyheterna", - "newsSubtitle": "Färskt från hotellet", - "allNews": "Alla nyheter →", - "allUsers": "Community →", - "noArticles": "Inga artiklar ännu.", - "noPhotos": "Inga foton än.", - "noUsers": "Inga användare online", - "latestArticle": "Senaste artikeln", - "latestUsers": "Nyaste medborgarna ({count} totalt)", - "statsOnline": "Online", - "statsCitizens": "Medborgare", - "statsRooms": "Rum", - "statsArticles": "Artiklar", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Skapa din unika look", - "featuresFurniture": "Möbler", - "featuresFurnitureDesc": "Dekorera rum med föremål", - "featuresCommunity": "Gemenskap", - "featuresCommunityDesc": "Skapa vänner och chatta", - "featuresGames": "Spel", - "featuresGamesDesc": "Tävla och ha kul" - }, - "news": { - "title": "Nyheter", - "subtitle": "De senaste tillkännagivandena, händelserna och uppdateringarna från hotellet", - "noArticles": "Inga artiklar ännu." - }, - "article": { - "backToNews": "← Nyheter", - "reactionsTitle": "Reaktioner", - "reactionsSubtitle": "Berätta vad du tycker", - "reaction": { - "like": "Gillar", - "love": "Kärlek", - "wow": "Wow" - }, - "removeReaction": "Klicka för att ta bort din reaktion", - "reactWith": "Reagera med {reaction}", - "noReactions": "Inga reaktioner än.", - "logIn": "Logga in", - "toReact": "att reagera.", - "commentsTitle": "Kommentarer", - "commentsSubtitle": "Gå med i konversationen", - "commentsCount": "{count} hittills", - "noComments": "Inga kommentarer än. Var den första att kommentera.", - "userNumber": "Användare #{id}", - "addComment": "Lägg till en kommentar", - "commentPlaceholder": "Skriv din kommentar...", - "postComment": "Skriv kommentar", - "toComment": "för att lämna en kommentar.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Foton", - "subtitle": "De senaste ögonblicksbilderna tagna på hotellet", - "noPhotos": "Inga foton än.", - "photoAlt": "Foto av användare #{id}", - "byUser": "av användare #{id}" - }, - "badges": { - "title": "Märken", - "subtitle": "Märkena kan du tjäna och visa upp runt hotellet", - "noBadges": "Inga märken tillgängliga ännu." - }, - "community": { - "title": "gemenskapen", - "subtitle": "Allt som händer runt hotellet på ett ställe", - "open": "Öppna →", - "links": { - "rankings": { - "title": "Ranking", - "text": "Se de rikaste spelarna på hotellet, rankade efter poäng." - }, - "staff": { - "title": "Personal", - "text": "Möt teamet som håller hotellet igång varje dag." - }, - "news": { - "title": "Nyheter", - "text": "De senaste tillkännagivandena, händelserna och uppdateringarna." - }, - "photos": { - "title": "Foton", - "text": "Ögonblicksbilder som delas av samhället från hela hotellet." - }, - "guilds": { - "title": "Skrån", - "text": "Bläddra bland grupperna som spelare har skapat och gått med i." - }, - "leaderboards": { - "title": "Topplistor", - "text": "Vem är på topp den här säsongen över hotellets statistik." - } - } - }, - "guilds": { - "title": "Skrån", - "subtitle": "Bläddra bland grupperna som spelare har skapat och gått med i", - "empty": "Inga guilds än.", - "unnamedGuild": "Namnlösa skrået", - "noDescription": "Ingen beskrivning" - }, - "guild": { - "allGuilds": "← Alla skrån", - "unnamedGuild": "Namnlösa skrået", - "noDescription": "Ingen beskrivning", - "memberSingular": "Medlem", - "memberPlural": "Medlemmar", - "founded": "Grundades", - "forumLink": "Forum →", - "discussion": "Diskussion", - "membersTitle": "Medlemmar", - "memberLowerSingular": "medlem", - "memberLowerPlural": "medlemmar", - "noMembers": "Inga medlemmar.", - "owner": "Ägare", - "noMotto": "Inget motto" - }, - "guildForum": { - "backToGuild": "← Tillbaka till guild", - "unnamedGuild": "Namnlösa skrået", - "forumTitle": "{guild} – Forum", - "threadSingular": "tråd", - "threadPlural": "trådar", - "newThread": "+ Ny tråd", - "empty": "Inga trådar i detta forum ännu.", - "colSubject": "Ämne", - "colAuthor": "Författare", - "colPosts": "Inlägg", - "colDate": "Datum", - "noSubject": "(inget ämne)", - "pinned": "Fäst", - "locked": "Låst", - "userNumber": "Användare #{id}", - "unknown": "Okänd", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Tillbaka till forumet", - "unnamedGuild": "Namnlösa skrået", - "title": "Ny tråd", - "subtitle": "i {guild}-forumet", - "subjectLabel": "Ämne", - "subjectPlaceholder": "Trådämne", - "messageLabel": "Meddelande", - "messagePlaceholder": "Skriv ditt inledande inlägg...", - "postThread": "Inlägg tråd", - "cancel": "Avbryt", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Handla", - "subtitle": "Fyll på ditt konto och få exklusiva paket, valuta och märken.", - "browsingCategory": "Bläddra i {category}-paketen.", - "all": "Alla", - "allPackages": "Alla paket", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "Inga paket tillgängliga just nu.", - "buy": "Köp", - "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": "Fyll på med PayPal", - "subtitle": "Betala säkert med PayPal och dina krediter läggs till när betalningen går igenom.", - "cancelled": "Utcheckningen avbröts – ingen betalning togs.", - "chooseAmount": "Välj ett belopp", - "notConfiguredPre": "PayPal är inte konfigurerat än. En administratör måste ställa in", - "notConfiguredAnd": "och", - "notConfiguredOptional": "(och valfritt", - "notConfiguredPost": "för sandlåda vs. live).", - "balanceTitle": "Ditt saldo", - "signedInAs": "Inloggad som {username}", - "credits": "Krediter", - "creditsPerUnit": "Krediter per 1,00 {currency}", - "rateLine": "Du får {amount} krediter per 1,00 {currency}. Krediter visas i spelet nästa gång du loggar in." - }, - "marketplace": { - "title": "Marknadsplats", - "subtitle": "Bläddra bland möbler och sällsynta möbler listade av spelare. Listor placeras i spelet och uppdateras live - gå in på hotellet för att lägga ett erbjudande.", - "activeOffers": "Aktiva erbjudanden", - "sellers": "Säljare", - "totalValue": "Totalt värde", - "activeListings": "Aktiva listor", - "mostRecentFirst": "Senast listad först", - "empty": "Det finns inga aktiva marknadsplatserbjudanden just nu. Kom tillbaka senare.", - "colOffer": "Erbjudande", - "colItem": "Objekt", - "colSeller": "Säljare", - "colPrice": "Pris", - "colListed": "Angivna", - "itemLabel": "Artikel #{id}", - "userLabel": "Användare #{id}", - "justNow": "just nu", - "minutesAgo": "{count} m sedan", - "hoursAgo": "{count} h sedan", - "daysAgo": "{count}d sedan" - }, - "rares": { - "title": "Sällsynta värden", - "subtitle": "Få en överblick över alla sällsynta på hotellet, grupperade efter kategori.", - "empty": "Vi har för närvarande inga sällsynta listade här.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Visa sällsynta →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Alla sällsynta", - "empty": "Inga sällsynta i denna kategori ännu.", - "colRare": "Sällsynt", - "colCredits": "Krediter", - "colCurrency": "Valuta", - "creditsValue": "{value} krediter", - "duckets": "Ankor", - "diamonds": "Diamanter", - "credits": "Krediter" - }, - "redeem": { - "title": "Lös in en kupong", - "subtitle": "Har du en kupongkod? Ange den nedan för att lägga till belöningen på ditt konto.", - "enterCode": "Ange din kod", - "oncePerAccount": "Varje kupong kan endast lösas in en gång per konto.", - "balanceTitle": "Ditt saldo", - "signedInAs": "Inloggad som {username}", - "credits": "Krediter", - "instantCredit": "Inlösta belöningar krediteras omedelbart och visas i spelet nästa gång du loggar in." - }, - "help": { - "title": "Hjälpcenter", - "subtitle": "Hitta guider, supportämnen och hotellreglerna – allt du behöver för att få hjälp.", - "myTickets": "Mina biljetter →", - "topicsTitle": "Supportämnen", - "topicsSubtitle": "Bläddra i guider och svar på vanliga frågor", - "topicsEmpty": "Inga hjälpämnen än.", - "rulesTitle": "Hotellregler", - "rulesSubtitle": "Läs dessa innan du hänger på hotellet", - "rulesEmpty": "Inga regler publicerade ännu.", - "categoryEmpty": "Inga regler i denna kategori." - }, - "helpCategory": { - "back": "← Hjälpcenter", - "topicSubtitle": "Hjälpcenter ämne", - "moreTitle": "Fler hjälpämnen", - "moreSubtitle": "Hoppa till ett annat supportämne" - }, - "helpTickets": { - "title": "Hjälpbiljetter", - "subtitle": "Skicka in en biljett till personalen och spåra dina öppna förfrågningar.", - "statTotal": "Totalt antal biljetter", - "statOpen": "Öppna", - "statClosed": "Stängt", - "newTitle": "Ny biljett", - "newSubtitle": "Beskriv ditt problem så följer personalen upp", - "subjectPlaceholder": "Ämne", - "contentPlaceholder": "Beskriv ditt problem...", - "submit": "Skicka in biljett", - "listTitle": "Dina biljetter", - "listSubtitle": "Varje förfrågan du har skickat till personalen", - "listEmpty": "Du har inga biljetter ännu.", - "colId": "ID", - "colSubject": "Ämne", - "colStatus": "Status", - "colCreated": "Skapad", - "statusOpen": "Öppna", - "statusClosed": "Stängt", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "Ansök om {hotel} personal", - "subtitle": "Vi öppnar personalansökningar då och då. Om du stöter på en tjänst som du känner att du skulle passa perfekt i, tveka inte att söka den.", - "noPositionsTitle": "Inga lediga positioner", - "noPositionsBody": "Det finns för närvarande inga lediga tjänster. Kom gärna tillbaka vid ett senare tillfälle för att kolla om vi har några lediga tider då. Tack för ditt intresse.", - "noDeadline": "Ingen deadline satt", - "deadline": "Sista ansökningsdag: {date}", - "alreadyApplied": "Du har redan ansökt om {rank}", - "aboutYou": "Om dig", - "aboutPlaceholder": "Berätta för oss varför du skulle vara en stor {rank}...", - "applyFor": "Ansök om {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": "Ansök till {hotel}-teamet", - "subtitle": "Vi öppnar teamansökningar med jämna mellanrum. Om du ser ett lag du passar, tveka inte att söka!", - "noPositionsTitle": "Inga lagpositioner öppna", - "noPositionsBody": "Det finns för närvarande inga öppna lagpositioner. Vänligen kom tillbaka senare för att se efter nya öppningar. Tack!", - "pending": "Din ansökan väntar", - "aboutYou": "Om dig", - "aboutPlaceholder": "Berätta för oss varför du skulle passa bra för {rank}...", - "applyFor": "Ansök om {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": "Lyssna på hotellets radio — live DJ-set, förfrågningar och shoutouts.", - "nowPlaying": "Spelar nu", - "nothingPlaying": "Ingenting spelar just nu.", - "onAir": "På luft: {dj}", - "noDj": "Ingen DJ i luften.", - "audioUnsupported": "Din webbläsare stöder inte ljudelementet.", - "streamOffline": "Streamen är för närvarande offline.", - "exploreTitle": "Utforska radion", - "exploreSubtitle": "Schemalägg, rop, förfrågningar och mer", - "linkSchedule": "Schema", - "linkScheduleText": "Vår veckovisa line-up av DJ:s och shower.", - "linkShouts": "Ropar", - "linkShoutsText": "Shout-outs och förfrågningar från samhället.", - "linkRequests": "Förfrågningar", - "linkRequestsText": "Be DJ:n att snurra din favoritlåt.", - "linkApply": "Ansök som DJ", - "linkApplyText": "Gå med i laget och ta dig till etern.", - "linkLeaderboard": "Leaderboard", - "linkLeaderboardText": "Topplyssnare rankade efter intjänade poäng.", - "todayTitle": "Dagens schema", - "todayTitleWithDay": "Dagens schema · {day}", - "todaySubtitle": "Vad är på etern idag", - "fullWeek": "Hel vecka →", - "noShowsToday": "Inga spelningar planerade idag.", - "colTime": "Tid", - "colShow": "Visa", - "colDj": "DJ", - "untitledShow": "Namnlös show", - "userNumber": "Användare #{id}" - }, - "radioSchedule": { - "title": "Radioschema", - "subtitle": "Vår veckovisa line-up av DJ:s och shower", - "empty": "Inga spelningar planerade än.", - "colDay": "dag", - "colTime": "Tid", - "colDj": "DJ", - "colShow": "Visa", - "noShows": "Inga shower" - }, - "radioShouts": { - "title": "Radio ropar", - "subtitle": "Shout-outs och förfrågningar från samhället", - "postTitle": "Lägg upp ett rop", - "postSubtitle": "Skicka ett meddelande till DJ på luften", - "messageLabel": "Ditt meddelande", - "messagePlaceholder": "Skicka ett rop till DJ:n...", - "shoutButton": "Ropa", - "loginToPost": "Logga in för att skicka ett rop.", - "latestTitle": "Senaste ropen", - "latestSubtitle": "De senaste meddelandena från lyssnare", - "empty": "Inga rop än. Bli först!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Radiotävlingar", - "subtitle": "Lyssna in och delta i våra senaste on-air-tävlingar", - "empty": "Inga tävlingar än.", - "contestLabel": "Tävling #{id}", - "dateUnknown": "Datum okänt" - }, - "radioGiveaways": { - "title": "Radio Giveaways", - "subtitle": "Lyssna in för din chans att vinna i våra radiopresenter", - "empty": "Inga giveaways än.", - "giveawayLabel": "Giveaway #{id}", - "dateUnknown": "Datum okänt" - }, - "radioLeaderboard": { - "title": "Leaderboard för radiolyssnare", - "subtitle": "De 50 bästa lyssnarna efter intjänade poäng när de lyssnar på radion", - "empty": "Inga lyssnarpoäng att visa än.", - "colRank": "Rank", - "colAvatar": "Avatar", - "colListener": "Lyssnare", - "colPoints": "Poäng" - }, - "radioRequests": { - "formTitle": "Skicka in en begäran", - "formSubtitle": "Be DJ:n spela din favoritlåt", - "songLabel": "Sång", - "songPlaceholder": "Titeln på låten", - "artistLabel": "Konstnär", - "artistPlaceholder": "Konstnärens namn (valfritt)", - "submitButton": "Skicka in begäran", - "loginToRequest": "Logga in för att skicka en begäran.", - "latestTitle": "Senaste förfrågningar", - "latestSubtitle": "De senast efterfrågade låtarna", - "empty": "Inga förfrågningar ännu.", - "colSong": "Sång", - "colArtist": "Konstnär", - "colRequester": "Beställare", - "colDate": "Datum", - "colStatus": "Status", - "statusPending": "Väntar", - "statusApproved": "Godkänd", - "statusPlayed": "Spelade", - "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": "Ansök om att bli Radio DJ", - "subtitle": "Berätta om dig själv och varför du skulle passa bra i etern", - "latestTitle": "Din senaste ansökan", - "statusLabel": "Status:", - "submittedOn": "· skickade in {date}", - "submitAgain": "Du kan skicka in igen nedan om dina uppgifter har ändrats.", - "formTitle": "Ansökningsblankett", - "formSubtitle": "Alla fält markerade som obligatoriska måste fyllas i", - "realNameLabel": "Riktigt namn", - "realNamePlaceholder": "Ditt fullständiga namn", - "ageLabel": "Ålder", - "availabilityLabel": "Tillgänglighet", - "availabilityPlaceholder": "Vilka dagar och tider kan du sända?", - "musicStyleLabel": "Musikstil", - "musicStylePlaceholder": "t.ex. House, Pop, Hip-Hop", - "experienceLabel": "Erfarenhet", - "optional": "(valfritt)", - "experiencePlaceholder": "Någon tidigare erfarenhet av DJ eller hosting?", - "motivationLabel": "Motivation", - "motivationPlaceholder": "Varför vill du gå med i radioteamet?", - "submitButton": "Skicka in ansökan", - "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": "Kontoinställningar", - "accountSettingsSubtitle": "Hantera din profil, säkerhet och anslutna konton", - "publicProfile": "Din offentliga profil", - "noMotto": "Inget motto", - "noEmail": "Ingen e-post i filen", - "changeMotto": "Byt motto", - "changeMottoSubtitle": "Uppdateras direkt i spelet om du är online", - "mottoPlaceholder": "Ditt motto", - "saveMotto": "Spara motto", - "securityTitle": "Säkerhet", - "securitySubtitle": "Tvåfaktorsautentisering", - "securityDescription": "Lägg till ett andra lager av skydd till ditt konto.", - "twoFactorLink": "Tvåfaktorsautentisering" - }, - "settings2fa": { - "backToSettings": "← Inställningar", - "title": "Tvåfaktorsautentisering", - "subtitle": "Lägg till ett andra lager av säkerhet med en autentiseringsapp", - "nowEnabled": "2FA är nu aktiverat. 🔒", - "disabledNotice": "2FA har inaktiverats.", - "badCode": "Den koden var inte giltig – försök igen.", - "noAppKeyPrefix": "2FA är inte tillgänglig tills", - "noAppKeyMiddle": "är konfigurerad (samma Laravel", - "noAppKeySuffix": "när din AtomCMS installerar, så att befintliga hemligheter förblir läsbara).", - "isEnabled": "2FA är aktiverat", - "onYourAccount": "på ditt konto.", - "disable": "Inaktivera 2FA", - "scanOrEnter": "Skanna eller ange denna nyckel", - "scanInstructions": "Lägg till detta i Google Authenticator / Authy och ange sedan den sexsiffriga koden för att bekräfta.", - "manualKey": "Manuell nyckel:", - "codePlaceholder": "6-siffrig kod", - "confirm": "Bekräfta", - "enableIntro": "Lägg till ett andra lager av säkerhet med en autentiseringsapp.", - "enable": "Aktivera 2FA" - }, - "title": "Anslutna konton", - "subtitle": "Länka ett socialt konto så att du kan logga in med ett klick", - "connected": "Ansluten", - "unavailable": "Ej tillgänglig", - "login": { - "title": "Logga in", - "subtitle": "Välkommen tillbaka — logga in för att komma in på hotellet.", - "subtitle2fa": "Ange den 6-siffriga koden från din autentiseringsenhet.", - "usernamePlaceholder": "Användarnamn", - "passwordPlaceholder": "Lösenord", - "codePlaceholder": "2FA-kod", - "pleaseWait": "Vänligen vänta...", - "verify": "Verifiera", - "signIn": "Logga in", - "or": "eller", - "noAccount": "Inget konto?", - "createOne": "Skapa en", - "forgotPassword": "Glömt lösenordet?", - "errorInvalidCredentials": "Ogiltigt användarnamn eller lösenord", - "errorInvalid2fa": "Ogiltig 2FA-kod", - "welcomeBack": "Välkommen tillbaka", - "welcomeBackSub": "Logga in för att fortsätta till {hotelName}", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Skapa konto", - "subtitle": "Gå med på hotellet — det tar bara ett ögonblick.", - "username": "Användarnamn", - "email": "E-post", - "password": "Lösenord", - "confirmPassword": "Upprepa lösenordet", - "usernamePlaceholder": "Användarnamn", - "emailPlaceholder": "E-post", - "passwordPlaceholder": "Lösenord (minst 6 tecken)", - "confirmPasswordPlaceholder": "Upprepa lösenordet", - "selectOutfit": "Välj din outfit", - "termsAccept": "Jag är 18+ och accepterar villkoren och reglerna för {hotel}.", - "createAccount": "Skapa konto", - "creatingAccount": "Skapar konto...", - "redirecting": "Vidare till ditt konto...", - "alreadyHaveAccount": "Har du redan ett konto? Inloggning!", - "register": "Registrera dig", - "termsError": "Du måste acceptera villkoren och reglerna för att registrera dig.", - "usernameError": "Användarnamn krävs.", - "emailError": "Giltig e-postadress krävs.", - "passwordError": "Lösenordet måste bestå av minst 6 tecken.", - "confirmPasswordError": "Lösenord stämmer inte överens.", - "termsRequired": "Du måste acceptera villkoren och reglerna.", - "usernameRequired": "Användarnamn krävs.", - "emailRequired": "E-post krävs.", - "passwordRequired": "Lösenord krävs.", - "passwordsDontMatch": "Lösenord stämmer inte överens.", - "alreadyHaveAccountPre": "Har du redan ett konto?", - "alreadyHaveAccountLink": "Logga in", - "whoIsOnline": "Vem är online", - "usersOnline": "{count} online" - }, - "forgot": { - "title": "Återställ lösenord", - "subtitle": "Vi skickar en säker länk till dig via e-post för att ange ett nytt lösenord.", - "sentNotice": "Om det e-postmeddelandet är registrerat har en återställningslänk skickats. Kontrollera din inkorg.", - "emailPlaceholder": "Din e-post", - "sendResetLink": "Skicka återställningslänk", - "backToLogin": "Tillbaka till inloggning", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Ange ett nytt lösenord", - "subtitle": "Välj ett starkt lösenord som du inte använder någon annanstans.", - "passwordPlaceholder": "Nytt lösenord (minst 6 tecken)", - "resetPassword": "Återställ lösenord", - "backToLogin": "Tillbaka till inloggning" - }, - "verify": { - "verifiedTitle": "Du är redo", - "verifiedSubtitle": "E-post verifierad", - "verifiedBody": "Din e-postadress har verifierats. Du kan nu logga in och spela.", - "goToLogin": "Gå till inloggning", - "alreadyTitle": "Redan verifierad", - "alreadySubtitle": "Inget kvar att göra", - "alreadyBody": "Denna e-postadress har redan bekräftats.", - "unavailableTitle": "Försök snart igen", - "unavailableSubtitle": "Servern går inte att nå", - "unavailableBody": "Vi kunde inte nå servern för att verifiera din e-post. Försök igen länken om ett ögonblick.", - "invalidTitle": "E-postverifiering", - "invalidSubtitle": "Ogiltig eller utgången länk", - "invalidBody": "Denna verifieringslänk är inte giltig. Se till att du öppnade hela länken från din e-post, eller begär en ny.", - "backToLogin": "Tillbaka till inloggning" - }, - "banned": { - "title": "Du är förbjuden", - "subtitle": "Kontot har stängts av", - "body": "Ditt konto har stängts av från hotellet.", - "reasonLabel": "Orsak:", - "permanent": "Detta förbud är permanent.", - "expires": "Går ut {date}.", - "contactStaff": "Om du tror att detta är ett misstag, kontakta personalteamet." - }, - "maintenance": { - "title": "{hotel} är under underhåll", - "subtitle": "Vi kommer snart tillbaka", - "staffCanLogIn": "Personalen kan fortfarande logga in." - }, - "admin": { - "nav": { - "overview": "Översikt", - "dashboard": "Instrumentbräda", - "content": "Innehåll", - "articles": "Artiklar", - "tags": "Taggar", - "navigator": "Navigator", - "helpCenter": "Hjälpcenter", - "advertisements": "Annonser", - "writeableBoxes": "Skrivbara lådor", - "photos": "Foton", - "tickets": "Biljetter", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Användare och åtkomst", - "users": "Användare", - "bans": "Förbud", - "ipManagement": "IP-hantering", - "vpn": "VPN", - "applications": "Ansökningar", - "teams": "Lag", - "permissions": "Behörigheter", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Ekonomi", - "catalog": "Katalog", - "shop": "Handla", - "transactions": "Transaktioner", - "vouchers": "Verifikationer", - "subscriptions": "Prenumerationer", - "rareValues": "Sällsynta värden", - "badges": "Märken", - "achievements": "Prestationer", - "calendar": "Kalender", - "radio": "Radio", - "radioHistory": "Radiohistoria", - "radioBanners": "Banderoller", - "radioEmbed": "Bädda in", - "radioApiKeys": "API-nycklar", - "radioModeration": "Måttlighet", - "radioSettings": "Inställningar", - "radioMonitoring": "Övervakning", - "radioPoints": "Poäng", - "radioRanks": "Rangordnar", - "radioAutodj": "Auto DJ", - "system": "System", - "commandocentrum": "Commandocentrum", - "emulator": "Emulator", - "alerts": "Varningar", - "logs": "Loggar", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Ordfilter", - "maintenance": "Underhåll", - "rooms": "Rum", - "emailTemplates": "E-postmallar", - "theme": "Tema", - "media": "Media", - "favicon": "Favoritikon", - "sounds": "Ljud", - "translations": "Översättningar", - "import": "Importera", - "settings": "Inställningar", - "backToSite": "Tillbaka till webbplatsen", - "housekeeping": "Städning", - "hotelManagementPanel": "Hotellledningspanel", - "rankLabel": "Rank {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Instrumentbräda", - "subtitle": "Hotellöversikt & livestatus", - "playersOnline": "Spelare online", - "articles": "Artiklar", - "activeBans": "Aktiva förbud", - "database": "Databas", - "databaseConnected": "Ansluten", - "databaseDown": "Ner", - "usersByRank": "Användare efter rang", - "noAccountsToBreakDown": "Inga konton att dela upp ännu", - "rankLabel": "Rank {rank}", - "rankWithCount": "Rank {rank}: {count} konton", - "recentStaffActivity": "Senaste personalaktiviteten", - "viewAll": "Visa alla", - "noStaffActivityLogged": "Ingen personalaktivitet har loggats ännu" - }, - "articles": { - "title": "Artiklar", - "subtitle": "Nyhetsartiklar — 50 senaste", - "newArticle": "+ Ny artikel", - "edit": "Redigera", - "delete": "Ta bort", - "noArticles": "Inga artiklar ännu", - "confirmDelete": "Är du säker på att du vill ta bort \"{title}\"?", - "colTitle": "Titel", - "colSlug": "Snigel", - "colAuthor": "Författare", - "colCreated": "Skapad", - "colActions": "Åtgärder", - "form": { - "title": "Titel", - "titlePlaceholder": "Artikeltitel", - "slug": "Snigel", - "slugPlaceholder": "artikel-url-slug", - "category": "Kategori", - "categoryPlaceholder": "Välj en kategori", - "body": "Kropp", - "bodyPlaceholder": "Skriv ditt artikelinnehåll...", - "image": "Bild", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Miniatyrbild", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Publicerad", - "featured": "Utvalda", - "save": "Spara artikeln", - "saving": "Sparar...", - "deleteArticle": "Ta bort artikel", - "deleteConfirm": "Denna åtgärd kan inte ångras. Artikeln kommer att tas bort permanent.", - "cancel": "Avbryt", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Taggar", - "subtitle": "Artikeltaggar/kategorier", - "addTag": "Lägg till tagg", - "name": "Namn", - "namePlaceholder": "Taggnamn", - "backgroundColour": "Bakgrundsfärg", - "createTag": "Skapa tagg", - "editTag": "Redigera tagg", - "updateTag": "Uppdatera taggen", - "deleteTag": "Ta bort tagg", - "confirmDelete": "Ta bort \"{name}\"?", - "noTags": "Inga taggar ännu", - "colId": "ID", - "colTag": "Tagga", - "colColour": "Färg", - "colUsedBy": "Används av", - "colCreated": "Skapad", - "colActions": "Åtgärder" - }, - "navigation": { - "title": "Navigator", - "flatCategories": "Platta kategorier", - "publicRooms": "Offentliga rum", - "addCategory": "Lägg till kategori", - "editCategory": "Redigera kategori", - "deleteCategory": "Ta bort kategori", - "categoryName": "Kategorinamn", - "categoryNamePlaceholder": "t.ex. Chill & Chat", - "categoryOrder": "Beställ", - "roomName": "Rumsnamn", - "roomNamePlaceholder": "t.ex. Welcome Lounge", - "roomId": "Rums-ID", - "roomIdPlaceholder": "Numeriskt rums-ID", - "save": "Spara", - "cancel": "Avbryt", - "noCategories": "Inga kategorier ännu", - "noPublicRooms": "Inga offentliga rum ännu", - "colId": "ID", - "colName": "Namn", - "colOrder": "Beställ", - "colRooms": "Rum", - "colActions": "Åtgärder" - }, - "helpCenter": { - "title": "Hjälpcenter", - "subtitle": "Supportinlägg och FAQ-hantering", - "entries": "Inlägg", - "newEntry": "+ Ny post", - "edit": "Redigera", - "delete": "Ta bort", - "noEntries": "Inga inlägg ännu", - "confirmDelete": "Ta bort \"{title}\"?", - "colId": "ID", - "colTitle": "Titel", - "colCategory": "Kategori", - "colCreated": "Skapad", - "colActions": "Åtgärder", - "form": { - "title": "Titel", - "titlePlaceholder": "Bidragstitel", - "category": "Kategori", - "categoryPlaceholder": "Välj kategori", - "body": "Kropp", - "bodyPlaceholder": "Skriv svaret...", - "save": "Spara posten", - "saving": "Sparar...", - "deleteEntry": "Ta bort post", - "cancel": "Avbryt" - } - }, - "ads": { - "title": "Annonser", - "subtitle": "Hantera hotellannonser och reklambanners", - "newAd": "+ Ny annons", - "edit": "Redigera", - "delete": "Ta bort", - "noAds": "Inga annonser än", - "confirmDelete": "Vill du ta bort den här annonsen?", - "colId": "ID", - "colName": "Namn", - "colImage": "Bild", - "colUrl": "URL", - "colViews": "Visningar", - "colStatus": "Status", - "colCreated": "Skapad", - "colActions": "Åtgärder", - "form": { - "name": "Namn", - "namePlaceholder": "Annonsens namn", - "image": "Bildens URL", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Måladress", - "urlPlaceholder": "https://example.com", - "enabled": "Aktiverad", - "save": "Spara annonsen", - "saving": "Sparar...", - "deleteAd": "Ta bort annonsen", - "cancel": "Avbryt" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Skrivbara lådor", - "subtitle": "Innehållspaneler som visas över hela hotellet och CMS", - "newBox": "Ny låda", - "edit": "Redigera", - "delete": "Ta bort", - "noBoxes": "Inga skrivbara rutor ännu", - "confirmDelete": "Ta bort den här rutan?", - "colId": "ID", - "colName": "Namn", - "colLocation": "Plats", - "colUpdated": "Uppdaterad", - "colActions": "Åtgärder", - "form": { - "name": "Namn", - "namePlaceholder": "Boxens namn", - "location": "Plats", - "locationPlaceholder": "t.ex. hemsida, sidofält", - "content": "Innehåll", - "contentPlaceholder": "Skriv lådans innehåll...", - "enabled": "Aktiverad", - "save": "Spara box", - "saving": "Sparar...", - "deleteBox": "Ta bort ruta", - "cancel": "Avbryt" - } - }, - "photos": { - "title": "Fotomoderering", - "subtitle": "Senaste kamerafoton i spelet", - "delete": "Ta bort", - "approve": "Godkänn", - "noPhotos": "Inga foton att moderera", - "confirmDelete": "Vill du ta bort det här fotot permanent?", - "colId": "ID", - "colPreview": "Förhandsgranska", - "colUser": "Användare", - "colRoom": "Rum", - "colTimestamp": "Tidsstämpel", - "colActions": "Åtgärder", - "photoAlt": "Användarfoto #{id}", - "byUser": "av {username}", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Användare", - "subtitle": "Bläddra, sök och hantera hotellkonton", - "search": "Sök", - "searchPlaceholder": "Sök efter användarnamn, e-post eller ID...", - "searchResults": "{count, plural, one {# result} other {# results}} för \"{query}\"", - "noResults": "Inga användare hittades", - "colId": "ID", - "colUsername": "Användarnamn", - "colEmail": "E-post", - "colRank": "Rank", - "colOnline": "Online", - "colRegistered": "Registrerad", - "colLastOnline": "Senast online", - "colActions": "Åtgärder", - "yes": "Ja", - "no": "Nej", - "edit": "Redigera", - "setRank": "Sätt rang", - "disconnect": "Koppla från", - "alert": "Varning", - "ban": "Förbud", - "detail": { - "title": "Användare: {username}", - "subtitle": "Kontoinformation och hantering", - "overview": "Översikt", - "actions": "Åtgärder", - "username": "Användarnamn", - "email": "E-post", - "motto": "Motto", - "rank": "Rank", - "credits": "Krediter", - "duckets": "Ankor", - "diamonds": "Diamanter", - "online": "Online", - "registered": "Registrerad", - "lastOnline": "Senast online", - "ipAddress": "IP-adress", - "machineId": "Maskin-ID", - "sendAlert": "Skicka varning", - "sendMessage": "Skicka meddelande", - "disconnectUser": "Koppla bort användare", - "banUser": "Förbjud användare", - "resetPassword": "Återställ lösenord", - "deleteUser": "Ta bort användare", - "confirmDelete": "Är du säker på att du vill ta bort {username}? Detta kan inte ångras.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Redigera användare: {username}", - "subtitle": "Ändra kontouppgifter", - "username": "Användarnamn", - "usernamePlaceholder": "Användarnamn", - "email": "E-post", - "emailPlaceholder": "användare@exempel.com", - "motto": "Motto", - "mottoPlaceholder": "Användarmotto", - "rank": "Rank", - "credits": "Krediter", - "duckets": "Ankor", - "diamonds": "Diamanter", - "save": "Spara ändringar", - "saving": "Sparar...", - "cancel": "Avbryt" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Förbud", - "subtitle": "Hantera konto-, IP- och maskinförbud", - "newBan": "Nytt förbud", - "edit": "Redigera", - "delete": "Ta bort", - "noBans": "Inga förbud än", - "confirmDelete": "Ta bort detta förbud?", - "colId": "ID", - "colValue": "Värde", - "colType": "Typ", - "colReason": "Anledning", - "colBannedBy": "Banad av", - "colExpires": "Upphör att gälla", - "colCreated": "Skapad", - "colActions": "Åtgärder", - "form": { - "value": "Värde", - "valuePlaceholder": "Användarnamn, IP eller maskin-ID", - "type": "Typ", - "typeUser": "Användare", - "typeIp": "IP", - "typeMachine": "Maskin", - "reason": "Anledning", - "reasonPlaceholder": "Förbud anledning", - "expiresAt": "Går ut kl", - "permanent": "Permanent", - "save": "Spara förbud", - "saving": "Sparar...", - "cancel": "Avbryt" - } - }, - "ip": { - "title": "IP-hantering", - "subtitle": "Hantera IP-vitlista och svartlista", - "whitelist": "Vitlista", - "blacklist": "Svartlista", - "addIp": "Lägg till IP", - "ipAddress": "IP-adress", - "ipAddressPlaceholder": "t.ex. 127.0.0.1", - "reason": "Anledning", - "reasonPlaceholder": "Anledning till notering", - "add": "Lägg till", - "remove": "Ta bort", - "confirmRemove": "Ta bort denna IP från {list}?", - "noWhitelistedIps": "Inga vitlistade IP-adresser", - "noBlacklistedIps": "Inga svartlistade IP-adresser", - "colIp": "IP", - "colReason": "Anledning", - "colAdded": "Tillagd", - "colActions": "Åtgärder" - }, - "vpn": { - "title": "VPN/proxydetektion", - "subtitle": "Konfigurera VPN- och proxydetekteringsinställningar", - "enabled": "Aktiverad", - "apiKey": "API-nyckel", - "apiKeyPlaceholder": "Din VPN-detektions-API-nyckel", - "apiKeyHint": "Lämna tomt för att inaktivera", - "blockOnDetect": "Blockera vid upptäckt", - "blockOnDetectHint": "Blockera automatiskt användare som upptäcks bakom en VPN eller proxy", - "save": "Spara inställningar", - "saving": "Sparar...", - "settingsSaved": "VPN-inställningarna har sparats" - }, - "applications": { - "title": "Personalansökningar", - "subtitle": "Väntande och granskade personalansökningar", - "pending": "Väntar", - "approved": "Godkänd", - "rejected": "Avvisad", - "noApplications": "Inga ansökningar ännu", - "colId": "ID", - "colApplicant": "Sökande", - "colPosition": "Position", - "colStatus": "Status", - "colSubmitted": "Inlämnad", - "colActions": "Åtgärder", - "review": "Granska", - "approve": "Godkänn", - "reject": "Avvisa", - "confirmApprove": "Godkänna {username} för {position}?", - "confirmReject": "Avvisa {username}s ansökan om {position}?", - "detail": { - "title": "Ansökan av {username}", - "subtitle": "För {position}", - "about": "Om den sökande", - "message": "Ansökan meddelande", - "status": "Status", - "submitted": "Inlämnad", - "noMessage": "Inget meddelande tillhandahålls" - } - }, - "teams": { - "title": "Lag", - "subtitle": "Definiera personalens rankningsnamn och beskrivningar", - "addRank": "Lägg till rang", - "editRank": "Redigera rang", - "deleteRank": "Ta bort rang", - "noTeams": "Inga rangdefinitioner ännu", - "confirmDelete": "Ta bort rank {id} definition?", - "colId": "ID", - "colRank": "Rank", - "colName": "Namn", - "colBadge": "Märke", - "colColour": "Färg", - "colActions": "Åtgärder", - "form": { - "rankId": "Rang-ID", - "rankIdPlaceholder": "Numeriskt rang-ID", - "name": "Namn", - "namePlaceholder": "t.ex. Administratör", - "badge": "Märkekod", - "badgePlaceholder": "t.ex. ADM001", - "colour": "Färg", - "colourPlaceholder": "t.ex. #ff0000", - "save": "Spara teamdefinition", - "saving": "Sparar...", - "cancel": "Avbryt" - } - }, - "permissions": { - "title": "Behörigheter", - "subtitle": "Hantera rankbaserade behörigheter för adminpanelen", - "addPermission": "Lägg till behörighet", - "editPermission": "Redigera behörighet", - "deletePermission": "Ta bort behörighet", - "noPermissions": "Inga behörigheter har konfigurerats ännu", - "confirmDelete": "Vill du ta bort den här behörigheten?", - "colId": "ID", - "colRank": "Rank", - "colPermission": "Tillstånd", - "colCreated": "Skapad", - "colActions": "Åtgärder", - "form": { - "rankId": "Rang-ID", - "rankIdPlaceholder": "Minsta rang krävs", - "permission": "Behörighetsnyckel", - "permissionPlaceholder": "t.ex. admin.articles.manage", - "save": "Spara behörighet", - "saving": "Sparar...", - "cancel": "Avbryt" - } - }, - "catalog": { - "title": "Katalog", - "subtitle": "Bläddra och hantera katalogsidor och objekt", - "pages": "Sidor", - "items": "Föremål", - "addPage": "Lägg till sida", - "editPage": "Redigera sida", - "deletePage": "Ta bort sida", - "addItem": "Lägg till objekt", - "editItem": "Redigera objekt", - "deleteItem": "Ta bort objekt", - "noPages": "Inga katalogsidor ännu", - "noItems": "Inga föremål på denna sida", - "confirmDeletePage": "Ta bort katalogsidan \"{name}\"?", - "confirmDeleteItem": "Vill du ta bort det här objektet?", - "colId": "ID", - "colName": "Namn", - "colIcon": "Ikon", - "colOrder": "Beställ", - "colItems": "Föremål", - "colEnabled": "Aktiverad", - "colActions": "Åtgärder", - "colItemId": "Artikel-ID", - "colItemName": "Objektets namn", - "colCostCredits": "Kostnad (krediter)", - "colCostPoints": "Kostnad (poäng)", - "colLimited": "Begränsad", - "pageForm": { - "name": "Namn", - "namePlaceholder": "Sidnamn", - "icon": "Ikon ID", - "iconPlaceholder": "Numeriskt ikon-ID", - "order": "Beställ", - "enabled": "Aktiverad", - "parent": "Föräldrasida", - "parentNone": "Ingen (root)", - "save": "Spara sidan", - "saving": "Sparar...", - "cancel": "Avbryt" - }, - "itemForm": { - "itemId": "Artikel-ID", - "itemName": "Objektets namn", - "costCredits": "Kostnad i krediter", - "costDuckets": "Kostnad i duckets", - "costDiamonds": "Kostnad i diamanter", - "limitedStack": "Begränsad stackstorlek", - "limitedSold": "Begränsat sålt", - "save": "Spara objekt", - "saving": "Sparar...", - "cancel": "Avbryt" - }, - "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." - } - }, - "shop": { - "title": "Handla", - "subtitle": "Hantera paket och beställningar", - "packages": "Paket", - "orders": "Beställningar", - "newPackage": "+ Nytt paket", - "edit": "Redigera", - "delete": "Ta bort", - "viewOrder": "Visa", - "noPackages": "Inga butikspaket ännu", - "noOrders": "Inga beställningar än", - "confirmDelete": "Vill du ta bort det här paketet?", - "colId": "ID", - "colName": "Namn", - "colPrice": "Pris", - "colCurrency": "Valuta", - "colType": "Typ", - "colSold": "Såld", - "colEnabled": "Aktiverad", - "colActions": "Åtgärder", - "colOrderId": "Beställnings-ID", - "colCustomer": "Kund", - "colPackage": "Paket", - "colAmount": "Belopp", - "colStatus": "Status", - "colDate": "Datum", - "statusPending": "Väntar", - "statusCompleted": "Avslutad", - "statusRefunded": "Återbetalas", - "form": { - "name": "Namn", - "namePlaceholder": "Paketnamn", - "description": "Beskrivning", - "descriptionPlaceholder": "Paketbeskrivning", - "price": "Pris", - "currency": "Valuta", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Typ", - "typeCredits": "Krediter", - "typeDuckets": "Ankor", - "typeDiamonds": "Diamanter", - "typeBadge": "Märke", - "typeFurni": "Möbler", - "typeRank": "Rank", - "amount": "Belopp", - "badgeCode": "Märkekod", - "badgeCodePlaceholder": "t.ex. VIP001", - "rankId": "Rang-ID", - "furniItems": "Möbelartiklar", - "enabled": "Aktiverad", - "save": "Spara paketet", - "saving": "Sparar...", - "cancel": "Avbryt" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "Transaktioner", - "subtitle": "PayPal betalningslogg", - "noTransactions": "Inga transaktioner ännu", - "colId": "ID", - "colUser": "Användare", - "colAmount": "Belopp", - "colCurrency": "Valuta", - "colPackage": "Paket", - "colStatus": "Status", - "colDate": "Datum", - "colActions": "Åtgärder", - "statusCompleted": "Avslutad", - "statusPending": "Väntar", - "statusFailed": "Misslyckades", - "statusRefunded": "Återbetalas", - "detail": { - "title": "Transaktion #{id}", - "paypalId": "PayPal-ID", - "payerEmail": "Betalarens e-post", - "grossAmount": "Bruttobelopp", - "fee": "Avgift", - "netAmount": "Nettobelopp" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Butikskuponger", - "subtitle": "Hantera inlösbara kupongkoder", - "newVoucher": "+ Ny kupong", - "edit": "Redigera", - "delete": "Ta bort", - "noVouchers": "Inga kuponger ännu", - "confirmDelete": "Vill du ta bort kupongen \"{code}\"?", - "colId": "ID", - "colCode": "Kod", - "colValue": "Värde", - "colType": "Typ", - "colUses": "Användning / Max", - "colExpires": "Upphör att gälla", - "colCreated": "Skapad", - "colActions": "Åtgärder", - "form": { - "code": "Kod", - "codePlaceholder": "t.ex. SOMMAR 2025", - "value": "Värde", - "type": "Typ", - "typeCredits": "Krediter", - "typeDuckets": "Ankor", - "typeDiamonds": "Diamanter", - "typeBadge": "Märke", - "typeFurni": "Möbler", - "typeRank": "Rank", - "badgeCode": "Märkekod", - "badgeCodePlaceholder": "t.ex. VIP001", - "rankId": "Rang-ID", - "maxUses": "Max använder", - "maxUsesPlaceholder": "0 = obegränsat", - "expiresAt": "Går ut kl", - "enabled": "Aktiverad", - "save": "Spara kupong", - "saving": "Sparar...", - "cancel": "Avbryt", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Prenumerationer", - "subtitle": "Aktiva återkommande prenumerationer", - "noSubscriptions": "Inga aktiva prenumerationer", - "cancel": "Avbryt", - "confirmCancel": "Vill du avsluta prenumerationen på {username}?", - "colId": "ID", - "colUser": "Användare", - "colPackage": "Paket", - "colAmount": "Belopp", - "colInterval": "Intervall", - "colStarted": "Startade", - "colNextBilling": "Nästa fakturering", - "colStatus": "Status", - "colActions": "Åtgärder", - "statusActive": "Aktiv", - "statusCancelled": "Avbruten", - "statusExpired": "Utgått" - }, - "rareValues": { - "title": "Sällsynta värden", - "subtitle": "Hantera sällsynta värdekategorier och artikelpriser", - "categories": "Kategorier", - "items": "Föremål", - "addCategory": "Lägg till kategori", - "editCategory": "Redigera kategori", - "deleteCategory": "Ta bort kategori", - "noCategories": "Inga sällsynta värdekategorier ännu", - "confirmDeleteCategory": "Vill du ta bort kategorin \"{name}\" och alla dess objekt?", - "colId": "ID", - "colName": "Namn", - "colItems": "Föremål", - "colUpdated": "Uppdaterad", - "colActions": "Åtgärder", - "colItemName": "Objektets namn", - "colCredits": "Krediter", - "colPoints": "Poäng", - "colPointType": "Punkttyp", - "categoryForm": { - "name": "Namn", - "namePlaceholder": "Kategorinamn", - "save": "Spara kategori", - "saving": "Sparar...", - "cancel": "Avbryt" - }, - "itemForm": { - "itemName": "Objektets namn", - "itemNamePlaceholder": "t.ex. Throne", - "credits": "Kreditvärde", - "points": "Poängvärde", - "pointType": "Punkttyp", - "pointTypeDuckets": "Ankor", - "pointTypeDiamonds": "Diamanter", - "save": "Spara objekt", - "saving": "Sparar...", - "cancel": "Avbryt" - } - }, - "badges": { - "title": "Märken", - "subtitle": "Ladda upp, ge och hantera märkeskatalog", - "upload": "Ladda upp", - "giveBadge": "Ge märke", - "catalogue": "Katalog", - "uploadTitle": "Ladda upp ett nytt märke", - "uploadSubtitle": "Ladda upp en märkesbildfil", - "badgeCode": "Märkekod", - "badgeCodePlaceholder": "t.ex. VIP001", - "badgeFile": "Märkefil", - "badgeFileHint": "PNG eller GIF, rekommenderas 40x40", - "uploadButton": "Ladda upp", - "uploading": "Laddar upp...", - "giveTitle": "Ge märket till användaren", - "giveSubtitle": "Ge ett märke till en specifik användare", - "username": "Användarnamn", - "usernamePlaceholder": "Målanvändarnamn", - "giveButton": "Ge märke", - "giving": "Ge...", - "catalogueTitle": "Märkekatalog", - "catalogueSubtitle": "Alla tillgängliga märken på hotellet", - "noBadges": "Inga märken i katalogen", - "search": "Sök märken", - "searchPlaceholder": "Sök med kod eller namn...", - "colCode": "Kod", - "colImage": "Bild", - "colName": "Namn", - "colDescription": "Beskrivning", - "colActions": "Åtgärder" - }, - "achievements": { - "title": "Prestationer", - "subtitle": "Skrivskyddad lista över prestationer i spelet", - "noAchievements": "Inga prestationer har konfigurerats", - "colId": "ID", - "colName": "Namn", - "colCategory": "Kategori", - "colLevels": "Nivåer", - "colReward": "Belöning", - "colProgress": "Framsteg", - "levelLabel": "Nivå {level}", - "rewardCredits": "{count} krediter", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Kalenderkampanjer", - "subtitle": "Skrivskyddad lista över kalenderkampanjer och evenemang", - "noCampaigns": "Inga kalenderkampanjer än", - "colId": "ID", - "colName": "Namn", - "colStart": "Starta", - "colEnd": "Slut", - "colType": "Typ", - "colReward": "Belöning", - "colActions": "Åtgärder", - "detail": { - "title": "Kampanj: {name}", - "subtitle": "Kalenderhändelsedetaljer", - "days": "dagar", - "dayLabel": "Dag {day}", - "reward": "Belöning", - "noDays": "Inga dagar har konfigurerats för den här kampanjen" - } - }, - "radio": { - "title": "Radiomoderering", - "subtitle": "Senaste ropen, DJ-applikationer och on-air-scheman (25 senaste av varje).", - "moderation": "Måttlighet", - "shouts": "Ropar", - "applications": "Ansökningar", - "schedules": "Scheman", - "settings": "Inställningar", - "embed": "Bädda in", - "ranks": "Rangordnar", - "history": "Historia", - "apiKeys": "API-nycklar", - "points": "Poäng", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Radioövervakning", - "subtitle": "Skrivskyddad live-prob för de konfigurerade radioändpunkterna (radio_now_playing_api_url, radio_listeners_api_url). Varje begäran misslyckas mjukt med en {timeout}s timeout — ingen data skrivs. Konfigurera webbadresser under Inställningar.", - "stream": "Streama", - "online": "Online", - "offline": "Offline", - "notConfigured": "Ej konfigurerad", - "nowPlaying": "Spelar nu", - "nowPlayingApi": "Nu spelas API", - "listenersApi": "Listeners API", - "listeners": "Lyssnare", - "currentSong": "Aktuell låt", - "bitrate": "Bithastighet", - "status": "Status", - "noNowPlayingHint": "ingen nu-spelande API-uppsättning", - "noListenersHint": "ingen lyssnars API inställd", - "endpointDiagnostics": "Slutpunktsdiagnostik", - "diagnosticsLegend": "OK: tillgänglig · WARN: inte konfigurerad · ERROR: begäran misslyckades eller tog för lång tid.", - "streamUrl": "Streama URL", - "unreachable": "oåtkomlig", - "refresh": "Uppdatera" - }, - "user": "Användare", - "message": "Meddelande", - "posted": "Postat", - "realName": "Riktigt namn", - "age": "Ålder", - "style": "Stil", - "applied": "Tillämpas", - "day": "dag", - "start": "Starta", - "end": "Slut", - "show": "Visa", - "status": "Status", - "active": "aktiv", - "inactive": "inaktiv", - "hidden": "dolda", - "activeSchedules": "Aktiva scheman", - "noShouts": "Inga rop att moderera", - "noApplications": "Inga ansökningar inlämnade.", - "noSchedules": "Inga scheman har konfigurerats.", - "deleteShout": "Ta bort", - "confirmDeleteShout": "Ta bort det här ropet?", - "pendingApplications": "Väntande ansökningar", - "settingsForm": { - "title": "Radioinställningar", - "subtitle": "Redigeringar skriver till website_settings (radio_*-nycklar) och bryter cacheminnet för körtidsinställningar. Booleans använder 0/1.", - "enabled": "Aktiverad", - "disabled": "Inaktiverad", - "totalKeys": "Totalt nycklar", - "configured": "Konfigurerad", - "curatedHint": "utvalda nycklar med ett värde", - "customKeys": "Anpassade nycklar", - "saveAll": "Spara alla", - "singleKey": "Lägg till/skriv över en enda nyckel", - "keyPlaceholder": "radio_custom_key", - "valuePlaceholder": "värde", - "commentPlaceholder": "kommentar (valfritt)", - "saveSingle": "Spara", - "otherSettings": "Andra radioinställningar", - "dbError": "Det gick inte att läsa in inställningar (databasen är inte tillgänglig). Standardinställningar kommer att skapas vid spara." - }, - "embedPage": { - "title": "Radio bädda in", - "subtitle": "Kopieringsfärdig inbäddningskod för livestreamen. Skrivskyddad — ingenting här skriver till databasen. Konfigurera webbadressen för stream i Radioinställningar (radio_stream_url).", - "streamUrl": "Streama URL", - "configured": "Konfigurerad", - "missing": "Saknas", - "radioName": "Radionamn", - "nowPlayingApi": "Nu spelas API", - "set": "Ställ in", - "notSet": "Inte inställt", - "noStreamUrl": "Ingen stream-URL har konfigurerats", - "noStreamUrlText": "Det finns ingen radio_stream_url inställd, så det finns inget att bädda in ännu.", - "goToSettings": "Gå till Radioinställningar", - "livePreview": "Live förhandsvisning", - "livePreviewText": "Detta är den blotta audio-spelaren som besökare kommer att se den. Tryck på play för att bekräfta att streamen är tillgänglig.", - "source": "Källa", - "audioSnippet": "Utdrag från ljudspelare", - "audioSnippetDesc": "Drop-in HTML5-ljudspelare pekade rakt mot strömmen. Fungerar överallt där vanlig HTML är tillåtet.", - "iframeSnippet": "Iframe-omslagsutdrag", - "iframeSnippetDesc": "Bäddar in webbplatsens egen radiospelaresida i en iframe – behåller din styling och information som spelas nu. Justera bredd/höjd efter smak.", - "audioUnsupported": "Din webbläsare stöder inte ljudelementet." - }, - "banners": { - "title": "Banderoller", - "heading": "Radiobanderoller", - "description": "Reklambanners som visas på radiosidan, sorterade efter sorteringsordning.", - "addBanner": "Lägg till banner", - "createBanner": "Skapa banner", - "deleteBanner": "Ta bort banner", - "noBanners": "Inga banners än – lägg till en ovan.", - "existing": "Befintliga banners ({count})", - "save": "Spara", - "delete": "Ta bort", - "byUser": "av användare {id}", - "active": "aktiv", - "hidden": "dolda", - "bannerAlt": "Radio banderoll", - "statusActive": "Aktiv", - "statusHidden": "Dold", - "dbError": "Det gick inte att ladda banners (databasen är inte tillgänglig).", - "form": { - "imagePath": "Bildsökväg / URL", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Titel", - "description": "Beskrivning", - "sortOrder": "Sorteringsordning", - "active": "Aktiv" - } - }, - "ranksForm": { - "title": "Radio Ranks", - "subtitle": "DJ / personal rangordnas på radioapplikationer.", - "dbError": "Kunde inte läsa in rankningar (databasen är inte tillgänglig).", - "active": "Aktiv", - "addRank": "Lägg till rang", - "name": "Namn", - "badgeCode": "Märkekod", - "description": "Beskrivning", - "createRank": "Skapa rang", - "existing": "Befintliga rankningar ({count})", - "noRanks": "Inga rankningar än – lägg till en ovan.", - "activeLabel": "aktiv", - "inactiveLabel": "inaktiv", - "save": "Spara", - "deleteRank": "Ta bort rank #{id}" - }, - "historyPage": { - "title": "Radiospelshistorik", - "subtitle": "Tidigare DJ-shower och sändningstid (radio_history), senaste först. Skrivskyddad logg över vem som var i luften, när och hur många lyssnare som lyssnade.", - "dbError": "Det gick inte att läsa in radiohistorik (databasen är inte tillgänglig).", - "showsLogged": "Visar loggade", - "onAirNow": "På luft nu", - "uniqueDjs": "Unika DJs", - "peakListeners": "Topplyssnare", - "empty": "Ingen radiohistorik inspelad än.", - "showLog": "Visa logg ({count})", - "colDj": "DJ", - "colShow": "Visa", - "colStarted": "Startade", - "colEnded": "Slutade", - "colAirtime": "Sändningstid", - "colListeners": "Lyssnare", - "colNotes": "Anteckningar", - "onAir": "på luft" - }, - "apiKeysForm": { - "title": "Radio API-nycklar", - "subtitle": "API-nycklar för externa radiointegrationer (radio_api_keys). Nycklar genereras på serversidan och visas maskerade - kopiera hela värdet från databasen när de utfärdas första gången.", - "dbError": "Det gick inte att läsa in API-nycklar (databasen är inte tillgänglig).", - "totalKeys": "Totalt nycklar", - "active": "Aktiv", - "inactive": "Inaktiv", - "generateKey": "Generera nyckel", - "generateHint": "Den hemliga nyckeln genereras automatiskt med kryptografisk slumpmässighet - du anger den inte.", - "name": "Namn", - "namePlaceholder": "AzureCast-bryggan", - "rateLimit": "Prisgräns (förfrågningar/min)", - "allowedIps": "Tillåtna IP-adresser (valfritt)", - "allowedIpsPlaceholder": "kommaseparerad, blank = valfri", - "generate": "Generera nyckel", - "existingKeys": "Befintliga nycklar ({count})", - "noKeys": "Inga API-nycklar ännu - generera en ovan.", - "colName": "Namn", - "colKey": "Nyckel", - "colAllowedIps": "Tillåtna IP-adresser", - "colRateLimit": "Prisgräns", - "colLastUsed": "Senast använd", - "colExpires": "Upphör att gälla", - "colStatus": "Status", - "colActions": "Åtgärder", - "maskedHint": "Endast de första 8 tecknen visas", - "any": "någon", - "activeLabel": "aktiv", - "inactiveLabel": "inaktiv", - "deactivate": "Inaktivera", - "activate": "Aktivera", - "delete": "Ta bort" - }, - "pointsForm": { - "title": "Radiolyssnarpoäng", - "subtitle": "Belöna lyssnare med valuta för tid på radio. Redigeringar skriver till website_settings (radio_points_*-nycklar) och bryter cacheminnet för körtidsinställningar. Booleans använder 0/1.", - "saved": "Sparad", - "points": "Poäng", - "enabled": "Aktiverad", - "disabled": "Inaktiverad", - "perMinute": "Per minut", - "paidIn": "betalas i {currency}", - "maxPerDay": "Max/dag", - "unlimited": "Obegränsad", - "minListeners": "Min lyssnare", - "settings": "Inställningar", - "pointsEnabled": "Poäng aktiverade", - "pointsEnabledHint": "Huvudströmbrytare för att ge lyssnarpoäng.", - "currency": "Valuta", - "currencyHint": "Till vilken plånbok poängen betalas in.", - "pointsPerMinute": "Poäng per minut", - "pointsPerMinuteHint": "Belopp som tilldelas för varje hel minut av lyssning.", - "maxPerDayHint": "Dagligt tak per användare. Använd 0 för obegränsat.", - "minListenersHint": "Poäng delas bara ut när åtminstone så många personer är inställda.", - "save": "Spara poänginställningar" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Reservspellista (radio_auto_dj_playlist) som radion roterar genom när ingen live-DJ strömmar. Beställs efter sorteringsordning sedan titel.", - "dbError": "Det gick inte att ladda AutoDJ-spellistan (databasen är inte tillgänglig).", - "tracks": "Spår", - "active": "Aktiv", - "inactive": "Inaktiv", - "addTrack": "Lägg till spår", - "titlePlaceholder": "Spårets titel", - "artist": "Konstnär", - "album": "Album", - "artworkUrl": "Konstverk URL", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Varaktighet (sekunder)", - "durationPlaceholder": "t.ex. 215", - "sortOrder": "Sorteringsordning", - "playlist": "Spellista ({count})", - "noTracks": "Inga AutoDJ-spår ännu — lägg till en ovan.", - "colOrder": "Beställ", - "colTitle": "Titel", - "colArtist": "Konstnär", - "colAlbum": "Album", - "colDuration": "Varaktighet", - "colPlays": "Spelar", - "colLastPlayed": "Senast spelad", - "colStatus": "Status", - "colActions": "Åtgärder", - "activeLabel": "aktiv", - "inactiveLabel": "inaktiv", - "deactivate": "Inaktivera", - "activate": "Aktivera", - "delete": "Ta bort", - "trackTitle": "Titel" - }, - "moderationPage": { - "title": "DJ Moderering", - "subtitle": "Granska och ta bort radiorop (50 senaste).", - "recentShouts": "Senaste rop ({count})" - } - }, - "commandocentrum": { - "title": "Commandocentrum", - "subtitle": "Diagnostik, RCON-kontroller och användarhantering", - "diagnostics": "Diagnostik", - "rcon": "RCON", - "userActions": "Användaråtgärder", - "diagnosticsTitle": "Emulatordiagnostik", - "memoryUsage": "Minnesanvändning", - "uptime": "Upptid", - "onlineUsers": "Onlineanvändare", - "roomsLoaded": "Rum laddade", - "refresh": "Uppdatera", - "rconTitle": "RCON-kommandon", - "rconPlaceholder": "Ange RCON-kommando...", - "rconSend": "Skicka", - "rconSending": "Skickar...", - "rconResponse": "Svar", - "userActionsTitle": "Användaråtgärder", - "username": "Användarnamn", - "usernamePlaceholder": "Målanvändarnamn", - "action": "Åtgärd", - "execute": "Utför", - "actions": { - "disconnect": "Koppla från", - "alert": "Skicka varning", - "giveCredits": "Ge krediter", - "giveBadge": "Ge märke", - "givePoints": "Ge poäng", - "ban": "Förbud", - "kick": "Sparka" - }, - "messagePlaceholder": "Meddelande (för varningar)...", - "amountPlaceholder": "Belopp...", - "badgePlaceholder": "Märkekod..." - }, - "emulator": { - "title": "Emulator Config", - "subtitle": "Visa och redigera emulatorinställningar och språktexter", - "settings": "Inställningar", - "texts": "Texter", - "search": "Sök", - "searchPlaceholder": "Sök nycklar...", - "noSettings": "Inga inställningar hittades", - "noTexts": "Inga texter hittades", - "edit": "Redigera", - "save": "Spara", - "saving": "Sparar...", - "cancel": "Avbryt", - "colKey": "Nyckel", - "colValue": "Värde", - "colType": "Typ", - "colActions": "Åtgärder", - "editDialog": { - "title": "Redigera: {key}", - "value": "Värde", - "valuePlaceholder": "Ange värde...", - "save": "Spara ändringar", - "cancel": "Avbryt" - } - }, - "alerts": { - "title": "Varningar", - "subtitle": "Skicka varningar för hela hotellet och visa de senaste varningarna", - "sendAlert": "Skicka hotellvarning", - "recentAlerts": "Senaste varningar ({count})", - "noRecentAlerts": "Inga senaste varningar", - "form": { - "title": "Varningsrubrik", - "titlePlaceholder": "t.ex. Serverunderhåll på 10 minuter", - "message": "Varningsmeddelande", - "messagePlaceholder": "Skriv varningsmeddelandet...", - "type": "Typ", - "typeHotel": "Alarm över hela hotellet", - "typeStaff": "Endast personal", - "urgent": "Brådskande", - "send": "Skicka varning", - "sending": "Skickar...", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "ID", - "colTitle": "Titel", - "colSentBy": "Skickat av", - "colType": "Typ", - "colDate": "Datum", - "colActions": "Åtgärder", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Personalaktiviteter", - "subtitle": "Granskning av personalens åtgärder i adminpanelen", - "noLogs": "Ingen personalaktivitet har loggats ännu", - "colId": "ID", - "colUser": "Användare", - "colAction": "Åtgärd", - "colTarget": "Mål", - "colDescription": "Beskrivning", - "colIp": "IP", - "colTimestamp": "Tidsstämpel", - "filterByUser": "Filtrera efter användare...", - "filterByAction": "Filtrera efter åtgärd...", - "clearFilters": "Rensa filter", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Ordfilter", - "subtitle": "Hantera filtrerade ord och fraser på hotellet", - "addWord": "Lägg till ord", - "addWords": "Lägg till ord", - "noWords": "Inga filtrerade ord än", - "confirmDelete": "Ta bort \"{word}\" från filtret?", - "colId": "ID", - "colWord": "Ord", - "colAddedBy": "Tillagd av", - "colCreated": "Skapad", - "colActions": "Åtgärder", - "form": { - "word": "Ord", - "wordPlaceholder": "t.ex. dåligt ord", - "addMore": "Lägg till flera ord (ett per rad)", - "save": "Lägg till i filter", - "saving": "Sparar...", - "cancel": "Avbryt" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Underhållsläge", - "subtitle": "Aktivera eller inaktivera hotellomfattande underhåll", - "enabled": "Underhållsläget är aktiverat", - "disabled": "Underhållsläget är inaktiverat", - "enable": "Aktivera underhåll", - "disable": "Inaktivera underhåll", - "message": "Underhållsmeddelande", - "messagePlaceholder": "Vi kommer tillbaka snart!", - "staffAccess": "Tillåt personal tillträde under underhåll", - "save": "Spara inställningar", - "saving": "Sparar...", - "confirmEnable": "Aktivering av underhåll förhindrar alla icke-personalanvändare från att komma åt hotellet. Fortsätta?", - "confirmDisable": "Inaktivera underhållsläge och återställa åtkomst för alla användare?" - }, - "housekeeping": { - "title": "Hushållningstillstånd", - "subtitle": "Konfigurera vilka ranger som kan komma åt vilka adminsektioner", - "addPermission": "Lägg till behörighet", - "editPermission": "Redigera behörighet", - "deletePermission": "Ta bort behörighet", - "noPermissions": "Inga städbehörigheter har konfigurerats", - "confirmDelete": "Vill du ta bort den här behörigheten?", - "colId": "ID", - "colRank": "Rank", - "colSection": "avsnitt", - "colActions": "Åtgärder", - "form": { - "rankId": "Rang-ID", - "rankIdPlaceholder": "Minsta rang", - "section": "Sektionsnyckel", - "sectionPlaceholder": "t.ex. admin.dashboard", - "save": "Spara behörighet", - "saving": "Sparar...", - "cancel": "Avbryt" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset Tillämpas!", - "cleared": "All Behörigheter cleared!", - "invalidRank": "Invalid rank", - "testDone": "Test done: {count} Behörigheter found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Ta bort ALL Behörigheter? This Åtgärd cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "Tillstånd", - "colDescription": "Beskrivning", - "colMinRank": "Min. Rank", - "permissionKey": "Behörighetsnyckel", - "minRank": "Min. rank", - "description": "Beskrivning", - "permissions": "Behörigheter", - "permissionsCount": "{count} Behörigheter", - "permission": "Tillstånd", - "highestMinRank": "Highest min. rank: {rank}", - "totalMinRank": "Total min. rank sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Rangordnar", - "missingDeps": "{count} Saknas dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Saknas)", - "rank": "Rank", - "count": "Count", - "searchPermission": "Sök Behörigheter…", - "search": "Sök", - "manage": "Manage", - "importSelection": "Importera selection", - "noGroup": "Nej group", - "allGroups": "All groups", - "perGroup": "Behörigheter per group", - "perRank": "Behörigheter per rank", - "rankOverviewHint": "All Behörigheter grouped by the rank they are assigned to.", - "tabOverview": "Översikt", - "tabManage": "Manage", - "tabImport": "Importera / Export", - "tabRanks": "Rank Översikt", - "tabPresets": "Förinställningar", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "Importera Behörigheter", - "importHint": "Paste a JSON array of Tillstånd objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "Importera", - "exportTitle": "Export Behörigheter", - "exportHint": "Export all Behörigheter as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "Tillstånd Förinställningar", - "presetsHint": "Ansök a predefined Ställ in of Behörigheter for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Måttlighet tools: Användare lookup, Förbud, CFH handling, chat Loggar.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Användare, Rum, news, Inställningar, Handla, events, radio & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including Tillstånd management and asset Importera.", - "applyPreset": "Ansök preset", - "clearAll": "Clear all Behörigheter", - "testTitle": "Test rank access", - "testHint": "Enter a rank number to see which Behörigheter would be granted.", - "test": "Test", - "auditTitle": "Tillstånd audit log", - "auditHint": "All changes to Städning Behörigheter are logged.", - "auditLogsAt": "Audit Loggar are available on the Audit log page.", - "viewAuditLogs": "Visa audit Loggar", - "importedWithErrors": "Imported {count} Behörigheter with {errors} errors", - "confirmClearAllDesc": "This will Ta bort every Tillstånd entry from the Databas. Are you sure?", - "confirmDeletePermission": "Ta bort this Tillstånd permanently?", - "confirmBulkDelete": "Ta bort {count} selected Behörigheter?", - "deleteSelected": "Ta bort {count} selected", - "cancel": "Avbryt", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Användare", - "auditAction": "Åtgärd", - "auditTarget": "Mål", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Rum", - "subtitle": "Sök och hantera hotellrum", - "search": "Sök", - "searchPlaceholder": "Sök på namn, ägare eller ID...", - "searchResults": "{count, plural, one {# room} other {# rooms}} hittades för \"{query}\"", - "noResults": "Inga rum hittades", - "colId": "ID", - "colName": "Namn", - "colOwner": "Ägare", - "colUsers": "Användare", - "colState": "staten", - "colCategory": "Kategori", - "colCreated": "Skapad", - "colActions": "Åtgärder", - "stateOpen": "Öppna", - "stateClosed": "Stängt", - "stateLocked": "Låst", - "stateInvisible": "Osynlig", - "detail": { - "title": "Rum: {name}", - "subtitle": "Ägs av {owner}", - "overview": "Översikt", - "actions": "Åtgärder", - "description": "Beskrivning", - "noDescription": "Ingen beskrivning", - "owner": "Ägare", - "users": "Användare online", - "maxUsers": "Max användare", - "category": "Kategori", - "state": "staten", - "tags": "Taggar", - "noTags": "Inga taggar", - "created": "Skapad", - "deleteRoom": "Ta bort rum", - "confirmDelete": "Vill du ta bort rummet \"{name}\"? Detta kan inte ångras.", - "enterRoom": "Gå in i rummet", - "changeOwner": "Byt ägare", - "changeOwnerPlaceholder": "Nytt användarnamn för ägaren" - } - }, - "emailTemplates": { - "title": "E-postmallar", - "subtitle": "Hantera transaktionella e-postmallar", - "newTemplate": "+ Ny mall", - "edit": "Redigera", - "delete": "Ta bort", - "noTemplates": "Inga e-postmallar ännu", - "confirmDelete": "Vill du ta bort mallen \"{name}\"?", - "colId": "ID", - "colName": "Namn", - "colSubject": "Ämne", - "colKey": "Nyckel", - "colUpdated": "Uppdaterad", - "colActions": "Åtgärder", - "form": { - "name": "Namn", - "namePlaceholder": "t.ex. Välkomstmail", - "key": "Nyckel", - "keyPlaceholder": "t.ex. välkommen_e-post", - "subject": "Ämne", - "subjectPlaceholder": "E-post ämnesrad", - "body": "Brödtext (HTML)", - "bodyPlaceholder": "

Bästa {username},

", - "variables": "Tillgängliga variabler", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Spara mall", - "saving": "Sparar...", - "cancel": "Avbryt" - } - }, - "theme": { - "title": "Tema", - "subtitle": "Anpassa CMS-utseendet", - "presets": "Förinställningar", - "colours": "Färger", - "css": "CSS", - "presetsTitle": "Förinställda tema", - "presetsSubtitle": "Välj ett förbyggt färgschema", - "applyPreset": "Ansök", - "presetApplied": "Förinställning tillämpas: {preset}", - "customiseTitle": "Anpassade färger", - "primary": "Primär", - "secondary": "Sekundär", - "accent": "Accent", - "background": "Bakgrund", - "surface": "Yta", - "text": "Text", - "saveColours": "Spara färger", - "savingColours": "Sparar...", - "cssTitle": "Anpassad CSS", - "cssSubtitle": "Lägg till anpassad CSS för att åsidosätta temastilar", - "cssPlaceholder": "/* Din anpassade CSS här */", - "saveCss": "Spara CSS", - "savingCss": "Sparar...", - "reset": "Återställ till standardinställningar", - "confirmReset": "Återställa temat till standardvärden?" - }, - "media": { - "title": "Mediebibliotek", - "subtitle": "Ladda upp och hantera mediafiler", - "upload": "Ladda upp", - "uploadTitle": "Ladda upp en fil", - "uploadSubtitle": "Dra och släpp eller klicka för att ladda upp", - "uploadButton": "Välj fil", - "uploading": "Laddar upp...", - "noFiles": "Inga mediefiler ännu", - "delete": "Ta bort", - "confirmDelete": "Vill du ta bort den här filen permanent?", - "search": "Sök", - "searchPlaceholder": "Sök efter filnamn...", - "colPreview": "Förhandsgranska", - "colName": "Namn", - "colSize": "Storlek", - "colType": "Typ", - "colUploaded": "Uppladdad", - "colActions": "Åtgärder", - "copyUrl": "Kopiera URL", - "urlCopied": "URL kopierad till urklipp" - }, - "favicon": { - "title": "Favoritikon", - "subtitle": "Ladda upp och hantera webbplatsens favoritikon", - "current": "Aktuell favicon", - "uploadLabel": "Ladda upp favoritikon", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO eller SVG. Max 2MB.", - "upload": "Ladda upp", - "uploading": "Laddar upp...", - "delete": "Ta bort", - "deleting": "Tar bort...", - "saved": "Favoritikonen har sparats!", - "deleted": "Favicon har tagits bort!", - "error": "Något gick fel", - "confirmDelete": "Ta bort favicon? Webbplatsen kommer inte längre att visa en anpassad favoritikon.", - "generator": { - "title": "Generera favicon", - "text": "Text", - "bgColor": "Bakgrundsfärg", - "textColor": "Textfärg", - "rounded": "Rundade hörn", - "save": "Spara som favicon" - }, - "cancel": "Cancel" - }, - "settings": { - "title": "CMS-inställningar", - "subtitle": "Hantera nyckel/värde CMS-konfiguration", - "addSetting": "Lägg till inställning", - "edit": "Redigera", - "delete": "Ta bort", - "noSettings": "Inga inställningar hittades", - "confirmDelete": "Vill du ta bort inställningen \"{key}\"?", - "colKey": "Nyckel", - "colValue": "Värde", - "colUpdated": "Uppdaterad", - "colActions": "Åtgärder", - "form": { - "key": "Nyckel", - "keyPlaceholder": "t.ex. hotel_name", - "value": "Värde", - "valuePlaceholder": "Inställningsvärde", - "save": "Spara inställning", - "saving": "Sparar...", - "cancel": "Avbryt" - }, - "keysInDatabase": "{count} keys in database", - "managedInForm": "{count} managed in form", - "documented": "{count} documented", - "saved": "Settings saved.", - "saveFailed": "Could not save settings.", - "saveSettings": "Save settings", - "viewOnly": "You can view settings but need edit permission to change them." - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Hem", - "reload": "Ladda om", - "fullscreen": "Helskärm", - "logout": "Logga ut", - "onlineUsers": "Användare online", - "emulatorOnline": "Emulator online", - "emulatorOffline": "Emulator offline", - "dragToMove": "Dra för att flytta", - "hide": "Dölj verktygsfält", - "fullscreenExit": "Avsluta helskärm", - "show": "Visa verktygsfält", - "emulatorUnknown": "Emulatorstatus okänd" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Fildiagnostik", - "preliminary": "Förhandskontroll av adresser; innehållet valideras vid import.", - "http": "HTTP {status}", - "network": "Anslutningen misslyckades", - "timeout": "Källan svarade inte i tid", - "invalidResponse": "Källan returnerade en webbsida i stället för en fil", - "available": "Fil hittad; väntar på validering", - "recover": "Bifoga originalet och fortsätt", - "recoveryHint": "Välj {file} (högst 50 MB). Identiteten kontrolleras. Misslyckade objekt försöks igen; slutförda importer bevaras.", - "attach": "Välj den ursprungliga .nitro-filen", - "working": "Validerar eller återupptar...", - "attached": "Matchande originalfil bifogad", - "resume": "Återuppta misslyckade importer med filen", - "invalidFile": "Välj en matchande originalfil i .nitro-format på högst 50 MB och försök igen.", - "resumeError": "Uppdatera historiken och använd senaste försöket; kontrollera filen och försök igen.", - "mismatchedFile": "Den här filen tillhör en annan möbel.", - "alreadyStarted": "Återställningen har redan startat. Uppdatera historiken och använd senaste försöket.", - "notEligible": "Det här objektet kan inte återställas med en bilaga." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "En återställningskopia sparas i den här webbläsaren i 7 dagar.", + "saved": "En återställningskopia har sparats i den här webbläsaren i 7 dagar.", + "unavailable": "Återställning i webbläsaren är inte tillgänglig. Låt sidan vara öppen tills dina ändringar har sparats.", + "found": "En återställningskopia finns i den här webbläsaren, sparad", + "restore": "Återställ webbläsarkopia", + "discard": "Ta bort webbläsarkopia", + "confirmRestore": "Ersätta det aktuella formuläret med webbläsarens återställningskopia? Kontrollera innehållet innan du sparar.", + "confirmDiscard": "Ta bort den här återställningskopian från webbläsaren? Det aktuella formuläret förblir oförändrat." + }, + "nav": { + "home": "Hem", + "community": "gemenskapen", + "articles": "Artiklar", + "photos": "Foton", + "staff": "Personal", + "rankings": "Ranking", + "guilds": "Skrån", + "leaderboards": "Topplistor", + "rareValues": "Sällsynta värden", + "shop": "Handla", + "market": "Marknad", + "assistance": "Assistans", + "helpCenter": "Hjälpcenter", + "myTickets": "Mina biljetter", + "badges": "Märken", + "radio": "Radio", + "friends": "Vänner", + "messages": "Meddelanden", + "admin": "Admin", + "openMenu": "Öppna menyn", + "closeMenu": "Stäng menyn", + "drawBadge": "Rita märke", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} online", + "nitroClient": "Nitro klient", + "tagline": "En virtuell värld online där du kan skapa din egen avatar, få vänner, chatta, skapa rum och mycket mer!", + "login": "Logga in", + "or": "Eller", + "createAccount": "Skapa ett konto" + }, + "footer": { + "copyright": "© {year} - {hotel} är ett utbildningsprojekt utan vinstsyfte" + }, + "pages": { + "staff": { + "title": "Personal", + "subtitle": "Teamet bakom hotellet", + "ranksTitle": "Rank", + "ranksSubtitle": "Vad varje del av laget tar hand om", + "membersTitle": "Teammedlemmar", + "membersEmptySubtitle": "Ingen att visa just nu", + "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", + "emptyState": "Ingen personal att visa.", + "colUsername": "Användarnamn", + "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": "Topp 20 spelare efter {currency}", + "tab_credits": "Krediter", + "tab_diamonds": "Diamanter", + "tab_duckets": "Ankor", + "tab_achievement": "Prestationer", + "tab_respects": "Respekter", + "tab_onlinetime": "Onlinetid", + "emptyState": "Ingen ranking att visa ännu.", + "colAvatar": "Avatar", + "colPlayer": "Spelare" + }, + "friends": { + "title": "Vänner", + "emptySubtitle": "Du har inga vänner lagt till än", + "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", + "emptyState": "Lägg till vänner på hotellet så dyker de upp här.", + "noMotto": "Inget 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": "Meddelanden", + "subtitle": "Vänförfrågningar och offlinemeddelanden väntar på dig", + "requestsTitle": "Vänförfrågningar", + "requestsEmptySubtitle": "Ingen har bett om att bli din vän än", + "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", + "requestsEmptyState": "Inga väntande vänförfrågningar.", + "wantsToBeFriend": "vill vara din vän.", + "accept": "Acceptera", + "offlineTitle": "Offlinemeddelanden", + "offlineEmptySubtitle": "Din inkorg är tom", + "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", + "offlineEmptyState": "Du har inga offlinemeddelanden.", + "unknownUser": "Användare #{id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Inget motto", + "statRank": "Rank", + "statCredits": "Krediter", + "statRegistered": "Registrerad", + "badgesTitle": "Märken", + "badgesEmpty": "Inga märken än.", + "photosTitle": "Foton", + "photosEmpty": "Inga foton än.", + "guestbookTitle": "Gästbok", + "guestbookSubtitle": "Meddelanden på {username}s vägg", + "leaveMessage": "Lämna ett meddelande", + "guestbookPlaceholder": "Skriv något i {username}s gästbok...", + "post": "Posta", + "loginToPost": "Logga in för att lämna ett gästboksmeddelande.", + "guestbookEmpty": "Inga gästboksinlägg ännu.", + "unknownUser": "Användare #{id}", + "statDuckets": "Ankor", + "statDiamonds": "Diamanter", + "walletTitle": "Plånbok", + "friendsTitle": "Vänner", + "friendsSubtitle": "Folk på hotellet de umgås med", + "friendsEmpty": "Inga vänner att visa.", + "roomsTitle": "Rum", + "roomsSubtitle": "Rum de äger", + "roomsEmpty": "Inga rum att visa.", + "roomUntitled": "Namnlöst rum", + "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": "Ranking", + "subtitle": "De 12 bästa spelarna rankade efter poäng", + "emptyState": "Inga spelare att ranka än." + }, + "home": { + "welcome": "Välkommen till {hotelName}", + "welcomeSubtitle": "Ditt retrohotell, nu drivs av Next.js", + "welcomeBody": "Umgås, samla möbler och träffa vänner.", + "enterHotel": "Ange {hotelName}", + "onlineFriends": "Vänner online", + "noFriendsOnline": "Inga vänner online", + "register": "REGISTRERA DIG NU", + "joinNow": "Gå med i {hotelName} idag!", + "recentUsers": "Senaste användare", + "recentPhotos": "Senaste foton", + "latestNews": "Senaste nyheterna", + "newsTitle": "Senaste nyheterna", + "newsSubtitle": "Färskt från hotellet", + "allNews": "Alla nyheter →", + "allUsers": "Community →", + "noArticles": "Inga artiklar ännu.", + "noPhotos": "Inga foton än.", + "noUsers": "Inga användare online", + "latestArticle": "Senaste artikeln", + "latestUsers": "Nyaste medborgarna ({count} totalt)", + "statsOnline": "Online", + "statsCitizens": "Medborgare", + "statsRooms": "Rum", + "statsArticles": "Artiklar", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Skapa din unika look", + "featuresFurniture": "Möbler", + "featuresFurnitureDesc": "Dekorera rum med föremål", + "featuresCommunity": "Gemenskap", + "featuresCommunityDesc": "Skapa vänner och chatta", + "featuresGames": "Spel", + "featuresGamesDesc": "Tävla och ha kul", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Nyheter", + "subtitle": "De senaste tillkännagivandena, händelserna och uppdateringarna från hotellet", + "noArticles": "Inga artiklar ännu.", + "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": "← Nyheter", + "reactionsTitle": "Reaktioner", + "reactionsSubtitle": "Berätta vad du tycker", + "reaction": { + "like": "Gillar", + "love": "Kärlek", + "wow": "Wow" + }, + "removeReaction": "Klicka för att ta bort din reaktion", + "reactWith": "Reagera med {reaction}", + "noReactions": "Inga reaktioner än.", + "logIn": "Logga in", + "toReact": "att reagera.", + "commentsTitle": "Kommentarer", + "commentsSubtitle": "Gå med i konversationen", + "commentsCount": "{count} hittills", + "noComments": "Inga kommentarer än. Var den första att kommentera.", + "userNumber": "Användare #{id}", + "addComment": "Lägg till en kommentar", + "commentPlaceholder": "Skriv din kommentar...", + "postComment": "Skriv kommentar", + "toComment": "för att lämna en kommentar.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Foton", + "subtitle": "De senaste ögonblicksbilderna tagna på hotellet", + "noPhotos": "Inga foton än.", + "photoAlt": "Foto av användare #{id}", + "byUser": "av användare #{id}" + }, + "badges": { + "title": "Märken", + "subtitle": "Märkena kan du tjäna och visa upp runt hotellet", + "noBadges": "Inga märken tillgängliga ännu." + }, + "community": { + "title": "gemenskapen", + "subtitle": "Allt som händer runt hotellet på ett ställe", + "open": "Öppna →", + "links": { + "rankings": { + "title": "Ranking", + "text": "Se de rikaste spelarna på hotellet, rankade efter poäng." + }, + "staff": { + "title": "Personal", + "text": "Möt teamet som håller hotellet igång varje dag." + }, + "news": { + "title": "Nyheter", + "text": "De senaste tillkännagivandena, händelserna och uppdateringarna." + }, + "photos": { + "title": "Foton", + "text": "Ögonblicksbilder som delas av samhället från hela hotellet." + }, + "guilds": { + "title": "Skrån", + "text": "Bläddra bland grupperna som spelare har skapat och gått med i." + }, + "leaderboards": { + "title": "Topplistor", + "text": "Vem är på topp den här säsongen över hotellets statistik." + } + } + }, + "guilds": { + "title": "Skrån", + "subtitle": "Bläddra bland grupperna som spelare har skapat och gått med i", + "empty": "Inga guilds än.", + "unnamedGuild": "Namnlösa skrået", + "noDescription": "Ingen beskrivning" + }, + "guild": { + "allGuilds": "← Alla skrån", + "unnamedGuild": "Namnlösa skrået", + "noDescription": "Ingen beskrivning", + "memberSingular": "Medlem", + "memberPlural": "Medlemmar", + "founded": "Grundades", + "forumLink": "Forum →", + "discussion": "Diskussion", + "membersTitle": "Medlemmar", + "memberLowerSingular": "medlem", + "memberLowerPlural": "medlemmar", + "noMembers": "Inga medlemmar.", + "owner": "Ägare", + "noMotto": "Inget motto" + }, + "guildForum": { + "backToGuild": "← Tillbaka till guild", + "unnamedGuild": "Namnlösa skrået", + "forumTitle": "{guild} – Forum", + "threadSingular": "tråd", + "threadPlural": "trådar", + "newThread": "+ Ny tråd", + "empty": "Inga trådar i detta forum ännu.", + "colSubject": "Ämne", + "colAuthor": "Författare", + "colPosts": "Inlägg", + "colDate": "Datum", + "noSubject": "(inget ämne)", + "pinned": "Fäst", + "locked": "Låst", + "userNumber": "Användare #{id}", + "unknown": "Okänd", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Tillbaka till forumet", + "unnamedGuild": "Namnlösa skrået", + "title": "Ny tråd", + "subtitle": "i {guild}-forumet", + "subjectLabel": "Ämne", + "subjectPlaceholder": "Trådämne", + "messageLabel": "Meddelande", + "messagePlaceholder": "Skriv ditt inledande inlägg...", + "postThread": "Inlägg tråd", + "cancel": "Avbryt", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Handla", + "subtitle": "Fyll på ditt konto och få exklusiva paket, valuta och märken.", + "browsingCategory": "Bläddra i {category}-paketen.", + "all": "Alla", + "allPackages": "Alla paket", + "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", + "empty": "Inga paket tillgängliga just nu.", + "buy": "Köp", + "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": "Fyll på med PayPal", + "subtitle": "Betala säkert med PayPal och dina krediter läggs till när betalningen går igenom.", + "cancelled": "Utcheckningen avbröts – ingen betalning togs.", + "chooseAmount": "Välj ett belopp", + "notConfiguredPre": "PayPal är inte konfigurerat än. En administratör måste ställa in", + "notConfiguredAnd": "och", + "notConfiguredOptional": "(och valfritt", + "notConfiguredPost": "för sandlåda vs. live).", + "balanceTitle": "Ditt saldo", + "signedInAs": "Inloggad som {username}", + "credits": "Krediter", + "creditsPerUnit": "Krediter per 1,00 {currency}", + "rateLine": "Du får {amount} krediter per 1,00 {currency}. Krediter visas i spelet nästa gång du loggar in." + }, + "marketplace": { + "title": "Marknadsplats", + "subtitle": "Bläddra bland möbler och sällsynta möbler listade av spelare. Listor placeras i spelet och uppdateras live - gå in på hotellet för att lägga ett erbjudande.", + "activeOffers": "Aktiva erbjudanden", + "sellers": "Säljare", + "totalValue": "Totalt värde", + "activeListings": "Aktiva listor", + "mostRecentFirst": "Senast listad först", + "empty": "Det finns inga aktiva marknadsplatserbjudanden just nu. Kom tillbaka senare.", + "colOffer": "Erbjudande", + "colItem": "Objekt", + "colSeller": "Säljare", + "colPrice": "Pris", + "colListed": "Angivna", + "itemLabel": "Artikel #{id}", + "userLabel": "Användare #{id}", + "justNow": "just nu", + "minutesAgo": "{count} m sedan", + "hoursAgo": "{count} h sedan", + "daysAgo": "{count}d sedan" + }, + "rares": { + "title": "Sällsynta värden", + "subtitle": "Få en överblick över alla sällsynta på hotellet, grupperade efter kategori.", + "empty": "Vi har för närvarande inga sällsynta listade här.", + "rareCount": "{count, plural, one {# rare} other {# rares}}", + "viewRares": "Visa sällsynta →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", + "allRares": "← Alla sällsynta", + "empty": "Inga sällsynta i denna kategori ännu.", + "colRare": "Sällsynt", + "colCredits": "Krediter", + "colCurrency": "Valuta", + "creditsValue": "{value} krediter", + "duckets": "Ankor", + "diamonds": "Diamanter", + "credits": "Krediter" + }, + "redeem": { + "title": "Lös in en kupong", + "subtitle": "Har du en kupongkod? Ange den nedan för att lägga till belöningen på ditt konto.", + "enterCode": "Ange din kod", + "oncePerAccount": "Varje kupong kan endast lösas in en gång per konto.", + "balanceTitle": "Ditt saldo", + "signedInAs": "Inloggad som {username}", + "credits": "Krediter", + "instantCredit": "Inlösta belöningar krediteras omedelbart och visas i spelet nästa gång du loggar in." + }, + "help": { + "title": "Hjälpcenter", + "subtitle": "Hitta guider, supportämnen och hotellreglerna – allt du behöver för att få hjälp.", + "myTickets": "Mina biljetter →", + "topicsTitle": "Supportämnen", + "topicsSubtitle": "Bläddra i guider och svar på vanliga frågor", + "topicsEmpty": "Inga hjälpämnen än.", + "rulesTitle": "Hotellregler", + "rulesSubtitle": "Läs dessa innan du hänger på hotellet", + "rulesEmpty": "Inga regler publicerade ännu.", + "categoryEmpty": "Inga regler i denna kategori." + }, + "helpCategory": { + "back": "← Hjälpcenter", + "topicSubtitle": "Hjälpcenter ämne", + "moreTitle": "Fler hjälpämnen", + "moreSubtitle": "Hoppa till ett annat supportämne" + }, + "helpTickets": { + "title": "Hjälpbiljetter", + "subtitle": "Skicka in en biljett till personalen och spåra dina öppna förfrågningar.", + "statTotal": "Totalt antal biljetter", + "statOpen": "Öppna", + "statClosed": "Stängt", + "newTitle": "Ny biljett", + "newSubtitle": "Beskriv ditt problem så följer personalen upp", + "subjectPlaceholder": "Ämne", + "contentPlaceholder": "Beskriv ditt problem...", + "submit": "Skicka in biljett", + "listTitle": "Dina biljetter", + "listSubtitle": "Varje förfrågan du har skickat till personalen", + "listEmpty": "Du har inga biljetter ännu.", + "colId": "ID", + "colSubject": "Ämne", + "colStatus": "Status", + "colCreated": "Skapad", + "statusOpen": "Öppna", + "statusClosed": "Stängt", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "Ansök om {hotel} personal", + "subtitle": "Vi öppnar personalansökningar då och då. Om du stöter på en tjänst som du känner att du skulle passa perfekt i, tveka inte att söka den.", + "noPositionsTitle": "Inga lediga positioner", + "noPositionsBody": "Det finns för närvarande inga lediga tjänster. Kom gärna tillbaka vid ett senare tillfälle för att kolla om vi har några lediga tider då. Tack för ditt intresse.", + "noDeadline": "Ingen deadline satt", + "deadline": "Sista ansökningsdag: {date}", + "alreadyApplied": "Du har redan ansökt om {rank}", + "aboutYou": "Om dig", + "aboutPlaceholder": "Berätta för oss varför du skulle vara en stor {rank}...", + "applyFor": "Ansök om {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": "Ansök till {hotel}-teamet", + "subtitle": "Vi öppnar teamansökningar med jämna mellanrum. Om du ser ett lag du passar, tveka inte att söka!", + "noPositionsTitle": "Inga lagpositioner öppna", + "noPositionsBody": "Det finns för närvarande inga öppna lagpositioner. Vänligen kom tillbaka senare för att se efter nya öppningar. Tack!", + "pending": "Din ansökan väntar", + "aboutYou": "Om dig", + "aboutPlaceholder": "Berätta för oss varför du skulle passa bra för {rank}...", + "applyFor": "Ansök om {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": "Lyssna på hotellets radio — live DJ-set, förfrågningar och shoutouts.", + "nowPlaying": "Spelar nu", + "nothingPlaying": "Ingenting spelar just nu.", + "onAir": "På luft: {dj}", + "noDj": "Ingen DJ i luften.", + "audioUnsupported": "Din webbläsare stöder inte ljudelementet.", + "streamOffline": "Streamen är för närvarande offline.", + "exploreTitle": "Utforska radion", + "exploreSubtitle": "Schemalägg, rop, förfrågningar och mer", + "linkSchedule": "Schema", + "linkScheduleText": "Vår veckovisa line-up av DJ:s och shower.", + "linkShouts": "Ropar", + "linkShoutsText": "Shout-outs och förfrågningar från samhället.", + "linkRequests": "Förfrågningar", + "linkRequestsText": "Be DJ:n att snurra din favoritlåt.", + "linkApply": "Ansök som DJ", + "linkApplyText": "Gå med i laget och ta dig till etern.", + "linkLeaderboard": "Leaderboard", + "linkLeaderboardText": "Topplyssnare rankade efter intjänade poäng.", + "todayTitle": "Dagens schema", + "todayTitleWithDay": "Dagens schema · {day}", + "todaySubtitle": "Vad är på etern idag", + "fullWeek": "Hel vecka →", + "noShowsToday": "Inga spelningar planerade idag.", + "colTime": "Tid", + "colShow": "Visa", + "colDj": "DJ", + "untitledShow": "Namnlös show", + "userNumber": "Användare #{id}" + }, + "radioSchedule": { + "title": "Radioschema", + "subtitle": "Vår veckovisa line-up av DJ:s och shower", + "empty": "Inga spelningar planerade än.", + "colDay": "dag", + "colTime": "Tid", + "colDj": "DJ", + "colShow": "Visa", + "noShows": "Inga shower" + }, + "radioShouts": { + "title": "Radio ropar", + "subtitle": "Shout-outs och förfrågningar från samhället", + "postTitle": "Lägg upp ett rop", + "postSubtitle": "Skicka ett meddelande till DJ på luften", + "messageLabel": "Ditt meddelande", + "messagePlaceholder": "Skicka ett rop till DJ:n...", + "shoutButton": "Ropa", + "loginToPost": "Logga in för att skicka ett rop.", + "latestTitle": "Senaste ropen", + "latestSubtitle": "De senaste meddelandena från lyssnare", + "empty": "Inga rop än. Bli först!", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Radiotävlingar", + "subtitle": "Lyssna in och delta i våra senaste on-air-tävlingar", + "empty": "Inga tävlingar än.", + "contestLabel": "Tävling #{id}", + "dateUnknown": "Datum okänt" + }, + "radioGiveaways": { + "title": "Radio Giveaways", + "subtitle": "Lyssna in för din chans att vinna i våra radiopresenter", + "empty": "Inga giveaways än.", + "giveawayLabel": "Giveaway #{id}", + "dateUnknown": "Datum okänt" + }, + "radioLeaderboard": { + "title": "Leaderboard för radiolyssnare", + "subtitle": "De 50 bästa lyssnarna efter intjänade poäng när de lyssnar på radion", + "empty": "Inga lyssnarpoäng att visa än.", + "colRank": "Rank", + "colAvatar": "Avatar", + "colListener": "Lyssnare", + "colPoints": "Poäng" + }, + "radioRequests": { + "formTitle": "Skicka in en begäran", + "formSubtitle": "Be DJ:n spela din favoritlåt", + "songLabel": "Sång", + "songPlaceholder": "Titeln på låten", + "artistLabel": "Konstnär", + "artistPlaceholder": "Konstnärens namn (valfritt)", + "submitButton": "Skicka in begäran", + "loginToRequest": "Logga in för att skicka en begäran.", + "latestTitle": "Senaste förfrågningar", + "latestSubtitle": "De senast efterfrågade låtarna", + "empty": "Inga förfrågningar ännu.", + "colSong": "Sång", + "colArtist": "Konstnär", + "colRequester": "Beställare", + "colDate": "Datum", + "colStatus": "Status", + "statusPending": "Väntar", + "statusApproved": "Godkänd", + "statusPlayed": "Spelade", + "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": "Ansök om att bli Radio DJ", + "subtitle": "Berätta om dig själv och varför du skulle passa bra i etern", + "latestTitle": "Din senaste ansökan", + "statusLabel": "Status:", + "submittedOn": "· skickade in {date}", + "submitAgain": "Du kan skicka in igen nedan om dina uppgifter har ändrats.", + "formTitle": "Ansökningsblankett", + "formSubtitle": "Alla fält markerade som obligatoriska måste fyllas i", + "realNameLabel": "Riktigt namn", + "realNamePlaceholder": "Ditt fullständiga namn", + "ageLabel": "Ålder", + "availabilityLabel": "Tillgänglighet", + "availabilityPlaceholder": "Vilka dagar och tider kan du sända?", + "musicStyleLabel": "Musikstil", + "musicStylePlaceholder": "t.ex. House, Pop, Hip-Hop", + "experienceLabel": "Erfarenhet", + "optional": "(valfritt)", + "experiencePlaceholder": "Någon tidigare erfarenhet av DJ eller hosting?", + "motivationLabel": "Motivation", + "motivationPlaceholder": "Varför vill du gå med i radioteamet?", + "submitButton": "Skicka in ansökan", + "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": "Kontoinställningar", + "accountSettingsSubtitle": "Hantera din profil, säkerhet och anslutna konton", + "publicProfile": "Din offentliga profil", + "noMotto": "Inget motto", + "noEmail": "Ingen e-post i filen", + "changeMotto": "Byt motto", + "changeMottoSubtitle": "Uppdateras direkt i spelet om du är online", + "mottoPlaceholder": "Ditt motto", + "saveMotto": "Spara motto", + "securityTitle": "Säkerhet", + "securitySubtitle": "Tvåfaktorsautentisering", + "securityDescription": "Lägg till ett andra lager av skydd till ditt konto.", + "twoFactorLink": "Tvåfaktorsautentisering" + }, + "settings2fa": { + "backToSettings": "← Inställningar", + "title": "Tvåfaktorsautentisering", + "subtitle": "Lägg till ett andra lager av säkerhet med en autentiseringsapp", + "nowEnabled": "2FA är nu aktiverat. 🔒", + "disabledNotice": "2FA har inaktiverats.", + "badCode": "Den koden var inte giltig – försök igen.", + "noAppKeyPrefix": "2FA är inte tillgänglig tills", + "noAppKeyMiddle": "är konfigurerad (samma Laravel", + "noAppKeySuffix": "när din AtomCMS installerar, så att befintliga hemligheter förblir läsbara).", + "isEnabled": "2FA är aktiverat", + "onYourAccount": "på ditt konto.", + "disable": "Inaktivera 2FA", + "scanOrEnter": "Skanna eller ange denna nyckel", + "scanInstructions": "Lägg till detta i Google Authenticator / Authy och ange sedan den sexsiffriga koden för att bekräfta.", + "manualKey": "Manuell nyckel:", + "codePlaceholder": "6-siffrig kod", + "confirm": "Bekräfta", + "enableIntro": "Lägg till ett andra lager av säkerhet med en autentiseringsapp.", + "enable": "Aktivera 2FA", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Anslutna konton", + "subtitle": "Länka ett socialt konto så att du kan logga in med ett klick", + "connected": "Ansluten", + "unavailable": "Ej tillgänglig", + "login": { + "title": "Logga in", + "subtitle": "Välkommen tillbaka — logga in för att komma in på hotellet.", + "subtitle2fa": "Ange den 6-siffriga koden från din autentiseringsenhet.", + "usernamePlaceholder": "Användarnamn", + "passwordPlaceholder": "Lösenord", + "codePlaceholder": "2FA-kod", + "pleaseWait": "Vänligen vänta...", + "verify": "Verifiera", + "signIn": "Logga in", + "or": "eller", + "noAccount": "Inget konto?", + "createOne": "Skapa en", + "forgotPassword": "Glömt lösenordet?", + "errorInvalidCredentials": "Ogiltigt användarnamn eller lösenord", + "errorInvalid2fa": "Ogiltig 2FA-kod", + "welcomeBack": "Välkommen tillbaka", + "welcomeBackSub": "Logga in för att fortsätta till {hotelName}", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Skapa konto", + "subtitle": "Gå med på hotellet — det tar bara ett ögonblick.", + "username": "Användarnamn", + "email": "E-post", + "password": "Lösenord", + "confirmPassword": "Upprepa lösenordet", + "usernamePlaceholder": "Användarnamn", + "emailPlaceholder": "E-post", + "passwordPlaceholder": "Lösenord (minst 6 tecken)", + "confirmPasswordPlaceholder": "Upprepa lösenordet", + "selectOutfit": "Välj din outfit", + "termsAccept": "Jag är 18+ och accepterar villkoren och reglerna för {hotel}.", + "createAccount": "Skapa konto", + "creatingAccount": "Skapar konto...", + "redirecting": "Vidare till ditt konto...", + "alreadyHaveAccount": "Har du redan ett konto? Inloggning!", + "register": "Registrera dig", + "termsError": "Du måste acceptera villkoren och reglerna för att registrera dig.", + "usernameError": "Användarnamn krävs.", + "emailError": "Giltig e-postadress krävs.", + "passwordError": "Lösenordet måste bestå av minst 6 tecken.", + "confirmPasswordError": "Lösenord stämmer inte överens.", + "termsRequired": "Du måste acceptera villkoren och reglerna.", + "usernameRequired": "Användarnamn krävs.", + "emailRequired": "E-post krävs.", + "passwordRequired": "Lösenord krävs.", + "passwordsDontMatch": "Lösenord stämmer inte överens.", + "alreadyHaveAccountPre": "Har du redan ett konto?", + "alreadyHaveAccountLink": "Logga in", + "whoIsOnline": "Vem är online", + "usersOnline": "{count} online", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Återställ lösenord", + "subtitle": "Vi skickar en säker länk till dig via e-post för att ange ett nytt lösenord.", + "sentNotice": "Om det e-postmeddelandet är registrerat har en återställningslänk skickats. Kontrollera din inkorg.", + "emailPlaceholder": "Din e-post", + "sendResetLink": "Skicka återställningslänk", + "backToLogin": "Tillbaka till inloggning", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Ange ett nytt lösenord", + "subtitle": "Välj ett starkt lösenord som du inte använder någon annanstans.", + "passwordPlaceholder": "Nytt lösenord (minst 6 tecken)", + "resetPassword": "Återställ lösenord", + "backToLogin": "Tillbaka till inloggning" + }, + "verify": { + "verifiedTitle": "Du är redo", + "verifiedSubtitle": "E-post verifierad", + "verifiedBody": "Din e-postadress har verifierats. Du kan nu logga in och spela.", + "goToLogin": "Gå till inloggning", + "alreadyTitle": "Redan verifierad", + "alreadySubtitle": "Inget kvar att göra", + "alreadyBody": "Denna e-postadress har redan bekräftats.", + "unavailableTitle": "Försök snart igen", + "unavailableSubtitle": "Servern går inte att nå", + "unavailableBody": "Vi kunde inte nå servern för att verifiera din e-post. Försök igen länken om ett ögonblick.", + "invalidTitle": "E-postverifiering", + "invalidSubtitle": "Ogiltig eller utgången länk", + "invalidBody": "Denna verifieringslänk är inte giltig. Se till att du öppnade hela länken från din e-post, eller begär en ny.", + "backToLogin": "Tillbaka till inloggning" + }, + "banned": { + "title": "Du är förbjuden", + "subtitle": "Kontot har stängts av", + "body": "Ditt konto har stängts av från hotellet.", + "reasonLabel": "Orsak:", + "permanent": "Detta förbud är permanent.", + "expires": "Går ut {date}.", + "contactStaff": "Om du tror att detta är ett misstag, kontakta personalteamet." + }, + "maintenance": { + "title": "{hotel} är under underhåll", + "subtitle": "Vi kommer snart tillbaka", + "staffCanLogIn": "Personalen kan fortfarande logga in." + }, + "admin": { + "nav": { + "overview": "Översikt", + "dashboard": "Instrumentbräda", + "content": "Innehåll", + "articles": "Artiklar", + "tags": "Taggar", + "navigator": "Navigator", + "helpCenter": "Hjälpcenter", + "advertisements": "Annonser", + "writeableBoxes": "Skrivbara lådor", + "photos": "Foton", + "tickets": "Biljetter", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Användare och åtkomst", + "users": "Användare", + "bans": "Förbud", + "ipManagement": "IP-hantering", + "vpn": "VPN", + "applications": "Ansökningar", + "teams": "Lag", + "permissions": "Behörigheter", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "Ekonomi", + "catalog": "Katalog", + "shop": "Handla", + "transactions": "Transaktioner", + "vouchers": "Verifikationer", + "subscriptions": "Prenumerationer", + "rareValues": "Sällsynta värden", + "badges": "Märken", + "achievements": "Prestationer", + "calendar": "Kalender", + "radio": "Radio", + "radioHistory": "Radiohistoria", + "radioBanners": "Banderoller", + "radioEmbed": "Bädda in", + "radioApiKeys": "API-nycklar", + "radioModeration": "Måttlighet", + "radioSettings": "Inställningar", + "radioMonitoring": "Övervakning", + "radioPoints": "Poäng", + "radioRanks": "Rangordnar", + "radioAutodj": "Auto DJ", + "system": "System", + "commandocentrum": "Commandocentrum", + "emulator": "Emulator", + "alerts": "Varningar", + "logs": "Loggar", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Ordfilter", + "maintenance": "Underhåll", + "rooms": "Rum", + "emailTemplates": "E-postmallar", + "theme": "Tema", + "media": "Media", + "favicon": "Favoritikon", + "sounds": "Ljud", + "translations": "Översättningar", + "import": "Importera", + "settings": "Inställningar", + "backToSite": "Tillbaka till webbplatsen", + "housekeeping": "Städning", + "hotelManagementPanel": "Hotellledningspanel", + "rankLabel": "Rank {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Search menu…", + "clearMenuSearch": "Clear menu search", + "noMenuResults": "No matching pages.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "studio": "Studio", + "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" + }, + "dashboard": { + "title": "Instrumentbräda", + "subtitle": "Hotellöversikt & livestatus", + "playersOnline": "Spelare online", + "articles": "Artiklar", + "activeBans": "Aktiva förbud", + "database": "Databas", + "databaseConnected": "Ansluten", + "databaseDown": "Ner", + "usersByRank": "Användare efter rang", + "noAccountsToBreakDown": "Inga konton att dela upp ännu", + "rankLabel": "Rank {rank}", + "rankWithCount": "Rank {rank}: {count} konton", + "recentStaffActivity": "Senaste personalaktiviteten", + "viewAll": "Visa alla", + "noStaffActivityLogged": "Ingen personalaktivitet har loggats ännu", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "Artiklar", + "subtitle": "Nyhetsartiklar — 50 senaste", + "newArticle": "+ Ny artikel", + "edit": "Redigera", + "delete": "Ta bort", + "noArticles": "Inga artiklar ännu", + "confirmDelete": "Är du säker på att du vill ta bort \"{title}\"?", + "colTitle": "Titel", + "colSlug": "Snigel", + "colAuthor": "Författare", + "colCreated": "Skapad", + "colActions": "Åtgärder", + "form": { + "title": "Titel", + "titlePlaceholder": "Artikeltitel", + "slug": "Snigel", + "slugPlaceholder": "artikel-url-slug", + "category": "Kategori", + "categoryPlaceholder": "Välj en kategori", + "body": "Kropp", + "bodyPlaceholder": "Skriv ditt artikelinnehåll...", + "image": "Bild", + "imagePlaceholder": "https://example.com/image.png", + "thumbnail": "Miniatyrbild", + "thumbnailPlaceholder": "https://example.com/thumb.png", + "published": "Publicerad", + "featured": "Utvalda", + "save": "Spara artikeln", + "saving": "Sparar...", + "deleteArticle": "Ta bort artikel", + "deleteConfirm": "Denna åtgärd kan inte ångras. Artikeln kommer att tas bort permanent.", + "cancel": "Avbryt", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "Taggar", + "subtitle": "Artikeltaggar/kategorier", + "addTag": "Lägg till tagg", + "name": "Namn", + "namePlaceholder": "Taggnamn", + "backgroundColour": "Bakgrundsfärg", + "createTag": "Skapa tagg", + "editTag": "Redigera tagg", + "updateTag": "Uppdatera taggen", + "deleteTag": "Ta bort tagg", + "confirmDelete": "Ta bort \"{name}\"?", + "noTags": "Inga taggar ännu", + "colId": "ID", + "colTag": "Tagga", + "colColour": "Färg", + "colUsedBy": "Används av", + "colCreated": "Skapad", + "colActions": "Åtgärder", + "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": "Platta kategorier", + "publicRooms": "Offentliga rum", + "addCategory": "Lägg till kategori", + "editCategory": "Redigera kategori", + "deleteCategory": "Ta bort kategori", + "categoryName": "Kategorinamn", + "categoryNamePlaceholder": "t.ex. Chill & Chat", + "categoryOrder": "Beställ", + "roomName": "Rumsnamn", + "roomNamePlaceholder": "t.ex. Welcome Lounge", + "roomId": "Rums-ID", + "roomIdPlaceholder": "Numeriskt rums-ID", + "save": "Spara", + "cancel": "Avbryt", + "noCategories": "Inga kategorier ännu", + "noPublicRooms": "Inga offentliga rum ännu", + "colId": "ID", + "colName": "Namn", + "colOrder": "Beställ", + "colRooms": "Rum", + "colActions": "Åtgärder", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Hjälpcenter", + "subtitle": "Supportinlägg och FAQ-hantering", + "entries": "Inlägg", + "newEntry": "+ Ny post", + "edit": "Redigera", + "delete": "Ta bort", + "noEntries": "Inga inlägg ännu", + "confirmDelete": "Ta bort \"{title}\"?", + "colId": "ID", + "colTitle": "Titel", + "colCategory": "Kategori", + "colCreated": "Skapad", + "colActions": "Åtgärder", + "form": { + "title": "Titel", + "titlePlaceholder": "Bidragstitel", + "category": "Kategori", + "categoryPlaceholder": "Välj kategori", + "body": "Kropp", + "bodyPlaceholder": "Skriv svaret...", + "save": "Spara posten", + "saving": "Sparar...", + "deleteEntry": "Ta bort post", + "cancel": "Avbryt" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Annonser", + "subtitle": "Hantera hotellannonser och reklambanners", + "newAd": "+ Ny annons", + "edit": "Redigera", + "delete": "Ta bort", + "noAds": "Inga annonser än", + "confirmDelete": "Vill du ta bort den här annonsen?", + "colId": "ID", + "colName": "Namn", + "colImage": "Bild", + "colUrl": "URL", + "colViews": "Visningar", + "colStatus": "Status", + "colCreated": "Skapad", + "colActions": "Åtgärder", + "form": { + "name": "Namn", + "namePlaceholder": "Annonsens namn", + "image": "Bildens URL", + "imagePlaceholder": "https://example.com/banner.png", + "url": "Måladress", + "urlPlaceholder": "https://example.com", + "enabled": "Aktiverad", + "save": "Spara annonsen", + "saving": "Sparar...", + "deleteAd": "Ta bort annonsen", + "cancel": "Avbryt" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Skrivbara lådor", + "subtitle": "Innehållspaneler som visas över hela hotellet och CMS", + "newBox": "Ny låda", + "edit": "Redigera", + "delete": "Ta bort", + "noBoxes": "Inga skrivbara rutor ännu", + "confirmDelete": "Ta bort den här rutan?", + "colId": "ID", + "colName": "Namn", + "colLocation": "Plats", + "colUpdated": "Uppdaterad", + "colActions": "Åtgärder", + "form": { + "name": "Namn", + "namePlaceholder": "Boxens namn", + "location": "Plats", + "locationPlaceholder": "t.ex. hemsida, sidofält", + "content": "Innehåll", + "contentPlaceholder": "Skriv lådans innehåll...", + "enabled": "Aktiverad", + "save": "Spara box", + "saving": "Sparar...", + "deleteBox": "Ta bort ruta", + "cancel": "Avbryt", + "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": "Fotomoderering", + "subtitle": "Senaste kamerafoton i spelet", + "delete": "Ta bort", + "approve": "Godkänn", + "noPhotos": "Inga foton att moderera", + "confirmDelete": "Vill du ta bort det här fotot permanent?", + "colId": "ID", + "colPreview": "Förhandsgranska", + "colUser": "Användare", + "colRoom": "Rum", + "colTimestamp": "Tidsstämpel", + "colActions": "Åtgärder", + "photoAlt": "Användarfoto #{id}", + "byUser": "av {username}", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Användare", + "subtitle": "Bläddra, sök och hantera hotellkonton", + "search": "Sök", + "searchPlaceholder": "Sök efter användarnamn, e-post eller ID...", + "searchResults": "{count, plural, one {# result} other {# results}} för \"{query}\"", + "noResults": "Inga användare hittades", + "colId": "ID", + "colUsername": "Användarnamn", + "colEmail": "E-post", + "colRank": "Rank", + "colOnline": "Online", + "colRegistered": "Registrerad", + "colLastOnline": "Senast online", + "colActions": "Åtgärder", + "yes": "Ja", + "no": "Nej", + "edit": "Redigera", + "setRank": "Sätt rang", + "disconnect": "Koppla från", + "alert": "Varning", + "ban": "Förbud", + "detail": { + "title": "Användare: {username}", + "subtitle": "Kontoinformation och hantering", + "overview": "Översikt", + "actions": "Åtgärder", + "username": "Användarnamn", + "email": "E-post", + "motto": "Motto", + "rank": "Rank", + "credits": "Krediter", + "duckets": "Ankor", + "diamonds": "Diamanter", + "online": "Online", + "registered": "Registrerad", + "lastOnline": "Senast online", + "ipAddress": "IP-adress", + "machineId": "Maskin-ID", + "sendAlert": "Skicka varning", + "sendMessage": "Skicka meddelande", + "disconnectUser": "Koppla bort användare", + "banUser": "Förbjud användare", + "resetPassword": "Återställ lösenord", + "deleteUser": "Ta bort användare", + "confirmDelete": "Är du säker på att du vill ta bort {username}? Detta kan inte ångras.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Redigera användare: {username}", + "subtitle": "Ändra kontouppgifter", + "username": "Användarnamn", + "usernamePlaceholder": "Användarnamn", + "email": "E-post", + "emailPlaceholder": "användare@exempel.com", + "motto": "Motto", + "mottoPlaceholder": "Användarmotto", + "rank": "Rank", + "credits": "Krediter", + "duckets": "Ankor", + "diamonds": "Diamanter", + "save": "Spara ändringar", + "saving": "Sparar...", + "cancel": "Avbryt" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Förbud", + "subtitle": "Hantera konto-, IP- och maskinförbud", + "newBan": "Nytt förbud", + "edit": "Redigera", + "delete": "Ta bort", + "noBans": "Inga förbud än", + "confirmDelete": "Ta bort detta förbud?", + "colId": "ID", + "colValue": "Värde", + "colType": "Typ", + "colReason": "Anledning", + "colBannedBy": "Banad av", + "colExpires": "Upphör att gälla", + "colCreated": "Skapad", + "colActions": "Åtgärder", + "form": { + "value": "Värde", + "valuePlaceholder": "Användarnamn, IP eller maskin-ID", + "type": "Typ", + "typeUser": "Användare", + "typeIp": "IP", + "typeMachine": "Maskin", + "reason": "Anledning", + "reasonPlaceholder": "Förbud anledning", + "expiresAt": "Går ut kl", + "permanent": "Permanent", + "save": "Spara förbud", + "saving": "Sparar...", + "cancel": "Avbryt" + }, + "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-hantering", + "subtitle": "Hantera IP-vitlista och svartlista", + "whitelist": "Vitlista", + "blacklist": "Svartlista", + "addIp": "Lägg till IP", + "ipAddress": "IP-adress", + "ipAddressPlaceholder": "t.ex. 127.0.0.1", + "reason": "Anledning", + "reasonPlaceholder": "Anledning till notering", + "add": "Lägg till", + "remove": "Ta bort", + "confirmRemove": "Ta bort denna IP från {list}?", + "noWhitelistedIps": "Inga vitlistade IP-adresser", + "noBlacklistedIps": "Inga svartlistade IP-adresser", + "colIp": "IP", + "colReason": "Anledning", + "colAdded": "Tillagd", + "colActions": "Åtgärder", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "VPN/proxydetektion", + "subtitle": "Konfigurera VPN- och proxydetekteringsinställningar", + "enabled": "Aktiverad", + "apiKey": "API-nyckel", + "apiKeyPlaceholder": "Din VPN-detektions-API-nyckel", + "apiKeyHint": "Lämna tomt för att inaktivera", + "blockOnDetect": "Blockera vid upptäckt", + "blockOnDetectHint": "Blockera automatiskt användare som upptäcks bakom en VPN eller proxy", + "save": "Spara inställningar", + "saving": "Sparar...", + "settingsSaved": "VPN-inställningarna har sparats", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Personalansökningar", + "subtitle": "Väntande och granskade personalansökningar", + "pending": "Väntar", + "approved": "Godkänd", + "rejected": "Avvisad", + "noApplications": "Inga ansökningar ännu", + "colId": "ID", + "colApplicant": "Sökande", + "colPosition": "Position", + "colStatus": "Status", + "colSubmitted": "Inlämnad", + "colActions": "Åtgärder", + "review": "Granska", + "approve": "Godkänn", + "reject": "Avvisa", + "confirmApprove": "Godkänna {username} för {position}?", + "confirmReject": "Avvisa {username}s ansökan om {position}?", + "detail": { + "title": "Ansökan av {username}", + "subtitle": "För {position}", + "about": "Om den sökande", + "message": "Ansökan meddelande", + "status": "Status", + "submitted": "Inlämnad", + "noMessage": "Inget meddelande tillhandahålls" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Lag", + "subtitle": "Definiera personalens rankningsnamn och beskrivningar", + "addRank": "Lägg till rang", + "editRank": "Redigera rang", + "deleteRank": "Ta bort rang", + "noTeams": "Inga rangdefinitioner ännu", + "confirmDelete": "Ta bort rank {id} definition?", + "colId": "ID", + "colRank": "Rank", + "colName": "Namn", + "colBadge": "Märke", + "colColour": "Färg", + "colActions": "Åtgärder", + "form": { + "rankId": "Rang-ID", + "rankIdPlaceholder": "Numeriskt rang-ID", + "name": "Namn", + "namePlaceholder": "t.ex. Administratör", + "badge": "Märkekod", + "badgePlaceholder": "t.ex. ADM001", + "colour": "Färg", + "colourPlaceholder": "t.ex. #ff0000", + "save": "Spara teamdefinition", + "saving": "Sparar...", + "cancel": "Avbryt" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "Behörigheter", + "subtitle": "Hantera rankbaserade behörigheter för adminpanelen", + "addPermission": "Lägg till behörighet", + "editPermission": "Redigera behörighet", + "deletePermission": "Ta bort behörighet", + "noPermissions": "Inga behörigheter har konfigurerats ännu", + "confirmDelete": "Vill du ta bort den här behörigheten?", + "colId": "ID", + "colRank": "Rank", + "colPermission": "Tillstånd", + "colCreated": "Skapad", + "colActions": "Åtgärder", + "form": { + "rankId": "Rang-ID", + "rankIdPlaceholder": "Minsta rang krävs", + "permission": "Behörighetsnyckel", + "permissionPlaceholder": "t.ex. admin.articles.manage", + "save": "Spara behörighet", + "saving": "Sparar...", + "cancel": "Avbryt" + } + }, + "catalog": { + "title": "Katalog", + "subtitle": "Bläddra och hantera katalogsidor och objekt", + "pages": "Sidor", + "items": "Föremål", + "addPage": "Lägg till sida", + "editPage": "Redigera sida", + "deletePage": "Ta bort sida", + "addItem": "Lägg till objekt", + "editItem": "Redigera objekt", + "deleteItem": "Ta bort objekt", + "noPages": "Inga katalogsidor ännu", + "noItems": "Inga föremål på denna sida", + "confirmDeletePage": "Ta bort katalogsidan \"{name}\"?", + "confirmDeleteItem": "Vill du ta bort det här objektet?", + "colId": "ID", + "colName": "Namn", + "colIcon": "Ikon", + "colOrder": "Beställ", + "colItems": "Föremål", + "colEnabled": "Aktiverad", + "colActions": "Åtgärder", + "colItemId": "Artikel-ID", + "colItemName": "Objektets namn", + "colCostCredits": "Kostnad (krediter)", + "colCostPoints": "Kostnad (poäng)", + "colLimited": "Begränsad", + "pageForm": { + "name": "Namn", + "namePlaceholder": "Sidnamn", + "icon": "Ikon ID", + "iconPlaceholder": "Numeriskt ikon-ID", + "order": "Beställ", + "enabled": "Aktiverad", + "parent": "Föräldrasida", + "parentNone": "Ingen (root)", + "save": "Spara sidan", + "saving": "Sparar...", + "cancel": "Avbryt" + }, + "itemForm": { + "itemId": "Artikel-ID", + "itemName": "Objektets namn", + "costCredits": "Kostnad i krediter", + "costDuckets": "Kostnad i duckets", + "costDiamonds": "Kostnad i diamanter", + "limitedStack": "Begränsad stackstorlek", + "limitedSold": "Begränsat sålt", + "save": "Spara objekt", + "saving": "Sparar...", + "cancel": "Avbryt" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Handla", + "subtitle": "Hantera paket och beställningar", + "packages": "Paket", + "orders": "Beställningar", + "newPackage": "+ Nytt paket", + "edit": "Redigera", + "delete": "Ta bort", + "viewOrder": "Visa", + "noPackages": "Inga butikspaket ännu", + "noOrders": "Inga beställningar än", + "confirmDelete": "Vill du ta bort det här paketet?", + "colId": "ID", + "colName": "Namn", + "colPrice": "Pris", + "colCurrency": "Valuta", + "colType": "Typ", + "colSold": "Såld", + "colEnabled": "Aktiverad", + "colActions": "Åtgärder", + "colOrderId": "Beställnings-ID", + "colCustomer": "Kund", + "colPackage": "Paket", + "colAmount": "Belopp", + "colStatus": "Status", + "colDate": "Datum", + "statusPending": "Väntar", + "statusCompleted": "Avslutad", + "statusRefunded": "Återbetalas", + "form": { + "name": "Namn", + "namePlaceholder": "Paketnamn", + "description": "Beskrivning", + "descriptionPlaceholder": "Paketbeskrivning", + "price": "Pris", + "currency": "Valuta", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Typ", + "typeCredits": "Krediter", + "typeDuckets": "Ankor", + "typeDiamonds": "Diamanter", + "typeBadge": "Märke", + "typeFurni": "Möbler", + "typeRank": "Rank", + "amount": "Belopp", + "badgeCode": "Märkekod", + "badgeCodePlaceholder": "t.ex. VIP001", + "rankId": "Rang-ID", + "furniItems": "Möbelartiklar", + "enabled": "Aktiverad", + "save": "Spara paketet", + "saving": "Sparar...", + "cancel": "Avbryt", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "Transaktioner", + "subtitle": "PayPal betalningslogg", + "noTransactions": "Inga transaktioner ännu", + "colId": "ID", + "colUser": "Användare", + "colAmount": "Belopp", + "colCurrency": "Valuta", + "colPackage": "Paket", + "colStatus": "Status", + "colDate": "Datum", + "colActions": "Åtgärder", + "statusCompleted": "Avslutad", + "statusPending": "Väntar", + "statusFailed": "Misslyckades", + "statusRefunded": "Återbetalas", + "detail": { + "title": "Transaktion #{id}", + "paypalId": "PayPal-ID", + "payerEmail": "Betalarens e-post", + "grossAmount": "Bruttobelopp", + "fee": "Avgift", + "netAmount": "Nettobelopp" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Butikskuponger", + "subtitle": "Hantera inlösbara kupongkoder", + "newVoucher": "+ Ny kupong", + "edit": "Redigera", + "delete": "Ta bort", + "noVouchers": "Inga kuponger ännu", + "confirmDelete": "Vill du ta bort kupongen \"{code}\"?", + "colId": "ID", + "colCode": "Kod", + "colValue": "Värde", + "colType": "Typ", + "colUses": "Användning / Max", + "colExpires": "Upphör att gälla", + "colCreated": "Skapad", + "colActions": "Åtgärder", + "form": { + "code": "Kod", + "codePlaceholder": "t.ex. SOMMAR 2025", + "value": "Värde", + "type": "Typ", + "typeCredits": "Krediter", + "typeDuckets": "Ankor", + "typeDiamonds": "Diamanter", + "typeBadge": "Märke", + "typeFurni": "Möbler", + "typeRank": "Rank", + "badgeCode": "Märkekod", + "badgeCodePlaceholder": "t.ex. VIP001", + "rankId": "Rang-ID", + "maxUses": "Max använder", + "maxUsesPlaceholder": "0 = obegränsat", + "expiresAt": "Går ut kl", + "enabled": "Aktiverad", + "save": "Spara kupong", + "saving": "Sparar...", + "cancel": "Avbryt", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Prenumerationer", + "subtitle": "Aktiva återkommande prenumerationer", + "noSubscriptions": "Inga aktiva prenumerationer", + "cancel": "Avbryt", + "confirmCancel": "Vill du avsluta prenumerationen på {username}?", + "colId": "ID", + "colUser": "Användare", + "colPackage": "Paket", + "colAmount": "Belopp", + "colInterval": "Intervall", + "colStarted": "Startade", + "colNextBilling": "Nästa fakturering", + "colStatus": "Status", + "colActions": "Åtgärder", + "statusActive": "Aktiv", + "statusCancelled": "Avbruten", + "statusExpired": "Utgått", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Sällsynta värden", + "subtitle": "Hantera sällsynta värdekategorier och artikelpriser", + "categories": "Kategorier", + "items": "Föremål", + "addCategory": "Lägg till kategori", + "editCategory": "Redigera kategori", + "deleteCategory": "Ta bort kategori", + "noCategories": "Inga sällsynta värdekategorier ännu", + "confirmDeleteCategory": "Vill du ta bort kategorin \"{name}\" och alla dess objekt?", + "colId": "ID", + "colName": "Namn", + "colItems": "Föremål", + "colUpdated": "Uppdaterad", + "colActions": "Åtgärder", + "colItemName": "Objektets namn", + "colCredits": "Krediter", + "colPoints": "Poäng", + "colPointType": "Punkttyp", + "categoryForm": { + "name": "Namn", + "namePlaceholder": "Kategorinamn", + "save": "Spara kategori", + "saving": "Sparar...", + "cancel": "Avbryt" + }, + "itemForm": { + "itemName": "Objektets namn", + "itemNamePlaceholder": "t.ex. Throne", + "credits": "Kreditvärde", + "points": "Poängvärde", + "pointType": "Punkttyp", + "pointTypeDuckets": "Ankor", + "pointTypeDiamonds": "Diamanter", + "save": "Spara objekt", + "saving": "Sparar...", + "cancel": "Avbryt", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Märken", + "subtitle": "Ladda upp, ge och hantera märkeskatalog", + "upload": "Ladda upp", + "giveBadge": "Ge märke", + "catalogue": "Katalog", + "uploadTitle": "Ladda upp ett nytt märke", + "uploadSubtitle": "Ladda upp en märkesbildfil", + "badgeCode": "Märkekod", + "badgeCodePlaceholder": "t.ex. VIP001", + "badgeFile": "Märkefil", + "badgeFileHint": "PNG eller GIF, rekommenderas 40x40", + "uploadButton": "Ladda upp", + "uploading": "Laddar upp...", + "giveTitle": "Ge märket till användaren", + "giveSubtitle": "Ge ett märke till en specifik användare", + "username": "Användarnamn", + "usernamePlaceholder": "Målanvändarnamn", + "giveButton": "Ge märke", + "giving": "Ge...", + "catalogueTitle": "Märkekatalog", + "catalogueSubtitle": "Alla tillgängliga märken på hotellet", + "noBadges": "Inga märken i katalogen", + "search": "Sök märken", + "searchPlaceholder": "Sök med kod eller namn...", + "colCode": "Kod", + "colImage": "Bild", + "colName": "Namn", + "colDescription": "Beskrivning", + "colActions": "Åtgärder", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Prestationer", + "subtitle": "Skrivskyddad lista över prestationer i spelet", + "noAchievements": "Inga prestationer har konfigurerats", + "colId": "ID", + "colName": "Namn", + "colCategory": "Kategori", + "colLevels": "Nivåer", + "colReward": "Belöning", + "colProgress": "Framsteg", + "levelLabel": "Nivå {level}", + "rewardCredits": "{count} krediter", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Kalenderkampanjer", + "subtitle": "Skrivskyddad lista över kalenderkampanjer och evenemang", + "noCampaigns": "Inga kalenderkampanjer än", + "colId": "ID", + "colName": "Namn", + "colStart": "Starta", + "colEnd": "Slut", + "colType": "Typ", + "colReward": "Belöning", + "colActions": "Åtgärder", + "detail": { + "title": "Kampanj: {name}", + "subtitle": "Kalenderhändelsedetaljer", + "days": "dagar", + "dayLabel": "Dag {day}", + "reward": "Belöning", + "noDays": "Inga dagar har konfigurerats för den här kampanjen", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Radiomoderering", + "subtitle": "Senaste ropen, DJ-applikationer och on-air-scheman (25 senaste av varje).", + "moderation": "Måttlighet", + "shouts": "Ropar", + "applications": "Ansökningar", + "schedules": "Scheman", + "settings": "Inställningar", + "embed": "Bädda in", + "ranks": "Rangordnar", + "history": "Historia", + "apiKeys": "API-nycklar", + "points": "Poäng", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Radioövervakning", + "subtitle": "Skrivskyddad live-prob för de konfigurerade radioändpunkterna (radio_now_playing_api_url, radio_listeners_api_url). Varje begäran misslyckas mjukt med en {timeout}s timeout — ingen data skrivs. Konfigurera webbadresser under Inställningar.", + "stream": "Streama", + "online": "Online", + "offline": "Offline", + "notConfigured": "Ej konfigurerad", + "nowPlaying": "Spelar nu", + "nowPlayingApi": "Nu spelas API", + "listenersApi": "Listeners API", + "listeners": "Lyssnare", + "currentSong": "Aktuell låt", + "bitrate": "Bithastighet", + "status": "Status", + "noNowPlayingHint": "ingen nu-spelande API-uppsättning", + "noListenersHint": "ingen lyssnars API inställd", + "endpointDiagnostics": "Slutpunktsdiagnostik", + "diagnosticsLegend": "OK: tillgänglig · WARN: inte konfigurerad · ERROR: begäran misslyckades eller tog för lång tid.", + "streamUrl": "Streama URL", + "unreachable": "oåtkomlig", + "refresh": "Uppdatera" + }, + "user": "Användare", + "message": "Meddelande", + "posted": "Postat", + "realName": "Riktigt namn", + "age": "Ålder", + "style": "Stil", + "applied": "Tillämpas", + "day": "dag", + "start": "Starta", + "end": "Slut", + "show": "Visa", + "status": "Status", + "active": "aktiv", + "inactive": "inaktiv", + "hidden": "dolda", + "activeSchedules": "Aktiva scheman", + "noShouts": "Inga rop att moderera", + "noApplications": "Inga ansökningar inlämnade.", + "noSchedules": "Inga scheman har konfigurerats.", + "deleteShout": "Ta bort", + "confirmDeleteShout": "Ta bort det här ropet?", + "pendingApplications": "Väntande ansökningar", + "settingsForm": { + "title": "Radioinställningar", + "subtitle": "Redigeringar skriver till website_settings (radio_*-nycklar) och bryter cacheminnet för körtidsinställningar. Booleans använder 0/1.", + "enabled": "Aktiverad", + "disabled": "Inaktiverad", + "totalKeys": "Totalt nycklar", + "configured": "Konfigurerad", + "curatedHint": "utvalda nycklar med ett värde", + "customKeys": "Anpassade nycklar", + "saveAll": "Spara alla", + "singleKey": "Lägg till/skriv över en enda nyckel", + "keyPlaceholder": "radio_custom_key", + "valuePlaceholder": "värde", + "commentPlaceholder": "kommentar (valfritt)", + "saveSingle": "Spara", + "otherSettings": "Andra radioinställningar", + "dbError": "Det gick inte att läsa in inställningar (databasen är inte tillgänglig). Standardinställningar kommer att skapas vid spara." + }, + "embedPage": { + "title": "Radio bädda in", + "subtitle": "Kopieringsfärdig inbäddningskod för livestreamen. Skrivskyddad — ingenting här skriver till databasen. Konfigurera webbadressen för stream i Radioinställningar (radio_stream_url).", + "streamUrl": "Streama URL", + "configured": "Konfigurerad", + "missing": "Saknas", + "radioName": "Radionamn", + "nowPlayingApi": "Nu spelas API", + "set": "Ställ in", + "notSet": "Inte inställt", + "noStreamUrl": "Ingen stream-URL har konfigurerats", + "noStreamUrlText": "Det finns ingen radio_stream_url inställd, så det finns inget att bädda in ännu.", + "goToSettings": "Gå till Radioinställningar", + "livePreview": "Live förhandsvisning", + "livePreviewText": "Detta är den blotta audio-spelaren som besökare kommer att se den. Tryck på play för att bekräfta att streamen är tillgänglig.", + "source": "Källa", + "audioSnippet": "Utdrag från ljudspelare", + "audioSnippetDesc": "Drop-in HTML5-ljudspelare pekade rakt mot strömmen. Fungerar överallt där vanlig HTML är tillåtet.", + "iframeSnippet": "Iframe-omslagsutdrag", + "iframeSnippetDesc": "Bäddar in webbplatsens egen radiospelaresida i en iframe – behåller din styling och information som spelas nu. Justera bredd/höjd efter smak.", + "audioUnsupported": "Din webbläsare stöder inte ljudelementet." + }, + "banners": { + "title": "Banderoller", + "heading": "Radiobanderoller", + "description": "Reklambanners som visas på radiosidan, sorterade efter sorteringsordning.", + "addBanner": "Lägg till banner", + "createBanner": "Skapa banner", + "deleteBanner": "Ta bort banner", + "noBanners": "Inga banners än – lägg till en ovan.", + "existing": "Befintliga banners ({count})", + "save": "Spara", + "delete": "Ta bort", + "byUser": "av användare {id}", + "active": "aktiv", + "hidden": "dolda", + "bannerAlt": "Radio banderoll", + "statusActive": "Aktiv", + "statusHidden": "Dold", + "dbError": "Det gick inte att ladda banners (databasen är inte tillgänglig).", + "form": { + "imagePath": "Bildsökväg / URL", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Titel", + "description": "Beskrivning", + "sortOrder": "Sorteringsordning", + "active": "Aktiv" + } + }, + "ranksForm": { + "title": "Radio Ranks", + "subtitle": "DJ / personal rangordnas på radioapplikationer.", + "dbError": "Kunde inte läsa in rankningar (databasen är inte tillgänglig).", + "active": "Aktiv", + "addRank": "Lägg till rang", + "name": "Namn", + "badgeCode": "Märkekod", + "description": "Beskrivning", + "createRank": "Skapa rang", + "existing": "Befintliga rankningar ({count})", + "noRanks": "Inga rankningar än – lägg till en ovan.", + "activeLabel": "aktiv", + "inactiveLabel": "inaktiv", + "save": "Spara", + "deleteRank": "Ta bort rank #{id}" + }, + "historyPage": { + "title": "Radiospelshistorik", + "subtitle": "Tidigare DJ-shower och sändningstid (radio_history), senaste först. Skrivskyddad logg över vem som var i luften, när och hur många lyssnare som lyssnade.", + "dbError": "Det gick inte att läsa in radiohistorik (databasen är inte tillgänglig).", + "showsLogged": "Visar loggade", + "onAirNow": "På luft nu", + "uniqueDjs": "Unika DJs", + "peakListeners": "Topplyssnare", + "empty": "Ingen radiohistorik inspelad än.", + "showLog": "Visa logg ({count})", + "colDj": "DJ", + "colShow": "Visa", + "colStarted": "Startade", + "colEnded": "Slutade", + "colAirtime": "Sändningstid", + "colListeners": "Lyssnare", + "colNotes": "Anteckningar", + "onAir": "på luft" + }, + "apiKeysForm": { + "title": "Radio API-nycklar", + "subtitle": "API-nycklar för externa radiointegrationer (radio_api_keys). Nycklar genereras på serversidan och visas maskerade - kopiera hela värdet från databasen när de utfärdas första gången.", + "dbError": "Det gick inte att läsa in API-nycklar (databasen är inte tillgänglig).", + "totalKeys": "Totalt nycklar", + "active": "Aktiv", + "inactive": "Inaktiv", + "generateKey": "Generera nyckel", + "generateHint": "Den hemliga nyckeln genereras automatiskt med kryptografisk slumpmässighet - du anger den inte.", + "name": "Namn", + "namePlaceholder": "AzureCast-bryggan", + "rateLimit": "Prisgräns (förfrågningar/min)", + "allowedIps": "Tillåtna IP-adresser (valfritt)", + "allowedIpsPlaceholder": "kommaseparerad, blank = valfri", + "generate": "Generera nyckel", + "existingKeys": "Befintliga nycklar ({count})", + "noKeys": "Inga API-nycklar ännu - generera en ovan.", + "colName": "Namn", + "colKey": "Nyckel", + "colAllowedIps": "Tillåtna IP-adresser", + "colRateLimit": "Prisgräns", + "colLastUsed": "Senast använd", + "colExpires": "Upphör att gälla", + "colStatus": "Status", + "colActions": "Åtgärder", + "maskedHint": "Endast de första 8 tecknen visas", + "any": "någon", + "activeLabel": "aktiv", + "inactiveLabel": "inaktiv", + "deactivate": "Inaktivera", + "activate": "Aktivera", + "delete": "Ta bort" + }, + "pointsForm": { + "title": "Radiolyssnarpoäng", + "subtitle": "Belöna lyssnare med valuta för tid på radio. Redigeringar skriver till website_settings (radio_points_*-nycklar) och bryter cacheminnet för körtidsinställningar. Booleans använder 0/1.", + "saved": "Sparad", + "points": "Poäng", + "enabled": "Aktiverad", + "disabled": "Inaktiverad", + "perMinute": "Per minut", + "paidIn": "betalas i {currency}", + "maxPerDay": "Max/dag", + "unlimited": "Obegränsad", + "minListeners": "Min lyssnare", + "settings": "Inställningar", + "pointsEnabled": "Poäng aktiverade", + "pointsEnabledHint": "Huvudströmbrytare för att ge lyssnarpoäng.", + "currency": "Valuta", + "currencyHint": "Till vilken plånbok poängen betalas in.", + "pointsPerMinute": "Poäng per minut", + "pointsPerMinuteHint": "Belopp som tilldelas för varje hel minut av lyssning.", + "maxPerDayHint": "Dagligt tak per användare. Använd 0 för obegränsat.", + "minListenersHint": "Poäng delas bara ut när åtminstone så många personer är inställda.", + "save": "Spara poänginställningar" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Reservspellista (radio_auto_dj_playlist) som radion roterar genom när ingen live-DJ strömmar. Beställs efter sorteringsordning sedan titel.", + "dbError": "Det gick inte att ladda AutoDJ-spellistan (databasen är inte tillgänglig).", + "tracks": "Spår", + "active": "Aktiv", + "inactive": "Inaktiv", + "addTrack": "Lägg till spår", + "titlePlaceholder": "Spårets titel", + "artist": "Konstnär", + "album": "Album", + "artworkUrl": "Konstverk URL", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Varaktighet (sekunder)", + "durationPlaceholder": "t.ex. 215", + "sortOrder": "Sorteringsordning", + "playlist": "Spellista ({count})", + "noTracks": "Inga AutoDJ-spår ännu — lägg till en ovan.", + "colOrder": "Beställ", + "colTitle": "Titel", + "colArtist": "Konstnär", + "colAlbum": "Album", + "colDuration": "Varaktighet", + "colPlays": "Spelar", + "colLastPlayed": "Senast spelad", + "colStatus": "Status", + "colActions": "Åtgärder", + "activeLabel": "aktiv", + "inactiveLabel": "inaktiv", + "deactivate": "Inaktivera", + "activate": "Aktivera", + "delete": "Ta bort", + "trackTitle": "Titel" + }, + "moderationPage": { + "title": "DJ Moderering", + "subtitle": "Granska och ta bort radiorop (50 senaste).", + "recentShouts": "Senaste rop ({count})" + } + }, + "commandocentrum": { + "title": "Commandocentrum", + "subtitle": "Diagnostik, RCON-kontroller och användarhantering", + "diagnostics": "Diagnostik", + "rcon": "RCON", + "userActions": "Användaråtgärder", + "diagnosticsTitle": "Emulatordiagnostik", + "memoryUsage": "Minnesanvändning", + "uptime": "Upptid", + "onlineUsers": "Onlineanvändare", + "roomsLoaded": "Rum laddade", + "refresh": "Uppdatera", + "rconTitle": "RCON-kommandon", + "rconPlaceholder": "Ange RCON-kommando...", + "rconSend": "Skicka", + "rconSending": "Skickar...", + "rconResponse": "Svar", + "userActionsTitle": "Användaråtgärder", + "username": "Användarnamn", + "usernamePlaceholder": "Målanvändarnamn", + "action": "Åtgärd", + "execute": "Utför", + "actions": { + "disconnect": "Koppla från", + "alert": "Skicka varning", + "giveCredits": "Ge krediter", + "giveBadge": "Ge märke", + "givePoints": "Ge poäng", + "ban": "Förbud", + "kick": "Sparka" + }, + "messagePlaceholder": "Meddelande (för varningar)...", + "amountPlaceholder": "Belopp...", + "badgePlaceholder": "Märkekod...", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Emulator Config", + "subtitle": "Visa och redigera emulatorinställningar och språktexter", + "settings": "Inställningar", + "texts": "Texter", + "search": "Sök", + "searchPlaceholder": "Sök nycklar...", + "noSettings": "Inga inställningar hittades", + "noTexts": "Inga texter hittades", + "edit": "Redigera", + "save": "Spara", + "saving": "Sparar...", + "cancel": "Avbryt", + "colKey": "Nyckel", + "colValue": "Värde", + "colType": "Typ", + "colActions": "Åtgärder", + "editDialog": { + "title": "Redigera: {key}", + "value": "Värde", + "valuePlaceholder": "Ange värde...", + "save": "Spara ändringar", + "cancel": "Avbryt" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Varningar", + "subtitle": "Skicka varningar för hela hotellet och visa de senaste varningarna", + "sendAlert": "Skicka hotellvarning", + "recentAlerts": "Senaste varningar ({count})", + "noRecentAlerts": "Inga senaste varningar", + "form": { + "title": "Varningsrubrik", + "titlePlaceholder": "t.ex. Serverunderhåll på 10 minuter", + "message": "Varningsmeddelande", + "messagePlaceholder": "Skriv varningsmeddelandet...", + "type": "Typ", + "typeHotel": "Alarm över hela hotellet", + "typeStaff": "Endast personal", + "urgent": "Brådskande", + "send": "Skicka varning", + "sending": "Skickar...", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "ID", + "colTitle": "Titel", + "colSentBy": "Skickat av", + "colType": "Typ", + "colDate": "Datum", + "colActions": "Åtgärder", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Personalaktiviteter", + "subtitle": "Granskning av personalens åtgärder i adminpanelen", + "noLogs": "Ingen personalaktivitet har loggats ännu", + "colId": "ID", + "colUser": "Användare", + "colAction": "Åtgärd", + "colTarget": "Mål", + "colDescription": "Beskrivning", + "colIp": "IP", + "colTimestamp": "Tidsstämpel", + "filterByUser": "Filtrera efter användare...", + "filterByAction": "Filtrera efter åtgärd...", + "clearFilters": "Rensa filter", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Ordfilter", + "subtitle": "Hantera filtrerade ord och fraser på hotellet", + "addWord": "Lägg till ord", + "addWords": "Lägg till ord", + "noWords": "Inga filtrerade ord än", + "confirmDelete": "Ta bort \"{word}\" från filtret?", + "colId": "ID", + "colWord": "Ord", + "colAddedBy": "Tillagd av", + "colCreated": "Skapad", + "colActions": "Åtgärder", + "form": { + "word": "Ord", + "wordPlaceholder": "t.ex. dåligt ord", + "addMore": "Lägg till flera ord (ett per rad)", + "save": "Lägg till i filter", + "saving": "Sparar...", + "cancel": "Avbryt" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Underhållsläge", + "subtitle": "Aktivera eller inaktivera hotellomfattande underhåll", + "enabled": "Underhållsläget är aktiverat", + "disabled": "Underhållsläget är inaktiverat", + "enable": "Aktivera underhåll", + "disable": "Inaktivera underhåll", + "message": "Underhållsmeddelande", + "messagePlaceholder": "Vi kommer tillbaka snart!", + "staffAccess": "Tillåt personal tillträde under underhåll", + "save": "Spara inställningar", + "saving": "Sparar...", + "confirmEnable": "Aktivering av underhåll förhindrar alla icke-personalanvändare från att komma åt hotellet. Fortsätta?", + "confirmDisable": "Inaktivera underhållsläge och återställa åtkomst för alla användare?", + "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": "Hushållningstillstånd", + "subtitle": "Konfigurera vilka ranger som kan komma åt vilka adminsektioner", + "addPermission": "Lägg till behörighet", + "editPermission": "Redigera behörighet", + "deletePermission": "Ta bort behörighet", + "noPermissions": "Inga städbehörigheter har konfigurerats", + "confirmDelete": "Vill du ta bort den här behörigheten?", + "colId": "ID", + "colRank": "Rank", + "colSection": "avsnitt", + "colActions": "Åtgärder", + "form": { + "rankId": "Rang-ID", + "rankIdPlaceholder": "Minsta rang", + "section": "Sektionsnyckel", + "sectionPlaceholder": "t.ex. admin.dashboard", + "save": "Spara behörighet", + "saving": "Sparar...", + "cancel": "Avbryt" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset Tillämpas!", + "cleared": "All Behörigheter cleared!", + "invalidRank": "Invalid rank", + "testDone": "Test done: {count} Behörigheter found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Ta bort ALL Behörigheter? This Åtgärd cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "Tillstånd", + "colDescription": "Beskrivning", + "colMinRank": "Min. Rank", + "permissionKey": "Behörighetsnyckel", + "minRank": "Min. rank", + "description": "Beskrivning", + "permissions": "Behörigheter", + "permissionsCount": "{count} Behörigheter", + "permission": "Tillstånd", + "highestMinRank": "Highest min. rank: {rank}", + "totalMinRank": "Total min. rank sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Rangordnar", + "missingDeps": "{count} Saknas dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(Saknas)", + "rank": "Rank", + "count": "Count", + "searchPermission": "Sök Behörigheter…", + "search": "Sök", + "manage": "Manage", + "importSelection": "Importera selection", + "noGroup": "Nej group", + "allGroups": "All groups", + "perGroup": "Behörigheter per group", + "perRank": "Behörigheter per rank", + "rankOverviewHint": "All Behörigheter grouped by the rank they are assigned to.", + "tabOverview": "Översikt", + "tabManage": "Manage", + "tabImport": "Importera / Export", + "tabRanks": "Rank Översikt", + "tabPresets": "Förinställningar", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "Importera Behörigheter", + "importHint": "Paste a JSON array of Tillstånd objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "Importera", + "exportTitle": "Export Behörigheter", + "exportHint": "Export all Behörigheter as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "Tillstånd Förinställningar", + "presetsHint": "Ansök a predefined Ställ in of Behörigheter for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Måttlighet tools: Användare lookup, Förbud, CFH handling, chat Loggar.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Användare, Rum, news, Inställningar, Handla, events, radio & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including Tillstånd management and asset Importera.", + "applyPreset": "Ansök preset", + "clearAll": "Clear all Behörigheter", + "testTitle": "Test rank access", + "testHint": "Enter a rank number to see which Behörigheter would be granted.", + "test": "Test", + "auditTitle": "Tillstånd audit log", + "auditHint": "All changes to Städning Behörigheter are logged.", + "auditLogsAt": "Audit Loggar are available on the Audit log page.", + "viewAuditLogs": "Visa audit Loggar", + "importedWithErrors": "Imported {count} Behörigheter with {errors} errors", + "confirmClearAllDesc": "This will Ta bort every Tillstånd entry from the Databas. Are you sure?", + "confirmDeletePermission": "Ta bort this Tillstånd permanently?", + "confirmBulkDelete": "Ta bort {count} selected Behörigheter?", + "deleteSelected": "Ta bort {count} selected", + "cancel": "Avbryt", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Användare", + "auditAction": "Åtgärd", + "auditTarget": "Mål", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Rum", + "subtitle": "Sök och hantera hotellrum", + "search": "Sök", + "searchPlaceholder": "Sök på namn, ägare eller ID...", + "searchResults": "{count, plural, one {# room} other {# rooms}} hittades för \"{query}\"", + "noResults": "Inga rum hittades", + "colId": "ID", + "colName": "Namn", + "colOwner": "Ägare", + "colUsers": "Användare", + "colState": "staten", + "colCategory": "Kategori", + "colCreated": "Skapad", + "colActions": "Åtgärder", + "stateOpen": "Öppna", + "stateClosed": "Stängt", + "stateLocked": "Låst", + "stateInvisible": "Osynlig", + "detail": { + "title": "Rum: {name}", + "subtitle": "Ägs av {owner}", + "overview": "Översikt", + "actions": "Åtgärder", + "description": "Beskrivning", + "noDescription": "Ingen beskrivning", + "owner": "Ägare", + "users": "Användare online", + "maxUsers": "Max användare", + "category": "Kategori", + "state": "staten", + "tags": "Taggar", + "noTags": "Inga taggar", + "created": "Skapad", + "deleteRoom": "Ta bort rum", + "confirmDelete": "Vill du ta bort rummet \"{name}\"? Detta kan inte ångras.", + "enterRoom": "Gå in i rummet", + "changeOwner": "Byt ägare", + "changeOwnerPlaceholder": "Nytt användarnamn för ägaren" + } + }, + "emailTemplates": { + "title": "E-postmallar", + "subtitle": "Hantera transaktionella e-postmallar", + "newTemplate": "+ Ny mall", + "edit": "Redigera", + "delete": "Ta bort", + "noTemplates": "Inga e-postmallar ännu", + "confirmDelete": "Vill du ta bort mallen \"{name}\"?", + "colId": "ID", + "colName": "Namn", + "colSubject": "Ämne", + "colKey": "Nyckel", + "colUpdated": "Uppdaterad", + "colActions": "Åtgärder", + "form": { + "name": "Namn", + "namePlaceholder": "t.ex. Välkomstmail", + "key": "Nyckel", + "keyPlaceholder": "t.ex. välkommen_e-post", + "subject": "Ämne", + "subjectPlaceholder": "E-post ämnesrad", + "body": "Brödtext (HTML)", + "bodyPlaceholder": "

Bästa {username},

", + "variables": "Tillgängliga variabler", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Spara mall", + "saving": "Sparar...", + "cancel": "Avbryt", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Tema", + "subtitle": "Anpassa CMS-utseendet", + "presets": "Förinställningar", + "colours": "Färger", + "css": "CSS", + "presetsTitle": "Förinställda tema", + "presetsSubtitle": "Välj ett förbyggt färgschema", + "applyPreset": "Ansök", + "presetApplied": "Förinställning tillämpas: {preset}", + "customiseTitle": "Anpassade färger", + "primary": "Primär", + "secondary": "Sekundär", + "accent": "Accent", + "background": "Bakgrund", + "surface": "Yta", + "text": "Text", + "saveColours": "Spara färger", + "savingColours": "Sparar...", + "cssTitle": "Anpassad CSS", + "cssSubtitle": "Lägg till anpassad CSS för att åsidosätta temastilar", + "cssPlaceholder": "/* Din anpassade CSS här */", + "saveCss": "Spara CSS", + "savingCss": "Sparar...", + "reset": "Återställ till standardinställningar", + "confirmReset": "Återställa temat till standardvärden?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Mediebibliotek", + "subtitle": "Ladda upp och hantera mediafiler", + "upload": "Ladda upp", + "uploadTitle": "Ladda upp en fil", + "uploadSubtitle": "Dra och släpp eller klicka för att ladda upp", + "uploadButton": "Välj fil", + "uploading": "Laddar upp...", + "noFiles": "Inga mediefiler ännu", + "delete": "Ta bort", + "confirmDelete": "Vill du ta bort den här filen permanent?", + "search": "Sök", + "searchPlaceholder": "Sök efter filnamn...", + "colPreview": "Förhandsgranska", + "colName": "Namn", + "colSize": "Storlek", + "colType": "Typ", + "colUploaded": "Uppladdad", + "colActions": "Åtgärder", + "copyUrl": "Kopiera URL", + "urlCopied": "URL kopierad till urklipp" + }, + "favicon": { + "title": "Favoritikon", + "subtitle": "Ladda upp och hantera webbplatsens favoritikon", + "current": "Aktuell favicon", + "uploadLabel": "Ladda upp favoritikon", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO eller SVG. Max 2MB.", + "upload": "Ladda upp", + "uploading": "Laddar upp...", + "delete": "Ta bort", + "deleting": "Tar bort...", + "saved": "Favoritikonen har sparats!", + "deleted": "Favicon har tagits bort!", + "error": "Något gick fel", + "confirmDelete": "Ta bort favicon? Webbplatsen kommer inte längre att visa en anpassad favoritikon.", + "generator": { + "title": "Generera favicon", + "text": "Text", + "bgColor": "Bakgrundsfärg", + "textColor": "Textfärg", + "rounded": "Rundade hörn", + "save": "Spara som favicon" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "CMS-inställningar", + "subtitle": "Hantera nyckel/värde CMS-konfiguration", + "addSetting": "Lägg till inställning", + "edit": "Redigera", + "delete": "Ta bort", + "noSettings": "Inga inställningar hittades", + "confirmDelete": "Vill du ta bort inställningen \"{key}\"?", + "colKey": "Nyckel", + "colValue": "Värde", + "colUpdated": "Uppdaterad", + "colActions": "Åtgärder", + "form": { + "key": "Nyckel", + "keyPlaceholder": "t.ex. hotel_name", + "value": "Värde", + "valuePlaceholder": "Inställningsvärde", + "save": "Spara inställning", + "saving": "Sparar...", + "cancel": "Avbryt" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Hem", + "reload": "Ladda om", + "fullscreen": "Helskärm", + "logout": "Logga ut", + "onlineUsers": "Användare online", + "emulatorOnline": "Emulator online", + "emulatorOffline": "Emulator offline", + "dragToMove": "Dra för att flytta", + "hide": "Dölj verktygsfält", + "fullscreenExit": "Avsluta helskärm", + "show": "Visa verktygsfält", + "emulatorUnknown": "Emulatorstatus okänd" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Fildiagnostik", + "preliminary": "Förhandskontroll av adresser; innehållet valideras vid import.", + "http": "HTTP {status}", + "network": "Anslutningen misslyckades", + "timeout": "Källan svarade inte i tid", + "invalidResponse": "Källan returnerade en webbsida i stället för en fil", + "available": "Fil hittad; väntar på validering", + "recover": "Bifoga originalet och fortsätt", + "recoveryHint": "Välj {file} (högst 50 MB). Identiteten kontrolleras. Misslyckade objekt försöks igen; slutförda importer bevaras.", + "attach": "Välj den ursprungliga .nitro-filen", + "working": "Validerar eller återupptar...", + "attached": "Matchande originalfil bifogad", + "resume": "Återuppta misslyckade importer med filen", + "invalidFile": "Välj en matchande originalfil i .nitro-format på högst 50 MB och försök igen.", + "resumeError": "Uppdatera historiken och använd senaste försöket; kontrollera filen och försök igen.", + "mismatchedFile": "Den här filen tillhör en annan möbel.", + "alreadyStarted": "Återställningen har redan startat. Uppdatera historiken och använd senaste försöket.", + "notEligible": "Det här objektet kan inte återställas med en bilaga." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } } diff --git a/src/messages/tr.json b/src/messages/tr.json index 4ccf899f..23732030 100644 --- a/src/messages/tr.json +++ b/src/messages/tr.json @@ -1,3919 +1,4913 @@ { - "draftRecovery": { - "ready": "Kurtarma kopyası bu tarayıcıda 7 gün saklanacak.", - "saved": "Kurtarma kopyası bu tarayıcıya 7 gün süreyle kaydedildi.", - "unavailable": "Tarayıcıda kurtarma kullanılamıyor. Değişikliklerin kaydedilene kadar bu sayfayı açık tut.", - "found": "Bu tarayıcıda bir kurtarma kopyası mevcut. Kaydedilme tarihi:", - "restore": "Tarayıcı kopyasını geri yükle", - "discard": "Tarayıcı kopyasını sil", - "confirmRestore": "Mevcut form tarayıcıdaki kurtarma kopyasıyla değiştirilsin mi? Kaydetmeden önce içeriği kontrol et.", - "confirmDiscard": "Bu kurtarma kopyası tarayıcıdan silinsin mi? Mevcut form değişmeden kalacak." - }, - "nav": { - "home": "Ana sayfa", - "community": "Topluluk", - "articles": "Makaleler", - "photos": "Fotoğraflar", - "staff": "Personel", - "rankings": "Sıralamalar", - "guilds": "Loncalar", - "leaderboards": "Skor tabloları", - "rareValues": "Nadir değerler", - "shop": "Mağaza", - "market": "Pazar", - "assistance": "Yardım", - "helpCenter": "Yardım merkezi", - "myTickets": "Biletlerim", - "badges": "Rozetler", - "radio": "Radyo", - "friends": "Arkadaşlar", - "messages": "Mesajlar", - "admin": "Yönetici", - "openMenu": "Menüyü aç", - "closeMenu": "Menüyü kapat", - "drawBadge": "Rozet çiz", - "events": "Events", - "polls": "Polls", - "mod": "Mod" - }, - "header": { - "online": "{count} {hotel} çevrimiçi", - "nitroClient": "Nitro istemcisi", - "tagline": "Kendi avatarınızı oluşturabileceğiniz, arkadaş edinebileceğiniz, sohbet edebileceğiniz, odalar oluşturabileceğiniz ve çok daha fazlasını yapabileceğiniz çevrimiçi bir sanal dünya!", - "login": "Giriş yap", - "or": "veya", - "createAccount": "Hesap oluştur" - }, - "footer": { - "copyright": "© {year} - {hotel} kar amacı gütmeyen bir eğitim projesidir" - }, - "pages": { - "staff": { - "title": "Personel", - "subtitle": "Otelin arkasındaki ekip", - "ranksTitle": "Rütbeler", - "ranksSubtitle": "Ekibin her bir parçası neyle ilgileniyor?", - "membersTitle": "Ekip üyeleri", - "membersEmptySubtitle": "Şu anda gösterilecek kimse yok", - "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", - "emptyState": "Gösterilecek personel yok.", - "colUsername": "Kullanıcı adı", - "colRank": "Sıra", - "colMotto": "Slogan" - }, - "leaderboard": { - "title": "Liderlik tablosu", - "subtitle": "{currency} bazında en iyi 20 oyuncu", - "tab_credits": "Kredi", - "tab_diamonds": "Elmaslar", - "tab_duckets": "Ördekler", - "tab_achievement": "Başarılar", - "tab_respects": "saygılar", - "tab_onlinetime": "Çevrimiçi Zaman", - "emptyState": "Henüz gösterilecek sıralama yok.", - "colAvatar": "avatar", - "colPlayer": "Oyuncu" - }, - "friends": { - "title": "Arkadaşlar", - "emptySubtitle": "Henüz hiç arkadaşınız eklenmedi", - "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", - "emptyState": "Otele arkadaşlarınızı ekleyin, burada görünecekler.", - "noMotto": "Slogan yok", - "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": "Mesajlar", - "subtitle": "Arkadaşlık istekleri ve çevrimdışı mesajlar sizi bekliyor", - "requestsTitle": "Arkadaşlık istekleri", - "requestsEmptySubtitle": "Henüz kimse arkadaşın olmayı teklif etmedi", - "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", - "requestsEmptyState": "Bekleyen arkadaşlık isteği yok.", - "wantsToBeFriend": "arkadaşın olmak istiyor", - "accept": "Kabul et", - "offlineTitle": "Çevrimdışı mesajlar", - "offlineEmptySubtitle": "Gelen kutunuz boş", - "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", - "offlineEmptyState": "Çevrimdışı mesajınız yok.", - "unknownUser": "Kullanıcı #{id}", - "decline": "Decline", - "composeTitle": "Send offline message", - "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", - "composeEmptyFriends": "Add friends in the hotel to send offline messages.", - "composeFriendLabel": "Friend", - "composeFriendPlaceholder": "Choose a friend", - "composeMessageLabel": "Message", - "composeMessagePlaceholder": "Write your message (max 500 characters)…", - "composeSend": "Send message", - "success": { - "accepted": "Friend request accepted.", - "declined": "Friend request declined.", - "sent": "Offline message sent." - }, - "errors": { - "notFound": "That friend request was not found.", - "unauthorized": "You can't act on this friend request.", - "invalid": "Invalid friend request.", - "error": "Something went wrong. Please try again.", - "notFriend": "You can only message friends.", - "emptyMessage": "Please write a message.", - "rateLimited": "Too many messages. Wait a moment and try again." - } - }, - "profile": { - "noMotto": "Slogan yok", - "statRank": "Sıra", - "statCredits": "Kredi", - "statRegistered": "Kayıtlı", - "badgesTitle": "Rozetler", - "badgesEmpty": "Henüz rozet yok.", - "photosTitle": "Fotoğraflar", - "photosEmpty": "Henüz fotoğraf yok.", - "guestbookTitle": "Ziyaretçi defteri", - "guestbookSubtitle": "{username} duvarındaki mesajlar", - "leaveMessage": "Mesaj bırakın", - "guestbookPlaceholder": "{username}'in ziyaretçi defterine bir şeyler yazın…", - "post": "Gönderi", - "loginToPost": "Ziyaretçi defterine mesaj bırakmak için giriş yapın.", - "guestbookEmpty": "Henüz ziyaretçi defteri girişi yok.", - "unknownUser": "Kullanıcı #{id}", - "statDuckets": "Ördekler", - "statDiamonds": "Elmaslar", - "walletTitle": "Cüzdan", - "friendsTitle": "Arkadaşlar", - "friendsSubtitle": "Otelde takıldıkları insanlar", - "friendsEmpty": "Gösterilecek arkadaş yok.", - "roomsTitle": "Odalar", - "roomsSubtitle": "Sahip oldukları odalar", - "roomsEmpty": "Gösterilecek oda yok.", - "roomUntitled": "Başlıksız oda", - "addFriend": "Add friend", - "alreadyFriends": "You're friends", - "requestPending": "Request pending", - "respondInMessages": "Respond in Messages", - "success": { - "sent": "Friend request sent.", - "guestbook": "Guestbook message posted." - }, - "errors": { - "self": "You can't send a friend request to yourself.", - "alreadyFriends": "You're already friends with this user.", - "alreadyPending": "You already sent a friend request to this user.", - "incomingPending": "This user already sent you a request — accept or decline it in Messages.", - "empty": "Please write a message before posting.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "invalid": "That request was invalid.", - "error": "Something went wrong. Please try again." - } - }, - "rankings": { - "title": "Sıralamalar", - "subtitle": "Krediye göre sıralanan en iyi 12 oyuncu", - "emptyState": "Henüz sıralamaya girecek oyuncu yok." - }, - "home": { - "welcome": "{hotelName}'e hoş geldiniz", - "welcomeSubtitle": "Retro oteliniz artık Next.js tarafından destekleniyor", - "welcomeBody": "Takılın, mobilya toplayın ve arkadaşlarla tanışın.", - "enterHotel": "{hotelName} girin", - "onlineFriends": "Çevrimiçi Arkadaşlar", - "noFriendsOnline": "Çevrimiçi arkadaşım yok", - "register": "ŞİMDİ KAYIT OLUN", - "joinNow": "{hotelName}'e bugün katılın!", - "recentUsers": "Son Kullanıcılar", - "recentPhotos": "Son Fotoğraflar", - "latestNews": "En son haberler", - "newsTitle": "En son haberler", - "newsSubtitle": "Otelden yeni çıkmış", - "allNews": "Tüm haberler →", - "allUsers": "Topluluk →", - "noArticles": "Henüz makale yok.", - "noPhotos": "Henüz fotoğraf yok.", - "noUsers": "Çevrimiçi kullanıcı yok", - "latestArticle": "Son Makale", - "latestUsers": "En yeni vatandaşlar ({count} toplam)", - "statsOnline": "Çevrimiçi", - "statsCitizens": "Vatandaşlar", - "statsRooms": "Odalar", - "statsArticles": "Makaleler", - "featuresAvatar": "Avatar", - "featuresAvatarDesc": "Kendine özgü görünümünü oluştur", - "featuresFurniture": "Mobilya", - "featuresFurnitureDesc": "Odaları eşyalarla dekore et", - "featuresCommunity": "Topluluk", - "featuresCommunityDesc": "Arkadaş edin ve sohbet et", - "featuresGames": "Oyunlar", - "featuresGamesDesc": "Yarış ve eğlen" - }, - "news": { - "title": "Haberler", - "subtitle": "Otelden en son duyurular, etkinlikler ve güncellemeler", - "noArticles": "Henüz makale yok." - }, - "article": { - "backToNews": "← Haberler", - "reactionsTitle": "Tepkiler", - "reactionsSubtitle": "Bize ne düşündüğünüzü söyleyin", - "reaction": { - "like": "Beğen", - "love": "Aşk", - "wow": "Vay be" - }, - "removeReaction": "Tepkinizi kaldırmak için tıklayın", - "reactWith": "{reaction} ile tepki verin", - "noReactions": "Henüz tepki yok.", - "logIn": "Giriş yap", - "toReact": "tepki vermek.", - "commentsTitle": "Yorumlar", - "commentsSubtitle": "Sohbete katılın", - "commentsCount": "şu ana kadar {count}", - "noComments": "Henüz yorum yok. İlk yorum yapan siz olun.", - "userNumber": "Kullanıcı #{id}", - "addComment": "Yorum ekle", - "commentPlaceholder": "Yorumunuzu yazın…", - "postComment": "Yorum gönder", - "toComment": "Yorum bırakmak için.", - "success": { - "posted": "Comment posted.", - "reaction": "Reaction updated." - }, - "errors": { - "empty": "Please write a comment before posting.", - "moderated": "That comment was blocked by moderation.", - "ratelimit": "You're commenting too fast. Please wait a moment and try again.", - "invalid": "Invalid comment.", - "notFound": "That article was not found.", - "error": "Something went wrong. Please try again." - } - }, - "photos": { - "title": "Fotoğraflar", - "subtitle": "Otelde çekilen son fotoğraflar", - "noPhotos": "Henüz fotoğraf yok.", - "photoAlt": "Fotoğraf: #{id} kullanıcısı", - "byUser": "kullanıcı #{id} tarafından" - }, - "badges": { - "title": "Rozetler", - "subtitle": "Kazanabileceğiniz ve otel çevresinde sergileyebileceğiniz rozetler", - "noBadges": "Henüz rozet mevcut değil." - }, - "community": { - "title": "Topluluk", - "subtitle": "Otel çevresinde olup biten her şey tek bir yerde", - "open": "Aç →", - "links": { - "rankings": { - "title": "Sıralamalar", - "text": "Krediye göre sıralanmış, oteldeki en zengin oyuncuları görün." - }, - "staff": { - "title": "Personel", - "text": "Otelin her gün çalışmasını sağlayan ekiple tanışın." - }, - "news": { - "title": "Haberler", - "text": "En son duyurular, etkinlikler ve güncellemeler." - }, - "photos": { - "title": "Fotoğraflar", - "text": "Topluluk tarafından otelin çevresinden paylaşılan anlık görüntüler." - }, - "guilds": { - "title": "Loncalar", - "text": "Oyuncuların oluşturduğu ve katıldığı gruplara göz atın." - }, - "leaderboards": { - "title": "Skor tabloları", - "text": "Otelin istatistiklerinde bu sezon kim zirvede?" - } - } - }, - "guilds": { - "title": "Loncalar", - "subtitle": "Oyuncuların oluşturduğu ve katıldığı gruplara göz atın", - "empty": "Henüz lonca yok.", - "unnamedGuild": "İsimsiz lonca", - "noDescription": "Açıklama yok" - }, - "guild": { - "allGuilds": "← Tüm loncalar", - "unnamedGuild": "İsimsiz lonca", - "noDescription": "Açıklama yok", - "memberSingular": "Üye", - "memberPlural": "Üyeler", - "founded": "kuruldu", - "forumLink": "Forum →", - "discussion": "Tartışma", - "membersTitle": "Üyeler", - "memberLowerSingular": "üye", - "memberLowerPlural": "üyeler", - "noMembers": "Üye yok.", - "owner": "Sahip", - "noMotto": "Slogan yok" - }, - "guildForum": { - "backToGuild": "← Loncaya geri dön", - "unnamedGuild": "İsimsiz lonca", - "forumTitle": "{guild} — Forum", - "threadSingular": "iplik", - "threadPlural": "Konular", - "newThread": "+ Yeni konu", - "empty": "Bu forumda henüz konu yok.", - "colSubject": "Konu", - "colAuthor": "Yazar", - "colPosts": "Gönderiler", - "colDate": "Tarih", - "noSubject": "(konu yok)", - "pinned": "Sabitlendi", - "locked": "Kilitli", - "userNumber": "Kullanıcı #{id}", - "unknown": "Bilinmiyor", - "success": { - "posted": "Thread posted." - } - }, - "guildForumNew": { - "backToForum": "← Foruma geri dön", - "unnamedGuild": "İsimsiz lonca", - "title": "Yeni konu", - "subtitle": "{guild} forumunda", - "subjectLabel": "Konu", - "subjectPlaceholder": "Konu konusu", - "messageLabel": "Mesaj", - "messagePlaceholder": "Açılış yazınızı yazın…", - "postThread": "Konuyu gönder", - "cancel": "İptal", - "errors": { - "invalid": "Subject and message are required.", - "notFound": "That guild was not found.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "shop": { - "title": "Mağaza", - "subtitle": "Hesabınıza para yükleyin ve özel paketler, para birimi ve rozetleri alın.", - "browsingCategory": "{category} paketlerine göz atılıyor.", - "all": "Hepsi", - "allPackages": "Tüm paketler", - "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", - "empty": "Şu anda mevcut paket yok.", - "buy": "Satın al", - "loginToBuy": "Log in to buy", - "creditsHint": "Packages are paid with in-game credits. Top up first if you need more.", - "topUpLink": "Top up credits", - "priceCredits": "{credits} credits (≈ {usd})", - "priceCreditsShort": "{credits} cr", - "success": { - "bought": "Package purchased — rewards have been added to your account.", - "boughtNamed": "You purchased \"{name}\" — rewards have been added to your account." - }, - "errors": { - "invalid": "That package is no longer available.", - "credits": "You don't have enough credits for this package.", - "ratelimit": "You're purchasing too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "topup": { - "title": "PayPal ile yükleme yapın", - "subtitle": "PayPal ile güvenli bir şekilde ödeme yapın; kredileriniz, ödeme onaylandığı anda eklenir.", - "cancelled": "Ödeme iptal edildi; ödeme alınmadı.", - "chooseAmount": "Bir miktar seçin", - "notConfiguredPre": "PayPal henüz yapılandırılmadı. Bir yöneticinin ayarlaması gerekiyor", - "notConfiguredAnd": "ve", - "notConfiguredOptional": "(ve isteğe bağlı olarak", - "notConfiguredPost": "korumalı alan ve canlı yayın için).", - "balanceTitle": "Bakiyeniz", - "signedInAs": "{username} olarak oturum açıldı", - "credits": "Kredi", - "creditsPerUnit": "1,00 {currency} başına kredi", - "rateLine": "You receive {amount} credits per 1.00 {currency}. Credits appear in-game the next time you log in." - }, - "marketplace": { - "title": "Pazar yeri", - "subtitle": "Oyuncular tarafından listelenen mobilyalara ve nadir eşyalara göz atın. Listeler oyun içine yerleştirilir ve canlı olarak güncellenir; teklif vermek için otele gidin.", - "activeOffers": "Aktif teklifler", - "sellers": "Satıcılar", - "totalValue": "Toplam değer", - "activeListings": "Aktif listeler", - "mostRecentFirst": "En son ilk sıralarda yer alan", - "empty": "Şu anda aktif pazaryeri teklifi yok. Daha sonra tekrar kontrol edin.", - "colOffer": "Teklif", - "colItem": "Öğe", - "colSeller": "Satıcı", - "colPrice": "Fiyat", - "colListed": "Listelendi", - "itemLabel": "Öğe #{id}", - "userLabel": "Kullanıcı #{id}", - "justNow": "şimdi", - "minutesAgo": "{count} dakika önce", - "hoursAgo": "{count} saat önce", - "daysAgo": "{count} gün önce" - }, - "rares": { - "title": "Nadir değerler", - "subtitle": "Kategoriye göre gruplandırılmış, oteldeki tüm nadir eşyalara ilişkin genel bakış alın.", - "empty": "Şu anda burada listelenen nadir eşyamız yok.", - "rareCount": "{count, plural, one {# rare} other {# rares}}", - "viewRares": "Nadirleri görüntüle →" - }, - "rareCategory": { - "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", - "allRares": "← Tüm nadirler", - "empty": "Bu kategoride henüz nadir eşya listelenmedi.", - "colRare": "Nadir", - "colCredits": "Kredi", - "colCurrency": "Para birimi", - "creditsValue": "{value} kredi", - "duckets": "Ördekler", - "diamonds": "Elmaslar", - "credits": "Kredi" - }, - "redeem": { - "title": "Kuponu kullanın", - "subtitle": "Kupon kodunuz var mı? Ödülünüzü hesabınıza eklemek için aşağıya girin.", - "enterCode": "Kodunuzu girin", - "oncePerAccount": "Her kupon, hesap başına yalnızca bir kez kullanılabilir.", - "balanceTitle": "Bakiyeniz", - "signedInAs": "{username} olarak oturum açıldı", - "credits": "Kredi", - "instantCredit": "Kullanılan ödüller anında hesabınıza aktarılır ve bir sonraki oturum açışınızda oyunda görünür." - }, - "help": { - "title": "Yardım Merkezi", - "subtitle": "Kılavuzları, destek konularını ve otel kurallarını, yani yardım almak için ihtiyacınız olan her şeyi bulun.", - "myTickets": "Biletlerim →", - "topicsTitle": "Destek konuları", - "topicsSubtitle": "Kılavuzlara ve sık sorulan soruların yanıtlarına göz atın", - "topicsEmpty": "Henüz yardım konusu yok.", - "rulesTitle": "Otel kuralları", - "rulesSubtitle": "Otelde takılmadan önce lütfen bunları okuyun", - "rulesEmpty": "Henüz yayınlanmış bir kural yok.", - "categoryEmpty": "Bu kategoride kural yok." - }, - "helpCategory": { - "back": "← Yardım Merkezi", - "topicSubtitle": "Yardım Merkezi konusu", - "moreTitle": "Daha fazla yardım konusu", - "moreSubtitle": "Başka bir destek konusuna geçin" - }, - "helpTickets": { - "title": "Yardım Biletleri", - "subtitle": "Personele bir bilet gönderin ve açık taleplerinizi takip edin.", - "statTotal": "Toplam bilet", - "statOpen": "Açık", - "statClosed": "Kapalı", - "newTitle": "Yeni bilet", - "newSubtitle": "Sorununuzu açıklayın; personel sizi takip edecektir", - "subjectPlaceholder": "Konu", - "contentPlaceholder": "Sorununuzu açıklayın…", - "submit": "Bilet gönder", - "listTitle": "Biletleriniz", - "listSubtitle": "Personele gönderdiğiniz her istek", - "listEmpty": "Henüz biletiniz yok.", - "colId": "Kimlik", - "colSubject": "Konu", - "colStatus": "Durum", - "colCreated": "Oluşturuldu", - "statusOpen": "Açık", - "statusClosed": "Kapalı", - "success": { - "created": "Ticket submitted." - }, - "errors": { - "invalid": "Please fill in a subject and description.", - "moderated": "That ticket was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - }, - "banAppealLabel": "This is a ban appeal" - }, - "applyStaff": { - "title": "{hotel} personeli için başvur", - "subtitle": "Ara sıra personel başvurularını açıyoruz. Mükemmel uyum sağlayacağınızı düşündüğünüz bir pozisyonla karşılaşırsanız, başvurmaktan çekinmeyin.", - "noPositionsTitle": "Açık pozisyon yok", - "noPositionsBody": "Şu anda açık pozisyon yok. O zamana kadar herhangi bir açıklığımız olup olmadığını kontrol etmek için lütfen daha sonra tekrar gelin. İlginiz için teşekkür ederiz.", - "noDeadline": "Son tarih belirlenmedi", - "deadline": "Son başvuru tarihi: {date}", - "alreadyApplied": "{rank} için zaten başvuruda bulundunuz", - "aboutYou": "senin hakkında", - "aboutPlaceholder": "Bize neden harika bir {rank} olacağınızı söyleyin…", - "applyFor": "{rank} için başvur", - "success": { - "submitted": "Application submitted — staff will review it soon." - }, - "errors": { - "empty": "Please write at least 10 characters about yourself.", - "invalid": "Invalid application.", - "duplicate": "You have already applied for this position.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "applyTeam": { - "title": "{hotel} ekibine başvurun", - "subtitle": "Belirli aralıklarla ekip başvurularını açıyoruz. Kendinize uygun bir takım görürseniz başvurmaktan çekinmeyin!", - "noPositionsTitle": "Açık takım pozisyonu yok", - "noPositionsBody": "Şu anda açık takım pozisyonu bulunmamaktadır. Lütfen yeni açık pozisyonları kontrol etmek için daha sonra tekrar gelin. Teşekkür ederim!", - "pending": "Başvurunuz beklemede", - "aboutYou": "senin hakkında", - "aboutPlaceholder": "Bize neden {rank} için çok uygun olduğunuzu anlatın…", - "applyFor": "{rank} için başvur", - "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": "Radyo", - "subtitle": "Otelin radyosunu dinleyin; canlı DJ setleri, istekler ve duyurular.", - "nowPlaying": "Şimdi oynatılıyor", - "nothingPlaying": "Şu anda hiçbir şey oynatılmıyor.", - "onAir": "Yayında: {dj}", - "noDj": "Yayında DJ yok.", - "audioUnsupported": "Tarayıcınız ses öğesini desteklemiyor.", - "streamOffline": "Akış şu anda çevrimdışı.", - "exploreTitle": "Radyoyu keşfedin", - "exploreSubtitle": "Programlama, bağırışlar, istekler ve daha fazlası", - "linkSchedule": "Program", - "linkScheduleText": "Haftalık DJ'lerimiz ve şovlarımız.", - "linkShouts": "Bağırışlar", - "linkShoutsText": "Topluluktan haykırışlar ve talepler.", - "linkRequests": "İstekler", - "linkRequestsText": "DJ'den favori parçanızı döndürmesini isteyin.", - "linkApply": "DJ olarak başvur", - "linkApplyText": "Ekibe katılın ve yayınlara çıkın.", - "linkLeaderboard": "Liderlik tablosu", - "linkLeaderboardText": "Kazanılan puanlara göre sıralanan en iyi dinleyiciler.", - "todayTitle": "Bugünün programı", - "todayTitleWithDay": "Bugünün programı · {day}", - "todaySubtitle": "Bugün televizyonlarda neler var", - "fullWeek": "Tüm hafta →", - "noShowsToday": "Bugün için programlanmış bir gösteri yok.", - "colTime": "Zaman", - "colShow": "Göster", - "colDj": "DJ", - "untitledShow": "İsimsiz gösteri", - "userNumber": "Kullanıcı #{id}" - }, - "radioSchedule": { - "title": "Radyo Programı", - "subtitle": "Haftalık DJ ve şov kadromuz", - "empty": "Henüz programlanmış bir gösteri yok.", - "colDay": "Gün", - "colTime": "Zaman", - "colDj": "DJ", - "colShow": "Göster", - "noShows": "Gösteri yok" - }, - "radioShouts": { - "title": "Radyo Bağırışları", - "subtitle": "Toplumdan gelen çağrılar ve talepler", - "postTitle": "Bir duyuru yayınla", - "postSubtitle": "Canlı DJ'e mesaj gönder", - "messageLabel": "Mesajınız", - "messagePlaceholder": "DJ'e bir not gönderin…", - "shoutButton": "Bağır", - "loginToPost": "Bir duyuru göndermek için giriş yapın.", - "latestTitle": "En son bağırışlar", - "latestSubtitle": "Dinleyicilerden gelen en son mesajlar", - "empty": "Henüz bağırış yok. İlk siz olun!", - "success": { - "posted": "Shout posted." - }, - "errors": { - "invalid": "Please write a message before shouting.", - "moderated": "That shout was blocked by moderation.", - "ratelimit": "You're shouting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "radioContests": { - "title": "Radyo Yarışmaları", - "subtitle": "En son canlı yarışmalarımıza katılın ve katılın", - "empty": "Henüz yarışma yok.", - "contestLabel": "Yarışma #{id}", - "dateUnknown": "Tarih bilinmiyor" - }, - "radioGiveaways": { - "title": "Radyo Hediyeleri", - "subtitle": "Radyo çekilişlerimizde kazanma şansınızı yakalamak için dinleyin", - "empty": "Henüz hediye yok.", - "giveawayLabel": "Çekiliş #{id}", - "dateUnknown": "Tarih bilinmiyor" - }, - "radioLeaderboard": { - "title": "Radyo Dinleyici Skor Tablosu", - "subtitle": "Radyo dinlerken kazanılan puanlara göre ilk 50 dinleyici", - "empty": "Henüz gösterilecek dinleyici noktası yok.", - "colRank": "Sıra", - "colAvatar": "avatar", - "colListener": "Dinleyici", - "colPoints": "Puanlar" - }, - "radioRequests": { - "formTitle": "Bir istek gönderin", - "formSubtitle": "DJ'den favori parçanızı çalmasını isteyin", - "songLabel": "Şarkı", - "songPlaceholder": "Şarkının adı", - "artistLabel": "Sanatçı", - "artistPlaceholder": "Sanatçının adı (isteğe bağlı)", - "submitButton": "İsteği gönder", - "loginToRequest": "Bir istek göndermek için oturum açın.", - "latestTitle": "Son istekler", - "latestSubtitle": "En son talep edilen şarkılar", - "empty": "Henüz talep yok.", - "colSong": "Şarkı", - "colArtist": "Sanatçı", - "colRequester": "Talep eden", - "colDate": "Tarih", - "colStatus": "Durum", - "statusPending": "Beklemede", - "statusApproved": "Onaylandı", - "statusPlayed": "Oynandı", - "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": "Radyo DJ'i olmak için başvurun", - "subtitle": "Bize kendinizden ve neden radyo dalgalarına çok uygun olduğunuzu anlatın", - "latestTitle": "En son başvurunuz", - "statusLabel": "Durum:", - "submittedOn": "· {date} gönderildi", - "submitAgain": "Bilgileriniz değiştiyse aşağıdan tekrar gönderebilirsiniz.", - "formTitle": "Başvuru formu", - "formSubtitle": "Gerekli olarak işaretlenen tüm alanların doldurulması gerekir", - "realNameLabel": "Gerçek isim", - "realNamePlaceholder": "Tam adınız", - "ageLabel": "Yaş", - "availabilityLabel": "Kullanılabilirlik", - "availabilityPlaceholder": "Hangi gün ve saatlerde yayın yapabilirsiniz?", - "musicStyleLabel": "Müzik tarzı", - "musicStylePlaceholder": "örneğin Ev, Pop, Hip-Hop", - "experienceLabel": "Deneyim", - "optional": "(isteğe bağlı)", - "experiencePlaceholder": "Daha önce DJ veya hosting deneyiminiz var mı?", - "motivationLabel": "Motivasyon", - "motivationPlaceholder": "Neden radyo ekibine katılmak istiyorsunuz?", - "submitButton": "Başvuruyu gönder", - "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": "Hesap ayarları", - "accountSettingsSubtitle": "Profilinizi, güvenliğinizi ve bağlı hesaplarınızı yönetin", - "publicProfile": "Herkese açık profiliniz", - "noMotto": "Slogan yok", - "noEmail": "Dosyada e-posta yok", - "changeMotto": "Sloganı değiştir", - "changeMottoSubtitle": "Çevrimiçiyseniz oyun içinde anında güncellenir", - "mottoPlaceholder": "Sloganınız", - "saveMotto": "Sloganı kaydet", - "securityTitle": "Güvenlik", - "securitySubtitle": "İki faktörlü kimlik doğrulama", - "securityDescription": "Hesabınıza ikinci bir koruma katmanı ekleyin.", - "twoFactorLink": "İki faktörlü kimlik doğrulama" - }, - "settings2fa": { - "backToSettings": "← Ayarlar", - "title": "İki faktörlü kimlik doğrulama", - "subtitle": "Kimlik doğrulama uygulamasıyla ikinci bir güvenlik katmanı ekleyin", - "nowEnabled": "2FA artık etkin. 🔒", - "disabledNotice": "2FA devre dışı bırakıldı.", - "badCode": "Bu kod geçerli değildi; tekrar deneyin.", - "noAppKeyPrefix": "2FA şu tarihe kadar kullanılamıyor:", - "noAppKeyMiddle": "yapılandırılmıştır (aynı Laravel", - "noAppKeySuffix": "AtomCMS'niz yüklenirken mevcut sırlar okunabilir kalır).", - "isEnabled": "2FA etkin", - "onYourAccount": "hesabınızda.", - "disable": "2FA'yı devre dışı bırak", - "scanOrEnter": "Bu anahtarı tarayın veya girin", - "scanInstructions": "Bunu Google Authenticator/Authy'ye ekleyin, ardından onaylamak için 6 haneli kodu girin.", - "manualKey": "Manuel anahtar:", - "codePlaceholder": "6 haneli kod", - "confirm": "Onayla", - "enableIntro": "Kimlik doğrulama uygulamasıyla ikinci bir güvenlik katmanı ekleyin.", - "enable": "2FA'yı etkinleştir" - }, - "title": "Bağlı hesaplar", - "subtitle": "Tek tıklamayla oturum açabilmek için bir sosyal hesap bağlayın", - "connected": "Bağlı", - "unavailable": "Kullanılamıyor", - "login": { - "title": "Oturum aç", - "subtitle": "Tekrar hoş geldiniz; otele girmek için oturum açın.", - "subtitle2fa": "Kimlik doğrulayıcınızdan aldığınız 6 haneli kodu girin.", - "usernamePlaceholder": "Kullanıcı adı", - "passwordPlaceholder": "Şifre", - "codePlaceholder": "2FA kodu", - "pleaseWait": "Lütfen bekleyin…", - "verify": "Doğrula", - "signIn": "Oturum aç", - "or": "veya", - "noAccount": "Hesabın yok mu?", - "createOne": "Bir tane oluştur", - "forgotPassword": "Şifrenizi mi unuttunuz?", - "errorInvalidCredentials": "Geçersiz kullanıcı adı veya şifre", - "errorInvalid2fa": "Geçersiz 2FA kodu", - "welcomeBack": "Tekrar hoş geldin", - "welcomeBackSub": "{hotelName} devam etmek için giriş yap", - "errorUnverified": "Please verify your email before signing in.", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "register": { - "title": "Hesap oluştur", - "subtitle": "Otele katılın; yalnızca birkaç dakikanızı alır.", - "username": "Kullanıcı adı", - "email": "E-posta", - "password": "Şifre", - "confirmPassword": "Şifreyi tekrarla", - "usernamePlaceholder": "Kullanıcı adı", - "emailPlaceholder": "E-posta", - "passwordPlaceholder": "Şifre (en az 6 karakter)", - "confirmPasswordPlaceholder": "Şifreyi tekrarla", - "selectOutfit": "Kıyafetinizi seçin", - "termsAccept": "18 yaşındayım ve {hotel} şartlarını ve kurallarını kabul ediyorum.", - "createAccount": "Hesap oluştur", - "creatingAccount": "Hesap oluşturuluyor...", - "redirecting": "Hesabınıza yönlendiriliyorsunuz...", - "alreadyHaveAccount": "Zaten bir hesabınız var mı? Giriş yapmak!", - "register": "Kayıt ol", - "termsError": "Kayıt olmak için şartları ve kuralları kabul etmelisiniz.", - "usernameError": "Kullanıcı adı gerekli.", - "emailError": "Geçerli e-posta gereklidir.", - "passwordError": "Şifre en az 6 karakter olmalıdır.", - "confirmPasswordError": "Şifreler eşleşmiyor.", - "termsRequired": "Şartları ve kuralları kabul etmelisiniz.", - "usernameRequired": "Kullanıcı adı gerekli.", - "emailRequired": "E-posta gerekli.", - "passwordRequired": "Şifre gerekli.", - "passwordsDontMatch": "Şifreler eşleşmiyor.", - "alreadyHaveAccountPre": "Zaten hesabın var mı?", - "alreadyHaveAccountLink": "Giriş yap", - "whoIsOnline": "Kim çevrimiçi", - "usersOnline": "{count} çevrimiçi" - }, - "forgot": { - "title": "Şifreyi sıfırla", - "subtitle": "Yeni bir şifre belirlemeniz için size e-postayla güvenli bir bağlantı göndereceğiz.", - "sentNotice": "Bu e-posta kayıtlıysa, bir sıfırlama bağlantısı gönderilmiştir. Gelen kutunuzu kontrol edin.", - "emailPlaceholder": "E-postanız", - "sendResetLink": "Sıfırlama bağlantısını gönder", - "backToLogin": "Girişe geri dön", - "errorCaptcha": "Captcha verification failed. Please try again." - }, - "reset": { - "title": "Yeni bir şifre belirleyin", - "subtitle": "Başka yerde kullanmadığınız güçlü bir şifre seçin.", - "passwordPlaceholder": "Yeni şifre (en az 6 karakter)", - "resetPassword": "Şifreyi sıfırla", - "backToLogin": "Girişe geri dön" - }, - "verify": { - "verifiedTitle": "Artık hazırsınız", - "verifiedSubtitle": "E-posta doğrulandı", - "verifiedBody": "E-posta adresiniz doğrulandı. Artık giriş yapıp oynayabilirsiniz.", - "goToLogin": "Girişe git", - "alreadyTitle": "Zaten doğrulandı", - "alreadySubtitle": "Yapacak hiçbir şey kalmadı", - "alreadyBody": "Bu e-posta adresi zaten doğrulandı.", - "unavailableTitle": "Kısa süre sonra tekrar deneyin", - "unavailableSubtitle": "Sunucuya ulaşılamıyor", - "unavailableBody": "E-postanızı doğrulamak için sunucuya ulaşamadık. Lütfen bağlantıyı bir süre sonra yeniden deneyin.", - "invalidTitle": "E-posta doğrulaması", - "invalidSubtitle": "Geçersiz veya süresi dolmuş bağlantı", - "invalidBody": "Bu doğrulama bağlantısı geçerli değil. E-postanızdaki bağlantının tamamını açtığınızdan emin olun veya yeni bir bağlantı isteyin.", - "backToLogin": "Girişe geri dön" - }, - "banned": { - "title": "Yasaklandın", - "subtitle": "Hesap askıya alındı", - "body": "Hesabınız otelde askıya alındı.", - "reasonLabel": "Sebep:", - "permanent": "Bu yasak kalıcıdır.", - "expires": "{date} tarihinde sona eriyor.", - "contactStaff": "Bunun bir hata olduğunu düşünüyorsanız personel ekibiyle iletişime geçin." - }, - "maintenance": { - "title": "{hotel} bakımda", - "subtitle": "Kısa süre sonra geri döneceğiz", - "staffCanLogIn": "Personel hâlâ giriş yapabilir." - }, - "admin": { - "nav": { - "overview": "Genel Bakış", - "dashboard": "Kontrol Paneli", - "content": "İçerik", - "articles": "Makaleler", - "tags": "Etiketler", - "navigator": "Gezgin", - "helpCenter": "Yardım merkezi", - "advertisements": "Reklamlar", - "writeableBoxes": "Yazılabilir kutular", - "photos": "Fotoğraflar", - "tickets": "Biletler", - "events": "Events", - "polls": "Polls", - "banners": "Banners", - "prefixes": "Prefixes", - "usersAndAccess": "Kullanıcılar ve erişim", - "users": "Kullanıcılar", - "bans": "Yasaklar", - "ipManagement": "IP yönetimi", - "vpn": "VPN", - "applications": "Uygulamalar", - "teams": "Takımlar", - "permissions": "İzinler", - "onlineUsers": "Online users", - "moderation": "Moderation", - "economy": "Ekonomi", - "catalog": "Katalog", - "shop": "Mağaza", - "transactions": "İşlemler", - "vouchers": "Kuponlar", - "subscriptions": "Abonelikler", - "rareValues": "Nadir değerler", - "badges": "Rozetler", - "achievements": "Başarılar", - "calendar": "Takvim", - "radio": "Radyo", - "radioHistory": "Radyo geçmişi", - "radioBanners": "Afişler", - "radioEmbed": "Göm", - "radioApiKeys": "API anahtarları", - "radioModeration": "Moderasyon", - "radioSettings": "Ayarlar", - "radioMonitoring": "İzleme", - "radioPoints": "Puanlar", - "radioRanks": "Rütbeler", - "radioAutodj": "Otomatik DJ", - "system": "Sistem", - "commandocentrum": "Komando merkezi", - "emulator": "Emülatör", - "alerts": "Uyarılar", - "logs": "Günlükler", - "auditLog": "Audit log", - "analytics": "Analytics", - "devops": "DevOps", - "wordFilter": "Kelime filtresi", - "maintenance": "Bakım", - "rooms": "Odalar", - "emailTemplates": "E-posta şablonları", - "theme": "Tema", - "media": "Medya", - "favicon": "Site simgesi", - "sounds": "Sesler", - "translations": "Çeviriler", - "import": "İthalat", - "settings": "Ayarlar", - "backToSite": "Siteye geri dön", - "housekeeping": "Temizlik", - "hotelManagementPanel": "Otel yönetim paneli", - "rankLabel": "Sıra {rank}", - "hubNewsMedia": "News & media", - "hubSiteContent": "Site content", - "hubEngagement": "Engagement", - "hubUsers": "Users", - "hubAccess": "Access & security", - "hubCatalog": "Catalog & rares", - "hubShop": "Shop & payments", - "hubTools": "Tools", - "hubObservability": "Observability", - "helpTickets": "Help-center tickets", - "marketplace": "Marketplace", - "expandAll": "Expand all", - "collapseAll": "Collapse all", - "searchMenu": "Search menu…", - "clearMenuSearch": "Clear menu search", - "noMenuResults": "No matching pages.", - "community": "Community", - "monitoring": "Monitoring", - "staffAccess": "Ranks & permissions", - "multiAccounts": "Multi-accounts", - "chatLog": "Chat log", - "commandLog": "Command log", - "tradeLog": "Trade log", - "tools": "Tools", - "guilds": "Guilds", - "itemsBase": "Items base", - "adminMenu": "Admin menu", - "studio": "Studio", - "operationsCenter": "Operations center" - }, - "dashboard": { - "title": "Kontrol Paneli", - "subtitle": "Otele genel bakış ve canlı durum", - "playersOnline": "Çevrimiçi oyuncular", - "articles": "Makaleler", - "activeBans": "Aktif yasaklar", - "database": "Veritabanı", - "databaseConnected": "Bağlı", - "databaseDown": "Aşağı", - "usersByRank": "Sıralamaya göre kullanıcılar", - "noAccountsToBreakDown": "Henüz çözülecek hesap yok", - "rankLabel": "Sıra {rank}", - "rankWithCount": "Sıralama {rank}: {count} hesap", - "recentStaffActivity": "Son personel etkinliği", - "viewAll": "Tümünü görüntüle", - "noStaffActivityLogged": "Henüz personel etkinliği kaydedilmedi" - }, - "articles": { - "title": "Makaleler", - "subtitle": "Haber makaleleri — en yeni 50 makale", - "newArticle": "+ Yeni makale", - "edit": "Düzenle", - "delete": "Sil", - "noArticles": "Henüz makale yok", - "confirmDelete": "\"{title}\" dosyasını silmek istediğinizden emin misiniz?", - "colTitle": "Başlık", - "colSlug": "Sümüklüböcek", - "colAuthor": "Yazar", - "colCreated": "Oluşturuldu", - "colActions": "Eylemler", - "form": { - "title": "Başlık", - "titlePlaceholder": "Makale başlığı", - "slug": "Sümüklüböcek", - "slugPlaceholder": "makale-url-slug", - "category": "Kategori", - "categoryPlaceholder": "Bir kategori seçin", - "body": "Vücut", - "bodyPlaceholder": "Makale içeriğinizi yazın…", - "image": "Resim", - "imagePlaceholder": "https://example.com/image.png", - "thumbnail": "Küçük resim", - "thumbnailPlaceholder": "https://example.com/thumb.png", - "published": "Yayınlandı", - "featured": "Öne Çıkanlar", - "save": "Makaleyi kaydet", - "saving": "Kaydediliyor…", - "deleteArticle": "Makaleyi sil", - "deleteConfirm": "Bu eylem geri alınamaz. Makale kalıcı olarak kaldırılacaktır.", - "cancel": "İptal", - "autosaveLoading": "Loading saved drafts…", - "autosaveReady": "Private draft autosave is ready.", - "autosaveSaving": "Saving private draft…", - "autosaveSaved": "Private draft saved. Publication changes require Save.", - "autosaveFailed": "Draft recovery is unavailable. Keep this page open and use Save; reload to retry recovery.", - "autosaveConflict": "Another tab changed this draft. Autosave is paused: reload to review the newer draft before continuing.", - "recoveryFound": "An unfinished private draft is available. Recover or discard it to enable autosave.", - "recoverDraft": "Recover draft", - "discardDraft": "Discard saved draft", - "confirmRecovery": "Replace the current editor content with this recovered draft? It will remain unpublished until you save.", - "confirmDiscardDraft": "Permanently discard your saved recovery draft? The current editor content will remain.", - "revisionHistory": "Previous saved versions (latest 20)", - "restoreRevision": "Restore into editor", - "confirmRevision": "Replace the current editor content with this previous version as a draft? Review it and choose a publication status before saving.", - "editConflict": "This article changed after you opened it. Your changes were not applied. Copy your work, reload the article, and merge the changes before saving again.", - "retryRecovery": "Reload recovery without changing this form" - }, - "listActionError": "The article action could not be completed.", - "listStatus": "Publication status", - "listStatus_all": "All articles", - "listStatus_draft": "Draft", - "listStatus_published": "Published", - "listStatus_scheduled": "Scheduled", - "listSearch": "Search title or summary", - "listApply": "Apply", - "listLoading": "Loading…", - "listReset": "Reset filters", - "listUnavailable": "Articles are temporarily unavailable. Try again.", - "listRetry": "Try again", - "listTotal": "{count, plural, one {# matching article} other {# matching articles}}", - "listNoMatches": "No articles match these filters. Change the search or reset the filters.", - "listPagination": "Article pages", - "listPrevious": "Previous", - "listNext": "Next", - "listPage": "Page {page} of {total}" - }, - "tags": { - "title": "Etiketler", - "subtitle": "Makale etiketleri / kategorileri", - "addTag": "Etiket ekle", - "name": "İsim", - "namePlaceholder": "Etiket adı", - "backgroundColour": "Arka plan rengi", - "createTag": "Etiket oluştur", - "editTag": "Etiketi düzenle", - "updateTag": "Etiketi güncelle", - "deleteTag": "Etiketi sil", - "confirmDelete": "\"{name}\" silinsin mi?", - "noTags": "Henüz etiket yok", - "colId": "Kimlik", - "colTag": "Etiket", - "colColour": "Renk", - "colUsedBy": "Kullanan", - "colCreated": "Oluşturuldu", - "colActions": "Eylemler" - }, - "navigation": { - "title": "Gezgin", - "flatCategories": "Düz kategoriler", - "publicRooms": "Umumi odalar", - "addCategory": "Kategori ekle", - "editCategory": "Kategoriyi düzenle", - "deleteCategory": "Kategoriyi sil", - "categoryName": "Kategori adı", - "categoryNamePlaceholder": "örneğin Rahatlayın ve Sohbet Edin", - "categoryOrder": "Sipariş", - "roomName": "Oda adı", - "roomNamePlaceholder": "örneğin Karşılama Salonu", - "roomId": "Oda Kimliği", - "roomIdPlaceholder": "Sayısal oda kimliği", - "save": "Kaydet", - "cancel": "İptal", - "noCategories": "Henüz kategori yok", - "noPublicRooms": "Henüz umumi oda yok", - "colId": "Kimlik", - "colName": "İsim", - "colOrder": "Sipariş", - "colRooms": "Odalar", - "colActions": "Eylemler" - }, - "helpCenter": { - "title": "Yardım Merkezi", - "subtitle": "Destek girişleri ve SSS yönetimi", - "entries": "Girişler", - "newEntry": "+ Yeni giriş", - "edit": "Düzenle", - "delete": "Sil", - "noEntries": "Henüz giriş yok", - "confirmDelete": "\"{title}\" silinsin mi?", - "colId": "Kimlik", - "colTitle": "Başlık", - "colCategory": "Kategori", - "colCreated": "Oluşturuldu", - "colActions": "Eylemler", - "form": { - "title": "Başlık", - "titlePlaceholder": "Giriş başlığı", - "category": "Kategori", - "categoryPlaceholder": "Kategori seç", - "body": "Vücut", - "bodyPlaceholder": "Cevabı yazın…", - "save": "Girişi kaydet", - "saving": "Kaydediliyor…", - "deleteEntry": "Girişi sil", - "cancel": "İptal" - } - }, - "ads": { - "title": "Reklamlar", - "subtitle": "Otel reklamlarını ve promosyon bannerlarını yönetin", - "newAd": "+ Yeni reklam", - "edit": "Düzenle", - "delete": "Sil", - "noAds": "Henüz reklam yok", - "confirmDelete": "Bu reklam silinsin mi?", - "colId": "Kimlik", - "colName": "İsim", - "colImage": "Resim", - "colUrl": "URL'si", - "colViews": "Görünümler", - "colStatus": "Durum", - "colCreated": "Oluşturuldu", - "colActions": "Eylemler", - "form": { - "name": "İsim", - "namePlaceholder": "Reklam adı", - "image": "Resim URL'si", - "imagePlaceholder": "https://example.com/banner.png", - "url": "Hedef URL", - "urlPlaceholder": "https://örnek.com", - "enabled": "Etkin", - "save": "Reklamı kaydet", - "saving": "Kaydediliyor…", - "deleteAd": "Reklamı sil", - "cancel": "İptal" - }, - "deleteSuccess": "Advertisement deleted!", - "deleteError": "Failed to delete advertisement.", - "adsCount": "Total ads", - "latest": "Latest", - "mostRecentAd": "Most recent ad", - "allAds": "All advertisements", - "colPreview": "Preview" - }, - "writeableBoxes": { - "title": "Yazılabilir Kutular", - "subtitle": "Otel genelinde ve CMS'de gösterilen içerik panelleri", - "newBox": "Yeni kutu", - "edit": "Düzenle", - "delete": "Sil", - "noBoxes": "Henüz yazılabilir kutu yok", - "confirmDelete": "Bu kutu silinsin mi?", - "colId": "Kimlik", - "colName": "İsim", - "colLocation": "Konum", - "colUpdated": "Güncellendi", - "colActions": "Eylemler", - "form": { - "name": "İsim", - "namePlaceholder": "Kutu adı", - "location": "Konum", - "locationPlaceholder": "örneğin ana sayfa, kenar çubuğu", - "content": "İçerik", - "contentPlaceholder": "Kutu içeriğini yazın…", - "enabled": "Etkin", - "save": "Kutuyu kaydet", - "saving": "Kaydediliyor…", - "deleteBox": "Kutuyu sil", - "cancel": "İptal" - } - }, - "photos": { - "title": "Fotoğraf Denetleme", - "subtitle": "En son oyun içi kamera fotoğrafları", - "delete": "Sil", - "approve": "Onayla", - "noPhotos": "Denetlenecek fotoğraf yok", - "confirmDelete": "Bu fotoğraf kalıcı olarak silinsin mi?", - "colId": "Kimlik", - "colPreview": "Önizleme", - "colUser": "Kullanıcı", - "colRoom": "Oda", - "colTimestamp": "Zaman damgası", - "colActions": "Eylemler", - "photoAlt": "Kullanıcı fotoğrafı #{id}", - "byUser": "{username} tarafından", - "photosShown": "Shown", - "rooms": "Rooms", - "users": "Users", - "distinctRooms": "Distinct rooms on this page", - "distinctPhotographers": "Distinct photographers on this page", - "total": "Total photos", - "recentPhotos": "Recent photos", - "pageOf": "Page {page} of {last} · {total} total", - "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." - }, - "users": { - "title": "Kullanıcılar", - "subtitle": "Otel hesaplarına göz atın, arayın ve yönetin", - "search": "Ara", - "searchPlaceholder": "Kullanıcı adına, e-postaya veya kimliğe göre arayın…", - "searchResults": "\"{query}\" için {count, plural, one {# result} other {# results}}", - "noResults": "Kullanıcı bulunamadı", - "colId": "Kimlik", - "colUsername": "Kullanıcı adı", - "colEmail": "E-posta", - "colRank": "Sıra", - "colOnline": "Çevrimiçi", - "colRegistered": "Kayıtlı", - "colLastOnline": "Son çevrimiçi", - "colActions": "Eylemler", - "yes": "Evet", - "no": "Hayır", - "edit": "Düzenle", - "setRank": "Sıralamayı ayarla", - "disconnect": "Bağlantıyı kes", - "alert": "Uyarı", - "ban": "Yasak", - "detail": { - "title": "Kullanıcı: {username}", - "subtitle": "Hesap ayrıntıları ve yönetimi", - "overview": "Genel Bakış", - "actions": "Eylemler", - "username": "Kullanıcı adı", - "email": "E-posta", - "motto": "Slogan", - "rank": "Sıra", - "credits": "Kredi", - "duckets": "Ördekler", - "diamonds": "Elmaslar", - "online": "Çevrimiçi", - "registered": "Kayıtlı", - "lastOnline": "Son çevrimiçi", - "ipAddress": "IP adresi", - "machineId": "Makine Kimliği", - "sendAlert": "Uyarı gönder", - "sendMessage": "Mesaj gönder", - "disconnectUser": "Kullanıcının bağlantısını kes", - "banUser": "Kullanıcıyı yasakla", - "resetPassword": "Şifreyi sıfırla", - "deleteUser": "Kullanıcıyı sil", - "confirmDelete": "{username}'i silmek istediğinizden emin misiniz? Bu geri alınamaz.", - "tabInfo": "Account Info", - "tabBadges": "Badges ({count})", - "tabRooms": "Rooms ({count})", - "tabSanctions": "Sanctions ({count})", - "tabActivity": "Activity" - }, - "editForm": { - "title": "Kullanıcıyı düzenle: {username}", - "subtitle": "Hesap ayrıntılarını değiştirin", - "username": "Kullanıcı adı", - "usernamePlaceholder": "Kullanıcı adı", - "email": "E-posta", - "emailPlaceholder": "kullanıcı@example.com", - "motto": "Slogan", - "mottoPlaceholder": "Kullanıcı sloganı", - "rank": "Sıra", - "credits": "Kredi", - "duckets": "Ördekler", - "diamonds": "Elmaslar", - "save": "Değişiklikleri kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal" - }, - "presentation": { - "users": "Users", - "edit": "Edit", - "view": "View", - "rank": "Rank {rank}", - "online": "Online", - "offline": "Offline", - "banned": "Banned", - "credits": "credits", - "diamonds": "diamonds", - "duckets": "duckets", - "pixels": "pixels", - "rooms": "Rooms", - "messages": "Messages", - "trades": "Trades", - "accountDetails": "Account details", - "registered": "Registered", - "lastLogin": "Last login", - "ipRegister": "Registration IP", - "ipCurrent": "Current IP", - "machineId": "Device ID", - "email": "Email", - "gender": "Gender", - "never": "Never", - "findIp": "Find users with this IP", - "enabled": "Enabled", - "disabled": "Disabled", - "unavailable": "Not available", - "noBadges": "No badges assigned" - }, - "create": { - "newUser": "New user", - "title": "Create user", - "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", - "username": "Username", - "email": "Email", - "password": "Password", - "rank": "Rank", - "rankOption": "Rank {rank}", - "motto": "Motto (optional)", - "usernamePlaceholder": "NewHabbo", - "passwordPlaceholder": "At least 6 characters", - "mottoPlaceholder": "I'm new here!", - "generate": "Generate", - "passwordGenerated": "Password generated in the password field.", - "required": "Username, email and password are required.", - "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", - "passwordLength": "The password must contain at least 6 characters.", - "created": "User {username} created." - }, - "overview": { - "title": "Overview", - "hint": "Up to 5 recent records per source. Only sections you can access are shown.", - "restricted": "You do not have permission to view operational records.", - "sanctions": "Recent bans", - "mute": "Active mute", - "tickets": "Support tickets", - "help": "Help center requests", - "reports": "In-game reports", - "transactions": "Payments", - "purchases": "Catalog purchases", - "activity": "Recorded staff actions", - "openModule": "Open management", - "purchaseHint": "Recorded quantities and currency costs.", - "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", - "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", - "muteUntil": "Muted until {date}", - "error": "This source could not be loaded. Refresh the page to try again.", - "empty": "No records found.", - "status": { - "active": "Active", - "expired": "Expired", - "open": "Open", - "closed": "Closed", - "reported": "Reported user", - "reporter": "Reporter" - } - } - }, - "bans": { - "title": "Yasaklar", - "subtitle": "Hesap, IP ve makine yasaklarını yönetin", - "newBan": "Yeni yasak", - "edit": "Düzenle", - "delete": "Sil", - "noBans": "Henüz yasak yok", - "confirmDelete": "Bu yasak kaldırılsın mı?", - "colId": "Kimlik", - "colValue": "Değer", - "colType": "Tür", - "colReason": "Sebep", - "colBannedBy": "Tarafından yasaklandı", - "colExpires": "Süresi doluyor", - "colCreated": "Oluşturuldu", - "colActions": "Eylemler", - "form": { - "value": "Değer", - "valuePlaceholder": "Kullanıcı adı, IP veya makine kimliği", - "type": "Tür", - "typeUser": "Kullanıcı", - "typeIp": "IP", - "typeMachine": "Makine", - "reason": "Sebep", - "reasonPlaceholder": "Yasaklama nedeni", - "expiresAt": "Süresi doluyor", - "permanent": "Kalıcı", - "save": "Yasağı kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal" - } - }, - "ip": { - "title": "IP Yönetimi", - "subtitle": "IP beyaz listesini ve kara listesini yönetin", - "whitelist": "Beyaz liste", - "blacklist": "Kara liste", - "addIp": "IP ekle", - "ipAddress": "IP adresi", - "ipAddressPlaceholder": "örneğin 127.0.0.1", - "reason": "Sebep", - "reasonPlaceholder": "Listelenme nedeni", - "add": "Ekle", - "remove": "Kaldır", - "confirmRemove": "Bu IP {list}'ten kaldırılsın mı?", - "noWhitelistedIps": "Beyaz listeye alınmış IP yok", - "noBlacklistedIps": "Kara listeye alınmış IP yok", - "colIp": "IP", - "colReason": "Sebep", - "colAdded": "Eklendi", - "colActions": "Eylemler" - }, - "vpn": { - "title": "VPN/Proxy Tespiti", - "subtitle": "VPN ve proxy algılama ayarlarını yapılandırma", - "enabled": "Etkin", - "apiKey": "API anahtarı", - "apiKeyPlaceholder": "VPN algılama API anahtarınız", - "apiKeyHint": "Devre dışı bırakmak için boş bırakın", - "blockOnDetect": "Tespit edildiğinde engelle", - "blockOnDetectHint": "Bir VPN veya proxy'nin arkasında tespit edilen kullanıcıları otomatik olarak engelle", - "save": "Ayarları kaydet", - "saving": "Kaydediliyor…", - "settingsSaved": "VPN ayarları başarıyla kaydedildi" - }, - "applications": { - "title": "Personel Başvuruları", - "subtitle": "Bekleyen ve incelenen personel başvuruları", - "pending": "Beklemede", - "approved": "Onaylandı", - "rejected": "Reddedildi", - "noApplications": "Henüz başvuru yok", - "colId": "Kimlik", - "colApplicant": "Başvuru sahibi", - "colPosition": "Pozisyon", - "colStatus": "Durum", - "colSubmitted": "Gönderildi", - "colActions": "Eylemler", - "review": "İncele", - "approve": "Onayla", - "reject": "Reddet", - "confirmApprove": "{username}, {position} için onaylansın mı?", - "confirmReject": "{username}'in {position} için yaptığı başvuru reddedilsin mi?", - "detail": { - "title": "{username} tarafından yapılan başvuru", - "subtitle": "{position} için", - "about": "Başvuru sahibi hakkında", - "message": "Uygulama mesajı", - "status": "Durum", - "submitted": "Gönderildi", - "noMessage": "Mesaj verilmedi" - } - }, - "teams": { - "title": "Takımlar", - "subtitle": "Personel rütbe adlarını ve açıklamalarını tanımlayın", - "addRank": "Sıralama ekle", - "editRank": "Sıralamayı düzenle", - "deleteRank": "Sıralamayı sil", - "noTeams": "Henüz rütbe tanımı yok", - "confirmDelete": "{id} rütbe tanımı silinsin mi?", - "colId": "Kimlik", - "colRank": "Sıra", - "colName": "İsim", - "colBadge": "Rozet", - "colColour": "Renk", - "colActions": "Eylemler", - "form": { - "rankId": "Sıra Kimliği", - "rankIdPlaceholder": "Sayısal sıralama kimliği", - "name": "İsim", - "namePlaceholder": "örneğin Yönetici", - "badge": "Rozet kodu", - "badgePlaceholder": "örneğin ADM001", - "colour": "Renk", - "colourPlaceholder": "örneğin #ff0000", - "save": "Ekip tanımını kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal" - } - }, - "permissions": { - "title": "İzinler", - "subtitle": "Yönetici paneli için sıralamaya dayalı izinleri yönetin", - "addPermission": "İzin ekle", - "editPermission": "İzni düzenle", - "deletePermission": "İzni sil", - "noPermissions": "Henüz yapılandırılmış izin yok", - "confirmDelete": "Bu izin silinsin mi?", - "colId": "Kimlik", - "colRank": "Sıra", - "colPermission": "İzin", - "colCreated": "Oluşturuldu", - "colActions": "Eylemler", - "form": { - "rankId": "Sıra Kimliği", - "rankIdPlaceholder": "Minimum rütbe gerekli", - "permission": "İzin anahtarı", - "permissionPlaceholder": "örneğin admin.articles.manage", - "save": "İzni kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal" - } - }, - "catalog": { - "title": "Katalog", - "subtitle": "Katalog sayfalarına ve öğelerine göz atın ve bunları yönetin", - "pages": "Sayfalar", - "items": "Öğeler", - "addPage": "Sayfa ekle", - "editPage": "Sayfayı düzenle", - "deletePage": "Sayfayı sil", - "addItem": "Öğe ekle", - "editItem": "Öğeyi düzenle", - "deleteItem": "Öğeyi sil", - "noPages": "Henüz katalog sayfası yok", - "noItems": "Bu sayfada öğe yok", - "confirmDeletePage": "\"{name}\" katalog sayfası silinsin mi?", - "confirmDeleteItem": "Bu öğe silinsin mi?", - "colId": "Kimlik", - "colName": "İsim", - "colIcon": "Simge", - "colOrder": "Sipariş", - "colItems": "Öğeler", - "colEnabled": "Etkin", - "colActions": "Eylemler", - "colItemId": "Öğe Kimliği", - "colItemName": "Öğe adı", - "colCostCredits": "Maliyet (kredi)", - "colCostPoints": "Maliyet (puan)", - "colLimited": "Sınırlı", - "pageForm": { - "name": "İsim", - "namePlaceholder": "Sayfa adı", - "icon": "Simge Kimliği", - "iconPlaceholder": "Sayısal simge kimliği", - "order": "Sipariş", - "enabled": "Etkin", - "parent": "Ana sayfa", - "parentNone": "Yok (kök)", - "save": "Sayfayı kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal" - }, - "itemForm": { - "itemId": "Öğe Kimliği", - "itemName": "Öğe adı", - "costCredits": "Kredilerdeki maliyet", - "costDuckets": "Ördeklerdeki maliyet", - "costDiamonds": "Elmas cinsinden maliyet", - "limitedStack": "Sınırlı yığın boyutu", - "limitedSold": "Sınırlı sayıda satıldı", - "save": "Öğeyi kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal" - }, - "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." - } - }, - "shop": { - "title": "Mağaza", - "subtitle": "Paketleri ve siparişleri yönetin", - "packages": "Paketler", - "orders": "Siparişler", - "newPackage": "+ Yeni paket", - "edit": "Düzenle", - "delete": "Sil", - "viewOrder": "Görüntüle", - "noPackages": "Henüz mağaza paketi yok", - "noOrders": "Henüz sipariş yok", - "confirmDelete": "Bu paket silinsin mi?", - "colId": "Kimlik", - "colName": "İsim", - "colPrice": "Fiyat", - "colCurrency": "Para birimi", - "colType": "Tür", - "colSold": "Satıldı", - "colEnabled": "Etkin", - "colActions": "Eylemler", - "colOrderId": "Sipariş Kimliği", - "colCustomer": "Müşteri", - "colPackage": "Paket", - "colAmount": "Tutar", - "colStatus": "Durum", - "colDate": "Tarih", - "statusPending": "Beklemede", - "statusCompleted": "Tamamlandı", - "statusRefunded": "Geri ödeme yapıldı", - "form": { - "name": "İsim", - "namePlaceholder": "Paket adı", - "description": "Açıklama", - "descriptionPlaceholder": "Paket açıklaması", - "price": "Fiyat", - "currency": "Para birimi", - "currencyPlaceholder": "EUR, USD, GBP…", - "type": "Tür", - "typeCredits": "Kredi", - "typeDuckets": "Ördekler", - "typeDiamonds": "Elmaslar", - "typeBadge": "Rozet", - "typeFurni": "Mobilya", - "typeRank": "Sıra", - "amount": "Tutar", - "badgeCode": "Rozet kodu", - "badgeCodePlaceholder": "örneğin VIP001", - "rankId": "Sıra Kimliği", - "furniItems": "Mobilya ürünleri", - "enabled": "Etkin", - "save": "Paketi kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal" - }, - "recentOrders": "Recent orders", - "paidOrders": "Paid orders", - "ordersHint": "Latest PayPal transactions", - "colCredits": "Credits", - "colDuckets": "Duckets", - "colDiamonds": "Diamonds", - "colRank": "Rank", - "colPosition": "Position", - "colTransaction": "Transaction", - "colUser": "User", - "colDescription": "Description", - "pageOf": "Page {page} of {lastPage}", - "packagesTotal": "{count} packages" - }, - "transactions": { - "title": "İşlemler", - "subtitle": "PayPal ödeme günlüğü", - "noTransactions": "Henüz işlem yok", - "colId": "Kimlik", - "colUser": "Kullanıcı", - "colAmount": "Tutar", - "colCurrency": "Para birimi", - "colPackage": "Paket", - "colStatus": "Durum", - "colDate": "Tarih", - "colActions": "Eylemler", - "statusCompleted": "Tamamlandı", - "statusPending": "Beklemede", - "statusFailed": "Başarısız", - "statusRefunded": "Geri ödeme yapıldı", - "detail": { - "title": "İşlem #{id}", - "paypalId": "PayPal Kimliği", - "payerEmail": "Ödeme yapan kişinin e-postası", - "grossAmount": "Brüt tutar", - "fee": "Ücret", - "netAmount": "Net tutar" - }, - "totalTransactions": "Total transactions", - "pagePaid": "Paid (this page)", - "pageFailed": "Failed (this page)", - "searchPlaceholder": "Search by user, transaction ID or package…", - "presetPaid": "Paid", - "presetFailed": "Failed", - "colPayer": "Payer", - "colTransaction": "Transaction ID" - }, - "vouchers": { - "title": "Alışveriş Kuponları", - "subtitle": "Kullanılabilir kupon kodlarını yönetin", - "newVoucher": "+ Yeni kupon", - "edit": "Düzenle", - "delete": "Sil", - "noVouchers": "Henüz kupon yok", - "confirmDelete": "\"{code}\" kuponu silinsin mi?", - "colId": "Kimlik", - "colCode": "Kod", - "colValue": "Değer", - "colType": "Tür", - "colUses": "Kullanımlar / Maksimum", - "colExpires": "Süresi doluyor", - "colCreated": "Oluşturuldu", - "colActions": "Eylemler", - "form": { - "code": "Kod", - "codePlaceholder": "örneğin YAZ2025", - "value": "Değer", - "type": "Tür", - "typeCredits": "Kredi", - "typeDuckets": "Ördekler", - "typeDiamonds": "Elmaslar", - "typeBadge": "Rozet", - "typeFurni": "Mobilya", - "typeRank": "Sıra", - "badgeCode": "Rozet kodu", - "badgeCodePlaceholder": "örneğin VIP001", - "rankId": "Sıra Kimliği", - "maxUses": "Maksimum kullanım", - "maxUsesPlaceholder": "0 = sınırsız", - "expiresAt": "Süresi doluyor", - "enabled": "Etkin", - "save": "Kuponu kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal", - "amount": "Credits amount", - "amountPlaceholder": "e.g. 100", - "create": "Create voucher" - }, - "vouchers": "Vouchers", - "active": "Active", - "usedUp": "Used up", - "expired": "Expired", - "confirmDeleteTitle": "Delete voucher", - "created": "Voucher created", - "deleted": "Voucher deleted", - "createError": "Could not create voucher", - "deleteError": "Could not delete voucher", - "statusActive": "Active", - "statusUsedUp": "Used up", - "statusExpired": "Expired", - "colAmount": "Amount", - "colStatus": "Status" - }, - "subscriptions": { - "title": "Abonelikler", - "subtitle": "Aktif yinelenen abonelikler", - "noSubscriptions": "Aktif abonelik yok", - "cancel": "İptal", - "confirmCancel": "{username} aboneliği iptal edilsin mi?", - "colId": "Kimlik", - "colUser": "Kullanıcı", - "colPackage": "Paket", - "colAmount": "Tutar", - "colInterval": "Aralık", - "colStarted": "Başlatıldı", - "colNextBilling": "Sonraki faturalandırma", - "colStatus": "Durum", - "colActions": "Eylemler", - "statusActive": "Aktif", - "statusCancelled": "İptal edildi", - "statusExpired": "Süresi dolmuş" - }, - "rareValues": { - "title": "Nadir Değerler", - "subtitle": "Nadir değer kategorilerini ve ürün fiyatlarını yönetin", - "categories": "Kategoriler", - "items": "Öğeler", - "addCategory": "Kategori ekle", - "editCategory": "Kategoriyi düzenle", - "deleteCategory": "Kategoriyi sil", - "noCategories": "Henüz nadir değer kategorisi yok", - "confirmDeleteCategory": "\"{name}\" kategorisi ve tüm öğeleri silinsin mi?", - "colId": "Kimlik", - "colName": "İsim", - "colItems": "Öğeler", - "colUpdated": "Güncellendi", - "colActions": "Eylemler", - "colItemName": "Öğe adı", - "colCredits": "Kredi", - "colPoints": "Puanlar", - "colPointType": "Nokta türü", - "categoryForm": { - "name": "İsim", - "namePlaceholder": "Kategori adı", - "save": "Kategoriyi kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal" - }, - "itemForm": { - "itemName": "Öğe adı", - "itemNamePlaceholder": "örneğin Taht", - "credits": "Kredi değeri", - "points": "Puan değeri", - "pointType": "Nokta türü", - "pointTypeDuckets": "Ördekler", - "pointTypeDiamonds": "Elmaslar", - "save": "Öğeyi kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal" - } - }, - "badges": { - "title": "Rozetler", - "subtitle": "Rozet kataloğunu yükleyin, verin ve yönetin", - "upload": "Yükle", - "giveBadge": "Rozet ver", - "catalogue": "Katalog", - "uploadTitle": "Yeni bir rozet yükleyin", - "uploadSubtitle": "Rozet resim dosyası yükleyin", - "badgeCode": "Rozet kodu", - "badgeCodePlaceholder": "örneğin VIP001", - "badgeFile": "Rozet dosyası", - "badgeFileHint": "PNG veya GIF, önerilen 40x40", - "uploadButton": "Yükle", - "uploading": "Yükleniyor…", - "giveTitle": "Kullanıcıya rozet ver", - "giveSubtitle": "Belirli bir kullanıcıya rozet verme", - "username": "Kullanıcı adı", - "usernamePlaceholder": "Hedef kullanıcı adı", - "giveButton": "Rozet ver", - "giving": "Veriyorum…", - "catalogueTitle": "Rozet kataloğu", - "catalogueSubtitle": "Oteldeki tüm mevcut rozetler", - "noBadges": "Katalogda rozet yok", - "search": "Rozet ara", - "searchPlaceholder": "Kod veya ada göre arayın…", - "colCode": "Kod", - "colImage": "Resim", - "colName": "İsim", - "colDescription": "Açıklama", - "colActions": "Eylemler" - }, - "achievements": { - "title": "Başarılar", - "subtitle": "Oyun içi başarıların salt okunur listesi", - "noAchievements": "Hiçbir başarı yapılandırılmadı", - "colId": "Kimlik", - "colName": "İsim", - "colCategory": "Kategori", - "colLevels": "Seviyeler", - "colReward": "Ödül", - "colProgress": "İlerleme", - "levelLabel": "Seviye {level}", - "rewardCredits": "{count} kredi", - "rewardPoints": "{count} {points}" - }, - "calendar": { - "title": "Takvim kampanyaları", - "subtitle": "Takvim kampanyalarının ve etkinliklerinin salt okunur listesi", - "noCampaigns": "Henüz takvim kampanyası yok", - "colId": "Kimlik", - "colName": "İsim", - "colStart": "Başlat", - "colEnd": "Bitiş", - "colType": "Tür", - "colReward": "Ödül", - "colActions": "Eylemler", - "detail": { - "title": "Kampanya: {name}", - "subtitle": "Takvim etkinliği ayrıntıları", - "days": "Günler", - "dayLabel": "Gün {day}", - "reward": "Ödül", - "noDays": "Bu kampanya için yapılandırılmış gün yok" - } - }, - "radio": { - "title": "Radyo Moderasyon", - "subtitle": "En son sesler, DJ uygulamaları ve canlı yayın programları (her birinden en yeni 25 adet).", - "moderation": "Moderasyon", - "shouts": "Bağırışlar", - "applications": "Uygulamalar", - "schedules": "Programlar", - "settings": "Ayarlar", - "embed": "Göm", - "ranks": "Rütbeler", - "history": "Tarih", - "apiKeys": "API Anahtarları", - "points": "Puanlar", - "autoDj": "AutoDJ", - "monitoring": { - "title": "Radyo İzleme", - "subtitle": "Yapılandırılmış radyo uç noktalarının salt okunur canlı araştırması (radio_now_playing_api_url, Radio_listeners_api_url). Her istek bir {timeout} zaman aşımı süresiyle başarısız olur; hiçbir veri yazılmaz. URL'leri Ayarlar altında yapılandırın.", - "stream": "Akış", - "online": "Çevrimiçi", - "offline": "Çevrimdışı", - "notConfigured": "Yapılandırılmadı", - "nowPlaying": "Şimdi oynatılıyor", - "nowPlayingApi": "Şu anda oynatılan API", - "listenersApi": "Dinleyiciler API'sı", - "listeners": "Dinleyiciler", - "currentSong": "Mevcut şarkı", - "bitrate": "Bit hızı", - "status": "Durum", - "noNowPlayingHint": "şu anda oynatılan API seti yok", - "noListenersHint": "dinleyici API seti yok", - "endpointDiagnostics": "Uç nokta teşhisi", - "diagnosticsLegend": "OK: erişilebilir · WARN: yapılandırılmamış · ERROR: istek başarısız veya zaman aşımına uğradı.", - "streamUrl": "Akış URL'si", - "unreachable": "ulaşılamaz", - "refresh": "Yenile" - }, - "user": "Kullanıcı", - "message": "Mesaj", - "posted": "Gönderildi", - "realName": "Gerçek Ad", - "age": "Yaş", - "style": "Stil", - "applied": "Uygulandı", - "day": "Gün", - "start": "Başlat", - "end": "Bitiş", - "show": "Göster", - "status": "Durum", - "active": "aktif", - "inactive": "aktif değil", - "hidden": "gizli", - "activeSchedules": "Aktif programlar", - "noShouts": "Moderasyona bağırmak yok", - "noApplications": "Hiçbir başvuru gönderilmedi.", - "noSchedules": "Yapılandırılmış program yok.", - "deleteShout": "Sil", - "confirmDeleteShout": "Bu bağırış silinsin mi?", - "pendingApplications": "Bekleyen başvurular", - "settingsForm": { - "title": "Radyo Ayarları", - "subtitle": "Düzenlemeler website_settings'e (radio_* tuşları) yazar ve çalışma zamanı ayarları önbelleğini bozar. Boolean'lar 0 / 1'i kullanır.", - "enabled": "Etkin", - "disabled": "Devre dışı", - "totalKeys": "Toplam anahtarlar", - "configured": "Yapılandırılmış", - "curatedHint": "değeri olan seçilmiş anahtarlar", - "customKeys": "Özel anahtarlar", - "saveAll": "Tümünü kaydet", - "singleKey": "Tek bir anahtarın eklenmesi/üzerine yazılması", - "keyPlaceholder": "radyo_özel_anahtarı", - "valuePlaceholder": "değer", - "commentPlaceholder": "yorum (isteğe bağlı)", - "saveSingle": "Kaydet", - "otherSettings": "Diğer radyo ayarları", - "dbError": "Ayarlar yüklenemedi (veritabanı mevcut değil). Varsayılanlar kaydetme sırasında oluşturulacaktır." - }, - "embedPage": { - "title": "Radyo Yerleştirme", - "subtitle": "Canlı yayın için kopyalamaya hazır yerleştirme kodu. Salt okunur — burada hiçbir şey veritabanına yazmaz. Akış URL'sini Radyo Ayarlarında (radio_stream_url) yapılandırın.", - "streamUrl": "Akış URL'si", - "configured": "Yapılandırılmış", - "missing": "Eksik", - "radioName": "Radyo adı", - "nowPlayingApi": "Şu anda oynatılan API", - "set": "Ayarla", - "notSet": "Ayarlanmadı", - "noStreamUrl": "Hiçbir akış URL'si yapılandırılmadı", - "noStreamUrlText": "Radio_stream_url kümesi yok, bu nedenle henüz eklenecek bir şey yok.", - "goToSettings": "Radyo Ayarlarına Git", - "livePreview": "Canlı önizleme", - "livePreviewText": "Bu, ziyaretçilerin göreceği şekliyle çıplak audio oynatıcısıdır. Akışın erişilebilir olduğunu onaylamak için oynat tuşuna basın.", - "source": "Kaynak", - "audioSnippet": "Ses oynatıcı snippet'i", - "audioSnippetDesc": "Açılan HTML5 ses oynatıcısı doğrudan akışa işaret ediyordu. Düz HTML'ye izin verilen her yerde çalışır.", - "iframeSnippet": "Iframe sarmalayıcı snippet'i", - "iframeSnippetDesc": "Sitenin kendi radyo oynatıcı sayfasını bir iframe'e yerleştirir; stilinizi ve şu anda oynatılan bilgilerinizi korur. Genişliği/yüksekliği zevkinize göre ayarlayın.", - "audioUnsupported": "Tarayıcınız ses öğesini desteklemiyor." - }, - "banners": { - "title": "Afişler", - "heading": "Radyo Bannerları", - "description": "Radyo sayfasında gösterilen, sıralama düzenine göre sıralanmış promosyon afişleri.", - "addBanner": "Banner ekle", - "createBanner": "Banner oluştur", - "deleteBanner": "Banner'ı sil", - "noBanners": "Henüz banner yok; yukarıya bir tane ekleyin.", - "existing": "Mevcut banner'lar ({count})", - "save": "Kaydet", - "delete": "Sil", - "byUser": "{id} kullanıcısına göre", - "active": "aktif", - "hidden": "gizli", - "bannerAlt": "Radyo afişi", - "statusActive": "Aktif", - "statusHidden": "Gizli", - "dbError": "Banner'lar yüklenemedi (veritabanı mevcut değil).", - "form": { - "imagePath": "Resim yolu / URL'si", - "imagePathPlaceholder": "/storage/radio/banner.png", - "title": "Başlık", - "description": "Açıklama", - "sortOrder": "Sıralama düzeni", - "active": "Aktif" - } - }, - "ranksForm": { - "title": "Radyo Sıralamaları", - "subtitle": "Radyo uygulamalarında DJ/personel atanabilir.", - "dbError": "Dereceler yüklenemedi (veritabanı mevcut değil).", - "active": "Aktif", - "addRank": "Sıralama ekle", - "name": "İsim", - "badgeCode": "Rozet kodu", - "description": "Açıklama", - "createRank": "Sıralama oluştur", - "existing": "Mevcut sıralamalar ({count})", - "noRanks": "Henüz sıralama yok; yukarıya bir tane ekleyin.", - "activeLabel": "aktif", - "inactiveLabel": "aktif değil", - "save": "Kaydet", - "deleteRank": "#{id} sırasını sil" - }, - "historyPage": { - "title": "Radyo Çalma Geçmişi", - "subtitle": "Geçmiş DJ şovları ve yayın saatleri (radio_history), en yenisi ilk sırada. Kimin, ne zaman ve kaç dinleyicinin yayında olduğunu gösteren salt okunur kayıt.", - "dbError": "Radyo geçmişi yüklenemedi (veritabanı yok).", - "showsLogged": "Günlüğe kaydedilenleri gösterir", - "onAirNow": "Şu anda yayında", - "uniqueDjs": "Benzersiz DJ'ler", - "peakListeners": "En yüksek dinleyiciler", - "empty": "Henüz kayıtlı radyo geçmişi yok.", - "showLog": "Günlüğü göster ({count})", - "colDj": "DJ", - "colShow": "Göster", - "colStarted": "Başlatıldı", - "colEnded": "Sona erdi", - "colAirtime": "Yayın Süresi", - "colListeners": "Dinleyiciler", - "colNotes": "Notlar", - "onAir": "yayında" - }, - "apiKeysForm": { - "title": "Radyo API Anahtarları", - "subtitle": "Harici radyo entegrasyonları için API anahtarları (radio_api_keys). Anahtarlar sunucu tarafında oluşturulur ve maskelenmiş olarak gösterilir; ilk verildiğinde tam değeri veritabanından kopyalayın.", - "dbError": "API anahtarları yüklenemedi (veritabanı kullanılamıyor).", - "totalKeys": "Toplam anahtarlar", - "active": "Aktif", - "inactive": "Etkin değil", - "generateKey": "Anahtar oluştur", - "generateHint": "Gizli anahtar, kriptografik rastgelelikle otomatik olarak oluşturulur; onu girmezsiniz.", - "name": "İsim", - "namePlaceholder": "AzureCast köprüsü", - "rateLimit": "Hız sınırı (istek/dak)", - "allowedIps": "İzin verilen IP'ler (isteğe bağlı)", - "allowedIpsPlaceholder": "virgülle ayrılmış, boş = herhangi biri", - "generate": "Anahtar oluştur", - "existingKeys": "Mevcut anahtarlar ({count})", - "noKeys": "Henüz API anahtarı yok; yukarıda bir tane oluşturun.", - "colName": "İsim", - "colKey": "Anahtar", - "colAllowedIps": "İzin verilen IP'ler", - "colRateLimit": "Oran sınırı", - "colLastUsed": "Son kullanılan", - "colExpires": "Süresi doluyor", - "colStatus": "Durum", - "colActions": "Eylemler", - "maskedHint": "Yalnızca ilk 8 karakter gösteriliyor", - "any": "herhangi biri", - "activeLabel": "aktif", - "inactiveLabel": "aktif değil", - "deactivate": "Devre dışı bırak", - "activate": "Etkinleştir", - "delete": "Sil" - }, - "pointsForm": { - "title": "Radyo Dinleyici Noktaları", - "subtitle": "Dinleyicileri radyoda geçirdikleri süre karşılığında parayla ödüllendirin. Düzenlemeler website_settings'e (radio_points_* tuşları) yazar ve çalışma zamanı ayarları önbelleğini bozar. Boolean'lar 0 / 1'i kullanır.", - "saved": "Kaydedildi", - "points": "Puanlar", - "enabled": "Etkin", - "disabled": "Devre dışı", - "perMinute": "Dakikada", - "paidIn": "{currency} cinsinden ödendi", - "maxPerDay": "Maksimum / gün", - "unlimited": "Sınırsız", - "minListeners": "Minimum dinleyici", - "settings": "Ayarlar", - "pointsEnabled": "Puanlar etkinleştirildi", - "pointsEnabledHint": "Dinleyici puanlarını ödüllendirmek için ana anahtar.", - "currency": "Para birimi", - "currencyHint": "Puanların hangi cüzdana ödeneceği.", - "pointsPerMinute": "Dakika başına puan", - "pointsPerMinuteHint": "Dinlemenin her tam dakikası için verilen miktar.", - "maxPerDayHint": "Kullanıcı başına günlük sınır. Sınırsız için 0'ı kullanın.", - "minListenersHint": "Puanlar yalnızca en az bu kadar kişi programa katıldığında verilir.", - "save": "Puan ayarlarını kaydet" - }, - "autoDjForm": { - "title": "Radio AutoDJ", - "subtitle": "Geri dönüş çalma listesi (radio_auto_dj_playlist) hiçbir canlı DJ akışı olmadığında radyo döner. Sıralama düzenine ve ardından başlığa göre sıralanır.", - "dbError": "AutoDJ çalma listesi yüklenemedi (veritabanı mevcut değil).", - "tracks": "Parçalar", - "active": "Aktif", - "inactive": "Etkin değil", - "addTrack": "Parça ekle", - "titlePlaceholder": "Parça başlığı", - "artist": "Sanatçı", - "album": "Albüm", - "artworkUrl": "Çizim URL'si", - "artworkUrlPlaceholder": "https://…/cover.png", - "duration": "Süre (saniye)", - "durationPlaceholder": "örneğin 215", - "sortOrder": "Sıralama düzeni", - "playlist": "Oynatma listesi ({count})", - "noTracks": "Henüz AutoDJ parçası yok; yukarıya bir tane ekleyin.", - "colOrder": "Sipariş", - "colTitle": "Başlık", - "colArtist": "Sanatçı", - "colAlbum": "Albüm", - "colDuration": "Süre", - "colPlays": "Oynatmalar", - "colLastPlayed": "Son oynanma", - "colStatus": "Durum", - "colActions": "Eylemler", - "activeLabel": "aktif", - "inactiveLabel": "aktif değil", - "deactivate": "Devre dışı bırak", - "activate": "Etkinleştir", - "delete": "Sil", - "trackTitle": "Başlık" - }, - "moderationPage": { - "title": "DJ Moderasyon", - "subtitle": "Radyo bağırışlarını inceleyin ve kaldırın (en yeni 50).", - "recentShouts": "Son Duyurular ({count})" - } - }, - "commandocentrum": { - "title": "Komando merkezi", - "subtitle": "Teşhis, RCON kontrolleri ve kullanıcı yönetimi", - "diagnostics": "Teşhis", - "rcon": "RCON", - "userActions": "Kullanıcı işlemleri", - "diagnosticsTitle": "Emülatör teşhisi", - "memoryUsage": "Bellek kullanımı", - "uptime": "Çalışma süresi", - "onlineUsers": "Çevrimiçi kullanıcılar", - "roomsLoaded": "Yüklenen odalar", - "refresh": "Yenile", - "rconTitle": "RCON komutları", - "rconPlaceholder": "RCON komutunu girin…", - "rconSend": "Gönder", - "rconSending": "Gönderiliyor…", - "rconResponse": "Yanıt", - "userActionsTitle": "Kullanıcı işlemleri", - "username": "Kullanıcı adı", - "usernamePlaceholder": "Hedef kullanıcı adı", - "action": "Eylem", - "execute": "Yürüt", - "actions": { - "disconnect": "Bağlantıyı kes", - "alert": "Uyarı gönder", - "giveCredits": "Kredi ver", - "giveBadge": "Rozet ver", - "givePoints": "Puan ver", - "ban": "Yasak", - "kick": "Tekme" - }, - "messagePlaceholder": "Mesaj (uyarılar için)…", - "amountPlaceholder": "Tutar…", - "badgePlaceholder": "Rozet kodu…" - }, - "emulator": { - "title": "Emülatör Yapılandırması", - "subtitle": "Emülatör ayarlarını ve yerel ayar metinlerini görüntüleyin ve düzenleyin", - "settings": "Ayarlar", - "texts": "Metinler", - "search": "Ara", - "searchPlaceholder": "Arama anahtarları…", - "noSettings": "Hiçbir ayar bulunamadı", - "noTexts": "Metin bulunamadı", - "edit": "Düzenle", - "save": "Kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal", - "colKey": "Anahtar", - "colValue": "Değer", - "colType": "Tür", - "colActions": "Eylemler", - "editDialog": { - "title": "Düzenleme: {key}", - "value": "Değer", - "valuePlaceholder": "Değer girin…", - "save": "Değişiklikleri kaydet", - "cancel": "İptal" - } - }, - "alerts": { - "title": "Uyarılar", - "subtitle": "Otel genelinde uyarılar gönderin ve son uyarıları görüntüleyin", - "sendAlert": "Otel uyarısı gönder", - "recentAlerts": "Son uyarılar ({count})", - "noRecentAlerts": "Yeni uyarı yok", - "form": { - "title": "Uyarı başlığı", - "titlePlaceholder": "örneğin 10 dakikada sunucu bakımı", - "message": "Uyarı mesajı", - "messagePlaceholder": "Uyarı mesajını yazın…", - "type": "Tür", - "typeHotel": "Otel genelinde uyarı", - "typeStaff": "Yalnızca personel", - "urgent": "Acil", - "send": "Uyarı gönder", - "sending": "Gönderiliyor…", - "description": "Broadcasts via RCON hotelalert to online users." - }, - "colId": "Kimlik", - "colTitle": "Başlık", - "colSentBy": "Gönderen", - "colType": "Tür", - "colDate": "Tarih", - "colActions": "Eylemler", - "noAlerts": "No recent alerts", - "alertsShown": "Shown", - "critical": "Critical", - "warnings": "Warnings", - "unread": "Unread", - "markAllRead": "Mark all read", - "colWhen": "When", - "colSeverity": "Severity", - "colMessage": "Message" - }, - "logs": { - "title": "Personel Faaliyetleri", - "subtitle": "Yönetici panelindeki personel eylemlerinin denetim takibi", - "noLogs": "Henüz personel etkinliği kaydedilmedi", - "colId": "Kimlik", - "colUser": "Kullanıcı", - "colAction": "Eylem", - "colTarget": "Hedef", - "colDescription": "Açıklama", - "colIp": "IP", - "colTimestamp": "Zaman damgası", - "filterByUser": "Kullanıcıya göre filtrele…", - "filterByAction": "Eyleme göre filtrele…", - "clearFilters": "Filtreleri temizle", - "noResults": "No matching activities", - "colStaff": "Staff", - "colWhen": "When", - "searchPlaceholder": "Search action, description or IP…", - "totalActivities": "Total activities", - "onThisPage": "On this page", - "recent": "Last minute", - "authorizationErrors": "Authorization errors", - "authorizationOnly": "Auth errors only", - "allActivities": "All activities", - "staffId": "Staff ID", - "actionType": "Action type", - "filter": "Filter", - "activities": "{count} activities", - "staffWithId": "#{id} {name}", - "userPrefix": "user", - "pagination": "Page {page} of {pages} · {total} total", - "next": "Next", - "prev": "Previous", - "unknownUser": "unknown", - "emptyValue": "-", - "colTime": "Time", - "audit": { - "colTargetId": "Target ID", - "colDetails": "Details", - "colDate": "Date", - "searchPlaceholder": "Search by action or target…", - "changesCount": "{count} changes", - "notAvailable": "N/A", - "filtersTitle": "Filter audit records", - "filterActor": "Actor (exact username or ID)", - "filterAction": "Exact action", - "filterFrom": "From date (UTC)", - "filterTo": "Through date (UTC)", - "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", - "applyFilters": "Apply filters", - "resetFilters": "Reset filters", - "invalidDetails": "These legacy details cannot be displayed.", - "beforeValue": "Before", - "afterValue": "After", - "exportHint": "CSV exports the current filtered page, up to 100 records." - }, - "chat": { - "colMessage": "Message", - "colRoomId": "Room ID", - "searchPlaceholder": "Search by username or message…" - }, - "commands": { - "colCommand": "Command", - "colParams": "Params", - "searchPlaceholder": "Search by username, command, or params…" - }, - "trades": { - "colUserOne": "User one", - "colUserTwo": "User two", - "colStatus": "Status", - "statusUnknown": "unknown", - "searchPlaceholder": "Search by username…" - }, - "history": { - "preview": "Preview restore", - "title": "Restore a recorded edit", - "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", - "loading": "Loading…", - "unavailable": "This revision is unavailable or you do not have permission to restore it.", - "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", - "failed": "The restore could not be completed. Please reload and try again.", - "field": "Field", - "current": "Current value", - "restore": "Value to restore", - "confirm": "Confirm restore", - "restoring": "Restoring…", - "fields": { - "caption": "Category name", - "captionSave": "Internal category name", - "pageLayout": "Category layout", - "enabled": "Enabled", - "visible": "Visible", - "clubOnly": "Club members only", - "vipOnly": "VIP members only", - "minRank": "Minimum rank", - "iconImage": "Category icon", - "iconColor": "Icon colour", - "pageHeadline": "Header image", - "pageTeaser": "Preview image", - "pageSpecial": "Special image", - "pageText1": "Primary text", - "pageText2": "Secondary text", - "pageTextDetails": "Details text", - "pageTextTeaser": "Preview text", - "includes": "Included categories", - "costCredits": "Credit price", - "costPoints": "Points price", - "pointsType": "Points currency", - "title": "News title", - "slug": "News address", - "image": "News image", - "shortStory": "Summary", - "fullStory": "Article content", - "status": "Publication status", - "publishAt": "Scheduled publication", - "publishedAt": "Publication date", - "pageId": "Category" - } - } - }, - "wordfilter": { - "title": "Kelime Filtresi", - "subtitle": "Otelde filtrelenen kelimeleri ve cümleleri yönetin", - "addWord": "Kelime ekle", - "addWords": "Kelime ekle", - "noWords": "Henüz filtrelenmiş kelime yok", - "confirmDelete": "\"{word}\" filtreden kaldırılsın mı?", - "colId": "Kimlik", - "colWord": "Kelime", - "colAddedBy": "Tarafından eklendi", - "colCreated": "Oluşturuldu", - "colActions": "Eylemler", - "form": { - "word": "Kelime", - "wordPlaceholder": "örneğin kötü söz", - "addMore": "Birden fazla kelime ekleyin (her satıra bir tane)", - "save": "Filtreye ekle", - "saving": "Kaydediliyor…", - "cancel": "İptal" - }, - "filteredWords": "Filtered words", - "words": "Words", - "delete": "Delete", - "confirmDeleteTitle": "Remove word", - "added": "Word added to filter", - "deleted": "Word removed from filter", - "addError": "Could not add word (it may already exist)", - "deleteError": "Could not remove word" - }, - "maintenance": { - "title": "Bakım Modu", - "subtitle": "Otel genelinde bakımı etkinleştirme veya devre dışı bırakma", - "enabled": "Bakım modu etkin", - "disabled": "Bakım modu devre dışı", - "enable": "Bakımı etkinleştir", - "disable": "Bakımı devre dışı bırak", - "message": "Bakım mesajı", - "messagePlaceholder": "Kısa süre sonra geri döneceğiz!", - "staffAccess": "Bakım sırasında personelin erişimine izin ver", - "save": "Ayarları kaydet", - "saving": "Kaydediliyor…", - "confirmEnable": "Bakımın etkinleştirilmesi, personel dışındaki tüm kullanıcıların otele erişimini engelleyecektir. Devam etmek?", - "confirmDisable": "Bakım modu devre dışı bırakılsın ve tüm kullanıcılar için erişim yeniden sağlansın mı?" - }, - "housekeeping": { - "title": "Kat Hizmetleri İzinleri", - "subtitle": "Hangi kademelerin hangi yönetici bölümlerine erişebileceğini yapılandırın", - "addPermission": "İzin ekle", - "editPermission": "İzni düzenle", - "deletePermission": "İzni sil", - "noPermissions": "Hiçbir temizlik izni yapılandırılmadı", - "confirmDelete": "Bu izin silinsin mi?", - "colId": "Kimlik", - "colRank": "Sıra", - "colSection": "Bölüm", - "colActions": "Eylemler", - "form": { - "rankId": "Sıra Kimliği", - "rankIdPlaceholder": "Asgari sıralama", - "section": "Bölüm anahtarı", - "sectionPlaceholder": "örneğin admin.kontrol paneli", - "save": "İzni kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal" - }, - "saved": "Saved!", - "deleted": "Deleted!", - "errorOccurred": "An error occurred", - "emptyInput": "Empty input", - "invalidJson": "Invalid JSON", - "imported": "Imported!", - "presetApplied": "Preset Uygulandı!", - "cleared": "All İzinler cleared!", - "invalidRank": "Invalid Sıra", - "testDone": "Test done: {count} İzinler found", - "testing": "Testing...", - "loading": "Loading...", - "prev": "Previous", - "next": "Next", - "confirmClearAll": "Sil ALL İzinler? This Eylem cannot be undone!", - "colGroup": "Group", - "colDepends": "Depends on", - "colPermission": "İzin", - "colDescription": "Açıklama", - "colMinRank": "Min. Sıra", - "permissionKey": "İzin anahtarı", - "minRank": "Min. Sıra", - "description": "Açıklama", - "permissions": "İzinler", - "permissionsCount": "{count} İzinler", - "permission": "İzin", - "highestMinRank": "Highest min. Sıra: {rank}", - "totalMinRank": "Total min. Sıra sum: {total}", - "groupCount": "{count} groups", - "rankCount": "{count} Rütbeler", - "missingDeps": "{count} Eksik dependencies", - "dependsOn": "depends on", - "notFound": "not found", - "missing": "(Eksik)", - "rank": "Sıra", - "count": "Count", - "searchPermission": "Ara İzinler…", - "search": "Ara", - "manage": "Manage", - "importSelection": "İthalat selection", - "noGroup": "Hayır group", - "allGroups": "All groups", - "perGroup": "İzinler per group", - "perRank": "İzinler per Sıra", - "rankOverviewHint": "All İzinler grouped by the Sıra they are assigned to.", - "tabOverview": "Genel Bakış", - "tabManage": "Manage", - "tabImport": "İthalat / Export", - "tabRanks": "Sıra Genel Bakış", - "tabPresets": "Ön ayarlar", - "tabTest": "Test", - "tabAudit": "Audit log", - "importPermissions": "İthalat İzinler", - "importHint": "Paste a JSON array of İzin objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", - "importPlaceholder": "Paste JSON here…", - "import": "İthalat", - "exportTitle": "Export İzinler", - "exportHint": "Export all İzinler as JSON for backup or batch editing.", - "export": "Export JSON", - "copy": "Copy", - "copied": "Copied!", - "presets": "İzin Ön ayarlar", - "presetsHint": "Uygula a predefined Ayarla of İzinler for common staff roles.", - "presetModerator": "Moderator", - "presetModeratorDesc": "Basic Moderasyon tools: Kullanıcı lookup, Yasaklar, CFH handling, chat Günlükler.", - "presetAdmin": "Administrator", - "presetAdminDesc": "Full admin access: Kullanıcılar, Odalar, news, Ayarlar, Mağaza, events, Radyo & more.", - "presetSuperAdmin": "Super Admin", - "presetSuperAdminDesc": "Complete access to every feature including İzin management and asset İthalat.", - "applyPreset": "Uygula preset", - "clearAll": "Clear all İzinler", - "testTitle": "Test Sıra access", - "testHint": "Enter a Sıra number to see which İzinler would be granted.", - "test": "Test", - "auditTitle": "İzin audit log", - "auditHint": "All changes to Temizlik İzinler are logged.", - "auditLogsAt": "Audit Günlükler are available on the Audit log page.", - "viewAuditLogs": "Görüntüle audit Günlükler", - "importedWithErrors": "Imported {count} İzinler with {errors} errors", - "confirmClearAllDesc": "This will Kaldır every İzin entry from the Veritabanı. Are you sure?", - "confirmDeletePermission": "Sil this İzin permanently?", - "confirmBulkDelete": "Sil {count} selected İzinler?", - "deleteSelected": "Sil {count} selected", - "cancel": "İptal", - "confirm": "Confirm", - "auditTime": "Time", - "auditUser": "Kullanıcı", - "auditAction": "Eylem", - "auditTarget": "Hedef", - "selectAllMatching": "Select all {count} matching", - "save": "Save", - "importTitle": "Import permissions", - "legacyBannerTitle": "Use Permissions to change who can do what", - "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", - "legacyBannerCta": "Open Permissions", - "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", - "tabCompare": "ACL compare", - "tabExportOnly": "Export archive", - "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", - "compareAligned": "{count} aligned", - "compareMissingAcl": "{count} missing in ACL", - "compareMismatch": "{count} rank mismatch", - "colAclPresent": "In ACL", - "colAclMinRank": "ACL min rank", - "colStatus": "Status", - "statusAligned": "Aligned", - "statusMissingAcl": "Missing in ACL", - "statusMismatch": "Rank differs", - "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." - }, - "rooms": { - "title": "Odalar", - "subtitle": "Otel odalarını arayın ve yönetin", - "search": "Ara", - "searchPlaceholder": "Ada, sahibine veya kimliğe göre arayın…", - "searchResults": "{count, plural, one {# room} other {# rooms}} found for \"{query}\"", - "noResults": "Oda bulunamadı", - "colId": "Kimlik", - "colName": "İsim", - "colOwner": "Sahip", - "colUsers": "Kullanıcılar", - "colState": "Eyalet", - "colCategory": "Kategori", - "colCreated": "Oluşturuldu", - "colActions": "Eylemler", - "stateOpen": "Açık", - "stateClosed": "Kapalı", - "stateLocked": "Kilitli", - "stateInvisible": "Görünmez", - "detail": { - "title": "Oda: {name}", - "subtitle": "{owner}'a ait", - "overview": "Genel Bakış", - "actions": "Eylemler", - "description": "Açıklama", - "noDescription": "Açıklama yok", - "owner": "Sahip", - "users": "Çevrimiçi kullanıcılar", - "maxUsers": "Maksimum kullanıcı", - "category": "Kategori", - "state": "Eyalet", - "tags": "Etiketler", - "noTags": "Etiket yok", - "created": "Oluşturuldu", - "deleteRoom": "Odayı sil", - "confirmDelete": "\"{name}\" odası silinsin mi? Bu geri alınamaz.", - "enterRoom": "Odaya girin", - "changeOwner": "Sahibi değiştir", - "changeOwnerPlaceholder": "Yeni sahibin kullanıcı adı" - } - }, - "emailTemplates": { - "title": "E-posta Şablonları", - "subtitle": "İşlemsel e-posta şablonlarını yönetin", - "newTemplate": "+ Yeni şablon", - "edit": "Düzenle", - "delete": "Sil", - "noTemplates": "Henüz e-posta şablonu yok", - "confirmDelete": "\"{name}\" şablonu silinsin mi?", - "colId": "Kimlik", - "colName": "İsim", - "colSubject": "Konu", - "colKey": "Anahtar", - "colUpdated": "Güncellendi", - "colActions": "Eylemler", - "form": { - "name": "İsim", - "namePlaceholder": "örneğin Hoş geldiniz e-postası", - "key": "Anahtar", - "keyPlaceholder": "örneğin hoşgeldiniz_email", - "subject": "Konu", - "subjectPlaceholder": "E-posta konu satırı", - "body": "Gövde (HTML)", - "bodyPlaceholder": "

Sayın {username},

", - "variables": "Mevcut değişkenler", - "variablesHint": "{username}, {email}, {hotel_name}", - "save": "Şablonu kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal" - } - }, - "theme": { - "title": "Tema", - "subtitle": "CMS görünümünü özelleştirme", - "presets": "Ön ayarlar", - "colours": "Renkler", - "css": "CSS", - "presetsTitle": "Tema ön ayarları", - "presetsSubtitle": "Önceden oluşturulmuş bir renk şeması seçin", - "applyPreset": "Uygula", - "presetApplied": "Ön ayar uygulandı: {preset}", - "customiseTitle": "Özel renkler", - "primary": "Birincil", - "secondary": "İkincil", - "accent": "Aksan", - "background": "Arkaplan", - "surface": "Yüzey", - "text": "Metin", - "saveColours": "Renkleri kaydet", - "savingColours": "Kaydediliyor…", - "cssTitle": "Özel CSS", - "cssSubtitle": "Tema stillerini geçersiz kılmak için özel CSS ekleyin", - "cssPlaceholder": "/* Özel CSS'niz burada */", - "saveCss": "CSS'yi kaydet", - "savingCss": "Kaydediliyor…", - "reset": "Varsayılanlara sıfırla", - "confirmReset": "Tema varsayılan değerlere sıfırlansın mı?" - }, - "media": { - "title": "Medya Kitaplığı", - "subtitle": "Medya dosyalarını yükleyin ve yönetin", - "upload": "Yükle", - "uploadTitle": "Bir dosya yükle", - "uploadSubtitle": "Yüklemek için sürükleyip bırakın veya tıklayın", - "uploadButton": "Dosya seç", - "uploading": "Yükleniyor…", - "noFiles": "Henüz medya dosyası yok", - "delete": "Sil", - "confirmDelete": "Bu dosya kalıcı olarak silinsin mi?", - "search": "Ara", - "searchPlaceholder": "Dosya adına göre ara…", - "colPreview": "Önizleme", - "colName": "İsim", - "colSize": "Boyut", - "colType": "Tür", - "colUploaded": "Yüklendi", - "colActions": "Eylemler", - "copyUrl": "URL'yi kopyala", - "urlCopied": "URL panoya kopyalandı" - }, - "favicon": { - "title": "Site simgesi", - "subtitle": "Site favicon'unu yükleyin ve yönetin", - "current": "Mevcut site simgesi", - "uploadLabel": "Sık kullanılan simgeyi yükle", - "uploadHint": "PNG, JPEG, GIF, WebP, ICO veya SVG. Maksimum 2MB.", - "upload": "Yükle", - "uploading": "Yükleniyor…", - "delete": "Kaldır", - "deleting": "Kaldırılıyor…", - "saved": "Favicon başarıyla kaydedildi!", - "deleted": "Favicon başarıyla kaldırıldı!", - "error": "Bir şeyler ters gitti", - "confirmDelete": "Site simgesi kaldırılsın mı? Site artık özel bir favicon göstermeyecek.", - "generator": { - "title": "Sık kullanılan simgesi oluştur", - "text": "Metin", - "bgColor": "Arka plan rengi", - "textColor": "Metin rengi", - "rounded": "Yuvarlatılmış köşeler", - "save": "Sık kullanılan simgesi olarak kaydet" - }, - "cancel": "Cancel" - }, - "settings": { - "title": "İYS Ayarları", - "subtitle": "Anahtar/değer CMS yapılandırmasını yönetin", - "addSetting": "Ayar ekle", - "edit": "Düzenle", - "delete": "Sil", - "noSettings": "Hiçbir ayar bulunamadı", - "confirmDelete": "\"{key}\" ayarı silinsin mi?", - "colKey": "Anahtar", - "colValue": "Değer", - "colUpdated": "Güncellendi", - "colActions": "Eylemler", - "form": { - "key": "Anahtar", - "keyPlaceholder": "örneğin otel_adı", - "value": "Değer", - "valuePlaceholder": "Ayar değeri", - "save": "Ayarı kaydet", - "saving": "Kaydediliyor…", - "cancel": "İptal" - }, - "keysInDatabase": "{count} keys in database", - "managedInForm": "{count} managed in form", - "documented": "{count} documented", - "saved": "Settings saved.", - "saveFailed": "Could not save settings.", - "saveSettings": "Save settings", - "viewOnly": "You can view settings but need edit permission to change them." - }, - "import": { - "title": "Import", - "subtitle": "Import assets from external sources into your hotel.", - "badges": "Badges", - "badgesDescription": "Import and manage badge assets from external sources.", - "furni": "Furni", - "furniDescription": "Import furniture definitions, SWF files, and icons.", - "clothing": "Clothing", - "clothingDescription": "Import clothing and wearables for avatars.", - "effects": "Effects", - "effectsDescription": "Import avatar effects and animations.", - "pets": "Pets", - "petsDescription": "Import pet data and icons.", - "clone": "Clone", - "cloneDescription": "Clone existing items from one source to another.", - "upload": "Upload .nitro", - "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", - "sync": "Auto Sync", - "syncDescription": "Automatically import missing furniture from all configured sources.", - "repairIcons": "Repair Icons", - "repairIconsDescription": "Download any missing icon files for furniture already in the database.", - "audit": "Catalog Audit", - "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." - }, - "translations": { - "title": "Translations", - "subtitle": "Translate your hotel into multiple languages.", - "tabs": { - "cms": "CMS", - "client": "Client (Nitro)", - "emulator": "Emulator" - }, - "emulator": { - "title": "Emulator", - "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", - "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", - "fullSettings": "Full settings" - } - }, - "tickets": { - "title": "Tickets", - "subtitle": "Support tickets from players", - "noTickets": "No active tickets", - "searchPlaceholder": "Search subject, user, category or ID…", - "presetActive": "Active", - "statusOpen": "Open", - "statusInProgress": "In progress", - "statusWaiting": "Waiting", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colPriority": "Priority", - "colAssigned": "Assigned", - "colDate": "Date", - "meta": "by {user} · {count} msg · {category}", - "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", - "queueOtherCta": "Open help-center tickets", - "queueCounts": "Open here: {here} · Help center: {other}" - }, - "cfh": { - "title": "Call for Help", - "subtitle": "In-game CFH / support tickets", - "noTickets": "No CFH tickets", - "searchPlaceholder": "Search issue, user or ID…", - "noDescription": "No description", - "roomMeta": "Room #{room} · {when}", - "stateOpen": "Open", - "statePicked": "Picked", - "stateClosed": "Closed", - "colId": "ID", - "colIssue": "Issue", - "colSender": "Sender", - "colReported": "Reported", - "colMod": "Mod", - "colStatus": "Status" - }, - "hubs": { - "newsMedia": "News & media", - "newsMediaSubtitle": "Articles, photos, banners, ads and media library", - "siteContent": "Site content", - "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", - "engagement": "Engagement", - "engagementSubtitle": "Events, polls and support tickets", - "users": "Users", - "usersSubtitle": "Directory, online players, applications and teams", - "access": "Access & security", - "accessSubtitle": "Bans, IP, VPN, permissions and word filter", - "moderation": "Moderation", - "moderationSubtitle": "Reports, actions and moderation team", - "catalog": "Catalog & rares", - "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", - "shop": "Shop & payments", - "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", - "radio": "Radio", - "radioSubtitle": "Stream, DJ tools, embed and monitoring", - "settings": "Settings", - "settingsSubtitle": "CMS config, theme, maintenance and related tools", - "tools": "Tools", - "toolsSubtitle": "RCON, rooms, import and translations", - "observability": "Observability", - "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", - "tabs": { - "articles": "Articles", - "photos": "Photos", - "banners": "Banners", - "ads": "Ads", - "media": "Media", - "navigator": "Navigator", - "help": "Help", - "boxes": "Boxes", - "tags": "Tags", - "prefixes": "Prefixes", - "events": "Events", - "eventTypes": "Event types", - "polls": "Polls", - "tickets": "Tickets", - "templates": "Templates", - "directory": "Directory", - "multiAccounts": "Multi-accounts", - "online": "Online", - "applications": "Applications", - "teams": "Teams", - "bans": "Bans", - "ip": "IP", - "vpn": "VPN", - "permissions": "Permissions", - "wordFilter": "Word filter", - "overview": "Overview", - "actions": "Actions", - "cfh": "CFH", - "team": "Team", - "catalogTab": "Catalog", - "rares": "Rares", - "badges": "Badges", - "achievements": "Achievements", - "sounds": "Sounds", - "shopTab": "Shop", - "transactions": "Transactions", - "vouchers": "Vouchers", - "subscriptions": "Subscriptions", - "calendar": "Calendar", - "history": "History", - "moderationTab": "Moderation", - "monitoring": "Monitoring", - "settingsTab": "Settings", - "embed": "Embed", - "apiKeys": "API keys", - "points": "Points", - "ranks": "Ranks", - "autoDj": "Auto DJ", - "cms": "CMS", - "theme": "Theme", - "maintenance": "Maintenance", - "favicon": "Favicon", - "emulator": "Emulator", - "email": "Email", - "housekeeping": "Housekeeping", - "commando": "Commando", - "rooms": "Rooms", - "import": "Import", - "translations": "Translations", - "logs": "Logs", - "audit": "Audit", - "chat": "Chat", - "commands": "Commands", - "trades": "Trades", - "analytics": "Analytics", - "activity": "Activity", - "economy": "Economy", - "devops": "DevOps", - "errors": "Errors", - "alerts": "Alerts", - "toolsGroup": "Tools", - "helpTickets": "Help-center tickets", - "ticketInbox": "Inbox", - "importOverview": "Overview", - "importBadges": "Badges", - "importFurni": "Furni", - "importUpload": "Upload", - "importClothing": "Clothing", - "importEffects": "Effects", - "importPets": "Pets", - "importClone": "Clone", - "importSync": "Sync", - "importRepairIcons": "Repair icons", - "importAudit": "Audit" - }, - "events": "Events", - "eventsSubtitle": "Hotel events and event types", - "tickets": "Support desk", - "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", - "staffAccess": "Ranks & permissions", - "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", - "analytics": "Analytics", - "analyticsSubtitle": "Hotel activity, retention and economy", - "devops": "DevOps", - "devopsSubtitle": "Service health and emulator errors", - "import": "Import", - "importSubtitle": "Furni, badges, clothing and asset tools" - }, - "events": { - "newEvent": "+ New event", - "createTitle": "Create event", - "createSubtitle": "Schedule a new hotel event", - "searchPlaceholder": "Search events…", - "colId": "ID", - "colTitle": "Title", - "colType": "Type", - "colStarts": "Starts", - "colStatus": "Status", - "colActions": "Actions", - "statusPublished": "Published", - "statusDraft": "Draft", - "statusCancelled": "Cancelled", - "statusCompleted": "Completed", - "statRegistrations": "Registrations", - "statPrizes": "Prizes", - "statWinners": "Winners", - "statTime": "Time", - "maxPlayers": "Max: {count}", - "timeUpcoming": "Upcoming", - "timePast": "Past", - "endsAt": "Ends: {date}", - "userFallback": "User #{id}", - "registrationsTitle": "Registrations ({count})", - "noRegistrations": "No registrations yet.", - "noPrizes": "No prizes configured yet.", - "noWinners": "No winners yet.", - "addPrize": "Add prize", - "addWinner": "Add winner", - "formEditTitle": "Edit event", - "formDetailsTitle": "Event details", - "formTitle": "Title", - "formEventType": "Event type", - "formSelectType": "Select type", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formMaxPlayers": "Max players", - "formUnlimited": "Unlimited", - "formRoomId": "Room ID", - "formOptional": "Optional", - "formImageUrl": "Image URL", - "formSaving": "Saving…", - "formUpdate": "Update event", - "formCreate": "Create event", - "toastUpdated": "Event updated!", - "toastCreated": "Event created!" - }, - "polls": { - "newPoll": "+ New poll", - "createTitle": "Create poll", - "createSubtitle": "Create a new community poll or survey", - "searchPlaceholder": "Search polls…", - "colId": "ID", - "colTitle": "Title", - "colStatus": "Status", - "colType": "Type", - "colCreated": "Created", - "colActions": "Actions", - "statusActive": "Active", - "statusDraft": "Draft", - "statusClosed": "Closed", - "typeMultiple": "Multiple choice", - "typeSingle": "Single choice", - "statVoters": "Total voters", - "statQuestions": "Questions", - "statVotes": "Total votes", - "questionsTitle": "Questions ({count})", - "addQuestion": "Add question", - "noQuestions": "No questions yet. Add your first question above.", - "resultsTitle": "Results", - "formEditTitle": "Edit poll", - "formDetailsTitle": "Poll details", - "formTitle": "Title", - "formDescription": "Description", - "formStartsAt": "Starts at", - "formEndsAt": "Ends at", - "formSelectStart": "Select start date", - "formSelectEnd": "Select end date", - "formShowResults": "Show results to voters", - "formAllowMultiple": "Allow multiple answers", - "formSaving": "Saving…", - "formUpdate": "Update poll", - "formCreate": "Create poll", - "toastUpdated": "Poll updated!", - "toastCreated": "Poll created!" - }, - "multiAccounts": { - "minAccounts": "Min accounts per cluster", - "resultLimit": "Result limit", - "refresh": "Refresh", - "noClusters": "No clusters found at the current thresholds." - }, - "devops": { - "noEmulatorErrors": "No emulator errors found", - "noRecentErrors": "No recent errors" - }, - "helpTickets": { - "title": "Help center tickets", - "subtitle": "Player tickets from /help/tickets", - "noTickets": "No open help center tickets", - "searchPlaceholder": "Search title, user or ID…", - "presetOpen": "Open", - "presetAll": "All", - "statusOpen": "Open", - "statusClosed": "Closed", - "colTicket": "Ticket", - "colStatus": "Status", - "colUser": "User", - "colCreated": "Created", - "colUpdated": "Updated", - "meta": "by {user} · {count} replies", - "backToList": "Back to list", - "threadTitle": "Conversation", - "staffBadge": "Staff", - "replyPlaceholder": "Reply as staff…", - "replySubmit": "Send reply", - "replyHint": "Ctrl+Enter to send.", - "closeSubmit": "Close ticket", - "reopenSubmit": "Reopen ticket", - "closedHint": "This ticket is closed.", - "actionsTitle": "Actions", - "requesterTitle": "Requester", - "detailsTitle": "Details", - "rankLabel": "Rank {rank}", - "messageCountLabel": "Messages", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed.", - "reopened": "Ticket reopened.", - "banLifted": "Ban lifted and ticket closed." - }, - "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", - "queueOtherCta": "Open CMS support desk", - "queueCounts": "Open here: {here} · Support desk: {other}", - "liftBanSubmit": "Lift requester ban & close", - "requesterBanned": "Requester banned" - }, - "marketplace": { - "title": "Marketplace", - "subtitle": "Hotel marketplace listings", - "activeListings": "Active listings", - "soldListings": "Sold", - "filterActive": "Active", - "filterSold": "Sold", - "empty": "No marketplace listings to show.", - "loadError": "Could not load marketplace data (database unavailable).", - "cancel": "Cancel listing", - "colId": "ID", - "colItem": "Item ID", - "colSeller": "Seller", - "colPrice": "Price", - "colListed": "Listed", - "colSold": "Sold at", - "colActions": "Actions" - }, - "analytics": { - "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", - "totalUsers": "Total users", - "onlineNow": "{count} online now", - "weekRegistrations": "Week registrations", - "thisMonth": "{count} this month", - "activeRooms": "Active rooms", - "totalRooms": "{count} total rooms", - "weeklyActivity": "Weekly activity", - "tradesAndBans": "{trades} trades, {bans} bans", - "registrationsChartTitle": "Registrations (30 days)", - "registrationsChartDescription": "New user registrations over the last 30 days", - "chatActivity": "Chat activity", - "messagesLast7Days": "Messages in the last 7 days", - "trades": "Trades", - "tradesLast7Days": "Trades in the last 7 days", - "retention": "Retention", - "usersOnlineOverTotal": "Users online / total", - "activity": { - "chatMessages": "Chat messages", - "commands": "Commands", - "bans": "Bans", - "registrations": "Registrations", - "last7Days": "Last 7 days", - "dailyBreakdownTitle": "Daily breakdown (7 days)", - "colDay": "Day", - "colChats": "Chats", - "colCmds": "Cmds", - "colBans": "Bans", - "colRegs": "Regs", - "mostActiveUsersTitle": "Most active users (7 days)", - "noChatActivity": "No chat activity", - "msgCount": "{count} msgs", - "userFallback": "User #{id}" - }, - "economy": { - "creditsInCirculation": "Credits in circulation", - "creditsDescription": "Total credits across all users", - "pixelsInCirculation": "Pixels in circulation", - "pixelsDescription": "Total pixels across all users", - "pointsInCirculation": "Points in circulation", - "pointsDescription": "Total points across all users", - "weeklyTrades": "Weekly trades", - "marketplaceListings": "{count} marketplace listings", - "shopRevenueTitle": "Shop revenue (7d)", - "purchases": "Purchases", - "creditsSpent": "Credits spent", - "pointsSpent": "Points spent", - "marketplaceTitle": "Marketplace", - "activeListings": "Active listings", - "sold7d": "Sold (7d)", - "currencyDistributionTitle": "Currency distribution", - "credits": "Credits", - "pixels": "Pixels", - "points": "Points", - "catalogSpendingTitle": "Catalog spending", - "creditsTooltip": "{count} credits", - "pointsTooltip": "{count} points" - }, - "peakHours": { - "title": "Peak hours", - "description": "User activity by day & hour (last 7 days)", - "days": { - "mon": "Mon", - "tue": "Tue", - "wed": "Wed", - "thu": "Thu", - "fri": "Fri", - "sat": "Sat", - "sun": "Sun" - }, - "tooltip": "{day} {hour}:00 — {count} users", - "less": "Less", - "more": "More" - } - }, - "guilds": { - "title": "Guilds", - "subtitle": "Hotel groups and membership", - "totalGuilds": "Guilds", - "searchPlaceholder": "Search by name, description or ID…", - "search": "Search", - "empty": "No guilds found.", - "loadError": "Could not load guilds (database unavailable).", - "colId": "ID", - "colBadge": "Badge", - "colName": "Name", - "colOwner": "Owner", - "colMembers": "Members", - "colCreated": "Created", - "colThreads": "Forum threads", - "colRoom": "Room", - "colUser": "User", - "colLevel": "Level", - "colJoined": "Joined", - "members": "Members", - "noMembers": "No members.", - "back": "Back to guilds", - "viewPublic": "Open public page", - "disband": "Disband guild", - "listHeading": "Guilds ({count})" - }, - "items": { - "title": "Items base", - "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", - "total": "{count, plural, one {# item} other {# items}}", - "editTitle": "Edit {name}", - "editSubtitle": "items_base #{id}", - "back": "Back to list", - "save": "Save", - "saved": "Item saved", - "untitled": "Untitled item", - "sectionIdentity": "Identity", - "sectionDims": "Dimensions & interaction", - "sectionFlags": "Allow flags", - "sectionExtra": "Extra", - "publicName": "Public name", - "itemName": "Classname", - "type": "Type", - "spriteId": "Sprite ID", - "width": "Width", - "length": "Length", - "stackHeight": "Stack height", - "interactionType": "Interaction", - "interactionModes": "Modes", - "vendingIds": "Vending IDs", - "multiheight": "Multiheight", - "customparams": "Custom params" - }, - "online": { - "title": "Online users", - "subtitle": "Players currently connected", - "connected": "{count, plural, one {# player connected} other {# players connected}}" - }, - "ticketInbox": { - "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", - "noTickets": "No open tickets in either queue", - "searchPlaceholder": "Search subject, title, user or ID…", - "statCmsOpen": "CMS open", - "statHelpOpen": "Help open", - "statTotal": "Open total", - "colTicket": "Ticket", - "colStatus": "Status", - "colType": "Queue", - "colUpdated": "Updated", - "meta": "by {user}", - "typeAll": "All queues", - "typeCms": "CMS desk", - "typeHelp": "Help center", - "statusOpen": "Open", - "statusClosed": "Closed", - "statusAll": "All statuses", - "presetOpen": "Open only", - "modNavLabel": "Queues:", - "modNavInbox": "Inbox", - "modNavDesk": "CMS desk", - "modNavHelp": "Help center" - }, - "menu": { - "title": "Admin menu", - "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", - "save": "Save menu", - "saving": "Saving…", - "saved": "Admin menu saved.", - "saveFailed": "Could not save admin menu.", - "reset": "Reset to default", - "viewOnly": "You can view the menu layout but need settings edit permission to change it.", - "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", - "moveUp": "Move up", - "moveDown": "Move down", - "hideGroup": "Hide group", - "showGroup": "Show group", - "hideItem": "Hide item", - "showItem": "Show item", - "pinned": "Pinned" - }, - "cmsErrors": { - "firstSeen": "First occurrence in retained records", - "lastSeen": "Latest occurrence", - "affectedUsers": "Distinct identified users", - "unidentifiedEvents": "Events without a verified user ID", - "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", - "assignedStaff": "Assigned to staff #{id}", - "unassigned": "Unassigned", - "assignSelf": "Assign to me", - "clearAssignment": "Clear assignment", - "openOperation": "Open related area", - "releaseOccurrences": "Occurrences by release", - "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", - "releaseFilter": "Version", - "allReleases": "All versions", - "period": "Period", - "allRetained": "All retained events", - "last24h": "Last 24 hours", - "last7d": "Last 7 days", - "sort": "Order", - "recentFirst": "Most recent first", - "frequentFirst": "Most frequent first", - "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions." - }, - "installation": { - "title": "Installation diagnostics", - "hint": "Read-only checks of this installation. Unknown means there is not enough evidence; configured does not prove external reachability.", - "checked": "Checked at {time} · probes completed in {ms} ms", - "recheck": "Check again", - "ok": "Check passed", - "failed": "Needs attention", - "unknown": "Not verified", - "missing": "Not configured", - "release": "Running release", - "database": "Database", - "redis": "Redis", - "emulator": "Emulator", - "storage": "Writable storage", - "migrations": "Database migrations", - "worker": "Background worker", - "renderer": "Renderer configuration", - "registry": "Container registry", - "releaseHint": "The full identifier of the running build. Use it to compare installations and choose a previous image for rollback.", - "databaseHint": "Connection check and measured SELECT 1 response time.", - "redisHint": "Optional for some pages; required for queued import work.", - "emulatorHint": "Response to the configured emulator ping.", - "storageHint": "Read/write permissions on storage, Nitro assets and SWF directories.", - "migrationsHint": "Number of packaged migrations absent from the database history. Apply migrations through the release process.", - "workerHint": "Last worker heartbeat in Redis. More than two minutes old needs investigation; no heartbeat cannot establish whether the worker is running.", - "rendererHint": "The client uses the configured address or /nitro-client/ by default. Open the game separately to verify rendering and assets.", - "registryHint": "Registry credentials live in CI, not in the CMS. Check the image publication job and its immutable release tag in Gitea." - }, - "importHistory": { - "cancelled": "Cancelled", - "cancelFailed": "Could not request cancellation. Retry or refresh the job history.", - "cancelRequested": "Cancellation requested. The current item will finish; remaining items will not start.", - "cancelHint": "Cancellation preserves completed items and allows the current item to finish.", - "cancelRemaining": "Cancel remaining items", - "historyLimit": "Showing up to 30 most recently updated jobs.", - "refreshHistory": "Refresh history", - "showMoreItems": "Show 50 more items", - "uncertainOutcome": "An interrupted item may already have changed local data. It is excluded from retries.", - "reviewLocalData": "Review local data", - "ownerHistory": "Your imports and repairs, newest first. Retries never repeat completed or uncertain items.", - "previousPage": "Previous", - "nextPage": "Next", - "page": "Page {page}" - }, - "operations": { - "title": "Needs attention", - "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", - "empty": "No pending items found in the checked records.", - "errors": "Unresolved CMS error groups", - "imports": "Your imports needing review", - "tickets": "Open support tickets", - "publications": "News drafts", - "unavailable": "{source}: data is temporarily unavailable.", - "installation": "Installation diagnostics" - }, - "catalogPackages": { - "backend": { - "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", - "saveConflict": "Package changed. Reload it before saving", - "publishConflict": "Package changed. Refresh the publication preview", - "catalogChanged": "Catalog changed. Refresh the publication preview", - "missing": "Catalog package not found", - "pageLimit": "A package supports at most 200 categories including descendants", - "offerLimit": "A package supports at most 500 offers", - "payloadLimit": "Package data exceeds 8 MB safety limit", - "membership": "Package membership cannot change", - "hierarchy": "Package hierarchy cannot change", - "references": "Package furniture references cannot change", - "furnitureMissing": "Package furniture reference no longer exists", - "auditWarning": "Package published, but audit logging failed.", - "hotelWarning": "Package published, but the hotel update was not delivered.", - "exportWarning": "Package published, but export scheduling failed.", - "refreshWarning": "Package published. Refresh the page to see the latest catalog." - } - }, - "catalogPackagePreview": { - "title": "Catalog preview", - "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", - "search": "Search categories or offers", - "playerMode": "Player access", - "rank": "Rank", - "club": "Club", - "vip": "VIP", - "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", - "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", - "snapshotLimit": "Preview limited to 200 pages and 500 offers.", - "restricted": "{count} pages are hidden by the selected player access settings.", - "categories": "Catalog categories", - "noPages": "This snapshot contains no categories.", - "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", - "noMatches": "No matches for this search.", - "offerCount": "{count} offers", - "layout": "Layout: {layout}", - "missingLayout": "Not specified", - "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", - "loadingIcons": "Loading furniture icons…", - "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", - "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", - "emptyPage": "This category has no direct offers. Browse its subcategories.", - "missingIcon": "Icon unavailable", - "amount": "Quantity: {count}", - "bundle": "{count} furniture types", - "changed": "Changed from the saved baseline", - "previous": "Previous", - "next": "Next", - "page": "Page {page} of {total}", - "offerId": "Offer #{id}", - "unknownFurniture": "Furniture name unavailable", - "selectOffer": "Select an offer to inspect its price and furniture references.", - "credits": "Credits", - "duckets": "Duckets", - "diamonds": "Diamonds", - "pointsType": "Points (type {type}):", - "free": "Free", - "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", - "restrictedOffers": "{count} offers in this category require Club membership.", - "clubOffer": "Club offer" - }, - "search": { - "furniture": "Furniture", - "catalog": "Catalog categories", - "tickets": "Support tickets", - "loading": "Searching…", - "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", - "retry": "Retry", - "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", - "partialError": "Some results could not be loaded. Try again." - }, - "permissionPreview": { - "title": "Role access preview", - "description": "Inspect CMS access without changing a session or impersonating a user.", - "back": "Back to permissions", - "role": "Role", - "show": "Show access", - "missing": "Select an existing role.", - "entryAllowed": "Housekeeping entry allowed", - "entryDenied": "Housekeeping entry denied: dashboard permission missing", - "superAdmin": "This rank currently receives the highest-rank override.", - "scope": "This preview shows one role only. A user may receive additional roles. Navigation customization can hide allowed sections; specific records and actions can require further checks.", - "sections": "Sections", - "allowed": "Allowed", - "denied": "Denied", - "actions": "CMS permissions", - "actionScope": "A granted permission alone does not bypass dashboard entry, rank hierarchy, record ownership or action-specific validation.", - "granted": "Granted", - "notGranted": "Not granted" - }, - "operationsCenter": { - "title": "Operations center", - "hint": "Track your durable imports and repairs, and the shared catalog export queue.", - "syncTitle": "Source synchronization", - "syncHint": "Source synchronization shows live progress on its own page. It has no durable history or automatic retry of failed items here. Catalog export reports the shared queue and latest result; item-level retry is not supported.", - "openSync": "Open synchronization and export", - "openImports": "Open furniture imports" - }, - "operationsExport": { - "title": "Catalog repository export", - "hint": "Automatic export of bundles, icons, gamedata, translations and catalog SQL. The queue and latest result are shared across operators.", - "loadError": "Unable to load export status", - "queueError": "Unable to queue export", - "loading": "Loading…", - "disabled": "Export is disabled. Open synchronization to review its configuration.", - "active": "Waiting for {count} operation(s) to finish.", - "running": "Export in progress…", - "pending": "{count} update(s) queued for export.", - "idle": "No pending updates.", - "lastCommit": "Last published commit:", - "lastAttempt": "Last attempt: {date}", - "queuing": "Queuing…", - "queue": "Export now / retry" - }, - "performance": { - "title": "Request performance", - "scope": "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." - } - }, - "error": { - "code": "Error", - "title": "Something went wrong", - "subtitle": "The hotel hit an unexpected snag.", - "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", - "tryAgain": "Try again", - "backHome": "Back home", - "reference": "Reference: {digest}" - }, - "notFound": { - "code": "404", - "title": "Page not found", - "subtitle": "This room doesn’t exist — or the furniture was moved.", - "body": "Check the link, or head back to the lobby.", - "backHome": "Back home", - "latestNews": "Latest news" - }, - "sessions": { - "title": "Login activity", - "subtitle": "Recent sign-ins and failed attempts on your account", - "recentTitle": "Recent sign-ins", - "recentEmpty": "No sign-ins recorded yet.", - "colWhen": "When", - "colIp": "IP", - "colDevice": "Device", - "failedTitle": "Failed attempts", - "failedSubtitle": "Wrong password on your username", - "unknownDevice": "Unknown device", - "signOutEverywhereTitle": "Sign out everywhere", - "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", - "signOutEverywhereButton": "Sign out all sessions", - "successSignedOutAll": "All sessions have been signed out." - }, - "guildForumThread": { - "backToForum": "← Back to forum", - "unnamedGuild": "Unnamed guild", - "noSubject": "(no subject)", - "inGuildForum": "{guild} forum", - "pinned": "Pinned", - "locked": "Locked", - "postsTitle": "Posts", - "postsSubtitle": "{count, plural, one {# post} other {# posts}}", - "postsEmpty": "No posts in this thread.", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Add your message to this thread", - "replyPlaceholder": "Write your reply…", - "replySubmit": "Post reply", - "lockedHint": "This thread is locked — new replies are disabled.", - "loginToReply": "Sign in to reply.", - "loginLink": "Log in", - "success": { - "replied": "Reply posted." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That thread was not found.", - "locked": "This thread is locked.", - "ratelimit": "You're posting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "helpTicketDetail": { - "backToList": "← Your tickets", - "ticketId": "Ticket #{id}", - "statusOpen": "Open", - "statusClosed": "Closed", - "messagesTitle": "Conversation", - "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", - "you": "You", - "userNumber": "User #{id}", - "replyTitle": "Reply", - "replySubtitle": "Send a follow-up to staff", - "replyPlaceholder": "Write your message…", - "replySubmit": "Send reply", - "closeTitle": "Close ticket", - "closeSubtitle": "Mark this request as resolved when you no longer need help", - "closeSubmit": "Close ticket", - "closedHint": "This ticket is closed. Open a new ticket if you need more help.", - "success": { - "replied": "Reply sent.", - "closed": "Ticket closed." - }, - "errors": { - "invalid": "Please enter a message.", - "notFound": "That ticket was not found.", - "closedTicket": "This ticket is closed.", - "moderated": "That message was blocked by moderation.", - "ratelimit": "You're submitting too fast. Please wait a moment and try again.", - "error": "Something went wrong. Please try again." - } - }, - "events": { - "title": "Events", - "subtitle": "Upcoming and recent hotel events you can join", - "empty": "No events yet.", - "back": "← Events", - "when": "When", - "status": "Status", - "statusPublished": "Open", - "statusCompleted": "Completed", - "registrations": "Registrations", - "registered": "{count} registered", - "spots": "{count} / {max} spots", - "registerTitle": "Register", - "registerSubtitle": "Save your spot for this event", - "register": "Register for event", - "registering": "Registering…", - "registerSuccess": "You are registered!", - "registerError": "Could not register for this event.", - "loginToRegister": "Log in to register for this event.", - "alreadyRegistered": "You are already registered.", - "eventEnded": "This event has ended.", - "eventFull": "This event is full.", - "cannotRegister": "Registration is not available.", - "prizesTitle": "Prizes", - "winnersTitle": "Winners", - "unknownUser": "User #{id}" - }, - "polls": { - "title": "Polls", - "subtitle": "Share your opinion in community polls", - "empty": "No polls yet.", - "back": "← Polls", - "statusActive": "Open", - "statusClosed": "Closed", - "questionsCount": "{count} questions", - "ends": "Ends {date}", - "voteTitle": "Cast your vote", - "voteSubtitle": "Answer each question below", - "submitVote": "Submit vote", - "voting": "Submitting…", - "voteSuccess": "Thanks for voting!", - "voteError": "Could not submit your vote.", - "loginToVote": "Log in to vote in this poll.", - "alreadyVoted": "You have already voted.", - "pollClosed": "This poll is closed.", - "cannotVote": "Voting is not available.", - "textPlaceholder": "Your answer…", - "resultsTitle": "Results", - "voteCount": "{count} ({pct}%)", - "totalVotes": "{count} total votes", - "textResponses": "{count} free-text responses" - }, - "mod": { - "title": "Moderation panel", - "badge": "Mod", - "overviewTitle": "Moderator overview", - "overviewSubtitle": "CFH, quick actions and bans without full admin access.", - "shortcutsTitle": "Shortcuts", - "nav": { - "overview": "Overview", - "cfh": "Call for Help", - "actions": "Quick actions", - "bans": "Bans", - "fullAdmin": "Full admin", - "backToSite": "Back to site", - "tickets": "Tickets", - "team": "Team", - "helpTickets": "Help-center tickets", - "users": "Users" - }, - "stats": { - "openCfh": "Open CFH", - "bansToday": "Bans today", - "modsOnline": "Mods online", - "quickActions": "Quick actions", - "quickActionsHint": "Kick, mute, alert", - "openTickets": "Open tickets", - "team": "Mod team", - "teamHint": "Online staff & workload", - "openHelpTickets": "Open help tickets" - }, - "usersTitle": "Players", - "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", - "usersEmpty": "No players found", - "usersSearchPlaceholder": "Search username, motto or ID…", - "usersRank": "rank", - "usersPublicProfile": "Public profile", - "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", - "usersJoined": "Joined", - "usersLastLogin": "Last login", - "usersLastOnline": "Last online" - }, - "studio": { - "title": "Studio", - "sourceFurnidata": "{source} furnidata", - "searchPlaceholder": "Search furni, classnames, keywords… (/)", - "results": "{count} results", - "inDb": "in DB", - "inCatalog": "in catalog", - "missingNitro": "missing nitro", - "globalTranslation": "Translation (global)", - "catalogTree": "Catalog", - "source": "Furni source", - "officialSource": "(official)", - "type": "Type", - "allTypes": "All types", - "floorItems": "Floor items", - "wallItems": "Wall items", - "category": "Category", - "allCategories": "All categories", - "status": "Status", - "allStatuses": "All statuses", - "imported": "Imported", - "inCatalogStatus": "In catalog", - "missingNitroStatus": "Missing nitro", - "sort": "Sort", - "defaultOrder": "Default order", - "nameAZ": "Name A–Z", - "classnameAZ": "Classname A–Z", - "categorySort": "Category", - "importedFirst": "Imported first", - "notImportedFirst": "Not imported first", - "noNitro": "{count} no nitro", - "gridView": "Grid view", - "listView": "List view", - "selectAll": "Select all", - "selectedCount": "{count} selected", - "clear": "Clear", - "translate": "Translate", - "noLanguages": "No languages", - "allLanguages": "All languages", - "languagesCount": "{count} languages", - "languages": "Languages", - "all": "All", - "none": "None", - "languageLabel": "Language {lang}", - "translateAll": "Translate all", - "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", - "importAuto": "Import {count} auto", - "maintenance": { - "title": "Catalog maintenance", - "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", - "refresh": "Refresh", - "currentHealth": "Current health", - "itemsInBase": "{count} items in items_base", - "loading": "Loading…", - "statSpriteId": "sprite_id ≠ id", - "hintSpriteId": "items_base sprite drift", - "statOfferId": "offer_id ≠ id", - "hintOfferId": "catalog offer drift", - "statDuplicateClassnames": "Duplicate classnames", - "hintDuplicateClassnames": "items_base item_name repeats", - "statDuplicateCatalogRows": "Duplicate catalog rows", - "hintDuplicateCatalogRows": "same product listed twice on a page", - "statIdMismatch": "ID ≠ FurnitureData", - "hintIdMismatch": "items_base id differs from furnidata", - "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", - "hintDuplicateBcCatalogRows": "same product listed twice in builder club", - "statDuplicateCatalogPages": "Duplicate catalog pages", - "hintDuplicateCatalogPages": "same caption under the same parent (double links)", - "optionSpriteId": "Fix sprite_id", - "optionOfferId": "Fix catalog offer_id", - "optionRemoveDuplicates": "Remove duplicates (items + catalog)", - "optionReconcile": "Reconcile FurnitureData ↔ DB", - "optionAlignIds": "Align items_base IDs to FurnitureData", - "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", - "previewChanges": "Preview changes", - "plannedIdMoves": "Planned ID moves: {moves}", - "newItemsInsert": "New items to insert: {inserted}", - "skipped": "Skipped (id occupied): {list}", - "applyAlignment": "Apply alignment", - "fixEverythingTitle": "Fix everything", - "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", - "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", - "runSelected": "Run selected", - "selectAtLeastOne": "Select at least one repair to run", - "previewReady": "Preview ready", - "previewFailed": "Preview failed", - "toast": { - "spriteFixed": "sprite_id fixed", - "offerFixed": "catalog offer_id fixed", - "duplicatesRemoved": "Duplicates removed (items + catalog)", - "reconciled": "FurnitureData reconciled", - "aligned": "items_base IDs aligned to FurnitureData", - "allApplied": "All selected repairs applied", - "failed": "Failed" - } - } - }, - "myDashboard": { - "messagesCaughtUp": "No unread messages", - "messagesUnavailable": "Open your inbox to check", - "eventTitle": "On the calendar", - "allEvents": "All events", - "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", - "eventOngoing": "Happening now", - "eventUpcoming": "Coming up", - "eventDetails": "View event", - "noUpcomingEvents": "No upcoming events have been announced yet.", - "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again." - } - }, - "emails": { - "verify": { - "subject": "Verify your email · {hotel}", - "heading": "Verify your email", - "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", - "button": "Verify email", - "fallback": "If the button doesn't work, paste this link into your browser:" - } - }, - "toolbar": { - "home": "Ana sayfa", - "reload": "Yenile", - "fullscreen": "Tam ekran", - "logout": "Çıkış", - "onlineUsers": "Çevrimiçi kullanıcılar", - "emulatorOnline": "Emülatör çevrimiçi", - "emulatorOffline": "Emülatör çevrimdışı", - "dragToMove": "Taşımak için sürükleyin", - "hide": "Araç çubuğunu gizle", - "fullscreenExit": "Tam ekrandan çık", - "show": "Araç çubuğunu göster", - "emulatorUnknown": "Emülatör durumu bilinmiyor" - }, - "admin": { - "studio": { - "importDiagnostics": { - "attempts": "Dosya tanılaması", - "preliminary": "Adreslerin ön kontrolü; içerik içe aktarma sırasında doğrulanır.", - "http": "HTTP {status}", - "network": "Bağlantı başarısız", - "timeout": "Kaynak zamanında yanıt vermedi", - "invalidResponse": "Kaynak dosya yerine web sayfası döndürdü", - "available": "Dosya bulundu; doğrulama bekleniyor", - "recover": "Özgün dosyayı ekle ve sürdür", - "recoveryHint": "{file} dosyasını seçin (en fazla 50 MB). Kimliği doğrulanır. Başarısız öğeler yeniden denenir; tamamlanan aktarımlar korunur.", - "attach": "Özgün .nitro dosyasını seçin", - "working": "Doğrulanıyor veya sürdürülüyor...", - "attached": "Eşleşen özgün dosya eklendi", - "resume": "Başarısız aktarımları bu dosyayla sürdür", - "invalidFile": "En fazla 50 MB olan eşleşen özgün .nitro dosyasını seçip yeniden deneyin.", - "resumeError": "Geçmişi yenileyip son denemeyi kullanın; dosyayı kontrol edip yeniden deneyin.", - "mismatchedFile": "Bu dosya başka bir mobilyaya ait.", - "alreadyStarted": "Kurtarma zaten başladı. Geçmişi yenileyip son denemeyi kullanın.", - "notEligible": "Bu öğe ek dosyayla kurtarılamaz." - }, - "completeness": { - "title": "Completeness and next steps", - "parts": { - "sql": "SQL item", - "catalog": "Catalog offer", - "furnidata": "Furnidata", - "icon": "Local icon", - "nitro": "Nitro file" - }, - "statuses": { - "present": "Present", - "missing": "Missing", - "unknown": "Not verified", - "conflict": "Needs review" - }, - "actions": { - "sql": "Import or repair this furni to create the missing item record.", - "catalog": "Import or repair this furni to add an offer using the automatic category and price.", - "furnidata": "Import or repair this furni to add the missing furniture data.", - "icon": "Import or repair this furni to retrieve the missing local icon.", - "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", - "recheck": "Recheck local state before repair. If this persists, check the local file access.", - "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." - }, - "openAudit": "Open Catalog audit to resolve conflicts", - "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" - }, - "preflight": { - "filterLabel": "Filter import checks", - "filters": { - "all": "All ({count})", - "complete": "To complete ({count})", - "conflict": "Conflicts ({count})", - "verify": "To verify ({count})" - }, - "empty": "No furniture in this group.", - "actions": { - "complete": "Suggested: complete existing furniture", - "import": "Suggested: import new furniture", - "refresh": "Existing furniture is complete; refresh source data", - "conflict": "Resolve the conflicting local records before import", - "verify": "Review the unverified components before continuing" - }, - "missing": "Missing: {parts}", - "unknown": "Not verified: {parts}" - } - } - } + "draftRecovery": { + "ready": "Kurtarma kopyası bu tarayıcıda 7 gün saklanacak.", + "saved": "Kurtarma kopyası bu tarayıcıya 7 gün süreyle kaydedildi.", + "unavailable": "Tarayıcıda kurtarma kullanılamıyor. Değişikliklerin kaydedilene kadar bu sayfayı açık tut.", + "found": "Bu tarayıcıda bir kurtarma kopyası mevcut. Kaydedilme tarihi:", + "restore": "Tarayıcı kopyasını geri yükle", + "discard": "Tarayıcı kopyasını sil", + "confirmRestore": "Mevcut form tarayıcıdaki kurtarma kopyasıyla değiştirilsin mi? Kaydetmeden önce içeriği kontrol et.", + "confirmDiscard": "Bu kurtarma kopyası tarayıcıdan silinsin mi? Mevcut form değişmeden kalacak." + }, + "nav": { + "home": "Ana sayfa", + "community": "Topluluk", + "articles": "Makaleler", + "photos": "Fotoğraflar", + "staff": "Personel", + "rankings": "Sıralamalar", + "guilds": "Loncalar", + "leaderboards": "Skor tabloları", + "rareValues": "Nadir değerler", + "shop": "Mağaza", + "market": "Pazar", + "assistance": "Yardım", + "helpCenter": "Yardım merkezi", + "myTickets": "Biletlerim", + "badges": "Rozetler", + "radio": "Radyo", + "friends": "Arkadaşlar", + "messages": "Mesajlar", + "admin": "Yönetici", + "openMenu": "Menüyü aç", + "closeMenu": "Menüyü kapat", + "drawBadge": "Rozet çiz", + "events": "Events", + "polls": "Polls", + "mod": "Mod" + }, + "header": { + "online": "{count} {hotel} çevrimiçi", + "nitroClient": "Nitro istemcisi", + "tagline": "Kendi avatarınızı oluşturabileceğiniz, arkadaş edinebileceğiniz, sohbet edebileceğiniz, odalar oluşturabileceğiniz ve çok daha fazlasını yapabileceğiniz çevrimiçi bir sanal dünya!", + "login": "Giriş yap", + "or": "veya", + "createAccount": "Hesap oluştur" + }, + "footer": { + "copyright": "© {year} - {hotel} kar amacı gütmeyen bir eğitim projesidir" + }, + "pages": { + "staff": { + "title": "Personel", + "subtitle": "Otelin arkasındaki ekip", + "ranksTitle": "Rütbeler", + "ranksSubtitle": "Ekibin her bir parçası neyle ilgileniyor?", + "membersTitle": "Ekip üyeleri", + "membersEmptySubtitle": "Şu anda gösterilecek kimse yok", + "membersSubtitle": "{count, plural, one {# member keeping things running} other {# members keeping things running}}", + "emptyState": "Gösterilecek personel yok.", + "colUsername": "Kullanıcı adı", + "colRank": "Sıra", + "colMotto": "Slogan", + "viewProfile": "View profile", + "noMotto": "No motto set", + "loadError": "Unable to load staff members. Please try again shortly.", + "retry": "Try again" + }, + "leaderboard": { + "title": "Liderlik tablosu", + "subtitle": "{currency} bazında en iyi 20 oyuncu", + "tab_credits": "Kredi", + "tab_diamonds": "Elmaslar", + "tab_duckets": "Ördekler", + "tab_achievement": "Başarılar", + "tab_respects": "saygılar", + "tab_onlinetime": "Çevrimiçi Zaman", + "emptyState": "Henüz gösterilecek sıralama yok.", + "colAvatar": "avatar", + "colPlayer": "Oyuncu" + }, + "friends": { + "title": "Arkadaşlar", + "emptySubtitle": "Henüz hiç arkadaşınız eklenmedi", + "subtitle": "{count, plural, one {You have # friend} other {You have # friends}}", + "emptyState": "Otele arkadaşlarınızı ekleyin, burada görünecekler.", + "noMotto": "Slogan yok", + "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": "Mesajlar", + "subtitle": "Arkadaşlık istekleri ve çevrimdışı mesajlar sizi bekliyor", + "requestsTitle": "Arkadaşlık istekleri", + "requestsEmptySubtitle": "Henüz kimse arkadaşın olmayı teklif etmedi", + "requestsSubtitle": "{count, plural, one {# pending request} other {# pending requests}}", + "requestsEmptyState": "Bekleyen arkadaşlık isteği yok.", + "wantsToBeFriend": "arkadaşın olmak istiyor", + "accept": "Kabul et", + "offlineTitle": "Çevrimdışı mesajlar", + "offlineEmptySubtitle": "Gelen kutunuz boş", + "offlineSubtitle": "{count, plural, one {# message received} other {# messages received}}", + "offlineEmptyState": "Çevrimdışı mesajınız yok.", + "unknownUser": "Kullanıcı #{id}", + "decline": "Decline", + "composeTitle": "Send offline message", + "composeSubtitle": "Delivered in the hotel messenger when your friend is offline", + "composeEmptyFriends": "Add friends in the hotel to send offline messages.", + "composeFriendLabel": "Friend", + "composeFriendPlaceholder": "Choose a friend", + "composeMessageLabel": "Message", + "composeMessagePlaceholder": "Write your message (max 500 characters)…", + "composeSend": "Send message", + "success": { + "accepted": "Friend request accepted.", + "declined": "Friend request declined.", + "sent": "Offline message sent." + }, + "errors": { + "notFound": "That friend request was not found.", + "unauthorized": "You can't act on this friend request.", + "invalid": "Invalid friend request.", + "error": "Something went wrong. Please try again.", + "notFriend": "You can only message friends.", + "emptyMessage": "Please write a message.", + "rateLimited": "Too many messages. Wait a moment and try again." + } + }, + "profile": { + "noMotto": "Slogan yok", + "statRank": "Sıra", + "statCredits": "Kredi", + "statRegistered": "Kayıtlı", + "badgesTitle": "Rozetler", + "badgesEmpty": "Henüz rozet yok.", + "photosTitle": "Fotoğraflar", + "photosEmpty": "Henüz fotoğraf yok.", + "guestbookTitle": "Ziyaretçi defteri", + "guestbookSubtitle": "{username} duvarındaki mesajlar", + "leaveMessage": "Mesaj bırakın", + "guestbookPlaceholder": "{username}'in ziyaretçi defterine bir şeyler yazın…", + "post": "Gönderi", + "loginToPost": "Ziyaretçi defterine mesaj bırakmak için giriş yapın.", + "guestbookEmpty": "Henüz ziyaretçi defteri girişi yok.", + "unknownUser": "Kullanıcı #{id}", + "statDuckets": "Ördekler", + "statDiamonds": "Elmaslar", + "walletTitle": "Cüzdan", + "friendsTitle": "Arkadaşlar", + "friendsSubtitle": "Otelde takıldıkları insanlar", + "friendsEmpty": "Gösterilecek arkadaş yok.", + "roomsTitle": "Odalar", + "roomsSubtitle": "Sahip oldukları odalar", + "roomsEmpty": "Gösterilecek oda yok.", + "roomUntitled": "Başlıksız oda", + "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": "Sıralamalar", + "subtitle": "Krediye göre sıralanan en iyi 12 oyuncu", + "emptyState": "Henüz sıralamaya girecek oyuncu yok." + }, + "home": { + "welcome": "{hotelName}'e hoş geldiniz", + "welcomeSubtitle": "Retro oteliniz artık Next.js tarafından destekleniyor", + "welcomeBody": "Takılın, mobilya toplayın ve arkadaşlarla tanışın.", + "enterHotel": "{hotelName} girin", + "onlineFriends": "Çevrimiçi Arkadaşlar", + "noFriendsOnline": "Çevrimiçi arkadaşım yok", + "register": "ŞİMDİ KAYIT OLUN", + "joinNow": "{hotelName}'e bugün katılın!", + "recentUsers": "Son Kullanıcılar", + "recentPhotos": "Son Fotoğraflar", + "latestNews": "En son haberler", + "newsTitle": "En son haberler", + "newsSubtitle": "Otelden yeni çıkmış", + "allNews": "Tüm haberler →", + "allUsers": "Topluluk →", + "noArticles": "Henüz makale yok.", + "noPhotos": "Henüz fotoğraf yok.", + "noUsers": "Çevrimiçi kullanıcı yok", + "latestArticle": "Son Makale", + "latestUsers": "En yeni vatandaşlar ({count} toplam)", + "statsOnline": "Çevrimiçi", + "statsCitizens": "Vatandaşlar", + "statsRooms": "Odalar", + "statsArticles": "Makaleler", + "featuresAvatar": "Avatar", + "featuresAvatarDesc": "Kendine özgü görünümünü oluştur", + "featuresFurniture": "Mobilya", + "featuresFurnitureDesc": "Odaları eşyalarla dekore et", + "featuresCommunity": "Topluluk", + "featuresCommunityDesc": "Arkadaş edin ve sohbet et", + "featuresGames": "Oyunlar", + "featuresGamesDesc": "Yarış ve eğlen", + "sectionFeaturesLabel": "Features", + "sectionFeaturesTitle": "Everything a great hotel needs", + "sectionStatsLabel": "Live stats", + "sectionStatsTitle": "A community that keeps growing", + "sectionCommunityLabel": "Community", + "sectionCommunityTitle": "Make yourself at home" + }, + "news": { + "title": "Haberler", + "subtitle": "Otelden en son duyurular, etkinlikler ve güncellemeler", + "noArticles": "Henüz makale yok.", + "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": "← Haberler", + "reactionsTitle": "Tepkiler", + "reactionsSubtitle": "Bize ne düşündüğünüzü söyleyin", + "reaction": { + "like": "Beğen", + "love": "Aşk", + "wow": "Vay be" + }, + "removeReaction": "Tepkinizi kaldırmak için tıklayın", + "reactWith": "{reaction} ile tepki verin", + "noReactions": "Henüz tepki yok.", + "logIn": "Giriş yap", + "toReact": "tepki vermek.", + "commentsTitle": "Yorumlar", + "commentsSubtitle": "Sohbete katılın", + "commentsCount": "şu ana kadar {count}", + "noComments": "Henüz yorum yok. İlk yorum yapan siz olun.", + "userNumber": "Kullanıcı #{id}", + "addComment": "Yorum ekle", + "commentPlaceholder": "Yorumunuzu yazın…", + "postComment": "Yorum gönder", + "toComment": "Yorum bırakmak için.", + "success": { + "posted": "Comment posted.", + "reaction": "Reaction updated." + }, + "errors": { + "empty": "Please write a comment before posting.", + "moderated": "That comment was blocked by moderation.", + "ratelimit": "You're commenting too fast. Please wait a moment and try again.", + "invalid": "Invalid comment.", + "notFound": "That article was not found.", + "error": "Something went wrong. Please try again." + } + }, + "photos": { + "title": "Fotoğraflar", + "subtitle": "Otelde çekilen son fotoğraflar", + "noPhotos": "Henüz fotoğraf yok.", + "photoAlt": "Fotoğraf: #{id} kullanıcısı", + "byUser": "kullanıcı #{id} tarafından" + }, + "badges": { + "title": "Rozetler", + "subtitle": "Kazanabileceğiniz ve otel çevresinde sergileyebileceğiniz rozetler", + "noBadges": "Henüz rozet mevcut değil." + }, + "community": { + "title": "Topluluk", + "subtitle": "Otel çevresinde olup biten her şey tek bir yerde", + "open": "Aç →", + "links": { + "rankings": { + "title": "Sıralamalar", + "text": "Krediye göre sıralanmış, oteldeki en zengin oyuncuları görün." + }, + "staff": { + "title": "Personel", + "text": "Otelin her gün çalışmasını sağlayan ekiple tanışın." + }, + "news": { + "title": "Haberler", + "text": "En son duyurular, etkinlikler ve güncellemeler." + }, + "photos": { + "title": "Fotoğraflar", + "text": "Topluluk tarafından otelin çevresinden paylaşılan anlık görüntüler." + }, + "guilds": { + "title": "Loncalar", + "text": "Oyuncuların oluşturduğu ve katıldığı gruplara göz atın." + }, + "leaderboards": { + "title": "Skor tabloları", + "text": "Otelin istatistiklerinde bu sezon kim zirvede?" + } + } + }, + "guilds": { + "title": "Loncalar", + "subtitle": "Oyuncuların oluşturduğu ve katıldığı gruplara göz atın", + "empty": "Henüz lonca yok.", + "unnamedGuild": "İsimsiz lonca", + "noDescription": "Açıklama yok" + }, + "guild": { + "allGuilds": "← Tüm loncalar", + "unnamedGuild": "İsimsiz lonca", + "noDescription": "Açıklama yok", + "memberSingular": "Üye", + "memberPlural": "Üyeler", + "founded": "kuruldu", + "forumLink": "Forum →", + "discussion": "Tartışma", + "membersTitle": "Üyeler", + "memberLowerSingular": "üye", + "memberLowerPlural": "üyeler", + "noMembers": "Üye yok.", + "owner": "Sahip", + "noMotto": "Slogan yok" + }, + "guildForum": { + "backToGuild": "← Loncaya geri dön", + "unnamedGuild": "İsimsiz lonca", + "forumTitle": "{guild} — Forum", + "threadSingular": "iplik", + "threadPlural": "Konular", + "newThread": "+ Yeni konu", + "empty": "Bu forumda henüz konu yok.", + "colSubject": "Konu", + "colAuthor": "Yazar", + "colPosts": "Gönderiler", + "colDate": "Tarih", + "noSubject": "(konu yok)", + "pinned": "Sabitlendi", + "locked": "Kilitli", + "userNumber": "Kullanıcı #{id}", + "unknown": "Bilinmiyor", + "success": { + "posted": "Thread posted." + } + }, + "guildForumNew": { + "backToForum": "← Foruma geri dön", + "unnamedGuild": "İsimsiz lonca", + "title": "Yeni konu", + "subtitle": "{guild} forumunda", + "subjectLabel": "Konu", + "subjectPlaceholder": "Konu konusu", + "messageLabel": "Mesaj", + "messagePlaceholder": "Açılış yazınızı yazın…", + "postThread": "Konuyu gönder", + "cancel": "İptal", + "errors": { + "invalid": "Subject and message are required.", + "notFound": "That guild was not found.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "shop": { + "title": "Mağaza", + "subtitle": "Hesabınıza para yükleyin ve özel paketler, para birimi ve rozetleri alın.", + "browsingCategory": "{category} paketlerine göz atılıyor.", + "all": "Hepsi", + "allPackages": "Tüm paketler", + "packagesAvailable": "{count, plural, one {# package available} other {# packages available}}", + "empty": "Şu anda mevcut paket yok.", + "buy": "Satın al", + "loginToBuy": "Log in to buy", + "creditsHint": "Packages are paid with in-game credits. Top up first if you need more.", + "topUpLink": "Top up credits", + "priceCredits": "{credits} credits (≈ {usd})", + "priceCreditsShort": "{credits} cr", + "success": { + "bought": "Package purchased — rewards have been added to your account.", + "boughtNamed": "You purchased \"{name}\" — rewards have been added to your account." + }, + "errors": { + "invalid": "That package is no longer available.", + "credits": "You don't have enough credits for this package.", + "ratelimit": "You're purchasing too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "topup": { + "title": "PayPal ile yükleme yapın", + "subtitle": "PayPal ile güvenli bir şekilde ödeme yapın; kredileriniz, ödeme onaylandığı anda eklenir.", + "cancelled": "Ödeme iptal edildi; ödeme alınmadı.", + "chooseAmount": "Bir miktar seçin", + "notConfiguredPre": "PayPal henüz yapılandırılmadı. Bir yöneticinin ayarlaması gerekiyor", + "notConfiguredAnd": "ve", + "notConfiguredOptional": "(ve isteğe bağlı olarak", + "notConfiguredPost": "korumalı alan ve canlı yayın için).", + "balanceTitle": "Bakiyeniz", + "signedInAs": "{username} olarak oturum açıldı", + "credits": "Kredi", + "creditsPerUnit": "1,00 {currency} başına kredi", + "rateLine": "You receive {amount} credits per 1.00 {currency}. Credits appear in-game the next time you log in." + }, + "marketplace": { + "title": "Pazar yeri", + "subtitle": "Oyuncular tarafından listelenen mobilyalara ve nadir eşyalara göz atın. Listeler oyun içine yerleştirilir ve canlı olarak güncellenir; teklif vermek için otele gidin.", + "activeOffers": "Aktif teklifler", + "sellers": "Satıcılar", + "totalValue": "Toplam değer", + "activeListings": "Aktif listeler", + "mostRecentFirst": "En son ilk sıralarda yer alan", + "empty": "Şu anda aktif pazaryeri teklifi yok. Daha sonra tekrar kontrol edin.", + "colOffer": "Teklif", + "colItem": "Öğe", + "colSeller": "Satıcı", + "colPrice": "Fiyat", + "colListed": "Listelendi", + "itemLabel": "Öğe #{id}", + "userLabel": "Kullanıcı #{id}", + "justNow": "şimdi", + "minutesAgo": "{count} dakika önce", + "hoursAgo": "{count} saat önce", + "daysAgo": "{count} gün önce" + }, + "rares": { + "title": "Nadir değerler", + "subtitle": "Kategoriye göre gruplandırılmış, oteldeki tüm nadir eşyalara ilişkin genel bakış alın.", + "empty": "Şu anda burada listelenen nadir eşyamız yok.", + "rareCount": "{count, plural, one {# rare} other {# rares}}", + "viewRares": "Nadirleri görüntüle →" + }, + "rareCategory": { + "rareCount": "{count, plural, one {# rare in this category} other {# rares in this category}}", + "allRares": "← Tüm nadirler", + "empty": "Bu kategoride henüz nadir eşya listelenmedi.", + "colRare": "Nadir", + "colCredits": "Kredi", + "colCurrency": "Para birimi", + "creditsValue": "{value} kredi", + "duckets": "Ördekler", + "diamonds": "Elmaslar", + "credits": "Kredi" + }, + "redeem": { + "title": "Kuponu kullanın", + "subtitle": "Kupon kodunuz var mı? Ödülünüzü hesabınıza eklemek için aşağıya girin.", + "enterCode": "Kodunuzu girin", + "oncePerAccount": "Her kupon, hesap başına yalnızca bir kez kullanılabilir.", + "balanceTitle": "Bakiyeniz", + "signedInAs": "{username} olarak oturum açıldı", + "credits": "Kredi", + "instantCredit": "Kullanılan ödüller anında hesabınıza aktarılır ve bir sonraki oturum açışınızda oyunda görünür." + }, + "help": { + "title": "Yardım Merkezi", + "subtitle": "Kılavuzları, destek konularını ve otel kurallarını, yani yardım almak için ihtiyacınız olan her şeyi bulun.", + "myTickets": "Biletlerim →", + "topicsTitle": "Destek konuları", + "topicsSubtitle": "Kılavuzlara ve sık sorulan soruların yanıtlarına göz atın", + "topicsEmpty": "Henüz yardım konusu yok.", + "rulesTitle": "Otel kuralları", + "rulesSubtitle": "Otelde takılmadan önce lütfen bunları okuyun", + "rulesEmpty": "Henüz yayınlanmış bir kural yok.", + "categoryEmpty": "Bu kategoride kural yok." + }, + "helpCategory": { + "back": "← Yardım Merkezi", + "topicSubtitle": "Yardım Merkezi konusu", + "moreTitle": "Daha fazla yardım konusu", + "moreSubtitle": "Başka bir destek konusuna geçin" + }, + "helpTickets": { + "title": "Yardım Biletleri", + "subtitle": "Personele bir bilet gönderin ve açık taleplerinizi takip edin.", + "statTotal": "Toplam bilet", + "statOpen": "Açık", + "statClosed": "Kapalı", + "newTitle": "Yeni bilet", + "newSubtitle": "Sorununuzu açıklayın; personel sizi takip edecektir", + "subjectPlaceholder": "Konu", + "contentPlaceholder": "Sorununuzu açıklayın…", + "submit": "Bilet gönder", + "listTitle": "Biletleriniz", + "listSubtitle": "Personele gönderdiğiniz her istek", + "listEmpty": "Henüz biletiniz yok.", + "colId": "Kimlik", + "colSubject": "Konu", + "colStatus": "Durum", + "colCreated": "Oluşturuldu", + "statusOpen": "Açık", + "statusClosed": "Kapalı", + "success": { + "created": "Ticket submitted." + }, + "errors": { + "invalid": "Please fill in a subject and description.", + "moderated": "That ticket was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + }, + "banAppealLabel": "This is a ban appeal" + }, + "applyStaff": { + "title": "{hotel} personeli için başvur", + "subtitle": "Ara sıra personel başvurularını açıyoruz. Mükemmel uyum sağlayacağınızı düşündüğünüz bir pozisyonla karşılaşırsanız, başvurmaktan çekinmeyin.", + "noPositionsTitle": "Açık pozisyon yok", + "noPositionsBody": "Şu anda açık pozisyon yok. O zamana kadar herhangi bir açıklığımız olup olmadığını kontrol etmek için lütfen daha sonra tekrar gelin. İlginiz için teşekkür ederiz.", + "noDeadline": "Son tarih belirlenmedi", + "deadline": "Son başvuru tarihi: {date}", + "alreadyApplied": "{rank} için zaten başvuruda bulundunuz", + "aboutYou": "senin hakkında", + "aboutPlaceholder": "Bize neden harika bir {rank} olacağınızı söyleyin…", + "applyFor": "{rank} için başvur", + "success": { + "submitted": "Application submitted — staff will review it soon." + }, + "errors": { + "empty": "Please write at least 10 characters about yourself.", + "invalid": "Invalid application.", + "duplicate": "You have already applied for this position.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "applyTeam": { + "title": "{hotel} ekibine başvurun", + "subtitle": "Belirli aralıklarla ekip başvurularını açıyoruz. Kendinize uygun bir takım görürseniz başvurmaktan çekinmeyin!", + "noPositionsTitle": "Açık takım pozisyonu yok", + "noPositionsBody": "Şu anda açık takım pozisyonu bulunmamaktadır. Lütfen yeni açık pozisyonları kontrol etmek için daha sonra tekrar gelin. Teşekkür ederim!", + "pending": "Başvurunuz beklemede", + "aboutYou": "senin hakkında", + "aboutPlaceholder": "Bize neden {rank} için çok uygun olduğunuzu anlatın…", + "applyFor": "{rank} için başvur", + "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": "Radyo", + "subtitle": "Otelin radyosunu dinleyin; canlı DJ setleri, istekler ve duyurular.", + "nowPlaying": "Şimdi oynatılıyor", + "nothingPlaying": "Şu anda hiçbir şey oynatılmıyor.", + "onAir": "Yayında: {dj}", + "noDj": "Yayında DJ yok.", + "audioUnsupported": "Tarayıcınız ses öğesini desteklemiyor.", + "streamOffline": "Akış şu anda çevrimdışı.", + "exploreTitle": "Radyoyu keşfedin", + "exploreSubtitle": "Programlama, bağırışlar, istekler ve daha fazlası", + "linkSchedule": "Program", + "linkScheduleText": "Haftalık DJ'lerimiz ve şovlarımız.", + "linkShouts": "Bağırışlar", + "linkShoutsText": "Topluluktan haykırışlar ve talepler.", + "linkRequests": "İstekler", + "linkRequestsText": "DJ'den favori parçanızı döndürmesini isteyin.", + "linkApply": "DJ olarak başvur", + "linkApplyText": "Ekibe katılın ve yayınlara çıkın.", + "linkLeaderboard": "Liderlik tablosu", + "linkLeaderboardText": "Kazanılan puanlara göre sıralanan en iyi dinleyiciler.", + "todayTitle": "Bugünün programı", + "todayTitleWithDay": "Bugünün programı · {day}", + "todaySubtitle": "Bugün televizyonlarda neler var", + "fullWeek": "Tüm hafta →", + "noShowsToday": "Bugün için programlanmış bir gösteri yok.", + "colTime": "Zaman", + "colShow": "Göster", + "colDj": "DJ", + "untitledShow": "İsimsiz gösteri", + "userNumber": "Kullanıcı #{id}" + }, + "radioSchedule": { + "title": "Radyo Programı", + "subtitle": "Haftalık DJ ve şov kadromuz", + "empty": "Henüz programlanmış bir gösteri yok.", + "colDay": "Gün", + "colTime": "Zaman", + "colDj": "DJ", + "colShow": "Göster", + "noShows": "Gösteri yok" + }, + "radioShouts": { + "title": "Radyo Bağırışları", + "subtitle": "Toplumdan gelen çağrılar ve talepler", + "postTitle": "Bir duyuru yayınla", + "postSubtitle": "Canlı DJ'e mesaj gönder", + "messageLabel": "Mesajınız", + "messagePlaceholder": "DJ'e bir not gönderin…", + "shoutButton": "Bağır", + "loginToPost": "Bir duyuru göndermek için giriş yapın.", + "latestTitle": "En son bağırışlar", + "latestSubtitle": "Dinleyicilerden gelen en son mesajlar", + "empty": "Henüz bağırış yok. İlk siz olun!", + "success": { + "posted": "Shout posted." + }, + "errors": { + "invalid": "Please write a message before shouting.", + "moderated": "That shout was blocked by moderation.", + "ratelimit": "You're shouting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "radioContests": { + "title": "Radyo Yarışmaları", + "subtitle": "En son canlı yarışmalarımıza katılın ve katılın", + "empty": "Henüz yarışma yok.", + "contestLabel": "Yarışma #{id}", + "dateUnknown": "Tarih bilinmiyor" + }, + "radioGiveaways": { + "title": "Radyo Hediyeleri", + "subtitle": "Radyo çekilişlerimizde kazanma şansınızı yakalamak için dinleyin", + "empty": "Henüz hediye yok.", + "giveawayLabel": "Çekiliş #{id}", + "dateUnknown": "Tarih bilinmiyor" + }, + "radioLeaderboard": { + "title": "Radyo Dinleyici Skor Tablosu", + "subtitle": "Radyo dinlerken kazanılan puanlara göre ilk 50 dinleyici", + "empty": "Henüz gösterilecek dinleyici noktası yok.", + "colRank": "Sıra", + "colAvatar": "avatar", + "colListener": "Dinleyici", + "colPoints": "Puanlar" + }, + "radioRequests": { + "formTitle": "Bir istek gönderin", + "formSubtitle": "DJ'den favori parçanızı çalmasını isteyin", + "songLabel": "Şarkı", + "songPlaceholder": "Şarkının adı", + "artistLabel": "Sanatçı", + "artistPlaceholder": "Sanatçının adı (isteğe bağlı)", + "submitButton": "İsteği gönder", + "loginToRequest": "Bir istek göndermek için oturum açın.", + "latestTitle": "Son istekler", + "latestSubtitle": "En son talep edilen şarkılar", + "empty": "Henüz talep yok.", + "colSong": "Şarkı", + "colArtist": "Sanatçı", + "colRequester": "Talep eden", + "colDate": "Tarih", + "colStatus": "Durum", + "statusPending": "Beklemede", + "statusApproved": "Onaylandı", + "statusPlayed": "Oynandı", + "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": "Radyo DJ'i olmak için başvurun", + "subtitle": "Bize kendinizden ve neden radyo dalgalarına çok uygun olduğunuzu anlatın", + "latestTitle": "En son başvurunuz", + "statusLabel": "Durum:", + "submittedOn": "· {date} gönderildi", + "submitAgain": "Bilgileriniz değiştiyse aşağıdan tekrar gönderebilirsiniz.", + "formTitle": "Başvuru formu", + "formSubtitle": "Gerekli olarak işaretlenen tüm alanların doldurulması gerekir", + "realNameLabel": "Gerçek isim", + "realNamePlaceholder": "Tam adınız", + "ageLabel": "Yaş", + "availabilityLabel": "Kullanılabilirlik", + "availabilityPlaceholder": "Hangi gün ve saatlerde yayın yapabilirsiniz?", + "musicStyleLabel": "Müzik tarzı", + "musicStylePlaceholder": "örneğin Ev, Pop, Hip-Hop", + "experienceLabel": "Deneyim", + "optional": "(isteğe bağlı)", + "experiencePlaceholder": "Daha önce DJ veya hosting deneyiminiz var mı?", + "motivationLabel": "Motivasyon", + "motivationPlaceholder": "Neden radyo ekibine katılmak istiyorsunuz?", + "submitButton": "Başvuruyu gönder", + "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": "Hesap ayarları", + "accountSettingsSubtitle": "Profilinizi, güvenliğinizi ve bağlı hesaplarınızı yönetin", + "publicProfile": "Herkese açık profiliniz", + "noMotto": "Slogan yok", + "noEmail": "Dosyada e-posta yok", + "changeMotto": "Sloganı değiştir", + "changeMottoSubtitle": "Çevrimiçiyseniz oyun içinde anında güncellenir", + "mottoPlaceholder": "Sloganınız", + "saveMotto": "Sloganı kaydet", + "securityTitle": "Güvenlik", + "securitySubtitle": "İki faktörlü kimlik doğrulama", + "securityDescription": "Hesabınıza ikinci bir koruma katmanı ekleyin.", + "twoFactorLink": "İki faktörlü kimlik doğrulama" + }, + "settings2fa": { + "backToSettings": "← Ayarlar", + "title": "İki faktörlü kimlik doğrulama", + "subtitle": "Kimlik doğrulama uygulamasıyla ikinci bir güvenlik katmanı ekleyin", + "nowEnabled": "2FA artık etkin. 🔒", + "disabledNotice": "2FA devre dışı bırakıldı.", + "badCode": "Bu kod geçerli değildi; tekrar deneyin.", + "noAppKeyPrefix": "2FA şu tarihe kadar kullanılamıyor:", + "noAppKeyMiddle": "yapılandırılmıştır (aynı Laravel", + "noAppKeySuffix": "AtomCMS'niz yüklenirken mevcut sırlar okunabilir kalır).", + "isEnabled": "2FA etkin", + "onYourAccount": "hesabınızda.", + "disable": "2FA'yı devre dışı bırak", + "scanOrEnter": "Bu anahtarı tarayın veya girin", + "scanInstructions": "Bunu Google Authenticator/Authy'ye ekleyin, ardından onaylamak için 6 haneli kodu girin.", + "manualKey": "Manuel anahtar:", + "codePlaceholder": "6 haneli kod", + "confirm": "Onayla", + "enableIntro": "Kimlik doğrulama uygulamasıyla ikinci bir güvenlik katmanı ekleyin.", + "enable": "2FA'yı etkinleştir", + "rateLimit": "Too many attempts. Please wait before trying again." + }, + "title": "Bağlı hesaplar", + "subtitle": "Tek tıklamayla oturum açabilmek için bir sosyal hesap bağlayın", + "connected": "Bağlı", + "unavailable": "Kullanılamıyor", + "login": { + "title": "Oturum aç", + "subtitle": "Tekrar hoş geldiniz; otele girmek için oturum açın.", + "subtitle2fa": "Kimlik doğrulayıcınızdan aldığınız 6 haneli kodu girin.", + "usernamePlaceholder": "Kullanıcı adı", + "passwordPlaceholder": "Şifre", + "codePlaceholder": "2FA kodu", + "pleaseWait": "Lütfen bekleyin…", + "verify": "Doğrula", + "signIn": "Oturum aç", + "or": "veya", + "noAccount": "Hesabın yok mu?", + "createOne": "Bir tane oluştur", + "forgotPassword": "Şifrenizi mi unuttunuz?", + "errorInvalidCredentials": "Geçersiz kullanıcı adı veya şifre", + "errorInvalid2fa": "Geçersiz 2FA kodu", + "welcomeBack": "Tekrar hoş geldin", + "welcomeBackSub": "{hotelName} devam etmek için giriş yap", + "errorUnverified": "Please verify your email before signing in.", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "register": { + "title": "Hesap oluştur", + "subtitle": "Otele katılın; yalnızca birkaç dakikanızı alır.", + "username": "Kullanıcı adı", + "email": "E-posta", + "password": "Şifre", + "confirmPassword": "Şifreyi tekrarla", + "usernamePlaceholder": "Kullanıcı adı", + "emailPlaceholder": "E-posta", + "passwordPlaceholder": "Şifre (en az 6 karakter)", + "confirmPasswordPlaceholder": "Şifreyi tekrarla", + "selectOutfit": "Kıyafetinizi seçin", + "termsAccept": "18 yaşındayım ve {hotel} şartlarını ve kurallarını kabul ediyorum.", + "createAccount": "Hesap oluştur", + "creatingAccount": "Hesap oluşturuluyor...", + "redirecting": "Hesabınıza yönlendiriliyorsunuz...", + "alreadyHaveAccount": "Zaten bir hesabınız var mı? Giriş yapmak!", + "register": "Kayıt ol", + "termsError": "Kayıt olmak için şartları ve kuralları kabul etmelisiniz.", + "usernameError": "Kullanıcı adı gerekli.", + "emailError": "Geçerli e-posta gereklidir.", + "passwordError": "Şifre en az 6 karakter olmalıdır.", + "confirmPasswordError": "Şifreler eşleşmiyor.", + "termsRequired": "Şartları ve kuralları kabul etmelisiniz.", + "usernameRequired": "Kullanıcı adı gerekli.", + "emailRequired": "E-posta gerekli.", + "passwordRequired": "Şifre gerekli.", + "passwordsDontMatch": "Şifreler eşleşmiyor.", + "alreadyHaveAccountPre": "Zaten hesabın var mı?", + "alreadyHaveAccountLink": "Giriş yap", + "whoIsOnline": "Kim çevrimiçi", + "usersOnline": "{count} çevrimiçi", + "accepted": "Accepted & agreed", + "showPassword": "Show", + "hidePassword": "Hide", + "accountDetails": "Account details", + "credentials": "Credentials & security" + }, + "forgot": { + "title": "Şifreyi sıfırla", + "subtitle": "Yeni bir şifre belirlemeniz için size e-postayla güvenli bir bağlantı göndereceğiz.", + "sentNotice": "Bu e-posta kayıtlıysa, bir sıfırlama bağlantısı gönderilmiştir. Gelen kutunuzu kontrol edin.", + "emailPlaceholder": "E-postanız", + "sendResetLink": "Sıfırlama bağlantısını gönder", + "backToLogin": "Girişe geri dön", + "errorCaptcha": "Captcha verification failed. Please try again." + }, + "reset": { + "title": "Yeni bir şifre belirleyin", + "subtitle": "Başka yerde kullanmadığınız güçlü bir şifre seçin.", + "passwordPlaceholder": "Yeni şifre (en az 6 karakter)", + "resetPassword": "Şifreyi sıfırla", + "backToLogin": "Girişe geri dön" + }, + "verify": { + "verifiedTitle": "Artık hazırsınız", + "verifiedSubtitle": "E-posta doğrulandı", + "verifiedBody": "E-posta adresiniz doğrulandı. Artık giriş yapıp oynayabilirsiniz.", + "goToLogin": "Girişe git", + "alreadyTitle": "Zaten doğrulandı", + "alreadySubtitle": "Yapacak hiçbir şey kalmadı", + "alreadyBody": "Bu e-posta adresi zaten doğrulandı.", + "unavailableTitle": "Kısa süre sonra tekrar deneyin", + "unavailableSubtitle": "Sunucuya ulaşılamıyor", + "unavailableBody": "E-postanızı doğrulamak için sunucuya ulaşamadık. Lütfen bağlantıyı bir süre sonra yeniden deneyin.", + "invalidTitle": "E-posta doğrulaması", + "invalidSubtitle": "Geçersiz veya süresi dolmuş bağlantı", + "invalidBody": "Bu doğrulama bağlantısı geçerli değil. E-postanızdaki bağlantının tamamını açtığınızdan emin olun veya yeni bir bağlantı isteyin.", + "backToLogin": "Girişe geri dön" + }, + "banned": { + "title": "Yasaklandın", + "subtitle": "Hesap askıya alındı", + "body": "Hesabınız otelde askıya alındı.", + "reasonLabel": "Sebep:", + "permanent": "Bu yasak kalıcıdır.", + "expires": "{date} tarihinde sona eriyor.", + "contactStaff": "Bunun bir hata olduğunu düşünüyorsanız personel ekibiyle iletişime geçin." + }, + "maintenance": { + "title": "{hotel} bakımda", + "subtitle": "Kısa süre sonra geri döneceğiz", + "staffCanLogIn": "Personel hâlâ giriş yapabilir." + }, + "admin": { + "nav": { + "overview": "Genel Bakış", + "dashboard": "Kontrol Paneli", + "content": "İçerik", + "articles": "Makaleler", + "tags": "Etiketler", + "navigator": "Gezgin", + "helpCenter": "Yardım merkezi", + "advertisements": "Reklamlar", + "writeableBoxes": "Yazılabilir kutular", + "photos": "Fotoğraflar", + "tickets": "Biletler", + "events": "Events", + "polls": "Polls", + "banners": "Banners", + "prefixes": "Prefixes", + "usersAndAccess": "Kullanıcılar ve erişim", + "users": "Kullanıcılar", + "bans": "Yasaklar", + "ipManagement": "IP yönetimi", + "vpn": "VPN", + "applications": "Uygulamalar", + "teams": "Takımlar", + "permissions": "İzinler", + "onlineUsers": "Online users", + "moderation": "Moderation", + "economy": "Ekonomi", + "catalog": "Katalog", + "shop": "Mağaza", + "transactions": "İşlemler", + "vouchers": "Kuponlar", + "subscriptions": "Abonelikler", + "rareValues": "Nadir değerler", + "badges": "Rozetler", + "achievements": "Başarılar", + "calendar": "Takvim", + "radio": "Radyo", + "radioHistory": "Radyo geçmişi", + "radioBanners": "Afişler", + "radioEmbed": "Göm", + "radioApiKeys": "API anahtarları", + "radioModeration": "Moderasyon", + "radioSettings": "Ayarlar", + "radioMonitoring": "İzleme", + "radioPoints": "Puanlar", + "radioRanks": "Rütbeler", + "radioAutodj": "Otomatik DJ", + "system": "Sistem", + "commandocentrum": "Komando merkezi", + "emulator": "Emülatör", + "alerts": "Uyarılar", + "logs": "Günlükler", + "auditLog": "Audit log", + "analytics": "Analytics", + "devops": "DevOps", + "wordFilter": "Kelime filtresi", + "maintenance": "Bakım", + "rooms": "Odalar", + "emailTemplates": "E-posta şablonları", + "theme": "Tema", + "media": "Medya", + "favicon": "Site simgesi", + "sounds": "Sesler", + "translations": "Çeviriler", + "import": "İthalat", + "settings": "Ayarlar", + "backToSite": "Siteye geri dön", + "housekeeping": "Temizlik", + "hotelManagementPanel": "Otel yönetim paneli", + "rankLabel": "Sıra {rank}", + "hubNewsMedia": "News & media", + "hubSiteContent": "Site content", + "hubEngagement": "Engagement", + "hubUsers": "Users", + "hubAccess": "Access & security", + "hubCatalog": "Catalog & rares", + "hubShop": "Shop & payments", + "hubTools": "Tools", + "hubObservability": "Observability", + "helpTickets": "Help-center tickets", + "marketplace": "Marketplace", + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "searchMenu": "Search menu…", + "clearMenuSearch": "Clear menu search", + "noMenuResults": "No matching pages.", + "community": "Community", + "monitoring": "Monitoring", + "staffAccess": "Ranks & permissions", + "multiAccounts": "Multi-accounts", + "chatLog": "Chat log", + "commandLog": "Command log", + "tradeLog": "Trade log", + "tools": "Tools", + "guilds": "Guilds", + "itemsBase": "Items base", + "adminMenu": "Admin menu", + "studio": "Studio", + "operationsCenter": "Operations center", + "catalogMaintenance": "Catalog maintenance", + "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" + }, + "dashboard": { + "title": "Kontrol Paneli", + "subtitle": "Otele genel bakış ve canlı durum", + "playersOnline": "Çevrimiçi oyuncular", + "articles": "Makaleler", + "activeBans": "Aktif yasaklar", + "database": "Veritabanı", + "databaseConnected": "Bağlı", + "databaseDown": "Aşağı", + "usersByRank": "Sıralamaya göre kullanıcılar", + "noAccountsToBreakDown": "Henüz çözülecek hesap yok", + "rankLabel": "Sıra {rank}", + "rankWithCount": "Sıralama {rank}: {count} hesap", + "recentStaffActivity": "Son personel etkinliği", + "viewAll": "Tümünü görüntüle", + "noStaffActivityLogged": "Henüz personel etkinliği kaydedilmedi", + "totalAccounts": "{count} total accounts" + }, + "articles": { + "title": "Makaleler", + "subtitle": "Haber makaleleri — en yeni 50 makale", + "newArticle": "+ Yeni makale", + "edit": "Düzenle", + "delete": "Sil", + "noArticles": "Henüz makale yok", + "confirmDelete": "\"{title}\" dosyasını silmek istediğinizden emin misiniz?", + "colTitle": "Başlık", + "colSlug": "Sümüklüböcek", + "colAuthor": "Yazar", + "colCreated": "Oluşturuldu", + "colActions": "Eylemler", + "form": { + "title": "Başlık", + "titlePlaceholder": "Makale başlığı", + "slug": "Sümüklüböcek", + "slugPlaceholder": "makale-url-slug", + "category": "Kategori", + "categoryPlaceholder": "Bir kategori seçin", + "body": "Vücut", + "bodyPlaceholder": "Makale içeriğinizi yazın…", + "image": "Resim", + "imagePlaceholder": "https://example.com/image.png", + "thumbnail": "Küçük resim", + "thumbnailPlaceholder": "https://example.com/thumb.png", + "published": "Yayınlandı", + "featured": "Öne Çıkanlar", + "save": "Makaleyi kaydet", + "saving": "Kaydediliyor…", + "deleteArticle": "Makaleyi sil", + "deleteConfirm": "Bu eylem geri alınamaz. Makale kalıcı olarak kaldırılacaktır.", + "cancel": "İptal", + "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", + "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}", + "articlesShown": "Articles shown", + "latest": "Latest article", + "mostRecentPost": "Most recent publication", + "recentArticles": "Recent articles" + }, + "tags": { + "title": "Etiketler", + "subtitle": "Makale etiketleri / kategorileri", + "addTag": "Etiket ekle", + "name": "İsim", + "namePlaceholder": "Etiket adı", + "backgroundColour": "Arka plan rengi", + "createTag": "Etiket oluştur", + "editTag": "Etiketi düzenle", + "updateTag": "Etiketi güncelle", + "deleteTag": "Etiketi sil", + "confirmDelete": "\"{name}\" silinsin mi?", + "noTags": "Henüz etiket yok", + "colId": "Kimlik", + "colTag": "Etiket", + "colColour": "Renk", + "colUsedBy": "Kullanan", + "colCreated": "Oluşturuldu", + "colActions": "Eylemler", + "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": "Gezgin", + "flatCategories": "Düz kategoriler", + "publicRooms": "Umumi odalar", + "addCategory": "Kategori ekle", + "editCategory": "Kategoriyi düzenle", + "deleteCategory": "Kategoriyi sil", + "categoryName": "Kategori adı", + "categoryNamePlaceholder": "örneğin Rahatlayın ve Sohbet Edin", + "categoryOrder": "Sipariş", + "roomName": "Oda adı", + "roomNamePlaceholder": "örneğin Karşılama Salonu", + "roomId": "Oda Kimliği", + "roomIdPlaceholder": "Sayısal oda kimliği", + "save": "Kaydet", + "cancel": "İptal", + "noCategories": "Henüz kategori yok", + "noPublicRooms": "Henüz umumi oda yok", + "colId": "Kimlik", + "colName": "İsim", + "colOrder": "Sipariş", + "colRooms": "Odalar", + "colActions": "Eylemler", + "publicFlatcats": "Public room categories", + "markedPublic": "Categories marked as public", + "visibleRooms": "Visible rooms", + "rows": "rows", + "unnamed": "Unnamed room" + }, + "helpCenter": { + "title": "Yardım Merkezi", + "subtitle": "Destek girişleri ve SSS yönetimi", + "entries": "Girişler", + "newEntry": "+ Yeni giriş", + "edit": "Düzenle", + "delete": "Sil", + "noEntries": "Henüz giriş yok", + "confirmDelete": "\"{title}\" silinsin mi?", + "colId": "Kimlik", + "colTitle": "Başlık", + "colCategory": "Kategori", + "colCreated": "Oluşturuldu", + "colActions": "Eylemler", + "form": { + "title": "Başlık", + "titlePlaceholder": "Giriş başlığı", + "category": "Kategori", + "categoryPlaceholder": "Kategori seç", + "body": "Vücut", + "bodyPlaceholder": "Cevabı yazın…", + "save": "Girişi kaydet", + "saving": "Kaydediliyor…", + "deleteEntry": "Girişi sil", + "cancel": "İptal" + }, + "withButton": "With a button", + "smallBoxes": "Small boxes" + }, + "ads": { + "title": "Reklamlar", + "subtitle": "Otel reklamlarını ve promosyon bannerlarını yönetin", + "newAd": "+ Yeni reklam", + "edit": "Düzenle", + "delete": "Sil", + "noAds": "Henüz reklam yok", + "confirmDelete": "Bu reklam silinsin mi?", + "colId": "Kimlik", + "colName": "İsim", + "colImage": "Resim", + "colUrl": "URL'si", + "colViews": "Görünümler", + "colStatus": "Durum", + "colCreated": "Oluşturuldu", + "colActions": "Eylemler", + "form": { + "name": "İsim", + "namePlaceholder": "Reklam adı", + "image": "Resim URL'si", + "imagePlaceholder": "https://example.com/banner.png", + "url": "Hedef URL", + "urlPlaceholder": "https://örnek.com", + "enabled": "Etkin", + "save": "Reklamı kaydet", + "saving": "Kaydediliyor…", + "deleteAd": "Reklamı sil", + "cancel": "İptal" + }, + "deleteSuccess": "Advertisement deleted!", + "deleteError": "Failed to delete advertisement.", + "adsCount": "Total ads", + "latest": "Latest", + "mostRecentAd": "Most recent ad", + "allAds": "All advertisements", + "colPreview": "Preview" + }, + "writeableBoxes": { + "title": "Yazılabilir Kutular", + "subtitle": "Otel genelinde ve CMS'de gösterilen içerik panelleri", + "newBox": "Yeni kutu", + "edit": "Düzenle", + "delete": "Sil", + "noBoxes": "Henüz yazılabilir kutu yok", + "confirmDelete": "Bu kutu silinsin mi?", + "colId": "Kimlik", + "colName": "İsim", + "colLocation": "Konum", + "colUpdated": "Güncellendi", + "colActions": "Eylemler", + "form": { + "name": "İsim", + "namePlaceholder": "Kutu adı", + "location": "Konum", + "locationPlaceholder": "örneğin ana sayfa, kenar çubuğu", + "content": "İçerik", + "contentPlaceholder": "Kutu içeriğini yazın…", + "enabled": "Etkin", + "save": "Kutuyu kaydet", + "saving": "Kaydediliyor…", + "deleteBox": "Kutuyu sil", + "cancel": "İptal", + "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": "Fotoğraf Denetleme", + "subtitle": "En son oyun içi kamera fotoğrafları", + "delete": "Sil", + "approve": "Onayla", + "noPhotos": "Denetlenecek fotoğraf yok", + "confirmDelete": "Bu fotoğraf kalıcı olarak silinsin mi?", + "colId": "Kimlik", + "colPreview": "Önizleme", + "colUser": "Kullanıcı", + "colRoom": "Oda", + "colTimestamp": "Zaman damgası", + "colActions": "Eylemler", + "photoAlt": "Kullanıcı fotoğrafı #{id}", + "byUser": "{username} tarafından", + "photosShown": "Shown", + "rooms": "Rooms", + "users": "Users", + "distinctRooms": "Distinct rooms on this page", + "distinctPhotographers": "Distinct photographers on this page", + "total": "Total photos", + "recentPhotos": "Recent photos", + "pageOf": "Page {page} of {last} · {total} total", + "purgeHint": "Delete removes the database row and best-effort deletes a matching file under /public. External CDN URLs are not purged." + }, + "users": { + "title": "Kullanıcılar", + "subtitle": "Otel hesaplarına göz atın, arayın ve yönetin", + "search": "Ara", + "searchPlaceholder": "Kullanıcı adına, e-postaya veya kimliğe göre arayın…", + "searchResults": "\"{query}\" için {count, plural, one {# result} other {# results}}", + "noResults": "Kullanıcı bulunamadı", + "colId": "Kimlik", + "colUsername": "Kullanıcı adı", + "colEmail": "E-posta", + "colRank": "Sıra", + "colOnline": "Çevrimiçi", + "colRegistered": "Kayıtlı", + "colLastOnline": "Son çevrimiçi", + "colActions": "Eylemler", + "yes": "Evet", + "no": "Hayır", + "edit": "Düzenle", + "setRank": "Sıralamayı ayarla", + "disconnect": "Bağlantıyı kes", + "alert": "Uyarı", + "ban": "Yasak", + "detail": { + "title": "Kullanıcı: {username}", + "subtitle": "Hesap ayrıntıları ve yönetimi", + "overview": "Genel Bakış", + "actions": "Eylemler", + "username": "Kullanıcı adı", + "email": "E-posta", + "motto": "Slogan", + "rank": "Sıra", + "credits": "Kredi", + "duckets": "Ördekler", + "diamonds": "Elmaslar", + "online": "Çevrimiçi", + "registered": "Kayıtlı", + "lastOnline": "Son çevrimiçi", + "ipAddress": "IP adresi", + "machineId": "Makine Kimliği", + "sendAlert": "Uyarı gönder", + "sendMessage": "Mesaj gönder", + "disconnectUser": "Kullanıcının bağlantısını kes", + "banUser": "Kullanıcıyı yasakla", + "resetPassword": "Şifreyi sıfırla", + "deleteUser": "Kullanıcıyı sil", + "confirmDelete": "{username}'i silmek istediğinizden emin misiniz? Bu geri alınamaz.", + "tabInfo": "Account Info", + "tabBadges": "Badges ({count})", + "tabRooms": "Rooms ({count})", + "tabSanctions": "Sanctions ({count})", + "tabActivity": "Activity" + }, + "editForm": { + "title": "Kullanıcıyı düzenle: {username}", + "subtitle": "Hesap ayrıntılarını değiştirin", + "username": "Kullanıcı adı", + "usernamePlaceholder": "Kullanıcı adı", + "email": "E-posta", + "emailPlaceholder": "kullanıcı@example.com", + "motto": "Slogan", + "mottoPlaceholder": "Kullanıcı sloganı", + "rank": "Sıra", + "credits": "Kredi", + "duckets": "Ördekler", + "diamonds": "Elmaslar", + "save": "Değişiklikleri kaydet", + "saving": "Kaydediliyor…", + "cancel": "İptal" + }, + "presentation": { + "users": "Users", + "edit": "Edit", + "view": "View", + "rank": "Rank {rank}", + "online": "Online", + "offline": "Offline", + "banned": "Banned", + "credits": "credits", + "diamonds": "diamonds", + "duckets": "duckets", + "pixels": "pixels", + "rooms": "Rooms", + "messages": "Messages", + "trades": "Trades", + "accountDetails": "Account details", + "registered": "Registered", + "lastLogin": "Last login", + "ipRegister": "Registration IP", + "ipCurrent": "Current IP", + "machineId": "Device ID", + "email": "Email", + "gender": "Gender", + "never": "Never", + "findIp": "Find users with this IP", + "enabled": "Enabled", + "disabled": "Disabled", + "unavailable": "Not available", + "noBadges": "No badges assigned" + }, + "create": { + "newUser": "New user", + "title": "Create user", + "description": "Creates the account immediately with a default avatar and 5,000 credits, pixels, duckets and diamonds.", + "username": "Username", + "email": "Email", + "password": "Password", + "rank": "Rank", + "rankOption": "Rank {rank}", + "motto": "Motto (optional)", + "usernamePlaceholder": "NewHabbo", + "passwordPlaceholder": "At least 6 characters", + "mottoPlaceholder": "I'm new here!", + "generate": "Generate", + "passwordGenerated": "Password generated in the password field.", + "required": "Username, email and password are required.", + "invalidUsername": "Use 3–20 characters: letters, numbers, _ or -.", + "passwordLength": "The password must contain at least 6 characters.", + "created": "User {username} created." + }, + "overview": { + "title": "Overview", + "hint": "Up to 5 recent records per source. Only sections you can access are shown.", + "restricted": "You do not have permission to view operational records.", + "sanctions": "Recent bans", + "mute": "Active mute", + "tickets": "Support tickets", + "help": "Help center requests", + "reports": "In-game reports", + "transactions": "Payments", + "purchases": "Catalog purchases", + "activity": "Recorded staff actions", + "openModule": "Open management", + "purchaseHint": "Recorded quantities and currency costs.", + "purchaseDetail": "Quantity: {amount} · Credits: {credits} · Points: {points} (type {type})", + "activityHint": "Staff audit entries targeting this account. This is not a complete history of player activity.", + "muteUntil": "Muted until {date}", + "error": "This source could not be loaded. Refresh the page to try again.", + "empty": "No records found.", + "status": { + "active": "Active", + "expired": "Expired", + "open": "Open", + "closed": "Closed", + "reported": "Reported user", + "reporter": "Reporter" + } + } + }, + "bans": { + "title": "Yasaklar", + "subtitle": "Hesap, IP ve makine yasaklarını yönetin", + "newBan": "Yeni yasak", + "edit": "Düzenle", + "delete": "Sil", + "noBans": "Henüz yasak yok", + "confirmDelete": "Bu yasak kaldırılsın mı?", + "colId": "Kimlik", + "colValue": "Değer", + "colType": "Tür", + "colReason": "Sebep", + "colBannedBy": "Tarafından yasaklandı", + "colExpires": "Süresi doluyor", + "colCreated": "Oluşturuldu", + "colActions": "Eylemler", + "form": { + "value": "Değer", + "valuePlaceholder": "Kullanıcı adı, IP veya makine kimliği", + "type": "Tür", + "typeUser": "Kullanıcı", + "typeIp": "IP", + "typeMachine": "Makine", + "reason": "Sebep", + "reasonPlaceholder": "Yasaklama nedeni", + "expiresAt": "Süresi doluyor", + "permanent": "Kalıcı", + "save": "Yasağı kaydet", + "saving": "Kaydediliyor…", + "cancel": "İptal" + }, + "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 Yönetimi", + "subtitle": "IP beyaz listesini ve kara listesini yönetin", + "whitelist": "Beyaz liste", + "blacklist": "Kara liste", + "addIp": "IP ekle", + "ipAddress": "IP adresi", + "ipAddressPlaceholder": "örneğin 127.0.0.1", + "reason": "Sebep", + "reasonPlaceholder": "Listelenme nedeni", + "add": "Ekle", + "remove": "Kaldır", + "confirmRemove": "Bu IP {list}'ten kaldırılsın mı?", + "noWhitelistedIps": "Beyaz listeye alınmış IP yok", + "noBlacklistedIps": "Kara listeye alınmış IP yok", + "colIp": "IP", + "colReason": "Sebep", + "colAdded": "Eklendi", + "colActions": "Eylemler", + "whitelisted": "Allowed IP addresses", + "blacklisted": "Blocked IP addresses", + "asnPlaceholder": "ASN (optional)", + "colAsn": "ASN" + }, + "vpn": { + "title": "VPN/Proxy Tespiti", + "subtitle": "VPN ve proxy algılama ayarlarını yapılandırma", + "enabled": "Etkin", + "apiKey": "API anahtarı", + "apiKeyPlaceholder": "VPN algılama API anahtarınız", + "apiKeyHint": "Devre dışı bırakmak için boş bırakın", + "blockOnDetect": "Tespit edildiğinde engelle", + "blockOnDetectHint": "Bir VPN veya proxy'nin arkasında tespit edilen kullanıcıları otomatik olarak engelle", + "save": "Ayarları kaydet", + "saving": "Kaydediliyor…", + "settingsSaved": "VPN ayarları başarıyla kaydedildi", + "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 IP management.", + "openIpManagement": "Open IP management" + }, + "applications": { + "title": "Personel Başvuruları", + "subtitle": "Bekleyen ve incelenen personel başvuruları", + "pending": "Beklemede", + "approved": "Onaylandı", + "rejected": "Reddedildi", + "noApplications": "Henüz başvuru yok", + "colId": "Kimlik", + "colApplicant": "Başvuru sahibi", + "colPosition": "Pozisyon", + "colStatus": "Durum", + "colSubmitted": "Gönderildi", + "colActions": "Eylemler", + "review": "İncele", + "approve": "Onayla", + "reject": "Reddet", + "confirmApprove": "{username}, {position} için onaylansın mı?", + "confirmReject": "{username}'in {position} için yaptığı başvuru reddedilsin mi?", + "detail": { + "title": "{username} tarafından yapılan başvuru", + "subtitle": "{position} için", + "about": "Başvuru sahibi hakkında", + "message": "Uygulama mesajı", + "status": "Durum", + "submitted": "Gönderildi", + "noMessage": "Mesaj verilmedi" + }, + "applicationsTitle": "Applications ({count})", + "userNumber": "User #{id}", + "rankLabel": "Rank {rank}" + }, + "teams": { + "title": "Takımlar", + "subtitle": "Personel rütbe adlarını ve açıklamalarını tanımlayın", + "addRank": "Sıralama ekle", + "editRank": "Sıralamayı düzenle", + "deleteRank": "Sıralamayı sil", + "noTeams": "Henüz rütbe tanımı yok", + "confirmDelete": "{id} rütbe tanımı silinsin mi?", + "colId": "Kimlik", + "colRank": "Sıra", + "colName": "İsim", + "colBadge": "Rozet", + "colColour": "Renk", + "colActions": "Eylemler", + "form": { + "rankId": "Sıra Kimliği", + "rankIdPlaceholder": "Sayısal sıralama kimliği", + "name": "İsim", + "namePlaceholder": "örneğin Yönetici", + "badge": "Rozet kodu", + "badgePlaceholder": "örneğin ADM001", + "colour": "Renk", + "colourPlaceholder": "örneğin #ff0000", + "save": "Ekip tanımını kaydet", + "saving": "Kaydediliyor…", + "cancel": "İptal" + }, + "teamRanks": "Staff ranks", + "visible": "Visible", + "hidden": "Hidden", + "newTeamRank": "New staff rank", + "rankName": "Rank name", + "rankNamePlaceholder": "For example: Moderator", + "badgeCode": "Badge code", + "badgeCodePlaceholder": "For example: ADM", + "jobDescription": "Job description", + "jobDescriptionPlaceholder": "Describe this staff role", + "staffColor": "Staff colour", + "staffColorPlaceholder": "For example: #3366cc", + "hiddenRank": "Hide from the staff page", + "createTeam": "Create staff rank", + "ranksTitle": "Staff ranks ({count})", + "badge": "Badge", + "color": "Colour", + "visibility": "Visibility", + "delete": "Delete" + }, + "permissions": { + "title": "İzinler", + "subtitle": "Yönetici paneli için sıralamaya dayalı izinleri yönetin", + "addPermission": "İzin ekle", + "editPermission": "İzni düzenle", + "deletePermission": "İzni sil", + "noPermissions": "Henüz yapılandırılmış izin yok", + "confirmDelete": "Bu izin silinsin mi?", + "colId": "Kimlik", + "colRank": "Sıra", + "colPermission": "İzin", + "colCreated": "Oluşturuldu", + "colActions": "Eylemler", + "form": { + "rankId": "Sıra Kimliği", + "rankIdPlaceholder": "Minimum rütbe gerekli", + "permission": "İzin anahtarı", + "permissionPlaceholder": "örneğin admin.articles.manage", + "save": "İzni kaydet", + "saving": "Kaydediliyor…", + "cancel": "İptal" + } + }, + "catalog": { + "title": "Katalog", + "subtitle": "Katalog sayfalarına ve öğelerine göz atın ve bunları yönetin", + "pages": "Sayfalar", + "items": "Öğeler", + "addPage": "Sayfa ekle", + "editPage": "Sayfayı düzenle", + "deletePage": "Sayfayı sil", + "addItem": "Öğe ekle", + "editItem": "Öğeyi düzenle", + "deleteItem": "Öğeyi sil", + "noPages": "Henüz katalog sayfası yok", + "noItems": "Bu sayfada öğe yok", + "confirmDeletePage": "\"{name}\" katalog sayfası silinsin mi?", + "confirmDeleteItem": "Bu öğe silinsin mi?", + "colId": "Kimlik", + "colName": "İsim", + "colIcon": "Simge", + "colOrder": "Sipariş", + "colItems": "Öğeler", + "colEnabled": "Etkin", + "colActions": "Eylemler", + "colItemId": "Öğe Kimliği", + "colItemName": "Öğe adı", + "colCostCredits": "Maliyet (kredi)", + "colCostPoints": "Maliyet (puan)", + "colLimited": "Sınırlı", + "pageForm": { + "name": "İsim", + "namePlaceholder": "Sayfa adı", + "icon": "Simge Kimliği", + "iconPlaceholder": "Sayısal simge kimliği", + "order": "Sipariş", + "enabled": "Etkin", + "parent": "Ana sayfa", + "parentNone": "Yok (kök)", + "save": "Sayfayı kaydet", + "saving": "Kaydediliyor…", + "cancel": "İptal" + }, + "itemForm": { + "itemId": "Öğe Kimliği", + "itemName": "Öğe adı", + "costCredits": "Kredilerdeki maliyet", + "costDuckets": "Ördeklerdeki maliyet", + "costDiamonds": "Elmas cinsinden maliyet", + "limitedStack": "Sınırlı yığın boyutu", + "limitedSold": "Sınırlı sayıda satıldı", + "save": "Öğeyi kaydet", + "saving": "Kaydediliyor…", + "cancel": "İptal" + }, + "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…" + }, + "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": "Organize imports", + "itemsBadge": "{count} items", + "loading": "Loading imported furniture…", + "empty": "No imported furniture found. Import furniture first.", + "loadError": "Could not load imports. Try again.", + "refresh": "Refresh", + "desc": "Imported furniture is grouped into suggested pages. Review each group, then create the pages you approve.", + "selectAll": "Select all", + "deselectAll": "Deselect all", + "mode": "Mode", + "modeCreate": "Create new pages", + "modeMove": "Move into an existing page", + "destination": "Destination page", + "destinationChosen": "selected", + "destinationSearchPlaceholder": "Search pages by name…", + "noDestResults": "No pages found", + "destinationHint": "All approved groups are moved into this page — no new page is created.", + "chooseDestination": "Pick a destination page first", + "move": "Move {count, plural, one {1 item} other {# items}}", + "name": "Name", + "icon": "Icon", + "layout": "Layout", + "resetSuggestion": "Suggested", + "suggestedLayout": "Suggested: {layout}", + "movedLabel": "{count} moved", + "newLabel": "{count} new", + "isNew": "new", + "price": "Price", + "free": "Free", + "setPrice": "Set a price", + "credits": "Credits", + "points": "Points", + "pointsType": "Type", + "newPriceHint": "Applies to new offers only; moved offers keep their current price.", + "parent": "Place pages under", + "root": "Catalog root", + "importedRoot": "Imported Furniture", + "cancel": "Cancel", + "create": "Create {count, plural, one {1 page} other {# pages}}", + "batchLayout": "Set layout for all", + "batchPrefix": "Add prefix to all titles", + "applyBatch": "Apply to all", + "searchGroups": "Filter import groups...", + "visualPreview": "Preview", + "resetAll": "Reset overrides", + "onlyUnplaced": "Only show unplaced items", + "errorMaxItems": "Max 1000 items per run. Reduce selection.", + "errorMaxGroups": "Max {count} groups per run. Reduce selection.", + "errorNoName": "Every approved page needs a name", + "tipMove": "Tip: Pick a destination page below to move furniture.", + "tipCreate": "Tip: Pick this mode to create new pages.", + "limitHint": "Max 1000 items and 50 groups per run.", + "errorFailed": "Failed to organize imports", + "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", + "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", + "batchLabel": "Batch:", + "layoutFallbackDefault3x3": "3x3", + "itemsUnit": "items", + "impPrefix": "Imp ", + "isMoved": "moved" + } + }, + "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" + }, + "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" + } + }, + "shop": { + "title": "Mağaza", + "subtitle": "Paketleri ve siparişleri yönetin", + "packages": "Paketler", + "orders": "Siparişler", + "newPackage": "+ Yeni paket", + "edit": "Düzenle", + "delete": "Sil", + "viewOrder": "Görüntüle", + "noPackages": "Henüz mağaza paketi yok", + "noOrders": "Henüz sipariş yok", + "confirmDelete": "Bu paket silinsin mi?", + "colId": "Kimlik", + "colName": "İsim", + "colPrice": "Fiyat", + "colCurrency": "Para birimi", + "colType": "Tür", + "colSold": "Satıldı", + "colEnabled": "Etkin", + "colActions": "Eylemler", + "colOrderId": "Sipariş Kimliği", + "colCustomer": "Müşteri", + "colPackage": "Paket", + "colAmount": "Tutar", + "colStatus": "Durum", + "colDate": "Tarih", + "statusPending": "Beklemede", + "statusCompleted": "Tamamlandı", + "statusRefunded": "Geri ödeme yapıldı", + "form": { + "name": "İsim", + "namePlaceholder": "Paket adı", + "description": "Açıklama", + "descriptionPlaceholder": "Paket açıklaması", + "price": "Fiyat", + "currency": "Para birimi", + "currencyPlaceholder": "EUR, USD, GBP…", + "type": "Tür", + "typeCredits": "Kredi", + "typeDuckets": "Ördekler", + "typeDiamonds": "Elmaslar", + "typeBadge": "Rozet", + "typeFurni": "Mobilya", + "typeRank": "Sıra", + "amount": "Tutar", + "badgeCode": "Rozet kodu", + "badgeCodePlaceholder": "örneğin VIP001", + "rankId": "Sıra Kimliği", + "furniItems": "Mobilya ürünleri", + "enabled": "Etkin", + "save": "Paketi kaydet", + "saving": "Kaydediliyor…", + "cancel": "İptal", + "infoPlaceholder": "Describe the package contents", + "iconPlaceholder": "Icon URL", + "colorPlaceholder": "For example: #3366cc", + "costsPlaceholder": "Price", + "creditsPlaceholder": "Number of credits", + "ducketsPlaceholder": "Number of duckets", + "diamondsPlaceholder": "Number of diamonds", + "giveRankPlaceholder": "Rank ID (0 for none)", + "badgesPlaceholder": "Badge codes separated by semicolons", + "positionPlaceholder": "Display order", + "create": "Create package", + "deletePackage": "Delete package" + }, + "recentOrders": "Recent orders", + "paidOrders": "Paid orders", + "ordersHint": "Latest PayPal transactions", + "colCredits": "Credits", + "colDuckets": "Duckets", + "colDiamonds": "Diamonds", + "colRank": "Rank", + "colPosition": "Position", + "colTransaction": "Transaction", + "colUser": "User", + "colDescription": "Description", + "pageOf": "Page {page} of {lastPage}", + "packagesTotal": "{count} packages", + "newPackageTitle": "New shop package", + "backToShop": "Back to shop", + "editPackageTitle": "Edit shop package" + }, + "transactions": { + "title": "İşlemler", + "subtitle": "PayPal ödeme günlüğü", + "noTransactions": "Henüz işlem yok", + "colId": "Kimlik", + "colUser": "Kullanıcı", + "colAmount": "Tutar", + "colCurrency": "Para birimi", + "colPackage": "Paket", + "colStatus": "Durum", + "colDate": "Tarih", + "colActions": "Eylemler", + "statusCompleted": "Tamamlandı", + "statusPending": "Beklemede", + "statusFailed": "Başarısız", + "statusRefunded": "Geri ödeme yapıldı", + "detail": { + "title": "İşlem #{id}", + "paypalId": "PayPal Kimliği", + "payerEmail": "Ödeme yapan kişinin e-postası", + "grossAmount": "Brüt tutar", + "fee": "Ücret", + "netAmount": "Net tutar" + }, + "totalTransactions": "Total transactions", + "pagePaid": "Paid (this page)", + "pageFailed": "Failed (this page)", + "searchPlaceholder": "Search by user, transaction ID or package…", + "presetPaid": "Paid", + "presetFailed": "Failed", + "colPayer": "Payer", + "colTransaction": "Transaction ID" + }, + "vouchers": { + "title": "Alışveriş Kuponları", + "subtitle": "Kullanılabilir kupon kodlarını yönetin", + "newVoucher": "+ Yeni kupon", + "edit": "Düzenle", + "delete": "Sil", + "noVouchers": "Henüz kupon yok", + "confirmDelete": "\"{code}\" kuponu silinsin mi?", + "colId": "Kimlik", + "colCode": "Kod", + "colValue": "Değer", + "colType": "Tür", + "colUses": "Kullanımlar / Maksimum", + "colExpires": "Süresi doluyor", + "colCreated": "Oluşturuldu", + "colActions": "Eylemler", + "form": { + "code": "Kod", + "codePlaceholder": "örneğin YAZ2025", + "value": "Değer", + "type": "Tür", + "typeCredits": "Kredi", + "typeDuckets": "Ördekler", + "typeDiamonds": "Elmaslar", + "typeBadge": "Rozet", + "typeFurni": "Mobilya", + "typeRank": "Sıra", + "badgeCode": "Rozet kodu", + "badgeCodePlaceholder": "örneğin VIP001", + "rankId": "Sıra Kimliği", + "maxUses": "Maksimum kullanım", + "maxUsesPlaceholder": "0 = sınırsız", + "expiresAt": "Süresi doluyor", + "enabled": "Etkin", + "save": "Kuponu kaydet", + "saving": "Kaydediliyor…", + "cancel": "İptal", + "amount": "Credits amount", + "amountPlaceholder": "e.g. 100", + "create": "Create voucher" + }, + "vouchers": "Vouchers", + "active": "Active", + "usedUp": "Used up", + "expired": "Expired", + "confirmDeleteTitle": "Delete voucher", + "created": "Voucher created", + "deleted": "Voucher deleted", + "createError": "Could not create voucher", + "deleteError": "Could not delete voucher", + "statusActive": "Active", + "statusUsedUp": "Used up", + "statusExpired": "Expired", + "colAmount": "Amount", + "colStatus": "Status", + "updated": "Voucher updated", + "updateError": "Could not update voucher" + }, + "subscriptions": { + "title": "Abonelikler", + "subtitle": "Aktif yinelenen abonelikler", + "noSubscriptions": "Aktif abonelik yok", + "cancel": "İptal", + "confirmCancel": "{username} aboneliği iptal edilsin mi?", + "colId": "Kimlik", + "colUser": "Kullanıcı", + "colPackage": "Paket", + "colAmount": "Tutar", + "colInterval": "Aralık", + "colStarted": "Başlatıldı", + "colNextBilling": "Sonraki faturalandırma", + "colStatus": "Durum", + "colActions": "Eylemler", + "statusActive": "Aktif", + "statusCancelled": "İptal edildi", + "statusExpired": "Süresi dolmuş", + "activeSubs": "Active subscriptions", + "types": "Subscription types", + "expiringSoon": "Expiring soon", + "activeSubscriptions": "Active subscriptions", + "colSubId": "Subscription ID", + "colUserId": "User ID", + "colType": "Type", + "colExpires": "Expires" + }, + "rareValues": { + "title": "Nadir Değerler", + "subtitle": "Nadir değer kategorilerini ve ürün fiyatlarını yönetin", + "categories": "Kategoriler", + "items": "Öğeler", + "addCategory": "Kategori ekle", + "editCategory": "Kategoriyi düzenle", + "deleteCategory": "Kategoriyi sil", + "noCategories": "Henüz nadir değer kategorisi yok", + "confirmDeleteCategory": "\"{name}\" kategorisi ve tüm öğeleri silinsin mi?", + "colId": "Kimlik", + "colName": "İsim", + "colItems": "Öğeler", + "colUpdated": "Güncellendi", + "colActions": "Eylemler", + "colItemName": "Öğe adı", + "colCredits": "Kredi", + "colPoints": "Puanlar", + "colPointType": "Nokta türü", + "categoryForm": { + "name": "İsim", + "namePlaceholder": "Kategori adı", + "save": "Kategoriyi kaydet", + "saving": "Kaydediliyor…", + "cancel": "İptal" + }, + "itemForm": { + "itemName": "Öğe adı", + "itemNamePlaceholder": "örneğin Taht", + "credits": "Kredi değeri", + "points": "Puan değeri", + "pointType": "Nokta türü", + "pointTypeDuckets": "Ördekler", + "pointTypeDiamonds": "Elmaslar", + "save": "Öğeyi kaydet", + "saving": "Kaydediliyor…", + "cancel": "İptal", + "itemIdPlaceholder": "Item ID", + "iconPlaceholder": "Icon URL", + "creditsPlaceholder": "Credits", + "currencyValuePlaceholder": "Currency value", + "addValue": "Add value" + }, + "editValue": "Edit value", + "badgePlaceholder": "Category badge code", + "priorityPlaceholder": "Priority", + "addCategoryButton": "Add category", + "badgeLabel": "Badge: {badge}", + "priorityLabel": "Priority: {priority}", + "itemCount": "{count} items", + "colItemId": "Item ID", + "colCurrencyValue": "Currency value", + "colCurrency": "Currency", + "colIcon": "Icon", + "noValuesInCategory": "No values in this category yet." + }, + "badges": { + "title": "Rozetler", + "subtitle": "Rozet kataloğunu yükleyin, verin ve yönetin", + "upload": "Yükle", + "giveBadge": "Rozet ver", + "catalogue": "Katalog", + "uploadTitle": "Yeni bir rozet yükleyin", + "uploadSubtitle": "Rozet resim dosyası yükleyin", + "badgeCode": "Rozet kodu", + "badgeCodePlaceholder": "örneğin VIP001", + "badgeFile": "Rozet dosyası", + "badgeFileHint": "PNG veya GIF, önerilen 40x40", + "uploadButton": "Yükle", + "uploading": "Yükleniyor…", + "giveTitle": "Kullanıcıya rozet ver", + "giveSubtitle": "Belirli bir kullanıcıya rozet verme", + "username": "Kullanıcı adı", + "usernamePlaceholder": "Hedef kullanıcı adı", + "giveButton": "Rozet ver", + "giving": "Veriyorum…", + "catalogueTitle": "Rozet kataloğu", + "catalogueSubtitle": "Oteldeki tüm mevcut rozetler", + "noBadges": "Katalogda rozet yok", + "search": "Rozet ara", + "searchPlaceholder": "Kod veya ada göre arayın…", + "colCode": "Kod", + "colImage": "Resim", + "colName": "İsim", + "colDescription": "Açıklama", + "colActions": "Eylemler", + "uploadedMessage": "Badge {code} uploaded.", + "errorMessage": "Upload failed: {error}", + "userIdPlaceholder": "User ID" + }, + "achievements": { + "title": "Başarılar", + "subtitle": "Oyun içi başarıların salt okunur listesi", + "noAchievements": "Hiçbir başarı yapılandırılmadı", + "colId": "Kimlik", + "colName": "İsim", + "colCategory": "Kategori", + "colLevels": "Seviyeler", + "colReward": "Ödül", + "colProgress": "İlerleme", + "levelLabel": "Seviye {level}", + "rewardCredits": "{count} kredi", + "rewardPoints": "{count} {points}", + "achievementRows": "Achievement levels", + "distinctAchievements": "Distinct achievements", + "categories": "Categories", + "colLevel": "Level", + "colRewardType": "Reward type", + "colRewardAmount": "Reward amount", + "colPoints": "Points" + }, + "calendar": { + "title": "Takvim kampanyaları", + "subtitle": "Takvim kampanyalarının ve etkinliklerinin salt okunur listesi", + "noCampaigns": "Henüz takvim kampanyası yok", + "colId": "Kimlik", + "colName": "İsim", + "colStart": "Başlat", + "colEnd": "Bitiş", + "colType": "Tür", + "colReward": "Ödül", + "colActions": "Eylemler", + "detail": { + "title": "Kampanya: {name}", + "subtitle": "Takvim etkinliği ayrıntıları", + "days": "Günler", + "dayLabel": "Gün {day}", + "reward": "Ödül", + "noDays": "Bu kampanya için yapılandırılmış gün yok", + "campaignMeta": "#{id} · {days} days · starts {date}", + "disabled": "Disabled", + "enabled": "Enabled", + "locksExpired": "Expired days are locked", + "rewards": "Rewards", + "noRewards": "No rewards configured.", + "colId": "ID", + "colProduct": "Product", + "colItem": "Item", + "colCredits": "Credits", + "colPixels": "Duckets", + "colPoints": "Points", + "colBadge": "Badge", + "colSubscription": "Subscription", + "typeLabel": "Type {type}", + "rewardCount": "{count} rewards" + }, + "campaigns": "Campaigns", + "enabled": "Enabled campaigns", + "totalRewards": "Total rewards", + "statusEnabled": "Enabled", + "statusDisabled": "Disabled", + "campaignMeta": "#{id} · {days} days · {rewards} rewards", + "startsAt": "Starts: {date}", + "locksExpired": "Expired days are locked" + }, + "radio": { + "title": "Radyo Moderasyon", + "subtitle": "En son sesler, DJ uygulamaları ve canlı yayın programları (her birinden en yeni 25 adet).", + "moderation": "Moderasyon", + "shouts": "Bağırışlar", + "applications": "Uygulamalar", + "schedules": "Programlar", + "settings": "Ayarlar", + "embed": "Göm", + "ranks": "Rütbeler", + "history": "Tarih", + "apiKeys": "API Anahtarları", + "points": "Puanlar", + "autoDj": "AutoDJ", + "monitoring": { + "title": "Radyo İzleme", + "subtitle": "Yapılandırılmış radyo uç noktalarının salt okunur canlı araştırması (radio_now_playing_api_url, Radio_listeners_api_url). Her istek bir {timeout} zaman aşımı süresiyle başarısız olur; hiçbir veri yazılmaz. URL'leri Ayarlar altında yapılandırın.", + "stream": "Akış", + "online": "Çevrimiçi", + "offline": "Çevrimdışı", + "notConfigured": "Yapılandırılmadı", + "nowPlaying": "Şimdi oynatılıyor", + "nowPlayingApi": "Şu anda oynatılan API", + "listenersApi": "Dinleyiciler API'sı", + "listeners": "Dinleyiciler", + "currentSong": "Mevcut şarkı", + "bitrate": "Bit hızı", + "status": "Durum", + "noNowPlayingHint": "şu anda oynatılan API seti yok", + "noListenersHint": "dinleyici API seti yok", + "endpointDiagnostics": "Uç nokta teşhisi", + "diagnosticsLegend": "OK: erişilebilir · WARN: yapılandırılmamış · ERROR: istek başarısız veya zaman aşımına uğradı.", + "streamUrl": "Akış URL'si", + "unreachable": "ulaşılamaz", + "refresh": "Yenile" + }, + "user": "Kullanıcı", + "message": "Mesaj", + "posted": "Gönderildi", + "realName": "Gerçek Ad", + "age": "Yaş", + "style": "Stil", + "applied": "Uygulandı", + "day": "Gün", + "start": "Başlat", + "end": "Bitiş", + "show": "Göster", + "status": "Durum", + "active": "aktif", + "inactive": "aktif değil", + "hidden": "gizli", + "activeSchedules": "Aktif programlar", + "noShouts": "Moderasyona bağırmak yok", + "noApplications": "Hiçbir başvuru gönderilmedi.", + "noSchedules": "Yapılandırılmış program yok.", + "deleteShout": "Sil", + "confirmDeleteShout": "Bu bağırış silinsin mi?", + "pendingApplications": "Bekleyen başvurular", + "settingsForm": { + "title": "Radyo Ayarları", + "subtitle": "Düzenlemeler website_settings'e (radio_* tuşları) yazar ve çalışma zamanı ayarları önbelleğini bozar. Boolean'lar 0 / 1'i kullanır.", + "enabled": "Etkin", + "disabled": "Devre dışı", + "totalKeys": "Toplam anahtarlar", + "configured": "Yapılandırılmış", + "curatedHint": "değeri olan seçilmiş anahtarlar", + "customKeys": "Özel anahtarlar", + "saveAll": "Tümünü kaydet", + "singleKey": "Tek bir anahtarın eklenmesi/üzerine yazılması", + "keyPlaceholder": "radyo_özel_anahtarı", + "valuePlaceholder": "değer", + "commentPlaceholder": "yorum (isteğe bağlı)", + "saveSingle": "Kaydet", + "otherSettings": "Diğer radyo ayarları", + "dbError": "Ayarlar yüklenemedi (veritabanı mevcut değil). Varsayılanlar kaydetme sırasında oluşturulacaktır." + }, + "embedPage": { + "title": "Radyo Yerleştirme", + "subtitle": "Canlı yayın için kopyalamaya hazır yerleştirme kodu. Salt okunur — burada hiçbir şey veritabanına yazmaz. Akış URL'sini Radyo Ayarlarında (radio_stream_url) yapılandırın.", + "streamUrl": "Akış URL'si", + "configured": "Yapılandırılmış", + "missing": "Eksik", + "radioName": "Radyo adı", + "nowPlayingApi": "Şu anda oynatılan API", + "set": "Ayarla", + "notSet": "Ayarlanmadı", + "noStreamUrl": "Hiçbir akış URL'si yapılandırılmadı", + "noStreamUrlText": "Radio_stream_url kümesi yok, bu nedenle henüz eklenecek bir şey yok.", + "goToSettings": "Radyo Ayarlarına Git", + "livePreview": "Canlı önizleme", + "livePreviewText": "Bu, ziyaretçilerin göreceği şekliyle çıplak audio oynatıcısıdır. Akışın erişilebilir olduğunu onaylamak için oynat tuşuna basın.", + "source": "Kaynak", + "audioSnippet": "Ses oynatıcı snippet'i", + "audioSnippetDesc": "Açılan HTML5 ses oynatıcısı doğrudan akışa işaret ediyordu. Düz HTML'ye izin verilen her yerde çalışır.", + "iframeSnippet": "Iframe sarmalayıcı snippet'i", + "iframeSnippetDesc": "Sitenin kendi radyo oynatıcı sayfasını bir iframe'e yerleştirir; stilinizi ve şu anda oynatılan bilgilerinizi korur. Genişliği/yüksekliği zevkinize göre ayarlayın.", + "audioUnsupported": "Tarayıcınız ses öğesini desteklemiyor." + }, + "banners": { + "title": "Afişler", + "heading": "Radyo Bannerları", + "description": "Radyo sayfasında gösterilen, sıralama düzenine göre sıralanmış promosyon afişleri.", + "addBanner": "Banner ekle", + "createBanner": "Banner oluştur", + "deleteBanner": "Banner'ı sil", + "noBanners": "Henüz banner yok; yukarıya bir tane ekleyin.", + "existing": "Mevcut banner'lar ({count})", + "save": "Kaydet", + "delete": "Sil", + "byUser": "{id} kullanıcısına göre", + "active": "aktif", + "hidden": "gizli", + "bannerAlt": "Radyo afişi", + "statusActive": "Aktif", + "statusHidden": "Gizli", + "dbError": "Banner'lar yüklenemedi (veritabanı mevcut değil).", + "form": { + "imagePath": "Resim yolu / URL'si", + "imagePathPlaceholder": "/storage/radio/banner.png", + "title": "Başlık", + "description": "Açıklama", + "sortOrder": "Sıralama düzeni", + "active": "Aktif" + } + }, + "ranksForm": { + "title": "Radyo Sıralamaları", + "subtitle": "Radyo uygulamalarında DJ/personel atanabilir.", + "dbError": "Dereceler yüklenemedi (veritabanı mevcut değil).", + "active": "Aktif", + "addRank": "Sıralama ekle", + "name": "İsim", + "badgeCode": "Rozet kodu", + "description": "Açıklama", + "createRank": "Sıralama oluştur", + "existing": "Mevcut sıralamalar ({count})", + "noRanks": "Henüz sıralama yok; yukarıya bir tane ekleyin.", + "activeLabel": "aktif", + "inactiveLabel": "aktif değil", + "save": "Kaydet", + "deleteRank": "#{id} sırasını sil" + }, + "historyPage": { + "title": "Radyo Çalma Geçmişi", + "subtitle": "Geçmiş DJ şovları ve yayın saatleri (radio_history), en yenisi ilk sırada. Kimin, ne zaman ve kaç dinleyicinin yayında olduğunu gösteren salt okunur kayıt.", + "dbError": "Radyo geçmişi yüklenemedi (veritabanı yok).", + "showsLogged": "Günlüğe kaydedilenleri gösterir", + "onAirNow": "Şu anda yayında", + "uniqueDjs": "Benzersiz DJ'ler", + "peakListeners": "En yüksek dinleyiciler", + "empty": "Henüz kayıtlı radyo geçmişi yok.", + "showLog": "Günlüğü göster ({count})", + "colDj": "DJ", + "colShow": "Göster", + "colStarted": "Başlatıldı", + "colEnded": "Sona erdi", + "colAirtime": "Yayın Süresi", + "colListeners": "Dinleyiciler", + "colNotes": "Notlar", + "onAir": "yayında" + }, + "apiKeysForm": { + "title": "Radyo API Anahtarları", + "subtitle": "Harici radyo entegrasyonları için API anahtarları (radio_api_keys). Anahtarlar sunucu tarafında oluşturulur ve maskelenmiş olarak gösterilir; ilk verildiğinde tam değeri veritabanından kopyalayın.", + "dbError": "API anahtarları yüklenemedi (veritabanı kullanılamıyor).", + "totalKeys": "Toplam anahtarlar", + "active": "Aktif", + "inactive": "Etkin değil", + "generateKey": "Anahtar oluştur", + "generateHint": "Gizli anahtar, kriptografik rastgelelikle otomatik olarak oluşturulur; onu girmezsiniz.", + "name": "İsim", + "namePlaceholder": "AzureCast köprüsü", + "rateLimit": "Hız sınırı (istek/dak)", + "allowedIps": "İzin verilen IP'ler (isteğe bağlı)", + "allowedIpsPlaceholder": "virgülle ayrılmış, boş = herhangi biri", + "generate": "Anahtar oluştur", + "existingKeys": "Mevcut anahtarlar ({count})", + "noKeys": "Henüz API anahtarı yok; yukarıda bir tane oluşturun.", + "colName": "İsim", + "colKey": "Anahtar", + "colAllowedIps": "İzin verilen IP'ler", + "colRateLimit": "Oran sınırı", + "colLastUsed": "Son kullanılan", + "colExpires": "Süresi doluyor", + "colStatus": "Durum", + "colActions": "Eylemler", + "maskedHint": "Yalnızca ilk 8 karakter gösteriliyor", + "any": "herhangi biri", + "activeLabel": "aktif", + "inactiveLabel": "aktif değil", + "deactivate": "Devre dışı bırak", + "activate": "Etkinleştir", + "delete": "Sil" + }, + "pointsForm": { + "title": "Radyo Dinleyici Noktaları", + "subtitle": "Dinleyicileri radyoda geçirdikleri süre karşılığında parayla ödüllendirin. Düzenlemeler website_settings'e (radio_points_* tuşları) yazar ve çalışma zamanı ayarları önbelleğini bozar. Boolean'lar 0 / 1'i kullanır.", + "saved": "Kaydedildi", + "points": "Puanlar", + "enabled": "Etkin", + "disabled": "Devre dışı", + "perMinute": "Dakikada", + "paidIn": "{currency} cinsinden ödendi", + "maxPerDay": "Maksimum / gün", + "unlimited": "Sınırsız", + "minListeners": "Minimum dinleyici", + "settings": "Ayarlar", + "pointsEnabled": "Puanlar etkinleştirildi", + "pointsEnabledHint": "Dinleyici puanlarını ödüllendirmek için ana anahtar.", + "currency": "Para birimi", + "currencyHint": "Puanların hangi cüzdana ödeneceği.", + "pointsPerMinute": "Dakika başına puan", + "pointsPerMinuteHint": "Dinlemenin her tam dakikası için verilen miktar.", + "maxPerDayHint": "Kullanıcı başına günlük sınır. Sınırsız için 0'ı kullanın.", + "minListenersHint": "Puanlar yalnızca en az bu kadar kişi programa katıldığında verilir.", + "save": "Puan ayarlarını kaydet" + }, + "autoDjForm": { + "title": "Radio AutoDJ", + "subtitle": "Geri dönüş çalma listesi (radio_auto_dj_playlist) hiçbir canlı DJ akışı olmadığında radyo döner. Sıralama düzenine ve ardından başlığa göre sıralanır.", + "dbError": "AutoDJ çalma listesi yüklenemedi (veritabanı mevcut değil).", + "tracks": "Parçalar", + "active": "Aktif", + "inactive": "Etkin değil", + "addTrack": "Parça ekle", + "titlePlaceholder": "Parça başlığı", + "artist": "Sanatçı", + "album": "Albüm", + "artworkUrl": "Çizim URL'si", + "artworkUrlPlaceholder": "https://…/cover.png", + "duration": "Süre (saniye)", + "durationPlaceholder": "örneğin 215", + "sortOrder": "Sıralama düzeni", + "playlist": "Oynatma listesi ({count})", + "noTracks": "Henüz AutoDJ parçası yok; yukarıya bir tane ekleyin.", + "colOrder": "Sipariş", + "colTitle": "Başlık", + "colArtist": "Sanatçı", + "colAlbum": "Albüm", + "colDuration": "Süre", + "colPlays": "Oynatmalar", + "colLastPlayed": "Son oynanma", + "colStatus": "Durum", + "colActions": "Eylemler", + "activeLabel": "aktif", + "inactiveLabel": "aktif değil", + "deactivate": "Devre dışı bırak", + "activate": "Etkinleştir", + "delete": "Sil", + "trackTitle": "Başlık" + }, + "moderationPage": { + "title": "DJ Moderasyon", + "subtitle": "Radyo bağırışlarını inceleyin ve kaldırın (en yeni 50).", + "recentShouts": "Son Duyurular ({count})" + } + }, + "commandocentrum": { + "title": "Komando merkezi", + "subtitle": "Teşhis, RCON kontrolleri ve kullanıcı yönetimi", + "diagnostics": "Teşhis", + "rcon": "RCON", + "userActions": "Kullanıcı işlemleri", + "diagnosticsTitle": "Emülatör teşhisi", + "memoryUsage": "Bellek kullanımı", + "uptime": "Çalışma süresi", + "onlineUsers": "Çevrimiçi kullanıcılar", + "roomsLoaded": "Yüklenen odalar", + "refresh": "Yenile", + "rconTitle": "RCON komutları", + "rconPlaceholder": "RCON komutunu girin…", + "rconSend": "Gönder", + "rconSending": "Gönderiliyor…", + "rconResponse": "Yanıt", + "userActionsTitle": "Kullanıcı işlemleri", + "username": "Kullanıcı adı", + "usernamePlaceholder": "Hedef kullanıcı adı", + "action": "Eylem", + "execute": "Yürüt", + "actions": { + "disconnect": "Bağlantıyı kes", + "alert": "Uyarı gönder", + "giveCredits": "Kredi ver", + "giveBadge": "Rozet ver", + "givePoints": "Puan ver", + "ban": "Yasak", + "kick": "Tekme" + }, + "messagePlaceholder": "Mesaj (uyarılar için)…", + "amountPlaceholder": "Tutar…", + "badgePlaceholder": "Rozet kodu…", + "commandCategories": "Command categories", + "groups": { + "hotel": "Hotel", + "players": "Players", + "rewards": "Currency and gifts", + "advanced": "Advanced" + }, + "executing": "Executing command…", + "chooseCommand": "Choose an operation. Values entered are preserved when switching categories.", + "refreshStatus": "Refresh status", + "checkedAt": "Checked at {time}", + "serviceAttention": "Some services need attention", + "servicesHealthy": "Core services are responding", + "cmsErrors": "CMS error center", + "readFailed": "Data could not be loaded", + "emulatorConfig": "Emulator connection", + "emailConfig": "Email delivery", + "configured": "Configured", + "playersOnline": "Players online", + "totalAccounts": "{count} total accounts", + "dbUnavailable": "Database unavailable", + "emulator": "Emulator", + "online": "Online", + "offline": "Offline", + "rconReachable": "Emulator connection available", + "rconNotResponding": "Emulator is not responding", + "database": "Database", + "connected": "Connected", + "down": "Unavailable", + "queriesResponding": "Database queries are responding", + "cannotReachDb": "Cannot connect to the database", + "emulatorErrors": "Emulator errors", + "last50Logged": "Up to 50 latest records", + "serverInfo": "Server information", + "node": "Node.js", + "platform": "Platform", + "appUptime": "Application uptime", + "heapUsed": "Heap memory used", + "rss": "Process memory (RSS)", + "hostUptime": "Host uptime", + "load1m": "Load average (1 min)", + "cpus": "Logical CPUs", + "systemDiagnostics": "System diagnostics", + "connectionHealthy": "Connection is healthy", + "unreachable": "Unreachable", + "emulatorRcon": "Emulator connection", + "respondingToPing": "Responding to health checks", + "noResponse": "No response", + "notConfigured": "Not configured", + "twoFaEncryptionKey": "2FA encryption key", + "appKeyConfigured": "Encryption key configured", + "appKeyMissing": "Encryption key missing", + "maintenanceMode": "Maintenance mode", + "siteIsInMaintenance": "The site is in maintenance mode", + "siteIsLive": "The site is open", + "recentStaffActivity": "Recent staff activity", + "noStaffActivity": "No recent staff activity", + "colWhen": "Date and time", + "colStaff": "Staff member", + "colAction": "Action", + "colDescription": "Description", + "recentEmulatorErrors": "Recent emulator errors", + "noEmulatorErrors": "No emulator errors recorded", + "colType": "Type", + "colVersion": "Version", + "colStacktrace": "Error details", + "truncated": "Further lines omitted", + "empty": "No details available", + "defaultGiftMessage": "A gift for you!", + "emulatorControls": "Emulator commands", + "updateCatalog": "Reload catalog", + "updateCatalogDesc": "Reload the catalog from the database.", + "updateWordFilter": "Reload word filter", + "updateWordFilterDesc": "Apply the latest word filter settings.", + "updateNavigator": "Reload navigator", + "updateNavigatorDesc": "Reload the room navigator data.", + "hotelAlert": "Hotel announcement", + "hotelAlertDesc": "Send a message to all online players.", + "messageToBroadcast": "Message for all players", + "sendAlert": "Send announcement", + "disconnectDesc": "Disconnect the selected player from the hotel.", + "userId": "User ID", + "usernameRequired": "Username (required)", + "alertDesc": "Send a private alert to a player.", + "alertMessage": "Alert message", + "forwardToRoom": "Move player to room", + "forwardDesc": "Send the selected player to a specific room.", + "roomId": "Room ID", + "forwardUser": "Move player", + "giveCredits": "Give credits", + "giveCreditsDesc": "Add credits to the selected player’s balance.", + "amount": "Amount", + "giveDuckets": "Give duckets", + "giveDucketsDesc": "Add duckets to the selected player’s balance.", + "giveDiamonds": "Give diamonds", + "giveDiamondsDesc": "Add diamonds to the selected player’s balance.", + "giveBadge": "Give badge", + "giveBadgeDesc": "Give a badge to the selected player.", + "badgeCode": "Badge code", + "setMotto": "Change motto", + "setMottoDesc": "Update the selected player’s motto.", + "newMotto": "New motto", + "setRank": "Change rank", + "setRankDesc": "Update the selected player’s rank.", + "rankPlaceholder": "Rank (1–10)", + "executeCommand": "Execute emulator command", + "executeCommandDesc": "Execute a command for the selected player.", + "commandPlaceholder": "Command", + "sendGift": "Send gift", + "sendGiftDesc": "Send a furniture item as a gift to the selected player.", + "furniId": "Furniture ID", + "giftMessage": "Gift message" + }, + "emulator": { + "title": "Emülatör Yapılandırması", + "subtitle": "Emülatör ayarlarını ve yerel ayar metinlerini görüntüleyin ve düzenleyin", + "settings": "Ayarlar", + "texts": "Metinler", + "search": "Ara", + "searchPlaceholder": "Arama anahtarları…", + "noSettings": "Hiçbir ayar bulunamadı", + "noTexts": "Metin bulunamadı", + "edit": "Düzenle", + "save": "Kaydet", + "saving": "Kaydediliyor…", + "cancel": "İptal", + "colKey": "Anahtar", + "colValue": "Değer", + "colType": "Tür", + "colActions": "Eylemler", + "editDialog": { + "title": "Düzenleme: {key}", + "value": "Değer", + "valuePlaceholder": "Değer girin…", + "save": "Değişiklikleri kaydet", + "cancel": "İptal" + }, + "settingsKeys": "Settings", + "textKeys": "Text entries", + "keysCount": "{count} keys", + "addOverwriteSetting": "Add or update a setting", + "key": "Key", + "value": "Value", + "showingFirst": "Showing the first {count}", + "addOverwriteText": "Add or update a text", + "truncatedHint": "Showing {shown} of {total} entries." + }, + "alerts": { + "title": "Uyarılar", + "subtitle": "Otel genelinde uyarılar gönderin ve son uyarıları görüntüleyin", + "sendAlert": "Otel uyarısı gönder", + "recentAlerts": "Son uyarılar ({count})", + "noRecentAlerts": "Yeni uyarı yok", + "form": { + "title": "Uyarı başlığı", + "titlePlaceholder": "örneğin 10 dakikada sunucu bakımı", + "message": "Uyarı mesajı", + "messagePlaceholder": "Uyarı mesajını yazın…", + "type": "Tür", + "typeHotel": "Otel genelinde uyarı", + "typeStaff": "Yalnızca personel", + "urgent": "Acil", + "send": "Uyarı gönder", + "sending": "Gönderiliyor…", + "description": "Broadcasts via RCON hotelalert to online users." + }, + "colId": "Kimlik", + "colTitle": "Başlık", + "colSentBy": "Gönderen", + "colType": "Tür", + "colDate": "Tarih", + "colActions": "Eylemler", + "noAlerts": "No recent alerts", + "alertsShown": "Shown", + "critical": "Critical", + "warnings": "Warnings", + "unread": "Unread", + "markAllRead": "Mark all read", + "colWhen": "When", + "colSeverity": "Severity", + "colMessage": "Message" + }, + "logs": { + "title": "Personel Faaliyetleri", + "subtitle": "Yönetici panelindeki personel eylemlerinin denetim takibi", + "noLogs": "Henüz personel etkinliği kaydedilmedi", + "colId": "Kimlik", + "colUser": "Kullanıcı", + "colAction": "Eylem", + "colTarget": "Hedef", + "colDescription": "Açıklama", + "colIp": "IP", + "colTimestamp": "Zaman damgası", + "filterByUser": "Kullanıcıya göre filtrele…", + "filterByAction": "Eyleme göre filtrele…", + "clearFilters": "Filtreleri temizle", + "noResults": "No matching activities", + "colStaff": "Staff", + "colWhen": "When", + "searchPlaceholder": "Search action, description or IP…", + "totalActivities": "Total activities", + "onThisPage": "On this page", + "recent": "Last minute", + "authorizationErrors": "Authorization errors", + "authorizationOnly": "Auth errors only", + "allActivities": "All activities", + "staffId": "Staff ID", + "actionType": "Action type", + "filter": "Filter", + "activities": "{count} activities", + "staffWithId": "#{id} {name}", + "userPrefix": "user", + "pagination": "Page {page} of {pages} · {total} total", + "next": "Next", + "prev": "Previous", + "unknownUser": "unknown", + "emptyValue": "-", + "colTime": "Time", + "audit": { + "colTargetId": "Target ID", + "colDetails": "Details", + "colDate": "Date", + "searchPlaceholder": "Search by action or target…", + "changesCount": "{count} changes", + "notAvailable": "N/A", + "filtersTitle": "Filter audit records", + "filterActor": "Actor (exact username or ID)", + "filterAction": "Exact action", + "filterFrom": "From date (UTC)", + "filterTo": "Through date (UTC)", + "filtersHint": "Dates include the full day in UTC. Actions and usernames must match exactly. Records are shown newest first.", + "applyFilters": "Apply filters", + "resetFilters": "Reset filters", + "invalidDetails": "These legacy details cannot be displayed.", + "beforeValue": "Before", + "afterValue": "After", + "exportHint": "CSV exports the current filtered page, up to 100 records.", + "operation": "Operation" + }, + "chat": { + "colMessage": "Message", + "colRoomId": "Room ID", + "searchPlaceholder": "Search by username or message…" + }, + "commands": { + "colCommand": "Command", + "colParams": "Params", + "searchPlaceholder": "Search by username, command, or params…" + }, + "trades": { + "colUserOne": "User one", + "colUserTwo": "User two", + "colStatus": "Status", + "statusUnknown": "unknown", + "searchPlaceholder": "Search by username…" + }, + "history": { + "preview": "Preview restore", + "title": "Restore a recorded edit", + "description": "Compare current values with the previous values before confirming. Only category settings, offer prices or news content are restored. Deleted records and category hierarchy cannot be restored here.", + "loading": "Loading…", + "unavailable": "This revision is unavailable or you do not have permission to restore it.", + "conflict": "This record changed after the selected edit. Refresh and review its latest history before restoring.", + "failed": "The restore could not be completed. Please reload and try again.", + "field": "Field", + "current": "Current value", + "restore": "Value to restore", + "confirm": "Confirm restore", + "restoring": "Restoring…", + "fields": { + "caption": "Category name", + "captionSave": "Internal category name", + "pageLayout": "Category layout", + "enabled": "Enabled", + "visible": "Visible", + "clubOnly": "Club members only", + "vipOnly": "VIP members only", + "minRank": "Minimum rank", + "iconImage": "Category icon", + "iconColor": "Icon colour", + "pageHeadline": "Header image", + "pageTeaser": "Preview image", + "pageSpecial": "Special image", + "pageText1": "Primary text", + "pageText2": "Secondary text", + "pageTextDetails": "Details text", + "pageTextTeaser": "Preview text", + "includes": "Included categories", + "costCredits": "Credit price", + "costPoints": "Points price", + "pointsType": "Points currency", + "title": "News title", + "slug": "News address", + "image": "News image", + "shortStory": "Summary", + "fullStory": "Article content", + "status": "Publication status", + "publishAt": "Scheduled publication", + "publishedAt": "Publication date", + "pageId": "Category" + } + } + }, + "wordfilter": { + "title": "Kelime Filtresi", + "subtitle": "Otelde filtrelenen kelimeleri ve cümleleri yönetin", + "addWord": "Kelime ekle", + "addWords": "Kelime ekle", + "noWords": "Henüz filtrelenmiş kelime yok", + "confirmDelete": "\"{word}\" filtreden kaldırılsın mı?", + "colId": "Kimlik", + "colWord": "Kelime", + "colAddedBy": "Tarafından eklendi", + "colCreated": "Oluşturuldu", + "colActions": "Eylemler", + "form": { + "word": "Kelime", + "wordPlaceholder": "örneğin kötü söz", + "addMore": "Birden fazla kelime ekleyin (her satıra bir tane)", + "save": "Filtreye ekle", + "saving": "Kaydediliyor…", + "cancel": "İptal" + }, + "filteredWords": "Filtered words", + "words": "Words", + "delete": "Delete", + "confirmDeleteTitle": "Remove word", + "added": "Word added to filter", + "deleted": "Word removed from filter", + "addError": "Could not add word (it may already exist)", + "deleteError": "Could not remove word" + }, + "maintenance": { + "title": "Bakım Modu", + "subtitle": "Otel genelinde bakımı etkinleştirme veya devre dışı bırakma", + "enabled": "Bakım modu etkin", + "disabled": "Bakım modu devre dışı", + "enable": "Bakımı etkinleştir", + "disable": "Bakımı devre dışı bırak", + "message": "Bakım mesajı", + "messagePlaceholder": "Kısa süre sonra geri döneceğiz!", + "staffAccess": "Bakım sırasında personelin erişimine izin ver", + "save": "Ayarları kaydet", + "saving": "Kaydediliyor…", + "confirmEnable": "Bakımın etkinleştirilmesi, personel dışındaki tüm kullanıcıların otele erişimini engelleyecektir. Devam etmek?", + "confirmDisable": "Bakım modu devre dışı bırakılsın ve tüm kullanıcılar için erişim yeniden sağlansın mı?", + "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": "Kat Hizmetleri İzinleri", + "subtitle": "Hangi kademelerin hangi yönetici bölümlerine erişebileceğini yapılandırın", + "addPermission": "İzin ekle", + "editPermission": "İzni düzenle", + "deletePermission": "İzni sil", + "noPermissions": "Hiçbir temizlik izni yapılandırılmadı", + "confirmDelete": "Bu izin silinsin mi?", + "colId": "Kimlik", + "colRank": "Sıra", + "colSection": "Bölüm", + "colActions": "Eylemler", + "form": { + "rankId": "Sıra Kimliği", + "rankIdPlaceholder": "Asgari sıralama", + "section": "Bölüm anahtarı", + "sectionPlaceholder": "örneğin admin.kontrol paneli", + "save": "İzni kaydet", + "saving": "Kaydediliyor…", + "cancel": "İptal" + }, + "saved": "Saved!", + "deleted": "Deleted!", + "errorOccurred": "An error occurred", + "emptyInput": "Empty input", + "invalidJson": "Invalid JSON", + "imported": "Imported!", + "presetApplied": "Preset Uygulandı!", + "cleared": "All İzinler cleared!", + "invalidRank": "Invalid Sıra", + "testDone": "Test done: {count} İzinler found", + "testing": "Testing...", + "loading": "Loading...", + "prev": "Previous", + "next": "Next", + "confirmClearAll": "Sil ALL İzinler? This Eylem cannot be undone!", + "colGroup": "Group", + "colDepends": "Depends on", + "colPermission": "İzin", + "colDescription": "Açıklama", + "colMinRank": "Min. Sıra", + "permissionKey": "İzin anahtarı", + "minRank": "Min. Sıra", + "description": "Açıklama", + "permissions": "İzinler", + "permissionsCount": "{count} İzinler", + "permission": "İzin", + "highestMinRank": "Highest min. Sıra: {rank}", + "totalMinRank": "Total min. Sıra sum: {total}", + "groupCount": "{count} groups", + "rankCount": "{count} Rütbeler", + "missingDeps": "{count} Eksik dependencies", + "dependsOn": "depends on", + "notFound": "not found", + "missing": "(Eksik)", + "rank": "Sıra", + "count": "Count", + "searchPermission": "Ara İzinler…", + "search": "Ara", + "manage": "Manage", + "importSelection": "İthalat selection", + "noGroup": "Hayır group", + "allGroups": "All groups", + "perGroup": "İzinler per group", + "perRank": "İzinler per Sıra", + "rankOverviewHint": "All İzinler grouped by the Sıra they are assigned to.", + "tabOverview": "Genel Bakış", + "tabManage": "Manage", + "tabImport": "İthalat / Export", + "tabRanks": "Sıra Genel Bakış", + "tabPresets": "Ön ayarlar", + "tabTest": "Test", + "tabAudit": "Audit log", + "importPermissions": "İthalat İzinler", + "importHint": "Paste a JSON array of İzin objects. Format: ['{' \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" '}']", + "importPlaceholder": "Paste JSON here…", + "import": "İthalat", + "exportTitle": "Export İzinler", + "exportHint": "Export all İzinler as JSON for backup or batch editing.", + "export": "Export JSON", + "copy": "Copy", + "copied": "Copied!", + "presets": "İzin Ön ayarlar", + "presetsHint": "Uygula a predefined Ayarla of İzinler for common staff roles.", + "presetModerator": "Moderator", + "presetModeratorDesc": "Basic Moderasyon tools: Kullanıcı lookup, Yasaklar, CFH handling, chat Günlükler.", + "presetAdmin": "Administrator", + "presetAdminDesc": "Full admin access: Kullanıcılar, Odalar, news, Ayarlar, Mağaza, events, Radyo & more.", + "presetSuperAdmin": "Super Admin", + "presetSuperAdminDesc": "Complete access to every feature including İzin management and asset İthalat.", + "applyPreset": "Uygula preset", + "clearAll": "Clear all İzinler", + "testTitle": "Test Sıra access", + "testHint": "Enter a Sıra number to see which İzinler would be granted.", + "test": "Test", + "auditTitle": "İzin audit log", + "auditHint": "All changes to Temizlik İzinler are logged.", + "auditLogsAt": "Audit Günlükler are available on the Audit log page.", + "viewAuditLogs": "Görüntüle audit Günlükler", + "importedWithErrors": "Imported {count} İzinler with {errors} errors", + "confirmClearAllDesc": "This will Kaldır every İzin entry from the Veritabanı. Are you sure?", + "confirmDeletePermission": "Sil this İzin permanently?", + "confirmBulkDelete": "Sil {count} selected İzinler?", + "deleteSelected": "Sil {count} selected", + "cancel": "İptal", + "confirm": "Confirm", + "auditTime": "Time", + "auditUser": "Kullanıcı", + "auditAction": "Eylem", + "auditTarget": "Hedef", + "selectAllMatching": "Select all {count} matching", + "save": "Save", + "importTitle": "Import permissions", + "legacyBannerTitle": "Use Permissions to change who can do what", + "legacyBannerBody": "This archive does not control the site. Open Permissions to grant or revoke access for ranks.", + "legacyBannerCta": "Open Permissions", + "writesRetired": "Editing here is disabled on purpose. Change access only in Permissions.", + "tabCompare": "ACL compare", + "tabExportOnly": "Export archive", + "compareHint": "Compares legacy housekeeping min-rank rows to live ACL rank_* role grants (lowest rank that has the slug).", + "compareAligned": "{count} aligned", + "compareMissingAcl": "{count} missing in ACL", + "compareMismatch": "{count} rank mismatch", + "colAclPresent": "In ACL", + "colAclMinRank": "ACL min rank", + "colStatus": "Status", + "statusAligned": "Aligned", + "statusMissingAcl": "Missing in ACL", + "statusMismatch": "Rank differs", + "exportOnlyHint": "Writes are disabled. You can still export the legacy table for archival." + }, + "rooms": { + "title": "Odalar", + "subtitle": "Otel odalarını arayın ve yönetin", + "search": "Ara", + "searchPlaceholder": "Ada, sahibine veya kimliğe göre arayın…", + "searchResults": "{count, plural, one {# room} other {# rooms}} found for \"{query}\"", + "noResults": "Oda bulunamadı", + "colId": "Kimlik", + "colName": "İsim", + "colOwner": "Sahip", + "colUsers": "Kullanıcılar", + "colState": "Eyalet", + "colCategory": "Kategori", + "colCreated": "Oluşturuldu", + "colActions": "Eylemler", + "stateOpen": "Açık", + "stateClosed": "Kapalı", + "stateLocked": "Kilitli", + "stateInvisible": "Görünmez", + "detail": { + "title": "Oda: {name}", + "subtitle": "{owner}'a ait", + "overview": "Genel Bakış", + "actions": "Eylemler", + "description": "Açıklama", + "noDescription": "Açıklama yok", + "owner": "Sahip", + "users": "Çevrimiçi kullanıcılar", + "maxUsers": "Maksimum kullanıcı", + "category": "Kategori", + "state": "Eyalet", + "tags": "Etiketler", + "noTags": "Etiket yok", + "created": "Oluşturuldu", + "deleteRoom": "Odayı sil", + "confirmDelete": "\"{name}\" odası silinsin mi? Bu geri alınamaz.", + "enterRoom": "Odaya girin", + "changeOwner": "Sahibi değiştir", + "changeOwnerPlaceholder": "Yeni sahibin kullanıcı adı" + } + }, + "emailTemplates": { + "title": "E-posta Şablonları", + "subtitle": "İşlemsel e-posta şablonlarını yönetin", + "newTemplate": "+ Yeni şablon", + "edit": "Düzenle", + "delete": "Sil", + "noTemplates": "Henüz e-posta şablonu yok", + "confirmDelete": "\"{name}\" şablonu silinsin mi?", + "colId": "Kimlik", + "colName": "İsim", + "colSubject": "Konu", + "colKey": "Anahtar", + "colUpdated": "Güncellendi", + "colActions": "Eylemler", + "form": { + "name": "İsim", + "namePlaceholder": "örneğin Hoş geldiniz e-postası", + "key": "Anahtar", + "keyPlaceholder": "örneğin hoşgeldiniz_email", + "subject": "Konu", + "subjectPlaceholder": "E-posta konu satırı", + "body": "Gövde (HTML)", + "bodyPlaceholder": "

Sayın {username},

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

Шановний {username}!

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

Шановний {username}!

", + "variables": "Доступні змінні", + "variablesHint": "{username}, {email}, {hotel_name}", + "save": "Зберегти шаблон", + "saving": "Збереження…", + "cancel": "Скасувати", + "variablesPlaceholder": "Variables, separated by commas", + "active": "Active" + }, + "create": "Create template", + "save": "Save template", + "updated": "Updated: {date}" + }, + "theme": { + "title": "Тема", + "subtitle": "Налаштуйте зовнішній вигляд CMS", + "presets": "Предустановки", + "colours": "Кольори", + "css": "CSS", + "presetsTitle": "Попередні налаштування теми", + "presetsSubtitle": "Виберіть попередньо створену колірну схему", + "applyPreset": "Застосувати", + "presetApplied": "Попереднє налаштування застосовано: {preset}", + "customiseTitle": "Нестандартні кольори", + "primary": "Первинний", + "secondary": "Вторинний", + "accent": "Акцент", + "background": "Фон", + "surface": "Поверхня", + "text": "текст", + "saveColours": "Зберегти кольори", + "savingColours": "Збереження…", + "cssTitle": "Спеціальний CSS", + "cssSubtitle": "Додайте власний CSS, щоб замінити стилі теми", + "cssPlaceholder": "/* Ваш власний CSS тут */", + "saveCss": "Зберегти CSS", + "savingCss": "Збереження…", + "reset": "Відновити налаштування за замовчуванням", + "confirmReset": "Відновити значення теми за замовчуванням?", + "saved": "Theme settings saved.", + "typographyLayout": "Typography and layout", + "font": "Font", + "borderRadius": "Corner radius" + }, + "media": { + "title": "Медіатека", + "subtitle": "Завантажуйте медіафайли та керуйте ними", + "upload": "Завантажити", + "uploadTitle": "Завантажте файл", + "uploadSubtitle": "Перетягніть або клацніть, щоб завантажити", + "uploadButton": "Виберіть файл", + "uploading": "Завантаження…", + "noFiles": "Медіафайлів ще немає", + "delete": "Видалити", + "confirmDelete": "Видалити цей файл назавжди?", + "search": "Пошук", + "searchPlaceholder": "Пошук за назвою файлу…", + "colPreview": "Попередній перегляд", + "colName": "Ім'я", + "colSize": "Розмір", + "colType": "Тип", + "colUploaded": "Завантажено", + "colActions": "Дії", + "copyUrl": "Копіювати URL", + "urlCopied": "URL-адресу скопійовано в буфер обміну" + }, + "favicon": { + "title": "Favicon", + "subtitle": "Завантажте фавікон сайту та керуйте ним", + "current": "Поточний фавікон", + "uploadLabel": "Завантажити фавікон", + "uploadHint": "PNG, JPEG, GIF, WebP, ICO або SVG. Макс. 2 МБ.", + "upload": "Завантажити", + "uploading": "Завантаження…", + "delete": "видалити", + "deleting": "Видалення…", + "saved": "Favicon успішно збережено!", + "deleted": "Favicon успішно видалено!", + "error": "Щось пішло не так", + "confirmDelete": "Видалити значок сайту? На сайті більше не відображатиметься спеціальна піктограма сайту.", + "generator": { + "title": "Створити фавікон", + "text": "текст", + "bgColor": "Колір фону", + "textColor": "Колір тексту", + "rounded": "Заокруглені кути", + "save": "Зберегти як фавікон" + }, + "cancel": "Cancel" + }, + "settings": { + "title": "Налаштування CMS", + "subtitle": "Керуйте конфігурацією CMS ключ/значення", + "addSetting": "Додати налаштування", + "edit": "Редагувати", + "delete": "Видалити", + "noSettings": "Налаштувань не знайдено", + "confirmDelete": "Видалити налаштування \"{key}\"?", + "colKey": "ключ", + "colValue": "Значення", + "colUpdated": "Оновлено", + "colActions": "Дії", + "form": { + "key": "ключ", + "keyPlaceholder": "напр. hotel_name", + "value": "Значення", + "valuePlaceholder": "Значення налаштування", + "save": "Зберегти налаштування", + "saving": "Збереження…", + "cancel": "Скасувати" + }, + "keysInDatabase": "{count} keys in database", + "managedInForm": "{count} managed in form", + "documented": "{count} documented", + "saved": "Settings saved.", + "saveFailed": "Could not save settings.", + "saveSettings": "Save settings", + "viewOnly": "You can view settings but need edit permission to change them." + }, + "import": { + "title": "Import", + "subtitle": "Import assets from external sources into your hotel.", + "badges": "Badges", + "badgesDescription": "Import and manage badge assets from external sources.", + "furni": "Furni", + "furniDescription": "Import furniture definitions, SWF files, and icons.", + "clothing": "Clothing", + "clothingDescription": "Import clothing and wearables for avatars.", + "effects": "Effects", + "effectsDescription": "Import avatar effects and animations.", + "pets": "Pets", + "petsDescription": "Import pet data and icons.", + "clone": "Clone", + "cloneDescription": "Clone existing items from one source to another.", + "upload": "Upload .nitro", + "uploadDescription": "Upload .nitro bundles and icons directly without SWF conversion.", + "sync": "Auto Sync", + "syncDescription": "Automatically import missing furniture from all configured sources.", + "repairIcons": "Repair Icons", + "repairIconsDescription": "Download any missing icon files for furniture already in the database.", + "audit": "Catalog Audit", + "auditDescription": "Scan your catalog for missing entries, broken references, and items missing from clone sources." + }, + "translations": { + "title": "Translations", + "subtitle": "Translate your hotel into multiple languages.", + "tabs": { + "cms": "CMS", + "client": "Client (Nitro)", + "emulator": "Emulator" + }, + "emulator": { + "title": "Emulator", + "subtitle": "User-facing strings from emulator_settings (commands, wordfilter, pet/matchmaking messages).", + "infoBox": "Configuration settings (ports, timeouts, IDs) do not appear here — use the full settings link. Saved changes are synced to the emulator via RCON.", + "fullSettings": "Full settings" + }, + "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}." + } + }, + "tickets": { + "title": "Tickets", + "subtitle": "Support tickets from players", + "noTickets": "No active tickets", + "searchPlaceholder": "Search subject, user, category or ID…", + "presetActive": "Active", + "statusOpen": "Open", + "statusInProgress": "In progress", + "statusWaiting": "Waiting", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colPriority": "Priority", + "colAssigned": "Assigned", + "colDate": "Date", + "meta": "by {user} · {count} msg · {category}", + "queueHint": "This queue is the CMS support desk. Player help-center tickets live in the Help-center tickets tab.", + "queueOtherCta": "Open help-center tickets", + "queueCounts": "Open here: {here} · Help center: {other}", + "awaitingStaff": "Waiting for staff", + "assignedMine": "Assigned to me", + "unassigned": "Unassigned", + "assignedAny": "Assigned", + "lastReplyAge": "Since last response", + "ageMinutes": "{count} min ago", + "ageHours": "{count} h ago", + "ageDays": "{count} d ago" + }, + "cfh": { + "title": "Call for Help", + "subtitle": "In-game CFH / support tickets", + "noTickets": "No CFH tickets", + "searchPlaceholder": "Search issue, user or ID…", + "noDescription": "No description", + "roomMeta": "Room #{room} · {when}", + "stateOpen": "Open", + "statePicked": "Picked", + "stateClosed": "Closed", + "colId": "ID", + "colIssue": "Issue", + "colSender": "Sender", + "colReported": "Reported", + "colMod": "Mod", + "colStatus": "Status" + }, + "hubs": { + "newsMedia": "News & media", + "newsMediaSubtitle": "Articles, photos, banners, ads and media library", + "siteContent": "Site content", + "siteContentSubtitle": "Navigation, help center, boxes, tags and prefixes", + "engagement": "Engagement", + "engagementSubtitle": "Events, polls and support tickets", + "users": "Users", + "usersSubtitle": "Directory, online players, applications and teams", + "access": "Access & security", + "accessSubtitle": "Bans, IP, VPN, permissions and word filter", + "moderation": "Moderation", + "moderationSubtitle": "Reports, actions and moderation team", + "catalog": "Catalog & rares", + "catalogSubtitle": "Catalog, rares, badges, achievements and sounds", + "shop": "Shop & payments", + "shopSubtitle": "Shop, transactions, vouchers, subscriptions and calendar", + "radio": "Radio", + "radioSubtitle": "Stream, DJ tools, embed and monitoring", + "settings": "Settings", + "settingsSubtitle": "CMS config, theme, maintenance and related tools", + "tools": "Tools", + "toolsSubtitle": "RCON, rooms, import and translations", + "observability": "Observability", + "observabilitySubtitle": "Logs, analytics, DevOps and hotel alerts", + "tabs": { + "articles": "Articles", + "photos": "Photos", + "banners": "Banners", + "ads": "Ads", + "media": "Media", + "navigator": "Navigator", + "help": "Help", + "boxes": "Boxes", + "tags": "Tags", + "prefixes": "Prefixes", + "events": "Events", + "eventTypes": "Event types", + "polls": "Polls", + "tickets": "Tickets", + "templates": "Templates", + "directory": "Directory", + "multiAccounts": "Multi-accounts", + "online": "Online", + "applications": "Applications", + "teams": "Teams", + "bans": "Bans", + "ip": "IP", + "vpn": "VPN", + "permissions": "Permissions", + "wordFilter": "Word filter", + "overview": "Overview", + "actions": "Actions", + "cfh": "CFH", + "team": "Team", + "catalogTab": "Catalog", + "rares": "Rares", + "badges": "Badges", + "achievements": "Achievements", + "sounds": "Sounds", + "shopTab": "Shop", + "transactions": "Transactions", + "vouchers": "Vouchers", + "subscriptions": "Subscriptions", + "calendar": "Calendar", + "history": "History", + "moderationTab": "Moderation", + "monitoring": "Monitoring", + "settingsTab": "Settings", + "embed": "Embed", + "apiKeys": "API keys", + "points": "Points", + "ranks": "Ranks", + "autoDj": "Auto DJ", + "cms": "CMS", + "theme": "Theme", + "maintenance": "Maintenance", + "favicon": "Favicon", + "emulator": "Emulator", + "email": "Email", + "housekeeping": "Housekeeping", + "commando": "Commando", + "rooms": "Rooms", + "import": "Import", + "translations": "Translations", + "logs": "Logs", + "audit": "Audit", + "chat": "Chat", + "commands": "Commands", + "trades": "Trades", + "analytics": "Analytics", + "activity": "Activity", + "economy": "Economy", + "devops": "DevOps", + "errors": "Errors", + "alerts": "Alerts", + "toolsGroup": "Tools", + "helpTickets": "Help-center tickets", + "ticketInbox": "Inbox", + "importOverview": "Overview", + "importBadges": "Badges", + "importFurni": "Furni", + "importUpload": "Upload", + "importClothing": "Clothing", + "importEffects": "Effects", + "importPets": "Pets", + "importClone": "Clone", + "importSync": "Sync", + "importRepairIcons": "Repair icons", + "importAudit": "Audit", + "themeBuilder": "Theme Builder", + "studio": "Studio", + "cmsErrors": "CMS errors" + }, + "events": "Events", + "eventsSubtitle": "Hotel events and event types", + "tickets": "Support desk", + "ticketsSubtitle": "CMS tickets, help-center tickets, and reply templates", + "staffAccess": "Ranks & permissions", + "staffAccessSubtitle": "Staff ranks, ACL permissions and housekeeping access", + "analytics": "Analytics", + "analyticsSubtitle": "Hotel activity, retention and economy", + "devops": "DevOps", + "devopsSubtitle": "Service health and emulator errors", + "import": "Import", + "importSubtitle": "Furni, badges, clothing and asset tools" + }, + "events": { + "newEvent": "+ New event", + "createTitle": "Create event", + "createSubtitle": "Schedule a new hotel event", + "searchPlaceholder": "Search events…", + "colId": "ID", + "colTitle": "Title", + "colType": "Type", + "colStarts": "Starts", + "colStatus": "Status", + "colActions": "Actions", + "statusPublished": "Published", + "statusDraft": "Draft", + "statusCancelled": "Cancelled", + "statusCompleted": "Completed", + "statRegistrations": "Registrations", + "statPrizes": "Prizes", + "statWinners": "Winners", + "statTime": "Time", + "maxPlayers": "Max: {count}", + "timeUpcoming": "Upcoming", + "timePast": "Past", + "endsAt": "Ends: {date}", + "userFallback": "User #{id}", + "registrationsTitle": "Registrations ({count})", + "noRegistrations": "No registrations yet.", + "noPrizes": "No prizes configured yet.", + "noWinners": "No winners yet.", + "addPrize": "Add prize", + "addWinner": "Add winner", + "formEditTitle": "Edit event", + "formDetailsTitle": "Event details", + "formTitle": "Title", + "formEventType": "Event type", + "formSelectType": "Select type", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formMaxPlayers": "Max players", + "formUnlimited": "Unlimited", + "formRoomId": "Room ID", + "formOptional": "Optional", + "formImageUrl": "Image URL", + "formSaving": "Saving…", + "formUpdate": "Update event", + "formCreate": "Create event", + "toastUpdated": "Event updated!", + "toastCreated": "Event created!" + }, + "polls": { + "newPoll": "+ New poll", + "createTitle": "Create poll", + "createSubtitle": "Create a new community poll or survey", + "searchPlaceholder": "Search polls…", + "colId": "ID", + "colTitle": "Title", + "colStatus": "Status", + "colType": "Type", + "colCreated": "Created", + "colActions": "Actions", + "statusActive": "Active", + "statusDraft": "Draft", + "statusClosed": "Closed", + "typeMultiple": "Multiple choice", + "typeSingle": "Single choice", + "statVoters": "Total voters", + "statQuestions": "Questions", + "statVotes": "Total votes", + "questionsTitle": "Questions ({count})", + "addQuestion": "Add question", + "noQuestions": "No questions yet. Add your first question above.", + "resultsTitle": "Results", + "formEditTitle": "Edit poll", + "formDetailsTitle": "Poll details", + "formTitle": "Title", + "formDescription": "Description", + "formStartsAt": "Starts at", + "formEndsAt": "Ends at", + "formSelectStart": "Select start date", + "formSelectEnd": "Select end date", + "formShowResults": "Show results to voters", + "formAllowMultiple": "Allow multiple answers", + "formSaving": "Saving…", + "formUpdate": "Update poll", + "formCreate": "Create poll", + "toastUpdated": "Poll updated!", + "toastCreated": "Poll created!" + }, + "multiAccounts": { + "minAccounts": "Min accounts per cluster", + "resultLimit": "Result limit", + "refresh": "Refresh", + "noClusters": "No clusters found at the current thresholds." + }, + "devops": { + "noEmulatorErrors": "No emulator errors found", + "noRecentErrors": "No recent errors", + "cmsErrors": "CMS error center" + }, + "helpTickets": { + "title": "Help center tickets", + "subtitle": "Player tickets from /help/tickets", + "noTickets": "No open help center tickets", + "searchPlaceholder": "Search title, user or ID…", + "presetOpen": "Open", + "presetAll": "All", + "statusOpen": "Open", + "statusClosed": "Closed", + "colTicket": "Ticket", + "colStatus": "Status", + "colUser": "User", + "colCreated": "Created", + "colUpdated": "Updated", + "meta": "by {user} · {count} replies", + "backToList": "Back to list", + "threadTitle": "Conversation", + "staffBadge": "Staff", + "replyPlaceholder": "Reply as staff…", + "replySubmit": "Send reply", + "replyHint": "Ctrl+Enter to send.", + "closeSubmit": "Close ticket", + "reopenSubmit": "Reopen ticket", + "closedHint": "This ticket is closed.", + "actionsTitle": "Actions", + "requesterTitle": "Requester", + "detailsTitle": "Details", + "rankLabel": "Rank {rank}", + "messageCountLabel": "Messages", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed.", + "reopened": "Ticket reopened.", + "banLifted": "Ban lifted and ticket closed." + }, + "queueHint": "This queue is the public help center. CMS support desk tickets are in the Support desk tab.", + "queueOtherCta": "Open CMS support desk", + "queueCounts": "Open here: {here} · Support desk: {other}", + "liftBanSubmit": "Lift requester ban & close", + "requesterBanned": "Requester banned" + }, + "marketplace": { + "title": "Marketplace", + "subtitle": "Hotel marketplace listings", + "activeListings": "Active listings", + "soldListings": "Sold", + "filterActive": "Active", + "filterSold": "Sold", + "empty": "No marketplace listings to show.", + "loadError": "Could not load marketplace data (database unavailable).", + "cancel": "Cancel listing", + "colId": "ID", + "colItem": "Item ID", + "colSeller": "Seller", + "colPrice": "Price", + "colListed": "Listed", + "colSold": "Sold at", + "colActions": "Actions" + }, + "analytics": { + "loadError": "Some analytics queries failed. Numbers below may be incomplete — check the database connection and emulator tables.", + "totalUsers": "Total users", + "onlineNow": "{count} online now", + "weekRegistrations": "Week registrations", + "thisMonth": "{count} this month", + "activeRooms": "Active rooms", + "totalRooms": "{count} total rooms", + "weeklyActivity": "Weekly activity", + "tradesAndBans": "{trades} trades, {bans} bans", + "registrationsChartTitle": "Registrations (30 days)", + "registrationsChartDescription": "New user registrations over the last 30 days", + "chatActivity": "Chat activity", + "messagesLast7Days": "Messages in the last 7 days", + "trades": "Trades", + "tradesLast7Days": "Trades in the last 7 days", + "retention": "Retention", + "usersOnlineOverTotal": "Users online / total", + "activity": { + "chatMessages": "Chat messages", + "commands": "Commands", + "bans": "Bans", + "registrations": "Registrations", + "last7Days": "Last 7 days", + "dailyBreakdownTitle": "Daily breakdown (7 days)", + "colDay": "Day", + "colChats": "Chats", + "colCmds": "Cmds", + "colBans": "Bans", + "colRegs": "Regs", + "mostActiveUsersTitle": "Most active users (7 days)", + "noChatActivity": "No chat activity", + "msgCount": "{count} msgs", + "userFallback": "User #{id}" + }, + "economy": { + "creditsInCirculation": "Credits in circulation", + "creditsDescription": "Total credits across all users", + "pixelsInCirculation": "Pixels in circulation", + "pixelsDescription": "Total pixels across all users", + "pointsInCirculation": "Points in circulation", + "pointsDescription": "Total points across all users", + "weeklyTrades": "Weekly trades", + "marketplaceListings": "{count} marketplace listings", + "shopRevenueTitle": "Shop revenue (7d)", + "purchases": "Purchases", + "creditsSpent": "Credits spent", + "pointsSpent": "Points spent", + "marketplaceTitle": "Marketplace", + "activeListings": "Active listings", + "sold7d": "Sold (7d)", + "currencyDistributionTitle": "Currency distribution", + "credits": "Credits", + "pixels": "Pixels", + "points": "Points", + "catalogSpendingTitle": "Catalog spending", + "creditsTooltip": "{count} credits", + "pointsTooltip": "{count} points" + }, + "peakHours": { + "title": "Peak hours", + "description": "User activity by day & hour (last 7 days)", + "days": { + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat", + "sun": "Sun" + }, + "tooltip": "{day} {hour}:00 — {count} users", + "less": "Less", + "more": "More" + } + }, + "guilds": { + "title": "Guilds", + "subtitle": "Hotel groups and membership", + "totalGuilds": "Guilds", + "searchPlaceholder": "Search by name, description or ID…", + "search": "Search", + "empty": "No guilds found.", + "loadError": "Could not load guilds (database unavailable).", + "colId": "ID", + "colBadge": "Badge", + "colName": "Name", + "colOwner": "Owner", + "colMembers": "Members", + "colCreated": "Created", + "colThreads": "Forum threads", + "colRoom": "Room", + "colUser": "User", + "colLevel": "Level", + "colJoined": "Joined", + "members": "Members", + "noMembers": "No members.", + "back": "Back to guilds", + "viewPublic": "Open public page", + "disband": "Disband guild", + "listHeading": "Guilds ({count})", + "edit": "Edit guild", + "save": "Save", + "saving": "Saving…", + "updated": "Guild updated", + "updateError": "Could not update guild", + "formName": "Name", + "formDescription": "Description", + "formState": "State", + "formForum": "Forum", + "formReadForum": "Read forum", + "formPostMessages": "Post messages", + "formPostThreads": "Post threads", + "formModForum": "Moderate forum" + }, + "items": { + "title": "Items base", + "subtitle": "Browse and edit furni definitions in items_base (standalone from catalog pages)", + "total": "{count, plural, one {# item} other {# items}}", + "editTitle": "Edit {name}", + "editSubtitle": "items_base #{id}", + "back": "Back to list", + "save": "Save", + "saved": "Item saved", + "untitled": "Untitled item", + "sectionIdentity": "Identity", + "sectionDims": "Dimensions & interaction", + "sectionFlags": "Allow flags", + "sectionExtra": "Extra", + "publicName": "Public name", + "itemName": "Classname", + "type": "Type", + "spriteId": "Sprite ID", + "width": "Width", + "length": "Length", + "stackHeight": "Stack height", + "interactionType": "Interaction", + "interactionModes": "Modes", + "vendingIds": "Vending IDs", + "multiheight": "Multiheight", + "customparams": "Custom params" + }, + "online": { + "title": "Online users", + "subtitle": "Players currently connected", + "connected": "{count, plural, one {# player connected} other {# players connected}}" + }, + "ticketInbox": { + "hint": "Merged view of open CMS desk and help-center tickets. Detail pages and replies stay on each product own route.", + "noTickets": "No open tickets in either queue", + "searchPlaceholder": "Search subject, title, user or ID…", + "statCmsOpen": "CMS open", + "statHelpOpen": "Help open", + "statTotal": "Open total", + "colTicket": "Ticket", + "colStatus": "Status", + "colType": "Queue", + "colUpdated": "Updated", + "meta": "by {user}", + "typeAll": "All queues", + "typeCms": "CMS desk", + "typeHelp": "Help center", + "statusOpen": "Open", + "statusClosed": "Closed", + "statusAll": "All statuses", + "presetOpen": "Open only", + "modNavLabel": "Queues:", + "modNavInbox": "Inbox", + "modNavDesk": "CMS desk", + "modNavHelp": "Help center" + }, + "menu": { + "title": "Admin menu", + "subtitle": "Reorder and hide sidebar groups and links. Routes and permissions stay in code.", + "save": "Save menu", + "saving": "Saving…", + "saved": "Admin menu saved.", + "saveFailed": "Could not save admin menu.", + "reset": "Reset to default", + "viewOnly": "You can view the menu layout but need settings edit permission to change it.", + "hint": "Dashboard and this page stay visible. ACL still filters what each rank sees.", + "moveUp": "Move up", + "moveDown": "Move down", + "hideGroup": "Hide group", + "showGroup": "Show group", + "hideItem": "Hide item", + "showItem": "Show item", + "pinned": "Pinned" + }, + "cmsErrors": { + "firstSeen": "First occurrence in retained records", + "lastSeen": "Latest occurrence", + "affectedUsers": "Distinct identified users", + "unidentifiedEvents": "Events without a verified user ID", + "metricsScope": "Counts cover only the retained records loaded here. Users are counted only from numeric server-side user IDs; anonymous and browser reports are not attributed.", + "assignedStaff": "Assigned to staff #{id}", + "unassigned": "Unassigned", + "assignSelf": "Assign to me", + "clearAssignment": "Clear assignment", + "openOperation": "Open related area", + "releaseOccurrences": "Occurrences by release", + "releaseScope": "These releases appear in the retained records. The earliest occurrence here does not establish which release introduced the error.", + "releaseFilter": "Version", + "allReleases": "All versions", + "period": "Period", + "allRetained": "All retained events", + "last24h": "Last 24 hours", + "last7d": "Last 7 days", + "sort": "Order", + "recentFirst": "Most recent first", + "frequentFirst": "Most frequent first", + "filterScope": "Counts refer to matching retained events. Group status and latest details remain current across versions.", + "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." + }, + "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" + }, + "operations": { + "title": "Needs attention", + "hint": "Accessible work: imports sample your latest 30 jobs; errors sample up to 1,000 retained events. Older work may be outside these counts.", + "empty": "No pending items found in the checked records.", + "errors": "Unresolved CMS error groups", + "imports": "Your imports needing review", + "tickets": "Open support tickets", + "publications": "News drafts", + "unavailable": "{source}: data is temporarily unavailable.", + "installation": "Installation diagnostics" + }, + "catalogPackages": { + "backend": { + "sourceChanged": "Source categories or offers changed since this package was created. Create a fresh package to include the current data.", + "saveConflict": "Package changed. Reload it before saving", + "publishConflict": "Package changed. Refresh the publication preview", + "catalogChanged": "Catalog changed. Refresh the publication preview", + "missing": "Catalog package not found", + "pageLimit": "A package supports at most 200 categories including descendants", + "offerLimit": "A package supports at most 500 offers", + "payloadLimit": "Package data exceeds 8 MB safety limit", + "membership": "Package membership cannot change", + "hierarchy": "Package hierarchy cannot change", + "references": "Package furniture references cannot change", + "furnitureMissing": "Package furniture reference no longer exists", + "auditWarning": "Package published, but audit logging failed.", + "hotelWarning": "Package published, but the hotel update was not delivered.", + "exportWarning": "Package published, but export scheduling failed.", + "refreshWarning": "Package published. Refresh the page to see the latest catalog." + } + }, + "catalogPackagePreview": { + "title": "Catalog preview", + "hint": "Browse the actual package pages and offers. This is a catalog preview, not a full game-client rendering. No purchases are made.", + "search": "Search categories or offers", + "playerMode": "Player access", + "rank": "Rank", + "club": "Club", + "vip": "VIP", + "externalParents": "This selection starts inside a larger catalog. Access restrictions on ancestors outside this snapshot cannot be evaluated.", + "invalidHierarchy": "{count} pages have a cyclic hierarchy and cannot be navigated.", + "snapshotLimit": "Preview limited to 200 pages and 500 offers.", + "restricted": "{count} pages are hidden by the selected player access settings.", + "categories": "Catalog categories", + "noPages": "This snapshot contains no categories.", + "inaccessible": "No categories are accessible with these settings. Adjust player access or turn it off to inspect the draft.", + "noMatches": "No matches for this search.", + "offerCount": "{count} offers", + "layout": "Layout: {layout}", + "missingLayout": "Not specified", + "unsupportedLayout": "This layout has no dedicated preview. The grid shows the actual offers; custom layout widgets and imagery are not reproduced.", + "loadingIcons": "Loading furniture icons…", + "assetsUnavailable": "Furniture details are temporarily unavailable. Offer data remains visible.", + "assetLimit": "Icons and furniture names are limited to the first 200 item IDs on this view.", + "emptyPage": "This category has no direct offers. Browse its subcategories.", + "missingIcon": "Icon unavailable", + "amount": "Quantity: {count}", + "bundle": "{count} furniture types", + "changed": "Changed from the saved baseline", + "previous": "Previous", + "next": "Next", + "page": "Page {page} of {total}", + "offerId": "Offer #{id}", + "unknownFurniture": "Furniture name unavailable", + "selectOffer": "Select an offer to inspect its price and furniture references.", + "credits": "Credits", + "duckets": "Duckets", + "diamonds": "Diamonds", + "pointsType": "Points (type {type}):", + "free": "Free", + "specialPricing": "Special pricing: {credits} credits, {points} points (type {type})", + "restrictedOffers": "{count} offers in this category require Club membership.", + "clubOffer": "Club offer" + }, + "search": { + "furniture": "Furniture", + "catalog": "Catalog categories", + "tickets": "Support tickets", + "loading": "Searching…", + "hint": "Enter a numeric ID or at least 2 characters, or choose a page.", + "retry": "Retry", + "description": "Search pages, users, furniture, catalog categories, articles and support tickets.", + "partialError": "Some results could not be loaded. Try again.", + "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." + }, + "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." + } + }, + "error": { + "code": "Error", + "title": "Something went wrong", + "subtitle": "The hotel hit an unexpected snag.", + "body": "Try again in a moment. If it keeps happening, contact staff with the reference below.", + "tryAgain": "Try again", + "backHome": "Back home", + "reference": "Reference: {digest}" + }, + "notFound": { + "code": "404", + "title": "Page not found", + "subtitle": "This room doesn’t exist — or the furniture was moved.", + "body": "Check the link, or head back to the lobby.", + "backHome": "Back home", + "latestNews": "Latest news" + }, + "sessions": { + "title": "Login activity", + "subtitle": "Recent sign-ins and failed attempts on your account", + "recentTitle": "Recent sign-ins", + "recentEmpty": "No sign-ins recorded yet.", + "colWhen": "When", + "colIp": "IP", + "colDevice": "Device", + "failedTitle": "Failed attempts", + "failedSubtitle": "Wrong password on your username", + "unknownDevice": "Unknown device", + "signOutEverywhereTitle": "Sign out everywhere", + "signOutEverywhereDescription": "Ends all website sessions on every device. You will need to sign in again here too.", + "signOutEverywhereButton": "Sign out all sessions", + "successSignedOutAll": "All sessions have been signed out." + }, + "guildForumThread": { + "backToForum": "← Back to forum", + "unnamedGuild": "Unnamed guild", + "noSubject": "(no subject)", + "inGuildForum": "{guild} forum", + "pinned": "Pinned", + "locked": "Locked", + "postsTitle": "Posts", + "postsSubtitle": "{count, plural, one {# post} other {# posts}}", + "postsEmpty": "No posts in this thread.", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Add your message to this thread", + "replyPlaceholder": "Write your reply…", + "replySubmit": "Post reply", + "lockedHint": "This thread is locked — new replies are disabled.", + "loginToReply": "Sign in to reply.", + "loginLink": "Log in", + "success": { + "replied": "Reply posted." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That thread was not found.", + "locked": "This thread is locked.", + "ratelimit": "You're posting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "helpTicketDetail": { + "backToList": "← Your tickets", + "ticketId": "Ticket #{id}", + "statusOpen": "Open", + "statusClosed": "Closed", + "messagesTitle": "Conversation", + "messagesSubtitle": "{count, plural, one {# message} other {# messages}}", + "you": "You", + "userNumber": "User #{id}", + "replyTitle": "Reply", + "replySubtitle": "Send a follow-up to staff", + "replyPlaceholder": "Write your message…", + "replySubmit": "Send reply", + "closeTitle": "Close ticket", + "closeSubtitle": "Mark this request as resolved when you no longer need help", + "closeSubmit": "Close ticket", + "closedHint": "This ticket is closed. Open a new ticket if you need more help.", + "success": { + "replied": "Reply sent.", + "closed": "Ticket closed." + }, + "errors": { + "invalid": "Please enter a message.", + "notFound": "That ticket was not found.", + "closedTicket": "This ticket is closed.", + "moderated": "That message was blocked by moderation.", + "ratelimit": "You're submitting too fast. Please wait a moment and try again.", + "error": "Something went wrong. Please try again." + } + }, + "events": { + "title": "Events", + "subtitle": "Upcoming and recent hotel events you can join", + "empty": "No events yet.", + "back": "← Events", + "when": "When", + "status": "Status", + "statusPublished": "Open", + "statusCompleted": "Completed", + "registrations": "Registrations", + "registered": "{count} registered", + "spots": "{count} / {max} spots", + "registerTitle": "Register", + "registerSubtitle": "Save your spot for this event", + "register": "Register for event", + "registering": "Registering…", + "registerSuccess": "You are registered!", + "registerError": "Could not register for this event.", + "loginToRegister": "Log in to register for this event.", + "alreadyRegistered": "You are already registered.", + "eventEnded": "This event has ended.", + "eventFull": "This event is full.", + "cannotRegister": "Registration is not available.", + "prizesTitle": "Prizes", + "winnersTitle": "Winners", + "unknownUser": "User #{id}", + "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" + }, + "mod": { + "title": "Moderation panel", + "badge": "Mod", + "overviewTitle": "Moderator overview", + "overviewSubtitle": "CFH, quick actions and bans without full admin access.", + "shortcutsTitle": "Shortcuts", + "nav": { + "overview": "Overview", + "cfh": "Call for Help", + "actions": "Quick actions", + "bans": "Bans", + "fullAdmin": "Full admin", + "backToSite": "Back to site", + "tickets": "Tickets", + "team": "Team", + "helpTickets": "Help-center tickets", + "users": "Users" + }, + "stats": { + "openCfh": "Open CFH", + "bansToday": "Bans today", + "modsOnline": "Mods online", + "quickActions": "Quick actions", + "quickActionsHint": "Kick, mute, alert", + "openTickets": "Open tickets", + "team": "Mod team", + "teamHint": "Online staff & workload", + "openHelpTickets": "Open help tickets" + }, + "usersTitle": "Players", + "usersSubtitle": "Lookup without email or IP — use full admin for sensitive fields.", + "usersEmpty": "No players found", + "usersSearchPlaceholder": "Search username, motto or ID…", + "usersRank": "rank", + "usersPublicProfile": "Public profile", + "usersPiiNote": "Email, IP and currency are hidden in the mod panel. Open full admin if you have access.", + "usersJoined": "Joined", + "usersLastLogin": "Last login", + "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } + }, + "myDashboard": { + "messagesCaughtUp": "No unread messages", + "messagesUnavailable": "Open your inbox to check", + "eventTitle": "On the calendar", + "allEvents": "All events", + "eventsUnavailable": "The calendar is temporarily unavailable. Open all events to try again.", + "eventOngoing": "Happening now", + "eventUpcoming": "Coming up", + "eventDetails": "View event", + "noUpcomingEvents": "No upcoming events have been announced yet.", + "roomsUnavailable": "Rooms are temporarily unavailable. Open the community to try again.", + "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." + } + }, + "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" + }, + "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" + } + }, + "emails": { + "verify": { + "subject": "Verify your email · {hotel}", + "heading": "Verify your email", + "body": "Welcome to {hotel}! Confirm this email address to finish setting up your account.", + "button": "Verify email", + "fallback": "If the button doesn't work, paste this link into your browser:" + } + }, + "toolbar": { + "home": "Головна", + "reload": "Перезавантажити", + "fullscreen": "Повний екран", + "logout": "Вийти", + "onlineUsers": "Користувачі онлайн", + "emulatorOnline": "Емулятор онлайн", + "emulatorOffline": "Емулятор офлайн", + "dragToMove": "Перетягніть, щоб перемістити", + "hide": "Сховати панель", + "fullscreenExit": "Вийти з повноекранного режиму", + "show": "Показати панель", + "emulatorUnknown": "Стан емулятора невідомий" + }, + "admin": { + "studio": { + "importDiagnostics": { + "attempts": "Діагностика файлів", + "preliminary": "Попередня перевірка адрес; вміст перевіряється під час імпорту.", + "http": "HTTP {status}", + "network": "Не вдалося підключитися", + "timeout": "Джерело не відповіло вчасно", + "invalidResponse": "Джерело повернуло вебсторінку замість файлу", + "available": "Файл знайдено; очікує перевірки", + "recover": "Прикріпити оригінал і продовжити", + "recoveryHint": "Виберіть {file} (до 50 MB). Його відповідність перевіряється. Повторюються невдалі елементи; завершені імпорти зберігаються.", + "attach": "Виберіть оригінальний файл .nitro", + "working": "Перевірка або відновлення...", + "attached": "Відповідний оригінал прикріплено", + "resume": "Повторити невдалі імпорти з цим файлом", + "invalidFile": "Виберіть відповідний оригінальний .nitro до 50 MB і повторіть спробу.", + "resumeError": "Оновіть історію й використайте останню спробу; перевірте файл і спробуйте знову.", + "mismatchedFile": "Цей файл належить іншому предмету меблів.", + "alreadyStarted": "Відновлення вже розпочато. Оновіть історію й використайте останню спробу.", + "notEligible": "Цей елемент не можна відновити вкладенням." + }, + "completeness": { + "title": "Completeness and next steps", + "parts": { + "sql": "SQL item", + "catalog": "Catalog offer", + "furnidata": "Furnidata", + "icon": "Local icon", + "nitro": "Nitro file" + }, + "statuses": { + "present": "Present", + "missing": "Missing", + "unknown": "Not verified", + "conflict": "Needs review" + }, + "actions": { + "sql": "Import or repair this furni to create the missing item record.", + "catalog": "Import or repair this furni to add an offer using the automatic category and price.", + "furnidata": "Import or repair this furni to add the missing furniture data.", + "icon": "Import or repair this furni to retrieve the missing local icon.", + "nitro": "Import or repair this furni to retrieve the asset. For an existing item, Regenerate .nitro is also available.", + "recheck": "Recheck local state before repair. If this persists, check the local file access.", + "audit": "Review duplicate records and matching sprite IDs and types in Catalog audit before repair." + }, + "openAudit": "Open Catalog audit to resolve conflicts", + "excludedConflicts": "{count, plural, one {# item needs review and is excluded from this import.} other {# items need review and are excluded from this import.}}" + }, + "preflight": { + "filterLabel": "Filter import checks", + "filters": { + "all": "All ({count})", + "complete": "To complete ({count})", + "conflict": "Conflicts ({count})", + "verify": "To verify ({count})" + }, + "empty": "No furniture in this group.", + "actions": { + "complete": "Suggested: complete existing furniture", + "import": "Suggested: import new furniture", + "refresh": "Existing furniture is complete; refresh source data", + "conflict": "Resolve the conflicting local records before import", + "verify": "Review the unverified components before continuing" + }, + "missing": "Missing: {parts}", + "unknown": "Not verified: {parts}" + } + } + }, + "publicData": { + "loadError": "This section could not be loaded. Please try again.", + "retry": "Retry", + "unavailable": "Unavailable" + } }