As many of you are probably aware by now, I'm designing a user interface to a industrial boiler exhaust gas analyser.
There is a requirement for different languages to be supported by this user interface due to the rest of the world's unreasonable demands to speak their own language. My suggestion was to go and sort out Johnny foreigner like the good old days of the Her Majesty's Empire but management have decided that it would be easier to make the software multi-lingual. Besides Mr Bush is out there educating the natives for us :-p
I'm wondering which method the collective would suggest to allow this facility. My ideas are:
1) Multiple versions of software with all text and graphics in one tongue and changing language requires reprogramming the system. The language wouldn't change very often so this isn't too inconvenient, plus we could charge for a language pack. However, functional changes would have to be replicated across all versions.2) The software written with #ifdefs everywhere so I choose the language at compile time with a #define which makes the code horrifically messy but keeps it down to one version (of which different builds can be supplied as different language packs)
3) A variable set within the software at run-time which is checked before displaying anything language specific. This will put case statements all over the code whenever I have to display text but is cleaner than #ifdefs and allows on-line change of language - an important factor for our service engineers who don't speak Swahili or Newcastle.4) Several constant tables containing all the text the system will ever display in all the supported languages which is referred to by a pointer, which can be changed to point to another language table if required. This will remove the decision making from each text display and speed things up but will reduce the readability of the code.
5) Something I haven't thought of yet.Another complication is that the manual must be stored and it is currently stored as 70-odd RLE bitmaps and there is not enough flash to store two versions at the same time. I could perhaps write a basic html viewer to reduce space but that then gives similar language choice decisions to as before.