It’s possible to become complacent about how complex internationalisation can be. For folks writing programs that run on a given platform, it should be really easy of course – you just use the APIs provided, and your program takes advantage of the platform i18n support.
As a user, when internationalisation is done properly, you shouldn’t even know it’s there. Occasionally it reveals itself as you get an email from your Chinese friend, and his name renders in Chinese characters correctly.
However, once in a while, it’s good to look under the hood to see the massive amount of engineering effort that has gone in so that scripts in all languages render, wrap and justify correctly. Sobering stuff. A good example of this, is Richard Ishida’s Writing Systems Tutorial which runs over the various issues that the people building i18n support into your favourite platform had to deal with (be it Java, Solaris or Mozilla)
If you’re still not convinced about how complex this stuff is, have a quick look at this page which demos line wrapping algorithms for various different scripts. I was impressed anyway… As a programmer, having a platform do all the hard work for you instead of having to worry about all of these issues is fantastic. These days, a modern OS will provide internationalisation, localisation and accessibility support – and so long as you write according to the APIs, you can be sure that your program will have the widest possible user-base.
The first time I came across J2EE, it was a similar situation : “What, you mean I don’t have to worry too much about transactions, persistance, security and remote-access – wow, where do I sign up ?!”