Toon posts:

[ALG] LCID formaat

Pagina: 1
Acties:

Verwijderd

Topicstarter
hallo mensen,

ik ben bezig met een taal systeem, aangezien het om een c++ atl gebeuren gaat is het windows only, het makkelijkste is voor ons om te werken met LCID's.
Nu willen we dus een systeem inbouwen met een fallback.
Situatie:
Stel de systeemtaal is English - United Kingdom (LCID: 2057) en deze taal hebben wij voor onze applicatie niet geinstalleerd, we hebben wel English - United States (LCID: 1033) geinstalleerd. Bij deze situatie willen we dus automatisch voor het alternatief kiezen, dezelfde taal dus, alleen een ander dialect.

Een LCID is 2 bytes groot, nu viel het ons op dat de eerste byte taal specifiek is, en de combinatie van eerste en tweede byte uniek. Alleen kan ik hiervan geen specificatie vinden van microsoft.
Voorbeeld:
English - United Kingdom (2057) is hexadecimaal: 0809
English - United States (1033) is hexadecimaal: 0409
English - Australia (3081) is hexadecimaal: 0c09

Er zijn dus 2 opvallende dingen, de eerste byte is voor elke taal gelijk, en de eerste 2 bits van de 2e byte zijn altijd 0.
Kunnen we van deze logica uitgaan, of zijn hier uitzonderingen voor? Weet iemand een bron op microsoft.com die dit verhaal bevestigt?
LCID lijst: http://www.microsoft.com/globaldev/reference/lcid-all.mspx

edit:
Eigenlijk past dit topic ook wel in SA

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Als ik zo vluchtig door die lijst heen kijk ziet het er wel naar uit dat het zo is. Kun je misschien niet beter de taal-code opvragen bijv en-US etc?

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
MTWZZ schreef op maandag 19 maart 2007 @ 16:40:
Als ik zo vluchtig door die lijst heen kijk ziet het er wel naar uit dat het zo is. Kun je misschien niet beter de taal-code opvragen bijv en-US etc?
Nope, dit was ook onze eerste opzet. Maar dit gaat je niet lukken zonder een mapping te maken op lcid's. We moeten de taal dus in C++ via een API uitlezen die op elke windows versie werken. Onder Vista kun je wel gemakkelijk de taal in en-us formaat opvragen maar dit lukt je niet op eerder windows versies

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:27

mulder

ik spuug op het trottoir

Volgens de wiki klopt wat je zegt (ongeveer): http://en.wikipedia.org/wiki/Locale

Meer; ook wat API dingen: http://msdn.microsoft.com...y/en-us/intl/nls_2jzn.asp

[ Voor 47% gewijzigd door mulder op 19-03-2007 16:48 ]

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Dit vind ik zojuist hier in een boek:
Bits 0-9 are used to denote the primary language
Bits 10-15 are used to distinguish sub-languages (for example American English versus Australian English)
Bits 16-19 are used to describe the sort identifier (used to distinguish the use of specialized Japanese, Chinese and Korean character sets from Unicode)
Bits 20-32 are reserved.
Bron: Windows NT WIN32 Api SuperBible, misschien iets voor een FAQ?

[ Voor 3% gewijzigd door Verwijderd op 19-03-2007 16:57 ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Verwijderd schreef op maandag 19 maart 2007 @ 16:31:
Een LCID is 2 bytes groot, nu viel het ons op dat de eerste byte taal specifiek is, en de combinatie van eerste en tweede byte uniek. Alleen kan ik hiervan geen specificatie vinden van microsoft.
Voorbeeld:
English - United Kingdom (2057) is hexadecimaal: 0809
English - United States (1033) is hexadecimaal: 0409
English - Australia (3081) is hexadecimaal: 0c09

Er zijn dus 2 opvallende dingen, de eerste byte is voor elke taal gelijk, en de eerste 2 bits van de 2e byte zijn altijd 0.
Het eerste is min of meer gegarandeerd (wat "dezelfde taal" is, is nogal eens politiek) maar het tweede is toeval.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1