ajout de la traduction pour toute la page NewPlay pour fr et en
continuous-integration/drone/push Build is passing Details

pull/109/head
Pierre Ferreira 10 months ago
parent 5032e57bab
commit d65ec81b59

@ -1,7 +1,7 @@
import React, {useEffect, useState} from 'react';
/* Naviagtion */
import { Navbar, Container, Nav, NavDropdown } from 'react-bootstrap';
import { Navbar, Container, Nav, NavDropdown } from 'react-bootstrap';
/* Lang */
import { FormattedMessage } from 'react-intl';
@ -58,13 +58,13 @@ function AppNavbar({changeLocale, locale}) {
<Navbar.Collapse id="basic-navbar-nav">
<Nav className="me-auto">
<Nav.Link href={`${basePath}/`} style={{ color: theme.colors.text }}>
Jouer
<FormattedMessage id="navbar.play" />
</Nav.Link>
<Nav.Link href={`${basePath}/presentation`} style={{ color: theme.colors.text }}>
Présentation
<FormattedMessage id="navbar.presentation" />
</Nav.Link>
<Nav.Link href={`${basePath}/info`} style={{ color: theme.colors.text }}>
Info
<FormattedMessage id="navbar.info" />
</Nav.Link>
</Nav>
<div className='leftdiv'>

@ -27,6 +27,8 @@ import { BiLineChart, BiLineChartDown } from 'react-icons/bi';
import { CarouselCaption } from 'react-bootstrap';
import { BsLine } from 'react-icons/bs';
import { FormattedMessage, useIntl } from 'react-intl';
//@ts-ignore
const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
const theme=useTheme();
@ -90,6 +92,8 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
fetchWeeklyStats();
}, []);
const intl = useIntl();
return (
<Tabs
activeKey={activeTab}
@ -100,47 +104,49 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
}}
id="ScoreBoard"
className="tabsStats justify-content-around">
<Tab eventKey="perso" title="Vos Stats" disabled={!Player.pseudo.startsWith("Guest_") ? false : true}>
<Tab eventKey="perso"
title={intl.formatMessage({ id: 'score.tab.stat' })}
disabled={!Player.pseudo.startsWith("Guest_") ? false : true}>
<Tab.Content className={`tabsStats ${activeTab !== 'perso' ? 'hidden' : ''}`}>
<Carousel adaptiveHeight wrapAround slidesToShow={1} cellSpacing={10} key={carouselKey}>
<div className="stats">
<h5>Mastermind</h5>
<h5><FormattedMessage id='info.mdj.mastermind'/></h5>
<hr />
<p>Parties Jouées: {Player.mastermindStats.nbGames}</p>
<p>Best-Score: {Player.mastermindStats.bestScore}</p>
<p>Moyenne d'essai: {Player.mastermindStats.avgNbTry.toFixed(2)}</p>
<p><FormattedMessage id='score.nbPlayed'/> : {Player.mastermindStats.nbGames}</p>
<p><FormattedMessage id='score.best'/>: {Player.mastermindStats.bestScore}</p>
<p><FormattedMessage id='score.moy'/>: {Player.mastermindStats.avgNbTry.toFixed(2)}</p>
</div>
<div className="stats">
<h5>Enigme facile</h5>
<hr />
<p>Parties Jouées: {Player.easyEnigmaStats.nbGames}</p>
<p>Nombre de victoires: {Player.easyEnigmaStats.nbWins}</p>
<p>Ratio V/D: {Player.easyEnigmaStats.ratio.toFixed(2) + "%"}</p>
<p>Meilleur temps: {Player.easyEnigmaStats.bestTime + "s"}</p>
<p>Moyenne de temps: {Player.easyEnigmaStats.avgTime.toFixed(2) + "s"}</p>
<p><FormattedMessage id='score.nbPlayed'/>: {Player.easyEnigmaStats.nbGames}</p>
<p><FormattedMessage id='score.NbWin'/>: {Player.easyEnigmaStats.nbWins}</p>
<p><FormattedMessage id='score.ratio'/>: {Player.easyEnigmaStats.ratio.toFixed(2) + "%"}</p>
<p><FormattedMessage id='score.bestTmp'/>: {Player.easyEnigmaStats.bestTime + "s"}</p>
<p><FormattedMessage id='score.moyTmp'/>: {Player.easyEnigmaStats.avgTime.toFixed(2) + "s"}</p>
</div>
<div className="stats">
<h5>Enigme moyenne</h5>
<hr />
<p>Parties Jouées: {Player.mediumEnigmaStats.nbGames}</p>
<p>Best-Score: {Player.mediumEnigmaStats.bestScore}</p>
<p>Moyenne d'essai: {Player.mediumEnigmaStats.avgNbTry.toFixed(2)}</p>
<p><FormattedMessage id='score.nbPlayed'/>: {Player.mediumEnigmaStats.nbGames}</p>
<p><FormattedMessage id='score.best'/>: {Player.mediumEnigmaStats.bestScore}</p>
<p><FormattedMessage id='score.moy'/>: {Player.mediumEnigmaStats.avgNbTry.toFixed(2)}</p>
</div>
<div className="stats">
<h5>Enigme difficile</h5>
<hr />
<p>Parties Jouées: {Player.hardEnigmaStats.nbGames}</p>
<p>Nombre de victoires: {Player.hardEnigmaStats.nbWins}</p>
<p>Ratio V/D: {Player.hardEnigmaStats.ratio.toFixed(2) + "%"}</p>
<p>Meilleur temps: {Player.hardEnigmaStats.bestTime + "s"}</p>
<p>Moyenne de temps: {Player.hardEnigmaStats.avgTime.toFixed(2) + "s"}</p>
<p><FormattedMessage id='score.nbPlayed'/>: {Player.hardEnigmaStats.nbGames}</p>
<p><FormattedMessage id='score.NbWin'/>: {Player.hardEnigmaStats.nbWins}</p>
<p><FormattedMessage id='score.ratio'/>: {Player.hardEnigmaStats.ratio.toFixed(2) + "%"}</p>
<p><FormattedMessage id='score.bestTmp'/>: {Player.hardEnigmaStats.bestTime + "s"}</p>
<p><FormattedMessage id='score.moyTmp'/>: {Player.hardEnigmaStats.avgTime.toFixed(2) + "s"}</p>
</div>
<div className="stats">
<h5>En ligne</h5>
<hr />
<p>Parties Jouées: {Player.onlineStats.nbGames}</p>
<p>Nombre de victoires: {Player.onlineStats.nbWins}</p>
<p>Ratio V/D: {Player.onlineStats.ratio.toFixed(2) + "s"}</p>
<p><FormattedMessage id='score.nbPlayed'/>: {Player.onlineStats.nbGames}</p>
<p><FormattedMessage id='score.NbWin'/>: {Player.onlineStats.nbWins}</p>
<p><FormattedMessage id='score.ratio'/>: {Player.onlineStats.ratio.toFixed(2) + "s"}</p>
</div>
</Carousel>
</Tab.Content>
@ -149,7 +155,7 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
<Tab.Content className={`tabsStats ${activeTab !== 'daily' ? 'hidden' : ''}`}>
<Carousel adaptiveHeight wrapAround slidesToShow={1} cellSpacing={10} key={carouselKey}>
<div className="stats">
<h5>Mastermind</h5>
<h5><FormattedMessage id='info.mdj.mastermind'/></h5>
<hr />
{dailyMastermindStats !== null ? (dailyMastermindStats.tab.length !== 0 ? dailyMastermindStats.tab.map((stats: any, index: number) => (
<>
@ -163,13 +169,13 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)}
</div>
<div className="stats">
<h5>Enigme facile</h5>
<h5><FormattedMessage id='score.titre.easy'/></h5>
<hr />
{dailyEasyEnigmaStats !== null ? (dailyEasyEnigmaStats.tab.length !== 0 ? dailyEasyEnigmaStats.tab.map((stats: any, index: number) => (
<>
@ -183,13 +189,13 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)}
</div>
<div className="stats">
<h5>Enigme moyenne</h5>
<h5><FormattedMessage id='score.titre.int'/></h5>
<hr />
{dailyMediumEnigmaStats !== null ? (dailyMediumEnigmaStats.tab.length !== 0 ? dailyMediumEnigmaStats.tab.map((stats: any, index: number) => (
<>
@ -203,13 +209,13 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)}
</div>
<div className="stats">
<h5>Enigme difficile</h5>
<h5><FormattedMessage id='score.titre.hard'/></h5>
<hr />
{dailyHardEnigmaStats !== null ? (dailyHardEnigmaStats.tab.length !== 0 ? dailyHardEnigmaStats.tab.map((stats: any, index: number) => (
<>
@ -223,13 +229,13 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)}
</div>
<div className="stats">
<h5>En ligne</h5>
<h5><FormattedMessage id='score.online'/></h5>
<hr />
{dailyOnlineStats !== null ? (dailyOnlineStats.tab.length !== 0 ? dailyOnlineStats.tab.map((stats: any, index: number) => (
<>
@ -243,9 +249,9 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)}
</div>
</Carousel>
@ -255,7 +261,7 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
<Tab.Content className={`tabsStats ${activeTab !== 'weekly' ? 'hidden' : ''}`}>
<Carousel adaptiveHeight wrapAround slidesToShow={1} cellSpacing={10} key={carouselKey}>
<div className="stats">
<h5>Mastermind</h5>
<h5><FormattedMessage id='info.mdj.mastermind'/></h5>
<hr />
{weeklyMastermindStats !== null ? (weeklyMastermindStats.tab.length !== 0 ? weeklyMastermindStats.tab.map((stats: any, index: number) => (
<>
@ -269,13 +275,13 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)}
</div>
<div className="stats">
<h5>Enigme facile</h5>
<h5><FormattedMessage id='score.titre.easy'/></h5>
<hr />
{weeklyEasyEnigmaStats !== null ? (weeklyEasyEnigmaStats.tab.length !== 0 ? weeklyEasyEnigmaStats.tab.map((stats: any, index: number) => (
<>
@ -289,13 +295,13 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)}
</div>
<div className="stats">
<h5>Enigme moyenne</h5>
<h5><FormattedMessage id='score.titre.int'/></h5>
<hr />
{weeklyMediumEnigmaStats !== null ? (weeklyMediumEnigmaStats.tab.length !== 0 ? weeklyMediumEnigmaStats.tab.map((stats: any, index: number) => (
<>
@ -309,13 +315,13 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)}
</div>
<div className="stats">
<h5>Enigme difficile</h5>
<h5><FormattedMessage id='score.titre.hard'/></h5>
<hr />
{weeklyHardEnigmaStats !== null ? (weeklyHardEnigmaStats.tab.length !== 0 ? weeklyHardEnigmaStats.tab.map((stats: any, index: number) => (
<>
@ -329,13 +335,13 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)}
</div>
<div className="stats">
<h5>En ligne</h5>
<h5><FormattedMessage id='score.titre.online'/></h5>
<hr />
{weeklyOnlineStats !== null ? (weeklyOnlineStats.tab.length !== 0 ? weeklyOnlineStats.tab.map((stats: any, index: number) => (
<>
@ -349,9 +355,9 @@ const ScoreBoard: React.FC<{ Player: User }> = ({ Player }) => {
</Row>
</>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)) : (
<p className='text-warning'>Nothing for the moment</p>
<p className='text-warning'><FormattedMessage id='score.nothing'/></p>
)}
</div>
</Carousel>

@ -1,5 +1,6 @@
import React, { useEffect, useState } from 'react';
/* Style */
import './Lobbies.css';
import "../Style/Global.css"
@ -11,7 +12,7 @@ import { socket } from '../SocketConfig';
import JSONParser from '../JSONParser';
import Person from '../model/Person';
import { useNavigationType } from 'react-router-dom';
import { FormattedMessage, useIntl } from 'react-intl';
class LobbyDataProps {
roomNum : string
@ -95,12 +96,16 @@ function Lobbies() {
socket.emit("lobby created")
}
const intl = useIntl();
return(
<div style={{display:'flex', flexDirection:'column', alignItems:'center'}}>
<input
type="text"
className='searchLobby'
placeholder="Rechercher un lobby..."
placeholder={intl.formatMessage({ id: 'placeholder.searchLobby' })}
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
style={{width:'80%', margin:'10px'}}
@ -119,7 +124,7 @@ function Lobbies() {
}}
onClick={handleShowAllClick}
>
Tous
<FormattedMessage id='lobbies.all'/>
</button>
<button
style={{
@ -132,12 +137,12 @@ function Lobbies() {
}}
onClick={handleShowAvailableClick}
>
Disponible
<FormattedMessage id='lobbies.dispo'/>
</button>
</div>
{filteredLobbiesToShow.length === 0 ? (
<button onClick={createLobby} className='ButtonNav' style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}>Créer une partie</button>
<button onClick={createLobby} className='ButtonNav' style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}><FormattedMessage id='play.create' /></button>
) : (
<div className="lobbyList">
{filteredLobbiesToShow.map((lobby, index) => (

@ -31,6 +31,7 @@ import Button from 'react-bootstrap/Button';
import ButtonGroup from 'react-bootstrap/ButtonGroup';
import Lobbies from './Lobbies';
import {basePath} from "../AdressSetup"
import { FormattedMessage } from 'react-intl';
@ -203,8 +204,8 @@ function NewPlay() {
<div className="leftContainer">
{/* Boutons pour jouer */}
<div className='NewbuttonGroupVertical'>
<button onClick={launchMastermind} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Jouer seul </button>
<button ref={target} onClick={launchEngimeJour} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Résoudre une énigme</button>
<button onClick={launchMastermind} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> <FormattedMessage id="play.jouerseul"/> </button>
<button ref={target} onClick={launchEngimeJour} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> <FormattedMessage id="play.enigme"/> </button>
<Overlay show={showOverlay} target={target.current} placement="bottom" rootClose={true} rootCloseEvent='click'>
{({ placement, arrowProps, show: _show, popper, ...props }) => (
<div
@ -217,18 +218,17 @@ function NewPlay() {
}}>
<ButtonGroup aria-label="difficulty">
<Button onClick={handleStartEasyGame}>Facile</Button>
<Button onClick={handleStartHardGame}>Difficile</Button>
<Button onClick={handleStartEasyGame}><FormattedMessage id='play.enigme.easy'/></Button>
<Button onClick={handleStartEasyGame}><FormattedMessage id='play.enigme.medium'/></Button>
<Button onClick={handleStartHardGame}><FormattedMessage id='play.enigme.hard'/></Button>
</ButtonGroup>
</div>
)}
</Overlay>
<button onClick={createLobby} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Créer une partie </button>
<button onClick={launchTuto} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Tutoriel </button>
{/* <button onClick= {() => navigate("/join")} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> Rejoindre </button> */}
{/* {goBackRoom != -1 && <button onClick={goBack} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}>Retourner à la partie</button>} */}
<button onClick={goBack} className="ButtonNavRejoin" style={{ display:returnVisibility}}>Retourner à la partie</button>
<button onClick={createLobby} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> <FormattedMessage id='play.create'/> </button>
<button onClick={launchTuto} className="ButtonNav" style={{backgroundColor: theme.colors.primary, borderColor: theme.colors.secondary}}> <FormattedMessage id='play.tuto'/> </button>
<button onClick={goBack} className="ButtonNavRejoin" style={{ display:returnVisibility}}><FormattedMessage id='play.return'/> </button>
</div>

@ -68,14 +68,40 @@
"sport_start": "The suspect plays at least",
"sport_end": "",
"navbar.play" : "Play",
"navbar.presentation":"Presentation",
"navbar.info":"Information",
"play.jouerseul": "Play alone",
"play.enigme": "Solve an enigma",
"play.enigme.easy": "Easy",
"play.enigme.medium": "Intermediate",
"play.enigme.hard": "Hard",
"play.create": "Create a game",
"play.tuto": "Tutorial",
"play.return": "Return to game",
"lobbies.all":"All",
"lobbies.dispo":"Disponible",
"placeholder.searchLobby": "Search for a lobby...",
"score.nbPlayed": "Games Played",
"score.best": "Best Score",
"score.moy": "Average Attempts",
"score.NbWin": "Number of Wins",
"score.ratio": "Win/Loss Ratio",
"score.bestTmp": "Best Time",
"score.moyTmp": "Average Time",
"score.nothing": "Nothing for the moment",
"score.titre.easy": "Easy Enigma",
"score.titre.int": "Intermediate Enigma",
"score.titre.hard": "Hard Enigma",
"score.online": "Online",
"score.tab.stat" : "Your Stats",
"informations" : "Information",

@ -67,6 +67,11 @@
"sport_start": "El sospechoso juega al menos",
"sport_end": "",
"navbar.play" : "Jugar",
"navbar.presentation":"Presentación",
"navbar.info":"Información",
"informations": "Información",
"info.intro.title": "Introducción al juego:",
"info.intro.text": "¡Bienvenido a nuestro emocionante juego de deducción, donde la intriga y la travesura se combinan en una emocionante aventura! Sumérgete en un mundo de misterio e intriga, donde cada interacción cuenta y cada pista te acerca a la verdad. Imagina un gráfico complejo donde cada vértice representa a una persona, cada eje una relación, y cada detalle cuenta. Te sumerges en un desafiante reto para descubrir quién entre estas personas es el misterioso asesino. Cada jugador tiene una pista crucial y solo el intercambio estratégico de estas pistas te llevará a resolver el misterio. Explora nuestra página de reglas para entender las complejidades del juego, descubre pistas que pueden guiarte y desarrolla estrategias inteligentes para identificar al culpable. ¡Manipula a tus amigos para ser el primero en descubrir quién es el asesino oculto en el gráfico! ¿Estás listo para aceptar el desafío y desenmascarar al asesino oculto en el gráfico? ¡Que comience la investigación!",

@ -67,15 +67,40 @@
"sport_start": "Le suspect pratique au moins du",
"sport_end": "",
"navbar.play" : "Jouer",
"navbar.presentation":"Présentation",
"navbar.info":"Informations",
"play.jouerseul": "Jouer seul",
"play.enigme": "Résoudre une énigme",
"play.enigme.easy": "Facile",
"play.enigme.medium": "Intermédiaire",
"play.enigme.hard": "Difficile",
"play.create":"Créer une partie",
"play.tuto": "Tutoriel",
"play.return": "Retourner à la partie",
"lobbies.all":"Tous",
"lobbies.dispo":"Disponibles",
"placeholder.searchLobby": "Rechercher un lobby...",
"score.nbPlayed" : "Parties Jouées",
"score.best" : "Best-Score",
"score.moy" : "Moyenne d'essai",
"score.NbWin" : "Nombre de victoire",
"score.ratio" : "Ratio V/D",
"score.bestTmp" : "Meilleur temps",
"score.moyTmp" : "Moyenne de temps",
"score.nothing" : "Rien pour le moment",
"score.titre.easy" : "Énigme facile",
"score.titre.int" : "Énigme intermédiaire",
"score.titre.hard" : "Énigme difficile",
"score.online" : "En ligne",
"score.tab.stat" : "Vos Stats",
"informations" : "Informations",
"info.intro.title":"Introduction au jeu :",

@ -68,6 +68,12 @@
"sport_start": "O suspeito joga pelo menos",
"sport_end": "",
"navbar.play" : "Jogar",
"navbar.presentation":"Apresentação",
"navbar.info":"Informação",
"informations" : "Informação",
"info.intro.title":"Introdução ao jogo:",
"info.intro.text":"Bem-vindo ao nosso empolgante jogo de dedução, onde intriga e malícia se unem em uma aventura emocionante! Mergulhe em um mundo de mistério e intriga, onde cada interação conta, e cada pista o aproxima da verdade. Imagine um gráfico complexo onde cada vértice representa uma pessoa, cada eixo uma relação, e cada detalhe conta. Você está imerso em um desafio desafiador para descobrir quem, entre esses indivíduos, é o misterioso assassino. Cada jogador tem uma pista crucial, e apenas o compartilhamento estratégico dessas pistas o levará a resolver o mistério. Explore nossa página de regras para entender as complexidades do jogo, descobrir pistas que podem orientá-lo e desenvolver estratégias inteligentes para identificar o culpado. Manipule seus amigos para ser o primeiro a descobrir quem é o assassino escondido no gráfico. Você está pronto para aceitar o desafio e desmascarar o assassino oculto no gráfico? Que a investigação comece!",

@ -68,6 +68,11 @@
"sport_start": "Подозреваемый играет по меньшей мере в",
"sport_end": "",
"navbar.play" : "Разыграть",
"navbar.presentation":"Презентационный",
"navbar.info":"Информация",
"informations" : "Информация",
"info.intro.title":"Введение в игру :",

Loading…
Cancel
Save