I've done some tests too, wanting to add Swedish as a language in Civ IV.
Like Pggar I managed to add a sixth language option to the dropdown menu (rather easy, it's done by adding another menuitem in CvOptionsScreen.py, and a sixth language key in CIV4GameText_New.xml). Then I started adding a few translations to the files in Assets/XML/Text/ just to see if something happened if I switched to my new language.
This should have been simple, I thought. Regardless of whether the program somehow realizes the language is using the tag "Swedish" (no matter how I've looked, I haven't found a place to tell it what tags I want it to use), or if it's just using the sixth translation it can find, I should have got
some results. But when I switch over, everything is blank, even the phrases I
know I have translated.
So I started experimenting, and got some disappointing results. It seems Civ IV doesn't actually look for the tags matching your language's name. Instead it extracts the language's position in the dropdown menu (1 for English, 2 for French, 3 for German, etc.) and uses that number to pick which phrases to use.
I tested this by renaming the tags to some translations to try to prevent Civ from finding the correct phrase, and by changing the order of some translations (putting the Spanish phrase before the English one), and Civ continued to pick them according to the position in the dropdown menu.
Okay, so Civ isn't so smart as I had hoped, but at least this should mean that if you just add a sixth translation to all phrases, and add a sixth option to the dropdown menu, everything should work automatically. And yet it doesn't.
I tracked the extraction of the selected language from the dropdown menu to a function called "handleLanguagesDropdownBoxInput" in CvOptionsScreenCallBackInterface.py. And yes, it seems it tries to set the language based on the position of the menu item, with the command "CyGame().setCurrentLanguage(iValue)". Now I don't know anything about Python, but as it looks to me it
should work. But I suspect the function "setCurrentLanguage" is unprepared for the possibility that there are more than five languages, and somehow "neuters" the whole thing when iValue is higher than expected. And this function belongs to a dll file, Assets/CvGameCoreDLL.dll, which you can't change (at least not easily).
I'm still adding Swedish to my copy of Civ (mainly as an exercise), but now I'm adding it by inserting Swedish tags before the Spanish tags, and adding Swedish as a menu item
instead of Spanish.