An SBT plugin to check Play messages files for potential problems and generate a references object.
This plugin can:
- Check for duplicate message keys in the messages files
- Check for missing keys in the language specific messages files
- Check for message keys not in the default messages file
- Check for unused message keys
- Generate a references object, which can:
- Provide simpler more accurate access to message keys
- Convert message key typing mistakes into a compilation error
- Convert removed message usage into a compilation error
- Convert changed message keys not updated into a compilation error
Can be used with the Play Framework 2.3.x.
Requires SBT 0.13.5.
Generates code in Scala or Java.
Add the plugin to project/plugins.sbt. For example:
addSbtPlugin("com.github.evanbennett" % "sbt-play-messages" % "1.1.0-RC1")Your project's build needs to enable a Play SBT plugin. For example in your build.sbt:
for Scala:
lazy val root = (project in file(".")).enablePlugins(PlayScala)or for Java:
lazy val root = (project in file(".")).enablePlugins(PlayJava)To enable seemless usage in your Twirl templates, you could add the following line into your build.sbt:
TwirlKeys.templateImports := (TwirlKeys.templateImports.value.diff(Seq("play.api.i18n._")) ++ Seq("conf.Messages", "play.api.i18n.Lang"))The checking and generation functionality is automatically run whenever your project is compiled. You can also manually run the functionality using the following:
| Command | Description |
|---|---|
| checkMessages | Check the project's message setting and messages files. |
| generateMessagesObject | Check the messages and then generate the messages object. |
Import the generated object, instead of the Play 'Messages' object, and then usage is very similar to usage without this plugin.
Note: Methods are provided on the generated object, which allow existing code using the Play Messages object to compile.
Importing the generated object:
In a Scala file you would probably:
import play.api.i18n.Messages // Or with the wildcard '_'and in a Java file you would probably:
import play.i18n.Messages; // Or with the wildcard '*'To use the generated object, replace this with:
import conf.MessagesWith a 'messages' file containing:
WELCOME=Welcome to our system.
ERRORS.INCORRECT_LENGTH={0} is the incorrect length.
Scala recommended usage:
Standard Play 'Messages' usage (which can still be used):
Messages("WELCOME")
Messages("ERRORS.INCORRECT_LENGTH", 2)Equivalent usage with the plugin:
Messages.WELCOME()
Messages.ERRORS.INCORRECT_LENGTH(2)You also have the option of using part of the key literally and part variably (obviously, the variable part could not exist):
val error = "INCORRECT_LENGTH" // Generated dynamically from some code
Messages.ERRORS(error, 2)Java recommended usage:
Standard Play 'Messages' usage (which can still be used):
Messages.get("WELCOME");
Messages.get("ERRORS.INCORRECT_LENGTH", 2);Equivalent usage with the plugin:
Messages.WELCOME.get();
Messages.ERRORS.INCORRECT_LENGTH.get(2);You also have the option of using part of the key literally and part variably (obviously, the variable part could not exist):
String error = "INCORRECT_LENGTH"; // Generated dynamically from some code
Messages.ERRORS.get(error, 2);The following settings can be modified by adding the provided line to your build.sbt file.
The requiring of a default messages file can be disabled by adding the following to your build configuration:
PlayMessagesKeys.requireDefaultMessagesFile := falseChecking that the 'application.langs' configuration matches the messages files can be disabled by adding the following to your build configuration:
PlayMessagesKeys.checkApplicationLanguages := falseDuplicate key checking can be disabled by adding the following to your build configuration:
PlayMessagesKeys.checkDuplicateKeys := falseKey consistency checking across multiple messages files can be disabled by adding the following to your build configuration:
PlayMessagesKeys.checkKeyConsistency := falseYou can configure some messages files to be skipped by adding:
PlayMessagesKeys.checkKeyConsistencySkipFilenames := Set("messages.en-AU")Key usage checking throughout your application code can be disabled by adding the following to your build configuration:
PlayMessagesKeys.checkKeysUsed := falseYou can configure some keys to be ignored by adding:
PlayMessagesKeys.checkKeysUsedIgnoreKeys := Set("")You can use regular expressions to configure keys to be ignored. For example, to ignore all keys starting with "PERMISSIONS", you could add:
PlayMessagesKeys.checkKeysUsedIgnoreFilenames := Set("PERMISSIONS.+")Key references object generation can be disabled by adding the following to your build configuration:
PlayMessagesKeys.generateObject := falseYou can configure the package and name of the object that will contain the key references by adding:
PlayMessagesKeys.generatedObject := "base.Messages"This code is licensed under the BSD 3-Clause License.