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

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

15 голосов
/ 12 октября 2008

Я играю с локалью и I18N в c ++ и ищу примеры из реальной жизни. Я прочитал главу Josuttis об I18N в его книге (2-е издание для C ++ 11, которая выйдет в апреле 2012 года) и нашел ее полезной, но без реальных примеров, которые можно извлечь Понятия не имею, если я следую передовым методам, совершаю ошибки новичка. На какие ресурсы StackOverflow может указывать мне как в Интернете, так и в печатном виде для работы с I18N в C ++?

Кроме того, какие библиотеки доступны для C ++, что облегчает работу с i18n? Что не должно быть в стандартной библиотеке? На первый взгляд кажется, что поддержка UTF8 отсутствует в стандартной библиотеке.

Edit:

После некоторого прочтения кажется, что C и C ++ оба Unicode "независимы". Также кажется, что для работы с данными, закодированными в Unicode / UTF8 / 16/32, необходимо использовать стороннюю библиотеку. Суть в том, что стандартная библиотека сама думает только о ISO 8859 и связанных символьных страницах, которые меняются в зависимости от того, какой язык установлен. Это означает, что я, вероятно, хочу использовать библиотеку ICU для строк вместо использования std::string или даже std::wstring.

Ответы [ 6 ]

11 голосов
/ 12 октября 2008

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

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

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

1 голос
/ 12 октября 2008

Взгляните на wxWidgets примеров интернационализации. В нем реализована не-GNU реализация механизма перевода, используемого в gettext (упоминалось ранее). Вы можете использовать его даже в коммерческих приложениях, потому что лицензия wxWidgets позволяет вам это делать.

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

0 голосов
/ 15 ноября 2009

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

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

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

0 голосов
/ 12 октября 2008

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

0 голосов
/ 12 октября 2008

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

Однако, что касается того, чего не хватает в C ++, то, что приходит мне в голову:

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

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

0 голосов
/ 12 октября 2008

Взгляните на GNU gettext

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...