It seems odd that this bit of registering the language into global state occurs here in defineLanguage(), while other bits like registering with _fileExtensionToLanguageMap occur in the setter itself.  Seems like this should go in the setter too, for consistency (especially if the move the _languages bit back into the ctor too, as suggested above).