Step 1: Make the dough: In a large bowl, whisk together the milk, sugar, and butter until smooth. In a separate bowl, whisk together the flour, yeast, orange zest, and lemon zest. Add the dry ingredients to the wet ingredients and mix until just combined. Add the eggs, vanilla extract, rum, and salt and mix until a dough forms.
Step 2: Turn the dough out onto a lightly floured surface and knead for 10-15 minutes, or until the dough is smooth and elastic. Place the dough in a greased bowl, cover with plastic wrap, and let rise in a warm place for 1 hour, or until doubled in size.
Step 3: Make the filling: In a small saucepan, whisk together the milk, sugar, and walnuts or almonds until smooth. Bring the mixture to a simmer over medium heat and cook for 5 minutes, or until thickened. Remove the pan from the heat and stir in the rum, orange extract, orange zest, espresso powder, cocoa powder, and vanilla extract.
Step 4: Once the dough has doubled in size, punch it down and divide it in half. Roll out each half of the dough into a rectangle about 1/4-inch thick. Spread the filling evenly over each rectangle of dough. Starting from the long side, roll up the dough into a tight log. Pinch the seams to seal.
Step 5: Grease two 9x5-inch loaf pans. Place the dough logs in the prepared pans, cover with plastic wrap, and let rise in a warm place for 30 minutes, or until doubled in size.
Step 6: Preheat the oven to 350 degrees F (175 degrees C). Bake the loaves for 50-60 minutes, or until golden brown and a toothpick inserted into the center comes out clean. Let the loaves cool in the pans for 10 minutes before removing them and letting them cool completely on a wire rack.
Enjoy!