From 0428ebe31056c60837e476837914956defa6ea65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=A9tan=20M-F?= Date: Sun, 29 Dec 2024 20:47:55 +0100 Subject: [PATCH 1/9] Add French language in parameters --- client/src/elm/MassiveDecks/Strings/Languages.elm | 5 +++++ client/src/elm/MassiveDecks/Strings/Languages/Model.elm | 1 + 2 files changed, 6 insertions(+) diff --git a/client/src/elm/MassiveDecks/Strings/Languages.elm b/client/src/elm/MassiveDecks/Strings/Languages.elm index ec69796f..6f832ab2 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages.elm @@ -38,6 +38,7 @@ import MassiveDecks.Strings.Languages.Ko as KoLang import MassiveDecks.Strings.Languages.Model exposing (..) import MassiveDecks.Strings.Languages.Pl as PlLang import MassiveDecks.Strings.Languages.PtBR as PtBRLang +import MassiveDecks.Strings.Languages.Fr as FrLang import MassiveDecks.Strings.Translation.Model as Translation import MassiveDecks.Util.Maybe as Maybe import MassiveDecks.Util.String as String @@ -57,6 +58,7 @@ languages = , Id , Es , Ko + , Fr ] @@ -234,3 +236,6 @@ pack language = Ko -> KoLang.pack + + Fr -> + FrLang.pack diff --git a/client/src/elm/MassiveDecks/Strings/Languages/Model.elm b/client/src/elm/MassiveDecks/Strings/Languages/Model.elm index d2e02418..1eaa783a 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/Model.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/Model.elm @@ -18,6 +18,7 @@ type Language | Id | Es | Ko + | Fr {-| It makes sense to apply the language and pass around the function, so we give that a nice name. From b88b526f19db866a1a98259cbd3b27b749c6cc98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=A9tan=20M-F?= Date: Sun, 29 Dec 2024 20:49:23 +0100 Subject: [PATCH 2/9] Initialize French language based on English --- .../elm/MassiveDecks/Strings/Languages/Fr.elm | 1434 +++++++++++++++++ 1 file changed, 1434 insertions(+) create mode 100644 client/src/elm/MassiveDecks/Strings/Languages/Fr.elm diff --git a/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm b/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm new file mode 100644 index 00000000..db92789e --- /dev/null +++ b/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm @@ -0,0 +1,1434 @@ +module MassiveDecks.Strings.Languages.Fr exposing (pack) + +{-| French localization. + +Contributors: + + - CubicOtter + +-} + +import MassiveDecks.Card.Source.BuiltIn.Model as BuiltIn +import MassiveDecks.Card.Source.Model as Source +import MassiveDecks.Strings exposing (MdString(..), Noun(..), Quantity(..)) +import MassiveDecks.Strings.Languages.En.Internal as Internal +import MassiveDecks.Strings.Languages.Model exposing (Language(..)) +import MassiveDecks.Strings.Translation as Translation +import MassiveDecks.Strings.Translation.Model as Translation exposing (Result(..)) + + +pack : Translation.Pack +pack = + Translation.pack + { lang = Fr + , code = "fr" + , name = French + , translate = Internal.translate + , recommended = "cah-base-en" |> BuiltIn.hardcoded |> Source.BuiltIn + } + +{-| The French translation-} + +translate : Maybe never -> MdString -> List (Translation.Result never) +translate _ mdString = + case mdString of + -- General + MassiveDecks -> + [ Text "Massive Decks" ] + + Close -> + [ Text "Fermer" ] + + Noun { noun, quantity } -> + case quantity of + Quantity 1 -> + case noun of + Call -> + [ Text "Carte Noire" ] + + Response -> + [ Text "Carte Blanche" ] + + Point -> + [ Text "Point d’Excellence" ] + + Player -> + [ Text "Joueur" ] + + Spectator -> + [ Text "Spectateur" ] + + _ -> + case noun of + Call -> + [ Text "Cartes Noires" ] + + Response -> + [ Text "Cartes Blanches" ] + + Point -> + [ Text "Points d’Excellence" ] + + Player -> + [ Text "Joueurs" ] + + Spectator -> + [ Text "Spectateurs" ] + + -- Start screen. + Version { clientVersion, serverVersion } -> + let + quote version = + [ Text "“", Text version, Text "”" ] + in + List.concat + [ [ Text "Version " ] + , clientVersion |> quote + , [ Text " / " ] + , serverVersion |> Maybe.map quote |> Maybe.withDefault [] + ] + + ShortGameDescription -> + [ Text "Un jeu d'ambiance décalé." ] + + WhatIsThis -> + [ Text "Qu’est-ce que ", ref MassiveDecks, Text "?" ] + + GameDescription -> + [ ref MassiveDecks + , Text " est un jeu d'ambiance basé sur " + , ref CardsAgainstHumanity + , Text ", développé par " + , ref RereadGames + , Text " et d'autres contributeurs—le jeu est open source sous " + , ref License + , Text ", donc vous pouvez aider à améliorer le jeu, regarder le code source, ou juste en apprendre plus sur " + , ref MDProject + , Text "." + ] + + NewGame -> + [ Text "Nouveau" ] + + NewGameDescription -> + [ Text "Commencer une nouvelle partie de ", ref MassiveDecks, Text "." ] + + FindPublicGame -> + [ Text "Rechercher" ] + + JoinPrivateGame -> + [ Text "Rejoindre" ] + + JoinPrivateGameDescription -> + [ Text "Rejoindre une partie à laquelle vous avez été invité." ] + + PlayGame -> + [ Text "Jouer" ] + + AboutTheGame -> + [ Text "À propos" ] + + AboutTheGameDescription -> + [ Text "En apprendre plus sur ", ref MassiveDecks, Text " et son développement." ] + + MDLogoDescription -> + [ Text "A ", ref (noun Call 1), Text " and a ", ref (noun Response 1), Text " marked with an “M” and a “D”." ] + + RereadLogoDescription -> + [ Text "A book circled by a recycling arrow." ] + + MDProject -> + [ Text "the GitHub project" ] + + License -> + [ Text "the AGPLv3 license" ] + + DevelopedByReread -> + [ Text "Developed by ", ref RereadGames, Text "." ] + + RereadGames -> + [ Text "Reread Games" ] + + NameLabel -> + [ Text "Your Name" ] + + NameInUse -> + [ Text "Someone else is using this name in the game—please try a different one." ] + + RejoinTitle -> + [ Text "Rejoin Game" ] + + RejoinGame { code } -> + [ Text "Rejoin “", GameCode { code = code } |> ref, Text "”." ] + + LobbyRequiresPassword -> + [ Text "You need a password to join this game. Try asking the person that invited you." ] + + YouWereKicked -> + [ Text "You were kicked from the game." ] + + ScrollToTop -> + [ Text "Scroll to the top." ] + + Copy -> + [ Text "Copy" ] + + -- Rules + CardsAgainstHumanity -> + [ Text "Cards Against Humanity" ] + + Rules -> + [ Text "How to play." ] + + RulesHand -> + [ Text "Each player has a hand of ", ref (nounUnknownQuantity Response), Text "." ] + + RulesCzar -> + [ Text "The first player begins as the " + , ref Czar + , Text ". the " + , ref Czar + , Text " reads the question or fill-in-the-blank phrase on the " + , ref (noun Call 1) + , Text " out loud." + ] + + RulesPlaying -> + [ Text "Everyone else answers the question or fills in the blank by choosing a " + , ref (noun Response 1) + , Text " from their hand to play for the round." + ] + + RulesJudging -> + [ Text "The answers are then shuffled and the " + , ref Czar + , Text " reads them out to the other players—for full effect, the " + , ref Czar + , Text " should usually re-read the " + , ref (noun Call 1) + , Text " before presenting each answer. The " + , ref Czar + , Text " then picks the funniest play, and whoever played it gets one " + , ref (noun Point 1) + , Text "." + ] + + RulesPickTitle -> + [ ref (Pick { numberOfCards = 2 }) ] + + RulesPick -> + [ Text "Some cards will need more than one " + , ref (noun Response 1) + , Text " as an answer. Play the cards in the order the " + , ref Czar + , Text " should read them—the order matters." + ] + + ExamplePickDescription -> + [ ref (nounUnknownQuantity Call) + , Text " like this will require picking more " + , ref (nounUnknownQuantity Response) + , Text ", but give you more to pick from." + ] + + RulesDraw -> + [ Text "Some " + , ref (nounUnknownQuantity Call) + , Text " will need even more " + , ref (nounUnknownQuantity Response) + , Text "—these will say " + , ref (Draw { numberOfCards = 2 }) + , Text " or more, and you’ll get that many extra cards before you play." + ] + + GameRulesTitle -> + [ Text "Game Rules" ] + + HouseRulesTitle -> + [ Text "House Rules" ] + + HouseRules -> + [ Text "You can change the way the game is played in a variety of ways. While setting up the game, choose " + , Text "as many house rules as you would like to use." + ] + + HouseRuleReboot -> + [ Text "Rebooting the Universe" ] + + HouseRuleRebootDescription { cost } -> + [ Text "At any time, players may trade in " + , Text (an cost) + , ref (nounMaybe Point cost) + , Text " to discard their hand and draw a new one." + ] + + HouseRuleRebootAction { cost } -> + [ Text "Spend " + , Text (asWord cost) + , Text " " + , ref (noun Point cost) + , Text " to discard your hand and draw a new one." + ] + + HouseRuleRebootCost -> + [ ref (noun Point 1), Text " Cost" ] + + HouseRuleRebootCostDescription -> + [ Text "How many ", ref (nounUnknownQuantity Point), Text " it costs to redraw." ] + + HouseRulePackingHeat -> + [ Text "Packing Heat" ] + + HouseRulePackingHeatDescription -> + [ Text "Any " + , ref (nounUnknownQuantity Call) + , Text " with " + , ref (Pick { numberOfCards = 2 }) + , Text " also get " + , ref (Draw { numberOfCards = 1 }) + , Text ", so everyone has more options." + ] + + HouseRuleComedyWriter -> + [ Text "Comedy Writer" ] + + HouseRuleComedyWriterDescription -> + [ Text "Add blank " + , ref (nounUnknownQuantity Response) + , Text " where players can write custom responses." + ] + + HouseRuleComedyWriterNumber -> + [ Text "Blank ", ref (nounUnknownQuantity Response) ] + + HouseRuleComedyWriterNumberDescription -> + [ Text "The number of Blank " + , ref (nounUnknownQuantity Response) + , Text " that will be in the game." + ] + + HouseRuleComedyWriterExclusive -> + [ Text "Only Blank ", ref (nounUnknownQuantity Response) ] + + HouseRuleComedyWriterExclusiveDescription -> + [ Text "If enabled, all other " + , ref (nounUnknownQuantity Response) + , Text " will be ignored, only blank ones will exist in-game." + ] + + HouseRuleRandoCardrissian -> + [ Text "Rando Cardrissian" ] + + HouseRuleRandoCardrissianDescription -> + [ Text "Every round, the first " + , ref (noun Response 1) + , Text " in the deck will be played as an answer. This play belongs to an AI player named " + , Text "Rando Cardrissian, and if he wins the game, all players go home in a state of everlasting shame." + ] + + HouseRuleRandoCardrissianNumber -> + [ Text "AI Players" ] + + HouseRuleRandoCardrissianNumberDescription -> + [ Text "The number of AI players that will be in the game." ] + + HouseRuleNeverHaveIEver -> + [ Text "Never Have I Ever" ] + + HouseRuleNeverHaveIEverDescription -> + [ Text "At any time, a player may discard cards they don't understand, however, they must confess their " + , Text "ignorance: the card is shared publicly." + ] + + HouseRuleHappyEnding -> + [ Text "Happy Ending" ] + + HouseRuleHappyEndingDescription -> + [ Text "When the game ends, the final round is a 'Make a Haiku' ", ref (noun Call 1), Text "." ] + + HouseRuleCzarChoices -> + [ ref Czar, Text " Choices" ] + + HouseRuleCzarChoicesDescription -> + [ Text "At the beginning of the round, the " + , ref Czar + , Text " draws multiple " + , ref (nounUnknownQuantity Call) + , Text " and chooses one of them, and/or has the choice to write their own." + ] + + HouseRuleCzarChoicesNumber -> + [ Text "Number" ] + + HouseRuleCzarChoicesNumberDescription -> + [ Text "The number of choices to give the ", ref Czar, Text " to pick between." ] + + HouseRuleCzarChoicesCustom -> + [ Text "Custom" ] + + HouseRuleCzarChoicesCustomDescription -> + [ Text "If the ", ref Czar, Text " can write custom calls. This takes up one of the choices." ] + + HouseRuleWinnersPick -> + [ Text "Winner's Pick" ] + + HouseRuleWinnersPickDescription -> + [ Text "The winner of each round becomes the ", ref Czar, Text " for the next round." ] + + SeeAlso { rule } -> + [ Text "See also: ", ref rule ] + + MustBeMoreThanOrEqualValidationError { min } -> + [ Text "The value must be at least ", Text (String.fromInt min), Text "." ] + + MustBeLessThanOrEqualValidationError { max } -> + [ Text "The value must be at most ", Text (String.fromInt max), Text "." ] + + SetValue { value } -> + [ Text "Set the value to ", Text (String.fromInt value), Text "." ] + + CantBeEmpty -> + [ Text "This can't be empty." ] + + SettingsTitle -> + [ Text "Settings" ] + + LanguageSetting -> + [ Text "Language" ] + + MissingLanguage -> + [ Text "Don’t see your language? ", ref TranslationBeg ] + + AutonymFormat { autonym } -> + [ Text "(", Text autonym, Text ")" ] + + TranslationBeg -> + [ Text "Help translate " + , ref MassiveDecks + , Text "!" + ] + + CardSizeSetting -> + [ Text "Compact Cards" ] + + CardSizeExplanation -> + [ Text "Adjust how big cards are—this can be useful on small screens to scroll less." ] + + AutoAdvanceSetting -> + [ Text "Automatically Advance Round" ] + + AutoAdvanceExplanation -> + [ Text "When a round ends, automatically advance to the next one rather than waiting." ] + + SpeechSetting -> + [ Text "Text To Speech" ] + + SpeechExplanation -> + [ Text "Read out cards using text to speech." ] + + SpeechNotSupportedExplanation -> + [ Text "Your browser does not support text to speech, or has no voices installed." ] + + VoiceSetting -> + [ Text "Speech Voice" ] + + NotificationsSetting -> + [ Text "Browser Notifications" ] + + NotificationsExplanation -> + [ Text "Alert you when you need to do something in the game using browser notifications." + ] + + NotificationsUnsupportedExplanation -> + [ Text "Your browser doesn't support notifications." ] + + NotificationsBrowserPermissions -> + [ Text "You will need to give permission for " + , ref MassiveDecks + , Text " to notify you. This will only be used while the game is open and while you have this enabled." + ] + + NotificationOnlyWhenHiddenSetting -> + [ Text "Only When Hidden" ] + + NotificationsOnlyWhenHiddenExplanation -> + [ Text "Only send notifications when you are not looking at the page (e.g: on another tab or minimised)." ] + + NotificationsOnlyWhenHiddenUnsupportedExplanation -> + [ Text "Your browser doesn't support checking for page visibility." ] + + -- Terms + Czar -> + [ Text "Card Czar" ] + + CzarDescription -> + [ Text "The player judging the round." ] + + CallDescription -> + [ Text "A black card with a question or fill-in-the-blank phrase." ] + + ResponseDescription -> + [ Text "A white card with a phrase played into rounds." ] + + PointDescription -> + [ Text "A point—having more means winning." ] + + GameCodeTerm -> + [ Text "Game Code" ] + + GameCodeDescription -> + [ Text "A code that lets other people find and join your game." ] + + GameCode { code } -> + [ Text code ] + + GameCodeSpecificDescription -> + [ Text "Give this game code to people and they can join the game." ] + + GameCodeHowToAcquire -> + [ Text "Ask the person who invited you for the game’s ", ref GameCodeTerm, Text "." ] + + Deck -> + [ Text "Deck" ] + + DeckSource -> + [ ref Deck, Text " Source" ] + + DeckLanguage { language } -> + [ Text "in ", Text language ] + + DeckAuthor { author } -> + [ Text "by ", Text author ] + + DeckTranslator { translator } -> + [ Text "translation by ", Text translator ] + + StillPlaying -> + [ Text "Playing" ] + + PlayingDescription -> + [ Text "This player is in the round, but has not yet submitted a play." ] + + Played -> + [ Text "Played" ] + + PlayedDescription -> + [ Text "This player has submitted their play for the round." ] + + -- Lobby Browser + LobbyBrowserTitle -> + [ Text "Public Games" ] + + NoPublicGames -> + [ Text "No public games available." ] + + PlayingGame -> + [ Text "Games that are in progress." ] + + SettingUpGame -> + [ Text "Games that have not yet started." ] + + StartYourOwn -> + [ Text "Start a new game?" ] + + -- Spectation + JoinTheGame -> + [ Text "Join the game!" ] + + ToggleAdvertDescription -> + [ Text "Toggle showing the information on joining the game." ] + + -- Cards + Pick numberOfCards -> + [ Text "Pick", ref (NumberOfCards numberOfCards) ] + + Draw numberOfCards -> + [ Text "Draw", ref (NumberOfCards numberOfCards) ] + + PickDescription { numberOfCards } -> + [ Text "You need to play " + , Text (asWord numberOfCards) + , Text " " + , ref (noun Response numberOfCards) + , Text "." + ] + + DrawDescription { numberOfCards } -> + [ Text "You get " + , Text (asWord numberOfCards) + , Text " extra " + , ref (noun Response numberOfCards) + , Text " before playing." + ] + + NumberOfCards { numberOfCards } -> + [ Text (String.fromInt numberOfCards) ] + + -- Lobby + LobbyNameLabel -> + [ Text "Game Name" ] + + DefaultLobbyName { owner } -> + [ Text owner, Text "'s Game" ] + + Invite -> + [ Text "Invite players to the game." ] + + InviteLinkHelp -> + [ Text "Send this link to players to invite them to the game, or let them scan the QR code below." ] + + InviteExplanation { gameCode, password } -> + let + extra = + password + |> Maybe.map + (\p -> + [ Text " and the game password “" + , Text p + , Text "”" + ] + ) + |> Maybe.withDefault [] + in + List.concat + [ [ Text "Your game code is " + , ref (GameCode { code = gameCode }) + , Text ". Players can join the game by loading " + , ref MassiveDecks + , Text " and entering that code" + ] + , extra + , [ Text "." + ] + ] + + Cast -> + [ Text "Cast to TV." ] + + CastConnecting -> + [ Text "Connecting…" ] + + CastConnected { deviceName } -> + [ Text "Casting to ", Text deviceName, Text "." ] + + Players -> + [ ref (nounUnknownQuantity Player) ] + + PlayersDescription -> + [ Text "Users playing the game." ] + + Spectators -> + [ ref (nounUnknownQuantity Spectator) ] + + SpectatorsDescription -> + [ Text "Users watching the game without playing." ] + + Left -> + [ Text "Left" ] + + LeftDescription -> + [ Text "Users who have left the game." ] + + Away -> + [ Text "Away" ] + + AwayDescription -> + [ Text "This user is temporarily away from the game." ] + + Disconnected -> + [ Text "Disconnected" ] + + DisconnectedDescription -> + [ Text "This user is not connected to the game." ] + + Privileged -> + [ Text "Owner" ] + + PrivilegedDescription -> + [ Text "This user can adjust settings in the game." ] + + Ai -> + [ Text "AI" ] + + AiDescription -> + [ Text "This player is controlled by the computer." ] + + Score { total } -> + [ Text (String.fromInt total) ] + + ScoreDescription -> + [ Text "The number of " + , ref (nounUnknownQuantity Point) + , Text " this player has." + ] + + Likes { total } -> + [ Text (String.fromInt total) ] + + LikesDescription -> + [ Text "The number of likes received." + ] + + ToggleUserList -> + [ Text "Show or hide the scoreboard." ] + + GameMenu -> + [ Text "Game menu." ] + + UnknownUser -> + [ Text "An unknown user" ] + + InvitePlayers -> + [ Text "Invite Players" ] + + InvitePlayersDescription -> + [ Text "Get the game code/link/qr code to let others join this game." ] + + SetAway -> + [ Text "Mark As Away" ] + + SetBack -> + [ Text "Mark As Back" ] + + LeaveGame -> + [ Text "Leave Game" ] + + LeaveGameDescription -> + [ Text "Permanently leave the game." ] + + Spectate -> + [ Text "Spectator View" ] + + SpectateDescription -> + [ Text "Open a spectator's view of the game in a new tab/window." ] + + BecomeSpectator -> + [ Text "Spectate" ] + + BecomeSpectatorDescription -> + [ Text "Just watch the game without playing." ] + + BecomePlayer -> + [ Text "Play" ] + + BecomePlayerDescription -> + [ Text "Play in the game." ] + + EndGame -> + [ Text "End Game" ] + + EndGameDescription -> + [ Text "End the game now." ] + + ReturnViewToGame -> + [ Text "Return to game" ] + + ReturnViewToGameDescription -> + [ Text "Return to the main game view." ] + + ViewConfiguration -> + [ Text "Configure" ] + + ViewConfigurationDescription -> + [ Text "Switch to view the game's configuration." ] + + KickUser -> + [ Text "Kick" ] + + Promote -> + [ Text "Promote" ] + + Demote -> + [ Text "Demote" ] + + -- Notifications + UserConnected { username } -> + [ Text username, Text " has reconnected to the game." ] + + UserDisconnected { username } -> + [ Text username, Text " has disconnected from the game." ] + + UserJoined { username } -> + [ Text username, Text " has joined the game." ] + + UserLeft { username } -> + [ Text username, Text " has left the game." ] + + UserKicked { username } -> + [ Text username, Text " has been kicked from the game." ] + + Dismiss -> + [ Text "Dismiss" ] + + -- Configuration + ConfigureTitle -> + [ Text "Game Setup" ] + + NoDecks -> + [ Segment [ Text "No decks. " ] + , Text " " + , Segment [ Text "You will need to add at least one to the game." ] + ] + + NoDecksHint -> + [ Text "Not sure? Add the original ", raw CardsAgainstHumanity, Text " deck." ] + + WaitForDecks -> + [ Text "The decks must load before you can start the game." ] + + MissingCardType { cardType } -> + [ Text "None of your decks contain any " + , ref (nounUnknownQuantity cardType) + , Text ". You need a deck that does to start the game." + ] + + NotEnoughCardsOfType { cardType, needed, have } -> + [ Text "For the number of players in the game, you need at least " + , Text (needed |> String.fromInt) + , Text " " + , ref (noun cardType needed) + , Text " but you only have " + , Text (have |> String.fromInt) + , Text "." + ] + + AddBlankCards { amount } -> + [ Text "Add " + , amount |> String.fromInt |> Text + , Text " blank " + , ref (noun Response amount) + ] + + AddDeck -> + [ Text "Add deck." ] + + RemoveDeck -> + [ Text "Remove deck." ] + + SourceNotFound { source } -> + [ ref source, Text " doesn't recognise the deck you asked for. Check the details you gave are correct." ] + + SourceServiceFailure { source } -> + [ ref source, Text " failed to provide the deck. Please try again later or try another source." ] + + ManyDecks -> + [ Text "Many Decks" ] + + ManyDecksDeckCodeTitle -> + [ Text "Deck Code" ] + + ManyDecksDeckCodeShort -> + [ Text "A deck code must be at least five characters long." ] + + ManyDecksWhereToGet -> + [ Text "You can create and find decks to play with at ", ref ManyDecks, Text "." ] + + JsonAgainstHumanity -> + [ Text "JSON Against Humanity" ] + + JsonAgainstHumanityAbout -> + [ Text "Decks provided by ", ref JsonAgainstHumanity ] + + BuiltIn -> + [ Text "Built-in" ] + + APlayer -> + [ Text "A Player" ] + + Generated { by } -> + [ Text "Generated by ", ref by ] + + DeckAlreadyAdded -> + [ Text "This deck is already in the game." ] + + ConfigureDecks -> + [ Text "Decks" ] + + ConfigureRules -> + [ Text "Rules" ] + + ConfigureTimeLimits -> + [ Text "Time Limits" ] + + ConfigurePrivacy -> + [ Text "Privacy" ] + + HandSize -> + [ Text "Hand Size" ] + + HandSizeDescription -> + [ Text "The base number of cards each player has in their hand during the game." ] + + ScoreLimit -> + [ ref (noun Point 1), Text " Limit" ] + + ScoreLimitDescription -> + [ Segment + [ Text "The number of " + , ref (nounUnknownQuantity Point) + , Text " a player needs to win the game." + ] + , Text " " + , Segment [ Text "If disabled, the game continues indefinitely." ] + ] + + UnsavedChangesWarning -> + [ Text "You have unsaved changes to the configuration, they must be saved first if you want them to apply " + , Text "to the game." + ] + + SaveChanges -> + [ Text "Save your changes." ] + + RevertChanges -> + [ Text "Discard your unsaved changes." ] + + NeedAtLeastOneDeck -> + [ Text "You need a deck of cards added to start the game." ] + + NeedAtLeastThreePlayers -> + [ Text "You need at least three players to start the game." ] + + NeedAtLeastOneHuman -> + [ Text "Unfortunately computer players can't be the " + , ref Czar + , Text ", so you need at least one human player to start the game." + , Text " (Although only one human might be a bit boring!)" + ] + + RandoCantWrite -> + [ Text "Computer players can't write their own cards." ] + + DisableComedyWriter -> + [ Text "Disable ", ref HouseRuleComedyWriter ] + + DisableRando -> + [ Text "Disable ", ref HouseRuleRandoCardrissian ] + + AddAnAiPlayer -> + [ Text "Add an AI player to the game." ] + + PasswordShared -> + [ Text "Anyone in the game can see the password! " + , Text "Hiding it above only affects you (useful if streaming, etc…)." + ] + + PasswordNotSecured -> + [ Text "Game passwords are " + , Em [ Text "not" ] + , Text " stored securely—given this, please " + , Em [ Text "do not" ] + , Text " use serious passwords you use elsewhere!" + ] + + LobbyPassword -> + [ Text "Game Password" ] + + LobbyPasswordDescription -> + [ Text "A password the users must enter before they can join the game." ] + + AudienceMode -> + [ Text "Audience Mode" ] + + AudienceModeDescription -> + [ Text "If enabled, newly joining users will be spectators by default, and only you will be able to " + , Text "make them players." + ] + + StartGame -> + [ Text "Start Game" ] + + Public -> + [ Text "Public Game" ] + + PublicDescription -> + [ Text "If enabled, the game will show up in the public game list for anyone to find." ] + + ApplyConfiguration -> + [ Text "Apply this change." ] + + AppliedConfiguration -> + [ Text "Saved." ] + + InvalidConfiguration -> + [ Text "This configuration value isn't valid." ] + + Automatic -> + [ Text "Automatically Mark Players As Away" ] + + AutomaticDescription -> + [ Text "If enabled, when the time limit runs out players will automatically be marked as away. " + , Text "Otherwise someone will need to press the button to do so." + ] + + TimeLimit { stage } -> + [ ref stage, Text " Time Limit" ] + + StartingTimeLimitDescription -> + [ Text "How long (in seconds) the " + , ref Czar + , Text " has to choose/write a " + , ref (noun Call 1) + , Text ", when the " + , raw HouseRuleCzarChoices + , Text " house rule is enabled." + ] + + PlayingTimeLimitDescription -> + [ Text "How long (in seconds) the ", ref Players, Text " have to make their plays." ] + + PlayingAfterDescription -> + [ Text "How long (in seconds) players have to change their play before the next stage starts." ] + + RevealingTimeLimitDescription -> + [ Text "How long (in seconds) the ", ref Czar, Text " has to reveal the plays." ] + + RevealingAfterDescription -> + [ Text "How long (in seconds) to wait after the last card is revealed before the next stage starts." ] + + JudgingTimeLimitDescription -> + [ Text "How long (in seconds) the ", ref Czar, Text " has to judge the plays." ] + + CompleteTimeLimitDescription -> + [ Text "How much time (in seconds) to wait after one round ends before starting the next one." ] + + RevealingEnabledTitle -> + [ Text "Czar Reveals Plays" ] + + RevealingEnabled -> + [ Text "If this is enabled, the " + , ref Czar + , Text " reveals one play at a time before picking a winner." + ] + + DuringTitle -> + [ Text "Time Limit" ] + + AfterTitle -> + [ Text "After" ] + + Conflict -> + [ Text "Conflict" ] + + ConflictDescription -> + [ Text "Someone else made changes to this while you were also making changes. " + , Text "Please choose if you want to keep your changes or theirs." + ] + + YourChanges -> + [ Text "Your Changes" ] + + TheirChanges -> + [ Text "Their Changes" ] + + ConfigurationDisabledWhileInGame -> + [ Text "While the game in progress, you can't change the configuration." ] + + ConfigurationDisabledIfNotPrivileged -> + [ Text "You can't change the configuration of this game." ] + + ConfigureNextGame -> + [ Text "Configure Next Game" ] + + -- Game + PickCall -> + [ Text "Pick this ", ref (noun Call 1), Text " for the others to play into for the round." ] + + WriteCall -> + [ Text "Write a custom ", ref (noun Call 1), Text " for the others to play into for the round." ] + + SubmitPlay -> + [ Text "Give these cards to the ", ref Czar, Text " as your play for the round." ] + + TakeBackPlay -> + [ Text "Take back your cards to change your play for the round." ] + + JudgePlay -> + [ Text "Pick this play as the winner for the round." ] + + LikePlay -> + [ Text "Add a like to this play." ] + + AdvanceRound -> + [ Text "Next round." ] + + Starting -> + [ raw HouseRuleCzarChoices ] + + Playing -> + [ Text "Playing" ] + + Revealing -> + [ Text "Revealing" ] + + Judging -> + [ Text "Judging" ] + + Complete -> + [ Text "Finished" ] + + ViewGameHistoryAction -> + [ Text "View previous rounds from this game." ] + + ViewHelpAction -> + [ Text "Help" ] + + EnforceTimeLimitAction -> + [ Text "Set all players the game is waiting on to away and skip them until they return." ] + + Blank -> + [ Text "Blank" ] + + RoundStarted -> + [ Text "Round Started" ] + + JudgingStarted -> + [ Text "Judging Started" ] + + Paused -> + [ Text "The game has been paused because there are not enough active players to continue." + , Text "When someone joins or returns it will continue automatically." + ] + + ClientAway -> + [ Text "You are currently set as away from the game, and are not playing." ] + + Discard -> + [ Text "Discard the selected card, revealing it to the other users in the game." ] + + Discarded { player } -> + [ Text player + , Text " discarded the following card:" + ] + + -- Instructions + PickCallInstruction -> + [ Text "Pick a ", ref (noun Call 1), Text " for the others to play into." ] + + WaitForCallInstruction -> + [ Text "You are waiting for the " + , ref Czar + , Text " to pick a " + , ref (noun Call 1) + , Text " for you to play into." + ] + + PlayInstruction { numberOfCards } -> + [ Text "You need to choose " + , Text (asWord numberOfCards) + , Text " more " + , ref (noun Response numberOfCards) + , Text " from your hand into this round before you can submit your play." + ] + + SubmitInstruction -> + [ Text "You need to submit your play for this round." ] + + WaitingForPlaysInstruction -> + [ Text "You are waiting for other players to play into the round." ] + + CzarsDontPlayInstruction -> + [ Text "You are the " + , ref Czar + , Text " for the round - you don't submit any " + , ref (nounUnknownQuantity Response) + , Text ". Instead you choose the winner once everyone else has submitted theirs." + ] + + NotInRoundInstruction -> + [ Text "You are not in this round. You will play in the next one unless you are set to away." ] + + RevealPlaysInstruction -> + [ Text "Click on the plays to flip them, then pick the one you think is best." ] + + WaitingForCzarInstruction -> + [ Text "You can like plays while you wait for the ", ref Czar, Text " to reveal the plays and pick a winner for the round." ] + + AdvanceRoundInstruction -> + [ Text "The next round has started, you can advance." ] + + -- 404 Unknown + UnknownPageTitle -> + [ Text "404 Error: Unknown page." ] + + GoBackHome -> + [ Text "Go to the main page." ] + + -- Actions + Refresh -> + [ Text "Refresh" ] + + Accept -> + [ Text "OK" ] + + -- Editor + AddSlot -> + [ Text "Add ", ref Blank ] + + AddText -> + [ Text "Add Text" ] + + EditText -> + [ Text "Edit" ] + + EditSlotIndex -> + [ Text "Edit" ] + + MoveLeft -> + [ Text "Move Earlier" ] + + Remove -> + [ Text "Remove" ] + + MoveRight -> + [ Text "Move Later" ] + + Normal -> + [ Text "Normal" ] + + Capitalise -> + [ Text "Capitalise" ] + + UpperCase -> + [ Text "Upper Case" ] + + Emphasise -> + [ Text "Emphasise" ] + + MustContainAtLeastOneSlot -> + [ Text "You must have at least one ", ref Blank, Text " for people to play into." ] + + SlotIndexExplanation -> + [ Text "What number " + , ref (noun Response 1) + , Text " played will be used for this " + , ref Blank + , Text ". This lets you repeat a " + , ref (noun Response 1) + , Text "." + ] + + -- Errors + Error -> + [ Text "Error" ] + + ErrorHelp -> + [ Text "The game server might be down, or this might be a bug. Refreshing the page should get you going " + , Text "again. More details can be found below." + ] + + ErrorHelpTitle -> + [ Text "Sorry, something went wrong." ] + + ErrorCheckOutOfBand -> + [ Text "Please check ", ref TwitterHandle, Text " for updates and service status. The game server will go down for a short time when a new version is released, so if you see a recent update, try again in a few minutes." ] + + TwitterHandle -> + [ Text "@Massive_Decks" ] + + ReportError -> + [ Text "Report Bug" ] + + ReportErrorDescription -> + [ Text "Let the developers know about a bug you encountered so they can fix it." ] + + ReportErrorBody -> + [ Text "I was [replace with a short explanation of what you were doing] when I got the following error:" ] + + BadUrlError -> + [ Text "We tried to make a request to an invalid page." ] + + TimeoutError -> + [ Text "The server didn’t respond for too long. It may be down, please try again after a short delay." ] + + NetworkError -> + [ Text "Your internet connection was interrupted." ] + + ServerDownError -> + [ Text "The game server is currently offline. Please try again later." ] + + BadStatusError -> + [ Text "The server gave a response we didn’t expect." ] + + BadPayloadError -> + [ Text "The server gave a response we didn’t understand." ] + + PatchError -> + [ Text "The server gave a patch we couldn't apply." ] + + VersionMismatch -> + [ Text "The server gave a config change for a different version than we expected." ] + + CastError -> + [ Text "Sorry, something went wrong trying to connect to the game." ] + + ActionExecutionError -> + [ Text "You can't perform that action." ] + + IncorrectPlayerRoleError { role, expected } -> + [ Text "You need to be a ", ref expected, Text " to do that, but you are a ", ref role, Text "." ] + + IncorrectUserRoleError { role, expected } -> + [ Text "You need to be a ", ref expected, Text " to do that, but you are a ", ref role, Text "." ] + + IncorrectRoundStageError { stage, expected } -> + [ Text "The round needs to be at the ", ref expected, Text " stage to do that, but it is at the ", ref stage, Text " stage." ] + + ConfigEditConflictError -> + [ Text "Someone else changed the configuration before you, your change was not saved." ] + + UnprivilegedError -> + [ Text "You don't have the privileges to do that." ] + + GameNotStartedError -> + [ Text "The game needs to started to do that." ] + + InvalidActionError { reason } -> + [ Text "The server didn't understand a request from the client. Details: ", Text reason ] + + AuthenticationError -> + [ Text "You can't join that game." ] + + IncorrectIssuerError -> + [ Text "Your credentials to join this game are out of date, the game no longer exists." ] + + InvalidAuthenticationError -> + [ Text "Your credentials to join this game are corrupt." ] + + InvalidLobbyPasswordError -> + [ Text "The game password you gave was wrong. Try typing it again and if it still doesn't work, ask the person who invited you again." ] + + AlreadyLeftError -> + [ Text "You have already left this game." ] + + LobbyNotFoundError -> + [ Text "That game doesn't exist." ] + + LobbyClosedError { gameCode } -> + [ Text "The game you wish to join (", ref (GameCode { code = gameCode }), Text ") has ended." ] + + LobbyDoesNotExistError { gameCode } -> + [ Text "The game code you entered (" + , ref (GameCode { code = gameCode }) + , Text ") doesn't exist. " + , Text "Try typing it again and if it still doesn't work, ask the person who invited you again." + ] + + RegistrationError -> + [ Text "Problem while joining the game." ] + + UsernameAlreadyInUseError { username } -> + [ Text "Someone is already using the username “" + , Text username + , Text "”—try a different name." + ] + + GameError -> + [ Text "Something has gone wrong in the game." ] + + OutOfCardsError -> + [ Text "There were not enough cards in the deck to deal everyone a hand! Try adding more decks in the game configuration." ] + + -- Language Names + English -> + [ Text "English" ] + + BritishEnglish -> + [ Text "English (British)" ] + + Italian -> + [ Text "Italian" ] + + BrazilianPortuguese -> + [ Text "Portuguese (Brazilian)" ] + + German -> + [ Text "German (Formal)" ] + + GermanInformal -> + [ Text "German (Informal)" ] + + Polish -> + [ Text "Polish" ] + + Indonesian -> + [ Text "Indonesian" ] + + Spanish -> + [ Text "Spanish" ] + + Korean -> + [ Text "Korean" ] + + + +{- Private -} + + +raw : MdString -> Translation.Result never +raw = + Raw Nothing + + +ref : MdString -> Translation.Result never +ref = + Ref Nothing + + +an : Maybe Int -> String +an amount = + case amount of + Just 1 -> + "an " + + _ -> + "" + + +{-| Take a number and give back the name of that number. Falls back to the number when it gets too big. +-} +asWord : Int -> String +asWord number = + case number of + 0 -> + "zero" + + 1 -> + "one" + + 2 -> + "two" + + 3 -> + "three" + + 4 -> + "four" + + 5 -> + "five" + + 6 -> + "six" + + 7 -> + "seven" + + 8 -> + "eight" + + 9 -> + "nine" + + 10 -> + "ten" + + 11 -> + "eleven" + + 12 -> + "twelve" + + other -> + String.fromInt other + From 0fcba8d320c287e8ad498973135ce2398c3d7e7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=A9tan=20M-F?= Date: Sun, 29 Dec 2024 21:05:28 +0100 Subject: [PATCH 3/9] First batch of French translation --- .../elm/MassiveDecks/Strings/Languages/Fr.elm | 183 +++++++++--------- 1 file changed, 92 insertions(+), 91 deletions(-) diff --git a/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm b/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm index db92789e..82d29bd4 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm @@ -132,83 +132,83 @@ translate _ mdString = [ Text "En apprendre plus sur ", ref MassiveDecks, Text " et son développement." ] MDLogoDescription -> - [ Text "A ", ref (noun Call 1), Text " and a ", ref (noun Response 1), Text " marked with an “M” and a “D”." ] + [ Text "Une ", ref (noun Call 1), Text " et une ", ref (noun Response 1), Text " marquées avec un « M » et un « D »." ] RereadLogoDescription -> - [ Text "A book circled by a recycling arrow." ] + [ Text "Un livre entouré d'une flèche de recyclage." ] MDProject -> - [ Text "the GitHub project" ] + [ Text "le projet GitHub" ] License -> - [ Text "the AGPLv3 license" ] + [ Text "la licence AGPLv3" ] DevelopedByReread -> - [ Text "Developed by ", ref RereadGames, Text "." ] + [ Text "Développé par ", ref RereadGames, Text "." ] RereadGames -> [ Text "Reread Games" ] NameLabel -> - [ Text "Your Name" ] + [ Text "Votre nom" ] NameInUse -> - [ Text "Someone else is using this name in the game—please try a different one." ] + [ Text "Quelqu'un d'autre utilise ce nom dans le jeu—veuillez en essayer un autre." ] RejoinTitle -> - [ Text "Rejoin Game" ] + [ Text "Rejoindre la partie" ] RejoinGame { code } -> - [ Text "Rejoin “", GameCode { code = code } |> ref, Text "”." ] + [ Text "Rejoindre « ", GameCode { code = code } |> ref, Text " »." ] LobbyRequiresPassword -> - [ Text "You need a password to join this game. Try asking the person that invited you." ] + [ Text "Vous avez besoin d'un mot de passe pour rejoindre cette partie. Essayez de demander à la personne qui vous a invité." ] YouWereKicked -> - [ Text "You were kicked from the game." ] + [ Text "Vous avez été expulsé de la partie." ] ScrollToTop -> - [ Text "Scroll to the top." ] + [ Text "Revenir en haut." ] Copy -> - [ Text "Copy" ] + [ Text "Copier" ] -- Rules CardsAgainstHumanity -> [ Text "Cards Against Humanity" ] Rules -> - [ Text "How to play." ] + [ Text "Comment jouer." ] RulesHand -> - [ Text "Each player has a hand of ", ref (nounUnknownQuantity Response), Text "." ] + [ Text "Chaque joueur a une main de ", ref (nounUnknownQuantity Response), Text "." ] RulesCzar -> - [ Text "The first player begins as the " + [ Text "Le premier joueur commence en tant que " , ref Czar - , Text ". the " + , Text ". Le " , ref Czar - , Text " reads the question or fill-in-the-blank phrase on the " + , Text " lit la question ou la phrase à compléter sur la " , ref (noun Call 1) - , Text " out loud." + , Text " à voix haute." ] RulesPlaying -> - [ Text "Everyone else answers the question or fills in the blank by choosing a " + [ Text "Tous les autres répondent à la question ou complètent la phrase en choisissant une " , ref (noun Response 1) - , Text " from their hand to play for the round." + , Text " de leur main à jouer pour le tour." ] RulesJudging -> - [ Text "The answers are then shuffled and the " + [ Text "Les réponses sont ensuite mélangées, et le " , ref Czar - , Text " reads them out to the other players—for full effect, the " + , Text " les lit aux autres joueurs—pour un effet maximal, le " , ref Czar - , Text " should usually re-read the " + , Text " devrait généralement relire la " , ref (noun Call 1) - , Text " before presenting each answer. The " + , Text " avant de présenter chaque réponse. Le " , ref Czar - , Text " then picks the funniest play, and whoever played it gets one " + , Text " choisit ensuite la réponse la plus drôle, et celui qui l'a jouée gagne un " , ref (noun Point 1) , Text "." ] @@ -217,195 +217,196 @@ translate _ mdString = [ ref (Pick { numberOfCards = 2 }) ] RulesPick -> - [ Text "Some cards will need more than one " + [ Text "Certaines cartes nécessiteront plus d'une " , ref (noun Response 1) - , Text " as an answer. Play the cards in the order the " + , Text " comme réponse. Jouez les cartes dans l'ordre où le " , ref Czar - , Text " should read them—the order matters." + , Text " doit les lire—l'ordre est important." ] ExamplePickDescription -> - [ ref (nounUnknownQuantity Call) - , Text " like this will require picking more " + [ Text "Des " + , ref (nounUnknownQuantity Call) + , Text " comme celle-ci nécessiteront de choisir davantage de " , ref (nounUnknownQuantity Response) - , Text ", but give you more to pick from." + , Text ", mais vous donneront plus d'options." ] RulesDraw -> - [ Text "Some " + [ Text "Certaines " , ref (nounUnknownQuantity Call) - , Text " will need even more " + , Text " nécessiteront encore plus de " , ref (nounUnknownQuantity Response) - , Text "—these will say " + , Text "—elles indiqueront " , ref (Draw { numberOfCards = 2 }) - , Text " or more, and you’ll get that many extra cards before you play." + , Text " ou plus, et vous recevrez autant de cartes supplémentaires avant de jouer." ] GameRulesTitle -> - [ Text "Game Rules" ] + [ Text "Règles du jeu" ] HouseRulesTitle -> - [ Text "House Rules" ] + [ Text "Règles personnalisées" ] HouseRules -> - [ Text "You can change the way the game is played in a variety of ways. While setting up the game, choose " - , Text "as many house rules as you would like to use." + [ Text "Vous pouvez modifier la manière de jouer au jeu de différentes manières. Lors de la configuration de la partie, choisissez " + , Text "autant de règles personnalisées que vous souhaitez utiliser." ] HouseRuleReboot -> - [ Text "Rebooting the Universe" ] + [ Text "Redémarrage de l'univers" ] HouseRuleRebootDescription { cost } -> - [ Text "At any time, players may trade in " + [ Text "À tout moment, les joueurs peuvent échanger " , Text (an cost) , ref (nounMaybe Point cost) - , Text " to discard their hand and draw a new one." + , Text " pour défausser leur main et en tirer une nouvelle." ] HouseRuleRebootAction { cost } -> - [ Text "Spend " + [ Text "Dépensez " , Text (asWord cost) , Text " " , ref (noun Point cost) - , Text " to discard your hand and draw a new one." + , Text " pour défausser votre main et en tirer une nouvelle." ] HouseRuleRebootCost -> - [ ref (noun Point 1), Text " Cost" ] + [ ref (noun Point 1), Text " Coût" ] HouseRuleRebootCostDescription -> - [ Text "How many ", ref (nounUnknownQuantity Point), Text " it costs to redraw." ] + [ Text "Combien de ", ref (nounUnknownQuantity Point), Text " il en coûte pour refaire une main." ] HouseRulePackingHeat -> - [ Text "Packing Heat" ] + [ Text "Jouer gros" ] HouseRulePackingHeatDescription -> - [ Text "Any " - , ref (nounUnknownQuantity Call) - , Text " with " + [ Text "Toute " + , ref (noun Call 1) + , Text " avec " , ref (Pick { numberOfCards = 2 }) - , Text " also get " + , Text " reçoit aussi " , ref (Draw { numberOfCards = 1 }) - , Text ", so everyone has more options." + , Text ", afin que tout le monde ait plus d'options." ] HouseRuleComedyWriter -> - [ Text "Comedy Writer" ] + [ Text "Écrivain comique" ] HouseRuleComedyWriterDescription -> - [ Text "Add blank " + [ Text "Ajoutez des " , ref (nounUnknownQuantity Response) - , Text " where players can write custom responses." + , Text " vierges où les joueurs peuvent écrire des réponses personnalisées." ] HouseRuleComedyWriterNumber -> - [ Text "Blank ", ref (nounUnknownQuantity Response) ] + [ ref (nounUnknownQuantity Response), Text " vierges" ] HouseRuleComedyWriterNumberDescription -> - [ Text "The number of Blank " + [ Text "Le nombre de " , ref (nounUnknownQuantity Response) - , Text " that will be in the game." + , Text " vierges qui seront dans la partie." ] HouseRuleComedyWriterExclusive -> - [ Text "Only Blank ", ref (nounUnknownQuantity Response) ] + [ Text "Seulement des ", ref (nounUnknownQuantity Response), Text " vierges" ] HouseRuleComedyWriterExclusiveDescription -> - [ Text "If enabled, all other " + [ Text "Si activé, toutes les autres " , ref (nounUnknownQuantity Response) - , Text " will be ignored, only blank ones will exist in-game." + , Text " seront ignorées, seules les vierges existeront dans le jeu." ] HouseRuleRandoCardrissian -> [ Text "Rando Cardrissian" ] HouseRuleRandoCardrissianDescription -> - [ Text "Every round, the first " + [ Text "À chaque tour, la première " , ref (noun Response 1) - , Text " in the deck will be played as an answer. This play belongs to an AI player named " - , Text "Rando Cardrissian, and if he wins the game, all players go home in a state of everlasting shame." + , Text " du paquet sera jouée comme réponse. Ce jeu appartient à un joueur IA nommé " + , Text "Rando Cardrissian, et s'il gagne la partie, tous les joueurs rentrent chez eux dans un état de honte éternelle." ] HouseRuleRandoCardrissianNumber -> - [ Text "AI Players" ] + [ Text "Joueurs IA" ] HouseRuleRandoCardrissianNumberDescription -> - [ Text "The number of AI players that will be in the game." ] + [ Text "Le nombre de joueurs IA dans la partie." ] HouseRuleNeverHaveIEver -> - [ Text "Never Have I Ever" ] + [ Text "Je n'ai jamais..." ] HouseRuleNeverHaveIEverDescription -> - [ Text "At any time, a player may discard cards they don't understand, however, they must confess their " - , Text "ignorance: the card is shared publicly." + [ Text "À tout moment, un joueur peut défausser des cartes qu'il ne comprend pas, mais il doit avouer son " + , Text "ignorance : la carte est partagée publiquement." ] HouseRuleHappyEnding -> [ Text "Happy Ending" ] HouseRuleHappyEndingDescription -> - [ Text "When the game ends, the final round is a 'Make a Haiku' ", ref (noun Call 1), Text "." ] + [ Text "Quand la partie se termine, le dernier tour est une ", ref (noun Call 1), " 'Créer un Haïku'." ] HouseRuleCzarChoices -> - [ ref Czar, Text " Choices" ] + [ Text "Choix du ", ref Czar ] HouseRuleCzarChoicesDescription -> - [ Text "At the beginning of the round, the " + [ Text "Au début du tour, le " , ref Czar - , Text " draws multiple " + , Text " pioche plusieurs " , ref (nounUnknownQuantity Call) - , Text " and chooses one of them, and/or has the choice to write their own." + , Text " et en choisit une, et/ou a le choix d'écrire la sienne." ] HouseRuleCzarChoicesNumber -> - [ Text "Number" ] + [ Text "Nombre" ] HouseRuleCzarChoicesNumberDescription -> - [ Text "The number of choices to give the ", ref Czar, Text " to pick between." ] + [ Text "Le nombre de choix à donner au ", ref Czar, Text " parmi lesquelles choisir." ] HouseRuleCzarChoicesCustom -> - [ Text "Custom" ] + [ Text "Personnalisé" ] HouseRuleCzarChoicesCustomDescription -> - [ Text "If the ", ref Czar, Text " can write custom calls. This takes up one of the choices." ] + [ Text "Si le ", ref Czar, Text " peut écrire des ", ref (nounUnknownQuantity Call), " personnalisées. Cela prend l'une des options." ] HouseRuleWinnersPick -> - [ Text "Winner's Pick" ] + [ Text "Choix du gagnant" ] HouseRuleWinnersPickDescription -> - [ Text "The winner of each round becomes the ", ref Czar, Text " for the next round." ] + [ Text "Le gagnant de chaque tour devient le ", ref Czar, Text " pour le tour suivant." ] SeeAlso { rule } -> - [ Text "See also: ", ref rule ] + [ Text "Voir aussi : ", ref rule ] MustBeMoreThanOrEqualValidationError { min } -> - [ Text "The value must be at least ", Text (String.fromInt min), Text "." ] + [ Text "La valeur doit être au moins ", Text (String.fromInt min), Text "." ] MustBeLessThanOrEqualValidationError { max } -> - [ Text "The value must be at most ", Text (String.fromInt max), Text "." ] + [ Text "La valeur doit être au plus ", Text (String.fromInt max), Text "." ] SetValue { value } -> - [ Text "Set the value to ", Text (String.fromInt value), Text "." ] + [ Text "Définir la valeur à ", Text (String.fromInt value), Text "." ] CantBeEmpty -> - [ Text "This can't be empty." ] + [ Text "Cela ne peut pas être vide." ] SettingsTitle -> - [ Text "Settings" ] + [ Text "Paramètres" ] LanguageSetting -> - [ Text "Language" ] + [ Text "Langue" ] MissingLanguage -> - [ Text "Don’t see your language? ", ref TranslationBeg ] + [ Text "Vous ne voyez pas votre langue ? ", ref TranslationBeg ] AutonymFormat { autonym } -> [ Text "(", Text autonym, Text ")" ] TranslationBeg -> - [ Text "Help translate " + [ Text "Aidez à traduire " , ref MassiveDecks - , Text "!" + , Text " !" ] CardSizeSetting -> From 6d92950b76a5ffa5e67a03d0437ccdc351cc8ac2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=A9tan=20M-F?= Date: Mon, 30 Dec 2024 14:02:15 +0100 Subject: [PATCH 4/9] Full French translation --- .../elm/MassiveDecks/Strings/Languages/Fr.elm | 614 +++++++++--------- 1 file changed, 302 insertions(+), 312 deletions(-) diff --git a/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm b/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm index 82d29bd4..908a52c4 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm @@ -258,7 +258,7 @@ translate _ mdString = HouseRuleRebootDescription { cost } -> [ Text "À tout moment, les joueurs peuvent échanger " - , Text (an cost) + , Text (cost) , ref (nounMaybe Point cost) , Text " pour défausser leur main et en tirer une nouvelle." ] @@ -410,144 +410,143 @@ translate _ mdString = ] CardSizeSetting -> - [ Text "Compact Cards" ] + [ Text "Cartes Compactes" ] CardSizeExplanation -> - [ Text "Adjust how big cards are—this can be useful on small screens to scroll less." ] + [ Text "Ajustez la taille des cartes — cela peut être utile sur les petits écrans pour moins faire défiler." ] AutoAdvanceSetting -> - [ Text "Automatically Advance Round" ] + [ Text "Avancer Automatiquement le Tour" ] AutoAdvanceExplanation -> - [ Text "When a round ends, automatically advance to the next one rather than waiting." ] + [ Text "À la fin d’un tour, passez automatiquement au suivant sans attendre." ] SpeechSetting -> - [ Text "Text To Speech" ] + [ Text "Synthèse Vocale" ] SpeechExplanation -> - [ Text "Read out cards using text to speech." ] + [ Text "Lisez les cartes à haute voix grâce à la synthèse vocale." ] SpeechNotSupportedExplanation -> - [ Text "Your browser does not support text to speech, or has no voices installed." ] + [ Text "Votre navigateur ne prend pas en charge la synthèse vocale ou n’a pas de voix installées." ] VoiceSetting -> - [ Text "Speech Voice" ] + [ Text "Voix de Synthèse" ] NotificationsSetting -> - [ Text "Browser Notifications" ] + [ Text "Notifications du Navigateur" ] NotificationsExplanation -> - [ Text "Alert you when you need to do something in the game using browser notifications." - ] + [ Text "Avertissez-vous lorsque vous devez faire quelque chose dans le jeu grâce aux notifications du navigateur." ] NotificationsUnsupportedExplanation -> - [ Text "Your browser doesn't support notifications." ] + [ Text "Votre navigateur ne prend pas en charge les notifications." ] NotificationsBrowserPermissions -> - [ Text "You will need to give permission for " + [ Text "Vous devez donner l’autorisation à " , ref MassiveDecks - , Text " to notify you. This will only be used while the game is open and while you have this enabled." + , Text " de vous notifier. Cela ne sera utilisé que lorsque le jeu est ouvert et cette option activée." ] NotificationOnlyWhenHiddenSetting -> - [ Text "Only When Hidden" ] + [ Text "Uniquement Quand Caché" ] NotificationsOnlyWhenHiddenExplanation -> - [ Text "Only send notifications when you are not looking at the page (e.g: on another tab or minimised)." ] + [ Text "Envoyez des notifications uniquement lorsque vous ne regardez pas la page (par exemple : sur un autre onglet ou minimisé)." ] NotificationsOnlyWhenHiddenUnsupportedExplanation -> - [ Text "Your browser doesn't support checking for page visibility." ] + [ Text "Votre navigateur ne prend pas en charge la vérification de la visibilité de la page." ] -- Terms Czar -> - [ Text "Card Czar" ] + [ Text "Maître des Cartes" ] CzarDescription -> - [ Text "The player judging the round." ] + [ Text "Le joueur qui juge le tour." ] CallDescription -> - [ Text "A black card with a question or fill-in-the-blank phrase." ] + [ Text "Une carte noire avec une question ou une phrase à compléter." ] ResponseDescription -> - [ Text "A white card with a phrase played into rounds." ] + [ Text "Une carte blanche avec une phrase, jouée durant les tours." ] PointDescription -> - [ Text "A point—having more means winning." ] + [ Text "Un point—en avoir plus signifie gagner." ] GameCodeTerm -> - [ Text "Game Code" ] + [ Text "Code de Partie" ] GameCodeDescription -> - [ Text "A code that lets other people find and join your game." ] + [ Text "Un code qui permet à d’autres personnes de trouver et rejoindre votre partie." ] GameCode { code } -> [ Text code ] GameCodeSpecificDescription -> - [ Text "Give this game code to people and they can join the game." ] + [ Text "Donnez ce code de partie aux personnes pour qu’elles puissent rejoindre la partie." ] GameCodeHowToAcquire -> - [ Text "Ask the person who invited you for the game’s ", ref GameCodeTerm, Text "." ] + [ Text "Demandez à la personne qui vous a invité le ", ref GameCodeTerm, Text "." ] Deck -> - [ Text "Deck" ] + [ Text "Paquet" ] DeckSource -> [ ref Deck, Text " Source" ] DeckLanguage { language } -> - [ Text "in ", Text language ] + [ Text "en ", Text language ] DeckAuthor { author } -> - [ Text "by ", Text author ] + [ Text "par ", Text author ] DeckTranslator { translator } -> - [ Text "translation by ", Text translator ] + [ Text "traduction par ", Text translator ] StillPlaying -> - [ Text "Playing" ] + [ Text "En Train de Jouer" ] PlayingDescription -> - [ Text "This player is in the round, but has not yet submitted a play." ] + [ Text "Ce joueur est dans le tour, mais n’a pas encore soumis de cartes." ] Played -> - [ Text "Played" ] + [ Text "A Joué" ] PlayedDescription -> - [ Text "This player has submitted their play for the round." ] + [ Text "Ce joueur a soumis ses cartes pour le tour." ] -- Lobby Browser LobbyBrowserTitle -> - [ Text "Public Games" ] + [ Text "Parties Publiques" ] NoPublicGames -> - [ Text "No public games available." ] + [ Text "Aucune partie publique disponible." ] PlayingGame -> - [ Text "Games that are in progress." ] + [ Text "Parties en cours." ] SettingUpGame -> - [ Text "Games that have not yet started." ] + [ Text "Parties qui n’ont pas encore commencé." ] StartYourOwn -> - [ Text "Start a new game?" ] + [ Text "Créer une nouvelle partie ?" ] -- Spectation JoinTheGame -> - [ Text "Join the game!" ] + [ Text "Rejoindre la partie !" ] ToggleAdvertDescription -> - [ Text "Toggle showing the information on joining the game." ] + [ Text "Afficher ou masquer les informations pour rejoindre la partie." ] -- Cards Pick numberOfCards -> - [ Text "Pick", ref (NumberOfCards numberOfCards) ] + [ Text "Choisissez", ref (NumberOfCards numberOfCards) ] Draw numberOfCards -> - [ Text "Draw", ref (NumberOfCards numberOfCards) ] + [ Text "Piochez", ref (NumberOfCards numberOfCards) ] PickDescription { numberOfCards } -> - [ Text "You need to play " + [ Text "Vous devez jouer " , Text (asWord numberOfCards) , Text " " , ref (noun Response numberOfCards) @@ -555,11 +554,9 @@ translate _ mdString = ] DrawDescription { numberOfCards } -> - [ Text "You get " + [ Text "Vous recevez " , Text (asWord numberOfCards) - , Text " extra " - , ref (noun Response numberOfCards) - , Text " before playing." + , Text " cartes supplémentaires avant de jouer." ] NumberOfCards { numberOfCards } -> @@ -567,16 +564,16 @@ translate _ mdString = -- Lobby LobbyNameLabel -> - [ Text "Game Name" ] + [ Text "Nom de Partie" ] DefaultLobbyName { owner } -> - [ Text owner, Text "'s Game" ] + [ Text "Partie de ", Text owner ] Invite -> - [ Text "Invite players to the game." ] + [ Text "Invitez des joueurs à la partie." ] InviteLinkHelp -> - [ Text "Send this link to players to invite them to the game, or let them scan the QR code below." ] + [ Text "Envoyez ce lien aux joueurs pour les inviter à la partie, ou laissez-les scanner le QR code ci-dessous." ] InviteExplanation { gameCode, password } -> let @@ -584,7 +581,7 @@ translate _ mdString = password |> Maybe.map (\p -> - [ Text " and the game password “" + [ Text " et le mot de passe “" , Text p , Text "”" ] @@ -592,11 +589,11 @@ translate _ mdString = |> Maybe.withDefault [] in List.concat - [ [ Text "Your game code is " + [ [ Text "Votre code de partie est " , ref (GameCode { code = gameCode }) - , Text ". Players can join the game by loading " + , Text ". Les joueurs peuvent rejoindre la partie en chargeant " , ref MassiveDecks - , Text " and entering that code" + , Text " et en entrant ce code" ] , extra , [ Text "." @@ -604,731 +601,731 @@ translate _ mdString = ] Cast -> - [ Text "Cast to TV." ] + [ Text "Caster sur TV." ] CastConnecting -> - [ Text "Connecting…" ] + [ Text "Connexion en cours…" ] CastConnected { deviceName } -> - [ Text "Casting to ", Text deviceName, Text "." ] + [ Text "Connecté à ", Text deviceName, Text "." ] Players -> [ ref (nounUnknownQuantity Player) ] PlayersDescription -> - [ Text "Users playing the game." ] + [ Text "Joueurs participant à la partie." ] Spectators -> [ ref (nounUnknownQuantity Spectator) ] SpectatorsDescription -> - [ Text "Users watching the game without playing." ] + [ Text "Utilisateurs regardant la partie sans y jouer." ] Left -> - [ Text "Left" ] + [ Text "Parti" ] LeftDescription -> - [ Text "Users who have left the game." ] + [ Text "Utilisateurs qui ont quitté la partie." ] Away -> - [ Text "Away" ] + [ Text "Absent" ] AwayDescription -> - [ Text "This user is temporarily away from the game." ] + [ Text "Cet utilisateur est temporairement absent de la partie." ] Disconnected -> - [ Text "Disconnected" ] + [ Text "Déconnecté" ] DisconnectedDescription -> - [ Text "This user is not connected to the game." ] + [ Text "Cet utilisateur n’est pas connecté à la partie." ] Privileged -> - [ Text "Owner" ] + [ Text "Propriétaire" ] PrivilegedDescription -> - [ Text "This user can adjust settings in the game." ] + [ Text "Cet utilisateur peut ajuster les paramètres de la partie." ] Ai -> - [ Text "AI" ] + [ Text "IA" ] AiDescription -> - [ Text "This player is controlled by the computer." ] + [ Text "Ce joueur est contrôlé par l’ordinateur." ] Score { total } -> [ Text (String.fromInt total) ] ScoreDescription -> - [ Text "The number of " + [ Text "Le nombre de " , ref (nounUnknownQuantity Point) - , Text " this player has." + , Text " que ce joueur possède." ] Likes { total } -> [ Text (String.fromInt total) ] LikesDescription -> - [ Text "The number of likes received." + [ Text "Le nombre de mentions “j’aime” reçues." ] ToggleUserList -> - [ Text "Show or hide the scoreboard." ] + [ Text "Afficher ou masquer le tableau des scores." ] GameMenu -> - [ Text "Game menu." ] + [ Text "Menu de la partie." ] UnknownUser -> - [ Text "An unknown user" ] + [ Text "Un utilisateur inconnu" ] InvitePlayers -> - [ Text "Invite Players" ] + [ Text "Inviter des Joueurs" ] InvitePlayersDescription -> - [ Text "Get the game code/link/qr code to let others join this game." ] + [ Text "Obtenez le code de la partie, le lien ou le QR code pour permettre à d'autres de rejoindre cette partie." ] SetAway -> - [ Text "Mark As Away" ] + [ Text "Marquer Comme Absent" ] SetBack -> - [ Text "Mark As Back" ] + [ Text "Marquer Comme Présent" ] LeaveGame -> - [ Text "Leave Game" ] + [ Text "Quitter la Partie" ] LeaveGameDescription -> - [ Text "Permanently leave the game." ] + [ Text "Quittez définitivement la partie." ] Spectate -> - [ Text "Spectator View" ] + [ Text "Vue Spectateur" ] SpectateDescription -> - [ Text "Open a spectator's view of the game in a new tab/window." ] + [ Text "Ouvrez une vue spectateur de la partie dans un nouvel onglet/fenêtre." ] BecomeSpectator -> - [ Text "Spectate" ] + [ Text "Devenir Spectateur" ] BecomeSpectatorDescription -> - [ Text "Just watch the game without playing." ] + [ Text "Regardez simplement la partie sans y jouer." ] BecomePlayer -> - [ Text "Play" ] + [ Text "Jouer" ] BecomePlayerDescription -> - [ Text "Play in the game." ] + [ Text "Participez à la partie." ] EndGame -> - [ Text "End Game" ] + [ Text "Terminer la Partie" ] EndGameDescription -> - [ Text "End the game now." ] + [ Text "Terminez immédiatement la partie." ] ReturnViewToGame -> - [ Text "Return to game" ] + [ Text "Revenir à la Partie" ] ReturnViewToGameDescription -> - [ Text "Return to the main game view." ] + [ Text "Revenez à la vue principale de la partie." ] ViewConfiguration -> - [ Text "Configure" ] + [ Text "Configurer" ] ViewConfigurationDescription -> - [ Text "Switch to view the game's configuration." ] + [ Text "Passez à la vue de configuration du jeu." ] KickUser -> - [ Text "Kick" ] + [ Text "Exclure" ] Promote -> - [ Text "Promote" ] + [ Text "Promouvoir" ] Demote -> - [ Text "Demote" ] + [ Text "Rétrograder" ] -- Notifications UserConnected { username } -> - [ Text username, Text " has reconnected to the game." ] + [ Text username, Text " s'est reconnecté à la partie." ] UserDisconnected { username } -> - [ Text username, Text " has disconnected from the game." ] + [ Text username, Text " s'est déconnecté de la partie." ] UserJoined { username } -> - [ Text username, Text " has joined the game." ] + [ Text username, Text " a rejoint la partie." ] UserLeft { username } -> - [ Text username, Text " has left the game." ] + [ Text username, Text " a quitté la partie." ] UserKicked { username } -> - [ Text username, Text " has been kicked from the game." ] + [ Text username, Text " a été exclu de la partie." ] Dismiss -> - [ Text "Dismiss" ] + [ Text "Fermer" ] -- Configuration ConfigureTitle -> - [ Text "Game Setup" ] + [ Text "Configuration de la Partie" ] NoDecks -> - [ Segment [ Text "No decks. " ] + [ Segment [ Text "Aucun paquet. " ] , Text " " - , Segment [ Text "You will need to add at least one to the game." ] + , Segment [ Text "Vous devez en ajouter au moins un à la partie." ] ] NoDecksHint -> - [ Text "Not sure? Add the original ", raw CardsAgainstHumanity, Text " deck." ] + [ Text "En manque d'idée ? Ajoutez le paquet original ", raw CardsAgainstHumanity, Text "." ] WaitForDecks -> - [ Text "The decks must load before you can start the game." ] + [ Text "Les paquets doivent se charger avant de pouvoir démarrer la partie." ] MissingCardType { cardType } -> - [ Text "None of your decks contain any " + [ Text "Aucun de vos paquets ne contient de " , ref (nounUnknownQuantity cardType) - , Text ". You need a deck that does to start the game." + , Text ". Vous avez besoin d’un paquet qui en contient pour commencer la partie." ] NotEnoughCardsOfType { cardType, needed, have } -> - [ Text "For the number of players in the game, you need at least " + [ Text "Pour le nombre de joueurs dans la partie, vous avez besoin d’au moins " , Text (needed |> String.fromInt) , Text " " , ref (noun cardType needed) - , Text " but you only have " + , Text " mais vous n’en avez que " , Text (have |> String.fromInt) , Text "." ] AddBlankCards { amount } -> - [ Text "Add " + [ Text "Ajouter " , amount |> String.fromInt |> Text - , Text " blank " , ref (noun Response amount) + , Text (if amount > 1 then " vierges" else " vierge") ] AddDeck -> - [ Text "Add deck." ] + [ Text "Ajouter un paquet." ] RemoveDeck -> - [ Text "Remove deck." ] + [ Text "Supprimer un paquet." ] SourceNotFound { source } -> - [ ref source, Text " doesn't recognise the deck you asked for. Check the details you gave are correct." ] + [ ref source, Text " ne reconnaît pas le paquet demandé. Vérifiez les informations fournies." ] SourceServiceFailure { source } -> - [ ref source, Text " failed to provide the deck. Please try again later or try another source." ] + [ ref source, Text " n’a pas pu fournir le paquet. Veuillez réessayer plus tard ou choisir une autre source." ] ManyDecks -> [ Text "Many Decks" ] ManyDecksDeckCodeTitle -> - [ Text "Deck Code" ] + [ Text "Code du Paquet" ] ManyDecksDeckCodeShort -> - [ Text "A deck code must be at least five characters long." ] + [ Text "Un code de paquet doit comporter au moins cinq caractères." ] ManyDecksWhereToGet -> - [ Text "You can create and find decks to play with at ", ref ManyDecks, Text "." ] + [ Text "Vous pouvez créer et trouver des paquets à utiliser sur ", ref ManyDecks, Text "." ] JsonAgainstHumanity -> [ Text "JSON Against Humanity" ] JsonAgainstHumanityAbout -> - [ Text "Decks provided by ", ref JsonAgainstHumanity ] + [ Text "Paquets fournis par ", ref JsonAgainstHumanity ] BuiltIn -> - [ Text "Built-in" ] + [ Text "Intégré" ] APlayer -> - [ Text "A Player" ] + [ Text "Un Joueur" ] Generated { by } -> - [ Text "Generated by ", ref by ] + [ Text "Généré par ", ref by ] DeckAlreadyAdded -> - [ Text "This deck is already in the game." ] + [ Text "Ce paquet est déjà ajouté à la partie." ] ConfigureDecks -> - [ Text "Decks" ] + [ Text "Paquets" ] ConfigureRules -> - [ Text "Rules" ] + [ Text "Règles" ] ConfigureTimeLimits -> - [ Text "Time Limits" ] + [ Text "Limites de Temps" ] ConfigurePrivacy -> - [ Text "Privacy" ] + [ Text "Confidentialité" ] HandSize -> - [ Text "Hand Size" ] + [ Text "Taille de la Main" ] HandSizeDescription -> - [ Text "The base number of cards each player has in their hand during the game." ] + [ Text "Le nombre de cartes de base que chaque joueur a en main pendant la partie." ] ScoreLimit -> - [ ref (noun Point 1), Text " Limit" ] + [ Text "Limite de ", ref (noun Point 1) ] ScoreLimitDescription -> [ Segment - [ Text "The number of " + [ Text "Le nombre de " , ref (nounUnknownQuantity Point) - , Text " a player needs to win the game." + , Text " qu’un joueur doit obtenir pour gagner la partie." ] , Text " " - , Segment [ Text "If disabled, the game continues indefinitely." ] + , Segment [ Text "Si désactivé, la partie continue indéfiniment." ] ] UnsavedChangesWarning -> - [ Text "You have unsaved changes to the configuration, they must be saved first if you want them to apply " - , Text "to the game." + [ Text "Vous avez des modifications non sauvegardées dans la configuration, elles doivent être sauvegardées d'abord si vous voulez qu'elles s'appliquent " + , Text "à la partie." ] SaveChanges -> - [ Text "Save your changes." ] + [ Text "Sauvegardez vos modifications." ] RevertChanges -> - [ Text "Discard your unsaved changes." ] + [ Text "Abandonnez vos modifications non sauvegardées." ] NeedAtLeastOneDeck -> - [ Text "You need a deck of cards added to start the game." ] + [ Text "Vous devez ajouter un paquet de cartes pour commencer la partie." ] NeedAtLeastThreePlayers -> - [ Text "You need at least three players to start the game." ] + [ Text "Vous devez avoir au moins trois joueurs pour commencer la partie." ] NeedAtLeastOneHuman -> - [ Text "Unfortunately computer players can't be the " + [ Text "Malheureusement, les joueurs automatiques ne peuvent pas être le " , ref Czar - , Text ", so you need at least one human player to start the game." - , Text " (Although only one human might be a bit boring!)" + , Text ", vous avez donc besoin d’au moins un joueur humain pour commencer la partie." + , Text " (Même si un seul humain risque d'être un peu ennuyeux !)" ] RandoCantWrite -> - [ Text "Computer players can't write their own cards." ] + [ Text "Les joueurs IA ne peuvent pas écrire leurs propres cartes." ] DisableComedyWriter -> - [ Text "Disable ", ref HouseRuleComedyWriter ] + [ Text "Désactiver ", ref HouseRuleComedyWriter ] DisableRando -> - [ Text "Disable ", ref HouseRuleRandoCardrissian ] + [ Text "Désactiver ", ref HouseRuleRandoCardrissian ] AddAnAiPlayer -> - [ Text "Add an AI player to the game." ] + [ Text "Ajouter un joueur IA à la partie." ] PasswordShared -> - [ Text "Anyone in the game can see the password! " - , Text "Hiding it above only affects you (useful if streaming, etc…)." + [ Text "Tout le monde dans la partie peut voir le mot de passe ! " + , Text "Le cacher ici n'affecte que vous (utile si vous streamez, etc.)." ] PasswordNotSecured -> - [ Text "Game passwords are " - , Em [ Text "not" ] - , Text " stored securely—given this, please " - , Em [ Text "do not" ] - , Text " use serious passwords you use elsewhere!" + [ Text "Les mots de passe des parties ne sont " + , Em [ Text "pas" ] + , Text " stockés de manière sécurisée—par conséquent, veuillez " + , Em [ Text "ne pas" ] + , Text " utiliser des mots de passe sérieux que vous utilisez ailleurs !" ] LobbyPassword -> - [ Text "Game Password" ] + [ Text "Mot de Passe de la Partie" ] LobbyPasswordDescription -> - [ Text "A password the users must enter before they can join the game." ] + [ Text "Un mot de passe que les utilisateurs doivent saisir avant de pouvoir rejoindre la partie." ] AudienceMode -> - [ Text "Audience Mode" ] + [ Text "Mode Audience" ] AudienceModeDescription -> - [ Text "If enabled, newly joining users will be spectators by default, and only you will be able to " - , Text "make them players." + [ Text "Si activé, les nouveaux utilisateurs seront par défaut spectateurs, et seul vous pourrez " + , Text "les transformer en joueurs." ] StartGame -> - [ Text "Start Game" ] + [ Text "Démarrer la Partie" ] Public -> - [ Text "Public Game" ] + [ Text "Partie Publique" ] PublicDescription -> - [ Text "If enabled, the game will show up in the public game list for anyone to find." ] + [ Text "Si activé, la partie apparaîtra dans la liste publique des parties pour que tout le monde puisse la trouver." ] ApplyConfiguration -> - [ Text "Apply this change." ] + [ Text "Appliquer cette modification." ] AppliedConfiguration -> - [ Text "Saved." ] + [ Text "Enregistré." ] InvalidConfiguration -> - [ Text "This configuration value isn't valid." ] + [ Text "Cette valeur de configuration n'est pas valide." ] Automatic -> - [ Text "Automatically Mark Players As Away" ] + [ Text "Marquer Automatiquement les Joueurs Comme Absents" ] AutomaticDescription -> - [ Text "If enabled, when the time limit runs out players will automatically be marked as away. " - , Text "Otherwise someone will need to press the button to do so." + [ Text "Si activé, lorsque la limite de temps est dépassée, les joueurs seront automatiquement marqués comme absents. " + , Text "Sinon, quelqu'un devra appuyer sur le bouton pour le faire." ] TimeLimit { stage } -> - [ ref stage, Text " Time Limit" ] + [ ref stage, Text " Limite de Temps" ] StartingTimeLimitDescription -> - [ Text "How long (in seconds) the " + [ Text "Combien de temps (en secondes) le " , ref Czar - , Text " has to choose/write a " + , Text " a pour choisir/écrire un " , ref (noun Call 1) - , Text ", when the " + , Text ", lorsque la règle maison " , raw HouseRuleCzarChoices - , Text " house rule is enabled." + , Text " est activée." ] PlayingTimeLimitDescription -> - [ Text "How long (in seconds) the ", ref Players, Text " have to make their plays." ] + [ Text "Combien de temps (en secondes) les ", ref Players, Text " ont pour jouer leurs cartes." ] PlayingAfterDescription -> - [ Text "How long (in seconds) players have to change their play before the next stage starts." ] + [ Text "Combien de temps (en secondes) les joueurs ont pour changer leur jeu avant que la prochaine phase ne commence." ] RevealingTimeLimitDescription -> - [ Text "How long (in seconds) the ", ref Czar, Text " has to reveal the plays." ] + [ Text "Combien de temps (en secondes) le ", ref Czar, Text " a pour révéler les propositions." ] RevealingAfterDescription -> - [ Text "How long (in seconds) to wait after the last card is revealed before the next stage starts." ] + [ Text "Combien de temps (en secondes) attendre après la révélation de la dernière carte avant que la prochaine phase ne commence." ] JudgingTimeLimitDescription -> - [ Text "How long (in seconds) the ", ref Czar, Text " has to judge the plays." ] + [ Text "Combien de temps (en secondes) le ", ref Czar, Text " a pour juger les propositions." ] CompleteTimeLimitDescription -> - [ Text "How much time (in seconds) to wait after one round ends before starting the next one." ] + [ Text "Combien de temps (en secondes) attendre après la fin d'un tour avant de commencer le suivant." ] RevealingEnabledTitle -> - [ Text "Czar Reveals Plays" ] + [ Text "Le Czar Révèle les Propositions" ] RevealingEnabled -> - [ Text "If this is enabled, the " + [ Text "Si cela est activé, le " , ref Czar - , Text " reveals one play at a time before picking a winner." + , Text " révèle une proposition à la fois avant de choisir un gagnant." ] DuringTitle -> - [ Text "Time Limit" ] + [ Text "Limite de temps" ] AfterTitle -> - [ Text "After" ] + [ Text "Après" ] Conflict -> - [ Text "Conflict" ] + [ Text "Conflit" ] ConflictDescription -> - [ Text "Someone else made changes to this while you were also making changes. " - , Text "Please choose if you want to keep your changes or theirs." + [ Text "Quelqu'un d'autre a apporté des modifications pendant que vous faisiez des changements. " + , Text "Veuillez choisir si vous voulez conserver vos modifications ou les leurs." ] YourChanges -> - [ Text "Your Changes" ] + [ Text "Vos modifications" ] TheirChanges -> - [ Text "Their Changes" ] + [ Text "Leurs modifications" ] ConfigurationDisabledWhileInGame -> - [ Text "While the game in progress, you can't change the configuration." ] + [ Text "Pendant que le jeu est en cours, vous ne pouvez pas modifier la configuration." ] ConfigurationDisabledIfNotPrivileged -> - [ Text "You can't change the configuration of this game." ] + [ Text "Vous ne pouvez pas modifier la configuration de ce jeu." ] ConfigureNextGame -> - [ Text "Configure Next Game" ] + [ Text "Configurer la prochaine partie" ] -- Game PickCall -> - [ Text "Pick this ", ref (noun Call 1), Text " for the others to play into for the round." ] + [ Text "Choisissez cette ", ref (noun Call 1), Text " pour ce tour des autres joueurs." ] WriteCall -> - [ Text "Write a custom ", ref (noun Call 1), Text " for the others to play into for the round." ] + [ Text "Écrivez une ", ref (noun Call 1), Text " personnalisée pour ce tour des autres joueurs." ] SubmitPlay -> - [ Text "Give these cards to the ", ref Czar, Text " as your play for the round." ] + [ Text "Donnez ces cartes au ", ref Czar, Text " en tant que votre proposition pour le tour." ] TakeBackPlay -> - [ Text "Take back your cards to change your play for the round." ] + [ Text "Reprenez vos cartes pour modifier votre proposition pour le tour." ] JudgePlay -> - [ Text "Pick this play as the winner for the round." ] + [ Text "Choisissez cette proposition comme gagnante pour le tour." ] LikePlay -> - [ Text "Add a like to this play." ] + [ Text "Ajoutez un j'aime à cette proposition." ] AdvanceRound -> - [ Text "Next round." ] + [ Text "Tour suivant." ] Starting -> [ raw HouseRuleCzarChoices ] Playing -> - [ Text "Playing" ] + [ Text "En jeu" ] Revealing -> - [ Text "Revealing" ] + [ Text "Révélation" ] Judging -> - [ Text "Judging" ] + [ Text "Jugement" ] Complete -> - [ Text "Finished" ] + [ Text "Terminé" ] ViewGameHistoryAction -> - [ Text "View previous rounds from this game." ] + [ Text "Voir les tours précédents de cette partie." ] ViewHelpAction -> - [ Text "Help" ] + [ Text "Aide" ] EnforceTimeLimitAction -> - [ Text "Set all players the game is waiting on to away and skip them until they return." ] + [ Text "Mettre tous les joueurs attendus en mode absent et les ignorer jusqu'à leur retour." ] Blank -> - [ Text "Blank" ] + [ Text "Vide" ] RoundStarted -> - [ Text "Round Started" ] + [ Text "Tour commencé" ] JudgingStarted -> - [ Text "Judging Started" ] + [ Text "Jugement commencé" ] Paused -> - [ Text "The game has been paused because there are not enough active players to continue." - , Text "When someone joins or returns it will continue automatically." + [ Text "Le jeu a été mis en pause car il n'y a pas assez de joueurs actifs pour continuer." + , Text "Lorsque quelqu'un rejoint ou revient, il continuera automatiquement." ] ClientAway -> - [ Text "You are currently set as away from the game, and are not playing." ] + [ Text "Vous êtes actuellement en mode absent du jeu et ne jouez pas." ] Discard -> - [ Text "Discard the selected card, revealing it to the other users in the game." ] + [ Text "Défaussez la carte sélectionnée, en la révélant aux autres utilisateurs du jeu." ] Discarded { player } -> [ Text player - , Text " discarded the following card:" + , Text " a défaussé la carte suivante :" ] -- Instructions PickCallInstruction -> - [ Text "Pick a ", ref (noun Call 1), Text " for the others to play into." ] + [ Text "Choisissez une ", ref (noun Call 1), Text " que les autres joueurs complèteront." ] WaitForCallInstruction -> - [ Text "You are waiting for the " + [ Text "Vous attendez que le " , ref Czar - , Text " to pick a " + , Text " choisisse une " , ref (noun Call 1) - , Text " for you to play into." + , Text " que vous complèterez." ] PlayInstruction { numberOfCards } -> - [ Text "You need to choose " + [ Text "Vous devez choisir " , Text (asWord numberOfCards) - , Text " more " + , Text (if numberOfCards > 1 then " autres " else " autre ") , ref (noun Response numberOfCards) - , Text " from your hand into this round before you can submit your play." + , Text " de votre main dans ce tour avant de pouvoir soumettre votre jeu." ] SubmitInstruction -> - [ Text "You need to submit your play for this round." ] + [ Text "Vous devez soumettre votre proposition pour ce tour." ] WaitingForPlaysInstruction -> - [ Text "You are waiting for other players to play into the round." ] + [ Text "Vous attendez que les autres joueurs jouent leur tour." ] CzarsDontPlayInstruction -> - [ Text "You are the " + [ Text "Vous êtes le/la " , ref Czar - , Text " for the round - you don't submit any " + , Text " pour ce tour - vous ne soumettez pas de " , ref (nounUnknownQuantity Response) - , Text ". Instead you choose the winner once everyone else has submitted theirs." + , Text ". À la place, vous choisissez le gagnant une fois que tous les autres ont soumis leur proposition." ] NotInRoundInstruction -> - [ Text "You are not in this round. You will play in the next one unless you are set to away." ] + [ Text "Vous ne participez pas à ce tour. Vous jouerez au prochain sauf si vous êtes en mode absent." ] RevealPlaysInstruction -> - [ Text "Click on the plays to flip them, then pick the one you think is best." ] + [ Text "Cliquez sur les propositions pour les retourner, puis choisissez celle que vous trouvez la meilleure." ] WaitingForCzarInstruction -> - [ Text "You can like plays while you wait for the ", ref Czar, Text " to reveal the plays and pick a winner for the round." ] + [ Text "Vous pouvez liker des propositions pendant que vous attendez que le/la ", ref Czar, Text " révèle les propositions et choisisse un gagnant pour le tour." ] AdvanceRoundInstruction -> - [ Text "The next round has started, you can advance." ] + [ Text "Le prochain tour a commencé, vous pouvez avancer." ] -- 404 Unknown UnknownPageTitle -> - [ Text "404 Error: Unknown page." ] + [ Text "Erreur 404 : Page inconnue." ] GoBackHome -> - [ Text "Go to the main page." ] + [ Text "Retourner à la page principale." ] -- Actions Refresh -> - [ Text "Refresh" ] + [ Text "Actualiser" ] Accept -> [ Text "OK" ] -- Editor AddSlot -> - [ Text "Add ", ref Blank ] + [ Text "Ajouter ", ref Blank ] AddText -> - [ Text "Add Text" ] + [ Text "Ajouter du texte" ] EditText -> - [ Text "Edit" ] + [ Text "Modifier" ] EditSlotIndex -> - [ Text "Edit" ] + [ Text "Modifier" ] MoveLeft -> - [ Text "Move Earlier" ] + [ Text "Déplacer plus tôt" ] Remove -> - [ Text "Remove" ] + [ Text "Supprimer" ] MoveRight -> - [ Text "Move Later" ] + [ Text "Déplacer plus tard" ] Normal -> [ Text "Normal" ] Capitalise -> - [ Text "Capitalise" ] + [ Text "Mettre en majuscule" ] UpperCase -> - [ Text "Upper Case" ] + [ Text "Majuscules" ] Emphasise -> - [ Text "Emphasise" ] + [ Text "Mettre en évidence" ] MustContainAtLeastOneSlot -> - [ Text "You must have at least one ", ref Blank, Text " for people to play into." ] + [ Text "Vous devez avoir au moins un ", ref Blank, Text " que les gens complèteront." ] SlotIndexExplanation -> - [ Text "What number " + [ Text "Quel nombre de " , ref (noun Response 1) - , Text " played will be used for this " + , Text " jouée sera utilisé pour ce " , ref Blank - , Text ". This lets you repeat a " + , Text ". Cela vous permet de répéter une " , ref (noun Response 1) , Text "." ] -- Errors Error -> - [ Text "Error" ] + [ Text "Erreur" ] ErrorHelp -> - [ Text "The game server might be down, or this might be a bug. Refreshing the page should get you going " - , Text "again. More details can be found below." + [ Text "Le serveur de jeu est peut-être hors ligne, ou il s'agit peut-être d'un bug. Actualiser la page devrait résoudre le problème. " + , Text "Plus de détails sont disponibles ci-dessous." ] ErrorHelpTitle -> - [ Text "Sorry, something went wrong." ] + [ Text "Désolé, quelque chose s'est mal passé." ] ErrorCheckOutOfBand -> - [ Text "Please check ", ref TwitterHandle, Text " for updates and service status. The game server will go down for a short time when a new version is released, so if you see a recent update, try again in a few minutes." ] + [ Text "Veuillez vérifier ", ref TwitterHandle, Text " pour des mises à jour et le statut du service. Le serveur de jeu sera hors ligne pendant un court moment lors de la publication d'une nouvelle version. Si vous voyez une mise à jour récente, réessayez dans quelques minutes." ] TwitterHandle -> [ Text "@Massive_Decks" ] ReportError -> - [ Text "Report Bug" ] + [ Text "Signaler un bug" ] ReportErrorDescription -> - [ Text "Let the developers know about a bug you encountered so they can fix it." ] + [ Text "Informez les développeurs d'un bug rencontré afin qu'ils puissent le corriger." ] ReportErrorBody -> - [ Text "I was [replace with a short explanation of what you were doing] when I got the following error:" ] + [ Text "Je faisais [remplacer par une brève explication de ce que vous faisiez] quand j'ai rencontré l'erreur suivante : " ] BadUrlError -> - [ Text "We tried to make a request to an invalid page." ] + [ Text "Nous avons essayé de faire une requête vers une page invalide." ] TimeoutError -> - [ Text "The server didn’t respond for too long. It may be down, please try again after a short delay." ] + [ Text "Le serveur n'a pas répondu à temps. Il est peut-être hors ligne, veuillez réessayer après un court délai." ] NetworkError -> - [ Text "Your internet connection was interrupted." ] + [ Text "Votre connexion internet a été interrompue." ] ServerDownError -> - [ Text "The game server is currently offline. Please try again later." ] + [ Text "Le serveur de jeu est actuellement hors ligne. Veuillez réessayer plus tard." ] BadStatusError -> - [ Text "The server gave a response we didn’t expect." ] + [ Text "Le serveur a donné une réponse inattendue." ] BadPayloadError -> - [ Text "The server gave a response we didn’t understand." ] + [ Text "Le serveur a donné une réponse incompréhensible." ] PatchError -> - [ Text "The server gave a patch we couldn't apply." ] + [ Text "Le serveur a envoyé une mise à jour que nous n'avons pas pu appliquer." ] VersionMismatch -> - [ Text "The server gave a config change for a different version than we expected." ] + [ Text "Le serveur a envoyé une modification de configuration pour une version différente de celle attendue." ] CastError -> - [ Text "Sorry, something went wrong trying to connect to the game." ] + [ Text "Désolé, une erreur est survenue lors de la tentative de connexion au jeu." ] ActionExecutionError -> - [ Text "You can't perform that action." ] + [ Text "Vous ne pouvez pas effectuer cette action." ] IncorrectPlayerRoleError { role, expected } -> - [ Text "You need to be a ", ref expected, Text " to do that, but you are a ", ref role, Text "." ] + [ Text "Vous devez être un ", ref expected, Text " pour faire cela, mais vous êtes un ", ref role, Text "." ] IncorrectUserRoleError { role, expected } -> - [ Text "You need to be a ", ref expected, Text " to do that, but you are a ", ref role, Text "." ] + [ Text "Vous devez être un ", ref expected, Text " pour faire cela, mais vous êtes un ", ref role, Text "." ] IncorrectRoundStageError { stage, expected } -> - [ Text "The round needs to be at the ", ref expected, Text " stage to do that, but it is at the ", ref stage, Text " stage." ] + [ Text "Le tour doit être à l'étape ", ref expected, Text " pour faire cela, mais il est à l'étape ", ref stage, Text "." ] ConfigEditConflictError -> - [ Text "Someone else changed the configuration before you, your change was not saved." ] + [ Text "Quelqu'un d'autre a modifié la configuration avant vous, votre changement n'a pas été enregistré." ] UnprivilegedError -> - [ Text "You don't have the privileges to do that." ] + [ Text "Vous n'avez pas les privilèges nécessaires pour faire cela." ] GameNotStartedError -> - [ Text "The game needs to started to do that." ] + [ Text "Le jeu doit avoir commencé pour faire cela." ] InvalidActionError { reason } -> - [ Text "The server didn't understand a request from the client. Details: ", Text reason ] + [ Text "Le serveur n'a pas compris une requête du client. Détails : ", Text reason ] AuthenticationError -> - [ Text "You can't join that game." ] + [ Text "Vous ne pouvez pas rejoindre ce jeu." ] IncorrectIssuerError -> - [ Text "Your credentials to join this game are out of date, the game no longer exists." ] + [ Text "Vos informations d'identification pour rejoindre ce jeu ne sont plus valides, le jeu n'existe plus." ] InvalidAuthenticationError -> - [ Text "Your credentials to join this game are corrupt." ] + [ Text "Vos informations d'identification pour rejoindre ce jeu sont corrompues." ] InvalidLobbyPasswordError -> - [ Text "The game password you gave was wrong. Try typing it again and if it still doesn't work, ask the person who invited you again." ] + [ Text "Le mot de passe du jeu que vous avez saisi est incorrect. Essayez à nouveau et, si cela ne fonctionne toujours pas, demandez à la personne qui vous a invité(e)." ] AlreadyLeftError -> - [ Text "You have already left this game." ] + [ Text "Vous avez déjà quitté ce jeu." ] LobbyNotFoundError -> - [ Text "That game doesn't exist." ] + [ Text "Ce jeu n'existe pas." ] LobbyClosedError { gameCode } -> - [ Text "The game you wish to join (", ref (GameCode { code = gameCode }), Text ") has ended." ] + [ Text "Le jeu que vous souhaitez rejoindre (", ref (GameCode { code = gameCode }), Text ") est terminé." ] LobbyDoesNotExistError { gameCode } -> - [ Text "The game code you entered (" + [ Text "Le code du jeu que vous avez saisi (" , ref (GameCode { code = gameCode }) - , Text ") doesn't exist. " - , Text "Try typing it again and if it still doesn't work, ask the person who invited you again." + , Text ") n'existe pas. " + , Text "Essayez de le saisir à nouveau et, si cela ne fonctionne toujours pas, demandez à la personne qui vous a invité(e)." ] RegistrationError -> - [ Text "Problem while joining the game." ] + [ Text "Problème lors de la tentative de rejoindre le jeu." ] UsernameAlreadyInUseError { username } -> - [ Text "Someone is already using the username “" + [ Text "Quelqu'un utilise déjà le nom d'utilisateur « " , Text username - , Text "”—try a different name." + , Text " »—essayez un autre nom." ] GameError -> - [ Text "Something has gone wrong in the game." ] + [ Text "Quelque chose s'est mal passé dans le jeu." ] OutOfCardsError -> - [ Text "There were not enough cards in the deck to deal everyone a hand! Try adding more decks in the game configuration." ] + [ Text "Il n'y avait pas assez de cartes dans le paquet pour distribuer une main à tout le monde ! Essayez d'ajouter plus de paquets dans la configuration du jeu." ] -- Language Names English -> @@ -1361,6 +1358,9 @@ translate _ mdString = Korean -> [ Text "Korean" ] + French -> + [ Text "French" ] + {- Private -} @@ -1376,16 +1376,6 @@ ref = Ref Nothing -an : Maybe Int -> String -an amount = - case amount of - Just 1 -> - "an " - - _ -> - "" - - {-| Take a number and give back the name of that number. Falls back to the number when it gets too big. -} asWord : Int -> String @@ -1395,40 +1385,40 @@ asWord number = "zero" 1 -> - "one" + "un" 2 -> - "two" + "deux" 3 -> - "three" + "trois" 4 -> - "four" + "quatre" 5 -> - "five" + "cinq" 6 -> "six" 7 -> - "seven" + "sept" 8 -> - "eight" + "huit" 9 -> - "nine" + "neuf" 10 -> - "ten" + "dix" 11 -> - "eleven" + "onze" 12 -> - "twelve" + "douze" other -> String.fromInt other From ad0333d3706d8af06b4e3e0154ded4ef613c7656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=A9tan=20M-F?= Date: Mon, 30 Dec 2024 14:09:34 +0100 Subject: [PATCH 5/9] Translate all languages names --- .../elm/MassiveDecks/Strings/Languages/Fr.elm | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm b/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm index 908a52c4..ec6ccfb3 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm @@ -1329,37 +1329,37 @@ translate _ mdString = -- Language Names English -> - [ Text "English" ] + [ Text "Anglais" ] BritishEnglish -> - [ Text "English (British)" ] + [ Text "Anglais (Britannique)" ] Italian -> - [ Text "Italian" ] + [ Text "Italien" ] BrazilianPortuguese -> - [ Text "Portuguese (Brazilian)" ] + [ Text "Portugais (Brésilien)" ] German -> - [ Text "German (Formal)" ] + [ Text "Allemand (Formel)" ] GermanInformal -> - [ Text "German (Informal)" ] + [ Text "Allemand (Informel)" ] Polish -> - [ Text "Polish" ] + [ Text "Polonnais" ] Indonesian -> - [ Text "Indonesian" ] + [ Text "Indonésien" ] Spanish -> - [ Text "Spanish" ] + [ Text "Espagnol" ] Korean -> - [ Text "Korean" ] + [ Text "Coréen" ] French -> - [ Text "French" ] + [ Text "Français" ] From 0c877675c14bf13bcbae6888762e925d366167ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=A9tan=20M-F?= Date: Mon, 30 Dec 2024 14:09:53 +0100 Subject: [PATCH 6/9] Add French in every language available --- client/src/elm/MassiveDecks/Strings/Languages/De.elm | 4 +++- client/src/elm/MassiveDecks/Strings/Languages/DeXInformal.elm | 3 +++ client/src/elm/MassiveDecks/Strings/Languages/Es.elm | 3 +++ client/src/elm/MassiveDecks/Strings/Languages/Id.elm | 3 +++ client/src/elm/MassiveDecks/Strings/Languages/It.elm | 3 +++ client/src/elm/MassiveDecks/Strings/Languages/Ko.elm | 3 +++ client/src/elm/MassiveDecks/Strings/Languages/Pl.elm | 3 +++ client/src/elm/MassiveDecks/Strings/Languages/PtBR.elm | 3 +++ 8 files changed, 24 insertions(+), 1 deletion(-) diff --git a/client/src/elm/MassiveDecks/Strings/Languages/De.elm b/client/src/elm/MassiveDecks/Strings/Languages/De.elm index 00e3237c..7fab6948 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/De.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/De.elm @@ -1380,10 +1380,12 @@ translate _ mdString = Spanish -> [ Text "Spanisch" ] - Korean -> [ Text "Koreanisch" ] + French -> + [ Text "Französisch" ] + an : Maybe Int -> String an amount = case amount of diff --git a/client/src/elm/MassiveDecks/Strings/Languages/DeXInformal.elm b/client/src/elm/MassiveDecks/Strings/Languages/DeXInformal.elm index e5e60abc..67ec06fb 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/DeXInformal.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/DeXInformal.elm @@ -1381,6 +1381,9 @@ translate _ mdString = Korean -> [ Text "Koreanisch" ] + French -> + [ Text "Französisch" ] + an : Maybe Int -> String an amount = diff --git a/client/src/elm/MassiveDecks/Strings/Languages/Es.elm b/client/src/elm/MassiveDecks/Strings/Languages/Es.elm index b404d00a..ea8f5b88 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/Es.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/Es.elm @@ -1363,6 +1363,9 @@ translate _ mdString = Korean -> [ Text "Coreano" ] + French -> + [ Text "Francés" ] + raw : MdString -> Translation.Result never raw = Raw Nothing diff --git a/client/src/elm/MassiveDecks/Strings/Languages/Id.elm b/client/src/elm/MassiveDecks/Strings/Languages/Id.elm index 9233c73b..3018a8e1 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/Id.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/Id.elm @@ -1372,6 +1372,9 @@ translate _ mdString = Korean -> [ Text "Korea" ] + French -> + [ Text "Perancis" ] + an : Maybe Int -> String an amount = diff --git a/client/src/elm/MassiveDecks/Strings/Languages/It.elm b/client/src/elm/MassiveDecks/Strings/Languages/It.elm index 836acf80..bc1b55b3 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/It.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/It.elm @@ -1405,6 +1405,9 @@ translate _ mdString = Korean -> [ Text "Coreano" ] + French -> + [ Text "Francese" ] + an : Maybe Int -> String an amount = diff --git a/client/src/elm/MassiveDecks/Strings/Languages/Ko.elm b/client/src/elm/MassiveDecks/Strings/Languages/Ko.elm index e7461e26..652e3cb1 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/Ko.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/Ko.elm @@ -1345,6 +1345,9 @@ translate _ mdString = Korean -> [ Text "한국어" ] + French -> + [ Text "프랑스 국민" ] + {- Private -} diff --git a/client/src/elm/MassiveDecks/Strings/Languages/Pl.elm b/client/src/elm/MassiveDecks/Strings/Languages/Pl.elm index db4c9dd9..b4549eba 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/Pl.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/Pl.elm @@ -1504,6 +1504,9 @@ translate maybeDeclCase mdString = Korean -> [ Text "Koreański" ] + French -> + [ Text "Francuski" ] + type DeclensionCase = Nominative -- Mianownik kto co diff --git a/client/src/elm/MassiveDecks/Strings/Languages/PtBR.elm b/client/src/elm/MassiveDecks/Strings/Languages/PtBR.elm index de79ffa3..fe7340f1 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/PtBR.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/PtBR.elm @@ -1377,6 +1377,9 @@ translate _ mdString = Korean -> [ Text "Coreano" ] + French -> + [ Text "Francês" ] + an : Maybe Int -> String an amount = From f0f08446c5d06bf58a581964ab9b41ebb6c224f2 Mon Sep 17 00:00:00 2001 From: Valentin POUPARD Date: Tue, 31 Dec 2024 14:53:09 +0100 Subject: [PATCH 7/9] =?UTF-8?q?fix():=20correction=20import=20traduction?= =?UTF-8?q?=20fran=C3=A7aise?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/elm/MassiveDecks/Strings.elm | 1 + client/src/elm/MassiveDecks/Strings/Languages.elm | 2 +- client/src/elm/MassiveDecks/Strings/Languages/En/Internal.elm | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/client/src/elm/MassiveDecks/Strings.elm b/client/src/elm/MassiveDecks/Strings.elm index 7d280b1d..70c41fec 100644 --- a/client/src/elm/MassiveDecks/Strings.elm +++ b/client/src/elm/MassiveDecks/Strings.elm @@ -421,3 +421,4 @@ type MdString | Indonesian -- The name of the Indonesian language. | Spanish -- The name of the Spanish language. | Korean -- The name of the Korean language. + | French -- The name of the French language. diff --git a/client/src/elm/MassiveDecks/Strings/Languages.elm b/client/src/elm/MassiveDecks/Strings/Languages.elm index 6f832ab2..7bcf30ce 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages.elm @@ -32,13 +32,13 @@ import MassiveDecks.Strings.Languages.De as DeLang import MassiveDecks.Strings.Languages.DeXInformal as DeXInformalLang import MassiveDecks.Strings.Languages.En as EnLang import MassiveDecks.Strings.Languages.Es as EsLang +import MassiveDecks.Strings.Languages.Fr as FrLang import MassiveDecks.Strings.Languages.Id as IdLang import MassiveDecks.Strings.Languages.It as ItLang import MassiveDecks.Strings.Languages.Ko as KoLang import MassiveDecks.Strings.Languages.Model exposing (..) import MassiveDecks.Strings.Languages.Pl as PlLang import MassiveDecks.Strings.Languages.PtBR as PtBRLang -import MassiveDecks.Strings.Languages.Fr as FrLang import MassiveDecks.Strings.Translation.Model as Translation import MassiveDecks.Util.Maybe as Maybe import MassiveDecks.Util.String as String diff --git a/client/src/elm/MassiveDecks/Strings/Languages/En/Internal.elm b/client/src/elm/MassiveDecks/Strings/Languages/En/Internal.elm index 62bf8f00..f902e3f1 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/En/Internal.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/En/Internal.elm @@ -1311,6 +1311,9 @@ translate _ mdString = BrazilianPortuguese -> [ Text "Portuguese (Brazilian)" ] + + French -> + [ Text "French" ] German -> [ Text "German (Formal)" ] @@ -1332,6 +1335,7 @@ translate _ mdString = + {- Private -} From 531205aac527e6c810f63fb27b46d6b3ad77de46 Mon Sep 17 00:00:00 2001 From: Valentin POUPARD Date: Tue, 31 Dec 2024 14:54:02 +0100 Subject: [PATCH 8/9] fix(): Add 'an' function fr french traduction --- .../src/elm/MassiveDecks/Strings/Languages/Fr.elm | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm b/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm index ec6ccfb3..adc294a2 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm @@ -10,8 +10,7 @@ Contributors: import MassiveDecks.Card.Source.BuiltIn.Model as BuiltIn import MassiveDecks.Card.Source.Model as Source -import MassiveDecks.Strings exposing (MdString(..), Noun(..), Quantity(..)) -import MassiveDecks.Strings.Languages.En.Internal as Internal +import MassiveDecks.Strings exposing (MdString(..), Noun(..), Quantity(..), noun, nounMaybe, nounUnknownQuantity) import MassiveDecks.Strings.Languages.Model exposing (Language(..)) import MassiveDecks.Strings.Translation as Translation import MassiveDecks.Strings.Translation.Model as Translation exposing (Result(..)) @@ -23,7 +22,7 @@ pack = { lang = Fr , code = "fr" , name = French - , translate = Internal.translate + , translate = translate , recommended = "cah-base-en" |> BuiltIn.hardcoded |> Source.BuiltIn } @@ -258,7 +257,7 @@ translate _ mdString = HouseRuleRebootDescription { cost } -> [ Text "À tout moment, les joueurs peuvent échanger " - , Text (cost) + , Text (an cost) , ref (nounMaybe Point cost) , Text " pour défausser leur main et en tirer une nouvelle." ] @@ -1375,6 +1374,14 @@ ref : MdString -> Translation.Result never ref = Ref Nothing +an : Maybe Int -> String +an amount = + case amount of + Just 1 -> + "an " + + _ -> + "" {-| Take a number and give back the name of that number. Falls back to the number when it gets too big. -} From 44584e122d7993466aec2cd249f75b7ce38477f6 Mon Sep 17 00:00:00 2001 From: Valentin POUPARD Date: Tue, 31 Dec 2024 15:05:35 +0100 Subject: [PATCH 9/9] fix(): correction error TYPE MISMATCH for "HouseRuleCzarChoicesCustomDescription" & "HouseRuleHappyEndingDescription" + linter --- .../elm/MassiveDecks/Strings/Languages/Fr.elm | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm b/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm index adc294a2..f73d92c4 100644 --- a/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm +++ b/client/src/elm/MassiveDecks/Strings/Languages/Fr.elm @@ -49,7 +49,7 @@ translate _ mdString = [ Text "Carte Blanche" ] Point -> - [ Text "Point d’Excellence" ] + [ Text "Point d'Excellence" ] Player -> [ Text "Joueur" ] @@ -66,7 +66,7 @@ translate _ mdString = [ Text "Cartes Blanches" ] Point -> - [ Text "Points d’Excellence" ] + [ Text "Points d'Excellence" ] Player -> [ Text "Joueurs" ] @@ -91,7 +91,7 @@ translate _ mdString = [ Text "Un jeu d'ambiance décalé." ] WhatIsThis -> - [ Text "Qu’est-ce que ", ref MassiveDecks, Text "?" ] + [ Text "Qu'est-ce que ", ref MassiveDecks, Text "?" ] GameDescription -> [ ref MassiveDecks @@ -344,7 +344,7 @@ translate _ mdString = [ Text "Happy Ending" ] HouseRuleHappyEndingDescription -> - [ Text "Quand la partie se termine, le dernier tour est une ", ref (noun Call 1), " 'Créer un Haïku'." ] + [ Text "Quand la partie se termine, le dernier tour est une ", ref (noun Call 1), Text " 'Créer un Haïku'." ] HouseRuleCzarChoices -> [ Text "Choix du ", ref Czar ] @@ -367,7 +367,7 @@ translate _ mdString = [ Text "Personnalisé" ] HouseRuleCzarChoicesCustomDescription -> - [ Text "Si le ", ref Czar, Text " peut écrire des ", ref (nounUnknownQuantity Call), " personnalisées. Cela prend l'une des options." ] + [ Text "Si le ", ref Czar, Text " peut écrire des ", ref (nounUnknownQuantity Call), Text " personnalisées. Cela prend l'une des options." ] HouseRuleWinnersPick -> [ Text "Choix du gagnant" ] @@ -418,7 +418,7 @@ translate _ mdString = [ Text "Avancer Automatiquement le Tour" ] AutoAdvanceExplanation -> - [ Text "À la fin d’un tour, passez automatiquement au suivant sans attendre." ] + [ Text "À la fin d'un tour, passez automatiquement au suivant sans attendre." ] SpeechSetting -> [ Text "Synthèse Vocale" ] @@ -427,7 +427,7 @@ translate _ mdString = [ Text "Lisez les cartes à haute voix grâce à la synthèse vocale." ] SpeechNotSupportedExplanation -> - [ Text "Votre navigateur ne prend pas en charge la synthèse vocale ou n’a pas de voix installées." ] + [ Text "Votre navigateur ne prend pas en charge la synthèse vocale ou n'a pas de voix installées." ] VoiceSetting -> [ Text "Voix de Synthèse" ] @@ -442,7 +442,7 @@ translate _ mdString = [ Text "Votre navigateur ne prend pas en charge les notifications." ] NotificationsBrowserPermissions -> - [ Text "Vous devez donner l’autorisation à " + [ Text "Vous devez donner l'autorisation à " , ref MassiveDecks , Text " de vous notifier. Cela ne sera utilisé que lorsque le jeu est ouvert et cette option activée." ] @@ -476,13 +476,13 @@ translate _ mdString = [ Text "Code de Partie" ] GameCodeDescription -> - [ Text "Un code qui permet à d’autres personnes de trouver et rejoindre votre partie." ] + [ Text "Un code qui permet à d'autres personnes de trouver et rejoindre votre partie." ] GameCode { code } -> [ Text code ] GameCodeSpecificDescription -> - [ Text "Donnez ce code de partie aux personnes pour qu’elles puissent rejoindre la partie." ] + [ Text "Donnez ce code de partie aux personnes pour qu'elles puissent rejoindre la partie." ] GameCodeHowToAcquire -> [ Text "Demandez à la personne qui vous a invité le ", ref GameCodeTerm, Text "." ] @@ -506,7 +506,7 @@ translate _ mdString = [ Text "En Train de Jouer" ] PlayingDescription -> - [ Text "Ce joueur est dans le tour, mais n’a pas encore soumis de cartes." ] + [ Text "Ce joueur est dans le tour, mais n'a pas encore soumis de cartes." ] Played -> [ Text "A Joué" ] @@ -525,7 +525,7 @@ translate _ mdString = [ Text "Parties en cours." ] SettingUpGame -> - [ Text "Parties qui n’ont pas encore commencé." ] + [ Text "Parties qui n'ont pas encore commencé." ] StartYourOwn -> [ Text "Créer une nouvelle partie ?" ] @@ -636,7 +636,7 @@ translate _ mdString = [ Text "Déconnecté" ] DisconnectedDescription -> - [ Text "Cet utilisateur n’est pas connecté à la partie." ] + [ Text "Cet utilisateur n'est pas connecté à la partie." ] Privileged -> [ Text "Propriétaire" ] @@ -648,7 +648,7 @@ translate _ mdString = [ Text "IA" ] AiDescription -> - [ Text "Ce joueur est contrôlé par l’ordinateur." ] + [ Text "Ce joueur est contrôlé par l'ordinateur." ] Score { total } -> [ Text (String.fromInt total) ] @@ -663,7 +663,7 @@ translate _ mdString = [ Text (String.fromInt total) ] LikesDescription -> - [ Text "Le nombre de mentions “j’aime” reçues." + [ Text "Le nombre de mentions “j'aime” reçues." ] ToggleUserList -> @@ -776,15 +776,15 @@ translate _ mdString = MissingCardType { cardType } -> [ Text "Aucun de vos paquets ne contient de " , ref (nounUnknownQuantity cardType) - , Text ". Vous avez besoin d’un paquet qui en contient pour commencer la partie." + , Text ". Vous avez besoin d'un paquet qui en contient pour commencer la partie." ] NotEnoughCardsOfType { cardType, needed, have } -> - [ Text "Pour le nombre de joueurs dans la partie, vous avez besoin d’au moins " + [ Text "Pour le nombre de joueurs dans la partie, vous avez besoin d'au moins " , Text (needed |> String.fromInt) , Text " " , ref (noun cardType needed) - , Text " mais vous n’en avez que " + , Text " mais vous n'en avez que " , Text (have |> String.fromInt) , Text "." ] @@ -806,7 +806,7 @@ translate _ mdString = [ ref source, Text " ne reconnaît pas le paquet demandé. Vérifiez les informations fournies." ] SourceServiceFailure { source } -> - [ ref source, Text " n’a pas pu fournir le paquet. Veuillez réessayer plus tard ou choisir une autre source." ] + [ ref source, Text " n'a pas pu fournir le paquet. Veuillez réessayer plus tard ou choisir une autre source." ] ManyDecks -> [ Text "Many Decks" ] @@ -863,7 +863,7 @@ translate _ mdString = [ Segment [ Text "Le nombre de " , ref (nounUnknownQuantity Point) - , Text " qu’un joueur doit obtenir pour gagner la partie." + , Text " qu'un joueur doit obtenir pour gagner la partie." ] , Text " " , Segment [ Text "Si désactivé, la partie continue indéfiniment." ] @@ -889,7 +889,7 @@ translate _ mdString = NeedAtLeastOneHuman -> [ Text "Malheureusement, les joueurs automatiques ne peuvent pas être le " , ref Czar - , Text ", vous avez donc besoin d’au moins un joueur humain pour commencer la partie." + , Text ", vous avez donc besoin d'au moins un joueur humain pour commencer la partie." , Text " (Même si un seul humain risque d'être un peu ennuyeux !)" ]