В текущем стандарте С++ (С++ 03) слишком мало спецификаций о локализации текста, что делает работу разработчика С++ более сложной, чем обычно, при работе с локализованными текстами (конечно, стандарт С++ 0x поможет здесь позже).
Предполагая следующий сценарий (который из реальных случаев разработки игр для ПК-Mac):
- приложение для реагирования (в реальном времени): приложение должно минимизировать время без реагирования на "не заметное", поэтому важна скорость выполнения.
- локализованные тексты: отображаемые тексты локализованы на более чем двух языках, потенциально больше - не ожидайте фиксированного количества языков, должны быть легко расширяемыми.
- язык, определенный во время выполнения: тексты не должны компилироваться в приложении (и не иметь одного приложения на язык), вы получаете информацию о выбранном языке при запуске приложения - что подразумевает некоторую загрузку текста.
- кросс-платформенный: приложение кодируется с учетом кросс-платформенной (Windows - Linux/Ubuntu - Mac/OSX), поэтому локализованная текстовая система также должна быть перекрестной платформой.
- автономное приложение: приложение предоставляет все, что необходимо для его запуска; он не будет использовать какую-либо библиотеку среды или требует, чтобы пользователь установил что-либо, кроме ОС (например, большинство игр).
Каковы наилучшие методы управления локализованными текстами на С++ в этом приложении?
В прошлом году я заглянул в это, и единственное, что я уверен в том, что вы должны использовать std::wstring
или std::basic_string<ABigEnoughType>
для управления текстами в приложении. Я прекратил свое исследование, потому что больше работал над проблемой "текстового отображения" (в случае 3D в реальном времени), но я думаю, что есть некоторые рекомендации по управлению локализованными текстами на необработанном С++ за пределами этого и "использование Unicode",.
Итак, все лучшие практики, предложения и информация (кросс-платформенная делает это сложно, я думаю) приветствуются!