Для упрощения жизни в дальнейшем (и уже сейчас) нужно перевести всё на UNICODE.
Для этого нужно:
- Заменить везде std::string на std::wstring;
- std::stringstream на std::wstringstream;
- char (встречаются местами) на wchar_t;
- разобраться с вводом/выводом (проверка кодировки потока, использование iconv для устранения проблем), скорее всего проще будет написать простейшую обертку для потоков);
Также в будущем (думаю относительно далеком) не мешало бы перевести все на libgettext.