Las funciones take() y limit() no funcionarán con una carga ansiosa si recupera el modelo principal más de uno usando get().
Así que tienes que hacerlo de otra manera,
$categories = Category::with('contents')->get();
Después de recuperar $categories
, puede hacer un bucle foreach como el siguiente,
$contents = [];
foreach($categories as $category){
$category->limitedContents = $category->contents()->with('languages')->limit(4);
}
Y al hacer esto, obtendrá 4 contenidos por categoría en todas las categorías con limitedContents
.