Directive to generate localized format methods from Properties
files.
// EXAMPLE ANNOTATION
// planets.properties
// planet-event=At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.
// planets_de.properties
// planet-event=Am {1,time} um {1,date} Uhr gab es {2} auf Planet {0,number,integer}.
@Messages("planets.properties")
// EXAMPLE CODE
var time = ZonedDateTime.now();
String event = Planets.planetEvent(locale, 4, time, "an attack");
See Backing a ResourceBundle
with Properties Files for more information on localization.
This annotation is strict by default.
This helps build systems detect missing translations and bugs in translated format strings.
However, developers are likely add or modify strings during development before translations are available.
The missingKey()
and incompatibleFormat()
properties can be set to Severity.WARN
or Severity.IGNORE
during development to avoid breaking builds.
Create a single static final Severity
variable and reference it in annotations to control this globally.
Set these to Severity.ERROR
prior to release and/or in a "smoke test" branch.
-
Optional Element Summary
Optional ElementsModifier and TypeOptional ElementDescriptionClass<? extends TemporalAccessor>
Signature type where format expression is date/time type.boolean
Treat values asMessageFormat
expressions and generate typed method format methods.How to handle incompatible format string in localized files.boolean
Search for localized properties.How to handle missing keys in localized files.Class<?>
Signature type where format expression has no type.Signature type where format expression is "number" or "choice" type.Common processing instructions.String[]
Resource files.Generated code visibility.
-
Element Details
-
value
String[] valueResource files.- Returns:
- resources
- Default:
- {}
-
processing
Processing processingCommon processing instructions.- Returns:
- instruction annotation
- Default:
- @uk.autores.Processing(namer=uk.autores.naming.IdiomaticNamer.class)
-
visibility
Visibility visibilityGenerated code visibility.- Returns:
- visibility
- Default:
- PACKAGE
-
localize
boolean localizeSearch for localized properties.- Returns:
- whether to localize
- Default:
- true
-
format
boolean formatTreat values asMessageFormat
expressions and generate typed method format methods.- Returns:
- whether to format
- Default:
- true
-
missingKey
Severity missingKeyHow to handle missing keys in localized files. Only applies whenlocalize()
is true.- Returns:
- error severity
- Default:
- ERROR
-
incompatibleFormat
Severity incompatibleFormatHow to handle incompatible format string in localized files. Only applies whenformat()
is true.- Returns:
- error severity
- Default:
- ERROR
-
noneType
Class<?> noneTypeSignature type where format expression has no type. Set this to broaden toObject.toString()
or narrow toString
.- Returns:
- type used in generated methods
- Default:
- java.lang.CharSequence.class
-
numberType
Signature type where format expression is "number" or "choice" type. Set this to use stricterNumber
types.- Returns:
- type used in generated methods
- Default:
- java.lang.Number.class
-
dateTimeType
Class<? extends TemporalAccessor> dateTimeTypeSignature type where format expression is date/time type. Set this to relax rules on input. Using inappropriateTemporalAccessor
types with some expressions can result inDateTimeException
.- Returns:
- type used in generated methods
- Default:
- java.time.ZonedDateTime.class
-