Merge branch 'master' into autocomplete

autocomplete
Niklas Fiekas 2016-10-02 23:12:19 +02:00
commit bb370dcc6e
236 changed files with 1330 additions and 912 deletions

4
.gitmodules vendored
View File

@ -44,6 +44,10 @@
path = public/vendor/Sunsetter8
url = https://github.com/niklasf/Sunsetter8
branch = js
[submodule "public/vendor/stockfish.pexe"]
path = public/vendor/stockfish.pexe
url = https://github.com/niklasf/stockfish.pexe
branch = ddugovic
[submodule "public/vendor/jquery-textcomplete"]
path = public/vendor/jquery-textcomplete
url = https://github.com/yuku-t/jquery-textcomplete

View File

@ -1,3 +1,4 @@
sudo: false
language: scala
# https://docs.travis-ci.com/user/notifications/#IRC-notification

View File

@ -48,7 +48,10 @@ drop us an email at contact@lichess.org and we'll discuss it.
### API Limits
To respect the API servers and avoid an IP ban, please wait 1 second between requests. If you receive an HTTP response with a [429 status](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#429), please wait a full minute before resuming API usage.
To respect the API servers and avoid an IP ban, please wait 1 second between requests.
If you receive an HTTP response with a [429 status](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#429), please wait a full minute before resuming API usage.
Please do not automate computer analysis requests. They're very expensive.
### `GET /api/user/<username>` fetch one user

View File

@ -13,7 +13,6 @@ final class Env(
val CliUsername = config getString "cli.username"
private val RendererName = config getString "app.renderer.name"
private val WebPath = config getString "app.web_path"
lazy val bus = lila.common.Bus(system)

View File

@ -5,6 +5,7 @@ import play.api.mvc._, Results._
import lila.api.Context
import lila.app._
import lila.common.LilaCookie
import lila.common.PimpedJson._
import lila.security.Permission
import lila.user.{ User => UserModel, UserRepo }
import views._
@ -51,8 +52,10 @@ object Account extends LilaController {
"nowPlaying" -> JsArray(povs take 20 map Env.api.lobbyApi.nowPlaying),
"nbFollowing" -> nbFollowing,
"nbFollowers" -> nbFollowers,
"kid" -> me.kid,
"nbChallenges" -> nbChallenges)
"kid" -> me.kid.option(true),
"troll" -> me.troll.option(true),
"nbChallenges" -> nbChallenges
).noNull
}
}
}

View File

@ -1,40 +1,32 @@
package controllers
import scala.util.{ Success, Failure }
import scala.concurrent.duration._
import akka.pattern.ask
import play.api.http.ContentTypes
import play.api.mvc._
import play.twirl.api.Html
import lila.api.Context
import lila.app._
import lila.common.HTTPRequest
import lila.evaluation.PlayerAssessments
import lila.game.{ Pov, Game => GameModel, GameRepo, PgnDump }
import lila.hub.actorApi.map.Tell
import lila.game.{ Pov, GameRepo }
import views._
import chess.Color
object Analyse extends LilaController {
private def env = Env.analyse
private def bookmarkApi = Env.bookmark.api
private val divider = Env.game.divider
def requestAnalysis(id: String) = Auth { implicit ctx =>
me =>
OptionFuResult(GameRepo game id) { game =>
Env.fishnet.analyser(game, lila.fishnet.Work.Sender(
userId = me.id.some,
ip = HTTPRequest.lastRemoteAddress(ctx.req).some,
mod = isGranted(_.Hunter),
system = false)) map {
case true => Ok
case false => Unauthorized
}
def requestAnalysis(id: String) = Auth { implicit ctx => me =>
OptionFuResult(GameRepo game id) { game =>
Env.fishnet.analyser(game, lila.fishnet.Work.Sender(
userId = me.id.some,
ip = HTTPRequest.lastRemoteAddress(ctx.req).some,
mod = isGranted(_.Hunter),
system = false)) map {
case true => Ok
case false => Unauthorized
}
}
}
def replay(pov: Pov, userTv: Option[lila.user.User])(implicit ctx: Context) =
@ -56,19 +48,19 @@ object Analyse extends LilaController {
withMoveTimes = true,
withDivision = true,
withOpening = true) map { data =>
Ok(html.analyse.replay(
pov,
data,
initialFen,
Env.analyse.annotator(pgn, analysis, pov.game.opening, pov.game.winnerColor, pov.game.status, pov.game.clock).toString,
analysis,
analysisInProgress,
simul,
crosstable,
userTv,
chat,
bookmarked = bookmarked))
}
Ok(html.analyse.replay(
pov,
data,
initialFen,
Env.analyse.annotator(pgn, analysis, pov.game.opening, pov.game.winnerColor, pov.game.status, pov.game.clock).toString,
analysis,
analysisInProgress,
simul,
crosstable,
userTv,
chat,
bookmarked = bookmarked))
}
}
}
}

View File

@ -67,7 +67,7 @@ object Lobby extends LilaController {
private val cache = lila.memo.AsyncCache[RequestKey, Html](
f = renderRequestKey,
timeToLive = 500 millis)
timeToLive = 1 second)
private def renderCtx(implicit ctx: Context): Fu[Html] = Env.current.preloader(
posts = Env.forum.recent(ctx.me, Env.team.cached.teamIds),

View File

@ -102,15 +102,18 @@ object Main extends LilaController {
} inject Ok
}
def glyphs = Action { req =>
private lazy val glyphsResult: Result = {
import chess.format.pgn.Glyph
import lila.socket.tree.Node.glyphWriter
Ok(Json.obj(
"move" -> Glyph.MoveAssessment.all,
"position" -> Glyph.PositionAssessment.all,
"observation" -> Glyph.Observation.all
"move" -> Glyph.MoveAssessment.display,
"position" -> Glyph.PositionAssessment.display,
"observation" -> Glyph.Observation.display
)) as JSON
}
def glyphs = Action { req =>
glyphsResult
}
def image(id: String, hash: String, name: String) = Action.async { req =>
Env.db.image.fetch(id) map {
@ -124,6 +127,15 @@ object Main extends LilaController {
}
}
val robots = Action { _ =>
Ok {
if (Env.api.Net.Crawlable)
"User-agent: *\nAllow: /\nDisallow: /game/export"
else
"User-agent: *\nDisallow: /"
}
}
def notFound(req: RequestHeader): Fu[Result] =
reqToCtx(req) map { implicit ctx =>
lila.mon.http.response.code404()

View File

@ -46,6 +46,7 @@ object Environment
def netDomain = apiEnv.Net.Domain
def netBaseUrl = apiEnv.Net.BaseUrl
val isGloballyCrawlable = apiEnv.Net.Crawlable
def isProd = apiEnv.isProd

View File

@ -6,7 +6,7 @@ side: Option[Html] = None,
menu: Option[Html] = None,
chat: Option[Html] = None,
underchat: Option[Html] = None,
robots: Boolean = true,
robots: Boolean = isGloballyCrawlable,
moreCss: Html = Html(""),
moreJs: Html = Html(""),
zen: Boolean = false,
@ -149,7 +149,7 @@ withGtm: Boolean = false)(body: Html)(implicit ctx: Context)
<a class="fright link text data-count" href="@routes.Report.list" data-count="@reportNbUnprocessed" data-icon="@icon.mod"></a>
}
}
<a id="reconnecting" class="fright link" onclick="location.reload();" data-icon="B">&nbsp;@trans.reconnecting()</a>
<a id="reconnecting" class="fright link" onclick="window.location.reload()" data-icon="B">&nbsp;@trans.reconnecting()</a>
</div>
<div id="fpmenu">@fpmenu()</div>
<div class="content @ctx.is3d.fold("is3d", "is2d")">

View File

@ -10,12 +10,6 @@ cd gfc-semver
sbt publish-local
cd ..
git clone https://github.com/ornicar/ReactiveMongo --branch lichess
cd ReactiveMongo
git checkout b3e895f1c723d7cb518763f31fba62dc74311eab
sbt publish-local
cd ..
git clone https://github.com/ornicar/scalalib
cd scalalib
sbt publish-local

View File

@ -0,0 +1,45 @@
var puzzles = db.puzzle;
var count = 0;
function depthOf(obj) {
var level = 1;
var key;
for (key in obj) {
if (!obj.hasOwnProperty(key)) continue;
if (typeof obj[key] === 'object') {
var depth = depthOf(obj[key]) + 1;
level = Math.max(depth, level);
}
}
return level;
}
puzzles.find({
"mate": true,
"_id": {
"$gt": 60120
},
'vote.sum': {
'$gt': -8000
}
}).forEach(function(p) {
var depth = depthOf(p);
if (depth % 2 === 1) {
count++;
puzzles.update({
_id: p._id
}, {
$set: {
vote: {
up: NumberInt(0),
down: NumberInt(9000),
sum: NumberInt(-9000)
}
}
});
print(p._id);
}
});
print("Disabled " + count + " puzzles");

View File

@ -0,0 +1,21 @@
var puzzles = db.puzzle;
var count = 0;
puzzles.find().forEach(function(p) {
var parts = p.fen.split(/\s/);
var pieceCount = parts[0].split(/[nbrqkp]/i).length - 1;
if (pieceCount < 9 && p.vote.sum < 50 && p.vote.sum > -1000) {
count++;
puzzles.update({
_id: p._id
}, {
$set: {
vote: {
up: NumberInt(0),
down: NumberInt(0),
sum: NumberInt(-9000)
}
}
});
}
});
print("Disabled " + count + " puzzles");

View File

@ -0,0 +1,10 @@
var coll = db.puzzle;
coll.find({_id:{$lt:60120},'vote.sum':{$gte:100}}).sort({_id:1}).forEach(function(p) {
if (coll.count({fen:p.fen}) == 1) {
var nextId = coll.find({},{_id:1}).sort({_id:-1}).limit(1)[0]._id + 1;
p.salvaged = NumberInt(p._id);
p._id = NumberInt(nextId);
print(p.salvaged + ' -> ' + p._id);
coll.insert(p);
}
});

View File

@ -33,7 +33,9 @@ if [ $mode = "main" ]; then
$CLI deploy pre
fi
bin/dev ";stage;exit"
SBT_OPTS=""
export JAVA_OPTS="-Xms1024M -Xmx1024M -XX:ReservedCodeCacheSize=64m -XX:+UseConcMarkSweepGC"
sbt ";stage;exit"
if [ $? != 0 ]; then
lilalog "Deploy canceled"
exit 1

View File

@ -10,9 +10,10 @@ net {
ip = "5.196.91.160"
asset {
domain = ${net.domain}
version = 1126
version = 1141
}
email = "contact@lichess.org"
crawlable = false
}
forcedev = false
play {
@ -217,6 +218,7 @@ bookmark {
}
analyse {
collection.analysis = analysis2
collection.requester = analysis_requester
net.domain = ${net.domain}
cached.nb.ttl = ${game.cached.nb.ttl}
paginator.max_per_page = ${game.paginator.max_per_page}

View File

@ -26,6 +26,13 @@
<!-- </appender> -->
<!-- </logger> -->
<logger name="reactivemongo" level="DEBUG">
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${application.home}/logs/reactivemongo.log</file>
<encoder><pattern>%date [%level] %message%n%xException</pattern></encoder>
</appender>
</logger>
<logger name="lobby" level="DEBUG">
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${application.home}/logs/lobby.log</file>

View File

@ -492,3 +492,5 @@ POST /jslog/$id<\w{12}> controllers.Main.jslog(id)
# Assets
GET /glyphs controllers.Main.glyphs
GET /assets/*file controllers.Assets.at(path="/public", file)
GET /robots.txt controllers.Main.robots

View File

@ -3,12 +3,14 @@ package lila.analyse
import akka.actor.ActorSelection
import chess.format.FEN
import lila.db.dsl._
import lila.game.actorApi.InsertGame
import lila.game.{ Game, GameRepo }
import lila.hub.actorApi.map.Tell
final class Analyser(
indexer: ActorSelection,
requesterApi: RequesterApi,
roundSocket: ActorSelection,
bus: lila.common.Bus) {
@ -21,6 +23,7 @@ final class Analyser(
sendAnalysisProgress(analysis) >>- {
bus.publish(actorApi.AnalysisReady(game, analysis), 'analysisReady)
indexer ! InsertGame(game)
requesterApi save analysis
}
}
}

View File

@ -17,15 +17,19 @@ final class Env(
indexer: ActorSelection) {
private val CollectionAnalysis = config getString "collection.analysis"
private val CollectionRequester = config getString "collection.requester"
private val NetDomain = config getString "net.domain"
private val CachedNbTtl = config duration "cached.nb.ttl"
private val PaginatorMaxPerPage = config getInt "paginator.max_per_page"
private val ActorName = config getString "actor.name"
private[analyse] lazy val analysisColl = db(CollectionAnalysis)
lazy val analysisColl = db(CollectionAnalysis)
lazy val requesterApi = new RequesterApi(db(CollectionRequester))
lazy val analyser = new Analyser(
indexer = indexer,
requesterApi = requesterApi,
roundSocket = roundSocket,
bus = system.lilaBus)

View File

@ -0,0 +1,24 @@
package lila.analyse
import org.joda.time._
import lila.db.dsl._
import lila.user.User
final class RequesterApi(coll: Coll) {
private val formatter = format.DateTimeFormat.forPattern("YYYY-MM-dd")
private def today = formatter.print(DateTime.now)
def save(analysis: Analysis): Funit = coll.update(
$id(analysis.uid | "anonymous"),
$inc("total" -> 1) ++
$inc(today -> 1) ++
$set("last" -> analysis.id),
upsert = true
).void
def countToday(userId: User.ID): Fu[Int] =
coll.primitiveOne[Int]($id(userId), today) map (~_)
}

View File

@ -44,6 +44,7 @@ final class Env(
val AssetDomain = config getString "net.asset.domain"
val AssetVersion = config getInt "net.asset.version"
val Email = config getString "net.email"
val Crawlable = config getBoolean "net.crawlable"
}
val PrismicApiUrl = config getString "prismic.api_url"
val EditorAnimationDuration = config duration "editor.animation.duration"

View File

@ -29,9 +29,9 @@ final class BookmarkApi(
user ?? { u =>
val candidateIds = games.filter(_.bookmarks > 0).map(_.id)
if (candidateIds.isEmpty) fuccess(Set.empty)
else coll.distinct("g", Some(
else coll.distinct[String, Set]("g", Some(
userIdQuery(u.id) ++ $doc("g" $in candidateIds)
)) map lila.db.BSON.asStringSet
))
}
def removeByGameId(gameId: String): Funit =

View File

@ -53,7 +53,7 @@ private final class ChallengeRepo(coll: Coll, maxPerUser: Int) {
)).cursor[Challenge]().gather[List](max)
private[challenge] def expired(max: Int): Fu[List[Challenge]] =
coll.find($doc("expiresAt" -> $doc("$lt" -> DateTime.now))).list[Challenge](max)
coll.find($doc("expiresAt" -> $lt(DateTime.now))).list[Challenge](max)
def setSeenAgain(id: Challenge.ID) = coll.update(
$id(id),

@ -1 +1 @@
Subproject commit 8c4592ad012f2f4e1e2631ea2db64f6cde9698a3
Subproject commit 645fad395ee538ed54a474aadf138c9f2df1be03

View File

@ -196,23 +196,6 @@ object BSON extends Handlers {
def debugDoc(doc: Bdoc): String = (doc.elements.toList map {
case (k, v) => s"$k: ${debug(v)}"
}).mkString("{", ", ", "}")
def hashDoc(doc: Bdoc): String = debugDoc(doc).replace(" ", "")
def asStrings(vs: List[BSONValue]): List[String] = {
val b = new scala.collection.mutable.ListBuffer[String]
vs foreach {
case BSONString(s) => b += s
case _ =>
}
b.toList
}
def asStringSet(vs: List[BSONValue]): Set[String] = {
val b = Set.newBuilder[String]
vs foreach {
case BSONString(s) => b += s
case _ =>
}
b.result
}
}

View File

@ -34,10 +34,13 @@ trait CollExt { self: dsl with QueryBuilderExt =>
def exists(selector: Bdoc): Fu[Boolean] = countSel(selector).map(0!=)
def byOrderedIds[D: BSONDocumentReader](ids: Iterable[String], readPreference: ReadPreference = ReadPreference.primary)(docId: D => String): Fu[List[D]] =
coll.find($inIds(ids)).cursor[D](readPreference = readPreference).collect[List]() map { docs =>
val docsMap = docs.map(u => docId(u) -> u).toMap
ids.flatMap(docsMap.get).toList
}
coll.find($inIds(ids)).cursor[D](readPreference = readPreference).
collect[List](Int.MaxValue, err = Cursor.FailOnError[List[D]]()).
map { docs =>
val docsMap = docs.map(u => docId(u) -> u).toMap
ids.flatMap(docsMap.get).toList
}
// def byOrderedIds[A <: Identified[String]: TubeInColl](ids: Iterable[String]): Fu[List[A]] =
// byOrderedIds[String, A](ids)

View File

@ -7,11 +7,11 @@ import reactivemongo.bson._
trait CursorExt { self: dsl =>
// Can be refactor as CursorProducer
final implicit class ExtendCursor[A: BSONDocumentReader](val c: Cursor[A]) {
// like collect, but with stopOnError defaulting to false
def gather[M[_]](upTo: Int = Int.MaxValue)(implicit cbf: CanBuildFrom[M[_], A, M[A]]): Fu[M[A]] =
c.collect[M](upTo, stopOnError = false)
def gather[M[_]](upTo: Int = Int.MaxValue)(implicit cbf: CanBuildFrom[M[_], A, M[A]]): Fu[M[A]] = c.collect[M](upTo, Cursor.ContOnError[M[A]]())
def list(limit: Option[Int]): Fu[List[A]] = gather[List](limit | Int.MaxValue)
@ -20,7 +20,7 @@ trait CursorExt { self: dsl =>
def list(): Fu[List[A]] = list(none)
// like headOption, but with stopOnError defaulting to false
def uno: Fu[Option[A]] =
c.collect[Iterable](1, stopOnError = false).map(_.headOption)
def uno: Fu[Option[A]] = c.collect[Iterable](
1, Cursor.ContOnError[Iterable[A]]()).map(_.headOption)
}
}

View File

@ -1,48 +1,64 @@
package lila.db
import com.typesafe.config.Config
import reactivemongo.api._
import dsl.Coll
import reactivemongo.api.{ DefaultDB, MongoConnection, MongoDriver }
import scala.concurrent.duration._
import scala.concurrent.Future
import scala.util.{ Success, Failure }
import dsl._
import scala.concurrent.{ Await, ExecutionContext, Future }
import scala.util.{ Failure, Success, Try }
final class Env(
name: String,
config: Config,
lifecycle: play.api.inject.ApplicationLifecycle) {
lazy val db = {
val parsedUri: MongoConnection.ParsedURI =
MongoConnection.parseURI(config.getString("uri")) match {
case Success(parsedURI) => parsedURI
case Failure(e) => sys error s"Invalid mongodb.uri"
}
lazy val (connection, dbName) = {
val driver = new MongoDriver(Some(config))
val connection = driver.connection(parsedUri)
parsedUri.db.fold[DefaultDB](sys error s"cannot resolve database from URI: $parsedUri") { dbUri =>
val db = DB(dbUri, connection)
registerDriverShutdownHook(driver)
logger.info(s"""ReactiveMongoApi successfully started with DB '$dbUri'! Servers: ${parsedUri.hosts.map { s => s"[${s._1}:${s._2}]" }.mkString("\n\t\t")}""")
db
}
registerDriverShutdownHook(driver)
(for {
parsedUri <- MongoConnection.parseURI(config getString "uri")
con <- driver.connection(parsedUri, true)
db <- parsedUri.db match {
case Some(name) => Success(name)
case _ => Failure[String](new IllegalArgumentException(
s"cannot resolve connection from URI: $parsedUri"))
}
} yield con -> db).get
}
def apply(name: String): Coll = db(name)
private lazy val lnm = s"${connection.supervisor}/${connection.name}"
@inline private def resolveDB(ec: ExecutionContext) =
connection.database(dbName)(ec).andThen {
case _ => /*logger.debug*/ println(s"[$lnm] MongoDB resolved: $dbName")
}
def db(implicit ec: ExecutionContext): DefaultDB =
Await.result(resolveDB(ec), 10.seconds)
def apply(name: String)(implicit ec: ExecutionContext): Coll =
db(ec).apply(name)
object image {
private lazy val imageColl = apply(config getString "image.collection")
import dsl._
import DbImage.DbImageBSONHandler
def fetch(id: String): Fu[Option[DbImage]] = imageColl.byId[DbImage](id)
}
private def registerDriverShutdownHook(mongoDriver: MongoDriver): Unit =
lifecycle.addStopHook { () => Future(mongoDriver.close()) }
lifecycle.addStopHook { () =>
logger.info(s"[$lnm] Stopping the MongoDriver...")
Future(mongoDriver.close())
}
}
object Env {
lazy val current = "db" boot new Env(
name = "main",
config = lila.common.PlayApp loadConfig "mongodb",
lifecycle = lila.common.PlayApp.lifecycle)
}

View File

@ -16,7 +16,7 @@ trait QueryBuilderExt { self: dsl =>
// like collect, but with stopOnError defaulting to false
def gather[A, M[_]](upTo: Int = Int.MaxValue)(implicit cbf: CanBuildFrom[M[_], A, M[A]], reader: BSONDocumentReader[A]): Fu[M[A]] =
b.cursor[A]().collect[M](upTo, stopOnError = false)
b.cursor[A]().collect[M](upTo, Cursor.ContOnError[M[A]]())
def list[A: BSONDocumentReader](limit: Option[Int]): Fu[List[A]] = gather[A, List](limit | Int.MaxValue)
@ -27,10 +27,9 @@ trait QueryBuilderExt { self: dsl =>
// like one, but with stopOnError defaulting to false
def uno[A: BSONDocumentReader]: Fu[Option[A]] = uno[A](ReadPreference.primary)
def uno[A: BSONDocumentReader](readPreference: ReadPreference): Fu[Option[A]] =
b.copy(options = b.options.batchSize(1))
.cursor[A](readPreference = readPreference)
.collect[Iterable](1, stopOnError = false)
.map(_.headOption)
def uno[A: BSONDocumentReader](readPreference: ReadPreference): Fu[Option[A]] = b.copy(options = b.options.batchSize(1))
.cursor[A](readPreference = readPreference)
.collect[Iterable](1, Cursor.ContOnError[Iterable[A]]())
.map(_.headOption)
}
}

View File

@ -55,10 +55,11 @@ case class Assessible(analysed: Analysed) {
// SF1 SF2 BLR1 BLR2 MTs1 MTs2 Holds
case PlayerFlags(T, T, T, T, T, T, T) => Cheating // all T, obvious cheat
case PlayerFlags(T, _, T, _, _, T, _) => Cheating // high accuracy, high blurs, no fast moves
case PlayerFlags(T, _, _, T, _, _, _) => Cheating // high accuracy, moderate blurs
case PlayerFlags(_, _, _, T, T, _, _) => LikelyCheating // high accuracy, moderate blurs => 93% chance cheating
case PlayerFlags(T, _, _, _, _, _, T) => LikelyCheating // Holds are bad, hmk?
case PlayerFlags(_, T, _, _, _, _, T) => LikelyCheating // Holds are bad, hmk?
case PlayerFlags(T, _, _, T, _, T, _) => LikelyCheating // high accuracy, moderate blurs, no fast moves
case PlayerFlags(_, T, _, T, T, _, _) => LikelyCheating // always has advantage, moderate blurs, highly consistent move times
case PlayerFlags(_, T, T, _, _, _, _) => LikelyCheating // always has advantage, high blurs

View File

@ -9,6 +9,7 @@ import lila.common.PimpedConfig._
final class Env(
config: Config,
uciMemo: lila.game.UciMemo,
requesterApi: lila.analyse.RequesterApi,
hub: lila.hub.Env,
db: lila.db.Env,
system: ActorSystem,
@ -48,11 +49,11 @@ final class Env(
monitor = monitor,
sink = sink,
socketExists = id => {
import lila.hub.actorApi.map.Exists
import akka.pattern.ask
import makeTimeout.short
hub.socket.round ? Exists(id) mapTo manifest[Boolean]
},
import lila.hub.actorApi.map.Exists
import akka.pattern.ask
import makeTimeout.short
hub.socket.round ? Exists(id) mapTo manifest[Boolean]
},
offlineMode = OfflineMode,
analysisNodes = AnalysisNodes)(system)
@ -61,11 +62,15 @@ final class Env(
uciMemo = uciMemo,
maxPlies = MovePlies)
private val limiter = new Limiter(
analysisColl = analysisColl,
requesterApi = requesterApi)
val analyser = new Analyser(
repo = repo,
uciMemo = uciMemo,
sequencer = sequencer,
limiter = new Limiter(analysisColl))
limiter = limiter)
val aiPerfApi = new AiPerfApi
@ -110,6 +115,7 @@ object Env {
lazy val current: Env = "fishnet" boot new Env(
system = lila.common.PlayApp.system,
uciMemo = lila.game.Env.current.uciMemo,
requesterApi = lila.analyse.Env.current.requesterApi,
hub = lila.hub.Env.current,
db = lila.db.Env.current,
config = lila.common.PlayApp loadConfig "fishnet",

View File

@ -1,12 +1,27 @@
package lila.fishnet
import scala.concurrent.duration._
import reactivemongo.bson._
import lila.db.dsl.Coll
private final class Limiter(analysisColl: Coll) {
private final class Limiter(
analysisColl: Coll,
requesterApi: lila.analyse.RequesterApi) {
def apply(sender: Work.Sender): Fu[Boolean] = sender match {
def apply(sender: Work.Sender): Fu[Boolean] =
concurrentCheck(sender) flatMap {
case false => fuccess(false)
case true => perDayCheck(sender)
}
private val RequestLimitPerIP = new lila.memo.RateLimit(
credits = 50,
duration = 20 hours,
name = "request analysis per IP",
key = "request_analysis.ip")
private def concurrentCheck(sender: Work.Sender) = sender match {
case Work.Sender(_, _, mod, system) if (mod || system) => fuccess(true)
case Work.Sender(Some(userId), _, _, _) => analysisColl.count(BSONDocument(
"sender.userId" -> userId
@ -16,4 +31,13 @@ private final class Limiter(analysisColl: Coll) {
).some) map (0 ==)
case _ => fuccess(false)
}
private def perDayCheck(sender: Work.Sender) = sender match {
case Work.Sender(_, _, mod, system) if (mod || system) => fuccess(true)
case Work.Sender(Some(userId), _, _, _) => requesterApi.countToday(userId) map (_ < 25)
case Work.Sender(_, Some(ip), _, _) => fuccess {
RequestLimitPerIP(ip, cost = 1)(true)
}
case _ => fuccess(false)
}
}

View File

@ -14,7 +14,7 @@ private final class Monitor(
private case class AnalysisMeta(time: Int, nodes: Int, nps: Int, depth: Int, pvSize: Int)
private def sumOf[A](ints: List[A])(f: A => Option[Int]) = ints.foldLeft(0) {
private def sumOf[A](items: List[A])(f: A => Option[Int]) = items.foldLeft(0) {
case (acc, a) => acc + f(a).getOrElse(0)
}

View File

@ -70,10 +70,10 @@ sealed abstract class PostRepo(troll: Boolean) {
def sortQuery = $sort.createdAsc
def userIdsByTopicId(topicId: String): Fu[List[String]] =
coll.distinct("userId", $doc("topicId" -> topicId).some) map lila.db.BSON.asStrings
coll.distinct[String, List]("userId", $doc("topicId" -> topicId).some)
def idsByTopicId(topicId: String): Fu[List[String]] =
coll.distinct("_id", $doc("topicId" -> topicId).some) map lila.db.BSON.asStrings
coll.distinct[String, List]("_id", $doc("topicId" -> topicId).some)
import reactivemongo.api.ReadPreference
def cursor(

View File

@ -1,5 +1,7 @@
package lila.forumSearch
import reactivemongo.api.Cursor
import lila.forum.actorApi._
import lila.forum.{ Post, PostView, PostLiteView, PostApi, PostRepo }
import lila.search._
@ -37,14 +39,15 @@ final class ForumSearchApi(
case c: ESClientHttp => c.putMapping >> {
lila.log("forumSearch").info(s"Index to ${c.index.name}")
import lila.db.dsl._
import play.api.libs.iteratee._
PostRepo.cursor($empty).enumerateBulks(Int.MaxValue) |>>>
Iteratee.foldM[Iterator[Post], Unit](()) {
case (_, posts) => (postApi liteViews posts.toList) flatMap { views =>
c.storeBulk(views map (v => Id(v.post.id) -> toDoc(v)))
}
}
PostRepo.cursor($empty).foldBulksM({}) { (_, posts) =>
for {
views <- postApi liteViews posts.toList
_ <- c.storeBulk(views map (v => Id(v.post.id) -> toDoc(v)))
} yield Cursor.Cont({})
}
}
case _ => funit
}
}

View File

@ -168,7 +168,7 @@ object BinaryFormat {
lastMove = for {
from posAt((b1 & 15) >> 1, ((b1 & 1) << 2) + (b2 >> 6))
to posAt((b2 & 63) >> 3, b2 & 7)
if from != to
if from != Pos.A1 || to != Pos.A1
} yield from -> to,
lastMoveTime = readInt24(b3, b4, b5).some filter (0 !=),
check = b6 flatMap { x => posAt(x >> 3, x & 7) })

View File

@ -191,9 +191,9 @@ object GameRepo {
coll.exists($id(id) ++ Query.analysed(true))
def filterAnalysed(ids: Seq[String]): Fu[Set[String]] =
coll.distinct("_id", ($inIds(ids) ++ $doc(
coll.distinct[String, Set]("_id", ($inIds(ids) ++ $doc(
F.analysed -> true
)).some) map lila.db.BSON.asStringSet
)).some)
def exists(id: String) = coll.exists($id(id))
@ -247,11 +247,19 @@ object GameRepo {
.uno[Game]
def findRandomFinished(distribution: Int): Fu[Option[Game]] = coll.find(
Query.finished ++ Query.variantStandard ++ Query.turnsMoreThan(10) ++ Query.rated
Query.finished ++ Query.variantStandard ++ Query.turnsMoreThan(20) ++ Query.rated
).sort(Query.sortCreated)
.skip(Random nextInt distribution)
.uno[Game]
def randomFinished(distribution: Int): Fu[Option[Game]] = coll.find(
Query.finished ++ Query.rated ++
Query.variantStandard ++ Query.bothRatingsGreaterThan(1600)
).sort(Query.sortCreated)
.skip(Random nextInt distribution)
.cursor[Game](ReadPreference.secondary)
.uno
def insertDenormalized(g: Game, ratedCheck: Boolean = true, initialFen: Option[chess.format.FEN] = None): Funit = {
val g2 = if (ratedCheck && g.rated && g.userIds.distinct.size != 2)
g.copy(mode = chess.Mode.Casual)
@ -352,7 +360,7 @@ object GameRepo {
Match($doc(F.playerUids -> $doc("$ne" -> userId))),
GroupField(F.playerUids)("gs" -> SumValue(1)),
Sort(Descending("gs")),
Limit(limit))).map(_.documents.flatMap { obj =>
Limit(limit))).map(_.firstBatch.flatMap { obj =>
obj.getAs[String]("_id") flatMap { id =>
obj.getAs[Int]("gs") map { id -> _ }
}
@ -430,7 +438,7 @@ object GameRepo {
)),
GroupField(F.playerUids)("nb" -> SumValue(1)),
Sort(Descending("nb")),
Limit(max))).map(_.documents.flatMap { obj =>
Limit(max))).map(_.firstBatch.flatMap { obj =>
obj.getAs[Int]("nb") map { nb =>
UidNb(~obj.getAs[String]("_id"), nb)
}

View File

@ -15,7 +15,7 @@ final class PlayTime(gameColl: Coll) {
def apply(user: User): Fu[User.PlayTime] = user.playTime match {
case Some(pt) => fuccess(pt)
case None => {
case _ => {
gameColl
.find($doc(
Game.BSONFields.playerUids -> user.id,
@ -25,15 +25,13 @@ final class PlayTime(gameColl: Coll) {
moveTimeField -> true,
tvField -> true
))
.cursor[Bdoc]()
.enumerate() |>>> (Iteratee.fold(User.PlayTime(0, 0)) {
case (pt, doc) =>
val t = doc.getAs[ByteArray](moveTimeField) ?? { times =>
BinaryFormat.moveTime.read(times).sum
} / 10
val isTv = doc.get(tvField).isDefined
User.PlayTime(pt.total + t, pt.tv + isTv.fold(t, 0))
})
.cursor[Bdoc]().fold(User.PlayTime(0, 0)) { (pt, doc) =>
val t = doc.getAs[ByteArray](moveTimeField) ?? { times =>
BinaryFormat.moveTime.read(times).sum
} / 10
val isTv = doc.get(tvField).isDefined
User.PlayTime(pt.total + t, pt.tv + isTv.fold(t, 0))
}
}.addEffect { UserRepo.setPlayTime(user, _) }
}
}

View File

@ -2,6 +2,7 @@ package lila.hub
package actorApi
import lila.common.LightUser
import org.joda.time.DateTime
import play.api.libs.json._
import play.twirl.api.Html
@ -199,5 +200,5 @@ case class UnBlock(u1: String, u2: String)
}
package plan {
case class ChargeEvent(username: String, amount: Int, percent: Int)
case class ChargeEvent(username: String, amount: Int, percent: Int, date: DateTime)
}

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s Checkmates
nbBookmarks=%s Bookmarks
nbPopularGames=%s Popular games
nbAnalysedGames=%s Analysed games
bookmarkedByNbPlayers=Bookmarked by %s players
viewInFullSize=View in full size
logOut=Sign out
signIn=Sign in

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Sien %s skaakmat spelle
nbBookmarks=%s Bookmerke
nbPopularGames=%s Gewilde spelle
nbAnalysedGames=%s Spelle ontleed
bookmarkedByNbPlayers=Deur %s spelers geboekmerk
viewInFullSize=Sien vol-grootte
logOut=Teken uit
signIn=Teken in

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s لعبة منتهية بكش مات
nbBookmarks=%s اللعبات المفضلة
nbPopularGames=%s مباريات رائجة
nbAnalysedGames=%s مباريات محللة بالحاسب
bookmarkedByNbPlayers=فضلها %s لاعب
viewInFullSize=عرض بالحجم الكامل
logOut=خروج
signIn=دخول

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s mat edilmiş oyunlar
nbBookmarks=%s nişan edilmiş oyun
nbPopularGames=%s populyar oyunlar
nbAnalysedGames=%s təhlil olunmuş oyun
bookmarkedByNbPlayers=%s oyunçu tərəfindən nişanlanıb
viewInFullSize=Tam görünüşlə bax
logOut=Xətdən çıx
signIn=Xəttə bağlan

View File

@ -59,7 +59,6 @@ viewNbCheckmates=Глядзець %s маты
nbBookmarks=%s Закладкі
nbPopularGames=%s Папулярныя гульні
nbAnalysedGames=%s Прааналізаваных гульняў
bookmarkedByNbPlayers=Дададзена ў закладкі %s гульцамі
viewInFullSize=Глядзець у поўным памеры
logOut=Выйсьці
signIn=Увайсьці

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Виж %s шах мата
nbBookmarks=%s Отбелязани
nbPopularGames=%s Известни игри
nbAnalysedGames=%s Проучени игри
bookmarkedByNbPlayers=Отбелязана от %s играчи
viewInFullSize=Гледай на пълен екран
logOut=Излез
signIn=Влез

View File

@ -59,7 +59,6 @@ viewNbCheckmates=%s টি কিস্তিমাত
nbBookmarks=%s টি বুকমার্ক
nbPopularGames=%s টি জনপ্রিয় খেলা
nbAnalysedGames=%s টি বিশ্লেষিত খেলা
bookmarkedByNbPlayers=%s জন খেলোয়াড় খেলাটিকে Bookmark করেছেন
viewInFullSize=পূর্ণ আকারে দেখুন
logOut=প্রস্থান
signIn=সাইন ইন

View File

@ -1,17 +1,17 @@
playWithAFriend=Igrajte protiv prijatelja
playWithTheMachine=Igrajte protiv računara
toInviteSomeoneToPlayGiveThisUrl=Za poziv u igru pošaljite ovu adresu
toInviteSomeoneToPlayGiveThisUrl=Za poziv u igru pošaljite ovaj link
gameOver=Partija je gotova
waitingForOpponent=Čekanje na protivnika
waiting=Protivnik na potezu
waiting=Čekanje
yourTurn=Vi ste na potezu
aiNameLevelAiLevel=%s Razina %s
level=Razina
aiNameLevelAiLevel=%s nivo %s
level=Nivo
toggleTheChat=Uključite/isključite dopisivanje
toggleSound=Uključite/isključite zvuk
chat=Dopisivanje
resign=Predaja
checkmate=Mat
checkmate=Šah-mat
stalemate=Pat
white=Bijeli
black=Crni
@ -21,19 +21,19 @@ whiteIsVictorious=Bijeli je pobjednik
blackIsVictorious=Crni je pobjednik
kingInTheCenter=Kralj u centru
threeChecks=Tri šaha
raceFinished=Trka je zavrsena
variantEnding=Varianta završnice
raceFinished=Trka je završena
variantEnding=Varijanta završnice
newOpponent=Novi protivnik
yourOpponentWantsToPlayANewGameWithYou=Vaš protivnik želi revanš
joinTheGame=Pridružite se partiji
whitePlays=Bijeli na potezu
blackPlays=Crni na potezu
theOtherPlayerHasLeftTheGameYouCanForceResignationOrWaitForHim=Vaš protivnik možda je napustio partiju. Možete proglasiti pobjedu ili čekati.
theOtherPlayerHasLeftTheGameYouCanForceResignationOrWaitForHim=Vaš protivnik je možda napustio partiju. Možete proglasiti pobjedu ili čekati.
makeYourOpponentResign=Tražite da protivnik preda
forceResignation=Proglasite pobjedu
forceDraw=Proglasite remi
talkInChat=Dopisujte se
theFirstPersonToComeOnThisUrlWillPlayWithYou=Prva osoba koja se pojavi na ovoj adresi igrat će protiv Vas.
theFirstPersonToComeOnThisUrlWillPlayWithYou=Prva osoba koja se pojavi na ovom linku igrat će protiv Vas.
whiteResigned=Bijeli je predao
blackResigned=Crni je predao
whiteLeftTheGame=Bijeli je napustio partiju
@ -41,43 +41,42 @@ blackLeftTheGame=Crni je napustio partiju
shareThisUrlToLetSpectatorsSeeTheGame=Podijelite ovaj link kako bi drugi mogli vidjeti partiju
theComputerAnalysisHasFailed=Računarska analiza nije uspjela
viewTheComputerAnalysis=Pogledajte računarsku analizu
requestAComputerAnalysis=Zahtijevajte računarsku analizu
requestAComputerAnalysis=Zatražite računarsku analizu
computerAnalysis=Računarska analiza
analysis=Analiza
analysis=Ploča za analizu
blunders=Grubi previdi
mistakes=Greške
inaccuracies=Nepreciznosti
moveTimes=Vrijeme za potez
moveTimes=Vremena za potez
flipBoard=Okrenite tablu
threefoldRepetition=Trostruko ponavljanje
claimADraw=Proglasite remi
offerDraw=Ponudite remi
draw=Remi
nbConnectedPlayers=%s prisutnih igrača
nbConnectedPlayers=%s igrača
gamesBeingPlayedRightNow=Trenutne partije
viewAllNbGames=%s partija
viewNbCheckmates=%s matova
nbBookmarks=%s zabilježenih partija
nbPopularGames=%s popularnih partija
nbAnalysedGames=%s analiziranih partija
bookmarkedByNbPlayers=Partiju je zabilježilo %s protivnika
viewInFullSize=Pogledajte u punoj veličini
logOut=Odjava
signIn=Prijava
newToLichess=Novi na Lichessu?
youNeedAnAccountToDoThat=Treba Vam račun da biste to uradili
signUp=Registrirajte se
computersAreNotAllowedToPlay=Računarima i igračima koji koriste pomoć računara nije dozvoljeno igrati. Molimo Vas da ne koristite pomoć šahovskih programa, baza podataka ili drugih igrača dok igrate.Takodje koristenje vise racuna vodi do toga da cete biti iskljuceni.
computersAreNotAllowedToPlay=Računarima i igračima koji koriste pomoć računara nije dozvoljeno igrati. Molimo Vas da ne koristite pomoć šahovskih programa, baza podataka ili drugih igrača dok igrate.Također, korištenje više računa vodi blokadi računa.
games=Partije
forum=Forum
xPostedInForumY=%s objavio u forumu %s
latestForumPosts=Posljednja poruka na forumu
xPostedInForumY=%s je pisao na forumskoj temi %s
latestForumPosts=Zadnje poruke na forumu
players=Igrači
minutesPerSide=Minuta po igraču
variant=Varijanta
variants=Varijante
timeControl=Vremenska kontrola
realTime=Stvarno Vrijeme
realTime=Stvarno vrijeme
correspondence=Dopisni šah
daysPerTurn=Dana po potezu
oneDay=Jedan dan
@ -85,17 +84,17 @@ nbDays=%s dana
nbHours=%s sati
time=Vrijeme
rating=Rejting
ratingStats=Rejting pozicija
ratingStats=Statistike rejtinga
username=Korisničko ime
usernameOrEmail=Korisničko ime
password=Lozinka
haveAnAccount=Već imate račun?
changePassword=Promijeni lozinku
changeEmail=Promijeni e-Mail
email=e-Mail
emailIsOptional=e-Mail je neoavezan. Lichess ce je koristiti da resetuje vasu Lozinku ako je zaboravite.
passwordReset=resetuj lozinku
forgotPassword=Zaboravio si lozinku ?
changePassword=Promjena lozinke
changeEmail=Promjena e-maila
email=E-mail
emailIsOptional=E-mail nije obavezan. Lichess će ga koristiti da povrati Vašu lozinku ako je zaboravite.
passwordReset=Resetovanje lozinke
forgotPassword=Zaboravljena lozinka?
rank=Poredak
gamesPlayed=Broj odigranih partija
nbGamesWithYou=%s odigranih partija protiv Vas
@ -106,9 +105,9 @@ drawOfferSent=Ponuda za remi poslana
drawOfferDeclined=Ponuda za remi odbijena
drawOfferAccepted=Ponuda za remi prihvaćena
drawOfferCanceled=Ponuda za remi povučena
whiteOffersDraw=Beli nudi remi
whiteOffersDraw=Bijeli nudi remi
blackOffersDraw=Crni nudi remi
whiteDeclinesDraw=Beli odbija ponudu za remi
whiteDeclinesDraw=Bijeli odbija ponudu za remi
blackDeclinesDraw=Crni odbija ponudu za remi
yourOpponentOffersADraw=Protivnik nudi remi
accept=Prihvatite
@ -140,8 +139,8 @@ subject=Predmet
recipient=Primalac
send=Pošaljite
incrementInSeconds=Dodatnih sekundi po potezu
freeOnlineChess=Besplatni internet-šah
spectators=Posmatrača
freeOnlineChess=Besplatni internetski šah
spectators=Posmatrača:
nbWins=%s pobjeda
nbLosses=%s poraza
nbDraws=%s remija
@ -149,17 +148,17 @@ exportGames=Izvezite odigrane partije
ratingRange=Raspon rejtinga
giveNbSeconds=Dajte protivniku %s sekundi
premoveEnabledClickAnywhereToCancel=Potez unaprijed uključen - Kliknite bilo gdje da otkažete
thisPlayerUsesChessComputerAssistance=Ovaj igrač koristi šahovski računar za pomoć
thisPlayerUsesChessComputerAssistance=Ovaj igrač koristi pomoć šahovskog programa
thisPlayerArtificiallyIncreasesTheirRating=Ovaj igrač umjetno diže/spušta svoj rejting
opening=Otvaranje
openingExplorer=Pretraživač otvaranja
takeback=Vratite potez
proposeATakeback=Predložite vraćanje poteza
takebackPropositionSent=Prijedlog za vračanje poteza poslan
takebackPropositionSent=Prijedlog za vraćanje poteza poslat
takebackPropositionDeclined=Prijedlog za vraćanje poteza odbijen
takebackPropositionAccepted=Prijedlog za vraćanje poteza prihvaćen
takebackPropositionCanceled=Prijedlog za vraćanje poteza otkazan
yourOpponentProposesATakeback=Vaš protivnik predlaže da vratite potez
yourOpponentProposesATakeback=Vaš protivnik predlaže vraćanje poteza
bookmarkThisGame=Zabilježite partiju
search=Traži
advancedSearch=Napredna pretraga
@ -169,7 +168,7 @@ tournamentPoints=Bodovi na turniru
viewTournament=Pogledajte turnir
backToTournament=Vratite se na turnir
backToGame=Vrati se igri
freeOnlineChessGamePlayChessNowInACleanInterfaceNoRegistrationNoAdsNoPluginRequiredPlayChessWithComputerFriendsOrRandomOpponents=Besplatni internet-šah. Igrajte šah sa čistim interfejsom. Registracija nije neophodna, nema reklama, ne zahtijevaju se priključci za preglednik. Igrajte protiv računara, prijatelja ili slučajnih protivnika.
freeOnlineChessGamePlayChessNowInACleanInterfaceNoRegistrationNoAdsNoPluginRequiredPlayChessWithComputerFriendsOrRandomOpponents=Besplatni internetski šah. Igrajte šah s čistim interfejsom. Registracija nije obavezna, nema reklama, ne zahtijevaju se dodaci za preglednik. Igrajte protiv računara, prijatelja ili slučajnih protivnika.
teams=Ekipe
nbMembers=%s članova
allTeams=Sve ekipe
@ -184,13 +183,13 @@ joiningPolicy=Postavke pridruživanja
teamLeader=Vođa ekipe
teamBestPlayers=Najbolji igrači
teamRecentMembers=Najnoviji članovi
xJoinedTeamY=%s pridružio se ekipi %s
xJoinedTeamY=%s se pridružio ekipi %s
xCreatedTeamY=%s je sastavio ekipu %s
averageElo=Prosječni rejting
location=Lokacija
settings=Postavke
filterGames=Filtriraj partije
reset=Resetirajte
reset=Resetujte
apply=Primijenite
leaderboard=Ljestvica vodećih
pasteTheFenStringHere=Zalijepite FEN kod ovdje
@ -214,23 +213,23 @@ following=Pratite igrača
unfollow=Prekinite praćenje
block=Blokirajte
blocked=Blokiran
unblock=Odblokiraj
unblock=Deblokiraj
followsYou=Prati vas
xStartedFollowingY=%s je počeo pratiti %s
nbFollowers=%s pratilaca
nbFollowing=%s prati
more=Više
memberSince=Član od
lastSeenActive=Posljednje prijavljivanje %s
challengeToPlay=Izazovite
lastSeenActive=Zadnja aktivnost %s
challengeToPlay=Izazovite na partiju
player=Igrač
list=Spisak
graph=Grafikon
lessThanNbMinutes=manje od %s minuta
xToYMinutes=%s do %s minuta
textIsTooShort=Tekst je prekratak
textIsTooLong=Tekst je predug
required=Potrebno
textIsTooShort=Tekst je prekratak.
textIsTooLong=Tekst je predug.
required=Potrebno.
openTournaments=Otvoreni turniri
duration=Trajanje
winner=Pobjednik
@ -245,7 +244,7 @@ winStreak=Uzastopne pobjede
createdBy=Kreirao
tournamentIsStarting=Turnir počinje
membersOnly=Samo članovi
boardEditor=Namjestite početnu poziciju
boardEditor=Namjestite poziciju
startPosition=Početna pozicija
clearBoard=Očistite tablu
savePosition=Sačuvajte poziciju
@ -258,21 +257,21 @@ firstName=Ime
lastName=Prezime
biography=Biografija
country=Država
preferences=Vlastita podešavanja
preferences=Postavke
watchLichessTV=Gledajte Lichess TV
previouslyOnLichessTV=Prethodno na Lichess TV-u
onlinePlayers=Prisutni igrači
activeToday=Aktivni danas
activePlayers=Aktivni Igrači
activePlayers=Aktivni igrači
bewareTheGameIsRatedButHasNoClock=Pažnja: partija je rangirana, ali bez sata!
training=Vježba
training=Trening
yourPuzzleRatingX=Vaš rejting u problemima: %s
findTheBestMoveForWhite=Pronadji najbolji potez za Bijelog
findTheBestMoveForBlack=Pronadji najbolji potez za Crnog
findTheBestMoveForWhite=Pronađi najbolji potez za bijelog
findTheBestMoveForBlack=Pronađi najbolji potez za crnog
toTrackYourProgress=Da pratite napredak:
trainingSignupExplanation=Lichess će zadavati probleme koji odgovaraju Vašim mogućnostima da vježba bude bolja i uspješnija.
recentlyPlayedPuzzles=Nedavno rješavani problemi
puzzleId=Vježba %s
puzzleId=Problem %s
puzzleOfTheDay=Problem dana
clickToSolve=Kliknite za rješenje
goodMove=Dobar potez
@ -285,19 +284,19 @@ victory=Pobjeda!
giveUp=Predajte se
puzzleSolvedInXSeconds=Problem riješen za %s sekundi
wasThisPuzzleAnyGood=Da li je ovaj problem bio dobar?
pleaseVotePuzzle=Pomozi da se Lichess poboljša, koristeći strelice gore/dolje
pleaseVotePuzzle=Pomozi da se Lichess poboljša, koristeći strelice gore/dolje:
thankYou=Hvala!
ratingX=Rejting: %s
playedXTimes=Odigrano %s puta
fromGameLink=Iz partije %s
startTraining=Počnite vježbu
continueTraining=Nastavite vježbu
retryThisPuzzle=Pokušajte ponovo
startTraining=Počnite trening
continueTraining=Nastavite trening
retryThisPuzzle=Pokušajte ponovo ovaj problem
thisPuzzleIsCorrect=Ovaj problem je ispravan i zanimljiv
thisPuzzleIsWrong=Ovaj problem je neispravan ili dosadan
youHaveNbSecondsToMakeYourFirstMove=Imate %s sekundi da načinite vaš prvi potez!
nbGamesInPlay=odigrano %s partija
automaticallyProceedToNextGameAfterMoving=Automatski prebaci na sljedecu partiju poslije odigranog poteza
automaticallyProceedToNextGameAfterMoving=Automatski prebaci na sljedeću partiju poslije odigranog poteza
autoSwitch=Automatski prebaci
openingId=Otvaranje %s
yourOpeningRatingX=Vaš rejting u otvaranju %s
@ -334,7 +333,7 @@ cheat=Varanje
insult=Uvreda
troll=Mamljenje
other=Ostalo
reportDescriptionHelp=Zalijepiti link za igru (e) i objasniti šta je pogrešno u ponašanju ovog korisnika.
reportDescriptionHelp=Zalijepiti link za igru(e) i objasniti šta je pogrešno u ponašanju ovog korisnika. Nemojte pisati samo "ovaj vara", nego nam reci kako si došao do ovog zaključka. Vaš iskaz će biti brže riješen ako pišete na engleskom jeziku.
by=od %s
thisTopicIsNowClosed=Ova tema je sada zatvorena.
theming=Izgled
@ -342,32 +341,32 @@ donate=Donacija
blog=Blog
questionsAndAnswers=Pitanja i odgovori
notes=Bilješke
typePrivateNotesHere=Ovdje upiši ličnu bilješku
typePrivateNotesHere=Ovdje upiši privatnu bilješku
gameDisplay=Prikaz igre
pieceAnimation=Animacija figura
materialDifference=Razlika materijala
closeAccount=Zatvorite račun
closeYourAccount=Zatvorite Vaš račun
changedMindDoNotCloseAccount=Predomislio sam se, nemoj zatvoriti moj račun
closeAccountExplanation=Jesi li siguran da želiš zatvoriti račun? Ova odluka je stalna. Poslje toga tvoj profil neče više biti dostupan.
changedMindDoNotCloseAccount=Predomislio sam se, nemojte zatvoriti moj račun
closeAccountExplanation=Jeste li sigurni da želite zatvoriti račun? Ova odluka je konačna. Poslije toga Vaš profil neće više biti dostupan.
thisAccountIsClosed=Ovaj račun je zatvoren.
invalidUsernameOrPassword=Pogreško korisničko ime ili lozinka.
emailMeALink=Šalji link
emailMeALink=Pošalji link preko e-maila
currentPassword=Trenutna lozinka.
newPassword=Nova lozinka
newPasswordAgain=Nova lozinka (ponovo)
boardHighlights=Zanimljivosti na Ploci (zadnja poteza i šah)
pieceDestinations=Dostupna polja (moguče poteze)
boardCoordinates=Koordinate na ploci (A-H, 1-8)
boardHighlights=Zanimljivosti na ploči (zadnji potez i šah)
pieceDestinations=Dostupna polja (mogući potezi i predpotezi)
boardCoordinates=Koordinate na ploči (A-H, 1-8)
moveListWhilePlaying=Lista poteza u igri
chessClock=Šahovski sat
tenthsOfSeconds=Desetinke sekunde
never=Nikada
whenTimeRemainingLessThanTenSeconds=Kada je vremena < 10 sekundi
horizontalGreenProgressBars=Horizontalna zelena linija
soundWhenTimeGetsCritical=Audio opozorenje kada nema više vremena
whenTimeRemainingLessThanTenSeconds=Kada je ostalo < 10 sekundi
horizontalGreenProgressBars=Horizontalna zelena linija napretka
soundWhenTimeGetsCritical=Zvučno opozorenje pri kraju vremena
gameBehavior=Ponašanje igre
premovesPlayingDuringOpponentTurn=Pred-potezi (igranje prilikom protivnikovog poteza)
premovesPlayingDuringOpponentTurn=Predpotezi (igranje prilikom protivnikovog poteza)
takebacksWithOpponentApproval=Povrat poteza (uz odobrenje protivnika)
promoteToQueenAutomatically=Automatska zamjena za kraljicu
claimDrawOnThreefoldRepetitionAutomatically=Prihvati remi %strostruko ponavljanje%s automatski
@ -376,19 +375,19 @@ letOtherPlayersFollowYou=Dopustite da vas drugi igrači prate
letOtherPlayersChallengeYou=Dopustite da vas drugi igrači izazovu
sound=Zvuk
soundControlInTheTopBarOfEveryPage=Kontrola za zvuk je pri vrhu svake stranice, na desnoj strani
yourPreferencesHaveBeenSaved=Tvoje postavke su memorisane.
yourPreferencesHaveBeenSaved=Vaše postavke su sačuvane.
none=Nikakva
fast=Brza
normal=Normalna
slow=Spora
insideTheBoard=Unutar ploce
outsideTheBoard=Izvan ploce
insideTheBoard=Unutar ploče
outsideTheBoard=Van ploče
onSlowGames=Na sporim igrama
always=Uvijek
inCasualGamesOnly=Samo u običnim igrama
whenPremoving=Prlikom pred-poteza
whenTimeRemainingLessThanThirtySeconds=Kada je preostalo vrijeme <30 sekundi
difficultyEasy=Lagano
whenPremoving=Prilikom predpoteza
whenTimeRemainingLessThanThirtySeconds=Kada je preostalo < 30 sekundi
difficultyEasy=Lahko
difficultyNormal=Normalno
difficultyHard=Teško
xLeftANoteOnY=%s je ostavio bilješku na %s
@ -396,65 +395,65 @@ xCompetesInY=%s se takmiči u %s
xAskedY=%s je pitao %s
xAnsweredY=%s je odgovorio %s
xCommentedY=%s je komentarisao %s
timeline=Vremenska linija
timeline=Hronologija
seeAllTournaments=Pogledaj sve turnire
starting=Počinje:
allInformationIsPublicAndOptional=Sve informacije su javne.
yourCityRegionOrDepartment=Tvoj grad, regija ili pokrajina.
biographyDescription=Nešto više o vama, što volite u šahu, omiljena otvaranja, igre, igrači...
maximumNbCharacters=Maksimalno %s znakova.
allInformationIsPublicAndOptional=Sve informacije su javne i neobavezne.
yourCityRegionOrDepartment=Vaš grad, regija ili pokrajina.
biographyDescription=Nešto više o Vama, šta volite u šahu, omiljena otvaranja, igre, igrači...
maximumNbCharacters=Najviše %s znakova.
blocks=%s blokiranih
listBlockedPlayers=Lista blokiranih igrača
human=Osoba
computer=Kompjuter
computer=Računar
side=Strana
clock=Sat
unauthorizedError=Pristup neodozvoljen.
noInternetConnection=Nedostupan internet. Možeš i dalje igrati preko menuja
noInternetConnection=Nedostupan internet. Možete i dalje igrati vanmrežno preko menija.
connectedToLichess=Spojeni ste na lichess.org
signedOut=Odjavljeni ste
loginSuccessful=Prijavljeni ste
playOnTheBoardOffline=Igraj udvoje
playOfflineComputer=Igraj protiv kompjutera
playOnTheBoardOffline=Igraj u dvoje
playOfflineComputer=Igraj protiv računara
opponent=Protivnik
learn=Vježba
learn=Učenje
community=Zajednica
tools=Alati
increment=Dodatak
board=Ploca
increment=Inkrement
board=Ploča
pieces=Figure
sharePGN=Podjeli PGN
sharePGN=Podijeli PGN
playOnline=Igraj na mreži
playOffline=Igraj bez mreže
allowAnalytics=Dozvoli anonimnu statistiku
shareGameURL=Podijeli URL partije
shareGameURL=Podijeli link partije
error.required=Ovo polje je obavezno
error.email=Ova e-mail adresa je neispravna
error.email_acceptable=Ova e-mail adresa nije prihvatljiva
error.email_unique=Ova e-mail adresa je već korištena
error.email_unique=Ova e-mail adresa je već zauzeta
blindfoldChess=Šah na slijepo (nevidljive figure)
moveConfirmation=Potvrda poteza
inCorrespondenceGames=U dopisnim partijama
ifRatingIsPlusMinusX=Ukoliko je rejting ± %s
ifRatingIsPlusMinusX=Ako je rejting ± %s
onlyFriends=Samo prijatelji
menu=Izbor
menu=Izbornik
castling=Rokada
whiteCastlingKingside=Bijeli O-O
whiteCastlingQueenside=Bijeli O-O-O
blackCastlingKingside=Crni O-O
blackCastlingQueenside=Crni O-O-O
nbForumPosts=%s Forumskih poruka
nbForumPosts=%s forumskih poruka
tpTimeSpentPlaying=Vrijeme provedeno igrajući: %s
watchGames=Gledaj partije
tpTimeSpentOnTV=Vrijeme na TV-u: %s
watch=Gledaj
internationalEvents=Međunarodni događaji
videoLibrary=Video biblioteka
mobileApp=Mobilni App
mobileApp=Mobilna aplikacija
webmasters=Webmasteri
contribute=Doprinesi
contact=Kontaktiraj
termsOfService=ToS
termsOfService=Uvjeti korištenja
sourceCode=Izvorni kod
simultaneousExhibitions=Simultanke
host=Domaćin
@ -464,18 +463,18 @@ noSimulFound=Simultanka nije pronađena
noSimulExplanation=Ova simultanka ne postoji.
returnToSimulHomepage=Vrati se na početnu stranicu sa simultankama
aboutSimul=Simultanke uključuju jednog igrača koji igra protiv više protivnika odjednom.
aboutSimulImage=Od 50 protivnika, Fischer je pobijedio 47 parija, remizirao 2 i izgubio 1.
aboutSimulRealLife=Koncept je preuzet iz stvarnog života. U stvarnom životu, ovo uključuje domaćina simultanke koji ide od table do table da odigra pojedinačni potez.
aboutSimulImage=Od 50 protivnika, Fischer je pobijedio 47 partija, remizirao 2 i izgubio 1.
aboutSimulRealLife=Koncept je preuzet iz stvarnog života. U stvarnom životu, ovo uključuje domaćina simultanke koji ide od ploče do ploče da odigra pojedinačni potez.
aboutSimulRules=Kada simultanka započne, svaki igrač započinje partiju protiv domaćina, koji dobija bijele figure. Simultanka završava kada su i sve partije završene.
aboutSimulSettings=Simultanke su uvijek prijateljske. Igraj ponovo, vrati potez i dodaj vrijeme je isključeno.
aboutSimulSettings=Simultanke su uvijek prijateljske. Opcije "igraj ponovo", "vrati potez" i "dodaj vrijeme" su isključene.
create=Kreiraj
whenCreateSimul=Kada kreiraš simultanku, igraš protiv više igrača istovremeno.
simulVariantsHint=Ako izabereš nekoliko varijanti, svaki igrač je u mogućnosti da izabere koju će igrati.
simulClockHint=Fischer podešavanje sata. Što više igrača primiš, više vremena bit će ti potrebno.
simulClockHint=Fischerovo podešavanje sata. Što više igrača primiš, više vremena bit će ti potrebno.
simulAddExtraTime=Možeš dodati vrijeme na svoj sat da ti pomogne savladati simultanku.
simulHostExtraTime=Dodatno vrijeme domaćina
lichessTournaments=Lichess turniri
tournamentFAQ=Arena turniri, najčešće postavljena pitanja
tournamentFAQ=Najčešće postavljena pitanja za Arena turnire
tournamentOfficial=Službeno
timeBeforeTournamentStarts=Vrijeme do početka turnira
averageCentipawnLoss=Prosječni gubitak u stotim dijelovima pješaka
@ -484,29 +483,38 @@ keyMoveBackwardOrForward=Potez nazad/naprijed
keyGoToStartOrEnd=idi na početak/kraj
keyShowOrHideComments=pokaži/sakrij komentare
keyEnterOrExitVariation=otvori/zatvori varijantu
keyYouCanDrawArrowsCirclesAndScrollToMove=Pritisnite shift i kliknite lijevom tipkom miša ili desnom tipkom kako biste crtali krugove i strelice na tabli. Možete također skrolati tabli kako biste se pomicali u igri.
keyYouCanDrawArrowsCirclesAndScrollToMove=Pritisnite shift i kliknite lijevom tipkom miša ili desnom tipkom kako biste crtali krugove i strelice na tabli. Možete također skrolati po tabli kako biste se pomicali u igri.
newTournament=Novi turnir
tournamentHomeTitle=Šahovski turniri sa različitim vremenskim kontrolama i varijantama
tournamentHomeDescription=Igraj brze turnire! Pridruži se turniru ili stvori svoj turnir. Zuger, Blitz, Klasicni, Chess 960, King of the Hill, Tri Saha, i jos vise opcije je dostupno za beskrajnu sahovsku zanimaciju.
tournamentHomeDescription=Igraj brze turnire! Pridruži se turniru ili stvori svoj turnir. Zuger, Blitz, Klasični, Chess 960, King of the Hill, Tri šaha, i jos više opcije je dostupno za beskrajnu šahovsku zanimaciju.
tournamentNotFound=Turnir nije pronađen
tournamentDoesNotExist=Turnir ne postoji.
tournamentMayHaveBeenCanceled=Turnir je možda bio otkazan, ako su ga svi igrači napustili prije početka.
returnToTournamentsHomepage=Povratak na početnu stranicu turnira
weeklyPerfTypeRatingDistribution=Mjesečna %s rejting raspodjela
nbPerfTypePlayersThisWeek=%s %s Igrača ovog mjeseca
yourPerfTypeRatingisRating=Vas %s rejting je %s.
youAreBetterThanPercentOfPerfTypePlayers=Bolji ste nego %s od %s igrača
youDoNotHaveAnEstablishedPerfTypeRating=Nemate tačno odredjenu poziciju %s rejtinga
checkYourEmail=Provjerite vaše email-ove
weHaveSentYouAnEmailClickTheLink=Mi smo vam poslali e-mail. Kliknite na link u e-mailu da biste aktivirali svoj račun.
ifYouDoNotSeeTheEmailCheckOtherPlaces=Ako ne vidite e-mail, provjerite na drugim mjestima, kao što su Junk, Spam, socijalne ili druge mape.
nbPerfTypePlayersThisWeek=%s %s igrača ovog mjeseca.
yourPerfTypeRatingisRating=Vaš %s rejting je %s.
youAreBetterThanPercentOfPerfTypePlayers=Bolji ste nego %s od %s igrača.
youDoNotHaveAnEstablishedPerfTypeRating=Nemate tačno uspostavljen %s rejting.
checkYourEmail=Provjerite Vaš e-mail
weHaveSentYouAnEmailClickTheLink=Mi smo Vam poslali e-mail. Kliknite na link u e-mailu da biste aktivirali svoj račun.
ifYouDoNotSeeTheEmailCheckOtherPlaces=Ako ne vidite e-mail, provjerite na drugim mjestima, kao što su junk, spam, društvene ili druge mape.
areYouSureYouEvenRegisteredYourEmailOnLichess=Jeste li sigurni da ste registrirali svoj e-mail na Lichess?
itWasNotRequiredForYourRegistration=To nije bilo potrebno za registraciju.
weHaveSentYouAnEmailTo=Poslali smo e-mail na %s. Kliknite na link u e-mailu za resetiranje vaše lozinke.
byRegisteringYouAgreeToBeBoundByOur=Registriranjem, slažete se da ćete se pridržavati naših %s.
networkLagBetweenYouAndLichess=Mrežno kašnjenje između Vas i lichessa
timeToProcessAMoveOnLichessServer=Vrijeme za procesiranje poteza na lichess serveru
downloadAnnotated=Skini sa anotacijom
downloadRaw=Skini sirovo
downloadImported=Preuzimanje uvezeno
printFriendlyPDF=PDF koji se može printati
crosstable=Ukrštena tabela
youCanAlsoScrollOverTheBoardToMoveInTheGame=Možete također skrolati po ploči da se pomjerate u igri.
pressShiftPlusClickOrRightClickToDrawCirclesAndArrowsOnTheBoard=Pritisni shift+klik ili desni klik za crtanje krugova i strelica na ploči.
confirmResignation=Potvrdi predaju
letOtherPlayersMessageYou=Pusti druge igrače da te kontaktiraju
shareYourInsightsData=Prikaži svoje podatke uvida
youHaveAlreadyRegisteredTheEmail=Već ste registrirali email: %s
kidMode=Dječiji način rada
playChessEverywhere=Igrajte šaha svugdje
@ -514,6 +522,13 @@ asFreeAsLichess=Besplatno kao lichess
builtForTheLoveOfChessNotMoney=Izgrađeno zbog ljubavi prema šahu, ne novcu
everybodyGetsAllFeaturesForFree=Svako dobija sve mogućnosti besplatno
zeroAdvertisement=Bez reklama
fullFeatured=Sa svim mogućnostima
phoneAndTablet=Telefon i tablet
bulletBlitzClassical=Bullet, blic, klasični
correspondenceChess=Prepisni šah
onlineAndOfflinePlay=Mrežna i vanmrežna igra
viewTheSolution=Prika
correspondenceAndUnlimited=Prepiska i neograničeno
viewTheSolution=Prikaži rješenje
followAndChallengeFriends=Prati i izazovi prijatelje
availableInNbLanguages=Dostupno na %s jezika!
gameAnalysis=Analiza igre

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s Escacs i mat
nbBookmarks=%s Marcadors
nbPopularGames=%s Partides populars
nbAnalysedGames=%s Partides analitzades
bookmarkedByNbPlayers=Marcat per %s jugadors
viewInFullSize=Veure a mida completa
logOut=Tanca la sessió
signIn=Inicia la sessió

View File

@ -0,0 +1,19 @@
playWithAFriend=ghjucà cù un amicu
playWithTheMachine=Ghjucà contru l'urdinatore
toInviteSomeoneToPlayGiveThisUrl=Per fà vene à qualchisia à ghjucà, dà st'indirizzu
gameOver=hè finitu u ghjocu
waitingForOpponent=Aspittava di un avversu
waiting=Aspittava
yourTurn=Tocca a te
aiNameLevelAiLevel=%s livellu %s
level=Livellu
toggleTheChat=Attivà u Tchat/Disattivà u Tchat
toggleSound=Attivà u sonu/Disattivà u sonu
chat=Tchat
resign=Abandunnà
checkmate=Scaccu mattu
stalemate=Pattu
white=Biancu
black=Neru
randomColor=Culore casuale
createAGame=Creà un ghjocu

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Zobrazit všech %s matů
nbBookmarks=Záložky: %s
nbPopularGames=Oblíbené partie: %s
nbAnalysedGames=%s zanalyzovaných partií
bookmarkedByNbPlayers=Počet hráčů, kteří mají partii v záložkách: %s
viewInFullSize=Zobrazit v plné velikosti
logOut=Odhlásit se
signIn=Přihlásit se

View File

@ -22,19 +22,26 @@ blackIsVictorious=Хурисем ҫӗнтерчӗҫ
kingInTheCenter=Ту патши
threeChecks=Виҫӗ шах пани
raceFinished=Чупу вӗҫленчӗ
variantEnding=Уйрӑм вӗҫленни
newOpponent=Ҫӗнӗ ӑмӑртуҫӑ
yourOpponentWantsToPlayANewGameWithYou=Ӑмӑртуҫу санпа тепӗр хут выљасшӑн
joinTheGame=Вӑййине хутшӑн
whitePlays=Шуррисен ҫӳремелле
blackPlays=Хурисен ҫӳремелле
theOtherPlayerHasLeftTheGameYouCanForceResignationOrWaitForHim=Тепӗр вӑйӑҫ вӑййинчен тухнӑ пек турӗ. Ҫӗнтерӳ, парма-пар ҫинчен пӗлтер йе кӗтсе тӑр.
makeYourOpponentResign=Ӑмӑртуҫуна парӑнтаттар
forceResignation=Ҫӗнтерӳ пирки пӗлтер
forceDraw=Парма-пар пирки пӗлтер
talkInChat=Калаҫура сӑпайлӑ пул!
theFirstPersonToComeOnThisUrlWillPlayWithYou=Ҫак каҫҫипе пӗрремӗш килекен ҫын санпа вылӗ.
whiteResigned=Шуррисем парӑнчӗҫ
blackResigned=Хурисем парӑнчӗҫ
whiteLeftTheGame=Шуррисем вӑййинчен тухрӗҫ
blackLeftTheGame=Хурисем вӑййинчен тухрӗҫ
shareThisUrlToLetSpectatorsSeeTheGame=Вӑййине сӑнма ирӗк парас тесе каҫҫине пайлаш
theComputerAnalysisHasFailed=Компуйтӑр тишкерӗвӗ ӑнӑҫланман
viewTheComputerAnalysis=Компуйтӑр тишкереве патне
requestAComputerAnalysis=Компйутӑр тишкервне ыйт
computerAnalysis=Компйутӑр тишкерӗвӗ
analysis=Тишкерӳ хӑми
blunders=Тӳрккес йӑнӑшсем
@ -53,7 +60,7 @@ viewNbCheckmates=%s Мат туни
nbBookmarks=%s Картса хуни
nbPopularGames=%s Йуратнӑ вӑйӑ
nbAnalysedGames=%s Тишкернӗ вӑйӑ
bookmarkedByNbPlayers=%s Вӑйӑҫӑ картса хунӑ
viewInFullSize=Тулли калӑпӑшла пӑх
logOut=Тух
signIn=Кӗр
newToLichess=Lichess пӗрремӗш хут?
@ -84,6 +91,8 @@ haveAnAccount=Аккаунт пур-и?
changePassword=Кӗме сӑмах улӑштарни
changeEmail=Ел. пуштӑ улӑштарни
email=Ел. пуштӑ
emailIsOptional=Ел. пуштӑ тивӗҫлӗ мар. Кӗме сӑмахна манса кайсан, ҫӗнӗ кӗме сӑмах лартас тесе Lichess сан пуштӑпа усӑ курӗ.
passwordReset=Кӗме сӑмах улӑштарасси
forgotPassword=Кӗме сӑмаха мансан
rank=Хаклав
gamesPlayed=вӑйӑ выљанӑ
@ -118,6 +127,7 @@ rematchOfferAccepted=Реванш ыйтнине йышӑннӑ
rematchOfferCanceled=Реванш ыйтнине пӑрахӑҫланӑ
rematchOfferDeclined=Реванш ыйтнине сирнӗ
cancelRematchOffer=Реванш ыйтнине пӑрахӑҫла
viewRematch=Рематчне тишкер
play=Выљасси
inbox=Ҫырусем
chatRoom=Калаҫу ани
@ -172,6 +182,7 @@ teamBestPlayers=Чи вӑйлӑ вӑйӑҫӑ
teamRecentMembers=Тин хутшӑннӑ пайташсем
xJoinedTeamY=%s -> %s ушкӑна хутшӑннӑ
xCreatedTeamY=%s усӑҫ %s ушкӑн йӗркеленӗ
averageElo=Вӑтам рейтинг
location=Вырӑн
filterGames=Вӑйӑ али
reset=Силле
@ -217,6 +228,7 @@ required=Тивӗҫлӗ.
openTournaments=Уҫӑ турнирсем
duration=Вӑрӑмӑш
winner=Ҫӗнтерӳҫӗ
standing=Лару-тӑру
createANewTournament=Ҫӗнӗ турнир йӗркеле
join=Хутшӑнас
withdraw=Тухасси
@ -345,7 +357,6 @@ gameBehavior=Вӑййа йертсе пыни
premovesPlayingDuringOpponentTurn=Умӗн ҫӳресси (ӑмӑртуҫӗн ҫӳремелли вӑхӑтра утни)
takebacksWithOpponentApproval=Тавӑрасси (ӑмӑртуҫу килӗшнипе)
promoteToQueenAutomatically=Фӑрӑҫа хӑй халлӗн тухасси
claimDrawOnThreefoldRepetitionAutomatically=%Лартӑма 3 хут лексен%s п-паршӑн х-халӗн пӗлтересси
privacy=Вӑрттӑнлӑх
letOtherPlayersFollowYou=Ытти вӑйӑҫ ман ҫине ҫырӑнасси
letOtherPlayersChallengeYou=Ытти вӑйӑҫ мана выљатасси
@ -360,6 +371,7 @@ outsideTheBoard=Хӑма тулӗнче
onSlowGames=Вӑрах вӑйӑра
always=Йалан
inCasualGamesOnly=Ахаль выльанӑ чухне кана
whenPremoving=Умӗн куҫнӑ чух
whenTimeRemainingLessThanThirtySeconds=Вӑхӑт < 30 ҫеккунтран сахал йулсан
difficultyEasy=Ансат
difficultyNormal=Виҫеллӗ
@ -396,8 +408,11 @@ pieces=Кӗлеткесем
sharePGN=PGN пайлаш
playOnline=Онлайн вӑйӑ
playOffline=Офлайн вӑйӑ
allowAnalytics=Йатсӑр статистике пултар
shareGameURL=Вӑйӑ каҫҫине пайлаш
error.required=Тивӗҫлӗ ани
error.email=Ку ел. пуштӑ йурӑхсӑр
error.email_acceptable=Ку ел. пуштӑна йышӑнма ҫук
error.email_unique=Ҫак ел. пуштӑпа усӑ кураҫҫӗ ӗнтӗ
blindfoldChess=Суккӑр шахмат (курӑнман кӗлетке)
moveConfirmation=Куҫӑма ҫирӗплетесси
@ -428,12 +443,16 @@ createdSimuls=Тин йӗркеленӗ пӗр вӑхӑтри вӑйӑсем
hostANewSimul=Ҫӗнӗ пӗр вӑхӑтри вӑййа вырӑнӑҫтар
noSimulFound=Пӗр вӑхӑтри вӑйӑ тупӑнман
returnToSimulHomepage=Пӗр вӑхӑтри вӑйӑ патнелле
aboutSimul=Пӗр вӑхӑтри вӑйӑсенче пӗр вӑйӑҫ темиҫе вӑйӑҫа пӗр вӑхӑтра выльатать.
aboutSimulImage=50 ӑмӑртуҫран, Фишӗр 47 ҫӗнтернӗ, 2 парма-пар выльанӑ, 1 выльаса йанӑ.
aboutSimulSettings=Пӗр вӑхӑтри вӑйӑ йаланах ахаль вӑйӑ. Рематч выльама, тавӑрма тата "ытлаши вӑхӑт" илме ҫук.
create=Йӗркелес
whenCreateSimul=Пӗр вӑхӑтри вӑйӑ йӗрекелесен, санӑн темиҫе ӑмӑртуҫпа пӗр вӑхӑтра выльамалла.
lichessTournaments=Lichess турнирӗсем
tournamentFAQ=Аренӑ турнирӗн ТЛЫӗ
tournamentOfficial=Офиссаллӑ
averageCentipawnLoss=Вӑтам сантисалтак ҫухатӑвӗ
keyboardShortcuts=Хӑвӑрт пускӑчсем
keyMoveBackwardOrForward=кайалла/малалла куҫ
keyGoToStartOrEnd=пуҫӗ/вӗҫӗ патне куҫ
keyShowOrHideComments=шухӑшсене кӑтарт / пытар
@ -449,6 +468,9 @@ youDoNotHaveAnEstablishedPerfTypeRating=Саншӑн шутланӑ %s рейт
checkYourEmail=Ел. пуштуна тӗрӗсле
weHaveSentYouAnEmailClickTheLink=Епир сан патна ел. ҫыру йатӑмӑр. Аккаунтна тапратас тесе ҫырури каҫӑ ҫине пус.
weHaveSentYouAnEmailTo=Епир %s ҫине ҫыру йатӑмӑр. Вӑрттӑн сӑмахна улӑштарас тесе ҫырури каҫӑ ҫине пус.
networkLagBetweenYouAndLichess=Санпа Lichess хушшинче тетел чӑрмантарса тӑни пур
timeToProcessAMoveOnLichessServer=Lichess сервӗрӗ пӗр куҫӑм ӗҫлесе илмелли вӑхӑт
crosstable=Пӑнчӑ тапӑлӗ
confirmResignation=Парӑнасса ҫирӗплетесси
letOtherPlayersMessageYou=Ытти вӑйӑҫ ман пата ҫырасси
youHaveAlreadyRegisteredTheEmail=Есӗ ҫак пуштӑпа регистратсиленнӗ-ха: %s

View File

@ -59,7 +59,6 @@ viewNbCheckmates=Edrych ar y %s o gêmau sydd wedi cael eu henill
nbBookmarks=%s o gêmau wedi'u nodi
nbPopularGames=%s o gêmau wedi'u nodi mwy nag unwaith
nbAnalysedGames=%s o gêmau wedi'u dadansoddi
bookmarkedByNbPlayers=wedi nodi gan %s o chwaraewyr
viewInFullSize=Edrych yn maint llawn
logOut=Allgofnodi
signIn=Mewngofnodi

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Se %s skakmatter
nbBookmarks=%s bogmærker
nbPopularGames=%s populære partier
nbAnalysedGames=%s analyserede partier
bookmarkedByNbPlayers=Bogmærke til %s spillere
viewInFullSize=Se i fuldskærm
logOut=Log ud
signIn=Log ind

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s Schachmatts
nbBookmarks=%s Lesezeichen
nbPopularGames=%s Beliebte Partien
nbAnalysedGames=%s Analysierte Partien
bookmarkedByNbPlayers=Von %s Spielern mit einem Lesezeichen versehen
viewInFullSize=In voller Größe anzeigen
logOut=Abmelden
signIn=Anmelden
@ -515,7 +514,7 @@ youCanAlsoScrollOverTheBoardToMoveInTheGame=Du kannst auch auf dem Brett scrolle
pressShiftPlusClickOrRightClickToDrawCirclesAndArrowsOnTheBoard=Drücke Shift+Mausklick oder Rechtsklick, um Kreise und Pfeile auf dem Brett zu zeichnen.
confirmResignation=Aufgabe bestätigen
letOtherPlayersMessageYou=Erlaube anderen Spielern dich zu kontaktieren.
shareYourInsightsData=Teile deine persönliche Spierstatistiken
shareYourInsightsData=Teile deine persönliche Spielerstatistiken
youHaveAlreadyRegisteredTheEmail=Du hast die folgende Emailadresse schon registriert: %s
kidMode=Kinder Modus
playChessEverywhere=Spiele Schach überall

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s Ματ
nbBookmarks=%s Σελιδοδείκτες
nbPopularGames=%s Δημοφιλή παιχνίδια
nbAnalysedGames=%s Αναλυμένα παιχνίδια
bookmarkedByNbPlayers=Προστέθηκε ως σελιδοδείκτης από %s παίκτες
viewInFullSize=Προβολή σε πλήρες μέγεθος
logOut=Έξοδος
signIn=Είσοδος

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s Ŝakmatoj
nbBookmarks=%s Paĝmarkoj
nbPopularGames=%s Popularaj ludoj
nbAnalysedGames=%s Analizitaj ludoj
bookmarkedByNbPlayers=Paĝmarkita de %s ludantoj
viewInFullSize=Vidi plengrande
logOut=Elsaluti
signIn=Ensaluti

View File

@ -1,8 +1,8 @@
playWithAFriend=Jugar con un amigo
playWithTheMachine=Jugar con el ordenador
toInviteSomeoneToPlayGiveThisUrl=Para invitar a alguien a jugar, comparte este URL
gameOver=Fin del juego
waitingForOpponent=Esperando oponente
playWithTheMachine=Jugar contra el ordenador
toInviteSomeoneToPlayGiveThisUrl=Para invitar a alguien a jugar, comparte este enlace
gameOver=Fin de la partida
waitingForOpponent=Esperando al oponente
waiting=Esperando
yourTurn=Tu turno
aiNameLevelAiLevel=%s nivel %s
@ -21,7 +21,7 @@ whiteIsVictorious=Las blancas ganan
blackIsVictorious=Las negras ganan
kingInTheCenter=Rey en el centro
threeChecks=Tres jaques
raceFinished=Carrera acabada
raceFinished=Carrera terminada
variantEnding=Final alternativo
newOpponent=Nuevo oponente
yourOpponentWantsToPlayANewGameWithYou=Tu oponente quiere la revancha
@ -38,13 +38,13 @@ whiteResigned=Las blancas se han rendido
blackResigned=Las negras se han rendido
whiteLeftTheGame=Las blancas han abandonado la partida
blackLeftTheGame=Las negras han abandonado la partida
shareThisUrlToLetSpectatorsSeeTheGame=Comparte este URL para que los espectadores puedan ver la partida
shareThisUrlToLetSpectatorsSeeTheGame=Comparte este enlace para que los espectadores puedan ver la partida
theComputerAnalysisHasFailed=El análisis del ordenador ha fallado
viewTheComputerAnalysis=Ver el análisis del ordenador
requestAComputerAnalysis=Solicitar un análisis del ordenador
computerAnalysis=Análisis del ordenador
analysis=Tablero de análisis
blunders=Errores serios
blunders=Errores graves
mistakes=Errores
inaccuracies=Imprecisiones
moveTimes=Tiempo por movimiento
@ -55,22 +55,21 @@ offerDraw=Ofrecer tablas
draw=Tablas
nbConnectedPlayers=%s jugadores
gamesBeingPlayedRightNow=Partidas actuales
viewAllNbGames=%s partidas
viewNbCheckmates=%s jaque mates
nbBookmarks=%s partidas marcadas
nbPopularGames=%s partidas populares
nbAnalysedGames=%s partidas analizadas
bookmarkedByNbPlayers=Marcado por %s jugadores
viewAllNbGames=%s Partidas
viewNbCheckmates=%s Jaques mate
nbBookmarks=%s Partidas favoritas
nbPopularGames=%s Partidas populares
nbAnalysedGames=%s Partidas analizadas
viewInFullSize=Ver en tamaño completo
logOut=Cerrar sesión
signIn=Iniciar sesión
newToLichess=¿Nuevo en Lichess?
youNeedAnAccountToDoThat=Necesitas crear una cuenta para hacer eso
signUp=Regístrate
computersAreNotAllowedToPlay=No les está permitido jugar a las computadoras ni a jugadores asistidos por ellas. Por favor, no te ayudes de motores de ajedrez, bases de datos o de otros jugadores durante el juego. También ten en cuenta que se desalienta tener más de una cuenta y el uso excesivo de varias cuentas resultará en la cancelación de las mismas.
signUp=Registrarse
computersAreNotAllowedToPlay=No les está permitido jugar a las computadoras ni a jugadores asistidos por ellas. Por favor, no te ayudes de motores de ajedrez, bases de datos o de otros jugadores durante la partida. Además, ten en cuenta que se desaconseja la utilización de varias cuentas de usuario y que el uso de un excesivo número de cuentas resultará en la cancelación de las mismas.
games=Partidas
forum=Foro
xPostedInForumY=%s ha escrito en el foro %s
xPostedInForumY=%s ha escrito en el tema %s
latestForumPosts=Últimos mensajes del foro
players=Jugadores
minutesPerSide=Minutos por jugador
@ -84,28 +83,28 @@ oneDay=Un día
nbDays=%s días
nbHours=%s horas
time=Tiempo
rating=Puntos
rating=Puntuación
ratingStats=Estadísticas de puntuación
username=Nombre de usuario
usernameOrEmail=Nombre de usuario o email
password=Contraseña
haveAnAccount=¿Tienes una cuenta?
changePassword=Cambiar contraseña
changeEmail=Cambiar email
email=Email
emailIsOptional=El email es opcional. Lichess usará tu email para resetear tu contraseña si la olvidas.
changeEmail=Cambiar correo
email=Correo
emailIsOptional=El correo es opcional. Lichess usará tu correo para restaurar tu contraseña si la olvidas.
passwordReset=Cambiar contraseña
forgotPassword=¿Olvidaste tu contraseña?
rank=Posición
gamesPlayed=Partidas jugadas
nbGamesWithYou=%s de juegos contigo
nbGamesWithYou=%s partidas contigo
declineInvitation=Rechazar invitación
cancel=Cancelar
timeOut=Tiempo agotado
drawOfferSent=Propuesta de tablas enviada
drawOfferDeclined=Propuesta de tablas rechazada
drawOfferAccepted=Propuesta de tablas aceptada
drawOfferCanceled=Propuesta de tablas cancelada
drawOfferSent=Oferta de tablas enviada
drawOfferDeclined=Oferta de tablas rechazada
drawOfferAccepted=Oferta de tablas aceptada
drawOfferCanceled=Oferta de tablas cancelada
whiteOffersDraw=Las blancas ofrecen tablas
blackOffersDraw=Las negras ofrecen tablas
whiteDeclinesDraw=Las blancas rechazan tablas
@ -118,22 +117,22 @@ finished=Terminado
abortGame=Cancelar partida
gameAborted=Partida cancelada
standard=Estándar
unlimited=Sin límite
unlimited=Ilimitado
mode=Modo
casual=Amistosa
rated=Por puntos
thisGameIsRated=Esta partida es por puntos
rematch=Revancha
rematchOfferSent=Petición de revancha enviada
rematchOfferAccepted=Revancha aceptada
rematchOfferCanceled=Propuesta de revancha cancelada
rematchOfferDeclined=Propuesta de revancha rechazada
cancelRematchOffer=Cancelar propuesta de revancha
rematchOfferSent=Oferta de revancha enviada
rematchOfferAccepted=Oferta de revancha aceptada
rematchOfferCanceled=Oferta de revancha cancelada
rematchOfferDeclined=Oferta de revancha rechazada
cancelRematchOffer=Cancelar oferta de revancha
viewRematch=Ver revancha
play=Jugar
inbox=Buzón de entrada
inbox=Recibidos
chatRoom=Sala de chat
spectatorRoom=Chat del espectador
spectatorRoom=Chat de espectador
composeMessage=Escribir mensaje
noNewMessages=No hay mensajes nuevos
subject=Asunto
@ -142,17 +141,17 @@ send=Enviar
incrementInSeconds=Segundos de incremento
freeOnlineChess=Ajedrez en línea gratis
spectators=Espectadores:
nbWins=%s de victorias
nbLosses=%s de derrotas
nbDraws=%s de tablas
nbWins=%s victorias
nbLosses=%s derrotas
nbDraws=%s tablas
exportGames=Exportar partidas
ratingRange=Rango de puntuación
giveNbSeconds=Dar %s segundos
premoveEnabledClickAnywhereToCancel=Premovimiento activado; hacer clic en cualquier lugar para cancelarlo
premoveEnabledClickAnywhereToCancel=Pre-jugada activada - Hacer clic en cualquier lugar para cancelar
thisPlayerUsesChessComputerAssistance=Este jugador usa un motor de ajedrez
thisPlayerArtificiallyIncreasesTheirRating=Este jugador incrementa/disminuye artificialmente su puntaje
thisPlayerArtificiallyIncreasesTheirRating=Este jugador incrementa/disminuye artificialmente su puntuación
opening=Apertura
openingExplorer=Explorador de aperturas
openingExplorer=Explorador de aperturas y base de datos de finales
takeback=Deshacer jugada
proposeATakeback=Proponer deshacer jugada
takebackPropositionSent=Propuesta de deshacer jugada enviada
@ -160,7 +159,7 @@ takebackPropositionDeclined=Propuesta de deshacer jugada rechazada
takebackPropositionAccepted=Propuesta de deshacer jugada aceptada
takebackPropositionCanceled=Propuesta de deshacer jugada cancelada
yourOpponentProposesATakeback=Tu oponente propone deshacer la jugada
bookmarkThisGame=Marcar este juego
bookmarkThisGame=Marcar este juego como favorito
search=Buscar
advancedSearch=Búsqueda avanzada
tournament=Torneo
@ -169,7 +168,7 @@ tournamentPoints=Puntos de torneo
viewTournament=Ver torneo
backToTournament=Regresar al torneo
backToGame=Volver a la partida
freeOnlineChessGamePlayChessNowInACleanInterfaceNoRegistrationNoAdsNoPluginRequiredPlayChessWithComputerFriendsOrRandomOpponents=Ajedrez en línea gratis. Juega ajedrez en una interfaz limpia. Sin registrarse, sin publicidad, sin plugins. Juega ajedrez contra el ordenador, amigos u oponentes aleatorios.
freeOnlineChessGamePlayChessNowInACleanInterfaceNoRegistrationNoAdsNoPluginRequiredPlayChessWithComputerFriendsOrRandomOpponents=Servidor de ajedrez en línea gratuito. Juega al ajedrez en una interfaz simple. Sin registro, sin publicidad, sin necesidad de complementos. Juega contra el ordenador, amigos u oponentes desconocidos.
teams=Equipos
nbMembers=%s miembros
allTeams=Todos los equipos
@ -182,25 +181,25 @@ anyoneCanJoin=Cualquiera puede unirse
aConfirmationIsRequiredToJoin=Se requiere una confirmación para unirse
joiningPolicy=Política para unirse
teamLeader=Capitán del equipo
teamBestPlayers=Mejores jugadores del equipo
teamRecentMembers=Miembros recientes del equipo
teamBestPlayers=Mejores jugadores
teamRecentMembers=Miembros recientes
xJoinedTeamY=%s se unió al equipo %s
xCreatedTeamY=%s creó el equipo %s
averageElo=Clasificación promedio
averageElo=Puntuación promedio
location=Ubicación
settings=Configuración
filterGames=Filtrar partidas
reset=Resetear
apply=Aplicar
apply=Enviar
leaderboard=Clasificación
pasteTheFenStringHere=Pega el texto FEN aquí
pasteThePgnStringHere=Pega el texto PGN aquí
fromPosition=Desde posición
continueFromHere=Continuar desde aquí
importGame=Importar partida
nbImportedGames=%s de partidas importadas
thisIsAChessCaptcha=Esto es un CAPTCHA de ajedrez
clickOnTheBoardToMakeYourMove=Haz clic en el tablero para hacer tu movimiento y demostrar que eres humano.
nbImportedGames=%s Partidas importadas
thisIsAChessCaptcha=Esto es un CAPTCHA de ajedrez.
clickOnTheBoardToMakeYourMove=Haz clic en el tablero para hacer tu jugada y demostrar que eres humano.
notACheckmate=No es jaque mate
colorPlaysCheckmateInOne=%s juegan; mate en una
retry=Reintentar

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Vaata %s matti
nbBookmarks=%s järjehoidjad
nbPopularGames=Vaata %s populaarset
nbAnalysedGames=Vaata %s analüüsituid
bookmarkedByNbPlayers=Märgitud mängija %s poolt
viewInFullSize=Vaata täisekraanil
logOut=Logi välja
signIn=Logi sisse

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s Xake-mate
nbBookmarks=%s partida nabarmenduak
nbPopularGames=%s jendearen gustuko partida
nbAnalysedGames=%s Analizatutako partida kopurua
bookmarkedByNbPlayers=%s jokalarik nabarmendu dute
viewInFullSize=Pantaila osoa
logOut=Irten
signIn=Sartu

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s کیش و مات
nbBookmarks=%s بازی مورد علاقه
nbPopularGames=%s بازی پرطرفدار
nbAnalysedGames=%s بازی آنالیز شده
bookmarkedByNbPlayers=نشانه گذاری شده توسط %s بازیکن
viewInFullSize=تماشا کردن در اندازه کامل
logOut=خروج
signIn=ورود

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Katso %s shakkimatit
nbBookmarks=%s omaa kirjanmerkkiä
nbPopularGames=%s suosittua peliä
nbAnalysedGames=%s analysoitua peliä
bookmarkedByNbPlayers=%s kirjanmerkkiä
viewInFullSize=Näytä täyskokoisena
logOut=Kirjaudu ulos
signIn=Kirjaudu sisään

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Voir les %s mats
nbBookmarks=%s favoris
nbPopularGames=%s parties populaires
nbAnalysedGames=%s parties analysées
bookmarkedByNbPlayers=Mis en favoris par %s joueurs
viewInFullSize=Agrandir
logOut=Déconnexion
signIn=Connexion

View File

@ -59,7 +59,6 @@ viewAllNbGames=%s Cluiche
viewNbCheckmates=%s Marbhsháinn
nbBookmarks=%s Leabharmharc
nbAnalysedGames=%s Cluichí ainilísithe
bookmarkedByNbPlayers=Leabharmharc déanta ag %s imreoir
viewInFullSize=Amharc lánmhéide
logOut=Logáil amach
signIn=Logáil isteach

View File

@ -58,7 +58,6 @@ viewNbCheckmates=%s tul-chaisg
nbBookmarks=%s comharran-lìn
nbPopularGames=%s geamannan mòr-chòrdte
nbAnalysedGames=%s geamannan sgrùdaichte
bookmarkedByNbPlayers=Comharra-leabhair le %s cluicheadairean
viewInFullSize=Seall sa mheud iomlan
logOut=Log a-mach
signIn=Log a-steach

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s Xaques mates
nbBookmarks=%s Marcadores
nbPopularGames=%s Xogos máis populares
nbAnalysedGames=%s Partidas analizadas
bookmarkedByNbPlayers=Marcado por %s xogadores
viewInFullSize=Ver a tamaño completo
logOut=Pechar sesión
signIn=Iniciar sesión

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s מטים
nbBookmarks=%s מועדפים
nbPopularGames=%s משחקים פופולריים
nbAnalysedGames=משחקים מנותחים %s
bookmarkedByNbPlayers=הועדף על ידי %s שחקנים
viewInFullSize=צפה בגודל מלא
logOut=התנתק
signIn=התחבר

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s सह मात
nbBookmarks=%s पृष्ठ स्मृतियाँ
nbPopularGames=%s प्रसिद्ध खेल
nbAnalysedGames=%s विश्लेषित खेल
bookmarkedByNbPlayers=%s खिलाड़ियों द्वारा इसकी पृष्ठ स्मृति बनायीं गयी
viewInFullSize=पूर्ण आकर में देखें
logOut=खाते से बाहर प्रवेश करें
signIn=खाते में प्रवेश करें

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Pogledaj %s šah-mata
nbBookmarks=Označeno %s partija
nbPopularGames=%s popularnih partija
nbAnalysedGames=%s analiziranih partija
bookmarkedByNbPlayers=Označilo %s igrača
viewInFullSize=Pogledaj u punoj veličini
logOut=Odjavi se
signIn=Prijavi se

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s Matt
nbBookmarks=%s Megjelölés
nbPopularGames=%s Népszerű Játék
nbAnalysedGames=%s Elemzett játék
bookmarkedByNbPlayers=%s játékos könyvjelzőzte
viewInFullSize=Teljes méret
logOut=Kijelentkezés
signIn=Bejelentkezés

View File

@ -58,7 +58,6 @@ viewNbCheckmates=Տեսնել %s մատերը
nbBookmarks=%s Էջանիշեր
nbPopularGames=%s Հանրաճանաչ խաղերը
nbAnalysedGames=%s Վերլուծված խաղեր
bookmarkedByNbPlayers=էջանշվել է %s խաղացողների կողնից
viewInFullSize=Մեծացնել չափը
logOut=Ելք
signIn=Մուտք

View File

@ -1,15 +1,15 @@
playWithAFriend=Bermain melawan teman
playWithTheMachine=Bermain melawan komputer
toInviteSomeoneToPlayGiveThisUrl=Untuk mengundang seseorang untuk bermain, berikan URL berikut
toInviteSomeoneToPlayGiveThisUrl=Undang yang lain dengan memberikan URL berikut
gameOver=Permainan berakhir
waitingForOpponent=Menunggu lawan
waiting=Menunggu
yourTurn=Giliran anda
yourTurn=Giliran Anda
aiNameLevelAiLevel=%s level %s
level=Level
toggleTheChat=Ganti tampilan chat
toggleSound=Aktifkan/nonaktifkan suara
chat=mengobrol
chat=Mengobrol
resign=Menyerah
checkmate=Skakmat
stalemate=Pat
@ -19,27 +19,27 @@ randomColor=Warna acak
createAGame=Mulai permainan baru
whiteIsVictorious=Putih menang
blackIsVictorious=Hitam menang
kingInTheCenter=Raja di tengah
threeChecks=Tiga skak
raceFinished=Balapan berakhir
kingInTheCenter=Raja telah di centrum
threeChecks=Tiga kali skak
raceFinished=Balapan telah berakhir
variantEnding=Variasi Babak Akhir
newOpponent=Penantang baru
yourOpponentWantsToPlayANewGameWithYou=Lawan anda ingin bermain lagi dengan anda
yourOpponentWantsToPlayANewGameWithYou=Lawan Anda ingin bermain lagi dengan Anda
joinTheGame=Ikuti permainan
whitePlays=Giliran putih
blackPlays=Giliran hitam
whitePlays=Putih melangkah
blackPlays=Hitam melangkah
theOtherPlayerHasLeftTheGameYouCanForceResignationOrWaitForHim=Pemain lainnya telah meninggalkan permainan. Anda bisa klaim kemenangan, menyatakan remis, atau menunggunya.
makeYourOpponentResign=Buat lawan anda menyerah.
makeYourOpponentResign=Klaim menang
forceResignation=Klaim menang
forceDraw=Paksa remis
talkInChat=Bicara dalam chat
theFirstPersonToComeOnThisUrlWillPlayWithYou=Orang pertama yang datang ke URL ini akan bermain dengan anda
forceDraw=Nyatakan remis
talkInChat=Silahkan mengobrol dengan sopan
theFirstPersonToComeOnThisUrlWillPlayWithYou=Orang pertama yang datang ke URL ini akan bermain dengan Anda
whiteResigned=Putih menyerah
blackResigned=Hitam menyerah
whiteLeftTheGame=Putih telah meninggalkan permainan
blackLeftTheGame=Hitam telah meninggalkan permainan
shareThisUrlToLetSpectatorsSeeTheGame=Berbagi URL ini untuk mengundang orang menonton permainan
theComputerAnalysisHasFailed=Analisis komputer gagal
theComputerAnalysisHasFailed=Analisis komputer gagal dilakukan
viewTheComputerAnalysis=Lihat analisis komputer
requestAComputerAnalysis=Minta analisis komputer
computerAnalysis=Analisis komputer
@ -49,23 +49,22 @@ mistakes=Kesalahan
inaccuracies=Ketidaktepatan
moveTimes=Waktu gerak
flipBoard=Putar papan catur
threefoldRepetition=Pengulangan 3x posisi sama
threefoldRepetition=Pengulangan 3x posisi yang sama
claimADraw=Klaim remis
offerDraw=Tawar remis
offerDraw=Tawarkan remis
draw=Remis
nbConnectedPlayers=%s pemain tersambung
gamesBeingPlayedRightNow=Permainan saat ini
viewAllNbGames=Lihat semua %s Permainan
viewNbCheckmates=Lihat semua %s Skakmat
nbBookmarks=%s Simpan halaman
nbPopularGames=%s Permainan populer
nbBookmarks=%s Halaman Ditandai
nbPopularGames=%s Permainan Terpopuler
nbAnalysedGames=%s Analisa permainan
bookmarkedByNbPlayers=Halaman telah ditandai oleh %s pemain
viewInFullSize=Lihat dalam ukuran penuh
logOut=Keluar
signIn=Masuk
newToLichess=Baru di Lichess?
youNeedAnAccountToDoThat=Anda membutuhkan nama pengguna untuk melakukannya
youNeedAnAccountToDoThat=Anda perlu mendaftar untuk melakukannya
signUp=Daftar
computersAreNotAllowedToPlay=Komputer maupun pemain yang menggunakan bantuan komputer dilarang bermain. Mohon untuk tidak menggunakan bantuan dari program komputer, database, maupun pemain lain ketika bermain. Juga menggunakan beberapa akun bersamaan sangat dilarang dan akan mengakibatkan akun anda di-BANNED!
games=Permainan
@ -73,9 +72,9 @@ forum=Forum
xPostedInForumY=%s postingan dalam topik %s
latestForumPosts=Pesan forum terbaru
players=Pemain
minutesPerSide=Menit untuk tiap sisi
variant=Variasi
variants=Varian
minutesPerSide=Menit untuk tiap pihak
variant=Variasi permainan
variants=Varian permainan
timeControl=Kontrol waktu
realTime=Langsung
correspondence=Korespondensi
@ -87,7 +86,7 @@ time=Waktu
rating=Rating
ratingStats=Statistik rating
username=Nama pengguna
usernameOrEmail=Nama pengguna
usernameOrEmail=Nama pengguna atau email
password=Kata kunci
haveAnAccount=Punya akun?
changePassword=Ganti kata kunci

View File

@ -45,7 +45,6 @@ viewNbCheckmates=%s Mortoshaki
nbBookmarks=%s Paginomarki
nbPopularGames=%s Populara Ludi
nbAnalysedGames=%s Analizita Ludi
bookmarkedByNbPlayers=Paginomarkizita da %s luderi
viewInFullSize=Vidar plengrande
logOut=Eksalutar
signIn=Ensalutar

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s Mát
nbBookmarks=%s Geymt
nbPopularGames=%s Vinsælir leikir
nbAnalysedGames=%s Yfirfarnir Leikir
bookmarkedByNbPlayers=Geymt af %s leikmönnun
viewInFullSize=Skoða í fullri mynd
logOut=Skrá út
signIn=Skrá inn

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s Scacchi matti
nbBookmarks=%s Preferiti
nbPopularGames=%s Partite più viste
nbAnalysedGames=%s Partite analizzate
bookmarkedByNbPlayers=Preferito da %s giocatori
viewInFullSize=Visualizza a schermo intero
logOut=Esci
signIn=Entra

View File

@ -60,7 +60,6 @@ viewNbCheckmates=チェックメイト(全%s回を見る
nbBookmarks=%s個の ブックマーク
nbPopularGames=%s 局の人気の対局
nbAnalysedGames=%s 局の解析済み対局
bookmarkedByNbPlayers=%s 人がブックマークしています
viewInFullSize=フルサイズで見る
logOut=ログアウト
signIn=ログイン

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s caxmati
nbBookmarks=%s da se tcita
nbPopularGames=%s sopselnei nunjvi
nbAnalysedGames=%s da se lanli selkei
bookmarkedByNbPlayers=gau %s da tcita
viewInFullSize=viska fau lo nu nilbra fa lo cnano
logOut=co'u pilno lo jaspu
signIn=co'a pilno lo jaspu

View File

@ -59,7 +59,6 @@ viewNbCheckmates=%s შამათი
nbBookmarks=%s ჩანიშნული თამაში
nbPopularGames=%s პოპულარული თამაში
nbAnalysedGames=%s გაანალიზებული თამაში
bookmarkedByNbPlayers=ჩანიშნულია %s მოთამაშის მიერ
viewInFullSize=სრული ზომით ნახვა
logOut=გამოსვლა
signIn=შესვლა

View File

@ -55,7 +55,6 @@ viewNbCheckmates=Walli %s mat
nbBookmarks=%s Inurifen
nbPopularGames=%s Timlilit yimeẓwiyen
nbAnalysedGames=%s Timlilit iselḍen
bookmarkedByNbPlayers=Erren s umenyaf ɣer %s imariren
viewInFullSize=Ssemɣweṛ
logOut=Asenser
signIn=Tuqqna

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s건의 체크메이트
nbBookmarks=%s개의 즐겨찾기
nbPopularGames=%s개의 인기 게임
nbAnalysedGames=%s개의 분석된 게임
bookmarkedByNbPlayers=%s명의 플레이어가 즐겨찾기 함
viewInFullSize=크게 보기
logOut=로그아웃
signIn=로그인

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s matti
nbBookmarks=%s bookmarks
nbPopularGames=%s populares lusiones
nbAnalysedGames=%s studiti lusiones
bookmarkedByNbPlayers=A %s lusoribus signatis
viewInFullSize=Integro modo vide
logOut=Conventum claudere
signIn=Conventum aperire

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s cH3cKm@73$
nbBookmarks=%s 800kM@rk$
nbPopularGames=%s P0pUl@r gam3$
nbAnalysedGames=%s @nalY$ed GaM35
bookmarkedByNbPlayers=8o0kM@rk3d 8y %s pl@Y3r5
viewInFullSize=Vi3w iN FulL 5iZ3
logOut=sIgn 0u7
signIn=5IgN IN

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Matų: %s
nbBookmarks=Pasižymėtų partijų: %s
nbPopularGames=Populiarių partijų: %s
nbAnalysedGames=Išanalizuotų partijų: %s
bookmarkedByNbPlayers=Pasižymėjusių žaidėjų: %s
viewInFullSize=Žiūrėti visu dydžiu
logOut=Atsijungti
signIn=Prisijungti

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Apskatīt %s matus
nbBookmarks=%s Grāmatzīmes
nbPopularGames=%s Populārās spēles
nbAnalysedGames=%s Analizētās spēles
bookmarkedByNbPlayers=Atzīmējuši %s spēlētāji
viewInFullSize=Skatīt pilnā izmērā
logOut=Atslēgties
signIn=Pieslēgties

View File

@ -55,7 +55,6 @@ viewNbCheckmates=%s Echéc et mat
nbBookmarks=%s Bookmarks
nbPopularGames=%s ny lalao malaza
nbAnalysedGames=%s ny lalao voahadihady
bookmarkedByNbPlayers=Nankafizin'ny mpilalao %s
viewInFullSize=Alehibiazo
logOut=Mivoaha
signIn=Midira

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Види %s шах-матови
nbBookmarks=%s обележувачи
nbPopularGames=%s омилени игри
nbAnalysedGames=%s анализирани игри
bookmarkedByNbPlayers=Обележано од %s играчи
viewInFullSize=Гледај во полна големина
logOut=Одјави се
signIn=Најави се

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Бүх %s мадаар төгссөн өргүүд
nbBookmarks=%s хадгалсан өргүүд
nbPopularGames=%s хамгийн их хадгалагдсан өргүүд
nbAnalysedGames=%s шинжилгээ хийгдсэн өргүүд
bookmarkedByNbPlayers=%s гишүүд энэхүү өргийг хадгалсан байна
viewInFullSize=Бүрэн хэмжээсээр харах
logOut=Гарах
signIn=Нэвтрэх

View File

@ -56,7 +56,6 @@ viewNbCheckmates=सर्व %s शह देउन मात पाहा
nbBookmarks=%s आवडते
nbPopularGames=%s प्रसिद्ध डाव
nbAnalysedGames=%s विश्लेषीत खेळ
bookmarkedByNbPlayers=%s यांचे आवडते डाव
viewInFullSize=अधिकतम आकारात पाहा
logOut=बाहेर पडा
signIn=प्रवेश करा

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Se %s sjakkmatter
nbBookmarks=%s bokmerker
nbPopularGames=%s populære partier
nbAnalysedGames=%s analyserte partier
bookmarkedByNbPlayers=Bokmerket av %s spillere
viewInFullSize=Se i full størrelse
logOut=Logg ut
signIn=Logg inn

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Alle %s partijen met schaakmat
nbBookmarks=%s Favorieten
nbPopularGames=%s Populaire partijen
nbAnalysedGames=%s Geanalyseerde partijen
bookmarkedByNbPlayers=Aan favorieten toegevoegd door %s spelers
viewInFullSize=Bekijk op volledige grootte
logOut=Afmelden
signIn=Aanmelden

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Sjå %s sjakkmatt
nbBookmarks=%s Bokmerke
nbPopularGames=%s Populære Parti
nbAnalysedGames=%s Analyserte Parti
bookmarkedByNbPlayers=Bokmerka av %s spelarar
viewInFullSize=Sjå i full storleik
logOut=Logg ut
signIn=Logg inn

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s matów
nbBookmarks=%s zakładek
nbPopularGames=%s popularnych gier
nbAnalysedGames=%s przeanalizowanych gier
bookmarkedByNbPlayers=Dodane do zakładek przez %s graczy
viewInFullSize=Zobacz w pełnym rozmiarze
logOut=Wyloguj się
signIn=Zaloguj się

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s Xeques-mates
nbBookmarks=%s Favoritos
nbPopularGames=%s Partidas populares
nbAnalysedGames=%s Partidas analisadas
bookmarkedByNbPlayers=Favorita de %s jogadores
viewInFullSize=Ver em tela cheia
logOut=Sair
signIn=Entrar

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s maturi
nbBookmarks=%s marcate
nbPopularGames=%s partide populare
nbAnalysedGames=%s partide analizate
bookmarkedByNbPlayers=Marcat de %s jucatori
viewInFullSize=Vezi la dimensiune completă
logOut=Deconectare
signIn=Autentificare

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Посмотреть все партии %s, закончивш
nbBookmarks=%s закладки
nbPopularGames=%s популярные игры
nbAnalysedGames=%s проанализированных игр
bookmarkedByNbPlayers=Добавило в закладки %s игроков
viewInFullSize=Посмотреть в полном размере
logOut=Выйти
signIn=Войти

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s Šach-maty
nbBookmarks=%s Záložky
nbPopularGames=%s Populárne hry
nbAnalysedGames=%s Analyzovaných hier
bookmarkedByNbPlayers=Záložku uložilo %s hráčov
viewInFullSize=Zobraziť v plnej veľkosti
logOut=Odhlásiť sa
signIn=Prihlásiť sa

View File

@ -60,7 +60,6 @@ viewNbCheckmates=%s mat pozicij
nbBookmarks=%s zaznamkov
nbPopularGames=%s priljubljenih partij
nbAnalysedGames=%s analiziranih Iger
bookmarkedByNbPlayers=%s krat označeno
viewInFullSize=Pogled v polni velikosti
logOut=Odjava
signIn=Prijava

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Shihni shah-matet %s
nbBookmarks=%s Faqeruajtës
nbPopularGames=%s Lojra Popullore
nbAnalysedGames=%s Lojra të shqyrtuara
bookmarkedByNbPlayers=Faqeruajtur prej %s lojtarësh
viewInFullSize=Shihe në madhësi të plotë
logOut=Dilni
signIn=Hyni

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Види %s шахматове
nbBookmarks=%s Обележивачи
nbPopularGames=%s Популарне партије
nbAnalysedGames=%s Анализирана партија
bookmarkedByNbPlayers=Обележено од %s играча
viewInFullSize=Погледај у пуној величини
logOut=Одјави се
signIn=Пријави се

View File

@ -60,7 +60,6 @@ viewNbCheckmates=Visa %s schackmatt
nbBookmarks=%s Bokmärken
nbPopularGames=%s Populära partier
nbAnalysedGames=%s Analyserade partier
bookmarkedByNbPlayers=Bokmärkt av %s spelare
viewInFullSize=Visa i full storlek
logOut=Logga ut
signIn=Logga in

Some files were not shown because too many files have changed in this diff Show More