Merge branch 'master' into puzzle

* master:
  admin challenge API
  scala syntax
  Update sbt to 1.4.5
  fix importGame err is no longer a list
  New Crowdin updates (#7698)
  disarm another ref link
  remove captcha on team join request
  simplify monitoring after fishnet 2
puzzle
Thibault Duplessis 2020-12-14 16:08:24 +01:00
commit 58720bff80
39 changed files with 492 additions and 209 deletions

View File

@ -14,6 +14,7 @@ import lila.game.{ AnonCookie, Pov }
import lila.oauth.{ AccessToken, OAuthScope }
import lila.socket.Socket.SocketVersion
import lila.user.{ User => UserModel }
import lila.setup.ApiConfig
final class Challenge(
env: Env
@ -269,23 +270,7 @@ final class Challenge(
ChallengeIpRateLimit(HTTPRequest ipAddress req, cost = cost) {
ChallengeUserRateLimit(me.id, cost = cost) {
env.user.repo enabledById userId.toLowerCase flatMap { destUser =>
import lila.challenge.Challenge._
val timeControl = config.clock map {
TimeControl.Clock.apply
} orElse config.days.map {
TimeControl.Correspondence.apply
} getOrElse TimeControl.Unlimited
val challenge = lila.challenge.Challenge
.make(
variant = config.variant,
initialFen = config.position,
timeControl = timeControl,
mode = config.mode,
color = config.color.name,
challenger = ChallengeModel.toRegistered(config.variant, timeControl)(me),
destUser = destUser,
rematchOf = none
)
val challenge = makeOauthChallenge(config, me, destUser)
(destUser, config.acceptByToken) match {
case (Some(dest), Some(strToken)) => apiChallengeAccept(dest, challenge, strToken)
case _ =>
@ -311,6 +296,57 @@ final class Challenge(
)
}
def apiCreateAdmin(origName: String, destName: String) =
ScopedBody(_.Challenge.Write) { implicit req => admin =>
IfGranted(_.ApiChallengeAdmin, req, admin) {
env.user.repo.namePair(origName, destName) flatMap {
_ ?? { case (orig, dest) =>
env.setup.forms.api.admin
.bindFromRequest()
.fold(
err => BadRequest(apiFormError(err)).fuccess,
config => acceptOauthChallenge(dest, makeOauthChallenge(config, orig, dest.some))
)
}
}
}
}
private def makeOauthChallenge(config: ApiConfig, orig: UserModel, dest: Option[UserModel]) = {
import lila.challenge.Challenge._
val timeControl = config.clock map {
TimeControl.Clock.apply
} orElse config.days.map {
TimeControl.Correspondence.apply
} getOrElse TimeControl.Unlimited
lila.challenge.Challenge
.make(
variant = config.variant,
initialFen = config.position,
timeControl = timeControl,
mode = config.mode,
color = config.color.name,
challenger = ChallengeModel.toRegistered(config.variant, timeControl)(orig),
destUser = dest,
rematchOf = none
)
}
private def acceptOauthChallenge(dest: UserModel, challenge: ChallengeModel) =
env.challenge.api.oauthAccept(dest, challenge) map {
case None => BadRequest(jsonError("Couldn't create game"))
case Some(g) =>
Ok(
Json.obj(
"game" -> {
env.game.jsonView(g, challenge.initialFen) ++ Json.obj(
"url" -> s"${env.net.baseUrl}${routes.Round.watcher(g.id, "white")}"
)
}
)
)
}
private def apiChallengeAccept(
dest: UserModel,
challenge: lila.challenge.Challenge,
@ -323,16 +359,7 @@ final class Challenge(
_.fold(
err => BadRequest(jsonError(err.message)).fuccess,
scoped =>
if (scoped.user is dest)
env.challenge.api.oauthAccept(dest, challenge) map {
case None => BadRequest(jsonError("Couldn't create game"))
case Some(g) =>
Ok(
Json.obj(
"game" -> env.game.jsonView(g, challenge.initialFen)
)
)
}
if (scoped.user is dest) acceptOauthChallenge(dest, challenge)
else BadRequest(jsonError("dest and accept user don't match")).fuccess
)
}

View File

@ -15,7 +15,7 @@ final class Irwin(env: Env) extends LilaController(env) {
def saveReport =
ScopedBody(parse.json)(Nil) { req => me =>
isGranted(_.Admin, me) ?? {
IfGranted(_.Admin, req, me) {
req.body
.validate[lila.irwin.IrwinReport]
.fold(
@ -26,8 +26,8 @@ final class Irwin(env: Env) extends LilaController(env) {
}
def eventStream =
Scoped() { _ => me =>
isGranted(_.Admin, me) ?? {
Scoped() { req => me =>
IfGranted(_.Admin, req, me) {
noProxyBuffer(Ok.chunked(env.irwin.stream())).fuccess
}
}

View File

@ -246,14 +246,6 @@ abstract private[controllers] class LilaController(val env: Env)
OAuthServer.responseHeaders(scopes, Nil) { Unauthorized(jsonError(e.message)) }.fuccess
}
protected def OAuthSecure(
perm: Permission.Selector
)(f: RequestHeader => UserModel => Fu[Result]): Action[Unit] =
Scoped() { req => me =>
if (isGranted(perm, me)) f(req)(me)
else fuccess(forbiddenJsonResult)
}
protected def SecureOrScoped(perm: Permission.Selector)(
secure: Context => UserModel => Fu[Result],
scoped: RequestHeader => UserModel => Fu[Result]
@ -274,9 +266,15 @@ abstract private[controllers] class LilaController(val env: Env)
f: RequestHeader => UserModel => Fu[Result]
) =
Scoped() { req => me =>
if (isGranted(perm, me)) f(req)(me) else fuccess(forbiddenJsonResult)
IfGranted(perm, req, me)(f(req)(me))
}(req)
def IfGranted(perm: Permission.Selector)(f: => Fu[Result])(implicit ctx: Context): Fu[Result] =
if (isGranted(perm)) f else authorizationFailed
def IfGranted(perm: Permission.Selector, req: RequestHeader, me: UserModel)(f: => Fu[Result]): Fu[Result] =
if (isGranted(perm, me)) f else authorizationFailed(req)
protected def Firewall[A <: Result](a: => Fu[A])(implicit ctx: Context): Fu[Result] =
if (env.security.firewall accepts ctx.req) a
else keyPages.blacklisted.fuccess
@ -475,6 +473,11 @@ abstract private[controllers] class LilaController(val env: Env)
else fuccess(Results.Forbidden("Authorization failed")),
api = _ => fuccess(forbiddenJsonResult)
)
protected def authorizationFailed(req: RequestHeader): Fu[Result] =
negotiate(
html = fuccess(Results.Forbidden("Authorization failed")),
api = _ => fuccess(forbiddenJsonResult)
)(req)
protected def negotiate(html: => Fu[Result], api: ApiVersion => Fu[Result])(implicit
req: RequestHeader

View File

@ -1,6 +1,11 @@
package controllers
import ornicar.scalalib.Zero
import play.api.data._
import play.api.data.Forms._
import play.api.mvc._
import scala.annotation.nowarn
import views._
import lila.api.{ BodyContext, Context }
import lila.app._
@ -10,11 +15,6 @@ import lila.mod.UserSearch
import lila.report.{ Suspect, Mod => AsMod }
import lila.security.{ FingerHash, Permission }
import lila.user.{ User => UserModel, Title }
import ornicar.scalalib.Zero
import play.api.data._
import play.api.data.Forms._
import play.api.mvc._
import views._
final class Mod(
env: Env,
@ -480,8 +480,10 @@ final class Mod(
}
def eventStream =
OAuthSecure(_.Admin) { _ => _ =>
noProxyBuffer(Ok.chunked(env.mod.stream())).fuccess
Scoped() { req => me =>
IfGranted(_.Admin, req, me) {
noProxyBuffer(Ok.chunked(env.mod.stream())).fuccess
}
}
private def withSuspect[A](username: String)(f: Suspect => Fu[A])(implicit zero: Zero[A]): Fu[A] =

View File

@ -308,7 +308,7 @@ final class Team(
def requestForm(id: String) =
Auth { implicit ctx => me =>
OptionFuOk(api.requestable(id, me)) { team =>
forms.anyCaptcha map { html.team.request.requestForm(team, forms.request, _) }
fuccess(html.team.request.requestForm(team, forms.request))
}
}
@ -319,10 +319,7 @@ final class Team(
forms.request
.bindFromRequest()
.fold(
err =>
forms.anyCaptcha map { captcha =>
BadRequest(html.team.request.requestForm(team, err, captcha))
},
err => BadRequest(html.team.request.requestForm(team, err)).fuccess,
setup =>
api.createRequest(team, me, setup.message) inject Redirect(
routes.Team.show(team.id)

View File

@ -37,7 +37,7 @@ object importGame {
.fold(
err =>
frag(
pre(cls := "error")(err.toList mkString "\n"),
pre(cls := "error")(err),
br,
br
).some,

View File

@ -13,14 +13,13 @@ object request {
import trans.team._
def requestForm(t: lila.team.Team, form: Form[_], captcha: lila.common.Captcha)(implicit ctx: Context) = {
def requestForm(t: lila.team.Team, form: Form[_])(implicit ctx: Context) = {
val title = s"${joinTeam.txt()} ${t.name}"
views.html.base.layout(
title = title,
moreCss = cssTag("team"),
moreJs = captchaTag
moreCss = cssTag("team")
) {
main(cls := "page-menu page-small")(
bits.menu("requests".some),
@ -30,7 +29,6 @@ object request {
postForm(cls := "form3", action := routes.Team.requestCreate(t.id))(
form3.group(form("message"), trans.message())(form3.textarea(_)()),
p(willBeReviewed()),
views.html.base.captcha(form, captcha),
form3.actions(
a(href := routes.Team.show(t.slug))(trans.cancel()),
form3.submit(joinTeam())

View File

@ -589,6 +589,7 @@ POST /api/account/kid controllers.Account.apiKidPost
GET /api/account/preferences controllers.Pref.apiGet
POST /api/challenge/ai controllers.Setup.apiAi
POST /api/challenge/open controllers.Challenge.openCreate
POST /api/challenge/admin/:orig/:dest controllers.Challenge.apiCreateAdmin(orig: String, dest: String)
POST /api/challenge/:user controllers.Challenge.apiCreate(user: String)
POST /api/challenge/$id<\w{8}>/accept controllers.Challenge.apiAccept(id: String)
POST /api/challenge/$id<\w{8}>/decline controllers.Challenge.apiDecline(id: String)

View File

@ -517,8 +517,6 @@ object mon {
}
def status(enabled: Boolean) = gauge("fishnet.client.status").withTag("enabled", enabled)
def version(v: String) = gauge("fishnet.client.version").withTag("version", v)
def stockfish(v: String) = gauge("fishnet.client.engine.stockfish").withTag("version", v)
def python(v: String) = gauge("fishnet.client.python").withTag("version", v)
}
def queueTime(sender: String) = timer("fishnet.queue.db").withTag("sender", sender)
val acquire = future("fishnet.acquire")
@ -526,8 +524,6 @@ object mon {
def oldest(as: String) = gauge("fishnet.oldest").withTag("for", as)
object analysis {
object by {
def hash(client: String) = gauge("fishnet.analysis.hash").withTag("client", client)
def threads(client: String) = gauge("fishnet.analysis.threads").withTag("client", client)
def movetime(client: String) = histogram("fishnet.analysis.movetime").withTag("client", client)
def node(client: String) = histogram("fishnet.analysis.node").withTag("client", client)
def nps(client: String) = histogram("fishnet.analysis.nps").withTag("client", client)

View File

@ -32,7 +32,7 @@ object ByteArray {
implicit def fromBytes(value: Array[Byte]) = new ByteArray(value)
def parseBytes(s: List[String]) = ByteArray(s map parseByte toArray)
def parseBytes(s: List[String]) = ByteArray(s.map(parseByte).toArray)
private def parseByte(s: String): Byte = {
var i = s.length - 1

View File

@ -17,10 +17,6 @@ private object BSONHandlers {
x => BSONString(x.key)
)
import Client.{ Engine, Engines }
implicit val EngineBSONHandler = Macros.handler[Engine]
implicit val EnginesBSONHandler = Macros.handler[Engines]
import Client.Instance
implicit val InstanceBSONHandler = Macros.handler[Instance]

View File

@ -49,19 +49,15 @@ object Client {
case class Version(value: String) extends AnyVal with StringValue
case class Python(value: String) extends AnyVal with StringValue
case class UserId(value: String) extends AnyVal with StringValue
case class Engine(name: String)
case class Engines(stockfish: Engine)
case class Instance(
version: Version,
engines: Engines,
ip: IpAddress,
seenAt: DateTime
) {
def update(i: Instance): Option[Instance] =
if (i.version != version) i.some
else if (i.engines != engines) i.some
else if (i.ip != ip) i.some
else if (i.seenAt isAfter seenAt.plusMinutes(5)) i.some
else none

View File

@ -15,17 +15,8 @@ object JsonApi {
sealed trait Request {
val fishnet: Request.Fishnet
val stockfish: Request.Engine
def instance(ip: IpAddress) =
Client.Instance(
fishnet.version,
Client.Engines(
stockfish = Client.Engine(stockfish.name)
),
ip,
DateTime.now
)
def instance(ip: IpAddress) = Client.Instance(fishnet.version, ip, DateTime.now)
}
object Request {
@ -38,36 +29,19 @@ object JsonApi {
apikey: Client.Key
)
sealed trait Engine {
def name: String
}
case class BaseEngine(name: String) extends Engine
case class FullEngine(
name: String,
options: EngineOptions,
case class Stockfish(
flavor: Option[String]
) extends Engine {
) {
def isNnue = flavor.has("nnue")
}
case class EngineOptions(
threads: Option[String],
hash: Option[String]
) {
def threadsInt = threads flatMap (_.toIntOption)
def hashInt = hash flatMap (_.toIntOption)
}
case class Acquire(
fishnet: Fishnet,
stockfish: BaseEngine
fishnet: Fishnet
) extends Request
case class PostAnalysis(
fishnet: Fishnet,
stockfish: FullEngine,
stockfish: Stockfish,
analysis: List[Option[Evaluation.OrSkipped]]
) extends Request
with Result {
@ -79,7 +53,7 @@ object JsonApi {
case class CompleteAnalysis(
fishnet: Fishnet,
stockfish: FullEngine,
stockfish: Stockfish,
analysis: List[Evaluation.OrSkipped]
) {
@ -100,7 +74,7 @@ object JsonApi {
case class PartialAnalysis(
fishnet: Fishnet,
stockfish: FullEngine,
stockfish: Stockfish,
analysis: List[Option[Evaluation.OrSkipped]]
)
@ -179,9 +153,7 @@ object JsonApi {
implicit val ClientVersionReads = Reads.of[String].map(Client.Version(_))
implicit val ClientPythonReads = Reads.of[String].map(Client.Python(_))
implicit val ClientKeyReads = Reads.of[String].map(Client.Key(_))
implicit val EngineOptionsReads = Json.reads[Request.EngineOptions]
implicit val BaseEngineReads = Json.reads[Request.BaseEngine]
implicit val FullEngineReads = Json.reads[Request.FullEngine]
implicit val StockfishReads = Json.reads[Request.Stockfish]
implicit val FishnetReads = Json.reads[Request.Fishnet]
implicit val AcquireReads = Json.reads[Request.Acquire]
implicit val ScoreReads = Json.reads[Request.Evaluation.Score]

View File

@ -31,13 +31,9 @@ final private class Monitor(
) = {
Monitor.success(work, client)
val threads = result.stockfish.options.threadsInt
val userId = client.userId.value
val userId = client.userId.value
result.stockfish.options.hashInt foreach { monBy.hash(userId).update(_) }
result.stockfish.options.threadsInt foreach { monBy.threads(userId).update(_) }
monBy.totalSecond(userId).increment(sumOf(result.evaluations)(_.time) * threads.|(1) / 1000)
monBy.totalSecond(userId).increment(sumOf(result.evaluations)(_.time) / 1000)
if (result.stockfish.isNnue)
monBy
@ -85,9 +81,6 @@ final private class Monitor(
instances.groupMapReduce(_.version.value)(_ => 1)(_ + _) foreach { case (v, nb) =>
version(v).update(nb)
}
instances.groupMapReduce(_.engines.stockfish.name)(_ => 1)(_ + _) foreach { case (s, nb) =>
stockfish(s).update(nb)
}
}
private def monitorStatus(): Funit =

View File

@ -65,6 +65,7 @@ object Permission {
case object MonitoredMod extends Permission("MONITORED_MOD", "Monitored mod")
case object StudyAdmin extends Permission("STUDY_ADMIN", "Study admin")
case object ApiHog extends Permission("API_HOG", "API hog")
case object ApiChallengeAdmin extends Permission("API_CHALLENGE_ADMIN", "API Challenge admin")
case object LichessTeam
extends Permission(
@ -226,7 +227,8 @@ object Permission {
Prismic,
Coach,
Teacher,
ApiHog
ApiHog,
ApiChallengeAdmin
),
"Badge" -> List(
Developer,
@ -248,7 +250,7 @@ object Permission {
}.toSet
lazy val nonModPermissions: Set[Permission] =
Set(Beta, Prismic, Coach, Teacher, Developer, Verified, ApiHog)
Set(Beta, Prismic, Coach, Teacher, Developer, Verified, ApiHog, ApiChallengeAdmin)
lazy val modPermissions: Set[Permission] = all diff nonModPermissions

View File

@ -1,10 +1,10 @@
package lila.setup
import play.api.data._
import play.api.data.Forms._
import chess.format.FEN
import chess.variant.Variant
import play.api.data._
import play.api.data.Forms._
import lila.rating.RatingRange
import lila.user.{ User, UserContext }
@ -118,19 +118,21 @@ final class FormFactory {
"variant" -> optional(text.verifying(Variant.byKey.contains _))
def user(from: User) =
Form(
mapping(
variant,
clock,
"days" -> optional(days),
"rated" -> boolean,
"color" -> optional(color),
"fen" -> fenField,
"acceptByToken" -> optional(nonEmptyText)
)(ApiConfig.from)(_.>>)
.verifying("invalidFen", _.validFen)
.verifying("Invalid speed", _ validSpeed from.isBot)
)
Form(challengeMapping.verifying("Invalid speed", _ validSpeed from.isBot))
def admin = Form(challengeMapping)
private val challengeMapping =
mapping(
variant,
clock,
"days" -> optional(days),
"rated" -> boolean,
"color" -> optional(color),
"fen" -> fenField,
"acceptByToken" -> optional(nonEmptyText)
)(ApiConfig.from)(_.>>)
.verifying("invalidFen", _.validFen)
lazy val ai = Form(
mapping(

View File

@ -54,15 +54,10 @@ final private[team] class TeamForm(
val request = Form(
mapping(
"message" -> clean(text(minLength = 30, maxLength = 2000)),
Fields.gameId,
Fields.move
"message" -> clean(text(minLength = 30, maxLength = 2000))
)(RequestSetup.apply)(RequestSetup.unapply)
.verifying(captchaFailMessage, validateCaptcha _)
) fill RequestSetup(
message = "Hello, I would like to join the team!",
gameId = "",
move = ""
message = "Hello, I would like to join the team!"
)
val apiRequest = Form(single("message" -> optional(clean(text(minLength = 30, maxLength = 2000)))))
@ -132,7 +127,5 @@ private[team] case class TeamEdit(
}
private[team] case class RequestSetup(
message: String,
gameId: String,
move: String
message: String
)

View File

@ -72,6 +72,9 @@ final class UserRepo(val coll: Coll)(implicit ec: scala.concurrent.ExecutionCont
} yield xx -> yy
}
def namePair(x: ID, y: ID): Fu[Option[(User, User)]] =
pair(normalize(x), normalize(y))
def byOrderedIds(ids: Seq[ID], readPreference: ReadPreference): Fu[List[User]] =
coll.byOrderedIds[User, User.ID](ids, readPreference = readPreference)(_.id)

View File

@ -1 +1 @@
sbt.version=1.4.4
sbt.version=1.4.5

View File

@ -33,10 +33,10 @@
<item quantity="other">%s 人の新規フォロワーを獲得</item>
</plurals>
<plurals name="hostedNbSimuls">
<item quantity="other">%s 回の同時対局を主催</item>
<item quantity="other">%s 回の多面指しを主催</item>
</plurals>
<plurals name="joinedNbSimuls">
<item quantity="other">%s 回の同時対局に参加</item>
<item quantity="other">%s 回の多面指しに参加</item>
</plurals>
<plurals name="createdNbStudies">
<item quantity="other">%s 件の研究を作成</item>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="arenaTournaments">Arenos turnyrai</string>
<string name="isItRated">Ar jis vertinamas?</string>
<string name="willBeNotified">Jums bus pranešta apie turnyro pradžią, tad laukdami galite saugiai žaisti kitoje kortelėje.</string>
<string name="isRated">Šis turnyras yra vertinamas ir turės įtakos jūsų reitingui.</string>
@ -38,4 +39,6 @@ Kai tik baigiate partiją, grįžkite į turnyro laukiamąjį: tuomet būsite su
</plurals>
<string name="thisIsPrivate">Tai yra privatus turnyras</string>
<string name="shareUrl">Pasidalinkite šiuo adresu su žaidėjais: %s</string>
<string name="drawStreak">Lygiųjų sekos: kai žaidėjas turi vienas po kitos sekančias lygiąsias arenoje, tik pirmosios, arba trunkančios ilgiau negu %s ėjimų, lygiosios suteiks tašką. Lygiųjų seka gali būti nutraukta tik laimėjimu, ne pralaimėjimu ar lygiosiomis.</string>
<string name="history">Arenų istorija</string>
</resources>

View File

@ -3,4 +3,14 @@
<string name="broadcasts">Sendingar</string>
<string name="liveBroadcasts">Beinleiðis sendingar frá kappingum</string>
<string name="newBroadcast">Nýggj beinleiðis sending</string>
<string name="ongoing">Í gongd</string>
<string name="upcoming">Komandi</string>
<string name="completed">Liðug sending</string>
<string name="eventName">Navn á tiltaki</string>
<string name="eventDescription">Stutt lýsing av tiltaki</string>
<string name="fullDescription">Fullfíggjað lýsing av tiltaki</string>
<string name="fullDescriptionHelp">Valfrí long lýsing av sending. %1$s er tøkt. Longdin má vera styttri enn %2$s bókstavir.</string>
<string name="sourceUrl">Keldu-URL</string>
<string name="sourceUrlHelp">URL-leinki, ið Lichess fer at kanna til tess at fáa PGN dagføringar. Leinkið nýtist at vera alment atkomiligt á alnetinum.</string>
<string name="roundNumber">Nummar á umfari</string>
</resources>

View File

@ -1,2 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="lichessClasses">Klasės</string>
<string name="teachClassesOfChessStudents">Mokykite šachmatų mokinių klases su Lichess klasių įrankių paketu.</string>
<string name="features">Funkcijos</string>
<string name="quicklyGenerateSafeUsernames">Greitai mokiniams sugeneruokite saugius vartotojų vardus ir slaptažodžius</string>
<string name="messageAllStudents">Praneškite visiems mokiniams apie naują pamokų medžiagą</string>
<string name="freeForAllForever">100% nemokamas visiems ir visada, jokių reklamų ar sekimo įskiepių</string>
<string name="applyToBeLichessTeacher">Tapkite Lichess mokytoju</string>
<string name="noClassesYet">Dar nėra klasių.</string>
<string name="teachersX">Mokytojai: %s</string>
<string name="newClass">Nauja klasė</string>
<string name="closeClass">Uždaryti klasę</string>
<string name="closedByX">Uždaryta %s</string>
<string name="reopen">Atidaryti vėl</string>
<string name="removeStudent">Pašalinti mokinį</string>
<string name="removedStudents">Pašalinti</string>
<string name="inviteTheStudentBack">Pakviesti mokinį atgal</string>
<string name="sendAMessage">Siųsti žinutę visiems mokiniams.</string>
<string name="aLinkToTheClassWillBeAdded">Nuoroda į klasę bus automatiškai pridėta žinutės gale. Jums patiems jos pridėti nereikia.</string>
<string name="className">Klasės pavadinimas</string>
<string name="classDescription">Klasės aprašymas</string>
<string name="visibleByBothStudentsAndTeachers">Matoma ir klasės mokytojams ir klasės mokiniams</string>
<string name="teachersOfTheClass">Klasės mokytojai</string>
<string name="addLichessUsernames">Pridėkite Lichess vartotojų vardus norėdami pakviesti kaip mokytojus. Vienas vardas per eilutę.</string>
<string name="theyMustFirstApply">Pirmiausia jie turi aplikuotis kaip Lichess mokytojai.</string>
<string name="resetPassword">Atstatyti slaptažodį</string>
<string name="makeSureToCopy">Dabar būtinai nusikopijuokite ar nusirašykite slaptažodį. Daugiau jo nerodysime!</string>
<string name="passwordX">Slaptažodis: %s</string>
<string name="generateANewPassword">Sugeneruoti naują slaptažodį mokiniui</string>
<string name="invitedToXByY">%1$s pakviestas į %2$s</string>
<string name="realName">Tikras vardas</string>
<string name="privateWillNeverBeShown">Privatu. Nebus rodoma už klasės ribų. Padeda prisiminti, koks tai mokinys.</string>
<string name="addStudent">Pridėti mokinį</string>
<string name="lichessProfileXCreatedForY">Lichess profilis %1$s sukurtas %2$s.</string>
<string name="studentCredentials">Mokinys: %1$s
Vartotojo vardas: %2$s
Slaptažodis: %3$s</string>
<string name="inviteALichessAccount">Pakviesti Lichess vartotoją</string>
<string name="inviteDesc1">Jei mokinys jau turi Lichess paskyrą, galite jį pakviesti į klasę.</string>
<string name="inviteDesc2">Jie gaus žinutę su prisijungimo nuoroda per Lichess.</string>
<string name="inviteDesc3">Svarbu: pakvieskite tik mokinius, kuriuos pažįstate, ir kurie nori dalyvauti jūsų klasėje.</string>
<string name="inviteDesc4">Niekada nesiųskite pakvietimų atsitiktiniams žaidėjams.</string>
<string name="createANewLichessAccount">Kurti naują Lichess paskyrą</string>
<string name="createDesc1">Jei mokinys dar neturi Lichess paskyros, galite jam tokią sukurti čia.</string>
<string name="createDesc2">El. pašto adresas nereikalingas. Bus sugeneruotas slaptažodis, kurį turėsite perduoti mokiniui. Šiuo slaptažodžiu jis galės prisijungti.</string>
<string name="createDesc3">Svarbu: mokinys negali turėti kelių paskyrų.</string>
<string name="createDesc4">Jei jis jau turi paskyrą, naudokite pakvietimo formą.</string>
<string name="lichessUsername">Lichess vartotojo vardas</string>
<string name="generateANewUsername">Sugeneruoti naują vartotojo vardą</string>
<string name="welcomeToClass">Sveiki atvykę į klasę: %s
Štai nuoroda patekti į klasę.</string>
<string name="invitationToClass">Jūs buvote pakviestas prisijungti prie klasės \"%s\" kaip mokinys.</string>
<string name="clickToViewInvitation">Spustelėkite nuorodą norėdami peržiūrėti pakvietimą:</string>
</resources>

View File

@ -1,2 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="emailConfirm_subject">Vátta tína lichess.org-kontu, %s</string>
<string name="emailConfirm_click">Klikk á leinkið til tess at virkja tína Lichess kontu:</string>
<string name="emailConfirm_ignore">Um tú ikki hevur skrásett teg hjá Lichess, kanst tú síggja burtur frá hesum boðunum.</string>
<string name="passwordReset_subject">Set títt lichess.org-loyniorð av nýggjum, %s</string>
<string name="passwordReset_intro">Vit fingu eina umbøn um at endurseta loyniorðið til kontu tína.</string>
<string name="passwordReset_clickOrIgnore">Um tað var tú, ið kom við hesi umbøn, klikk á leinkið niðanfyri. Um tað ikki var tú, kanst tú síggja burtur frá hesum telduposti.</string>
<string name="emailChange_subject">Vátta nýggjan teldupostbústað, %s</string>
<string name="emailChange_intro">Tú hevur biðið um at broytt tín teldupostbústað.</string>
<string name="emailChange_click">Til tess at vátta, at tú hevur atgongd til henda teldupost, klikk vinaliga á leinkið niðanfyri:</string>
<string name="welcome_subject">Vælkomin til lichess.org, %s</string>
<string name="welcome_text">Tú hevur í øllum góðum ognað tær eina konto á https://lichess.org.
Her er tín vangamynd: %1$s. Tú kanst seta tín dám á hana á %2$s.
Góðan stuttleika, og gævi talvfólk tíni finna sær veg til kongin hjá mótstøðuleikaranum!</string>
<string name="logInToLichess">Rita inn á lichess.org, %s</string>
<string name="common_orPaste">(Riggar ikki at klikkja? Royn og flyt tað inn í tín kaga!)</string>
<string name="common_note">Hetta er ein tænastuteldupostur, ið hevur tilknýti til nýtslu tína av %s.</string>
<string name="common_contact">At fáa samband við okkum, nýt vinaliga %s.</string>
</resources>

View File

@ -10,6 +10,8 @@
<string name="emailChange_intro">Դուք ցանկացել եք փոխել Ձեր էլեկտրոնային հասցեն:</string>
<string name="emailChange_click">Որպեսզի հաստատեք այս էլ. փոստը, անցեք ստորև բերված հղումով:</string>
<string name="welcome_subject">Բարի գալուստ lichess.org, %s</string>
<string name="logInToLichess">Մուտք գործել lichess.org, %s</string>
<string name="common_orPaste">Քլիքը չի աշխատում? Փորձում ենք նորից դնել այն քո բրաուզերում:</string>
<string name="common_note">Սա ծառայության էլփոստ է, որը վերաբերում է ձեր կողմից %sի օգտագործմանը.</string>
<string name="common_contact">Օգտվեք մեզ հետ կապվելու համար</string>
</resources>

View File

@ -25,6 +25,9 @@
<string name="howCanIBecomeModerator">كيف يمكنني أن أصبح مشرفاً؟</string>
<string name="youCannotApply">ليس من الممكن التقدّم بطلب ان تكون مشرف. اذا رأينا شخصاً نعتقد انه سيكون جيداً كمشرف، سنقوم بالتواصل معهم مباشرة.</string>
<string name="gameplay">أسلوب اللعب</string>
<string name="officialRulesPDF">القواعد الرسمية (PDF)</string>
<string name="lichessTraining">التدريب في Lichess</string>
<string name="threefoldRepetitionExplanation">إذا تكرر موقف ثلاث مرات يمكن للاعبين إقتراح تعادل ب- %1$s. ينفذ Lichess القواعد الرسمية للاتحاد الدولي للشطرنج، كما هو مبين في المادة 9-2 (د) من القرار %2$s.</string>
<string name="notRepeatedMoves">لماذا انتهت المباراة بالتعادل على الرغم من أننا لم نقم بتكرير النقلات؟</string>
<string name="repeatedPositionsThatMatters">تكرار الوضعية ثلاثا عبارة عن تكرار %1$s وليس النقلات. لا تتطلب هذه القاعدة ظهور الوضعية ثلاثا بإعادة النقلات بشكل متتالي.</string>
<string name="positions">الوضعية</string>
@ -56,4 +59,10 @@
<string name="goldenZeeExplanation">حاول ZugAddict هزيمة المستوى 8 من ستوكفيش لساعتين متواصلتين بينما كان يقوم بالبث في مباراة 1+0 لكن لم يحالفه الحظ في النجاح. أخبره Thibault أنه إذا نجح في القيام بذلك أثناء البث فسوف يحصل على كأس فريد. بعد ذلك بساعة، قام بهزم المحرك هزيمة نكراء وتم الوفاء بالوعد.</string>
<string name="lichessRatings">تقييمات Lichess</string>
<string name="whichRatingSystemUsedByLichess">ما هو نظام التقييم الذي يستخدمه ليشيس؟</string>
<string name="provisionalRatingExplanation">علامة الاستفهام تعني أن التقييم مؤقت. الأسباب تشمل:</string>
<string name="notPlayedEnoughRatedGamesAgainstX">اللاعب لم يكمل بعد مباريات مصنفة كافية مقابل %1$s في فئة التصنيف.</string>
<string name="beInTopTen">كن من 10 الأوائل في هذا التقييم.</string>
<string name="displayPreferences">عرض التفضيلات الخاصة بك</string>
<string name="connexionLostCanIGetMyRatingBack">خسرت لعبة بسبب التخلف/قطع الاتصال. هل يمكنني استعادة نقاط التقييم الخاصة بي؟</string>
<string name="howToThreeDots">كيف يمكنني أن...</string>
</resources>

View File

@ -1,6 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="faqAbbreviation">lipu pi wile sona</string>
<string name="frequentlyAskedQuestions">lipu pi wile sona</string>
<string name="whyIsLichessCalledLichess">nimi pi lipu ni li \"Lichess\" tan seme?</string>
<string name="lichessCombinationLiveLightLibrePronounced">nimi Lichess li kulupu pi nimi ni: \"live/light/libre\" en \"chess\". o toki %1$s e ni.</string>
<string name="leechess">\"litesi\" </string>
<string name="hearItPronouncedBySpecialist">o kute e jan sona. ona li toki e nimi ni.</string>
<string name="whyLiveLightLibre">nimi \"live\" li lon tan ni: musi li lon lon tenpo suno ale. nimi \"light\" en nimi \"libre\" li lon tan ni: lipu Lichess li ijo pi tan open li jo ala e ijo ike pi esun lawa. lipu ante la ijo ike ni li lon.</string>
<string name="whyIsLilaCalledLila">sama la kon pi toki ilo tan pi lipu Lichess (%1$s) li ni: \"li[chess in sca]la\". ni li lon tan ni: jan li sitelen e toki ilo mute pi lipu Lichess. toki ni li pona tawa kama sona.</string>
<string name="howCanIContributeToLichess">mi ken pona seme e lipu Lichess?</string>
<string name="lichessPoweredByDonationsAndVolunteers">lipu Lichess li kama wawa tan ni: jan li pana e mani tawa ni. jan wile li pali lon lipu Lichess.</string>
<string name="fairPlay">musi pona</string>
<string name="gameplay">musi</string>
<string name="positions">lon</string>

View File

@ -65,7 +65,7 @@
<string name="protectionComplete">Til lukku! Ikki at missa eitt fólk er at vinna eitt fólk!</string>
<string name="escape">Tú ert undir álopi! Rým undan vandanum!</string>
<string name="noEscape">Tað ber ikki til at rýma, men tú kanst verja!</string>
<string name="dontLetThemTakeAnyUndefendedPiece">Ikki lata tey taka nøkur óvard fólk!</string>
<string name="dontLetThemTakeAnyUndefendedPiece">Ikki lata tey taka nakað óvart fólk!</string>
<string name="combat">Bardagi</string>
<string name="captureAndDefendPieces">Tak og verj fólk</string>
<string name="combatIntro">Ein góður stríðsmaður kennir bæði álop og verju!</string>
@ -170,13 +170,13 @@ Finna = 1</string>
<string name="stageX">Stig %s</string>
<string name="awesome">Frálíkt!</string>
<string name="excellent">Framúrskarandi!</string>
<string name="greatJob">Væl gjørt!</string>
<string name="greatJob">Óført!</string>
<string name="perfect">Lýtaleyst!</string>
<string name="outstanding">Avbera gott!</string>
<string name="wayToGo">Soleiðis!</string>
<string name="yesYesYes">Ja, ja, ja!</string>
<string name="youreGoodAtThis">Tú dugir hetta her!</string>
<string name="nailedIt">Rakti seymin beint á høvdið.</string>
<string name="nailedIt">Gott hatta har!</string>
<string name="rightOn">Júst so!</string>
<string name="stageXComplete">Stig %s fullført</string>
<string name="yourScore">Títt stigatal</string>

View File

@ -11,6 +11,7 @@
<string name="whenTimeRemainingLessThanTenSeconds" comment="whenTimeRemainingLessThanTenSeconds&#10;&#10;The &amp;lt; symbol is not required (you can write it as a word), just do NOT use &lt; in its place.">Երբ ժամանակը մնացել է &lt;10 վայրկյան</string>
<string name="horizontalGreenProgressBars">Հորիզոնական կանաչ գծով</string>
<string name="soundWhenTimeGetsCritical">ձայնով, երբ ժամանակը վերջանում է</string>
<string name="gameBehavior">Խաղի վարքագիծ</string>
<string name="takebacksWithOpponentApproval">քայլը հետ վերցնելու առաջարկ (հակառակորդի թույլտվությամբ)</string>
<string name="promoteToQueenAutomatically">Ավտոմատ փոխակերպվել թագուհու</string>
<string name="whenPremoving">Նախաքայլ անելիս</string>

View File

@ -51,8 +51,8 @@
<string name="theComputerAnalysisHasFailed">Teldugreiningin miseydnaðist</string>
<string name="viewTheComputerAnalysis">Síggj teldugreiningina</string>
<string name="requestAComputerAnalysis">Bið um eina teldugreining</string>
<string name="computerAnalysis">Greina talvið</string>
<string name="computerAnalysisAvailable">Teldugreining klár</string>
<string name="computerAnalysis">Teldugreining</string>
<string name="computerAnalysisAvailable">Teldugreining k</string>
<string name="analysis">Greiningarborð</string>
<string name="depthX">Dýpd %s</string>
<string name="usingServerAnalysis">Nýtandi ambætaragreining</string>
@ -75,10 +75,10 @@
<string name="close">Lat aftur</string>
<string name="winning">Vinnur</string>
<string name="losing">Tapir</string>
<string name="drawn">Javnleikur (remis)</string>
<string name="drawn">Javnt</string>
<string name="unknown">Ókent</string>
<string name="database">Dátugrunnur</string>
<string name="whiteDrawBlack">Hvítur / Javnleikur / Svartur</string>
<string name="whiteDrawBlack">Hvítur / Javnt / Svartur</string>
<string name="averageRatingX">Miðal styrkimeting: %s</string>
<string name="recentGames">Nýliga telvað talv</string>
<string name="topGames">Bestu talv</string>
@ -98,8 +98,8 @@
<string name="memory">Minni</string>
<string name="infiniteAnalysis">Óendalig greining</string>
<string name="removesTheDepthLimit">Tekur dýpdaravmarkingar burtur, og heldur telduna hjá tær heita</string>
<string name="blunder">Mistak</string>
<string name="blunders">Mistøk</string>
<string name="blunder">Bummari</string>
<string name="blunders">Bummarar</string>
<string name="mistake">Mistak</string>
<string name="mistakes">Mistøk</string>
<string name="inaccuracy">Óneyvleiki</string>
@ -119,19 +119,20 @@
<item quantity="one">%s talv</item>
<item quantity="other">%s talv</item>
</plurals>
<string name="logOut">Logga út</string>
<string name="signIn">Logga inn</string>
<string name="signUp">Skráset</string>
<string name="logOut">Rita út</string>
<string name="signIn">Rita inn</string>
<string name="youNeedAnAccountToDoThat">Tær tørvar eina konto at gera hatta</string>
<string name="signUp">Skráset teg</string>
<string name="games">Talv</string>
<string name="forum">Talvtos</string>
<string name="players">Spælarar</string>
<string name="players">Telvarar</string>
<string name="friends">Vinir</string>
<string name="discussions">Samrøður</string>
<string name="today">Í dag</string>
<string name="yesterday">Í gjár</string>
<string name="minutesPerSide">Minuttir í part</string>
<string name="variant">Avbrigdi (variantur)</string>
<string name="variants">Fleiri avbrigdi (variantar)</string>
<string name="variant">Avbrigdi</string>
<string name="variants">Fleiri avbrigdi</string>
<string name="timeControl">Tíðaravmarking</string>
<string name="realTime">Uttan tíðaravmarking</string>
<string name="correspondence">Brævtalv</string>
@ -152,18 +153,18 @@
<string name="usernameOrEmail">Brúkaranavn ella teldupostbústaður</string>
<string name="changeUsername">Broyt brúkaranavn</string>
<string name="changeUsernameNotSame">Til ber bert at broyta støddina á bókstøvunum. T. d. \"fípanfagra\" til \"FípanFagra\".</string>
<string name="changeUsernameDescription">Broyt brúkaranavn títt. Hetta ber bert til at gera eina ferð, og tú kanst bert broyta, um bókstavirnir eru við stórum ella lítlum.</string>
<string name="changeUsernameDescription">Broyt brúkaranavn títt. Hetta ber bert til at gera eina ferð, og tú kanst bert broyta, hvørt bókstavirnir eru við stórum ella lítlum.</string>
<string name="password">Loyniorð</string>
<string name="changePassword">Broyt loyniorð</string>
<string name="changeEmail">Broyt teldupost</string>
<string name="email">teldupost</string>
<string name="email">Teldupostur</string>
<string name="passwordReset">Endurset loyniorð</string>
<string name="forgotPassword">Gloymt loyniorð?</string>
<string name="rank">Tign (støða)</string>
<string name="rankX">Tign (støða): %s</string>
<string name="rank">Støða</string>
<string name="rankX">Støða: %s</string>
<plurals name="rankIsUpdatedEveryNbMinutes">
<item quantity="one">Tign/støða verður dagførd hvønn minutt</item>
<item quantity="other">Tign/støða verður dagførd %s minuttir ímillum</item>
<item quantity="one">Støða/tign verður dagførd hvønn minutt</item>
<item quantity="other">Støða/tign verður dagførd %s minuttir ímillum</item>
</plurals>
<plurals name="nbPuzzles">
<item quantity="one">%s uppgáva</item>
@ -207,16 +208,45 @@
<string name="cancelRematchOffer">Avlýs tilboð um nýtt talv</string>
<string name="viewRematch">Hygg at nýggjum talvi</string>
<string name="play">Telva</string>
<string name="inbox">Innbakki</string>
<string name="chatRoom">Kjattrúm</string>
<string name="loginToChat">Rita inn at kjatta</string>
<string name="youHaveBeenTimedOut">Tú hevur fingið leikbrá.</string>
<string name="spectatorRoom">Áskoðararúm</string>
<string name="composeMessage">Skriva eini boð</string>
<string name="noNewMessages">Eingi nýggj boð</string>
<string name="subject">Evni</string>
<string name="recipient">Móttakari</string>
<string name="send">Sent</string>
<string name="send">Send</string>
<string name="incrementInSeconds">Vøkstur í sekundum</string>
<string name="freeOnlineChess">Ókeypis talv á netinum</string>
<string name="spectators">Áskoðarar:</string>
<plurals name="nbRated">
<item quantity="one">%s styrkimett</item>
<item quantity="other">%s styrkimett</item>
</plurals>
<plurals name="nbWins">
<item quantity="one">%s vunnið</item>
<item quantity="other">%s vunnin</item>
</plurals>
<plurals name="nbLosses">
<item quantity="one">%s tapt</item>
<item quantity="other">%s tapt</item>
</plurals>
<plurals name="nbDraws">
<item quantity="one">%s javnt</item>
<item quantity="other">%s jøvn</item>
</plurals>
<plurals name="nbPlaying">
<item quantity="one">%s í gongd</item>
<item quantity="other">%s í gongd</item>
</plurals>
<string name="exportGames">Flyt út talv</string>
<string name="ratingRange">Styrkitalaspenni</string>
<plurals name="giveNbSeconds">
<item quantity="one">Gev %s sekund</item>
<item quantity="other">Gev %s sekund</item>
</plurals>
<string name="takeback">Tak aftur</string>
<string name="bookmarkThisGame">Set bókamerki við hetta talvið</string>
<string name="tournament">Kapping</string>
@ -226,12 +256,42 @@
<item quantity="one">%s kappingarstig</item>
<item quantity="other">%s kappingarstig</item>
</plurals>
<string name="backToGame">Aftur til talvið</string>
<string name="siteDescription">Ókeypis netborin talvambætari. Neyðugt er ikki við skráseting ella ískoytisforriti, og ongar lýsingar eru. Telva móti telduni, vinum ella tilvildarligum mótleikarum.</string>
<string name="xStartedStreaming">%s byrjaði at stroyma</string>
<string name="averageElo">Miðalstyrkital</string>
<string name="location">Staður</string>
<string name="filterGames">Síla talv frá</string>
<string name="reset">Endurset</string>
<string name="apply">Vátta</string>
<string name="save">Goym</string>
<string name="leaderboard">Stigatalva</string>
<string name="pasteTheFenStringHere">Flyt FEN tekstin higar</string>
<string name="pasteThePgnStringHere">Flyt PGN tekstin higar</string>
<string name="fromPosition">Frá støðuni</string>
<string name="continueFromHere">Halt fram hiðani</string>
<string name="toStudy">Nám</string>
<string name="importGame">Les inn talv</string>
<string name="importGameExplanation">Flyt PGN úr einum talvi higar. Fá eitt endurspæl, tú kanst kaga í, teldugreining, talvkjatt og PGN, sum til ber at deila við onnur.</string>
<plurals name="nbImportedGames">
<item quantity="one">%s innflutt talv</item>
<item quantity="other">%s innflutt talv</item>
</plurals>
<string name="thisIsAChessCaptcha">Hetta er eitt talv-CAPTCHA.</string>
<string name="clickOnTheBoardToMakeYourMove">Klikk á borðið at leika, og prógva, tú ert eitt menniskja.</string>
<string name="captcha.fail">Loys vinaliga talv-CAPTCHA\'ið.</string>
<string name="notACheckmate">Ikki skák og mát</string>
<string name="whiteCheckmatesInOneMove">Hvítur setir skák og mát í einum leiki</string>
<string name="blackCheckmatesInOneMove">Svartur setir skák og mát í einum leiki</string>
<string name="retry">Royn aftur</string>
<string name="reconnecting">Bindur saman aftur</string>
<plurals name="nbFriendsOnline">
<item quantity="one">%s vinur á alnetinum</item>
<item quantity="other">%s vinir á alnetinum</item>
</plurals>
<string name="noFriendsOnline">Eingir vinir á netinum</string>
<string name="findFriends">Finn vinir</string>
<string name="favoriteOpponents">Yndismótleikarar</string>
<string name="follow">Fylg</string>
<string name="following">Fylgja</string>
<string name="unfollow">Fylg ikki</string>
@ -254,17 +314,48 @@
<string name="challengeToPlay">Bjóða av at telva</string>
<string name="player">Telvari</string>
<string name="list">Listi</string>
<string name="graph">Strikumynd</string>
<plurals name="lessThanNbMinutes">
<item quantity="one">Minni enn %s minuttur</item>
<item quantity="other">Minni enn %s minuttir</item>
</plurals>
<string name="required">Kravt.</string>
<string name="openTournaments">Opnar kappingar</string>
<string name="duration">Longd</string>
<string name="winner">Vinnari</string>
<string name="standing">Støðan</string>
<string name="createANewTournament">Stovna eina nýggja kapping</string>
<string name="tournamentCalendar">Kappingarkalendari</string>
<string name="conditionOfEntry">Luttøkufortreytir:</string>
<string name="advancedSettings">Framkomnar stillingar</string>
<string name="safeTournamentName">Vel eitt trygt og hóskiligt navn til kappingina.</string>
<string name="inappropriateNameWarning">Er navnið á nakran hátt ósømiligt, kann konta tín verða stongd.</string>
<string name="emptyTournamentName">Lat teigin vera tóman, um tú vilt, at kappingin verður nevnd eftir gitnum telvara.</string>
<string name="recommendNotTouching">Vit viðmæla ikki at nerta hesar.</string>
<string name="fewerPlayers">Um tú setir luttøkufortreytir, verða færri telvarar í kappingini.</string>
<string name="showAdvancedSettings">Vís framkomnar stillingar</string>
<string name="makePrivateTournament">Ger so kappingin ikki er almen, og avmarka atgongdina við einum loyniorði</string>
<string name="join">Tak lut</string>
<string name="withdraw">Far úr</string>
<string name="points">Stig</string>
<string name="wins">Vunnin</string>
<string name="losses">Tapt</string>
<string name="winStreak">Vunnin á rað</string>
<string name="createdBy">Stovnað hevur</string>
<string name="tournamentIsStarting">Kappingin byrjar</string>
<string name="tournamentPairingsAreNowClosed">Liðugt er at seta luttakararnar saman tveir og tveir.</string>
<string name="standByX">Bíða %s, telvarar verða greipaðir, ger teg til reiðar!</string>
<string name="youArePlaying">Tú telvar!</string>
<string name="winRate">Sigrar</string>
<string name="berserkRate">Berserksstig</string>
<string name="performance">Avrik</string>
<string name="tournamentComplete">Kappingin fullfíggjað</string>
<string name="movesPlayed">Telvdir leikir</string>
<string name="whiteWins">Hvítur vinnur</string>
<string name="blackWins">Svartur vinnur</string>
<string name="draws">Javnleikur</string>
<string name="nextXTournament">Næsta %s kapping:</string>
<string name="averageOpponent">Miðalmótleikari</string>
<string name="membersOnly">Bert brúkarar</string>
<string name="boardEditor">Talvborðsritil</string>
<string name="setTheBoard">Set talvborðið upp</string>
@ -274,8 +365,18 @@
<string name="savePosition">Goym støðuna</string>
<string name="loadPosition">Les støðuna inn</string>
<string name="isPrivate">Innanhýsis</string>
<string name="reportXToModerators">Sig fyriskipara frá um %s</string>
<string name="profileCompletion">Vangamynd útfylt: %s</string>
<string name="xRating">%s styrkital</string>
<string name="ifNoneLeaveEmpty">Um einki, lat teig vera tóman</string>
<string name="gameCompletionRate">Talv telvd at enda:: %s</string>
<string name="profile">Vangamynd</string>
<string name="editProfile">Broyt vangamynd</string>
<string name="firstName">Fornavn</string>
<string name="lastName">Eftirnavn</string>
<string name="biography">Ævilýsing</string>
<string name="country">Land</string>
<string name="socialMediaLinks">Leinki til sosialar miðlar</string>
<string name="watchLichessTV">Hygg at Lichess sjónvarpi</string>
<string name="previouslyOnLichessTV">Áður sýnt á Lichess sjónvarpi</string>
<string name="onlinePlayers">Telvarar á netinum nú</string>
@ -290,6 +391,7 @@
<string name="puzzleOfTheDay">Dagsins talvuppgáva</string>
<string name="clickToSolve">Klikk á at loysa</string>
<string name="goodMove">Góður leikur</string>
<string name="butYouCanDoBetter">Ein betri leikur er.</string>
<string name="bestMove">Besti leikur</string>
<string name="keepGoing">Blív við</string>
<string name="puzzleFailed">Uppgávan miseydnaðist</string>
@ -333,7 +435,21 @@
<string name="reply">Svara</string>
<string name="message">Boð</string>
<string name="createTheTopic">Stovnað evnið</string>
<string name="reportAUser">Sig frá um ein brúkara</string>
<string name="user">Brúkari</string>
<string name="reason">Orsøk</string>
<string name="whatIsIheMatter">Hvat bagir?</string>
<string name="cheat">Snýt</string>
<string name="insult">Háðar</string>
<string name="troll">Argar</string>
<string name="other">Annað</string>
<string name="reportDescriptionHelp">Flyt leinkið til talvið ella talvini higar, og greið frá, hvat bagir atburðinum hjá brúkaranum. Skriva ikki bert \"hann snýtir\", men sig okkum, hvussu tú komst til hesa niðurstøðu. Fráboðan tín verður skjótari viðgjørd, um hon verður skrivað á enskum.</string>
<string name="error.provideOneCheatedGameLink">Útvega leinki til í minsta lagi eitt talv, har snýtt varð.</string>
<string name="by">eftir %s</string>
<string name="thisTopicIsNowClosed">Evnið er nú afturlatið.</string>
<string name="blog">Bloggur</string>
<string name="questionsAndAnswers">Spurningar &amp; Svør</string>
<string name="notes">Upprit</string>
<string name="sound">Ljóð</string>
<string name="none">Einki</string>
<string name="fast">Skjótt</string>

View File

@ -21,6 +21,9 @@
<string name="createAGame">Ստեղծել նոր խաղ</string>
<string name="whiteIsVictorious">Սպիտակները հաղթեցին</string>
<string name="blackIsVictorious">Սևերը հաղթեցին</string>
<string name="youPlayTheWhitePieces">Դուք խաղում եք սպիտակ խաղաքարերով։</string>
<string name="youPlayTheBlackPieces">Դուք խաղում եք սև խաղաքարերով։</string>
<string name="itsYourTurn">Ձեր Քայլն է!</string>
<string name="kingInTheCenter">Արքան կենտրոնում է</string>
<string name="threeChecks">Երեք շախ</string>
<string name="raceFinished">Մրցավազքը ավարտվեց</string>
@ -58,6 +61,7 @@
<string name="promoteVariation">Փոխել տարբերակը</string>
<string name="makeMainLine">Դարձնել հիմնական տարբերակ</string>
<string name="deleteFromHere">Ջնջել այստեղից</string>
<string name="forceVariation">Պարտադրել վարիացիան</string>
<string name="move">Քայլ</string>
<string name="variantLoss">Տարբերակը պարտվում է</string>
<string name="variantWin">Տարբերակը հաղթում է</string>
@ -79,6 +83,13 @@
<item quantity="one">Մատ %s հատ կիսաքայլից</item>
<item quantity="other">Մատ %s հատ կիսաքայլից</item>
</plurals>
<string name="noGameFound">Ոչ մի խաղ չի գտնվել</string>
<string name="allSet">Ամեն ինչ պատրաստ է։</string>
<string name="importPgn">Ներմուծել PGN</string>
<string name="delete">Ջնջել</string>
<string name="enable">Միացնել</string>
<string name="bestMoveArrow">Լավագույն քայլի սլաքը</string>
<string name="memory">Հիշողություն</string>
<string name="blunders">Կոպիտ սխալներ</string>
<string name="mistake">Սխալ</string>
<string name="mistakes">Սխալներ</string>
@ -114,6 +125,9 @@
<string name="xPostedInForumY">%1$s գրառել է %2$s ֆորումում</string>
<string name="latestForumPosts">Վերջին գրառումները ֆորումում</string>
<string name="players">Խաղացողները</string>
<string name="friends">Ընկերներ</string>
<string name="today">Այսօր</string>
<string name="yesterday">Երեկ</string>
<string name="minutesPerSide">Րոպեներ ամեն կողմի համար</string>
<string name="variant">Տարբերակ</string>
<string name="variants">Տարբերակներ</string>
@ -162,6 +176,7 @@
<string name="decline">Մերժել</string>
<string name="playingRightNow">Այս պահին խաղում են</string>
<string name="finished">Ավարտվել է</string>
<string name="finishesX">ավարտվում է %s</string>
<string name="abortGame">Կասեցնել խաղը</string>
<string name="gameAborted">Խաղը կասեցված է</string>
<string name="standard">Ստանդարտ</string>
@ -169,14 +184,19 @@
<string name="mode">Տեսակը</string>
<string name="casual">Առանց վարկանիշի</string>
<string name="rated">Վարկանիշային</string>
<string name="casualTournament">Առանց վարկանիշի</string>
<string name="ratedTournament">Վարկանիշային</string>
<string name="thisGameIsRated">Խաղը Վարկանիշային է</string>
<string name="rematch">Կրկին խաղալ</string>
<string name="rematchOfferSent">Ռևանշի առաջարկը ուղարկված է</string>
<string name="rematchOfferSentWhite">Սպիտակներն առաջարկում են ոչ-ոքի</string>
<string name="rematchOfferSentBlack">Սևերն առաջարկում են ոչ-ոքի</string>
<string name="rematchOfferAccepted">Ռևանշի առաջարկը ընդունված է</string>
<string name="rematchOfferCanceled">Ռևանշի առաջարկը կասեցված է</string>
<string name="rematchOfferDeclined">Ռևանշի առաջարկը մերժված է</string>
<string name="cancelRematchOffer">Կասեցնել ռևանշի առաջարկը</string>
<string name="viewRematch">Ցույց տալ ռեւանշը</string>
<string name="confirmMove">Հաստատել քայլը</string>
<string name="play">Խաղալ</string>
<string name="inbox">Փոստարկղ</string>
<string name="chatRoom">Չատի պատուհան</string>

View File

@ -596,24 +596,24 @@
<string name="contribute">力を貸す</string>
<string name="termsOfService">利用規約(英文)</string>
<string name="sourceCode">ソースコード</string>
<string name="simultaneousExhibitions">同時対局</string>
<string name="simultaneousExhibitions">多面指し</string>
<string name="host">ホスト</string>
<string name="hostColorX">ホストの色: %s</string>
<string name="createdSimuls">新たな同時対局</string>
<string name="hostANewSimul">新たな同時対局を作る</string>
<string name="noSimulFound">同時対局が見つかりません</string>
<string name="noSimulExplanation">この同時対局は存在しません</string>
<string name="returnToSimulHomepage">同時対局トップに戻る</string>
<string name="createdSimuls">新たな多面指し</string>
<string name="hostANewSimul">新たな多面指しを作る</string>
<string name="noSimulFound">多面指しが見つかりません</string>
<string name="noSimulExplanation">この多面指しは存在しません</string>
<string name="returnToSimulHomepage">多面指しトップに戻る</string>
<string name="aboutSimul">多面指しでは、1人が多数の相手と同時に対局します。</string>
<string name="aboutSimulImage">この時フィッシャーは 50 人と対局して 47 勝 2 分 1 敗でした。</string>
<string name="aboutSimulRealLife">アイデアは現実の同時対局と同じです。現実世界では1人がテーブルを回って1手ずつ指していきます。</string>
<string name="aboutSimulRealLife">コンセプトは現実の多面指しと同じです。現実世界では1人がテーブルを回って1手ずつ指していきます。</string>
<string name="aboutSimulRules">多面指しが始まると、全員がホスト(白番)と対局します。多面指しはすべての対局が終わった時に終了します。</string>
<string name="aboutSimulSettings">同時対局は非レート戦です。再対局、待った、持時間追加はできません。</string>
<string name="aboutSimulSettings">多面指しは非レート戦です。再対局、待った、持時間追加はできません。</string>
<string name="create">作成する</string>
<string name="whenCreateSimul">多面指しを作成すると、同時に複数の相手と対局できます。</string>
<string name="simulVariantsHint">複数のバリアントを選ぶと、どのバリアントにするか相手が選べます。</string>
<string name="simulClockHint">フィッシャーモードの設定。相手が多いほど追加時間は長めに。</string>
<string name="simulAddExtraTime">同時対局の手間を考え、自分に持時間をさらに追加できます。</string>
<string name="simulAddExtraTime">多面指しの手間を考え、自分に持時間をさらに追加できます。</string>
<string name="simulHostExtraTime">ホスト延長時間</string>
<string name="lichessTournaments">Lichess トーナメント</string>
<string name="tournamentFAQ">アリーナ・トーナメントFAQ</string>

View File

@ -517,7 +517,7 @@
<string name="other">Diğer</string>
<string name="reportDescriptionHelp">Raporlamak istediğiniz oyunun linkini yapıştırın ve sorununuzu açıklayın. Lütfen sadece \"hile yapıyor\" gibisinden açıklama yazmayın, hile olduğunu nasıl anladığınızııklayın. Rapor edeceğiniz kişiyi ya da oyunu \"İngilizce\" açıklarsanız, daha hızlı sonuca ulaşırsınız.</string>
<string name="error.provideOneCheatedGameLink">Lütfen hileli gördüğünüz en az 1 adet oyun linki verin.</string>
<string name="by">%s yazdı</string>
<string name="by">%s oluşturdu</string>
<string name="thisTopicIsNowClosed">Bu konu kapanmıştır.</string>
<string name="theming">Ortam</string>
<string name="blog">Blog</string>
@ -532,6 +532,7 @@
<string name="newPassword">Yeni şifre</string>
<string name="newPasswordAgain">Yeni şifre(tekrar)</string>
<string name="newPasswordsDontMatch">Yeni parolalar eşleşmiyor</string>
<string name="newPasswordStrength">Şifrenin zorluğu</string>
<string name="clockInitialTime">Maç başlangıç süresi</string>
<string name="clockIncrement">Hamle başına süre artışı</string>
<string name="privacy">Gizlilik</string>

View File

@ -11,14 +11,14 @@
<string name="level">Cấp độ</string>
<string name="toggleTheChat">Bật/tắt chat</string>
<string name="toggleSound">Bật/Tắt âm thanh</string>
<string name="chat">Tán gẫu</string>
<string name="chat">Trò chuyện</string>
<string name="resign">Bỏ cuộc</string>
<string name="checkmate">Chiếu hết</string>
<string name="stalemate">Hòa pat</string>
<string name="white">Trắng</string>
<string name="black">Đen</string>
<string name="randomColor">Chọn màu quân ngẫu nhiên</string>
<string name="createAGame">Khởi tạo ván cờ</string>
<string name="createAGame">Tạo ván cờ mới</string>
<string name="whiteIsVictorious">Bên Trắng thắng</string>
<string name="blackIsVictorious">Bên Đen thắng</string>
<string name="youPlayTheWhitePieces">Bạn chơi quân trắng</string>
@ -460,8 +460,8 @@
<string name="automaticallyProceedToNextGameAfterMoving">Tự động chuyển đến ván tiếp theo sau khi thực hiện nước đi</string>
<string name="autoSwitch">Tự động chuyển</string>
<string name="puzzles">Câu đố</string>
<string name="latestUpdates">cập nhật mới nhất</string>
<string name="tournamentWinners">Vô địch giải</string>
<string name="latestUpdates">Cập nhật mới nhất</string>
<string name="tournamentWinners">Các nhà vô địch giải</string>
<string name="name">Tên</string>
<string name="description">Mô tả</string>
<string name="no">Không chọn</string>
@ -480,13 +480,13 @@
<string name="reportAUser">Báo cáo một kỳ thủ</string>
<string name="user">Kỳ thủ</string>
<string name="reason">Lý do</string>
<string name="whatIsIheMatter">Cái quái gì thế?</string>
<string name="whatIsIheMatter">Xảy ra vấn đề gì thế?</string>
<string name="cheat">Gian lận</string>
<string name="insult">Xúc phạm</string>
<string name="troll">Hát</string>
<string name="troll">Chọc tức</string>
<string name="other">Khác</string>
<string name="reportDescriptionHelp">Dán đường dẫn (các) ván cờ và giải thích sự sai lầm trong cách ứng phó của kỳ thủ này</string>
<string name="error.provideOneCheatedGameLink">Xin vui lòng cung cấp ít nhất một đường dẫn đến ván cờ lừa đảo.</string>
<string name="reportDescriptionHelp">Dán đường dẫn (các) ván cờ và giải thích về vấn đề của kỳ thủ này. Đừng chỉ nói \"họ gian lận\", mà hãy miêu tả chi tiết nhất có thể. Vấn đề sẽ được giải quyết nhanh hơn nếu bạn viết bằng tiếng Anh.</string>
<string name="error.provideOneCheatedGameLink">Xin hãy cung cấp ít nhất một đường dẫn đến ván cờ bị gian lận.</string>
<string name="by">bởi %s</string>
<string name="thisTopicIsNowClosed">Chủ đề này bây giờ đã đóng</string>
<string name="theming">Chủ đề</string>
@ -494,16 +494,17 @@
<string name="questionsAndAnswers">Hỏi &amp; Đáp</string>
<string name="notes">Chú thích</string>
<string name="typePrivateNotesHere">Nhập ghi chú cá nhân ở đây</string>
<string name="invalidUsernameOrPassword">Tên tài khoản và mật đăng nhập không đúng</string>
<string name="invalidUsernameOrPassword">Tên tài khoản và mật khẩu đăng nhập không đúng</string>
<string name="incorrectPassword">Sai mật khẩu</string>
<string name="invalidAuthenticationCode">Mã xác thực sai</string>
<string name="emailMeALink">Gửi thư điện tử cho tôi một liên kết</string>
<string name="currentPassword">Nhập mật hiện tại</string>
<string name="newPassword">Nhập mật mới</string>
<string name="newPasswordAgain">Nhập lại mật mã mới</string>
<string name="emailMeALink">Gửi cho tôi một liên kết trong Email</string>
<string name="currentPassword">Nhập mật khẩu hiện tại</string>
<string name="newPassword">Nhập mật khẩu mới</string>
<string name="newPasswordAgain">Nhập (lại) mật khẩu mới</string>
<string name="newPasswordsDontMatch">Mật khẩu mới không khớp nhau</string>
<string name="clockInitialTime">Thời gian đồng hồ ban đầu</string>
<string name="clockIncrement">Thời gian được thêm vào</string>
<string name="newPasswordStrength">Độ mạnh của mật khẩu</string>
<string name="clockInitialTime">Thời gian ban đầu</string>
<string name="clockIncrement">Thời gian được cho thêm</string>
<string name="privacy">Riêng tư</string>
<string name="letOtherPlayersFollowYou">Cho phép người khác theo dõi bạn</string>
<string name="letOtherPlayersChallengeYou">Cho phép người khác thách đấu bạn</string>
@ -521,7 +522,7 @@
<string name="difficultyEasy">Dễ</string>
<string name="difficultyNormal">Bình thường</string>
<string name="difficultyHard">Khó</string>
<string name="xCompetesInY">%1$s cạnh tranh %2$s</string>
<string name="xCompetesInY">%1$s hoàn thành trong %2$s</string>
<string name="xAskedY">%1$s đã yêu cầu %2$s</string>
<string name="xAnsweredY">%1$s đã trả lời %2$s</string>
<string name="xCommentedY">%1$s đã bình luận %2$s</string>
@ -531,10 +532,10 @@
<string name="defeatVsYInZ">%1$s với %2$s trong %3$s</string>
<string name="drawVsYInZ">%1$s với %2$s trong %3$s</string>
<string name="timeline">Dòng thời gian</string>
<string name="starting">Bắt dầu đấu:</string>
<string name="allInformationIsPublicAndOptional">Tất cả thông tin thì công khai và không bắt buộc.</string>
<string name="starting">Bắt đầu đấu:</string>
<string name="allInformationIsPublicAndOptional">Tất cả thông tin đều được công khai và không bắt buộc.</string>
<string name="yourCityRegionOrDepartment">Thành phố, tôn giáo hoặc nơi cư trú của bạn.</string>
<string name="biographyDescription">Hãy nói về bạn, bạn thích gì ở cờ, khai cuộc yêu thích, ván cờ yêu thích, thần tượng…</string>
<string name="biographyDescription">Giới thiệu gì đó về bạn như sở thích, bạn thích gì ở cờ, khai cuộc yêu thích, ván cờ yêu thích, thần tượng, ...</string>
<plurals name="maximumNbCharacters">
<item quantity="other">Tối đa: %s chữ.</item>
</plurals>
@ -547,12 +548,12 @@
<string name="side">Bên</string>
<string name="clock">Đồng hồ</string>
<string name="unauthorizedError">Không được quyền truy cập</string>
<string name="noInternetConnection">Không có nối mạng. Bạn vẫn có thể chơi ngoại tuyến từ bảng chọn.</string>
<string name="noInternetConnection">Không có kết nối mạng. Bạn vẫn có thể chơi ngoại tuyến từ menu.</string>
<string name="connectedToLichess">Bây giờ bạn đã kết nối với lichess.org</string>
<string name="signedOut">Bạn đã đăng xuất.</string>
<string name="loginSuccessful">Bây gió bạn đã đăng nhập thành công</string>
<string name="loginSuccessful">Đăng nhập thành công</string>
<string name="playOnTheBoardOffline">Chơi ngoại tuyến, trên bàn cờ.</string>
<string name="playOfflineComputer">Chơi ngoiaj tuyến với máy tính</string>
<string name="playOfflineComputer">Chơi ngoi tuyến với máy tính</string>
<string name="opponent">Đối thủ</string>
<string name="learnMenu">Học</string>
<string name="studyMenu">Học chơi</string>
@ -567,7 +568,7 @@
<string name="shareGameURL">Chia sẻ liên kết game</string>
<string name="error.required">Mục bắt buộc</string>
<string name="error.email">Địa chỉ email này không hợp lệ</string>
<string name="error.email_acceptable">Địa chỉ email này không được chấp nhận.</string>
<string name="error.email_acceptable">Địa chỉ email này không được chấp nhận. Vui lòng kiểm tra và thử lại.</string>
<string name="error.email_unique">Địa chỉ email này đã được sử dụng</string>
<string name="error.email_different">Đây đã là địa chỉ email hiện tại của bạn</string>
<string name="ifRatingIsPlusMinusX">Nếu điểm hệ số thứ hạng trong phạm vi ± %s</string>
@ -586,11 +587,11 @@
<string name="videoLibrary">Thư viện video</string>
<string name="streamersMenu">Các streamer</string>
<string name="mobileApp">Ứng dụng Điện thoại</string>
<string name="webmasters">Các quản trị</string>
<string name="webmasters">Các quản trị viên</string>
<string name="about">Giới thiệu</string>
<string name="aboutX">Về %s</string>
<string name="aboutX">Giới thiệu về %s</string>
<string name="xIsAFreeYLibreOpenSourceChessServer">%1$s là một máy chủ đánh cờ (%2$s) miễn phí, không quảng cáo, mã nguồn mở.</string>
<string name="really">thật sự</string>
<string name="really">thật</string>
<string name="contribute">Đóng góp</string>
<string name="termsOfService">Điều khoản dịch vụ</string>
<string name="sourceCode">Mã Nguồn</string>

View File

@ -1,5 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="private">Innanhýsis</string>
<string name="downloadGame">Tak talv niður</string>
<string name="studyUrl">URL rannsókn</string>
<string name="broadcastUrl" comment="broadcastUrl&#10;&#10;This is to do with the Broadcasts feature. These are tournaments in the chess world, hosted elsewhere, for example the FIDE Championship. This specific text lets you share the URL. https://lichess.org/broadcast">Varpa URL út</string>
<string name="currentChapterUrl">Núverandi URL partur</string>
<string name="currentGameUrl">Núverandi talv URL</string>
<string name="normalAnalysis">Vanlig greining</string>
<string name="hideNextMoves">Fjal næstu leikirnar</string>
<string name="start">Byrja</string>

View File

@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="swissTournaments">Šveicariškieji turnyrai</string>
</resources>

View File

@ -39,7 +39,7 @@
Oyuncuları bir turnuvaya veya bir takım savaşına katılmaya çağırmak için kullanabilirsiniz.
Mesajlarınızı almayı sevmeyen oyuncular takımdan ayrılabilir.</string>
<string name="teamsIlead">Yönettiğim takımlar</string>
<string name="youWayWantToLinkOneOfTheseTournaments">Yaklaşan bu turnuvalardan birine link vermek ister miydiniz?</string>
<string name="youWayWantToLinkOneOfTheseTournaments">A dëshironi të shpërndani linkun e ndonjërit prej turnireve në vijim?</string>
<string name="usersWhoCanManageThisTeam">Bu takımı yönetebilen kullanıcılar</string>
<string name="leadersChat">Liderler arası sohbet</string>
</resources>

View File

@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="scanTheCode">Ծրագրի միջոցով սկանավորեք QR կոդը։</string>
</resources>

View File

@ -1,2 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="hourlyRapidArena">Valandinė greitoji arena</string>
<string name="hourlyRapid">Valandinė greitoji</string>
<string name="hourlyXArena">Valandinė %s arena</string>
<string name="hourlyX">Valandinis %s</string>
<string name="dailyRapidArena">Kasdienė greitoji arena</string>
<string name="dailyRapid">Kasdieninė greitoji</string>
<string name="dailyClassicalArena">Kasdienė klasikinė arena</string>
<string name="dailyClassical">Kasdieninė klasikinė</string>
<string name="dailyXArena">Kasdienė %s arena</string>
<string name="dailyX">Kasdienis %s</string>
<string name="easternRapidArena">Rytinė greitoji arena</string>
<string name="easternRapid">Rytinė greitoji</string>
<string name="easternClassicalArena">Rytinė klasikinė arena</string>
<string name="easternClassical">Rytinė klasikinė</string>
<string name="easternXArena">Rytinė %s arena</string>
<string name="easternX">Rytinė %s</string>
<string name="weeklyRapidArena">Savaitinė greitoji arena</string>
<string name="weeklyRapid">Savaitinė greitoji</string>
<string name="weeklyClassicalArena">Savaitinė klasikinė arena</string>
<string name="weeklyClassical">Savaitinė klasikinė</string>
<string name="weeklyXArena">Savaitinė %s arena</string>
<string name="weeklyX">Savaitinė %s</string>
<string name="monthlyRapidArena">Mėnesinė greitoji arena</string>
<string name="monthlyRapid">Mėnesinė greitoji</string>
<string name="monthlyClassicalArena">Mėnesinė klasikinė arena</string>
<string name="monthlyClassical">Mėnesinė klasikinė</string>
<string name="monthlyXArena">Mėnesinė %s arena</string>
<string name="monthlyX">Mėnesinė %s</string>
<string name="yearlyRapidArena">Kasmetinė greitoji arena</string>
<string name="yearlyRapid">Kasmetinė greitoji</string>
<string name="yearlyClassicalArena">Kasmetinė klasikinė arena</string>
<string name="yearlyClassical">Kasmetinė klasikinė</string>
<string name="yearlyXArena">Kasmetinė %s arena</string>
<string name="yearlyX">Kasmetinė %s</string>
<string name="rapidShieldArena">Greitoji skydo arena</string>
<string name="rapidShield">Greitoji skydo</string>
<string name="classicalShieldArena">Klasikinė skydo arena</string>
<string name="classicalShield">Klasikinė skydo</string>
<string name="xShieldArena">%s skydo arena</string>
<string name="xShield">%s skydo</string>
<string name="openingRapidArena">%s greitoji arena</string>
<string name="openingRapid">%s greitoji</string>
<string name="xTeamBattle">%s komandos kova</string>
<string name="eliteXArena">Elitinė %s arena</string>
<string name="eliteX">Elitinė %s</string>
<string name="xArena">%s arena</string>
</resources>