For using the instant
method, you have to be sure that your translations have been loaded and it is safe to use it, if not it will fail. That may be the point.
The explanation is simple, you have three ways of loading the translation:
You are sure that your translation files are already loaded and don't
need updates: translate.instant('key')
You are not sure about the loading and don't need updates (returns an
Observable to subscribe): translate.get('key')
You want updates when user is changing the language:
translate.stream('key')
I think that you might use the get option, as is the one with less known bugs:
let userName = 'Nick'
translateService.get('MY_STRING', { user: this.userName }).subscribe((text:string) => {console.log(text});