Add ability to place named variables in language strings

This PR makes it possible to place named placeholders for the sprintf variables in a string.

So instead of doing:
```
SOME_STRING="Hello %s, Welcome to %s. You can log in with %s (%s)"
```
You can now do:
```
SOME_STRING="Hello [[%1:name]], Welcome to [[%2:sitename]]. You can log in with [[%3:username]] ([[%4:password]])"
```
This gives translators a much better sense of what is going on.
It also makes it easier for translators to change the order of the variables, as this approach forces numbered variables.