Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Смотрите на примеры wxWidgets интернационализации. Это имеет реализацию негну механизма перевода, используемого в gettext (упомянутый ранее). Можно использовать его даже в коммерческом применении, потому что лицензия wxWidgets позволяет Вам делать так.
, Если Вы просто смотрите на метод для интернационализации приложения, gettext является начальной точкой.
Смотрите на GNU gettext
, который было бы интересно знать, какая библиотека C++ Вы использование, поскольку некоторые библиотеки GUI уже оказывают i18n поддержку.
На Вас указали на GNU gettext, который позволяет Вам заменять литеральные строки локализованными версиями во время выполнения - один аспект локализации (который является тем, что происходит после выполнения интернационализации когда кто-то на самом деле использует интернационализировавший код в определенной локали). На Вас также указали на Повышение (в особенности Повышение. Локаль ) библиотеки; это обычно - хороший ответ для чего-либо связанного с C++.
Другое место, Вы могли бы посмотреть, ICU (Международные Компоненты для Unicode) проект. И как источник данных, Вы могли бы посмотреть CLDR (Общий Репозиторий данных Локали) как источник информации о различных локалях; веб-сайт Unicode также имеет большую информацию о других аспектах различных культур, потому что это имеет дело со многими языками.
И как заключительный ресурс на данный момент, довольно специализированный, существует база данных Time Zone Olson , который обновляется многократно каждый год для отслеживания способ, которым разные страны изменяют свои правила о том, когда изменить между зимой и летом (переход на летнее время и стандарт) время.
Я второй GNU gettext. Однако, если Вы используете QT (и возможности хороши, если Вы хотите сделать GUI с C++), QT идет со своей собственной версией gettext и прекрасного инструментального средства для перевода (спокойный Лингвист), который делает вещи легче, и может также использоваться из приложений не-GUI без издержек. У нас есть он даже в сервисе.
Однако относительно того, какой C++ испытывает недостаток, что прибывает по моему мнению:
Также взглянули на то, что необходимо было сделать для себя, даже если эти вещи поддерживаются..NET, например, идет со всесторонним списком локалей, которые готовы к употреблению.
Для поддержки UTF-8 смотрите на библиотека UTF-8 CPP.
Вам не нужны библиотеки для выполнения этой задачи. См. Руководство MS по Satellite DLL здесь .
Если вы укажете использование Unicode в настройках проекта и используете функции Unicode String (вместо char), тогда стандартное использование Satellite DLLs для хранения данных, специфичных для локали (диалоговые окна, строки и т. д.) будет достаточно.
Windows сама позаботится о поиске нужного ресурса, если DLL правильно названа. Суффиксы, необходимые для вспомогательных DLL, здесь .