forked from lichess-org/lila
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathI18n.scala
43 lines (37 loc) · 1.32 KB
/
I18n.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package controllers
import play.api.data.*
import play.api.data.Forms.*
import play.api.libs.json.Json
import lila.app.{ given, * }
final class I18n(env: Env) extends LilaController(env):
private def toLang = lila.i18n.I18nLangPicker.byStr
private val form = Form(single("lang" -> text.verifying { code =>
toLang(code).isDefined
}))
def select = OpenBody:
form
.bindFromRequest()
.fold(
_ => notFound,
code =>
val lang = toLang(code) err "Universe is collapsing"
ctx.me.filterNot(_.lang contains lang.code).so {
env.user.repo.setLang(_, lang)
} >> negotiate(
html =
val redir = Redirect:
ctx.req.referer.fold(routes.Lobby.home.url): str =>
try
val pageUrl = new java.net.URI(str).parseServerAuthority().toURL()
val path = pageUrl.getPath
val query = pageUrl.getQuery
if query == null then path
else path + "?" + query
catch case _: Exception => routes.Lobby.home.url
if ctx.isAnon
then redir.withCookies(env.lilaCookie.session("lang", lang.code))
else redir
,
Ok(Json.obj("lang" -> lang.code))
)
)