1. Using variables to put numbers in the string. Singular and plural are not always only two options. Rules in this regard can get quite complex. gettext has this solved by using rules: n%2 == 0? Use A. n==0? Use B. n%2 == 1? Use C. etc. That should give you an idea about complexity.
2. Replacing words into the string is nearly impossible due to declensions.
3. Names. When using a different script, will the name be transliterated? Do the names need to be inflected? Will they be handled correctly when changing writing direction?
3a. Names have a whole load of problems anyway. The "given name" isn't always the first name. The surname isn't always the most important one. Some people don't have family names, some people have two or more. Some people have double-barrelled given names. Etc.
4. Ordinals differ greatly from language to language.
5. String length can mess up your layout. A good translator can help by using different idiom, but sometimes it's just not possible.
6. Layout expectations are different when the writing system is right-to-left. You also need to learn the details of Unicode's direction algorithm, because you will encounter situations where it doesn't work properly without guidance.
These are just some problems we've actually encountered when using multiple languages.
What letter does the name Van der Waals sort under?
What about D'Arcy
Does McKay come before MacKay ?
Is 7-4-09 an American holiday or a week after April fools?
We use IDs and I've not seen too many of the problems you mention. I will, however, agree that the string length can cause serious problems for a layout. We tend towards using very flexible UI designs where the UI elements resize and reposition themselves a long with the strings. However, UI design isn't as stylish for embedded devices so we get let off easy here. One of the biggest problems we have with our newer developers is that they don't know how to write their UIs so that they can easily re-arrange themselves for our various languages. Also, the Left and Right layout changes are all part of our look and feel engine.
I wonder if some of these problems are specific to web applications and some of the 'fancier' UI designs that we don't use? I don't actually know enough about the differences between the two to say.
But honestly, out of all the problems you can have, that's a good one indicative of success.
In many non-Roman scripts the letters change form drastically based on if they are at the beginning, middle, or end. In some, the letters literally switch positions with other letters visually. Current operating system font support, Unicode standards, and fonts simply don't exist to support all of this.
Graphite (http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&...) is one great initiative to get the ball moving here and is gaining some support (being included as part of OpenOffice 3), however there are HUGE steps that have not yet been taken before applications can even think about scaling to 3000 languages. Unicode is great, but it's not a simple solution/answer/cure-all.
Hopefully we'll be able to scale that large one day, but luckily for now we only need to target < 1% of the world's languages.
How many customers will you have past your particular and local top 35 languages? Enough to warrant the translation and support and testing work inherent in adding another language?
And yes, the target market for and the list of languages used by your customer base(s) may or will differ from mine, too.