I think ->with() is supposed to work with relationships. But you can use closures to constrain the information you receive from with, as described here: https://laravel.com/docs/6.x/eloquent-relationships#constraining-eager-loads
The code that you have there definitely looks like it could be rewritten with relationships. Looking at the Product model, I assume it has a "HasMany" relationship to ProductTranslations and a "BelongsTo" relationship to manufacturers?
So that function could be replaced with:
->with(['products' => function($query) use ($langId) {
$query->with(['manufacturer', 'product_translations' => function($query) {
$query->where('language_id', $langId);
});
}])
Here I have said that the products have to eager load the manufacturer and product translations relationships. But I have put a further constraint on the product_translation relationship relating to the language id.