Localisation in JavaScript/ECMAScript is poor, IMO. This is due to phrases in the spec that look like this:
Number.prototype.toLocaleString()
Produces a string value that represents the value of the Number formatted according to the
conventions of the host environment’s current locale. This function is implementation-dependent, and
it is permissible, but not encouraged, for it to return the same thing as toString.
This resulted in Chrome, Opera and Safari returning the same thing as .toString()
. Firefox and IE will return locale formatted strings, and IE even includes a thousands separator (perfect for currency strings).
Every localisation method defined in the spec is defined as "implementation-dependent", which results in a lot of inconsistencies.
Even determining the locale is a problem, since there's no specification for obtaining the current language. Each browser implements a method to obtain a language string, but this could be based on the user's operating system language or just the language of the browser:
// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;
In short, you have to put in a lot of the work yourself, or use a framework/library, because you cannot rely on the browser to do it for you.
Various libraries and plugins for localisation:
Feel free to add/edit.