When you instantiate your TranslateService without passing any arguments, Angular will automatically handle the dependencies for you using its Injector mechanism. This approach allows Angular to build all necessary dependencies and inject them into TranslateService's constructor.
translateService = new TranslateService();
On the other hand, if you manually create an instance of TranslateService with specific arguments, it becomes your responsibility to provide and manage those dependencies.
constructor(private translateService: TranslateService)
Whether TranslateService is a custom implementation or part of a third-party package, Angular treats all Injectables in the same way. The TranslateModule.forRoot() method simply ensures that services like TranslateService are registered at the root level as singleton instances, allowing you to inject TranslateService anywhere within your application.