From 5244b2a138bee66c296b46c87dfa0f80ce7eb245 Mon Sep 17 00:00:00 2001 From: Jonathan Gamble Date: Sun, 20 Oct 2024 12:54:18 -0500 Subject: [PATCH] hotfix i18n study & broadcast embed issues --- ui/site/src/i18nHotfix.ts | 1207 +++++++++++++++++++++++++++++++++++++ ui/site/src/site.ts | 1 + 2 files changed, 1208 insertions(+) create mode 100644 ui/site/src/i18nHotfix.ts diff --git a/ui/site/src/i18nHotfix.ts b/ui/site/src/i18nHotfix.ts new file mode 100644 index 000000000000..4b81e1bb8296 --- /dev/null +++ b/ui/site/src/i18nHotfix.ts @@ -0,0 +1,1207 @@ +// @ts-nocheck +function p(t) { + let n = (e, ...i) => l(o(t, e), e, ...i).join(''); + return (n.asArray = (e, ...i) => l(o(t, e), ...i)), n; +} +function s(t) { + let n = (...e) => l(t, ...e).join(''); + return (n.asArray = (...e) => l(t, ...e)), n; +} +function o(t, n) { + return t[site.quantity(n)] || t.other || t.one || ''; +} +function l(t, ...n) { + let e = t.split(/(%(?:\d\$)?s)/); + if (n.length) { + let i = e.indexOf('%s'); + if (i !== -1) e[i] = n[0]; + else + for (let r = 0; r < n.length; r++) { + let f = e.indexOf('%' + (r + 1) + '$s'); + f !== -1 && (e[f] = n[r]); + } + } + return e; +} + +if (!window.i18n) window.i18n = {}; + +if (!window.i18n.puzzle) { + let i = (window.i18n.puzzle ??= {}); + i['findTheBestMoveForWhite'] = 'Find the best move for white.'; + i['findTheBestMoveForBlack'] = 'Find the best move for black.'; +} + +if (!window.i18n.site) { + let i = (window.i18n.site = {}); + i['abortGame'] = 'Abort game'; + i['abortTheGame'] = 'Abort the game'; + i['about'] = 'About'; + i['aboutSimul'] = 'Simuls involve a single player facing several players at once.'; + i['aboutSimulImage'] = 'Out of 50 opponents, Fischer won 47 games, drew 2 and lost 1.'; + i['aboutSimulRealLife'] = + 'The concept is taken from real world events. In real life, this involves the simul host moving from table to table to play a single move.'; + i['aboutSimulRules'] = + 'When the simul starts, every player starts a game with the host. The simul ends when all games are complete.'; + i['aboutSimulSettings'] = 'Simuls are always casual. Rematches, takebacks and adding time are disabled.'; + i['aboutX'] = s('About %s'); + i['accept'] = 'Accept'; + i['accountCanLogin'] = s('You can login right now as %s.'); + i['accountClosed'] = s('The account %s is closed.'); + i['accountConfirmationEmailNotNeeded'] = 'You do not need a confirmation email.'; + i['accountConfirmed'] = s('The user %s is successfully confirmed.'); + i['accountRegisteredWithoutEmail'] = s('The account %s was registered without an email.'); + i['accuracy'] = 'Accuracy'; + i['activePlayers'] = 'Active players'; + i['addCurrentVariation'] = 'Add current variation'; + i['advancedSettings'] = 'Advanced settings'; + i['advantage'] = 'Advantage'; + i['agreementAssistance'] = + 'I agree that I will at no time receive assistance during my games (from a chess computer, book, database or another person).'; + i['agreementMultipleAccounts'] = s( + 'I agree that I will not create multiple accounts (except for the reasons stated in the %s).', + ); + i['agreementNice'] = 'I agree that I will always be respectful to other players.'; + i['agreementPolicy'] = 'I agree that I will follow all Lichess policies.'; + i['aiNameLevelAiLevel'] = s('%1$s level %2$s'); + i['allInformationIsPublicAndOptional'] = 'All information is public and optional.'; + i['allSet'] = 'All set!'; + i['allSquaresOfTheBoard'] = 'All squares of the board'; + i['always'] = 'Always'; + i['analysis'] = 'Analysis board'; + i['analysisOptions'] = 'Analysis options'; + i['analysisShapesHowTo'] = 'Press shift+click or right-click to draw circles and arrows on the board.'; + i['andSaveNbPremoveLines'] = p({ one: 'and save %s premove line', other: 'and save %s premove lines' }); + i['anonymous'] = 'Anonymous'; + i['anotherWasX'] = s('Another was %s'); + i['apply'] = 'Submit'; + i['asBlack'] = 'as black'; + i['asFreeAsLichess'] = 'As free as Lichess'; + i['askYourChessTeacherAboutLiftingKidMode'] = + 'Your account is managed. Ask your chess teacher about lifting kid mode.'; + i['asWhite'] = 'as white'; + i['automaticallyProceedToNextGameAfterMoving'] = 'Automatically proceed to next game after moving'; + i['autoSwitch'] = 'Auto switch'; + i['availableInNbLanguages'] = p({ one: 'Available in %s language!', other: 'Available in %s languages!' }); + i['averageCentipawnLoss'] = 'Average centipawn loss'; + i['averageElo'] = 'Average rating'; + i['averageOpponent'] = 'Average opponent'; + i['averageRatingX'] = s('Average rating: %s'); + i['background'] = 'Background'; + i['backgroundImageUrl'] = 'Background image URL:'; + i['backToGame'] = 'Back to game'; + i['backToTournament'] = 'Back to tournament'; + i['berserkRate'] = 'Berserk rate'; + i['bestMoveArrow'] = 'Best move arrow'; + i['bestWasX'] = s('Best was %s'); + i['betterThanPercentPlayers'] = s('Better than %1$s of %2$s players'); + i['bewareTheGameIsRatedButHasNoClock'] = 'Beware, the game is rated but has no clock!'; + i['biography'] = 'Biography'; + i['biographyDescription'] = + 'Talk about yourself, your interests, what you like in chess, your favourite openings, players, ...'; + i['black'] = 'Black'; + i['blackCastlingKingside'] = 'Black O-O'; + i['blackCheckmatesInOneMove'] = 'Black to checkmate in one move'; + i['blackDeclinesDraw'] = 'Black declines draw'; + i['blackDidntMove'] = "Black didn't move"; + i['blackIsVictorious'] = 'Black is victorious'; + i['blackLeftTheGame'] = 'Black left the game'; + i['blackOffersDraw'] = 'Black offers draw'; + i['blackPlays'] = 'Black to play'; + i['blackResigned'] = 'Black resigned'; + i['blackTimeOut'] = 'Black time out'; + i['blackWins'] = 'Black wins'; + i['blackWinsGame'] = 'Black wins'; + i['blankedPassword'] = + 'You have used the same password on another site, and that site has been compromised. To ensure the safety of your Lichess account, we need you to set a new password. Thank you for your understanding.'; + i['blitz'] = 'Blitz'; + i['blitzDesc'] = 'Fast games: 3 to 8 minutes'; + i['block'] = 'Block'; + i['blocked'] = 'Blocked'; + i['blocks'] = p({ one: '%s block', other: '%s blocks' }); + i['blog'] = 'Blog'; + i['blunder'] = 'Blunder'; + i['board'] = 'Board'; + i['boardEditor'] = 'Board editor'; + i['boardReset'] = 'Reset colours to default'; + i['bookmarkThisGame'] = 'Bookmark this game'; + i['brightness'] = 'Brightness'; + i['builtForTheLoveOfChessNotMoney'] = 'Built for the love of chess, not money'; + i['bullet'] = 'Bullet'; + i['bulletBlitzClassical'] = 'Bullet, blitz, classical'; + i['bulletDesc'] = 'Very fast games: less than 3 minutes'; + i['by'] = s('by %s'); + i['byCPL'] = 'By CPL'; + i['byRegisteringYouAgreeToBeBoundByOur'] = s('By registering, you agree to the %s.'); + i['calculatingMoves'] = 'Calculating moves...'; + i['cancel'] = 'Cancel'; + i['cancelRematchOffer'] = 'Cancel rematch offer'; + i['cancelSimul'] = 'Cancel the simul'; + i['cancelTournament'] = 'Cancel the tournament'; + i['cantDoThisTwice'] = 'If you close your account a second time, there will be no way of recovering it.'; + i['captcha.fail'] = 'Please solve the chess captcha.'; + i['capture'] = 'Capture'; + i['castling'] = 'Castling'; + i['casual'] = 'Casual'; + i['casualTournament'] = 'Casual'; + i['changeEmail'] = 'Change email'; + i['changePassword'] = 'Change password'; + i['changeUsername'] = 'Change username'; + i['changeUsernameDescription'] = + 'Change your username. This can only be done once and you are only allowed to change the case of the letters in your username.'; + i['changeUsernameNotSame'] = 'Only the case of the letters can change. For example "johndoe" to "JohnDoe".'; + i['chat'] = 'Chat'; + i['chatRoom'] = 'Chat room'; + i['cheat'] = 'Cheat'; + i['cheatDetected'] = 'Cheat Detected'; + i['checkmate'] = 'Checkmate'; + i['checkSpamFolder'] = 'Also check your spam folder, it might end up there. If so, mark it as not spam.'; + i['checkYourEmail'] = 'Check your Email'; + i['chess960StartPosition'] = s('Chess960 start position: %s'); + i['chessBasics'] = 'Chess basics'; + i['claimADraw'] = 'Claim a draw'; + i['classical'] = 'Classical'; + i['classicalDesc'] = 'Classical games: 25 minutes and more'; + i['clearBoard'] = 'Clear board'; + i['clearSavedMoves'] = 'Clear moves'; + i['clickHereToReadIt'] = 'Click here to read it'; + i['clickOnTheBoardToMakeYourMove'] = 'Click on the board to make your move, and prove you are human.'; + i['clickToRevealEmailAddress'] = '[Click to reveal email address]'; + i['clock'] = 'Clock'; + i['clockIncrement'] = 'Clock increment'; + i['clockInitialTime'] = 'Clock initial time'; + i['close'] = 'Close'; + i['closedAccountChangedMind'] = + 'If you closed your account, but have since changed your mind, you get one chance of getting your account back.'; + i['closingAccountWithdrawAppeal'] = 'Closing your account will withdraw your appeal'; + i['cloudAnalysis'] = 'Cloud analysis'; + i['coaches'] = 'Coaches'; + i['coachManager'] = 'Coach manager'; + i['collapseVariations'] = 'Collapse variations'; + i['community'] = 'Community'; + i['composeMessage'] = 'Compose message'; + i['computer'] = 'Computer'; + i['computerAnalysis'] = 'Computer analysis'; + i['computerAnalysisAvailable'] = 'Computer analysis available'; + i['computerAnalysisDisabled'] = 'Computer analysis disabled'; + i['computersAreNotAllowedToPlay'] = + 'Computers and computer-assisted players are not allowed to play. Please do not get assistance from chess engines, databases, or from other players while playing. Also note that making multiple accounts is strongly discouraged and excessive multi-accounting will lead to being banned.'; + i['computerThinking'] = 'Computer thinking ...'; + i['conditionalPremoves'] = 'Conditional premoves'; + i['conditionOfEntry'] = 'Entry requirements:'; + i['confirmMove'] = 'Confirm move'; + i['congratsYouWon'] = 'Congratulations, you won!'; + i['continueFromHere'] = 'Continue from here'; + i['contribute'] = 'Contribute'; + i['copyTextToEmail'] = s('Copy and paste the above text and send it to %s'); + i['copyVariationPgn'] = 'Copy variation PGN'; + i['correspondence'] = 'Correspondence'; + i['correspondenceChess'] = 'Correspondence chess'; + i['correspondenceDesc'] = 'Correspondence games: one or several days per move'; + i['countryRegion'] = 'Country or region'; + i['cpus'] = 'CPUs'; + i['create'] = 'Create'; + i['createAGame'] = 'Create a game'; + i['createANewTopic'] = 'Create a new topic'; + i['createANewTournament'] = 'Create a new tournament'; + i['createdBy'] = 'Created by'; + i['createdSimuls'] = 'Newly created simuls'; + i['createTheTopic'] = 'Create the topic'; + i['crosstable'] = 'Crosstable'; + i['cumulative'] = 'Cumulative'; + i['currentGames'] = 'Current games'; + i['currentMatchScore'] = 'Current match score'; + i['currentPassword'] = 'Current password'; + i['custom'] = 'Custom'; + i['customPosition'] = 'Custom position'; + i['cyclePreviousOrNextVariation'] = 'Cycle previous/next variation'; + i['dark'] = 'Dark'; + i['database'] = 'Database'; + i['daysPerTurn'] = 'Days per turn'; + i['decline'] = 'Decline'; + i['defeat'] = 'Defeat'; + i['defeatVsYInZ'] = s('%1$s vs %2$s in %3$s'); + i['delete'] = 'Delete'; + i['deleteFromHere'] = 'Delete from here'; + i['deleteThisImportedGame'] = 'Delete this imported game?'; + i['depthX'] = s('Depth %s'); + i['descPrivate'] = 'Private description'; + i['descPrivateHelp'] = + 'Text that only the team members will see. If set, replaces the public description for team members.'; + i['description'] = 'Description'; + i['deviceTheme'] = 'Device theme'; + i['disableKidMode'] = 'Disable Kid mode'; + i['discussions'] = 'Conversations'; + i['doItAgain'] = 'Do it again'; + i['doneReviewingBlackMistakes'] = 'Done reviewing black mistakes'; + i['doneReviewingWhiteMistakes'] = 'Done reviewing white mistakes'; + i['download'] = 'Download'; + i['downloadAnnotated'] = 'Download annotated'; + i['downloadImported'] = 'Download imported'; + i['downloadRaw'] = 'Download raw'; + i['draw'] = 'Draw'; + i['drawByFiftyMoves'] = 'The game has been drawn by the fifty move rule.'; + i['drawByMutualAgreement'] = 'Draw by mutual agreement'; + i['drawn'] = 'Drawn'; + i['drawOfferAccepted'] = 'Draw offer accepted'; + i['drawOfferCanceled'] = 'Draw offer cancelled'; + i['drawOfferSent'] = 'Draw offer sent'; + i['drawRate'] = 'Draw rate'; + i['draws'] = 'Draws'; + i['drawVsYInZ'] = s('%1$s vs %2$s in %3$s'); + i['dtzWithRounding'] = + "DTZ50'' with rounding, based on number of half-moves until next capture or pawn move"; + i['duration'] = 'Duration'; + i['edit'] = 'Edit'; + i['editProfile'] = 'Edit profile'; + i['email'] = 'Email'; + i['emailAssociatedToaccount'] = 'Email address associated to the account'; + i['emailCanTakeSomeTime'] = 'It can take some time to arrive.'; + i['emailConfirmHelp'] = 'Help with email confirmation'; + i['emailConfirmNotReceived'] = "Didn't receive your confirmation email after signing up?"; + i['emailForSignupHelp'] = 'If everything else fails, then send us this email:'; + i['emailMeALink'] = 'Email me a link'; + i['emailSent'] = s('We have sent an email to %s.'); + i['emailSuggestion'] = + 'Do not set an email address suggested by someone else. They will use it to steal your account.'; + i['embedInYourWebsite'] = 'Embed in your website'; + i['embedsAvailable'] = 'Paste a game URL or a study chapter URL to embed it.'; + i['emptyTournamentName'] = 'Leave empty to name the tournament after a notable chess player.'; + i['enable'] = 'Enable'; + i['enableKidMode'] = 'Enable Kid mode'; + i['endgame'] = 'Endgame'; + i['endgamePositions'] = 'Endgame positions'; + i['engineFailed'] = 'Error loading engine'; + i['engineManager'] = 'Engine manager'; + i['error.email'] = 'This email address is invalid'; + i['error.email_acceptable'] = + 'This email address is not acceptable. Please double-check it, and try again.'; + i['error.email_different'] = 'This is already your email address'; + i['error.email_unique'] = 'Email address invalid or already taken'; + i['error.max'] = s('Must be at most %s'); + i['error.maxLength'] = s('Must be at most %s characters long'); + i['error.min'] = s('Must be at least %s'); + i['error.minLength'] = s('Must be at least %s characters long'); + i['error.namePassword'] = "Please don't use your username as your password."; + i['error.provideOneCheatedGameLink'] = 'Please provide at least one link to a cheated game.'; + i['error.required'] = 'This field is required'; + i['error.unknown'] = 'Invalid value'; + i['error.weakPassword'] = 'This password is extremely common, and too easy to guess.'; + i['estimatedStart'] = 'Estimated start time'; + i['evaluatingYourMove'] = 'Evaluating your move ...'; + i['evaluationGauge'] = 'Evaluation gauge'; + i['eventInProgress'] = 'Playing now'; + i['everybodyGetsAllFeaturesForFree'] = 'Everybody gets all features for free'; + i['expandVariations'] = 'Expand variations'; + i['exportGames'] = 'Export games'; + i['fast'] = 'Fast'; + i['favoriteOpponents'] = 'Favourite opponents'; + i['fiftyMovesWithoutProgress'] = 'Fifty moves without progress'; + i['filterGames'] = 'Filter games'; + i['findBetterMoveForBlack'] = 'Find a better move for black'; + i['findBetterMoveForWhite'] = 'Find a better move for white'; + i['finished'] = 'Finished'; + i['flair'] = 'Flair'; + i['flipBoard'] = 'Flip board'; + i['focusChat'] = 'Focus chat'; + i['follow'] = 'Follow'; + i['followAndChallengeFriends'] = 'Follow and challenge friends'; + i['following'] = 'Following'; + i['followsYou'] = 'Follows you'; + i['followX'] = s('Follow %s'); + i['forceDraw'] = 'Call draw'; + i['forceResignation'] = 'Claim victory'; + i['forceVariation'] = 'Force variation'; + i['forgotPassword'] = 'Forgot password?'; + i['forum'] = 'Forum'; + i['freeOnlineChess'] = 'Free Online Chess'; + i['friends'] = 'Friends'; + i['fromPosition'] = 'From position'; + i['fullFeatured'] = 'Full featured'; + i['gameAborted'] = 'Game aborted'; + i['gameAnalysis'] = 'Game analysis'; + i['gameAsGIF'] = 'Game as GIF'; + i['gameInProgress'] = s('You have a game in progress with %s.'); + i['gameOver'] = 'Game Over'; + i['games'] = 'Games'; + i['gamesPlayed'] = 'Games played'; + i['gameVsX'] = s('Game vs %1$s'); + i['getAHint'] = 'Get a hint'; + i['giveNbSeconds'] = p({ one: 'Give %s second', other: 'Give %s seconds' }); + i['glicko2Rating'] = 'Glicko-2 rating'; + i['goDeeper'] = 'Go deeper'; + i['goodPractice'] = 'To that effect, we must ensure that all players follow good practice.'; + i['graph'] = 'Graph'; + i['hangOn'] = 'Hang on!'; + i['help'] = 'Help:'; + i['hideBestMove'] = 'Hide best move'; + i['host'] = 'Host'; + i['hostANewSimul'] = 'Host a new simul'; + i['hostColorX'] = s('Host colour: %s'); + i['howToAvoidThis'] = 'How to avoid this?'; + i['hue'] = 'Hue'; + i['human'] = 'Human'; + i['ifNoneLeaveEmpty'] = 'If none, leave empty'; + i['ifRatingIsPlusMinusX'] = s('If rating is ± %s'); + i['ifRegistered'] = 'If registered'; + i['ifYouDoNotSeeTheEmailCheckOtherPlaces'] = + "If you don't see the email, check other places it might be, like your junk, spam, social, or other folders."; + i['important'] = 'Important'; + i['importedByX'] = s('Imported by %s'); + i['importGame'] = 'Import game'; + i['importGameCaveat'] = 'Variations will be erased. To keep them, import the PGN via a study.'; + i['importGameDataPrivacyWarning'] = + 'This PGN can be accessed by the public. To import a game privately, use a study.'; + i['importGameExplanation'] = + 'Paste a game PGN to get a browsable replay, computer analysis, game chat and public shareable URL.'; + i['importPgn'] = 'Import PGN'; + i['inaccuracy'] = 'Inaccuracy'; + i['inappropriateNameWarning'] = 'Anything even slightly inappropriate could get your account closed.'; + i['inbox'] = 'Inbox'; + i['incorrectPassword'] = 'Incorrect password'; + i['increment'] = 'Increment'; + i['incrementInSeconds'] = 'Increment in seconds'; + i['infiniteAnalysis'] = 'Infinite analysis'; + i['inKidModeTheLichessLogoGetsIconX'] = s( + 'In kid mode, the Lichess logo gets a %s icon, so you know your kids are safe.', + ); + i['inlineNotation'] = 'Inline notation'; + i['inLocalBrowser'] = 'in local browser'; + i['insideTheBoard'] = 'Inside the board'; + i['instructions'] = 'Instructions'; + i['insufficientMaterial'] = 'Insufficient material'; + i['inTheFAQ'] = 'in the FAQ'; + i['invalidAuthenticationCode'] = 'Invalid authentication code'; + i['invalidFen'] = 'Invalid FEN'; + i['invalidPgn'] = 'Invalid PGN'; + i['invalidUsernameOrPassword'] = 'Invalid username or password'; + i['invitedYouToX'] = s('invited you to "%1$s".'); + i['inYourLocalTimezone'] = 'In your own local timezone'; + i['isPrivate'] = 'Private'; + i['itsYourTurn'] = "It's your turn!"; + i['join'] = 'Join'; + i['joinTheGame'] = 'Join the game'; + i['joinTheTeamXToPost'] = s('Join the %1$s, to post in this forum'); + i['keyboardShortcuts'] = 'Keyboard shortcuts'; + i['keyCycleSelectedVariation'] = 'Cycle selected variation'; + i['keyEnterOrExitVariation'] = 'enter/exit variation'; + i['keyGoToStartOrEnd'] = 'go to start/end'; + i['keyMoveBackwardOrForward'] = 'move backward/forward'; + i['keyNextBlunder'] = 'Next blunder'; + i['keyNextBranch'] = 'Next branch'; + i['keyNextInaccuracy'] = 'Next inaccuracy'; + i['keyNextLearnFromYourMistakes'] = 'Next (Learn from your mistakes)'; + i['keyNextMistake'] = 'Next mistake'; + i['keyPreviousBranch'] = 'Previous branch'; + i['keyRequestComputerAnalysis'] = 'Request computer analysis, Learn from your mistakes'; + i['keyShowOrHideComments'] = 'show/hide comments'; + i['kidMode'] = 'Kid mode'; + i['kidModeExplanation'] = + 'This is about safety. In kid mode, all site communications are disabled. Enable this for your children and school students, to protect them from other internet users.'; + i['kidModeIsEnabled'] = 'Kid mode is enabled.'; + i['kingInTheCenter'] = 'King in the centre'; + i['language'] = 'Language'; + i['lastPost'] = 'Last post'; + i['lastSeenActive'] = s('Active %s'); + i['latestForumPosts'] = 'Latest forum posts'; + i['leaderboard'] = 'Leaderboard'; + i['learnFromThisMistake'] = 'Learn from this mistake'; + i['learnFromYourMistakes'] = 'Learn from your mistakes'; + i['learnMenu'] = 'Learn'; + i['lessThanNbMinutes'] = p({ one: 'Less than %s minute', other: 'Less than %s minutes' }); + i['letOtherPlayersChallengeYou'] = 'Let other players challenge you'; + i['letOtherPlayersFollowYou'] = 'Let other players follow you'; + i['letOtherPlayersInviteYouToStudy'] = 'Let other players invite you to study'; + i['letOtherPlayersMessageYou'] = 'Let other players message you'; + i['level'] = 'Level'; + i['lichessDbExplanation'] = 'Rated games played on Lichess'; + i['lichessPatronInfo'] = + 'Lichess is a charity and entirely free/libre open source software.\nAll operating costs, development, and content are funded solely by user donations.'; + i['lichessTournaments'] = 'Lichess tournaments'; + i['lifetimeScore'] = 'Lifetime score'; + i['light'] = 'Light'; + i['list'] = 'List'; + i['listBlockedPlayers'] = 'List players you have blocked'; + i['loadingEngine'] = 'Loading engine...'; + i['loadPosition'] = 'Load position'; + i['lobby'] = 'Lobby'; + i['location'] = 'Location'; + i['loginToChat'] = 'Sign in to chat'; + i['logOut'] = 'Sign out'; + i['losing'] = 'Losing'; + i['losses'] = 'Losses'; + i['lossOr50MovesByPriorMistake'] = 'Loss or 50 moves by prior mistake'; + i['lossSavedBy50MoveRule'] = 'Loss prevented by 50-move rule'; + i['lostAgainstTOSViolator'] = 'You lost rating points to someone who violated the Lichess TOS'; + i['makeAStudy'] = 'For safekeeping and sharing, consider making a study.'; + i['makeMainLine'] = 'Make mainline'; + i['makePrivateTournament'] = 'Make the tournament private, and restrict access with a password'; + i['makeSureToRead'] = s('Make sure to read %1$s'); + i['markdownAvailable'] = s('%s is available for more advanced syntax.'); + i['masterDbExplanation'] = s('OTB games of %1$s+ FIDE-rated players from %2$s to %3$s'); + i['mateInXHalfMoves'] = p({ one: 'Mate in %s half-move', other: 'Mate in %s half-moves' }); + i['maxDepthReached'] = 'Max depth reached!'; + i['maximumNbCharacters'] = p({ one: 'Maximum: %s character.', other: 'Maximum: %s characters.' }); + i['maximumWeeklyRating'] = 'Maximum weekly rating'; + i['maybeIncludeMoreGamesFromThePreferencesMenu'] = 'Maybe include more games from the preferences menu?'; + i['memberSince'] = 'Member since'; + i['memory'] = 'Memory'; + i['mentionedYouInX'] = s('mentioned you in "%1$s".'); + i['menu'] = 'Menu'; + i['message'] = 'Message'; + i['middlegame'] = 'Middlegame'; + i['minimumRatedGames'] = 'Minimum rated games'; + i['minimumRating'] = 'Minimum rating'; + i['minutesPerSide'] = 'Minutes per side'; + i['mistake'] = 'Mistake'; + i['mobile'] = 'Mobile'; + i['mobileApp'] = 'Mobile App'; + i['mode'] = 'Mode'; + i['more'] = 'More'; + i['moreThanNbPerfRatedGames'] = p({ one: '≥ %1$s %2$s rated game', other: '≥ %1$s %2$s rated games' }); + i['moreThanNbRatedGames'] = p({ one: '≥ %s rated game', other: '≥ %s rated games' }); + i['mouseTricks'] = 'Mouse tricks'; + i['move'] = 'Move'; + i['movesPlayed'] = 'Moves played'; + i['moveTimes'] = 'Move times'; + i['multipleLines'] = 'Multiple lines'; + i['mustBeInTeam'] = s('Must be in team %s'); + i['name'] = 'Name'; + i['navigateMoveTree'] = 'Navigate the move tree'; + i['nbBlunders'] = p({ one: '%s blunder', other: '%s blunders' }); + i['nbBookmarks'] = p({ one: '%s bookmark', other: '%s bookmarks' }); + i['nbDays'] = p({ one: '%s day', other: '%s days' }); + i['nbDraws'] = p({ one: '%s draw', other: '%s draws' }); + i['nbFollowers'] = p({ one: '%s follower', other: '%s followers' }); + i['nbFollowing'] = p({ one: '%s following', other: '%s following' }); + i['nbForumPosts'] = p({ one: '%s forum post', other: '%s forum posts' }); + i['nbFriendsOnline'] = p({ one: '%s friend online', other: '%s friends online' }); + i['nbGames'] = p({ one: '%s game', other: '%s games' }); + i['nbGamesInPlay'] = p({ one: '%s game in play', other: '%s games in play' }); + i['nbGamesWithYou'] = p({ one: '%s game with you', other: '%s games with you' }); + i['nbHours'] = p({ one: '%s hour', other: '%s hours' }); + i['nbImportedGames'] = p({ one: '%s imported game', other: '%s imported games' }); + i['nbInaccuracies'] = p({ one: '%s inaccuracy', other: '%s inaccuracies' }); + i['nbLosses'] = p({ one: '%s loss', other: '%s losses' }); + i['nbMinutes'] = p({ one: '%s minute', other: '%s minutes' }); + i['nbMistakes'] = p({ one: '%s mistake', other: '%s mistakes' }); + i['nbPerfTypePlayersThisWeek'] = p({ + one: '%1$s %2$s player this week.', + other: '%1$s %2$s players this week.', + }); + i['nbPlayers'] = p({ one: '%s player', other: '%s players' }); + i['nbPlaying'] = p({ one: '%s playing', other: '%s playing' }); + i['nbPuzzles'] = p({ one: '%s puzzle', other: '%s puzzles' }); + i['nbRated'] = p({ one: '%s rated', other: '%s rated' }); + i['nbSeconds'] = p({ one: '%s second', other: '%s seconds' }); + i['nbSecondsToPlayTheFirstMove'] = p({ + one: '%s second to play the first move', + other: '%s seconds to play the first move', + }); + i['nbSimuls'] = p({ one: '%s simul', other: '%s simuls' }); + i['nbStudies'] = p({ one: '%s study', other: '%s studies' }); + i['nbTournamentPoints'] = p({ one: '%s tournament point', other: '%s tournament points' }); + i['nbWins'] = p({ one: '%s win', other: '%s wins' }); + i['needNbMoreGames'] = p({ + one: 'You need to play %s more rated game', + other: 'You need to play %s more rated games', + }); + i['needNbMorePerfGames'] = p({ + one: 'You need to play %1$s more %2$s rated game', + other: 'You need to play %1$s more %2$s rated games', + }); + i['networkLagBetweenYouAndLichess'] = 'Network lag between you and Lichess'; + i['never'] = 'Never'; + i['neverTypeYourPassword'] = 'Never type your Lichess password on another site!'; + i['newOpponent'] = 'New opponent'; + i['newPassword'] = 'New password'; + i['newPasswordAgain'] = 'New password (again)'; + i['newPasswordsDontMatch'] = "The new passwords don't match"; + i['newPasswordStrength'] = 'Password strength'; + i['newTournament'] = 'New tournament'; + i['next'] = 'Next'; + i['nextXTournament'] = s('Next %s tournament:'); + i['no'] = 'No'; + i['noChat'] = 'No chat'; + i['noConditionalPremoves'] = 'No conditional premoves'; + i['noDrawBeforeSwissLimit'] = 'You cannot draw before 30 moves are played in a Swiss tournament.'; + i['noGameFound'] = 'No game found'; + i['noMistakesFoundForBlack'] = 'No mistakes found for black'; + i['noMistakesFoundForWhite'] = 'No mistakes found for white'; + i['none'] = 'None'; + i['noNetwork'] = 'Offline'; + i['noNoteYet'] = 'No note yet'; + i['noRestriction'] = 'No restriction'; + i['normal'] = 'Normal'; + i['noSimulExplanation'] = 'This simultaneous exhibition does not exist.'; + i['noSimulFound'] = 'Simul not found'; + i['notACheckmate'] = 'Not a checkmate'; + i['notes'] = 'Notes'; + i['nothingToSeeHere'] = 'Nothing to see here at the moment.'; + i['notifications'] = 'Notifications'; + i['notificationsX'] = s('Notifications: %1$s'); + i['offerDraw'] = 'Offer draw'; + i['oneDay'] = 'One day'; + i['oneUrlPerLine'] = 'One URL per line.'; + i['onlineAndOfflinePlay'] = 'Online and offline play'; + i['onlineBots'] = 'Online bots'; + i['onlinePlayers'] = 'Online players'; + i['onlyExistingConversations'] = 'Only existing conversations'; + i['onlyFriends'] = 'Only friends'; + i['onlyMembersOfTeam'] = 'Only members of team'; + i['onlyTeamLeaders'] = 'Only team leaders'; + i['onlyTeamMembers'] = 'Only team members'; + i['onlyWorksOnce'] = 'This will only work once.'; + i['onSlowGames'] = 'On slow games'; + i['opacity'] = 'Opacity'; + i['opening'] = 'Opening'; + i['openingEndgameExplorer'] = 'Opening/endgame explorer'; + i['openingExplorer'] = 'Opening explorer'; + i['openingExplorerAndTablebase'] = 'Opening explorer & tablebase'; + i['openings'] = 'Openings'; + i['openStudy'] = 'Open study'; + i['openTournaments'] = 'Open tournaments'; + i['opponent'] = 'Opponent'; + i['opponentLeftChoices'] = + 'Your opponent left the game. You can claim victory, call the game a draw, or wait.'; + i['opponentLeftCounter'] = p({ + one: 'Your opponent left the game. You can claim victory in %s second.', + other: 'Your opponent left the game. You can claim victory in %s seconds.', + }); + i['orLetYourOpponentScanQrCode'] = 'Or let your opponent scan this QR code'; + i['orUploadPgnFile'] = 'Or upload a PGN file'; + i['other'] = 'Other'; + i['otherPlayers'] = 'other players'; + i['ourEventTips'] = 'Our tips for organising events'; + i['outsideTheBoard'] = 'Outside the board'; + i['password'] = 'Password'; + i['passwordReset'] = 'Password reset'; + i['passwordSuggestion'] = + 'Do not set a password suggested by someone else. They will use it to steal your account.'; + i['pasteTheFenStringHere'] = 'Paste the FEN text here'; + i['pasteThePgnStringHere'] = 'Paste the PGN text here'; + i['pause'] = 'Pause'; + i['pawnMove'] = 'Pawn move'; + i['performance'] = 'Performance'; + i['perfRatingX'] = s('Rating: %s'); + i['phoneAndTablet'] = 'Phone and tablet'; + i['pieceSet'] = 'Piece set'; + i['play'] = 'Play'; + i['playChessEverywhere'] = 'Play chess everywhere'; + i['playChessInStyle'] = 'Play chess in style'; + i['playComputerMove'] = 'Play best computer move'; + i['player'] = 'Player'; + i['players'] = 'Players'; + i['playEveryGame'] = 'Play every game you start.'; + i['playFirstOpeningEndgameExplorerMove'] = 'Play first opening/endgame-explorer move'; + i['playingRightNow'] = 'Playing right now'; + i['playSelectedMove'] = 'play selected move'; + i['playVariationToCreateConditionalPremoves'] = 'Play a variation to create conditional premoves'; + i['playWithAFriend'] = 'Play with a friend'; + i['playWithTheMachine'] = 'Play with the computer'; + i['playX'] = s('Play %s'); + i['pleasantChessExperience'] = 'We aim to provide a pleasant chess experience for everyone.'; + i['points'] = 'Points'; + i['popularOpenings'] = 'Popular openings'; + i['positionInputHelp'] = s( + 'Paste a valid FEN to start every game from a given position.\nIt only works for standard games, not with variants.\nYou can use the %s to generate a FEN position, then paste it here.\nLeave empty to start games from the normal initial position.', + ); + i['posts'] = 'Posts'; + i['potentialProblem'] = 'When a potential problem is detected, we display this message.'; + i['practice'] = 'Practice'; + i['practiceWithComputer'] = 'Practice with computer'; + i['previouslyOnLichessTV'] = 'Previously on Lichess TV'; + i['privacy'] = 'Privacy'; + i['privacyPolicy'] = 'Privacy policy'; + i['proceedToX'] = s('Proceed to %s'); + i['profile'] = 'Profile'; + i['profileCompletion'] = s('Profile completion: %s'); + i['promoteVariation'] = 'Promote variation'; + i['proposeATakeback'] = 'Propose a takeback'; + i['puzzleDesc'] = 'Chess tactics trainer'; + i['puzzles'] = 'Puzzles'; + i['quickPairing'] = 'Quick pairing'; + i['raceFinished'] = 'Race finished'; + i['randomColor'] = 'Random side'; + i['rank'] = 'Rank'; + i['rankIsUpdatedEveryNbMinutes'] = p({ + one: 'Rank is updated every minute', + other: 'Rank is updated every %s minutes', + }); + i['rankX'] = s('Rank: %s'); + i['rapid'] = 'Rapid'; + i['rapidDesc'] = 'Rapid games: 8 to 25 minutes'; + i['rated'] = 'Rated'; + i['ratedFormHelp'] = 'Games are rated and impact players ratings'; + i['ratedLessThanInPerf'] = s('Rated ≤ %1$s in %2$s for the last week'); + i['ratedMoreThanInPerf'] = s('Rated ≥ %1$s in %2$s'); + i['ratedTournament'] = 'Rated'; + i['rating'] = 'Rating'; + i['ratingRange'] = 'Rating range'; + i['ratingStats'] = 'Rating stats'; + i['ratingXOverYGames'] = p({ one: '%1$s rating over %2$s game', other: '%1$s rating over %2$s games' }); + i['readAboutOur'] = s('Read about our %s.'); + i['really'] = 'really'; + i['realName'] = 'Real name'; + i['realTime'] = 'Real time'; + i['realtimeReplay'] = 'Realtime'; + i['reason'] = 'Reason'; + i['receiveForumNotifications'] = 'Receive notifications when mentioned in the forum'; + i['recentGames'] = 'Recent games'; + i['reconnecting'] = 'Reconnecting'; + i['refreshInboxAfterFiveMinutes'] = 'Wait 5 minutes and refresh your email inbox.'; + i['refundXpointsTimeControlY'] = s('Refund: %1$s %2$s rating points.'); + i['rematch'] = 'Rematch'; + i['rematchOfferAccepted'] = 'Rematch offer accepted'; + i['rematchOfferCanceled'] = 'Rematch offer cancelled'; + i['rematchOfferDeclined'] = 'Rematch offer declined'; + i['rematchOfferSent'] = 'Rematch offer sent'; + i['rememberMe'] = 'Keep me logged in'; + i['removesTheDepthLimit'] = 'Removes the depth limit, and keeps your computer warm'; + i['reopenYourAccount'] = 'Reopen your account'; + i['replayMode'] = 'Replay mode'; + i['replies'] = 'Replies'; + i['reply'] = 'Reply'; + i['replyToThisTopic'] = 'Reply to this topic'; + i['reportAUser'] = 'Report a user'; + i['reportCheatBoostHelp'] = + 'Paste the link to the game(s) and explain what is wrong about this user\'s behaviour. Don\'t just say "they cheat", but tell us how you came to this conclusion.'; + i['reportProcessedFasterInEnglish'] = 'Your report will be processed faster if written in English.'; + i['reportUsernameHelp'] = + 'Explain what about this username is offensive. Don\'t just say "it\'s offensive/inappropriate", but tell us how you came to this conclusion, especially if the insult is obfuscated, not in english, is in slang, or is a historical/cultural reference.'; + i['reportXToModerators'] = s('Report %s to moderators'); + i['requestAComputerAnalysis'] = 'Request a computer analysis'; + i['required'] = 'Required.'; + i['reset'] = 'Reset'; + i['resign'] = 'Resign'; + i['resignLostGames'] = "Resign lost games (don't let the clock run down)."; + i['resignTheGame'] = 'Resign the game'; + i['resume'] = 'Resume'; + i['resumeLearning'] = 'Resume learning'; + i['resumePractice'] = 'Resume practice'; + i['resVsX'] = s('%1$s vs %2$s'); + i['retry'] = 'Retry'; + i['returnToSimulHomepage'] = 'Return to simul homepage'; + i['returnToTournamentsHomepage'] = 'Return to tournaments homepage'; + i['reviewBlackMistakes'] = 'Review black mistakes'; + i['reviewWhiteMistakes'] = 'Review white mistakes'; + i['revokeAllSessions'] = 'revoke all sessions'; + i['safeTournamentName'] = 'Pick a very safe name for the tournament.'; + i['save'] = 'Save'; + i['screenshotCurrentPosition'] = 'Screenshot current position'; + i['scrollOverComputerVariationsToPreviewThem'] = 'Scroll over computer variations to preview them.'; + i['searchOrStartNewDiscussion'] = 'Search or start new conversation'; + i['security'] = 'Security'; + i['seeBestMove'] = 'See best move'; + i['send'] = 'Send'; + i['sentEmailWithLink'] = "We've sent you an email with a link."; + i['sessions'] = 'Sessions'; + i['setFlair'] = 'Set your flair'; + i['setTheBoard'] = 'Set the board'; + i['shareYourInsightsData'] = 'Share your chess insights data'; + i['showHelpDialog'] = 'Show this help dialog'; + i['showMeEverything'] = 'Show me everything'; + i['showThreat'] = 'Show threat'; + i['showUnreadLichessMessage'] = 'You have received a private message from Lichess.'; + i['showVariationArrows'] = 'Show variation arrows'; + i['side'] = 'Side'; + i['signIn'] = 'Sign in'; + i['signUp'] = 'Register'; + i['signupEmailHint'] = 'We will only use it for password reset.'; + i['signUpToHostOrJoinASimul'] = 'Sign up to host or join a simul'; + i['signupUsernameHint'] = + 'Make sure to choose a family-friendly username. You cannot change it later and any accounts with inappropriate usernames will get closed!'; + i['simulAddExtraTime'] = 'You may add extra initial time to your clock to help you cope with the simul.'; + i['simulAddExtraTimePerPlayer'] = 'Add initial time to your clock for each player joining the simul.'; + i['simulClockHint'] = 'Fischer Clock setup. The more players you take on, the more time you may need.'; + i['simulDescription'] = 'Simul description'; + i['simulDescriptionHelp'] = 'Anything you want to tell the participants?'; + i['simulFeatured'] = s('Feature on %s'); + i['simulFeaturedHelp'] = s('Show your simul to everyone on %s. Disable for private simuls.'); + i['simulHostcolor'] = 'Host colour for each game'; + i['simulHostExtraTime'] = 'Host extra initial clock time'; + i['simulHostExtraTimePerPlayer'] = 'Host extra clock time per player'; + i['simultaneousExhibitions'] = 'Simultaneous exhibitions'; + i['simulVariantsHint'] = 'If you select several variants, each player gets to choose which one to play.'; + i['since'] = 'Since'; + i['siteDescription'] = + 'Free online chess server. Play chess in a clean interface. No registration, no ads, no plugin required. Play chess with the computer, friends or random opponents.'; + i['size'] = 'Size'; + i['skipThisMove'] = 'Skip this move'; + i['slow'] = 'Slow'; + i['socialMediaLinks'] = 'Social media links'; + i['solution'] = 'Solution'; + i['someoneYouReportedWasBanned'] = 'Someone you reported was banned'; + i['sorry'] = 'Sorry :('; + i['sound'] = 'Sound'; + i['sourceCode'] = 'Source Code'; + i['spectatorRoom'] = 'Spectator room'; + i['stalemate'] = 'Stalemate'; + i['standard'] = 'Standard'; + i['standByX'] = s('Stand by %s, pairing players, get ready!'); + i['standing'] = 'Standing'; + i['startedStreaming'] = 'started streaming'; + i['starting'] = 'Starting:'; + i['startPosition'] = 'Starting position'; + i['streamerManager'] = 'Streamer manager'; + i['streamersMenu'] = 'Streamers'; + i['strength'] = 'Strength'; + i['studyMenu'] = 'Study'; + i['subject'] = 'Subject'; + i['subscribe'] = 'Subscribe'; + i['success'] = 'Success'; + i['switchSides'] = 'Switch sides'; + i['takeback'] = 'Takeback'; + i['takebackPropositionAccepted'] = 'Takeback accepted'; + i['takebackPropositionCanceled'] = 'Takeback cancelled'; + i['takebackPropositionDeclined'] = 'Takeback declined'; + i['takebackPropositionSent'] = 'Takeback sent'; + i['talkInChat'] = 'Please be nice in the chat!'; + i['teamNamedX'] = s('%1$s team'); + i['temporaryInconvenience'] = 'We apologise for the temporary inconvenience,'; + i['termsOfService'] = 'Terms of Service'; + i['thankYou'] = 'Thank you!'; + i['thankYouForReading'] = 'Thank you for reading!'; + i['theFirstPersonToComeOnThisUrlWillPlayWithYou'] = + 'The first person to come to this URL will play with you.'; + i['theForumEtiquette'] = 'the forum etiquette'; + i['theGameIsADraw'] = 'The game is a draw.'; + i['thematic'] = 'Thematic'; + i['thisAccountViolatedTos'] = 'This account violated the Lichess Terms of Service'; + i['thisGameIsRated'] = 'This game is rated'; + i['thisIsAChessCaptcha'] = 'This is a chess CAPTCHA.'; + i['thisTopicIsArchived'] = 'This topic has been archived and can no longer be replied to.'; + i['thisTopicIsNowClosed'] = 'This topic is now closed.'; + i['threeChecks'] = 'Three checks'; + i['threefoldRepetition'] = 'Threefold repetition'; + i['time'] = 'Time'; + i['timeAlmostUp'] = 'Time is almost up!'; + i['timeBeforeTournamentStarts'] = 'Time before tournament starts'; + i['timeControl'] = 'Time control'; + i['timeline'] = 'Timeline'; + i['timeToProcessAMoveOnLichessServer'] = "Time to process a move on Lichess's server"; + i['today'] = 'Today'; + i['toggleAllAnalysis'] = 'Toggle all computer analysis'; + i['toggleGlyphAnnotations'] = 'Toggle move annotations'; + i['toggleLocalAnalysis'] = 'Toggle local computer analysis'; + i['toggleLocalEvaluation'] = 'Toggle local evaluation'; + i['togglePositionAnnotations'] = 'Toggle position annotations'; + i['toggleTheChat'] = 'Toggle the chat'; + i['toggleVariationArrows'] = 'Toggle variation arrows'; + i['toInviteSomeoneToPlayGiveThisUrl'] = 'To invite someone to play, give this URL'; + i['tools'] = 'Tools'; + i['topGames'] = 'Top games'; + i['topics'] = 'Topics'; + i['toReportSomeoneForCheatingOrBadBehavior'] = s('To report a user for cheating or bad behaviour, %1$s'); + i['toRequestSupport'] = s('To request support, %1$s'); + i['toStudy'] = 'Study'; + i['tournament'] = 'Tournament'; + i['tournamentCalendar'] = 'Tournament calendar'; + i['tournamentComplete'] = 'Tournament complete'; + i['tournamentDoesNotExist'] = 'This tournament does not exist.'; + i['tournamentEntryCode'] = 'Tournament entry code'; + i['tournamentFAQ'] = 'Arena tournament FAQ'; + i['tournamentHomeDescription'] = + 'Play fast-paced chess tournaments! Join an official scheduled tournament, or create your own. Bullet, Blitz, Classical, Chess960, King of the Hill, Threecheck, and more options available for endless chess fun.'; + i['tournamentHomeTitle'] = 'Chess tournaments featuring various time controls and variants'; + i['tournamentIsStarting'] = 'The tournament is starting'; + i['tournamentMayHaveBeenCanceled'] = + 'The tournament may have been cancelled if all players left before it started.'; + i['tournamentNotFound'] = 'Tournament not found'; + i['tournamentPairingsAreNowClosed'] = 'The tournament pairings are now closed.'; + i['tournamentPoints'] = 'Tournament points'; + i['tournaments'] = 'Tournaments'; + i['tournChat'] = 'Tournament chat'; + i['tournDescription'] = 'Tournament description'; + i['tournDescriptionHelp'] = + 'Anything special you want to tell the participants? Try to keep it short. Markdown links are available: [name](https://url)'; + i['tpTimeSpentOnTV'] = s('Time featured on TV: %s'); + i['tpTimeSpentPlaying'] = s('Time spent playing: %s'); + i['transparent'] = 'Transparent'; + i['troll'] = 'Troll'; + i['tryAnotherMoveForBlack'] = 'Try another move for black'; + i['tryAnotherMoveForWhite'] = 'Try another move for white'; + i['tryTheContactPage'] = 'try the contact page'; + i['tryToWin'] = 'Try to win (or at least draw) every game you play.'; + i['typePrivateNotesHere'] = 'Type private notes here'; + i['ultraBulletDesc'] = 'Insanely fast games: less than 30 seconds'; + i['unblock'] = 'Unblock'; + i['unfollow'] = 'Unfollow'; + i['unfollowX'] = s('Unfollow %s'); + i['unknown'] = 'Unknown'; + i['unknownDueToRounding'] = + 'Win/loss only guaranteed if recommended tablebase line has been followed since the last capture or pawn move, due to possible rounding of DTZ values in Syzygy tablebases.'; + i['unlimited'] = 'Unlimited'; + i['unsubscribe'] = 'Unsubscribe'; + i['until'] = 'Until'; + i['user'] = 'User'; + i['userIsBetterThanPercentOfPerfTypePlayers'] = s('%1$s is better than %2$s of %3$s players.'); + i['username'] = 'User name'; + i['usernameAlreadyUsed'] = 'This username is already in use, please try another one.'; + i['usernameCanBeUsedForNewAccount'] = 'You can use this username to create a new account'; + i['usernameCharsInvalid'] = + 'The username must only contain letters, numbers, underscores, and hyphens. Consecutive underscores and hyphens are not allowed.'; + i['usernameNotFound'] = s("We couldn't find any user by this name: %s."); + i['usernameOrEmail'] = 'User name or email'; + i['usernamePrefixInvalid'] = 'The username must start with a letter.'; + i['usernameSuffixInvalid'] = 'The username must end with a letter or a number.'; + i['usernameUnacceptable'] = 'This username is not acceptable.'; + i['useTheReportForm'] = 'use the report form'; + i['usingServerAnalysis'] = 'Using server analysis'; + i['variant'] = 'Variant'; + i['variantEnding'] = 'Variant ending'; + i['variantLoss'] = 'Variant loss'; + i['variants'] = 'Variants'; + i['variantWin'] = 'Variant win'; + i['variationArrowsInfo'] = 'Variation arrows let you navigate without using the move list.'; + i['victory'] = 'Victory'; + i['victoryVsYInZ'] = s('%1$s vs %2$s in %3$s'); + i['videoLibrary'] = 'Video library'; + i['viewInFullSize'] = 'View in full size'; + i['viewRematch'] = 'View rematch'; + i['views'] = 'Views'; + i['viewTheSolution'] = 'View the solution'; + i['viewTournament'] = 'View tournament'; + i['waitForSignupHelp'] = 'We will come back to you shortly to help you complete your signup.'; + i['waiting'] = 'Waiting'; + i['waitingForAnalysis'] = 'Waiting for analysis'; + i['waitingForOpponent'] = 'Waiting for opponent'; + i['watch'] = 'Watch'; + i['watchGames'] = 'Watch games'; + i['webmasters'] = 'Webmasters'; + i['website'] = 'Website'; + i['weeklyPerfTypeRatingDistribution'] = s('Weekly %s rating distribution'); + i['weHadToTimeYouOutForAWhile'] = 'We had to time you out for a while.'; + i['weHaveSentYouAnEmailClickTheLink'] = + "We've sent you an email. Click the link in the email to activate your account."; + i['weHaveSentYouAnEmailTo'] = s( + "We've sent an email to %s. Click the link in the email to reset your password.", + ); + i['whatIsIheMatter'] = "What's the matter?"; + i['whatSignupUsername'] = 'What username did you use to sign up?'; + i['whenCreateSimul'] = 'When you create a Simul, you get to play several players at once.'; + i['white'] = 'White'; + i['whiteCastlingKingside'] = 'White O-O'; + i['whiteCheckmatesInOneMove'] = 'White to checkmate in one move'; + i['whiteDeclinesDraw'] = 'White declines draw'; + i['whiteDidntMove'] = "White didn't move"; + i['whiteDrawBlack'] = 'White / Draw / Black'; + i['whiteIsVictorious'] = 'White is victorious'; + i['whiteLeftTheGame'] = 'White left the game'; + i['whiteOffersDraw'] = 'White offers draw'; + i['whitePlays'] = 'White to play'; + i['whiteResigned'] = 'White resigned'; + i['whiteTimeOut'] = 'White time out'; + i['whiteWins'] = 'White wins'; + i['whiteWinsGame'] = 'White wins'; + i['why'] = 'Why?'; + i['winner'] = 'Winner'; + i['winning'] = 'Winning'; + i['winOr50MovesByPriorMistake'] = 'Win or 50 moves by prior mistake'; + i['winPreventedBy50MoveRule'] = 'Win prevented by 50-move rule'; + i['winRate'] = 'Win rate'; + i['wins'] = 'Wins'; + i['wishYouGreatGames'] = 'and wish you great games on lichess.org.'; + i['withdraw'] = 'Withdraw'; + i['withEverybody'] = 'With everybody'; + i['withFriends'] = 'With friends'; + i['withNobody'] = 'With nobody'; + i['writeAPrivateNoteAboutThisUser'] = 'Write a private note about this user'; + i['xCompetesInY'] = s('%1$s competes in %2$s'); + i['xCreatedTeamY'] = s('%1$s created team %2$s'); + i['xHostsY'] = s('%1$s hosts %2$s'); + i['xInvitedYouToY'] = s('%1$s invited you to "%2$s".'); + i['xIsAFreeYLibreOpenSourceChessServer'] = s( + '%1$s is a free (%2$s), libre, no-ads, open source chess server.', + ); + i['xJoinedTeamY'] = s('%1$s joined team %2$s'); + i['xJoinsY'] = s('%1$s joins %2$s'); + i['xLikesY'] = s('%1$s likes %2$s'); + i['xMentionedYouInY'] = s('%1$s mentioned you in "%2$s".'); + i['xOpeningExplorer'] = s('%s opening explorer'); + i['xPostedInForumY'] = s('%1$s posted in topic %2$s'); + i['xRating'] = s('%s rating'); + i['xStartedFollowingY'] = s('%1$s started following %2$s'); + i['xStartedStreaming'] = s('%s started streaming'); + i['xWasPlayed'] = s('%s was played'); + i['yes'] = 'Yes'; + i['yesterday'] = 'Yesterday'; + i['youAreBetterThanPercentOfPerfTypePlayers'] = s('You are better than %1$s of %2$s players.'); + i['youAreLeavingLichess'] = 'You are leaving Lichess'; + i['youAreNotInTeam'] = s('You are not in the team %s'); + i['youAreNowPartOfTeam'] = 'You are now part of the team.'; + i['youArePlaying'] = 'You are playing!'; + i['youBrowsedAway'] = 'You browsed away'; + i['youCanAlsoScrollOverTheBoardToMoveInTheGame'] = 'Scroll over the board to move in the game.'; + i['youCanDoBetter'] = 'You can do better'; + i['youCanHideFlair'] = 'There is a setting to hide all user flairs across the entire site.'; + i['youCannotPostYetPlaySomeGames'] = "You can't post in the forums yet. Play some games!"; + i['youCantStartNewGame'] = "You can't start a new game until this one is finished."; + i['youDoNotHaveAnEstablishedPerfTypeRating'] = s('You do not have an established %s rating.'); + i['youHaveBeenTimedOut'] = 'You have been timed out.'; + i['youHaveJoinedTeamX'] = s('You have joined "%1$s".'); + i['youNeedAnAccountToDoThat'] = 'You need an account to do that'; + i['youPlayTheBlackPieces'] = 'You play the black pieces'; + i['youPlayTheWhitePieces'] = 'You play the white pieces'; + i['yourOpponentOffersADraw'] = 'Your opponent offers a draw'; + i['yourOpponentProposesATakeback'] = 'Your opponent proposes a takeback'; + i['yourOpponentWantsToPlayANewGameWithYou'] = 'Your opponent wants to play a new game with you'; + i['yourPendingSimuls'] = 'Your pending simuls'; + i['yourPerfRatingIsProvisional'] = s('Your %s rating is provisional'); + i['yourPerfRatingIsTooHigh'] = s('Your %1$s rating (%2$s) is too high'); + i['yourPerfRatingIsTooLow'] = s('Your %1$s rating (%2$s) is too low'); + i['yourPerfTypeRatingIsRating'] = s('Your %1$s rating is %2$s.'); + i['yourQuestionMayHaveBeenAnswered'] = s('Your question may already have an answer %1$s'); + i['yourRating'] = 'Your rating'; + i['yourScore'] = s('Your score: %s'); + i['yourTopWeeklyPerfRatingIsTooHigh'] = s('Your top weekly %1$s rating (%2$s) is too high'); + i['yourTurn'] = 'Your turn'; + i['zeroAdvertisement'] = 'Zero advertisement'; +} + +if (!window.i18n.timeago) { + let i = (window.i18n.timeago = {}); + i['completed'] = 'completed'; + i['inNbDays'] = p({ one: 'in %s day', other: 'in %s days' }); + i['inNbHours'] = p({ one: 'in %s hour', other: 'in %s hours' }); + i['inNbMinutes'] = p({ one: 'in %s minute', other: 'in %s minutes' }); + i['inNbMonths'] = p({ one: 'in %s month', other: 'in %s months' }); + i['inNbSeconds'] = p({ one: 'in %s second', other: 'in %s seconds' }); + i['inNbWeeks'] = p({ one: 'in %s week', other: 'in %s weeks' }); + i['inNbYears'] = p({ one: 'in %s year', other: 'in %s years' }); + i['justNow'] = 'just now'; + i['nbDaysAgo'] = p({ one: '%s day ago', other: '%s days ago' }); + i['nbHoursAgo'] = p({ one: '%s hour ago', other: '%s hours ago' }); + i['nbHoursRemaining'] = p({ one: '%s hour remaining', other: '%s hours remaining' }); + i['nbMinutesAgo'] = p({ one: '%s minute ago', other: '%s minutes ago' }); + i['nbMinutesRemaining'] = p({ one: '%s minute remaining', other: '%s minutes remaining' }); + i['nbMonthsAgo'] = p({ one: '%s month ago', other: '%s months ago' }); + i['nbWeeksAgo'] = p({ one: '%s week ago', other: '%s weeks ago' }); + i['nbYearsAgo'] = p({ one: '%s year ago', other: '%s years ago' }); + i['rightNow'] = 'right now'; +} + +if (!window.i18n.study) { + let i = (window.i18n.study = {}); + i['addMembers'] = 'Add members'; + i['addNewChapter'] = 'Add a new chapter'; + i['allowCloning'] = 'Allow cloning'; + i['allStudies'] = 'All studies'; + i['allSyncMembersRemainOnTheSamePosition'] = 'All SYNC members remain on the same position'; + i['alphabetical'] = 'Alphabetical'; + i['analysisMode'] = 'Analysis mode'; + i['annotateWithGlyphs'] = 'Annotate with glyphs'; + i['attack'] = 'Attack'; + i['automatic'] = 'Automatic'; + i['back'] = 'Back'; + i['blackIsBetter'] = 'Black is better'; + i['blackIsSlightlyBetter'] = 'Black is slightly better'; + i['blackIsWinning'] = 'Black is winning'; + i['blunder'] = 'Blunder'; + i['brilliantMove'] = 'Brilliant move'; + i['chapterPgn'] = 'Chapter PGN'; + i['chapterX'] = s('Chapter %s'); + i['clearAllCommentsInThisChapter'] = 'Clear all comments, glyphs and drawn shapes in this chapter'; + i['clearAnnotations'] = 'Clear annotations'; + i['clearChat'] = 'Clear chat'; + i['clearVariations'] = 'Clear variations'; + i['cloneStudy'] = 'Clone'; + i['commentThisMove'] = 'Comment on this move'; + i['commentThisPosition'] = 'Comment on this position'; + i['confirmDeleteStudy'] = s( + 'Delete the entire study? There is no going back! Type the name of the study to confirm: %s', + ); + i['contributor'] = 'Contributor'; + i['contributors'] = 'Contributors'; + i['copyChapterPgn'] = 'Copy PGN'; + i['counterplay'] = 'Counterplay'; + i['createChapter'] = 'Create chapter'; + i['createStudy'] = 'Create study'; + i['currentChapterUrl'] = 'Current chapter URL'; + i['dateAddedNewest'] = 'Date added (newest)'; + i['dateAddedOldest'] = 'Date added (oldest)'; + i['deleteChapter'] = 'Delete chapter'; + i['deleteStudy'] = 'Delete study'; + i['deleteTheStudyChatHistory'] = 'Delete the study chat history? There is no going back!'; + i['deleteThisChapter'] = 'Delete this chapter. There is no going back!'; + i['development'] = 'Development'; + i['downloadAllGames'] = 'Download all games'; + i['downloadGame'] = 'Download game'; + i['dubiousMove'] = 'Dubious move'; + i['editChapter'] = 'Edit chapter'; + i['editor'] = 'Editor'; + i['editStudy'] = 'Edit study'; + i['embedInYourWebsite'] = 'Embed in your website'; + i['empty'] = 'Empty'; + i['enableSync'] = 'Enable sync'; + i['equalPosition'] = 'Equal position'; + i['everyone'] = 'Everyone'; + i['first'] = 'First'; + i['getAFullComputerAnalysis'] = 'Get a full server-side computer analysis of the mainline.'; + i['goodMove'] = 'Good move'; + i['hideNextMoves'] = 'Hide next moves'; + i['hot'] = 'Hot'; + i['importFromChapterX'] = s('Import from %s'); + i['initiative'] = 'Initiative'; + i['interactiveLesson'] = 'Interactive lesson'; + i['interestingMove'] = 'Interesting move'; + i['inviteOnly'] = 'Invite only'; + i['inviteToTheStudy'] = 'Invite to the study'; + i['kick'] = 'Kick'; + i['last'] = 'Last'; + i['leaveTheStudy'] = 'Leave the study'; + i['like'] = 'Like'; + i['loadAGameByUrl'] = 'Load games by URLs'; + i['loadAGameFromPgn'] = 'Load games from PGN'; + i['loadAGameFromXOrY'] = s('Load games from %1$s or %2$s'); + i['loadAPositionFromFen'] = 'Load a position from FEN'; + i['makeSureTheChapterIsComplete'] = + 'Make sure the chapter is complete. You can only request analysis once.'; + i['manageTopics'] = 'Manage topics'; + i['members'] = 'Members'; + i['mistake'] = 'Mistake'; + i['mostPopular'] = 'Most popular'; + i['myFavoriteStudies'] = 'My favourite studies'; + i['myPrivateStudies'] = 'My private studies'; + i['myPublicStudies'] = 'My public studies'; + i['myStudies'] = 'My studies'; + i['myTopics'] = 'My topics'; + i['nbChapters'] = p({ one: '%s Chapter', other: '%s Chapters' }); + i['nbGames'] = p({ one: '%s Game', other: '%s Games' }); + i['nbMembers'] = p({ one: '%s Member', other: '%s Members' }); + i['newChapter'] = 'New chapter'; + i['newTag'] = 'New tag'; + i['next'] = 'Next'; + i['nextChapter'] = 'Next chapter'; + i['nobody'] = 'Nobody'; + i['noLetPeopleBrowseFreely'] = 'No: let people browse freely'; + i['noneYet'] = 'None yet.'; + i['noPinnedComment'] = 'None'; + i['normalAnalysis'] = 'Normal analysis'; + i['novelty'] = 'Novelty'; + i['onlyContributorsCanRequestAnalysis'] = 'Only the study contributors can request a computer analysis.'; + i['onlyMe'] = 'Only me'; + i['onlyMove'] = 'Only move'; + i['onlyPublicStudiesCanBeEmbedded'] = 'Only public studies can be embedded!'; + i['open'] = 'Open'; + i['orientation'] = 'Orientation'; + i['pasteYourPgnTextHereUpToNbGames'] = p({ + one: 'Paste your PGN text here, up to %s game', + other: 'Paste your PGN text here, up to %s games', + }); + i['pgnTags'] = 'PGN tags'; + i['pinnedChapterComment'] = 'Pinned chapter comment'; + i['pinnedStudyComment'] = 'Pinned study comment'; + i['playAgain'] = 'Play again'; + i['playing'] = 'Playing'; + i['pleaseOnlyInvitePeopleYouKnow'] = + 'Please only invite people who know you, and who actively want to join this study.'; + i['popularTopics'] = 'Popular topics'; + i['prevChapter'] = 'Previous chapter'; + i['previous'] = 'Previous'; + i['private'] = 'Private'; + i['public'] = 'Public'; + i['readMoreAboutEmbedding'] = 'Read more about embedding'; + i['recentlyUpdated'] = 'Recently updated'; + i['rightUnderTheBoard'] = 'Right under the board'; + i['save'] = 'Save'; + i['saveChapter'] = 'Save chapter'; + i['searchByUsername'] = 'Search by username'; + i['shareAndExport'] = 'Share & export'; + i['shareChanges'] = 'Share changes with spectators and save them on the server'; + i['showEvalBar'] = 'Evaluation bars'; + i['spectator'] = 'Spectator'; + i['start'] = 'Start'; + i['startAtInitialPosition'] = 'Start at initial position'; + i['startAtX'] = s('Start at %s'); + i['startFromCustomPosition'] = 'Start from custom position'; + i['startFromInitialPosition'] = 'Start from initial position'; + i['studiesCreatedByX'] = s('Studies created by %s'); + i['studiesIContributeTo'] = 'Studies I contribute to'; + i['studyActions'] = 'Study actions'; + i['studyNotFound'] = 'Study not found'; + i['studyPgn'] = 'Study PGN'; + i['studyUrl'] = 'Study URL'; + i['theChapterIsTooShortToBeAnalysed'] = 'The chapter is too short to be analysed.'; + i['timeTrouble'] = 'Time trouble'; + i['topics'] = 'Topics'; + i['unclearPosition'] = 'Unclear position'; + i['unlike'] = 'Unlike'; + i['unlisted'] = 'Unlisted'; + i['urlOfTheGame'] = 'URL of the games, one per line'; + i['visibility'] = 'Visibility'; + i['whatAreStudies'] = 'What are studies?'; + i['whatWouldYouPlay'] = 'What would you play in this position?'; + i['whereDoYouWantToStudyThat'] = 'Where do you want to study that?'; + i['whiteIsBetter'] = 'White is better'; + i['whiteIsSlightlyBetter'] = 'White is slightly better'; + i['whiteIsWinning'] = 'White is winning'; + i['withCompensation'] = 'With compensation'; + i['withTheIdea'] = 'With the idea'; + i['xBroughtToYouByY'] = s('%1$s, brought to you by %2$s'); + i['yesKeepEveryoneOnTheSamePosition'] = 'Yes: keep everyone on the same position'; + i['youAreNowAContributor'] = 'You are now a contributor'; + i['youAreNowASpectator'] = 'You are now a spectator'; + i['youCanPasteThisInTheForumToEmbed'] = 'You can paste this in the forum or your Lichess blog to embed'; + i['youCompletedThisLesson'] = 'Congratulations! You completed this lesson.'; + i['zugzwang'] = 'Zugzwang'; +} + +if (!window.i18n.broadcast) { + let i = (window.i18n.broadcast = {}); + i['aboutBroadcasts'] = 'About broadcasts'; + i['addRound'] = 'Add a round'; + i['ageThisYear'] = 'Age this year'; + i['broadcastCalendar'] = 'Broadcast calendar'; + i['broadcasts'] = 'Broadcasts'; + i['completed'] = 'Completed'; + i['completedHelp'] = 'Lichess detects round completion, but can get it wrong. Use this to set it manually.'; + i['credits'] = 'Credit the source'; + i['currentGameUrl'] = 'Current game URL'; + i['definitivelyDeleteRound'] = 'Definitively delete the round and all its games.'; + i['definitivelyDeleteTournament'] = + 'Definitively delete the entire tournament, all its rounds and all its games.'; + i['deleteAllGamesOfThisRound'] = + 'Delete all games of this round. The source will need to be active in order to re-create them.'; + i['deleteRound'] = 'Delete this round'; + i['deleteTournament'] = 'Delete this tournament'; + i['downloadAllRounds'] = 'Download all rounds'; + i['editRoundStudy'] = 'Edit round study'; + i['federation'] = 'Federation'; + i['fideFederations'] = 'FIDE federations'; + i['fidePlayerNotFound'] = 'FIDE player not found'; + i['fidePlayers'] = 'FIDE players'; + i['fideProfile'] = 'FIDE profile'; + i['fullDescription'] = 'Full tournament description'; + i['fullDescriptionHelp'] = s( + 'Optional long description of the tournament. %1$s is available. Length must be less than %2$s characters.', + ); + i['howToUseLichessBroadcasts'] = 'How to use Lichess Broadcasts.'; + i['liveBroadcasts'] = 'Live tournament broadcasts'; + i['myBroadcasts'] = 'My broadcasts'; + i['nbBroadcasts'] = p({ one: '%s broadcast', other: '%s broadcasts' }); + i['newBroadcast'] = 'New live broadcast'; + i['ongoing'] = 'Ongoing'; + i['periodInSeconds'] = 'Period in seconds'; + i['periodInSecondsHelp'] = + 'Optional, how long to wait between requests. Min 2s, max 60s. Defaults to automatic based on the number of viewers.'; + i['recentTournaments'] = 'Recent tournaments'; + i['replacePlayerTags'] = 'Optional: replace player names, ratings and titles'; + i['resetRound'] = 'Reset this round'; + i['roundName'] = 'Round name'; + i['roundNumber'] = 'Round number'; + i['showScores'] = 'Show players scores based on game results'; + i['sourceGameIds'] = 'Up to 64 Lichess game IDs, separated by spaces.'; + i['sourceSingleUrl'] = 'PGN Source URL'; + i['sourceUrlHelp'] = + 'URL that Lichess will check to get PGN updates. It must be publicly accessible from the Internet.'; + i['startDateHelp'] = 'Optional, if you know when the event starts'; + i['startDateTimeZone'] = s('Start date in the tournament local timezone: %s'); + i['subscribedBroadcasts'] = 'Subscribed broadcasts'; + i['theNewRoundHelp'] = 'The new round will have the same members and contributors as the previous one.'; + i['top10Rating'] = 'Top 10 rating'; + i['tournamentDescription'] = 'Short tournament description'; + i['tournamentName'] = 'Tournament name'; + i['unrated'] = 'Unrated'; + i['upcoming'] = 'Upcoming'; +} diff --git a/ui/site/src/site.ts b/ui/site/src/site.ts index 7bd5074742a1..43d139cdc042 100644 --- a/ui/site/src/site.ts +++ b/ui/site/src/site.ts @@ -1,3 +1,4 @@ +import './i18nHotfix'; import { boot } from './boot'; import Mousetrap from './mousetrap'; import { randomToken } from 'common/algo';