![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Boost.Locale: Introduction to C++ Standard Library localization supportBoost , ,
Introduction to C++ Standard Library localization support Getting familiar with standard C++ LocalesСтандартная библиотека C++ предлагает простой и мощный способ предоставления локальной информации. Это делается с помощью класса< Вся эта информация представлена гранями, специальными классами, полученными из базового класса< Каждая грань, установленная в< std::ctype<char> const &ctype_facet = std::use_facet<std::ctype<char> >(some_locale);
char upper_a = ctype_facet.toupper('a');
Объект локализации может быть встроен в< cout.imbue(std::locale("en_US.UTF-8"));
cout << 1345.45 << endl;
cout.imbue(std::locale("ru_RU.UTF-8"));
cout << 1345.45 << endl;
Показать бы: 1,345.45 1.345,45 Вы также можете создать свои собственные грани и установить их в существующие локальные объекты. Например: class measure : public std::locale::facet {
public:
typedef enum { inches, ... } measure_type;
measure(measure_type m,size_t refs=0)
double from_metric(double value) const;
std::string name() const;
...
};
И теперь вы можете просто предоставить эту информацию в местность: std::locale::global(std::locale(std::locale("en_US.UTF-8"),new measure(measure::inches)));
/// Create default locale built from en_US locale and add paper size facet.
Теперь вы можете распечатать расстояние в соответствии с правильным местоположением: void print_distance(std::ostream &out,double value)
{
measure const &m = std::use_facet<measure>(out.getloc());
// Fetch locale information from stream
out << m.from_metric(value) << " " << m.name();
}
Эта техника была принята Boost. Локальная библиотека для обеспечения мощной и правильной локализации. Вместо того, чтобы использовать очень ограниченные грани стандартной библиотеки C++, он использует ICU под капотом, чтобы создать свои собственные гораздо более мощные. Common Critical Problems with the Standard LibraryВ стандартной библиотеке существует множество проблем, препятствующих использованию ее полной мощности, и есть несколько дополнительных проблем:
Статья Boost.Locale: Introduction to C++ Standard Library localization support раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |