My main recommendation would be that you pick one particular unicode file-type and be very careful to only use it. Oh man the pains I've had with file types are not inextensive!
As for the rest, here's what comes to mind - I'm guessing you're familiar with a lot of this stuff, but just in case...
Unreal engine uses INI files for everything. Seems harmless enough (with the gotcha that you can't encode newlines directly - you end up having to pick some other character instead). I've used plain-text files as well, or lua scripts. XML would probably be as good if not better.
One other thing to be careful about for games is font-usage. Make sure you're using a font that has all the requisite characters (or if it doesn't make sure you have the ability to swap around fonts mid-game), and that you won't run into memory issues when rendering large quantities of strange characters.
Other obvious things are: right-to-left support, supporting the (relatively) weird entry methods of asian languages.
Are you going to be doing voice-localization as well? If so, you might be able to get by with subtitles (which are good to do from an accessibility standpoint anyway). If you're interested in subtitling, the
BBC guidelines are absolutely fascinating.
Will you localize time/date/number formatting? If you're using C/C++, you gotta be careful about locale support - the locale settings will be by default based on the system settings IIRM, so if the two go out of sync it can be weird.
Apple has
some good localization guides on-line, that offer the following advice that's almost useless for a lot of games, along the lines of "never concatenate two strings, never substitute one string inside another, never substitute a number inside of a string", &c..
Other things: be careful of capitalization! What letters get capitalized to what letters depends on the language (check out Turkish), and sometimes one lower-case letter gets capitalized to two upper case ones (β->SS in German).
Texture localization might also be required.
Also: learn what unicode is if you don't already know.
Also: for UI design, give yourself a lot of space - strings will expand a lot in other languages. A rule of thumb is to allow for everything to expand by 1.5x.
Also: be sure that whoever's translating has access to the game, so that they can see text in context.
Also: be careful about reusing localized strings in several places - if 'back' is on a button, when translating into other languages it might get translated into one of several words depending on its particular function. Best to be on the safe size and duplicate strings that are identical in english rather than to have really awkward-seeming translations.
Also: I'd recommend at least considering the setting up of a type system that would enforce that only localized strings find their way into on-screen text (or at least some tests that make sure that there aren't any), by having a special localized_string class, say.
Also: with regards to input, allowing users to reconfigure their input is a must, and ideally you'd want different default keyboard layouts for the various languages you might support (messing with scancodes/key codes isn't worth the hassle).
For any text talking or referring to the player or their character(s), you are going to have to consider having 2 versions depending on the gender of the player/their character.