Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost 1.49 Locale Conversion failed
From: NtVisigoth (ntvisigoth_at_[hidden])
Date: 2012-07-10 09:16:28


2012/7/10 Artyom Beilis <artyomtnk_at_[hidden]>

> The locale name should be "en_US.UTF-8" or "ru_RU.UTF-8", the default
> UTF-8 locale is for
> default system locale "".
>
> When you set locale as "en" it assumes that encoding (as not specified) is
> US-ASCII and conversion fails.
>
> Artyom Beilis
> --------------
> CppCMS - C++ Web Framework: http://cppcms.com/
> CppDB - C++ SQL Connectivity: http://cppcms.com/sql/cppdb/
>
> ------------------------------
> *From:* NtVisigoth <ntvisigoth_at_[hidden]>
> *To:* boost-users_at_[hidden]
> *Sent:* Tuesday, July 10, 2012 12:36 PM
> *Subject:* [Boost-users] Boost 1.49 Locale Conversion failed
>
> Hello, everyone!
>
> I have already answred here:
> http://lists.boost.org/boost-users/2012/07/75097.php
> But previous latter badly typed.
>
> 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 main( int 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 == 2 ? 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 the 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.
>
> Compillers : Microsoft Visual Studio 2008 and 2010
> Boost version : 1.49
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>

I have :
1) Russian language Filename :
g:\project\proba\locale\ru_RU.UTF-8\LC_MESSAGES\messages.mo
2) Russian language locale name in ó++-source:
const std::string ruLanguage( "ru_RU" )

Is it correct?

I dont understand How Boost Locale finds languages MO-file by their locale
names in C++-source.



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net