Partager via


Windows Language Groups are Dead.

Well, they've been dead for a long time; I pretty much killed them in the middle of the XP time frame.  Even then they were reasonably meaningless, but I finally added some "deprecated" tags to some of the APIs.

Short story: please don't use language groups, they're silly.

Longer version: Once upon a time computers didn't have a lot of storage.  I mean, we were thrilled when denser floppy drives came out.  (Not bigger, the bigger the floppy, the less data it stored).  An 80MB (MB, not GB) hard drive was once considered big.

NLS (national language support) is big.  We need lots of data for the sorting tables, code page tables and other information, particularly for Chinese, Japanese & Korean, which have large character sets.  One way to save the limited space, on say a German machine, is to not install all those other unused languages features.  Originally Windows also didn't support as many locales/languages as it does today.

So, everything was chopped up into "language groups".   Applications could query to see if the language group (and locale) were "supported" or actually "installed" on a particular machine.  If supported and not installed, they could prompt the user to install it if they wanted to use it.

One of the first things I did in the Windows Globalization team was to say "gee, this isn't really a lot of data by modern standards, and apps keep getting confused by unavailable stuff, so why don't we just install everything all the time?"  And so I went into the intl.cpl code and ripped out all that stuff allowing you to install (or uninstall) the various language groups.

At that point in XPSP2 if I recall, language groups were effectively dead.

But we still had the idea of "language groups" baked into some APIs, so as some new locales were added, we tried to pick groups for them, but the associations have always been somewhat loose and arbitrary.  Eventually new locales just started getting assigned to "group 1", and now most of the locales on the system think they live in group 1.

The language group architecture also depends on the Evil LCID concept.  We can't assign groups to the newer no-LCID locales (which is most of the languages).  That means that if you start asking which languages live in a group, your list is going to be woefully incomplete.

Anyway: please don't use language groups, they're meaningless.