Ресурсы для I18N в C++

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

15
задан Jonathan Leffler 17 April 2012 в 19:14
поделиться

6 ответов

Смотрите на примеры wxWidgets интернационализации. Это имеет реализацию негну механизма перевода, используемого в gettext (упомянутый ранее). Можно использовать его даже в коммерческом применении, потому что лицензия wxWidgets позволяет Вам делать так.

, Если Вы просто смотрите на метод для интернационализации приложения, gettext является начальной точкой.

1
ответ дан 1 December 2019 в 05:02
поделиться

Смотрите на GNU gettext

, который было бы интересно знать, какая библиотека C++ Вы использование, поскольку некоторые библиотеки GUI уже оказывают i18n поддержку.

0
ответ дан 1 December 2019 в 05:02
поделиться

На Вас указали на GNU gettext, который позволяет Вам заменять литеральные строки локализованными версиями во время выполнения - один аспект локализации (который является тем, что происходит после выполнения интернационализации когда кто-то на самом деле использует интернационализировавший код в определенной локали). На Вас также указали на Повышение (в особенности Повышение. Локаль ) библиотеки; это обычно - хороший ответ для чего-либо связанного с C++.

Другое место, Вы могли бы посмотреть, ICU (Международные Компоненты для Unicode) проект. И как источник данных, Вы могли бы посмотреть CLDR (Общий Репозиторий данных Локали) как источник информации о различных локалях; веб-сайт Unicode также имеет большую информацию о других аспектах различных культур, потому что это имеет дело со многими языками.

И как заключительный ресурс на данный момент, довольно специализированный, существует база данных Time Zone Olson , который обновляется многократно каждый год для отслеживания способ, которым разные страны изменяют свои правила о том, когда изменить между зимой и летом (переход на летнее время и стандарт) время.

11
ответ дан 1 December 2019 в 05:02
поделиться

Я второй GNU gettext. Однако, если Вы используете QT (и возможности хороши, если Вы хотите сделать GUI с C++), QT идет со своей собственной версией gettext и прекрасного инструментального средства для перевода (спокойный Лингвист), который делает вещи легче, и может также использоваться из приложений не-GUI без издержек. У нас есть он даже в сервисе.

Однако относительно того, какой C++ испытывает недостаток, что прибывает по моему мнению:

  • Полная поддержка локалей относительно чисел, дат или валюты. И помните, что локали отличаются по больше, чем просто десятичный разделитель, включая упорядочивание, которое приносит мне к второй точке:
  • сам C++ не имеет функции формата поддержкой заказанных аргументов (потому что на другом языке, порядок слов мог бы отличаться, чем на Вашем языке). Можно использовать повышение:: формат для этого. QT, конечно, поддерживает его также.

Также взглянули на то, что необходимо было сделать для себя, даже если эти вещи поддерживаются..NET, например, идет со всесторонним списком локалей, которые готовы к употреблению.

0
ответ дан 1 December 2019 в 05:02
поделиться

Для поддержки UTF-8 смотрите на библиотека UTF-8 CPP.

0
ответ дан 1 December 2019 в 05:02
поделиться

Вам не нужны библиотеки для выполнения этой задачи. См. Руководство MS по Satellite DLL здесь .

Если вы укажете использование Unicode в настройках проекта и используете функции Unicode String (вместо char), тогда стандартное использование Satellite DLLs для хранения данных, специфичных для локали (диалоговые окна, строки и т. д.) будет достаточно.

Windows сама позаботится о поиске нужного ресурса, если DLL правильно названа. Суффиксы, необходимые для вспомогательных DLL, здесь .

-3
ответ дан 1 December 2019 в 05:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: