i18n support

Stapler depends on localizer for the i18n support.

i18n from Jelly view scripts

For Jelly view scripts, the convention is to place localized message resource files by using the same base name. For example, if you are writing foo.jelly, its property files will be placed in files like foo.properties and foo_ja.properties.

In this set up, Jelly view scripts can refer to message resources by using a special expression of the form ${%KEY(arg1,arg2,...)}. The messages are formatted by using MessageFormat, and arguments are individually parsed as JEXL scripts. If there's no arguments, parenthesis can be omitted and thus it can be simply written as ${%KEY}.

If you need to refer to message resources from within a JEXL expression, you can use a string literal notation "%KEY(arg1,arg2,...)" or its argument-less short form "%KEY". For example, ${obj.methodCall(1,true,"%Message")}

If the specified KEY is not available in the property files, the key itself will be used as a formatting string. The key can contain any character except '(' and '}'. This convenient defaulting allows you to skip writing foo.properties most of the time (that is, you'd only need property files for translations.)