compile language DB to AnyRefMap, for runtime speed

This commit is contained in:
Thibault Duplessis 2017-08-23 12:47:48 -05:00
parent 889535574d
commit ef6687ba50
3 changed files with 16 additions and 8 deletions

View file

@ -69,12 +69,15 @@ object JsDump {
}
}
def dbToObject(ref: I18nDb.Ref, lang: Lang): JsObject = JsObject {
val emptyMessages: MessageMap = scala.collection.mutable.AnyRefMap.empty
def dbToObject(ref: I18nDb.Ref, lang: Lang): JsObject =
I18nDb(ref).get(defaultLang) ?? { defaultMsgs =>
val msgs = ~I18nDb(ref).get(lang)
defaultMsgs.flatMap {
case (k, v) => translatedJs(k, msgs get k getOrElse v, lang)
JsObject {
val msgs = I18nDb(ref).get(lang) | emptyMessages
defaultMsgs.flatMap {
case (k, v) => translatedJs(k, msgs get k getOrElse v, lang)
}
}
}
}
}

View file

@ -6,7 +6,12 @@ package object i18n extends PackageObject with WithPlay {
type Count = Int
type MessageKey = String
private[i18n]type Messages = Map[Lang, Map[MessageKey, Translation]]
/* of course we don't need/use the mutability
* it's just that AnyRefMap is the fastest scala hashmap implementation
*/
private[i18n]type MessageMap = scala.collection.mutable.AnyRefMap[MessageKey, Translation]
private[i18n]type Messages = Map[Lang, MessageMap]
private[i18n] def logger = lila.log("i18n")

View file

@ -56,7 +56,7 @@ import play.api.i18n.Lang
// format: OFF
private[i18n] object Registry {
def load = Map[Lang, Map[MessageKey, Translation]]($content)
def load = Map[Lang, scala.collection.mutable.AnyRefMap[MessageKey, Translation]]($content)
}
"""
}
@ -96,7 +96,7 @@ import I18nQuantity._
// format: OFF
private object `$locale` {
def load = Map[MessageKey, Translation](\n${content mkString ",\n"})
def load = scala.collection.mutable.AnyRefMap[MessageKey, Translation](\n${content mkString ",\n"})
}
"""
}