345 lines
17 KiB
JSON
345 lines
17 KiB
JSON
{
|
|
"nav": {},
|
|
"header": {},
|
|
"footer": {},
|
|
"emails": {},
|
|
"pages": {
|
|
"admin": {
|
|
"nav": {
|
|
"studio": "Studio"
|
|
},
|
|
"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."
|
|
}
|
|
},
|
|
"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."
|
|
},
|
|
"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"
|
|
},
|
|
"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"
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
},
|
|
"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": {
|
|
"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.}}"
|
|
}
|
|
}
|
|
}
|
|
}
|