Skip to content

Instantly share code, notes, and snippets.

@TheDIM47
Created September 19, 2016 18:37
Show Gist options
  • Save TheDIM47/9cea7e2458dcdef90cfb26522bf3bd1c to your computer and use it in GitHub Desktop.
Save TheDIM47/9cea7e2458dcdef90cfb26522bf3bd1c to your computer and use it in GitHub Desktop.
Case class localization sample
sealed trait Localizator {
def apply(s: State): String
}
sealed trait State {
def name(implicit loc: Localizator): String = loc.apply(this)
}
sealed trait OkState extends State
sealed trait ErrorState extends State
object OkState {
case object Ok extends OkState
}
object ErrorState {
case object Error extends ErrorState
}
class Ru extends Localizator {
import OkState._
import ErrorState._
override def apply(s: State): String = s match {
case Ok => "Хорошо"
case Error => "Плохо"
}
}
class En extends Localizator {
import OkState._
import ErrorState._
override def apply(s: State): String = s match {
case Ok => "Good"
case Error => "Bad"
}
}
import OkState._
import ErrorState._
implicit val loc = new En
val v1 = Error.name
val v2 = Ok.name
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment