Files
Epicnabbo-Catalogus-Updated…/src/messages/fr.json
T

3884 lines
151 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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 <strong>{amount}</strong> 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": "[email protected]",
"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"
}
}
},
"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 <code>hotelalert</code> 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"
}
}
},
"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": "<p>Cher/Chère {username},</p>",
"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": "Authenticated HK APIs: server time until the response is ready. This does not measure browser rendering or public pages.",
"refresh": "Refresh",
"shared": "Shared diagnostics via Redis.",
"local": "Local diagnostics for this instance only; cleared on restart.",
"retention": "Up to 200 recent requests, 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"
},
"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.}}"
}
}
}
}