Hello, everyone!

When using boost::locale with the russian language of the string in UTF-8 encoding I get an error while getting the locale.
An exception with the message e.what(): "Conversion failed" is thrown

My code is not very different from that in the examples:

#define  TR(S)  boost::locale::translate(S).str()
const std::string strDefaultLangId( "en" );
int mainint argc, char * argv[] )
{
    using namespace std;
    using namespace boost::locale;
    int exitCode = EXIT_SUCCESS;
    try
    {
        generator gen;
        gen.add_messages_path("g:\\source\\boost_locale\\languages\\");
        gen.add_messages_domain("messages");
        std::string language( argc == ? argv[1] : strDefaultLangId.c_str() );
        std::locale loc = gen( language );
        locale::global( loc );
        std::wstring s = TR(L"hello world");
        wcout << s << endl;
    }
    catch( exception& e )
    {
        cout << "Error : " << e.what() << endl;
        exitCode = EXIT_FAILURE;
    }
    catch( ... )
    {
        cout << "Unknown error" << endl;
        exitCode = EXIT_FAILURE;
    }
    return exitCode;
}

The path to the file with the russian language: "g:\source\boost_locale\languages\ru\LC_MESSAGES\messages.mo"

What could be wrong?
* Is it necessary to use any backends?
* Is it yet necessary to call imbue on the stream? But I'd like avoid it because I am going to write the log using glog.