South Africa were 503 for nine at lunch on Monday in reply to New Zealand's first innings total of 593 for eight declared.
Prince was unbeaten on 107, his fourth Test century. He batted patiently on a pitch which again offered no help to the bowlers. It took him almost two hours to move from his overnight score of 70 to his hundred, which he reached with a straight drive for four off Franklin. He had batted for just over six hours in total and faced 259 balls. He hit nine fours.
Franklin, who made a century batting at number nine in New Zealand's innings, struck twice in two balls in the fourth over of the day after South Africa resumed at 427 for five.
Mark Boucher was caught by Stephen Fleming at first slip for 33 when he top-edged a pull and Fleming jumped to catch the ball above his head.
The left-handed Nicky Boje was leg before wicket next ball, going back on his stumps and being struck low down by a ball that swung in to him. Boje batted with his right hand strapped after having five stitches in the webbing between thumb and forefinger. He is expected to miss the third and final Test starting in Johannesburg Friday.
Andre Nel survived the hat-trick ball and batted for over an hour before falling to Franklin after the second new ball was taken. Franklin made the first ball of his second ball swing in and Nel was leg before for 12.
Franklin had three for 95 at lunch.
South Africa lead the series 1-0.