Merge branch 'master' into stripe-checkout

* master:
  wait at least 5s before presenting timeout countdown
  broadcast: support another livechesscloud URL format
  search ignore file
  go easier on tournament player DB coll
  readme image title
  update repo image
  disconnect timer seconds - closes #5888
  no need to force resign if opponent flags before - closes #5888
  reduce base disconnect timeout to 40s
  New Crowdin translations (#5894)
  remove kab-KAB translations, they break the build
  New Crowdin translations (#5882)
  study server eval must go over some nodes twice - closes #5884
  fix brezhoneg lowercase
  let crawlers and bots access study PGNs
  replace HMAC-SHA1 with HMAC-SHA256 for StringToken - closes #5887
  slightly lower min deviation (2/4, #5727)
  fix warning
This commit is contained in:
Thibault Duplessis 2020-01-10 11:22:55 -06:00
commit 3d9c934809
47 changed files with 342 additions and 95 deletions

9
.ignore Normal file
View file

@ -0,0 +1,9 @@
# search ignores
vendor
translation
ui/*/css/build
public/font
public/images
public/sound
public/piece
public/piece-css

View file

@ -6,7 +6,8 @@
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/lichess/localized.svg)](https://crowdin.com/project/lichess)
[![Twitter](https://img.shields.io/badge/Twitter-%40lichess-blue.svg)](https://twitter.com/lichess)
<img src="https://raw.githubusercontent.com/ornicar/lila/master/public/images/home-bicolor.png" alt="lichess.org" />
<img src="https://raw.githubusercontent.com/ornicar/lila/master/public/images/home-bicolor.png" alt="Lichess homepage" title="Lichess comes with light and dark theme, this screenshot shows both." />
Lila (li[chess in sca]la) is a free online chess game server focused on [realtime](https://lichess.org/games) gameplay and ease of use.

View file

@ -204,7 +204,7 @@ final class Setup(
def filter = OpenBody { implicit ctx =>
implicit val req = ctx.body
forms.filter.bindFromRequest.fold[Fu[Result]](
f => BadRequest(()).fuccess,
_ => BadRequest(()).fuccess,
config => JsonOk(processor filter config inject config.render)
)
}

View file

@ -378,16 +378,14 @@ final class Study(
)
def pgn(id: String) = Open { implicit ctx =>
OnlyHumans {
PgnRateLimitGlobal("-", msg = HTTPRequest.lastRemoteAddress(ctx.req).value) {
OptionFuResult(env.study.api byId id) { study =>
CanViewResult(study) {
lila.mon.export.pgn.study.increment()
env.study.pgnDump(study) map { pgns =>
Ok(pgns.mkString("\n\n\n")).withHeaders(
CONTENT_DISPOSITION -> ("attachment; filename=" + (env.study.pgnDump filename study))
) as pgnContentType
}
PgnRateLimitGlobal("-", msg = HTTPRequest.lastRemoteAddress(ctx.req).value) {
OptionFuResult(env.study.api byId id) { study =>
CanViewResult(study) {
lila.mon.export.pgn.study.increment()
env.study.pgnDump(study) map { pgns =>
Ok(pgns.mkString("\n\n\n")).withHeaders(
CONTENT_DISPOSITION -> ("attachment; filename=" + (env.study.pgnDump filename study))
) as pgnContentType
}
}
}
@ -395,21 +393,19 @@ final class Study(
}
def chapterPgn(id: String, chapterId: String) = Open { implicit ctx =>
OnlyHumans {
env.study.api.byIdWithChapter(id, chapterId) flatMap {
_.fold(notFound) {
case WithChapter(study, chapter) =>
CanViewResult(study) {
lila.mon.export.pgn.studyChapter.increment()
Ok(env.study.pgnDump.ofChapter(study, chapter).toString)
.withHeaders(
CONTENT_DISPOSITION -> ("attachment; filename=" + (env.study.pgnDump
.filename(study, chapter)))
)
.as(pgnContentType)
.fuccess
}
}
env.study.api.byIdWithChapter(id, chapterId) flatMap {
_.fold(notFound) {
case WithChapter(study, chapter) =>
CanViewResult(study) {
lila.mon.export.pgn.studyChapter.increment()
Ok(env.study.pgnDump.ofChapter(study, chapter).toString)
.withHeaders(
CONTENT_DISPOSITION -> ("attachment; filename=" + (env.study.pgnDump
.filename(study, chapter)))
)
.as(pgnContentType)
.fuccess
}
}
}
}

View file

@ -48,7 +48,7 @@ case class Info(
}
override def toString =
s"Info $color [$ply] ${cp.fold("?")(_.showPawns)} ${mate.??(_.value)} ${variation.mkString(" ")}"
s"Info $color [$ply] ${cp.fold("?")(_.showPawns)} ${mate.??(_.value)} $best"
}
object Info {

View file

@ -23,7 +23,7 @@ object LangList {
Lang("be", "BY") -> "Беларуская",
Lang("bg", "BG") -> "български език",
Lang("bn", "BD") -> "বাংলা",
Lang("br", "FR") -> "Brezhoneg",
Lang("br", "FR") -> "brezhoneg",
Lang("bs", "BA") -> "bosanski",
Lang("ca", "ES") -> "Català, valencià",
Lang("cs", "CZ") -> "čeština",

View file

@ -63,7 +63,7 @@ case object Glicko {
val defaultIntRating = default.rating.toInt
val minDeviation = 47.5
val minDeviation = 45
val variantRankableDeviation = 65
val standardRankableDeviation = 75
val provisionalDeviation = 110

View file

@ -115,7 +115,7 @@ object Relay {
}
}
case class UpstreamWithRound(url: String, round: Option[Int])
val LccRegex = """.*view\.livechesscloud\.com/([0-9a-f\-]+)""".r
val LccRegex = """.*view\.livechesscloud\.com/#?([0-9a-f\-]+)""".r
}
case class WithStudy(relay: Relay, study: Study)

View file

@ -91,14 +91,18 @@ final private[round] class RoundDuct(
!botConnected && offlineSince.exists(_ < (nowMillis - timeoutMillis))
} ?? !isHostingSimul
def millisToGone: Fu[Option[Long]] =
def showMillisToGone: Fu[Option[Long]] =
if (botConnected) fuccess(none)
else
offlineSince ?? { since =>
else {
val now = nowMillis
offlineSince.filter { since =>
bye || (now - since) > 5000
} ?? { since =>
isHostingSimul map {
!_ option (timeoutMillis + since - nowMillis)
!_ option (timeoutMillis + since - now)
}
}
}
def setBotConnected(v: Boolean) =
botConnected = v
@ -461,10 +465,10 @@ final private[round] class RoundDuct(
g.forceResignable ?? fuccess {
Color.all.foreach { c =>
if (!getPlayer(c).isOnline && getPlayer(!c).isOnline) {
getPlayer(c).millisToGone foreach {
getPlayer(c).showMillisToGone foreach {
_ ?? { millis =>
if (millis <= 0) notifyGone(c, true)
else notifyGoneIn(c, millis)
else if (g.clock.exists(_.remainingTime(c).millis > millis + 3000)) notifyGoneIn(c, millis)
}
}
}

View file

@ -175,7 +175,7 @@ object RoundSocket {
val tickSeconds = 5
val tickInterval = tickSeconds.seconds
val ragequitTimeout = 10.seconds
val disconnectTimeout = 60.seconds
val disconnectTimeout = 40.seconds
def povDisconnectTimeout(pov: Pov): FiniteDuration =
disconnectTimeout * {

View file

@ -41,7 +41,7 @@ final private[security] class StringToken[A](
}
}
private def makeHash(msg: String) = Algo.hmac(secret.value).sha1(msg).hex take fullHashSize
private def makeHash(msg: String) = Algo.hmac(secret.value).sha256(msg).hex take fullHashSize
private def hashCurrentValue(payload: A) = getCurrentValue(payload) map { v =>
currentValueHashSize.fold(v)(makeHash(v) take _)

View file

@ -100,7 +100,7 @@ case class Node(
def moveOption = move.some
override def toString = s"$ply.${move.san} [${children}]"
override def toString = s"$ply.${move.san}"
}
object Node {
@ -312,7 +312,7 @@ object Node {
def moveOption = none
override def toString = s"ROOT [$children]"
override def toString = "ROOT"
}
object Root {

View file

@ -53,27 +53,32 @@ object ServerEval {
lila.common.Future
.fold(chapter.root.mainline zip analysis.infoAdvices)(Path.root) {
case (path, (node, (info, advOpt))) =>
info.eval.score.ifTrue(node.score.isEmpty).?? { score =>
chapterRepo.setScore(score.some)(chapter, path + node) >>
advOpt.?? { adv =>
chapterRepo.setComments(
node.comments + Comment(
Comment.Id.make,
Comment.Text(adv.makeComment(false, true)),
Comment.Author.Lichess
)
)(chapter, path + node) >>
chapterRepo.setGlyphs(
node.glyphs merge Glyphs.fromList(List(adv.judgment.glyph))
)(chapter, path + node) >> {
chapter.root.nodeAt(path).flatMap { parent =>
analysisLine(parent, chapter.setup.variant, info) flatMap { child =>
parent.addChild(child).children.get(child.id)
}
} ?? { chapterRepo.setChild(chapter, path, _) }
}
info.eval.score
.ifTrue {
node.score.isEmpty ||
advOpt.isDefined && node.comments.findBy(Comment.Author.Lichess).isEmpty
}
} inject path + node
.?? { score =>
chapterRepo.setScore(score.some)(chapter, path + node) >>
advOpt.?? { adv =>
chapterRepo.setComments(
node.comments + Comment(
Comment.Id.make,
Comment.Text(adv.makeComment(false, true)),
Comment.Author.Lichess
)
)(chapter, path + node) >>
chapterRepo.setGlyphs(
node.glyphs merge Glyphs.fromList(List(adv.judgment.glyph))
)(chapter, path + node) >> {
chapter.root.nodeAt(path).flatMap { parent =>
analysisLine(parent, chapter.setup.variant, info) flatMap { child =>
parent.addChild(child).children.get(child.id)
}
} ?? { chapterRepo.setChild(chapter, path, _) }
}
}
} inject path + node
} void
} >>- {
chapterRepo.byId(Chapter.Id(analysis.id)).foreach {

View file

@ -23,7 +23,7 @@ final class TournamentStandingApi(
private val workQueue = new WorkQueue(
buffer = 512,
name = "tournamentStandingApi",
parallelism = 8
parallelism = 6
)
def apply(tour: Tournament, page: Int): Fu[JsObject] =

Binary file not shown.

Before

Width:  |  Height:  |  Size: 288 KiB

After

Width:  |  Height:  |  Size: 692 KiB

View file

@ -1,3 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources></resources>
<resources>
<string name="coordinates">Tisidag</string>
<string name="coordinateTraining">Kemmel asileɣ</string>
<string name="averageScoreAsWhiteX">Agemmuḍ alemmas d amellal:%s</string>
<string name="averageScoreAsBlackX">Agemmuḍ alemmas d aberkan:%s</string>
</resources>

View file

@ -1,3 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources></resources>
<resources>
<string name="emailConfirm_subject">Sentem amiḍan-inek lichess.org,%s</string>
<string name="emailConfirm_click">Sit ɣef useɣwen i urmad n umiḍan-inek Lichess account:</string>
<string name="emailConfirm_ignore">Ma yella ur tettwaskelseḍ ara ɣer Lichess, tzemreḍ ad tanfeḍ s teɣlist izen-agi.</string>
<string name="passwordReset_subject">Wennez awal uffir-inek lichess.org,%s</string>
<string name="passwordReset_intro">Yettwazen-aɣ-d usuter n uwennez n wawal uffir n umiḍan-inek.</string>
<string name="passwordReset_clickOrIgnore">Ma yella d kečč id yessutren, sit ɣef useɣwen-a n wadda.Ma ulac, tzemreḍ ad stanfeḍ.</string>
<string name="emailChange_subject">Sentem tansa n yimayl tamaynut,%s</string>
<string name="emailChange_intro">Tessutreḍ abeddel n tansa n yimayl-inek.</string>
</resources>

View file

@ -57,7 +57,7 @@ maar slaan schuin!</string>
<string name="captureThenPromote">Sla en promoveer meteen!</string>
<string name="useAllThePawns">Gebruik alle pionnen!
Promoveren is niet nodig.</string>
<string name="aPawnOnTheSecondRank">Een pion op de tweede rij kan 2 vakjes in een keer bewegen!</string>
<string name="aPawnOnTheSecondRank">Een pion op de tweede rij kan 2 vakjes in één keer bewegen!</string>
<string name="grabAllTheStarsNoNeedToPromote">Grijp alle sterren!
Promoveren is niet nodig.</string>
<string name="pawnComplete">Gefeliciteerd! Pionnen hebben geen geheimen meer voor jou.</string>

View file

@ -106,7 +106,7 @@
<string name="outOfCheckComplete">Поздравляем! Вашего короля невозможно взять, но убедитесь, что вы можете защитить его от шаха!</string>
<string name="mateInOne">Мат</string>
<string name="defeatTheOpponentsKing">Разгромите короля противника</string>
<string name="mateInOneIntro">Вы выиграете, если ваш противник не сможет защититься от шаха.</string>
<string name="mateInOneIntro">Вы выиграете, если ваш соперник не сможет защититься от шаха.</string>
<string name="attackYourOpponentsKing">Атакуйте короля вашего противника так,
чтобы его невозможно было защитить!</string>
<string name="mateInOneComplete">Поздравляем! Вот таким образом вы и будете побеждать!</string>

View file

@ -31,6 +31,10 @@
<string name="joinTheGame">Uneix-te a la partida</string>
<string name="whitePlays">Les blanques juguen</string>
<string name="blackPlays">Les negres començen</string>
<plurals name="opponentLeftCounter">
<item quantity="one">El seu oponent ha abandonat el joc. Pot reclamar la victòria en %s segons.</item>
<item quantity="other">El seu oponent ha abandonat el joc. Pot reclamar la victòria en %s segons.</item>
</plurals>
<string name="opponentLeftChoices">L\'altre jugador pot haver abandonat la partida. Pots reclamar la victòria, fer l\'empat o esperar.</string>
<string name="makeYourOpponentResign">Reclama la victòria</string>
<string name="forceResignation">Reclama la victòria</string>

View file

@ -31,6 +31,10 @@
<string name="joinTheGame">Start spillet</string>
<string name="whitePlays">Hvid til at spille</string>
<string name="blackPlays">Sort til at spille</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Din modstander har forladt spillet. Du kan kræve sejr om %s sekund.</item>
<item quantity="other">Din modstander har forladt spillet. Du kan kræve sejr om %s sekunder.</item>
</plurals>
<string name="opponentLeftChoices">Din modstander har forladt spillet. Du kan fremtvinge modstanderens kapitulation eller vente.</string>
<string name="makeYourOpponentResign">Tving din modstander til at opgive</string>
<string name="forceResignation">Kræv sejr</string>

View file

@ -31,6 +31,10 @@
<string name="joinTheGame">Der Partie beitreten</string>
<string name="whitePlays">Weiß am Zug</string>
<string name="blackPlays">Schwarz am Zug</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Dein Gegner hat die Partie verlassen. Du kannst in %s Sekunde den Sieg beanspruchen.</item>
<item quantity="other">Dein Gegner hat die Partie verlassen. Du kannst in %s Sekunden den Sieg beanspruchen.</item>
</plurals>
<string name="opponentLeftChoices">Dein Gegner hat die Partie möglicherweise verlassen. Du kannst den Sieg beanspruchen, das Spiel Remis erklären oder auf deinen Gegner warten.</string>
<string name="makeYourOpponentResign">Zwinge deinen Gegner zur Aufgabe</string>
<string name="forceResignation">Sieg beanspruchen</string>

View file

@ -31,6 +31,10 @@
<string name="joinTheGame">Λάβετε μέρος στο παιχνίδι</string>
<string name="whitePlays">Παίζουν τα λευκά</string>
<string name="blackPlays">Παίζουν τα μαύρα</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Ο αντίπαλος έφυγε. Διεκδίκηση νίκης σε %s δευτερόλεπτο.</item>
<item quantity="other">Ο αντίπαλος έφυγε. Διεκδίκηση νίκης σε %s δευτερόλεπτα.</item>
</plurals>
<string name="opponentLeftChoices">Ο αντίπαλος σας έφυγε από το παιχνίδι. Μπορείτε να ισχυρισθείτε νίκη, ισοπαλία, ή να περιμένετε.</string>
<string name="makeYourOpponentResign">Αναγκάστε τον αντίπαλό σας να παραιτηθεί</string>
<string name="forceResignation">Ισχυριστείτε νίκη</string>
@ -59,6 +63,7 @@
<string name="promoteVariation">Προώθηση παραλλαγής</string>
<string name="makeMainLine">Δημιουργήστε κύρια γραμμή</string>
<string name="deleteFromHere">Διαγραφή από εδώ</string>
<string name="forceVariation">Θέσε σε βαριάντα</string>
<string name="move">Κίνηση</string>
<string name="variantLoss">Ήττα εκδοχής</string>
<string name="variantWin">Νίκη εκδοχής</string>
@ -341,6 +346,7 @@
<string name="pasteThePgnStringHere">Επικολλήστε το κείμενο του PGN εδώ</string>
<string name="fromPosition">Από συγκεκριμένη θέση</string>
<string name="continueFromHere">Συνέχεια από εδώ</string>
<string name="toStudy">Μελέτη</string>
<string name="importGame">Εισαγωγή παιχνιδιού</string>
<string name="importGameExplanation">Επικολλήστε PGN παιχνιδιού για να δημιουργήσετε περιηγήσιμη αναπαραγωγή,
ανάλυση από υπολογιστή, συνομιλία παιχνιδιού και κοινόχρηστο URL.</string>
@ -356,6 +362,10 @@
<string name="blackCheckmatesInOneMove">Παίζουν τα μαύρα, κάντε ματ με μια κίνηση</string>
<string name="retry">Επανάληψη</string>
<string name="reconnecting">Επανασύνδεση</string>
<plurals name="nbFriendsOnline">
<item quantity="one">%s φίλος συνδεδεμένος</item>
<item quantity="other">%s φίλοι συνδεδεμένοι</item>
</plurals>
<string name="noFriendsOnline">Δεν υπάρχουν συνδεδεμένοι φίλοι</string>
<string name="findFriends">Βρείτε φίλους</string>
<string name="favoriteOpponents">Αγαπημένοι αντίπαλοι</string>
@ -586,6 +596,9 @@
<string name="xCommentedY">Ο χρήστης %1$s σχολίασε την ερώτηση %2$s</string>
<string name="victory">Επιτυχία</string>
<string name="defeat">Ήττα</string>
<string name="victoryVsYInZ">%1$s εναντίον %2$s σε %3$s</string>
<string name="defeatVsYInZ">%1$s εναντίον %2$s σε %3$s</string>
<string name="drawVsYInZ">%1$s εναντίον %2$s σε %3$s</string>
<string name="timeline">Χρονολόγιο</string>
<string name="starting">Αρχίζει:</string>
<string name="allInformationIsPublicAndOptional">Όλες οι πληροφορίες είναι δημόσιες και προαιρετικές.</string>
@ -613,6 +626,8 @@
<string name="playOfflineComputer">Εναντίον Υπολογιστή</string>
<string name="opponent">Αντίπαλος</string>
<string name="learnMenu">Εκμάθηση</string>
<string name="studyMenu">Μελέτη</string>
<string name="practice">Εξάσκηση</string>
<string name="community">Κοινότητα</string>
<string name="tools">Εργαλεία</string>
<string name="increment">Προσαύξηση</string>
@ -647,6 +662,8 @@
<string name="tpTimeSpentOnTV">Χρόνος στην Τηλεόραση: %s</string>
<string name="watch">Παρακολουθήστε</string>
<string name="videoLibrary">Βιβλιοθήκη τηλεοπτικού υλικού</string>
<string name="streamersMenu">Streamers</string>
<string name="broadcastsMenu">Αναμεταδόσεις</string>
<string name="mobileApp">Εφαρμογή για Κινητά</string>
<string name="webmasters">Διαχειριστές</string>
<string name="about">Σχετικά με</string>
@ -854,8 +871,13 @@
<item quantity="one">και αποθηκεύστε %s γραμμή προκίνησης</item>
<item quantity="other">και αποθηκεύστε %s γραμμές προκίνησης</item>
</plurals>
<string name="sorry">Λυπούμαστε :(</string>
<string name="weHadToTimeYouOutForAWhile">Πρέπει να σας αποκλείσουμε για λίγο.</string>
<string name="timeoutExpires">Ο αποκλεισμός λήγει σε %s.</string>
<string name="why">Γιατί;</string>
<string name="pleasantChessExperience">Ο σκοπός μας είναι να προσφέρουμε μια ευχάριστη σκακιστική ατμόσφαιρα για όλους.</string>
<string name="goodPractice">Για να πραγματοποιηθεί αυτό, πρέπει να βεβαιωθούμε ότι όλοι οι παίκτες ακολουθούν τους κανόνες.</string>
<string name="potentialProblem">Όταν ανιχνευτεί ένα πιθανό πρόβλημα, εμφανίζεται αυτό το μήνυμα.</string>
<string name="howToAvoidThis">Πώς να το αποφύγετε αυτό;</string>
<string name="playEveryGame">Τελειώστε κάθε παρτίδα που ξεκινάτε.</string>
<string name="tryToWin">Προσπαθήστε να νικήσετε (ή να φέρετε ισοπαλία) σε κάθε παιχνίδι που παίζετε.</string>
@ -863,4 +885,10 @@
<string name="temporaryInconvenience">Συγχωρέστε μας για την προσωρινή δυσφορία,</string>
<string name="wishYouGreatGames">και σας ευχόμαστε καλές παρτίδες στο lichess.org.</string>
<string name="thankYouForReading">Ευχαριστούμε που αφιερώσατε χρόνο για να να τα διαβάσετε!</string>
<string name="lifetimeScore">Συνολικό σκορ</string>
<string name="currentMatchScore">Τρέχον σκορ</string>
<string name="agreementAssistance">Αποδέχομαι ότι ουδέποτε θα λάβω βοήθεια κατά τις παρτίδες μου (από υπολογιστή, βιβλίο, βάση δεδομένων ή άλλο πρόσωπο).</string>
<string name="agreementNice">Αποδέχομαι ότι πάντα θα επιδεικνύω σεβασμό προς όλους του παίκτες.</string>
<string name="agreementAccount">Αποδέχομαι ότι δεν θα δημιουργήσω πολλαπλούς λογαριασμούς.</string>
<string name="agreementPolicy">Αποδέχομαι ότι θα συμμορφωθώ με όλες τις πολιτικές του Lichess.</string>
</resources>

View file

@ -31,7 +31,11 @@
<string name="joinTheGame">Join the game</string>
<string name="whitePlays">White to play</string>
<string name="blackPlays">Black to play</string>
<string name="opponentLeftChoices">The other player may have left the game. You can claim victory, call the game a draw, or wait.</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Your opponent left the game. You can claim victory in %s second.</item>
<item quantity="other">Your opponent left the game. You can claim victory in %s seconds.</item>
</plurals>
<string name="opponentLeftChoices">Your opponent left the game. You can claim victory, call the game a draw, or wait.</string>
<string name="makeYourOpponentResign">Make your opponent resign</string>
<string name="forceResignation">Claim victory</string>
<string name="forceDraw">Call draw</string>

View file

@ -31,6 +31,10 @@
<string name="joinTheGame">Unirse a la partida</string>
<string name="whitePlays">Turno de las blancas</string>
<string name="blackPlays">Turno de las negras</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Tu oponente ha salido de la partida. Puedrás reclamar la victoria en %s segundo.</item>
<item quantity="other">Tu oponente ha salido de la partida. Puedrás reclamar la victoria en %s segundos.</item>
</plurals>
<string name="opponentLeftChoices">Tu oponente puede haber abandonado la partida. Puedes reclamar la victoria, declarar tablas o esperar.</string>
<string name="makeYourOpponentResign">Reclamar la victoria por abandono del oponente</string>
<string name="forceResignation">Reclamar la victoria</string>
@ -611,7 +615,7 @@
</plurals>
<string name="listBlockedPlayers">Lista de jugadores que has bloqueado</string>
<string name="human">Humano</string>
<string name="computer">Computadora</string>
<string name="computer">Ordenador</string>
<string name="side">Color</string>
<string name="clock">Reloj</string>
<string name="unauthorizedError">Acceso no autorizado.</string>
@ -671,10 +675,10 @@
<string name="contact">Contacto</string>
<string name="termsOfService">Condiciones de servicio</string>
<string name="sourceCode">Código fuente</string>
<string name="simultaneousExhibitions">Partidas simultáneas</string>
<string name="simultaneousExhibitions">Exhibiciones simultáneas</string>
<string name="host">Anfitrión</string>
<string name="hostColorX">Color del anfitrión: %s</string>
<string name="createdSimuls">Simultáneas nuevas creadas</string>
<string name="createdSimuls">Nuevas simúltaneas creadas</string>
<string name="hostANewSimul">Crear una nueva simultánea</string>
<string name="noSimulFound">Simultánea no encontrada</string>
<string name="noSimulExplanation">Esta exhibición simultánea no existe.</string>

View file

@ -31,6 +31,10 @@
<string name="joinTheGame">Partidan sartu</string>
<string name="whitePlays">Zuriaren txanda</string>
<string name="blackPlays">Beltzaren txanda</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Zure aurkariak partida utzi egin du. Partida irabaztea eskatu dezakezu segundo %sen.</item>
<item quantity="other">Zure aurkariak partida utzi egin du. Partida irabaztea eskatu dezakezu %s segundotan.</item>
</plurals>
<string name="opponentLeftChoices">Baliteke aurkaria partidatik atera izana. Partida irabazi edo berdindu dezakezu, edo aurkariari itxaron.</string>
<string name="makeYourOpponentResign">Partida irabazitzat hartu.</string>
<string name="forceResignation">Irabazi</string>

View file

@ -31,6 +31,10 @@
<string name="joinTheGame">Liity peliin</string>
<string name="whitePlays">Valkean vuoro</string>
<string name="blackPlays">Mustan vuoro</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Vastustajasi poistui pelistä. Voit vaatia voiton %s sekunnin kuluttua.</item>
<item quantity="other">Vastustajasi poistui pelistä. Voit vaatia voiton %s sekunnin kuluttua.</item>
</plurals>
<string name="opponentLeftChoices">Toinen pelaaja saattoi lähteä pelistä. Voit ottaa luovutusvoiton, sopia tasapelin tai odottaa häntä.</string>
<string name="makeYourOpponentResign">Pakota luovutus</string>
<string name="forceResignation">Ota luovutusvoitto</string>

View file

@ -518,7 +518,7 @@ računalnu analizu, chat partije i URL za dijeljenje.</string>
<string name="thisPuzzleIsWrong">Ovaj problem je pogrešan ili dosadan</string>
<plurals name="nbGamesInPlay">
<item quantity="one">%s partija u tijeku</item>
<item quantity="few">%s partija u tijeku</item>
<item quantity="few">%s partije u tijeku</item>
<item quantity="other">%s partija u tijeku</item>
</plurals>
<string name="automaticallyProceedToNextGameAfterMoving">Automatski prebaci na sljedeću partiju nakon odigranog poteza</string>
@ -631,13 +631,13 @@ računalnu analizu, chat partije i URL za dijeljenje.</string>
<string name="yourCityRegionOrDepartment">Tvoj grad, regija ili pokrajina.</string>
<string name="biographyDescription">Nešto više o vama, što volite u šahu, omiljena otvaranja, igre, igrači…</string>
<plurals name="maximumNbCharacters">
<item quantity="one">Maksimalno: %s znakova.</item>
<item quantity="few">Maksimalno: %s znakova.</item>
<item quantity="one">Maksimalno: %s znak.</item>
<item quantity="few">Maksimalno: %s znaka.</item>
<item quantity="other">Maksimalno: %s znakova.</item>
</plurals>
<plurals name="blocks">
<item quantity="one">%s blokirani igrač</item>
<item quantity="few">%s blokiranih igrača</item>
<item quantity="few">%s blokirana igrača</item>
<item quantity="other">%s blokiranih igrača</item>
</plurals>
<string name="listBlockedPlayers">Popis blokiranih igrača</string>
@ -683,7 +683,7 @@ računalnu analizu, chat partije i URL za dijeljenje.</string>
<string name="blackCastlingKingside">Crni O-O</string>
<plurals name="nbForumPosts">
<item quantity="one">%s forumska poruka</item>
<item quantity="few">%s forumskih poruka</item>
<item quantity="few">%s forumske poruke</item>
<item quantity="other">%s forumskih poruka</item>
</plurals>
<string name="tpTimeSpentPlaying">Vrijeme provedeno igrajući: %s</string>
@ -799,7 +799,7 @@ računalnu analizu, chat partije i URL za dijeljenje.</string>
<plurals name="availableInNbLanguages">
<item quantity="one">Dostupno u %s jezika!</item>
<item quantity="few">Dostupno u %s jezika!</item>
<item quantity="other">Dostupno u %s jezika!</item>
<item quantity="other">Dostupno na %s jezika!</item>
</plurals>
<string name="gameAnalysis">Analiza partije</string>
<string name="xHostsY">%1$s održava %2$s</string>

View file

@ -459,7 +459,7 @@ analizzarla con il computer, commentarla in chat, e condividerla tramire indiriz
<string name="activeToday">Attivi oggi</string>
<string name="activePlayers">Giocatori attivi</string>
<string name="bewareTheGameIsRatedButHasNoClock">Attenzione, la partita è classificata ma senza limite di tempo!</string>
<string name="training">Allenamento</string>
<string name="training">Problemi</string>
<string name="yourPuzzleRatingX">Il tuo punteggio in allenamento: %s</string>
<string name="findTheBestMoveForWhite">Trova la mossa migliore per il Bianco.</string>
<string name="findTheBestMoveForBlack">Trova la mossa migliore per il Nero.</string>
@ -798,7 +798,7 @@ analizzarla con il computer, commentarla in chat, e condividerla tramire indiriz
<string name="directlySupportLichess">Supporta direttamente Lichess</string>
<string name="playChessInStyle">Gioca a scacchi con stile</string>
<string name="chessBasics">Basi scacchistiche</string>
<string name="coaches">Allenatori</string>
<string name="coaches">Istruttori</string>
<string name="invalidPgn">PGN non valido</string>
<string name="invalidFen">FEN non valido</string>
<string name="error.minLength">La lunghezza minima è %s</string>
@ -806,7 +806,7 @@ analizzarla con il computer, commentarla in chat, e condividerla tramire indiriz
<string name="error.min">Deve essere più grande o uguale a %s</string>
<string name="error.max">Deve essere minore o uguale a %s</string>
<string name="error.unknown">Errore</string>
<string name="custom">Personalizzato</string>
<string name="custom">Personalizza</string>
<string name="notifications">Notifiche</string>
<string name="challenges">Sfide</string>
<string name="perfRatingX">Punteggio: %s</string>

View file

@ -90,6 +90,7 @@
<string name="players">Imariren</string>
<string name="minutesPerSide">Tisdidin deg umarir</string>
<string name="variant">Tamzarayt</string>
<string name="variants">Tamzarayt</string>
<string name="timeControl">Asenqed n akud</string>
<string name="correspondence">Amyaru</string>
<string name="daysPerTurn">Ussan s nnuba</string>
@ -103,6 +104,7 @@
<item quantity="other">%s n yisragen</item>
</plurals>
<string name="time">Ukkud</string>
<string name="rating">Asismel</string>
<string name="username">Isem n useqdac</string>
<string name="usernameOrEmail">Isem useqdac</string>
<string name="password">Awal ukeččum</string>
@ -133,6 +135,8 @@
<string name="mode">Asekkir</string>
<string name="casual">S timidwa</string>
<string name="rated">Ibellzen</string>
<string name="casualTournament">S timidwa</string>
<string name="ratedTournament">Ibellzen</string>
<string name="thisGameIsRated">Timlilit agi t-bellez</string>
<string name="rematch">Ttaṛ</string>
<string name="rematchOfferSent">Asumer n ttaṛ</string>

View file

@ -31,6 +31,12 @@
<string name="joinTheGame">Prisijungti prie žaidimo</string>
<string name="whitePlays">Baltųjų ėjimas</string>
<string name="blackPlays">Juodųjų ėjimas</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Jūsų varžovas paliko partiją. Galėsite pasiimti pergalę už %s sekundės.</item>
<item quantity="few">Jūsų varžovas paliko partiją. Galėsite pasiimti pergalę už %s sekundžių.</item>
<item quantity="many">Jūsų varžovas paliko partiją. Galėsite pasiimti pergalę už %s sekundžių.</item>
<item quantity="other">Jūsų varžovas paliko partiją. Galėsite pasiimti pergalę už %s sekundžių.</item>
</plurals>
<string name="opponentLeftChoices">Panašu, kad varžovas paliko žaidimą. Galite pasiimti pergalę, lygiąsias, arba palaukti.</string>
<string name="makeYourOpponentResign">Priversti priešininką pasiduoti</string>
<string name="forceResignation">Pasiimti pergalę</string>

View file

@ -31,7 +31,12 @@
<string name="joinTheGame">Pievienoties spēlei</string>
<string name="whitePlays">Gājiens baltajiem</string>
<string name="blackPlays">Gājiens melnajiem</string>
<string name="opponentLeftChoices">Tavs pretinieks ir pametis spēli. Tu vari pieprasīt uzvaru, pabeigt spēli neizšķirtu, vai gaidīt.</string>
<plurals name="opponentLeftCounter">
<item quantity="zero">Jūsu pretinieks pametis spēli. Varēsiet pieprasīt uzvaru pēc %s sekundēm.</item>
<item quantity="one">Jūsu pretinieks pametis spēli. Varēsiet pieprasīt uzvaru pēc %s sekundes.</item>
<item quantity="other">Jūsu pretinieks pametis spēli. Varēsiet pieprasīt uzvaru pēc %s sekundēm.</item>
</plurals>
<string name="opponentLeftChoices">Jūsu pretinieks pametis spēli. Varat pieprasīt uzvaru, pabeigt spēli neizšķirtu vai gaidīt.</string>
<string name="makeYourOpponentResign">Lieciet pretiniekam padoties</string>
<string name="forceResignation">Pieprasīt uzvaru</string>
<string name="forceDraw">Pieprasīt neizšķirtu</string>

View file

@ -31,6 +31,10 @@
<string name="joinTheGame">കളിയിൽ ചേരുക</string>
<string name="whitePlays">വെള്ളയുടെ നീക്കം</string>
<string name="blackPlays">കറുപ്പിന്റെ നീക്കം</string>
<plurals name="opponentLeftCounter">
<item quantity="one">നിങ്ങളുടെ എതിരാളി കളി ഉപേക്ഷിച്ചു. നിങ്ങള്‍ക്ക് %s സെക്ക൯റ്റിൽ ജയം അവകാശപ്പെടാം.</item>
<item quantity="other">നിങ്ങളുടെ എതിരാളി കളി ഉപേക്ഷിച്ചു. നിങ്ങള്‍ക്ക് %s സെക്ക൯കളില്‍ ജയം അവകാശപ്പെടാം.</item>
</plurals>
<string name="opponentLeftChoices">എതിരാളി പോയിരിക്കാം. നിങ്ങൾക്ക് വിജയിക്കുകയോ സമനില കൊടുക്കുകയോ കാത്തിരിക്കുകയോ ചെയ്യാം.</string>
<string name="makeYourOpponentResign">എതിരാളിയെക്കൊണ്ട് രാജി വെപ്പിക്കുക</string>
<string name="forceResignation">വിജയം പ്രഖ്യാപിക്കുക</string>
@ -622,6 +626,7 @@
<string name="playOfflineComputer">കമ്പ്യൂട്ടർ</string>
<string name="opponent">എതിരാളി</string>
<string name="learnMenu">പഠിക്കുക</string>
<string name="practice">പരിശീലനം</string>
<string name="community">സമാജം</string>
<string name="tools">ഉപകരണങ്ങൾ</string>
<string name="increment">കയറ്റം</string>

View file

@ -31,6 +31,10 @@
<string name="joinTheGame">Bli med</string>
<string name="whitePlays">Hvit i trekket</string>
<string name="blackPlays">Sort i trekket</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Motspilleren din har forlatt partiet. Du kan kreve seier om %s sekund.</item>
<item quantity="other">Motspilleren din har forlatt partiet. Du kan kreve seier om %s sekunder.</item>
</plurals>
<string name="opponentLeftChoices">Den andre spilleren kan ha forlatt partiet. Du kan kreve seier, erklære remis, eller vente.</string>
<string name="makeYourOpponentResign">Tving motstanderen til å gi opp</string>
<string name="forceResignation">Krev seier</string>

View file

@ -31,6 +31,10 @@
<string name="joinTheGame">Speel mee</string>
<string name="whitePlays">Wit aan zet</string>
<string name="blackPlays">Zwart aan zet</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Je tegenstander heeft het spel verlaten. Je kan de overwinning opeisen over %s seconde.</item>
<item quantity="other">Je tegenstander heeft het spel verlaten. Je kan de overwinning opeisen over %s seconden.</item>
</plurals>
<string name="opponentLeftChoices">De andere speler is weggegaan. U kunt de winst opeisen, remise claimen of wachten.</string>
<string name="makeYourOpponentResign">U wint de partij</string>
<string name="forceResignation">Eis de overwinning op</string>

View file

@ -31,6 +31,10 @@
<string name="joinTheGame">Bli med</string>
<string name="whitePlays">Kvit i trekket</string>
<string name="blackPlays">Svart i trekket</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Motspelaren din har forlate partiet. Du kan krevje siger om %s sekund.</item>
<item quantity="other">Motspelaren din har forlate partiet. Du kan krevje siger om %s sekund.</item>
</plurals>
<string name="opponentLeftChoices">Motspelaren kan ha forlate partiet. Du kan velja mellom å krevja siger eller erklæra remis, eller venta til motspelaren kjem attende.</string>
<string name="makeYourOpponentResign">Tving motspelaren til å gje opp</string>
<string name="forceResignation">Krev siger</string>

View file

@ -23,8 +23,16 @@
<string name="blackIsVictorious">ਕਾਲਾ ਜਿੱਤ ਗਯਾ</string>
<string name="threeChecks">ਤਿੰਨ ਚੈੱਕ</string>
<string name="raceFinished">ਦੌੜ ਖ਼ਤਮ</string>
<string name="newOpponent">ਨਵਾਂ ਵਿਰੋਧੀ</string>
<string name="yourOpponentWantsToPlayANewGameWithYou">ਤੁਹਾਡਾ ਵਿਰੋਧੀ ਤੁਹਾਡੇ ਨਾਲ ਨਵੀਂ ਗੇਮ ਖੇਡਣਾ ਚਾਹੁੰਦਾ ਹੈ</string>
<string name="joinTheGame">ਖੇਡ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ</string>
<string name="whitePlays">ਚਿੱਟਾ ਦੀ ਵਾਰੀ</string>
<string name="blackPlays">ਕਾਲਾ ਦੀ ਵਾਰੀ</string>
<string name="forceResignation">ਦਾਅਵਾ ਜਿੱਤ</string>
<string name="talkInChat">ਕਿਰਪਾ ਕਰਕੇ ਗੱਲਬਾਤ ਵਿੱਚ ਚੰਗੇ ਬਣੋ!</string>
<string name="theFirstPersonToComeOnThisUrlWillPlayWithYou">ਇਸ ਲਿੰਕ ਤੇ ਆਉਣ ਵਾਲਾ ਪਹਿਲਾ ਵਿਅਕਤੀ ਤੁਹਾਡੇ ਨਾਲ ਖੇਡੇ ਗਾ।</string>
<string name="whiteResigned">ਚਿੱਟੇ ਨੇ ਅਸਤੀਫਾ ਦੇ ਦਿੱਤਾ</string>
<string name="blackResigned">ਕਾਲੇ ਨੇ ਅਸਤੀਫਾ ਦੇ ਦਿੱਤਾ</string>
<string name="whiteLeftTheGame">ਚਿੱਟਾ ਨੇ ਖੇਡ ਨੂੰ ਛੱਡ ਦਿੱਤਾ</string>
<string name="blackLeftTheGame">ਕਾਲਾ ਨੇ ਖੇਡ ਨੂੰ ਛੱਡ ਦਿੱਤਾ</string>
<string name="shareThisUrlToLetSpectatorsSeeTheGame">ਦਰਸ਼ਕਾਂ ਨੂੰ ਖੇਡ ਵੇਖਣ ਲਈ ਇਸ ਲਿੰਕ ਨੂੰ ਸਾਂਝ ਕਰੋ</string>
@ -35,4 +43,12 @@
<string name="computerAnalysisAvailable">ਕੰਪਿਟਰ ਵਿਸ਼ਲੇਸ਼ਣ ਉਪਲਬਧ ਹੈ</string>
<string name="analysis">ਵਿਸ਼ਲੇਸ਼ਣ ਬੋਰਡ</string>
<string name="loadingEngine">ਇੰਜਣ ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ ...</string>
<string name="play">ਖੇਡੋ</string>
<string name="tournaments">ਟੂਰਨਾਮੈਂਟ</string>
<string name="openTournaments">ਖੁਲੇ ਟੂਰਨਾਮੈਂਟ</string>
<string name="learnMenu">ਸਿੱਖੋ</string>
<string name="community">ਕਮਿਨਿਟੀ</string>
<string name="tools">ਸੰਦ</string>
<string name="watch">ਦੇਖੋ</string>
<string name="chessBasics">ਸ਼ਤਰੰਜ ਦੀ ਬੁਨਿਆਦ</string>
</resources>

View file

@ -31,6 +31,12 @@
<string name="joinTheGame">Dołącz do gry</string>
<string name="whitePlays">Ruch białych</string>
<string name="blackPlays">Ruch czarnych</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Przeciwnik porzucił partię. Możesz ogłosić wygraną za %s sekundę.</item>
<item quantity="few">Przeciwnik porzucił partię. Możesz ogłosić wygraną za %s sekundy.</item>
<item quantity="many">Przeciwnik porzucił partię. Możesz ogłosić wygraną za %s sekund.</item>
<item quantity="other">Przeciwnik porzucił partię. Możesz ogłosić wygraną za %s sekund.</item>
</plurals>
<string name="opponentLeftChoices">Przeciwnik opuścił grę. Możesz ogłosić swoje zwycięstwo, uznać partię za nierozstrzygniętą lub poczekać.</string>
<string name="makeYourOpponentResign">Wymuś rezygnację przeciwnika</string>
<string name="forceResignation">Ogłoś wygraną</string>
@ -385,7 +391,7 @@
<string name="apply">Zastosuj</string>
<string name="leaderboard">Najlepsi gracze</string>
<string name="pasteTheFenStringHere">Wklej tutaj pozycję w formacie FEN</string>
<string name="pasteThePgnStringHere">Poniżej wklej partię w formacie PGN</string>
<string name="pasteThePgnStringHere">Wklej poniżej przebieg partii w formacie PGN</string>
<string name="fromPosition">Z pozycji</string>
<string name="continueFromHere">Kontynuuj z tej pozycji</string>
<string name="toStudy">Opracowanie</string>
@ -875,7 +881,7 @@
<string name="error.unknown">Błąd</string>
<string name="custom">Niestandardowa</string>
<string name="notifications">Powiadomienia</string>
<string name="challenges">Wyzwania</string>
<string name="challenges">Zaproszenia</string>
<string name="perfRatingX">Ranking: %s</string>
<plurals name="nbSecondsToPlayTheFirstMove">
<item quantity="one">%s sekunda na wykonanie pierwszego ruchu</item>
@ -926,11 +932,11 @@
<string name="opening">Otwarcie</string>
<string name="middlegame">Gra środkowa</string>
<string name="endgame">Końcówka</string>
<string name="registerToSendChallenges">Zarejestruj się aby móc wysyłać wyzwania.</string>
<string name="youCannotChallengeX">Nie możesz wyzwać %s.</string>
<string name="xDoesNotAcceptChallenges">%s nie przyjmuje wyzwań.</string>
<string name="registerToSendChallenges">Zarejestruj, by zapraszać do gry.</string>
<string name="youCannotChallengeX">Nie możesz zaprosić %s.</string>
<string name="xDoesNotAcceptChallenges">%s nie przyjmuje zaproszeń.</string>
<string name="yourXRatingIsTooFarFromY">Zbyt duża różnica rankingów (%1$s) między tobą a %2$s.</string>
<string name="cannotChallengeDueToProvisionalXRating">Nie można rzucić wyzwania ze względu na tymczasowy ranking (%s).</string>
<string name="cannotChallengeDueToProvisionalXRating">Nie możesz zapraszać ze względu na swój tymczasowy ranking (%s).</string>
<string name="xOnlyAcceptsChallengesFromFriends">%s akceptuje tylko wyzwania od znajomych.</string>
<string name="conditionalPremoves">Ruchy warunkowe</string>
<string name="addCurrentVariation">Dodaj bieżący wariant</string>

View file

@ -31,6 +31,10 @@
<string name="joinTheGame">Entrar no jogo</string>
<string name="whitePlays">Brancas jogam</string>
<string name="blackPlays">Pretas jogam</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Seu oponente abandonou o jogo. Você pode reivindicar vitória em %s segundo.</item>
<item quantity="other">Seu oponente abandonou o jogo. Você pode reivindicar vitória em %s segundos.</item>
</plurals>
<string name="opponentLeftChoices">O outro jogador pode ter deixado a partida. Você pode proclamar vitória, declarar empate ou aguardar.</string>
<string name="makeYourOpponentResign">Declarar vitória</string>
<string name="forceResignation">Reivindicar vitória</string>

View file

@ -31,6 +31,12 @@
<string name="joinTheGame">Принять вызов</string>
<string name="whitePlays">Ход белых</string>
<string name="blackPlays">Ход чёрных</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Ваш соперник покинул игру. Вы можете объявить победу через %s секунду.</item>
<item quantity="few">Ваш соперник покинул игру. Вы можете объявить победу через %s секунды.</item>
<item quantity="many">Ваш соперник покинул игру. Вы можете объявить победу через %s секунд.</item>
<item quantity="other">Ваш соперник покинул игру. Вы можете объявить победу через %s секунд.</item>
</plurals>
<string name="opponentLeftChoices">Вероятно, ваш соперник покинул игру. Вы можете объявить победу или ничью, или ещё подождать.</string>
<string name="makeYourOpponentResign">Сопернику будет засчитано поражение</string>
<string name="forceResignation">Объявить победу</string>

View file

@ -31,6 +31,12 @@
<string name="joinTheGame">Pridruži se igri</string>
<string name="whitePlays">Beli na potezi</string>
<string name="blackPlays">Črni na potezi</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Vaš nasprotnik je zapustil igro. Čez %s sekundo lahko proglasite zmago.</item>
<item quantity="two">Vaš nasprotnik je zapustil igro. Čez %s sekundi lahko proglasite zmago.</item>
<item quantity="few">Vaš nasprotnik je zapustil igro. Čez %s sekunde lahko proglasite zmago.</item>
<item quantity="other">Vaš nasprotnik je zapustil igro. Čez %s sekund lahko proglasite zmago.</item>
</plurals>
<string name="opponentLeftChoices">Nasprotnik je zapustil igro. Vsili predajo ali počakaj nanj.</string>
<string name="makeYourOpponentResign">Prisili nasprotnika k predaji</string>
<string name="forceResignation">Prijavi zmago</string>

View file

@ -31,6 +31,10 @@
<string name="joinTheGame">Oyuna katıl</string>
<string name="whitePlays">Hamle Beyazda</string>
<string name="blackPlays">Hamle Siyahta</string>
<plurals name="opponentLeftCounter">
<item quantity="one">Rakibiniz oyundan ayrıldı. %s saniye sonra galibiyet talep edebilirsiniz.</item>
<item quantity="other">Rakibiniz oyundan ayrıldı. %s saniye sonra galibiyet talep edebilirsiniz.</item>
</plurals>
<string name="opponentLeftChoices">Rakibiniz oyundan düştü ya da masayı terk etti. İsterseniz dönmesini bekleyebilir, oyuna berabere diyebilir ya da galibiyetinizi talep edebilirsiniz.</string>
<string name="makeYourOpponentResign">Rakibiniz oyunu terk etsin</string>
<string name="forceResignation">Galibiyet talep et</string>
@ -344,6 +348,7 @@
<string name="pasteThePgnStringHere">PGN\'yi buraya yapıştırın</string>
<string name="fromPosition">Özel pozisyondan</string>
<string name="continueFromHere">Bu pozisyondan devam et</string>
<string name="toStudy">Çalışma oluştur</string>
<string name="importGame">Oyun yükle</string>
<string name="importGameExplanation">Bir oyun PGN\'si yapıştırdığınız zaman, göz atılabilir bir tekrar, bilgisayar analizi, oyun sohbeti ve paylaşılabilir bir URL sahibi olursunuz.</string>
<plurals name="nbImportedGames">
@ -622,6 +627,8 @@
<string name="playOfflineComputer">Bilgisayara Karşı</string>
<string name="opponent">Rakip</string>
<string name="learnMenu">Öğren</string>
<string name="studyMenu">Çalışmalar</string>
<string name="practice">Egzersizler</string>
<string name="community">Topluluk</string>
<string name="tools">Araçlar</string>
<string name="increment">Artış</string>
@ -656,6 +663,8 @@
<string name="tpTimeSpentOnTV">TV\'de izlenme süresi: %s</string>
<string name="watch">İzle</string>
<string name="videoLibrary">Video kütüphanesi</string>
<string name="streamersMenu">Canlı Yayınlar</string>
<string name="broadcastsMenu">FIDE Turnuvaları</string>
<string name="mobileApp">Mobil Uygulama</string>
<string name="webmasters">Site Yöneticileri</string>
<string name="about">Hakkında</string>

View file

@ -17,7 +17,19 @@
<string name="recentlyUpdated">Πρόσφατα ενημερωμένες</string>
<string name="mostPopular">Οι πιο δημοφιλείς</string>
<string name="addNewChapter">Προσθήκη νέου κεφαλαίου</string>
<plurals name="nbChapters">
<item quantity="one">%s [Κεφάλαιο] [Κεφάλαια]</item>
<item quantity="other">%s Κεφάλαια</item>
</plurals>
<plurals name="nbGames">
<item quantity="one">%s [Παρτίδα] [Παρτίδες]</item>
<item quantity="other">%s Παρτίδες</item>
</plurals>
<string name="addMembers">Προσθήκη μελών</string>
<plurals name="nbMembers">
<item quantity="one">%s [Μέλος] [Μέλη]</item>
<item quantity="other">%s Μέλη</item>
</plurals>
<string name="inviteToTheStudy">Προσκάλεσε στην σπουδή</string>
<string name="pleaseOnlyInvitePeopleYouKnow">Παρακαλώ, προσκαλέστε μόνο άτομα που γνωρίζετε και που θέλουν να συμμετέχουν ενεργά σε αυτήν την σπουδή.</string>
<string name="searchByUsername">Αναζήτηση με όνομα χρήστη</string>
@ -25,23 +37,87 @@
<string name="contributor">Συνεισφέρων</string>
<string name="kick">Διώξε</string>
<string name="leaveTheStudy">Αποχώρησε απο αυτήν την σπουδή</string>
<string name="youAreNowAContributor">Είστε πλέον συνδημιουργός</string>
<string name="youAreNowASpectator">Είστε πλέον θεατής</string>
<string name="pgnTags">PGN ετικέτες</string>
<string name="like">Μου αρέσει</string>
<string name="newTag">Νέα ετικέτα</string>
<string name="commentThisPosition">Σχολίασε την υπάρχουσα θέση</string>
<string name="commentThisMove">Σχολίασε αυτήν την κίνηση</string>
<string name="annotateWithGlyphs">Σχολιασμός με σύμβολα</string>
<string name="theChapterIsTooShortToBeAnalysed">Το κεφάλαιο είναι πολύ μικρό για να αναλυθεί.</string>
<string name="onlyContributorsCanRequestAnalysis">Μόνο αυτοί που συνεισφέρουν στην σπουδή μπορούν να ζητήσουν ανάλυση από υπολογιστή.</string>
<string name="makeSureTheChapterIsComplete">Σιγουρευτείτε ότι το κεφάλαιο είναι ολοκληρωμένο. Μπορείτε να ζητήσετε ανάλυση μόνο μια φορά.</string>
<string name="allSyncMembersRemainOnTheSamePosition">Όλα τα συγχρονισμένα μέλη παραμένουν στην ίδια θέση</string>
<string name="shareChanges">Διαμοιρασμός στους θεατές των αλλαγών και αποθήκευση τους στο σέρβερ</string>
<string name="first">Πρώτη</string>
<string name="previous">Προηγούμενη</string>
<string name="next">Επόμενη</string>
<string name="last">Τελευταία</string>
<string name="shareAndExport">Διαμοιρασμός &amp; εξαγωγή</string>
<string name="cloneStudy">Κλωνοποίησε</string>
<string name="studyPgn">PGN της σπουδής</string>
<string name="chapterPgn">PGN του κεφαλαίου</string>
<string name="studyUrl">URL μελέτης</string>
<string name="currentChapterUrl">Τρέχον κεφάλαιο URL</string>
<string name="youCanPasteThisInTheForumToEmbedTheChapter">Επικολλήστε το παρόν για ενσωμάτωση του κεφαλαίου στο φόρουμ</string>
<string name="embedThisChapter">Ενσωμάτωση κεφαλαίου σε ιστοσελίδα ή ιστολόγιο</string>
<string name="readMoreAboutEmbeddingAStudyChapter">Διαβάστε περισσότερα για την ενσωμάτωση κεφαλαίου μελέτης</string>
<string name="open">Άνοιξε</string>
<string name="studyNotFound">Η σπουδή δεν βρέθηκε</string>
<string name="editChapter">Επεξεργάσου το κεφάλαιο</string>
<string name="newChapter">Νέο κεφάλαιο</string>
<string name="orientation">Προσανατολισμός</string>
<string name="analysisMode">Τύπος ανάλυσης</string>
<string name="pinnedChapterComment">Καρφιτσωμένο σχόλιο κεφαλαίου</string>
<string name="saveChapter">Αποθήκευση κεφαλαίου</string>
<string name="clearAnnotations">Διαγραφή σχολιασμών</string>
<string name="deleteChapter">Διαγραφή κεφαλαίου</string>
<string name="deleteThisChapter">Διαγραφή κεφαλαίου; Μη αναιρέσιμη ενέργεια!</string>
<string name="clearAllCommentsInThisChapter">Καθαρισμός όλων των σχολίων, συμβόλων και σχεδίων στο τρέχον κεφάλαιο;</string>
<string name="rightUnderTheBoard">Κάτω από την σκακιέρα</string>
<string name="noPinnedComment">Καμία</string>
<string name="normalAnalysis">Απλή ανάλυση</string>
<string name="hideNextMoves">Απόκρυψη επόμενων κινήσεων</string>
<string name="interactiveLesson">Διαδραστικό μάθημα</string>
<string name="chapterX">Κεφάλαιο %s</string>
<string name="empty">Κενή</string>
<string name="startFromInitialPosition">Έναρξη από τρέχουσα θέση</string>
<string name="editor">Επεξεργαστής</string>
<string name="startFromCustomPosition">Έναρξη από τρέχουσα θέση</string>
<string name="loadAGameByUrl">Φόρτωση παρτίδας με URL</string>
<string name="loadAPositionFromFen">Φόρτωση θέσης από FEN</string>
<string name="loadAGameFromPgn">Φόρτωσε μια παρτίδα από PGN</string>
<string name="automatic">Αυτόματο</string>
<plurals name="pasteYourPgnTextHereUpToNbGames">
<item quantity="one">Επικόλληστε το PGN εδώ, μέχρι %s παρτίδες</item>
<item quantity="other">Επικολλήστε το PGN εδώ, μέχρι %s παρτίδες</item>
</plurals>
<string name="urlOfTheGame">URL παρτίδας</string>
<string name="loadAGameFromXOrY">Φόρτωση παρτίδας από %1$s ή %2$s</string>
<string name="createChapter">Δημιουργία κεφαλαίου</string>
<string name="configureLiveBroadcast">Ρύθμιση αναμετάδοσης</string>
<string name="createStudy">Δημιουργία μελέτης</string>
<string name="editStudy">Επεξεργασία μελέτης</string>
<string name="visibility">Ορατότητα</string>
<string name="public">Δημόσια</string>
<string name="unlisted">Ακαταχώρητη</string>
<string name="inviteOnly">Με πρόσκληση</string>
<string name="allowCloning">Επέτρεψε αντιγραφή</string>
<string name="nobody">Κανένας</string>
<string name="onlyMe">Μόνο εγώ</string>
<string name="contributors">Συνδημιουργοί</string>
<string name="members">Μέλη</string>
<string name="everyone">Οποιοσδήποτε</string>
<string name="enableSync">Ενεργ. συγχρονισμού</string>
<string name="yesKeepEveryoneOnTheSamePosition">Ναι: όλοι βλέπουν την ίδια θέση</string>
<string name="noLetPeopleBrowseFreely">Όχι: ελεύθερη επιλογή θέσης</string>
<string name="pinnedStudyComment">Καρφιτσωμένο σχόλιο μελέτης</string>
<string name="start">Δημιουργία</string>
<string name="save">Αποθήκευση</string>
<string name="clearChat">Εκκαθάριση συνομιλίας</string>
<string name="deleteTheStudyChatHistory">Διαγραφή συνομιλίας μελέτης; Μη αναιρέσιμη ενέργεια!</string>
<string name="deleteStudy">Διαγραφή μελέτης</string>
<string name="deleteTheEntireStudy">Διαγραφή ολόκληρης μελέτης; Μη αναιρέσιμη ενέργεια!</string>
<string name="whereDoYouWantToStudyThat">Που θέλετε να δημιουργήσω την μελέτη;</string>
</resources>

View file

@ -3,7 +3,7 @@
<resources>
<string name="private">Privado</string>
<string name="myStudies">Mis estudios</string>
<string name="studiesIContributeTo">Estudios en los que colaboro</string>
<string name="studiesIContributeTo">Estudios en los que contribuyo</string>
<string name="myPublicStudies">Mis estudios públicos</string>
<string name="myPrivateStudies">Mis estudios privados</string>
<string name="myFavoriteStudies">Mis estudios favoritos</string>

View file

@ -124,4 +124,5 @@
<string name="deleteTheStudyChatHistory">Çalışmanın sohbet geçmişi silinsin mi? Bunun geri dönüşü yok!</string>
<string name="deleteStudy">Çalışmayı sil</string>
<string name="deleteTheEntireStudy">Tüm çalışma silinsin mi? Bunun geri dönüşü yok!</string>
<string name="whereDoYouWantToStudyThat">Bu çalışmayı nerede sürdürmek istersiniz?</string>
</resources>

View file

@ -635,6 +635,18 @@ export default class RoundController {
if (this.opts.onChange) setTimeout(() => this.opts.onChange(this.data), 150);
};
private goneTick;
setGone = (gone: number | boolean) => {
game.setGone(this.data, this.data.opponent.color, gone);
clearTimeout(this.goneTick);
if (Number(gone) > 1)
this.goneTick = setTimeout(() => {
const g = Number(this.opponentGone());
if (g > 1) this.setGone(g - 1);
}, 1000);
this.redraw();
}
opponentGone = (): number | boolean => {
const d = this.data;
return d.opponent.gone !== false &&

View file

@ -124,14 +124,8 @@ export function make(send: SocketSend, ctrl: RoundController): RoundSocket {
berserk(color: Color) {
ctrl.setBerserk(color);
},
gone(isGone) {
game.setGone(d, d.opponent.color, isGone);
ctrl.redraw();
},
goneIn(seconds) {
game.setGone(d, d.opponent.color, seconds);
ctrl.redraw();
},
gone: ctrl.setGone,
goneIn: ctrl.setGone,
checkCount(e) {
d.player.checks = d.player.color == 'white' ? e.white : e.black;
d.opponent.checks = d.opponent.color == 'white' ? e.white : e.black;