aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/messages.scala
diff options
context:
space:
mode:
authorvlad <vlad@drivergrp.com>2016-10-21 16:07:05 -0400
committervlad <vlad@drivergrp.com>2016-10-21 16:07:05 -0400
commit02810f5eac3b4ce6a5d1128281a01b2a2ed0647c (patch)
treea733b421759216a7f12d227d2f912eecdfa842aa /src/main/scala/xyz/driver/core/messages.scala
parent7c77f5ff23e4b0f8d5e189492bc4f25f847adc00 (diff)
downloaddriver-core-02810f5eac3b4ce6a5d1128281a01b2a2ed0647c.tar.gz
driver-core-02810f5eac3b4ce6a5d1128281a01b2a2ed0647c.tar.bz2
driver-core-02810f5eac3b4ce6a5d1128281a01b2a2ed0647c.zip
Renamed package to xyz, New formatting, authorize directive supporting multiple permissions
Diffstat (limited to 'src/main/scala/xyz/driver/core/messages.scala')
-rw-r--r--src/main/scala/xyz/driver/core/messages.scala59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/core/messages.scala b/src/main/scala/xyz/driver/core/messages.scala
new file mode 100644
index 0000000..94d9889
--- /dev/null
+++ b/src/main/scala/xyz/driver/core/messages.scala
@@ -0,0 +1,59 @@
+package xyz.driver.core
+
+import java.util.Locale
+
+import com.typesafe.config.Config
+import xyz.driver.core.logging.Logger
+
+import scala.collection.JavaConverters._
+
+/**
+ * Scala internationalization (i18n) support
+ */
+object messages {
+
+ object Messages {
+ def messages(config: Config, log: Logger, locale: Locale = Locale.US): Messages = {
+ val map = config.getConfig(locale.getLanguage).root().unwrapped().asScala.mapValues(_.toString).toMap
+ Messages(map, locale, log)
+ }
+ }
+
+ final case class Messages(map: Map[String, String], locale: Locale, log: Logger) {
+
+ /**
+ * Returns message for the key
+ *
+ * @param key key
+ * @return message
+ */
+ def apply(key: String): String = {
+ map.get(key) match {
+ case Some(message) => message
+ case None =>
+ log.error(s"Message with key '$key' not found for locale '${locale.getLanguage}'")
+ key
+ }
+ }
+
+ /**
+ * Returns message for the key and formats that with parameters
+ *
+ * @example "Hello {0}!" with "Joe" will be "Hello Joe!"
+ *
+ * @param key key
+ * @param params params to be embedded
+ * @return formatted message
+ */
+ def apply(key: String, params: Any*): String = {
+
+ def format(formatString: String, params: Seq[Any]) =
+ params.zipWithIndex.foldLeft(formatString) {
+ case (res, (value, index)) => res.replace(s"{$index}", value.toString)
+ }
+
+ val template = apply(key)
+ format(template, params)
+ }
+ }
+}