Hvordan indstiller jeg den rigtige indledende lokalitet til et C ++-program på Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er temmelig ny til lokaliseret programmering, og jeg forsøger at finde ud af, hvordan du indstiller den rigtige indledende lokalitet til en nyligt lanceret, ustyret C ++-applikation (indefra appen).


Så vidt jeg kan fortælle, begynder nye applikationer med C-lokaliteten, snarere end den rette regionale lokalitet (engelsk, tysk, osv.). Så hvad jeg skal gøre er at ringe setlocale( LC\_ALL, "???" ), men jeg er ikke sikker på, hvordan man får den korrekte værdi for det andet argument. Det vil være noget som 'engelsk' eller 'tysk: tyskland' - stort set uanset hvilken lokalitet der var indstillet af brugeren via kontrolpanelet Regional og sprogvalg. Bare for at være klar, jeg 'm ikke leder efter, hvordan man formaterer lokalstrengen, jeg søger efter den korrekte lokalstreng til computeren hvor appen kører.


Jeg gætter på, at der er noget Win32 API, der ville give mig dette, eller måske en registreringsnøgle, der ville indeholde den rigtige værdi. Er der nogen der ved, hvad jeg skal gøre?

Bedste reference


setlocale () er C, ikke C ++. Jeg husker vagt at se forstyrrelser mellem de to på VC6, men det var en fejl. Normalt påvirker setlocale () kun opførelsen af ​​C-funktionerne.


I C ++ styres lokalisering af std :: locale-klassen. Som standard bruger locale-følsomme operationer den globale lokalitet, der opnås som standard - konstruerer et lokalobjekt, og kan indstilles med std :: locale :: global (const std :: locale &).


Konstruktion af et lokalobjekt med en tom streng (std :: locale ('')) skaber en lokalitet, der svarer til programmets miljø.


Ved programstart er den globale lokalitet den 'C' eller 'Klassiske' lokalitet. For at indstille den globale lokalitet til programmets miljømæssige lokalitet (som jeg tror er, hvad du spørger), skriver du således:


std::locale::global(std::locale(""));


For eksempel er mine regionale indstillinger for øjeblikket sat til fransk (Canada). Kører dette:


int main(void)
{
  std::cout << std::locale().name() << std::endl;
  std::locale::global(std::locale(""));
  std::cout << std::locale().name() << std::endl;
  std::locale::global(std::locale("C"));
  std::cout << std::locale().name() << std::endl;
  return 0;
}


udskrifter:


C
French\_Canada.1252
C