Merge branch 'master' into autocomplete
commit
bb370dcc6e
|
@ -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
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
sudo: false
|
||||
language: scala
|
||||
|
||||
# https://docs.travis-ci.com/user/notifications/#IRC-notification
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"> @trans.reconnecting()</a>
|
||||
<a id="reconnecting" class="fright link" onclick="window.location.reload()" data-icon="B"> @trans.reconnecting()</a>
|
||||
</div>
|
||||
<div id="fpmenu">@fpmenu()</div>
|
||||
<div class="content @ctx.is3d.fold("is3d", "is2d")">
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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");
|
|
@ -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");
|
|
@ -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);
|
||||
}
|
||||
});
|
|
@ -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
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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 (~_)
|
||||
}
|
|
@ -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"
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) })
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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, _) }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -60,7 +60,6 @@ viewNbCheckmates=%s لعبة منتهية بكش مات
|
|||
nbBookmarks=%s اللعبات المفضلة
|
||||
nbPopularGames=%s مباريات رائجة
|
||||
nbAnalysedGames=%s مباريات محللة بالحاسب
|
||||
bookmarkedByNbPlayers=فضلها %s لاعب
|
||||
viewInFullSize=عرض بالحجم الكامل
|
||||
logOut=خروج
|
||||
signIn=دخول
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -59,7 +59,6 @@ viewNbCheckmates=Глядзець %s маты
|
|||
nbBookmarks=%s Закладкі
|
||||
nbPopularGames=%s Папулярныя гульні
|
||||
nbAnalysedGames=%s Прааналізаваных гульняў
|
||||
bookmarkedByNbPlayers=Дададзена ў закладкі %s гульцамі
|
||||
viewInFullSize=Глядзець у поўным памеры
|
||||
logOut=Выйсьці
|
||||
signIn=Увайсьці
|
||||
|
|
|
@ -60,7 +60,6 @@ viewNbCheckmates=Виж %s шах мата
|
|||
nbBookmarks=%s Отбелязани
|
||||
nbPopularGames=%s Известни игри
|
||||
nbAnalysedGames=%s Проучени игри
|
||||
bookmarkedByNbPlayers=Отбелязана от %s играчи
|
||||
viewInFullSize=Гледай на пълен екран
|
||||
logOut=Излез
|
||||
signIn=Влез
|
||||
|
|
|
@ -59,7 +59,6 @@ viewNbCheckmates=%s টি কিস্তিমাত
|
|||
nbBookmarks=%s টি বুকমার্ক
|
||||
nbPopularGames=%s টি জনপ্রিয় খেলা
|
||||
nbAnalysedGames=%s টি বিশ্লেষিত খেলা
|
||||
bookmarkedByNbPlayers=%s জন খেলোয়াড় খেলাটিকে Bookmark করেছেন
|
||||
viewInFullSize=পূর্ণ আকারে দেখুন
|
||||
logOut=প্রস্থান
|
||||
signIn=সাইন ইন
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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ó
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -60,7 +60,6 @@ viewNbCheckmates=%s Ματ
|
|||
nbBookmarks=%s Σελιδοδείκτες
|
||||
nbPopularGames=%s Δημοφιλή παιχνίδια
|
||||
nbAnalysedGames=%s Αναλυμένα παιχνίδια
|
||||
bookmarkedByNbPlayers=Προστέθηκε ως σελιδοδείκτης από %s παίκτες
|
||||
viewInFullSize=Προβολή σε πλήρες μέγεθος
|
||||
logOut=Έξοδος
|
||||
signIn=Είσοδος
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -60,7 +60,6 @@ viewNbCheckmates=%s کیش و مات
|
|||
nbBookmarks=%s بازی مورد علاقه
|
||||
nbPopularGames=%s بازی پرطرفدار
|
||||
nbAnalysedGames=%s بازی آنالیز شده
|
||||
bookmarkedByNbPlayers=نشانه گذاری شده توسط %s بازیکن
|
||||
viewInFullSize=تماشا کردن در اندازه کامل
|
||||
logOut=خروج
|
||||
signIn=ورود
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -60,7 +60,6 @@ viewNbCheckmates=%s מטים
|
|||
nbBookmarks=%s מועדפים
|
||||
nbPopularGames=%s משחקים פופולריים
|
||||
nbAnalysedGames=משחקים מנותחים %s
|
||||
bookmarkedByNbPlayers=הועדף על ידי %s שחקנים
|
||||
viewInFullSize=צפה בגודל מלא
|
||||
logOut=התנתק
|
||||
signIn=התחבר
|
||||
|
|
|
@ -60,7 +60,6 @@ viewNbCheckmates=%s सह मात
|
|||
nbBookmarks=%s पृष्ठ स्मृतियाँ
|
||||
nbPopularGames=%s प्रसिद्ध खेल
|
||||
nbAnalysedGames=%s विश्लेषित खेल
|
||||
bookmarkedByNbPlayers=%s खिलाड़ियों द्वारा इसकी पृष्ठ स्मृति बनायीं गयी
|
||||
viewInFullSize=पूर्ण आकर में देखें
|
||||
logOut=खाते से बाहर प्रवेश करें
|
||||
signIn=खाते में प्रवेश करें
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -58,7 +58,6 @@ viewNbCheckmates=Տեսնել %s մատերը
|
|||
nbBookmarks=%s Էջանիշեր
|
||||
nbPopularGames=%s Հանրաճանաչ խաղերը
|
||||
nbAnalysedGames=%s Վերլուծված խաղեր
|
||||
bookmarkedByNbPlayers=էջանշվել է %s խաղացողների կողնից
|
||||
viewInFullSize=Մեծացնել չափը
|
||||
logOut=Ելք
|
||||
signIn=Մուտք
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -60,7 +60,6 @@ viewNbCheckmates=チェックメイト(全%s回)を見る
|
|||
nbBookmarks=%s個の ブックマーク
|
||||
nbPopularGames=%s 局の人気の対局
|
||||
nbAnalysedGames=%s 局の解析済み対局
|
||||
bookmarkedByNbPlayers=%s 人がブックマークしています
|
||||
viewInFullSize=フルサイズで見る
|
||||
logOut=ログアウト
|
||||
signIn=ログイン
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -59,7 +59,6 @@ viewNbCheckmates=%s შამათი
|
|||
nbBookmarks=%s ჩანიშნული თამაში
|
||||
nbPopularGames=%s პოპულარული თამაში
|
||||
nbAnalysedGames=%s გაანალიზებული თამაში
|
||||
bookmarkedByNbPlayers=ჩანიშნულია %s მოთამაშის მიერ
|
||||
viewInFullSize=სრული ზომით ნახვა
|
||||
logOut=გამოსვლა
|
||||
signIn=შესვლა
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -60,7 +60,6 @@ viewNbCheckmates=%s건의 체크메이트
|
|||
nbBookmarks=%s개의 즐겨찾기
|
||||
nbPopularGames=%s개의 인기 게임
|
||||
nbAnalysedGames=%s개의 분석된 게임
|
||||
bookmarkedByNbPlayers=%s명의 플레이어가 즐겨찾기 함
|
||||
viewInFullSize=크게 보기
|
||||
logOut=로그아웃
|
||||
signIn=로그인
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -60,7 +60,6 @@ viewNbCheckmates=Види %s шах-матови
|
|||
nbBookmarks=%s обележувачи
|
||||
nbPopularGames=%s омилени игри
|
||||
nbAnalysedGames=%s анализирани игри
|
||||
bookmarkedByNbPlayers=Обележано од %s играчи
|
||||
viewInFullSize=Гледај во полна големина
|
||||
logOut=Одјави се
|
||||
signIn=Најави се
|
||||
|
|
|
@ -60,7 +60,6 @@ viewNbCheckmates=Бүх %s мадаар төгссөн өргүүд
|
|||
nbBookmarks=%s хадгалсан өргүүд
|
||||
nbPopularGames=%s хамгийн их хадгалагдсан өргүүд
|
||||
nbAnalysedGames=%s шинжилгээ хийгдсэн өргүүд
|
||||
bookmarkedByNbPlayers=%s гишүүд энэхүү өргийг хадгалсан байна
|
||||
viewInFullSize=Бүрэн хэмжээсээр харах
|
||||
logOut=Гарах
|
||||
signIn=Нэвтрэх
|
||||
|
|
|
@ -56,7 +56,6 @@ viewNbCheckmates=सर्व %s शह देउन मात पाहा
|
|||
nbBookmarks=%s आवडते
|
||||
nbPopularGames=%s प्रसिद्ध डाव
|
||||
nbAnalysedGames=%s विश्लेषीत खेळ
|
||||
bookmarkedByNbPlayers=%s यांचे आवडते डाव
|
||||
viewInFullSize=अधिकतम आकारात पाहा
|
||||
logOut=बाहेर पडा
|
||||
signIn=प्रवेश करा
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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ę
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -60,7 +60,6 @@ viewNbCheckmates=Посмотреть все партии %s, закончивш
|
|||
nbBookmarks=%s закладки
|
||||
nbPopularGames=%s популярные игры
|
||||
nbAnalysedGames=%s проанализированных игр
|
||||
bookmarkedByNbPlayers=Добавило в закладки %s игроков
|
||||
viewInFullSize=Посмотреть в полном размере
|
||||
logOut=Выйти
|
||||
signIn=Войти
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -60,7 +60,6 @@ viewNbCheckmates=Види %s шахматове
|
|||
nbBookmarks=%s Обележивачи
|
||||
nbPopularGames=%s Популарне партије
|
||||
nbAnalysedGames=%s Анализирана партија
|
||||
bookmarkedByNbPlayers=Обележено од %s играча
|
||||
viewInFullSize=Погледај у пуној величини
|
||||
logOut=Одјави се
|
||||
signIn=Пријави се
|
||||
|
|
|
@ -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
Loading…
Reference in New Issue