Boost.Locale: Frequently Asked Questions

| Boost.Locale

- Main Page
- Modules
- Namespaces
- Classes
- Files
- Examples

Frequently Asked Questions

- I try to use some Boost.Locale functions and I get an `std::bad_cast` exception thrown?
  Answer: You probably try to use incorrect `std::locale` object. All Boost.Locale tools relay on `std::locale` object's facets. The locale object should be generated with generator class and then passed to the function or alternatively global locale should be set using `std::locale::global()` function such that global locale (and default created one) would have required facets to use.
- I had installed global locale and try to write something to stream but still get wrong output? For example:

          #include <boost/locale.hpp>
          #include <iostream>
          int main()
          {
              boost::locale::generator gen;
              std::locale::global(gen(""));
              std::cout << boost::locale::as::date << std::time(0) << std::endl;
          }

  Prints a number instead of a date.
  Answer: You forget to imbue the locale to the stream. Changing the global locale does not affect the locale in existing `iostream` objects. Thus because `std::out` and other global streams were created before changing the global locale Boost.Locale manipulators have no effect. You need to write:

          #include <boost/locale.hpp>
          #include <iostream>
          int main()
          {
              boost::locale::generator gen;
              std::locale l = gen("");
              std::locale::global(l);
              std::cout.imbue(l);
              std::cout << boost::locale::as::date << std::time(0) << std::endl;
          }