Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/i18n/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import English from '@/i18n/languages/english';
import French from '@/i18n/languages/french';
import Hindi from '@/i18n/languages/hindi';
import Portuguese from '@/i18n/languages/portuguese';
import { ChatError } from '@/utils/chatError';
Expand All @@ -9,6 +10,7 @@ export const LanguageMap = {
english: English,
hindi: Hindi,
portuguese: Portuguese,
french: French,
};

export type Language = keyof typeof LanguageMap;
Expand Down
156 changes: 156 additions & 0 deletions src/i18n/languages/french.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
/* eslint-disable max-len */

import type { AvailableTranslations } from '@/i18n/types';

export default {
GRAMMAR: {
AND: 'et',
OR: 'ou',
},

ACCESS_DENIED: 'Accès refusé.',
SCREW_YOU: ['Euh non', 'Dégage !', 'Va te faire voir.'],
CANCELLED: 'Cette action a été annulée.',
CMD_NOT_FOUND: 'Commande introuvable.',
CONFIRM: "Êtes-vous sûr ? Tapez 'confirm' pour confirmer.",
NOT_CONFIRMED: 'Confirmation non reçue à temps.',
INVALID_ALIAS: 'Alias invalide pour {{aliasFor}}.',
INVALID_ROOM_ID: 'ID de salon invalide.',
NO_DMS_COMMAND: 'Cette commande ne peut pas être utilisée dans les messages privés.',
NOT_IN_ROOM: "Vous n'êtes pas dans ce salon.",
PM_ONLY_COMMAND: 'Cette commande ne peut être utilisée que dans les messages privés.',
ROOM_ONLY_COMMAND: 'Cette commande ne peut être utilisée que dans un salon de discussion.',
TOO_LATE: 'Trop tard !',
USER_NOT_FOUND: 'Utilisateur introuvable !',
WRONG_ROOM: 'Mauvais salon.',
INVALID_ARGUMENTS: "Nombre d'arguments invalide.",
ENTRY_NOT_FOUND: 'Entrée introuvable.',

DISABLED: {
DB: 'La base de données est actuellement désactivée.',
},

MONS: {
NOT_FOUND: 'Pokémon {{name}} introuvable.',
},

GAME: {
ALREADY_JOINED: 'Vous avez déjà rejoint cette partie.',
ALREADY_STARTED: 'La partie a déjà commencé !',
ALREADY_WATCHING: 'Vous regardez déjà cette partie !',
COMMAND_NOT_ENABLED: "Cette commande n'est pas activée pour {{game}}.",
DRAW: "La partie entre {{players}} s'est terminée par une égalité !",
ENDED: 'La partie de {{game}} [{{id}}] a été terminée.',
ENDED_AUTOMATICALLY: "La partie de {{game}} [{{id}}] s'est terminée automatiquement.",
IMPOSTOR_ALERT: [
'Minute ! Votre ID ne correspond pas !',
'Un peu suspect, si vous voulez mon avis...',
"Attendez, vous n'êtes pas le bon joueur pour ça !",
"Vous n'êtes pas l'élu.",
],
INVALID_INPUT: 'Cette entrée ne semble pas fonctionner...',
INVALID_SIDE: 'Côté invalide choisi ! Les côtés valides sont : {{sides}}',
IN_PROGRESS: 'Cette partie est déjà en cours. Otaku.',
IS_FULL: "Il n'y a plus de place pour de nouveaux joueurs.",
NOT_FOUND: 'Impossible de trouver la partie en question...',
NOT_PLAYING: [
"Vous n'êtes pas un joueur !",
'Vous ne jouez pas, otaku.',
'Vous ne semblez pas être un joueur ?',
'Joueur introuvable. Ou quelque chose comme ça.',
],
NOT_STARTED: "La partie n'a pas encore commencé.",
CANNOT_START: 'Impossible de démarrer la partie ! Vérifiez les joueurs.',
NOT_WATCHING: 'Mais vous ne regardez pas cette partie...',
NOW_WATCHING: 'Vous regardez maintenant la partie de {{game}} entre {{players}}.',
NO_LONGER_WATCHING: 'Vous ne regardez plus la partie de {{game}} entre {{players}}.',
RESTORED: 'Partie {{id}} restaurée.',
RESTORING_WRONG_TYPE: 'Vous semblez restaurer un mauvais type de partie...',
STASHED: 'Partie {{id}} mise de côté avec succès.',
SUB: '{{out}} a été remplacé par {{in}} !',
WATCHING_NOTHING: 'Vous ne semblez pas avoir besoin de rejoindre quoi que ce soit...',
WON: '{{winner}} a gagné !',
WON_AGAINST: '{{winner}} a gagné la partie de {{game}} contre {{loser}}{{ctx}} !',
WAITING: 'En attente de votre tour...',
NON_PLAYER_OR_SPEC: 'Utilisateur non présent dans les joueurs/spectateurs',
YOUR_TURN: 'À votre tour !',
UPLOAD_FAILED: "Échec de l'envoi de la partie {{id}}.",
MOD_NOT_FOUND: "Aucun mod nommé '{{mod}}' trouvé.",
CANNOT_MOD: 'Les mods ne peuvent pas être appliqués à cette partie maintenant.',
APPLIED_MOD: '{{mod}} a été appliqué à la partie {{id}}.',
NO_THEME_SUPPORT: '{{game}} ne prend pas en charge les thèmes.',
INVALID_THEME: 'Thème invalide. Les thèmes valides sont : {{themes}}.',
SET_THEME: 'Le thème a été défini sur {{theme}}.',
CANNOT_LEAVE: 'Vous ne pouvez pas abandonner une partie en la fermant ! Essayez plutôt ``{{prefix}}{{game}} forfeit``.',
TIMER: {
PRIVATE: 'Psst c’est à vous de jouer dans {{game}} [{{id}}]',
PUBLIC: '{{user}} n’a pas joué dans {{game}} [{{id}}] depuis {{time}}...',
},

LIGHTS_OUT: {
INVALID_SIZE: 'Lights Out doit être entre 3x5 et 9x10.',
},
MASTERMIND: {
ENDED: 'La partie de Mastermind a été arrêtée pour {{player}}.',
FAILED: '{{player}} n’a pas réussi à deviner {{solution}} en {{cap}} essais.',
},
SCRABBLE: {
NO_SELECTED: "Vous devez d'abord sélectionner une case pour jouer. Utilisez les boutons !",
TILE_MISMATCH:
'Ce coup ne semble pas correspondre aux lettres sur le plateau - tentative de placement de {{placed}} sur {{actual}}.',
MISSING_LETTER: "Vous n'avez pas de lettre {{letter}}.",
INSUFFICIENT_LETTERS: 'Vous avez seulement {{actual}} lettres de {{letter}} au lieu des {{required}} nécessaires.',
BAG_SIZE: 'Il reste {{amount}} lettres dans le sac.',
TOO_MUCH_PASSING: "La partie s'est terminée après trop de passes !",
FIRST_MOVE_CENTER: 'Le premier coup doit passer par le centre du plateau !',
FIRST_MOVE_MULTIPLE_TILES: 'Vous ne pouvez pas jouer une seule lettre au premier coup.',
MUST_BE_CONNECTED: 'Tous les coups au Scrabble doivent être connectés aux autres lettres du plateau !',
MUST_PLAY_TILES: 'Votre coup doit jouer au moins une lettre.',
INVALID_WORD: '{{wordList}} n’est pas un mot valide.',
INVALID_WORDS: '{{wordList}} ne sont pas des mots valides.',
VALID_WORD: '{{word}} est un mot valide en {{mod}}.',
HOW_TO_BLANK:
"Bonjour, vous avez tiré une lettre blanche ! Une lettre blanche peut représenter n'importe quelle lettre, mais ne rapporte aucun point. Vous pouvez taper `BL[A]NK` (par exemple) pour utiliser la lettre blanche comme un A. Les autres syntaxes prises en charge sont `BL(A)NK`, ou ajouter une apostrophe après la lettre remplacée (ex : `BLA'NK`).",
},
},

COMMANDS: {
ALTS: 'Alts : {{alts}}',
BOOP: 'BOOP',
UPTIME: 'Le Bot fonctionne depuis {{time}}.',
RANK: 'Votre classement est {{rank}}.',
PONG: 'Pong !',
ROOM_NOT_GIVEN: 'Aucun salon reçu dans la minute',

EVAL: {
SUCCESS: 'Commande exécutée avec succès.',
ERROR: 'Erreur lors de l’exécution de la commande : {{error}}',
},

POINTS: {
ROOM_NO_POINTS: '{{room}} n’a pas les points activés.',
USER_NO_POINTS: '[[]]{{user}} n’a aucun point dans ce salon.',
USER_POINTS: '[[]]{{user}} a {{pointsList}} dans {{roomName}}.',
USER_POINTS_RANKED: '[[]]{{user}} est classé #{{rank}} avec {{pointsList}} dans {{roomName}}.',
HEADERS: {
USER: 'Utilisateur',
},
},

QUOTES: {
NO_QUOTES_FOUND: 'Aucune citation trouvée.',
},

TIMER: {
NONE_RUNNING: 'Vous n’avez aucun minuteur en cours !',
ENDS_IN: 'Votre minuteur se termine dans {{timeLeft}}{{comment}}.',
WOULD_HAVE_ENDED_IN: '(Le minuteur se serait terminé dans {{timeLeft}}.)',
CANCELLED: 'Votre minuteur{{comment}} a été annulé avec {{timeLeft}} restants.',
MAX_TIME: 'Les minuteurs peuvent être définis pour un maximum d’une semaine.',
INVALID_TIME: "Veuillez spécifier une durée pour le minuteur ! (N'oubliez pas d'inclure les unités)",
TIMER_END: '{{user}}, votre minuteur est terminé !',
TIMER_END_WITH_COMMENT: '{{user}}, votre minuteur est terminé ! Raison : {{comment}}',
TIMER_SET: 'Votre minuteur a été défini pour {{timeLeft}} à partir de maintenant.',
},
},
} satisfies AvailableTranslations;