Localisation is done on the server and translations are published to the server and the client consumes the language file.
However localised string substitution are done via Aspect programming with interception of setters on objects with the set being overwritten with the static localised string.
OO, you have to love it.