feat(i18n): synchronize all translation keys across all supported locales (25 languages)
CI / check (push) Failing after 1m10s
CI / deploy (push) Skipped
CI / publish-container (push) Skipped

This commit is contained in:
openhands committed 2026-09-12 19:30:16 +02:00
1 parent 8707c0d8fe
commit 91008d84fe
25 files changed
+33255 -973

No files matched your search

+37
View File
@@ -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!");
+4247 -13
View File
File diff suppressed because it is too large. Load diff
+1042 -47
View File
File diff suppressed because it is too large. Load diff
+1042 -47
View File
File diff suppressed because it is too large. Load diff
+1042 -47
View File
File diff suppressed because it is too large. Load diff
+1041 -47
View File
File diff suppressed because it is too large. Load diff
+1042 -47
View File
File diff suppressed because it is too large. Load diff
+1041 -47
View File
File diff suppressed because it is too large. Load diff
+4247 -13
View File
File diff suppressed because it is too large. Load diff
+1041 -47
View File
File diff suppressed because it is too large. Load diff
+1042 -47
View File
File diff suppressed because it is too large. Load diff
+1042 -47
View File
File diff suppressed because it is too large. Load diff
+110 -1
View File
@@ -282,7 +282,13 @@
"featuresCommunity": "Community", "featuresCommunity": "Community",
"featuresCommunityDesc": "Fai amicizia e chatta", "featuresCommunityDesc": "Fai amicizia e chatta",
"featuresGames": "Giochi", "featuresGames": "Giochi",
"featuresGamesDesc": "Competi e divertiti" "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": { "news": {
"title": "Notizie", "title": "Notizie",
@@ -2076,6 +2082,109 @@
"clubHint": "Limita l’accesso agli utenti con abbonamento HC.", "clubHint": "Limita l’accesso agli utenti con abbonamento HC.",
"yes": "Sì", "yes": "Sì",
"no": "No" "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": { "bulk": {
+4247 -13
View File
File diff suppressed because it is too large. Load diff
+576 -40
View File
@@ -85,7 +85,11 @@
"emptyState": "Geen teamleden om te tonen.", "emptyState": "Geen teamleden om te tonen.",
"colUsername": "Gebruikersnaam", "colUsername": "Gebruikersnaam",
"colRank": "Rang", "colRank": "Rang",
"colMotto": "Motto" "colMotto": "Motto",
"viewProfile": "View profile",
"noMotto": "No motto set",
"loadError": "Unable to load staff members. Please try again shortly.",
"retry": "Try again"
}, },
"leaderboard": { "leaderboard": {
"title": "Klassement", "title": "Klassement",
@@ -231,7 +235,15 @@
}, },
"morePhotos": "Meer foto’s tonen (maximaal de 24 nieuwste)", "morePhotos": "Meer foto’s tonen (maximaal de 24 nieuwste)",
"openPhoto": "Open de volledige foto in een nieuw tabblad", "openPhoto": "Open de volledige foto in een nieuw tabblad",
"photosUnavailable": "Foto’s konden niet worden geladen. Probeer het later opnieuw." "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": { "rankings": {
"title": "Rankings", "title": "Rankings",
@@ -270,7 +282,13 @@
"featuresGames": "Spelletjes", "featuresGames": "Spelletjes",
"featuresGamesDesc": "Speel mee en heb plezier", "featuresGamesDesc": "Speel mee en heb plezier",
"latestArticle": "Laatste artikel", "latestArticle": "Laatste artikel",
"latestUsers": "Nieuwste burgers ({count} totaal)" "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": { "news": {
"title": "Nieuws", "title": "Nieuws",
@@ -921,7 +939,8 @@
"codePlaceholder": "6-cijferige code", "codePlaceholder": "6-cijferige code",
"confirm": "Bevestigen", "confirm": "Bevestigen",
"enableIntro": "Voeg een extra beveiligingslaag toe met een authenticator-app.", "enableIntro": "Voeg een extra beveiligingslaag toe met een authenticator-app.",
"enable": "2FA inschakelen" "enable": "2FA inschakelen",
"rateLimit": "Too many attempts. Please wait before trying again."
}, },
"title": "Gekoppelde accounts", "title": "Gekoppelde accounts",
"subtitle": "Koppel een sociaal account zodat je met één klik kunt inloggen", "subtitle": "Koppel een sociaal account zodat je met één klik kunt inloggen",
@@ -980,7 +999,12 @@
"usernameRequired": "Gebruikersnaam is verplicht.", "usernameRequired": "Gebruikersnaam is verplicht.",
"emailRequired": "E-mail is verplicht.", "emailRequired": "E-mail is verplicht.",
"passwordRequired": "Wachtwoord is verplicht.", "passwordRequired": "Wachtwoord is verplicht.",
"passwordsDontMatch": "Wachtwoorden komen niet overeen." "passwordsDontMatch": "Wachtwoorden komen niet overeen.",
"accepted": "Accepted & agreed",
"showPassword": "Show",
"hidePassword": "Hide",
"accountDetails": "Account details",
"credentials": "Credentials & security"
}, },
"forgot": { "forgot": {
"title": "Wachtwoord resetten", "title": "Wachtwoord resetten",
@@ -1163,7 +1187,8 @@
"rankWithCount": "Rang {rank}: {count} accounts", "rankWithCount": "Rang {rank}: {count} accounts",
"recentStaffActivity": "Recente teamactiviteit", "recentStaffActivity": "Recente teamactiviteit",
"viewAll": "Alles bekijken", "viewAll": "Alles bekijken",
"noStaffActivityLogged": "Nog geen teamactiviteit geregistreerd" "noStaffActivityLogged": "Nog geen teamactiviteit geregistreerd",
"totalAccounts": "{count} total accounts"
}, },
"articles": { "articles": {
"title": "Artikelen", "title": "Artikelen",
@@ -1234,7 +1259,8 @@
"publishAt": "Publiceren op", "publishAt": "Publiceren op",
"publishedAt": "Gepubliceerd op", "publishedAt": "Gepubliceerd op",
"imageInvalid": "Gebruik een lokaal pad of een HTTP/HTTPS-afbeeldingsadres zonder inloggegevens.", "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." "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.", "listActionError": "De actie voor dit artikel kon niet worden voltooid.",
"listStatus": "Publicatiestatus", "listStatus": "Publicatiestatus",
@@ -1357,7 +1383,8 @@
}, },
"devops": { "devops": {
"noEmulatorErrors": "Geen emulatorfouten gevonden", "noEmulatorErrors": "Geen emulatorfouten gevonden",
"noRecentErrors": "Geen recente fouten" "noRecentErrors": "Geen recente fouten",
"cmsErrors": "CMS error center"
}, },
"tags": { "tags": {
"title": "Tags", "title": "Tags",
@@ -1377,7 +1404,13 @@
"colColour": "Kleur", "colColour": "Kleur",
"colUsedBy": "Gebruikt door", "colUsedBy": "Gebruikt door",
"colCreated": "Aangemaakt", "colCreated": "Aangemaakt",
"colActions": "Acties" "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": { "navigation": {
"title": "Navigator", "title": "Navigator",
@@ -1401,7 +1434,12 @@
"colName": "Naam", "colName": "Naam",
"colOrder": "Volgorde", "colOrder": "Volgorde",
"colRooms": "Kamers", "colRooms": "Kamers",
"colActions": "Acties" "colActions": "Acties",
"publicFlatcats": "Public room categories",
"markedPublic": "Categories marked as public",
"visibleRooms": "Visible rooms",
"rows": "rows",
"unnamed": "Unnamed room"
}, },
"helpCenter": { "helpCenter": {
"title": "Helpcentrum", "title": "Helpcentrum",
@@ -1428,7 +1466,9 @@
"saving": "Opslaan…", "saving": "Opslaan…",
"deleteEntry": "Item verwijderen", "deleteEntry": "Item verwijderen",
"cancel": "Annuleren" "cancel": "Annuleren"
} },
"withButton": "With a button",
"smallBoxes": "Small boxes"
}, },
"ads": { "ads": {
"title": "Advertenties", "title": "Advertenties",
@@ -1491,8 +1531,17 @@
"save": "Box opslaan", "save": "Box opslaan",
"saving": "Opslaan…", "saving": "Opslaan…",
"deleteBox": "Box verwijderen", "deleteBox": "Box verwijderen",
"cancel": "Annuleren" "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": { "photos": {
"title": "Fotomoderatie", "title": "Fotomoderatie",
@@ -1697,7 +1746,20 @@
"save": "Ban opslaan", "save": "Ban opslaan",
"saving": "Opslaan…", "saving": "Opslaan…",
"cancel": "Annuleren" "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": { "ip": {
"title": "IP-beheer", "title": "IP-beheer",
@@ -1717,7 +1779,11 @@
"colIp": "IP", "colIp": "IP",
"colReason": "Reden", "colReason": "Reden",
"colAdded": "Toegevoegd", "colAdded": "Toegevoegd",
"colActions": "Acties" "colActions": "Acties",
"whitelisted": "Allowed IP addresses",
"blacklisted": "Blocked IP addresses",
"asnPlaceholder": "ASN (optional)",
"colAsn": "ASN"
}, },
"vpn": { "vpn": {
"title": "VPN / Proxy Detectie", "title": "VPN / Proxy Detectie",
@@ -1730,7 +1796,21 @@
"blockOnDetectHint": "Automatisch gebruikers blokkeren die achter een VPN of proxy worden gedetecteerd", "blockOnDetectHint": "Automatisch gebruikers blokkeren die achter een VPN of proxy worden gedetecteerd",
"save": "Instellingen opslaan", "save": "Instellingen opslaan",
"saving": "Opslaan…", "saving": "Opslaan…",
"settingsSaved": "VPN-instellingen succesvol opgeslagen" "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 <ipLink>IP management</ipLink>.",
"openIpManagement": "Open IP management"
}, },
"applications": { "applications": {
"title": "Teamsollicitaties", "title": "Teamsollicitaties",
@@ -1758,7 +1838,10 @@
"status": "Status", "status": "Status",
"submitted": "Ingediend", "submitted": "Ingediend",
"noMessage": "Geen bericht opgegeven" "noMessage": "Geen bericht opgegeven"
} },
"applicationsTitle": "Applications ({count})",
"userNumber": "User #{id}",
"rankLabel": "Rank {rank}"
}, },
"teams": { "teams": {
"title": "Teams", "title": "Teams",
@@ -1786,7 +1869,26 @@
"save": "Teamdefinitie opslaan", "save": "Teamdefinitie opslaan",
"saving": "Opslaan…", "saving": "Opslaan…",
"cancel": "Annuleren" "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": { "permissions": {
"title": "Permissies", "title": "Permissies",
@@ -2298,8 +2400,23 @@
"enabled": "Ingeschakeld", "enabled": "Ingeschakeld",
"save": "Pakket opslaan", "save": "Pakket opslaan",
"saving": "Opslaan…", "saving": "Opslaan…",
"cancel": "Annuleren" "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": { "marketplace": {
"title": "Marketplace", "title": "Marketplace",
@@ -2343,7 +2460,20 @@
"back": "Terug naar gildes", "back": "Terug naar gildes",
"viewPublic": "Openbare pagina", "viewPublic": "Openbare pagina",
"disband": "Gilde ontbinden", "disband": "Gilde ontbinden",
"listHeading": "Guilds ({count})" "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": { "transactions": {
"title": "Transacties", "title": "Transacties",
@@ -2432,7 +2562,9 @@
"save": "Voucher opslaan", "save": "Voucher opslaan",
"saving": "Opslaan…", "saving": "Opslaan…",
"cancel": "Annuleren" "cancel": "Annuleren"
} },
"updated": "Voucher updated",
"updateError": "Could not update voucher"
}, },
"subscriptions": { "subscriptions": {
"title": "Abonnementen", "title": "Abonnementen",
@@ -2451,7 +2583,15 @@
"colActions": "Acties", "colActions": "Acties",
"statusActive": "Actief", "statusActive": "Actief",
"statusCancelled": "Geannuleerd", "statusCancelled": "Geannuleerd",
"statusExpired": "Verlopen" "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": { "rareValues": {
"title": "Zeldzame Waarden", "title": "Zeldzame Waarden",
@@ -2489,8 +2629,25 @@
"pointTypeDiamonds": "Diamanten", "pointTypeDiamonds": "Diamanten",
"save": "Item opslaan", "save": "Item opslaan",
"saving": "Opslaan…", "saving": "Opslaan…",
"cancel": "Annuleren" "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": { "badges": {
"title": "Badges", "title": "Badges",
@@ -2521,7 +2678,10 @@
"colImage": "Afbeelding", "colImage": "Afbeelding",
"colName": "Naam", "colName": "Naam",
"colDescription": "Beschrijving", "colDescription": "Beschrijving",
"colActions": "Acties" "colActions": "Acties",
"uploadedMessage": "Badge {code} uploaded.",
"errorMessage": "Upload failed: {error}",
"userIdPlaceholder": "User ID"
}, },
"achievements": { "achievements": {
"title": "Prestaties", "title": "Prestaties",
@@ -2535,7 +2695,14 @@
"colProgress": "Voortgang", "colProgress": "Voortgang",
"levelLabel": "Niveau {level}", "levelLabel": "Niveau {level}",
"rewardCredits": "{count} credits", "rewardCredits": "{count} credits",
"rewardPoints": "{count} {points}" "rewardPoints": "{count} {points}",
"achievementRows": "Achievement levels",
"distinctAchievements": "Distinct achievements",
"categories": "Categories",
"colLevel": "Level",
"colRewardType": "Reward type",
"colRewardAmount": "Reward amount",
"colPoints": "Points"
}, },
"calendar": { "calendar": {
"title": "Kalendercampagnes", "title": "Kalendercampagnes",
@@ -2554,8 +2721,32 @@
"days": "Dagen", "days": "Dagen",
"dayLabel": "Dag {day}", "dayLabel": "Dag {day}",
"reward": "Beloning", "reward": "Beloning",
"noDays": "Geen dagen geconfigureerd voor deze campagne" "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": { "radio": {
"title": "Radiomoderatie", "title": "Radiomoderatie",
@@ -2749,7 +2940,8 @@
"pointsPerMinuteHint": "Amount awarded for each full minute of listening.", "pointsPerMinuteHint": "Amount awarded for each full minute of listening.",
"maxPerDayHint": "Daily cap per user. Use 0 for unlimited.", "maxPerDayHint": "Daily cap per user. Use 0 for unlimited.",
"minListenersHint": "Points are only awarded when at least this many people are tuned in.", "minListenersHint": "Points are only awarded when at least this many people are tuned in.",
"save": "Punteninstellingen opslaan" "save": "Punteninstellingen opslaan",
"saved": "Settings saved."
}, },
"autoDjForm": { "autoDjForm": {
"title": "AutoDJ configuratie", "title": "AutoDJ configuratie",
@@ -2846,7 +3038,119 @@
}, },
"messagePlaceholder": "Bericht (voor meldingen)…", "messagePlaceholder": "Bericht (voor meldingen)…",
"amountPlaceholder": "Bedrag…", "amountPlaceholder": "Bedrag…",
"badgePlaceholder": "Badge code…" "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": { "emulator": {
"title": "Emulator Configuratie", "title": "Emulator Configuratie",
@@ -2871,7 +3175,16 @@
"valuePlaceholder": "Voer waarde in…", "valuePlaceholder": "Voer waarde in…",
"save": "Wijzigingen opslaan", "save": "Wijzigingen opslaan",
"cancel": "Annuleren" "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": { "alerts": {
"title": "Meldingen", "title": "Meldingen",
@@ -3071,7 +3384,25 @@
"save": "Instellingen opslaan", "save": "Instellingen opslaan",
"saving": "Opslaan…", "saving": "Opslaan…",
"confirmEnable": "Het inschakelen van onderhoud voorkomt dat niet-teamleden toegang krijgen tot het hotel. Doorgaan?", "confirmEnable": "Het inschakelen van onderhoud voorkomt dat niet-teamleden toegang krijgen tot het hotel. Doorgaan?",
"confirmDisable": "Onderhoudsmodus uitschakelen en toegang herstellen voor alle gebruikers?" "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": { "housekeeping": {
"title": "Permissie-archief", "title": "Permissie-archief",
@@ -3272,8 +3603,13 @@
"variablesHint": "{username}, {email}, {hotel_name}", "variablesHint": "{username}, {email}, {hotel_name}",
"save": "Sjabloon opslaan", "save": "Sjabloon opslaan",
"saving": "Opslaan…", "saving": "Opslaan…",
"cancel": "Annuleren" "cancel": "Annuleren",
} "variablesPlaceholder": "Variables, separated by commas",
"active": "Active"
},
"create": "Create template",
"save": "Save template",
"updated": "Updated: {date}"
}, },
"theme": { "theme": {
"title": "Thema", "title": "Thema",
@@ -3299,7 +3635,12 @@
"saveCss": "CSS opslaan", "saveCss": "CSS opslaan",
"savingCss": "Opslaan…", "savingCss": "Opslaan…",
"reset": "Standaardwaarden herstellen", "reset": "Standaardwaarden herstellen",
"confirmReset": "Thema terugzetten naar standaardwaarden?" "confirmReset": "Thema terugzetten naar standaardwaarden?",
"saved": "Theme settings saved.",
"presetApplied": "Preset applied: {preset}",
"typographyLayout": "Typography and layout",
"font": "Font",
"borderRadius": "Corner radius"
}, },
"media": { "media": {
"title": "Mediabibliotheek", "title": "Mediabibliotheek",
@@ -3838,7 +4179,35 @@
"recentFirst": "Nieuwste eerst", "recentFirst": "Nieuwste eerst",
"frequentFirst": "Meest voorkomend eerst", "frequentFirst": "Meest voorkomend eerst",
"filterScope": "Aantallen gelden voor passende bewaarde gebeurtenissen. Groepsstatus en nieuwste details blijven actueel over alle versies.", "filterScope": "Aantallen gelden voor passende bewaarde gebeurtenissen. Groepsstatus en nieuwste details blijven actueel over alle versies.",
"auditTrail": "Gerelateerde auditregels" "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": { "installation": {
"title": "Installatiediagnose", "title": "Installatiediagnose",
@@ -3882,7 +4251,20 @@
"ownerHistory": "Je imports en reparaties, nieuwste eerst. Herhalen voert voltooide of onzekere onderdelen nooit opnieuw uit.", "ownerHistory": "Je imports en reparaties, nieuwste eerst. Herhalen voert voltooide of onzekere onderdelen nooit opnieuw uit.",
"previousPage": "Vorige", "previousPage": "Vorige",
"nextPage": "Volgende", "nextPage": "Volgende",
"page": "Pagina {page}" "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": { "operations": {
"title": "Aandacht nodig", "title": "Aandacht nodig",
@@ -3975,7 +4357,17 @@
"hint": "Voer een numeriek ID of minstens 2 tekens in, of kies een pagina.", "hint": "Voer een numeriek ID of minstens 2 tekens in, of kies een pagina.",
"retry": "Opnieuw proberen", "retry": "Opnieuw proberen",
"description": "Zoek pagina’s, gebruikers, meubels, cataloguscategorieën, artikelen en supporttickets.", "description": "Zoek pagina’s, gebruikers, meubels, cataloguscategorieën, artikelen en supporttickets.",
"partialError": "Sommige resultaten konden niet worden geladen. Probeer opnieuw." "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": { "permissionPreview": {
"title": "Voorbeeld van roltoegang", "title": "Voorbeeld van roltoegang",
@@ -4034,7 +4426,26 @@
"name": "Naam van weergave", "name": "Naam van weergave",
"replace": "Deze weergave vervangen", "replace": "Deze weergave vervangen",
"save": "Huidige weergave opslaan" "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": { "syncQueue": {
"preparing": "Synchronisatie voorbereiden...", "preparing": "Synchronisatie voorbereiden...",
@@ -4103,6 +4514,16 @@
"elapsed": "{seconds}s in deze fase", "elapsed": "{seconds}s in deze fase",
"recovered": "Bundel hersteld via {source} · revisie {revision}. Classname, type en revisie komen overeen; identiteit van de bundel gecontroleerd.", "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." "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": { "mod": {
@@ -4263,6 +4684,64 @@
"unavailable": "Sommige acties konden niet worden gecontroleerd. Beschikbare acties staan hierboven.", "unavailable": "Sommige acties konden niet worden gecontroleerd. Beschikbare acties staan hierboven.",
"retry": "Opnieuw proberen", "retry": "Opnieuw proberen",
"rewardUnavailable": "De voortgang van uitnodigingen is tijdelijk niet beschikbaar. Probeer het opnieuw." "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": { "search": {
@@ -4284,6 +4763,63 @@
"previous": "Vorige", "previous": "Vorige",
"next": "Volgende", "next": "Volgende",
"pageSummary": "Pagina {page} van {pages} · {total} resultaten" "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": { "toolbar": {
+1042 -47
View File
File diff suppressed because it is too large. Load diff
+1041 -47
View File
File diff suppressed because it is too large. Load diff
+1041 -47
View File
File diff suppressed because it is too large. Load diff
+1042 -47
View File
File diff suppressed because it is too large. Load diff
+1041 -47
View File
File diff suppressed because it is too large. Load diff
+1042 -47
View File
File diff suppressed because it is too large. Load diff
+1042 -47
View File
File diff suppressed because it is too large. Load diff
+1042 -47
View File
File diff suppressed because it is too large. Load diff
+1041 -47
View File
File diff suppressed because it is too large. Load diff
+1042 -47
View File
File diff suppressed because it is too large. Load diff