import java.util.Locale
import java.util.ResourceBundle
import java.util.MissingResourceException
import java.text.MessageFormat
trait MessageSource {
def getMessage(
code: String,
locale: Locale,
args: Array[Any] = Array[Any]()): Option[String]
}
class ResourceBundleMessageSource(codeBase: String) extends MessageSource {
def getMessage(code: String, locale: Locale, args: Array[Any]) = {
val bundle = ResourceBundle.getBundle(codeBase, locale)
getString(bundle, code).map(new MessageFormat(_).format(args))
}
private def getString(bundle: ResourceBundle, key: String): Option[String] = {
try { Some(bundle.getString(key)) } catch {
case _: MissingResourceException => None
}
}
}
object ResourceBundleReader {
def main(args: Array[String]): Unit = {
val source = new ResourceBundleMessageSource("messages")
println(source.getMessage("greeting", Locale.getDefault, Array("XnnYygn")).getOrElse("hello, world!"))
println(source.getMessage("no_such_message", Locale.getDefault).getOrElse("hello, world!"))
println(source.getMessage("greeting", Locale.SIMPLIFIED_CHINESE, Array("XnnYygn")).getOrElse("hello, world!"))
}
}