Stir the warm milk and yeast together in a large bowl, let sit for 5–10 minutes until foamy.
Mix in the sugar, eggs, melted butter, salt, vanilla, and almond extract if using.
Slowly stir in 3½ cups of flour until a soft dough forms. You can add a little more flour if needed until the dough pulls away from the sides, but remains slightly tacky
Turn the dough onto a lightly floured surface and knead for 8–10 minutes until smooth and elastic.
Place the dough in a greased bowl, cover, and let rise in a warm place for about 1 hour or until it has doubled in size.
Punch down the dough and divide it into three equal pieces. Roll each portion into a rope about 18 inches long.
Braid the ropes of dough together and pinch the ends to seal, forming a long, braided loaf. Then pull the ends together to form the braid into a ring.
Transfer the dough to a parchment-lined baking sheet.
Gently nestle colored raw eggs into the braid if desired.
Cover loosely with a flour-sack towel (or a lint-free rag), and let rise again for 30–45 minutes until puffy.
Preheat the oven to 350°F.
While the oven is heating, brush the loaf with beaten egg.
Bake for 25–30 minutes, or until golden brown and the loaf sounds hollow when tapped on the bottom.
Whisk the confectioner’s sugar and milk together in a small bowl until smooth.
Drizzle the bread with the glaze while it is still warm, and immediately add sprinkles (if using) while the glaze is wet, as the glaze will harden as it sets.
Allow the bread to cool completely before slicing and serving.