Wie synchronisiert man std::locale und LANGID/LCID
-
Gibt es eine Möglichkeit die locale der std::iostreams mit der Spracheinstellung von Windows zu synchronisieren? Im konkreten Fall konvertiere ich boost::date_time Variablen mittels facets und stringstreams in beliebige Stringformate.
Nun ändert der Benutzer bspw. die Sprache (hierzu wird in einer globalen Hilfsklasse die programmglobale LANGID bzw LCID verändert). Ich suche nun einen Weg, wie ich diesen Wert in den korrekten std::std_name konvertieren kann.
-
Ist der std_name nicht ein ISO Name des Landes/Sprache?
Dann sollte GetLocaleInfo Info helfen:
http://msdn.microsoft.com/en-us/library/dd318101(VS.85).aspx
http://msdn.microsoft.com/en-us/library/dd373848(VS.85).aspx
-
Ja, damit geht es wunderbar. Danke.
Bspw:
LCID lcid = ::GetThreadLocale(); //oder GetSystemDefaultLCID() int bytes_needed = ::GetLocaleInfo( lcid, LOCALE_SISO639LANGNAME, NULL, 0 ); std::vector< TCHAR > buffer( bytes_needed +1); ::GetLocaleInfo( lcid, LOCALE_SISO639LANGNAME, &buffer[0], bytes_needed ); buffer[ bytes_needed ] = '\0';ist einer der möglichen Wege von LCID zu c-local...
Nun bräuchte ich noch c-local zu LCID
-
Auch das findest Du in dem entsprechenden MSDN Abschnitt:
LocaleNameToLCID
http://msdn.microsoft.com/en-us/library/dd318711(VS.85).aspx
-
Martin Richter schrieb:
Auch das findest Du in dem entsprechenden MSDN Abschnitt:
LocaleNameToLCID
http://msdn.microsoft.com/en-us/library/dd318711(VS.85).aspxOk, leider wird LocaleNameToLCID erst ab Windows Vista unterstützt. Gibt es diesbezüglich eine ALternative?
-
muffmolch schrieb:
Martin Richter schrieb:
Auch das findest Du in dem entsprechenden MSDN Abschnitt:
LocaleNameToLCID
http://msdn.microsoft.com/en-us/library/dd318711(VS.85).aspxOk, leider wird LocaleNameToLCID erst ab Windows Vista unterstützt. Gibt es diesbezüglich eine ALternative?
jaja, ist hier zu finden:
http://msdn.microsoft.com/en-us/library/dd317800(v=vs.85).aspxso ganz intuitiv finde ich die msdn für die WinAPI im Gegensatz zum .NET-Teil nicht...
Hier benötigt man aber die Microsoft NLS Downlevel APIs. Die sind zwar frei erhältlich, gibt aber evtl noch eine weitere Möglichkeit?