How much gets localized in a localized version of Windows?


ErikF wonders, "Do the localized versions of Windows translate these weird, out of the way resources? My guess is "no", but I don't have a localized copy of Windows to look at right now."

There are two questions here.

The first question is "What content is in scope for localization?"

  • Everything in the resources of a DLL is in scope.
  • Registry keys are not in scope. They can't be, because different users on a machine can have different preferred languages, but there is only one registry. To work around this, the registry uses string redirection for anything that needs to be localized.
  • File names used to be in scope, because there was no facility for displaying a file to the user with a name different from its physical name. That changed in Windows 2000, and the decision to switch completely to MUI-style file names was made in Windows Vista.

The next question is, "Of everything in scope, how much of it actually gets translated?"

Historically, the answer has been "All of it." Not just the stuff you might expect, like strings and dialog boxes, but other stuff like animations. As you can imagine, translating every single string and dialog box (and possibly also bitmaps and animations) is an enormous undertaking.

Windows Vista mixed this up a bit by introducing Language Interface Packs, which are "mostly-localized" versions of Windows. Each Language Interface Pack starts with one of the "fully-localized" versions, and then re-translates a subset of the resources to suit the target language. Strings left untranslated receive the translation from the base language.

Michael Kaplan appears to have quite a supply of LIP-related puns, which he dips into whenever a new LIP is released.

Comments (25)
  1. Even the http://www.%s.com/ string used by Internet Explorer when you hit Ctrl-Enter gets localized.

  2. Søren Mors says:

    On a tangent, there are also things that I wish did not be translated. IIS likes to translate the names of .net errors (and exceptions) to the language of the machine its running on. Unfortunately that makes it very hard to use Google (or Bing) to find out whats wrong.

    A search for NullReferenceException in module blah, tends to get a gazillion hits, a search for NulReferenceUndtagelse i modulet blah tends to get 0. All the people with the technical knowledge to make sense of the error are quite capable of reading english anyway.

    [You'd be surprised that many people doing .NET programming are not comfortable reading English. That said, I understand that the decision is controversial. -Raymond]
  3. CN says:

    Localizing exception error messages is one thing, but the type names should not be localized in some fake camel casing. The actual type exists and has a name. The searching-on-the-web aspect is a sure reason to modify local thread culture in some desperate cases (unless, of course, that throws off other things).

  4. Mason Wheeler says:

    Raymond: I'm not surprised, but IMO the ability to communicate clearly is more important than personal comfort.  When English is the de facto worldwide language of programming, doing it that way is really a disservice to them because it makes it harder to communicate and thus harder to work productively. And I think most good programmers would agree that the ability to communicate clearly is the second-most important skill a programmer needs, after the ability to reason in formal logic.

    I once heard a German guy talking about how when he was a kid, his English classes in school were incredibly problematic, to the point where he had convinced himself that it was something he was completely incapable of learning.  Then he decided he wanted to be a pilot.  He was dismayed to find out that the international language of aviation is English and he'd never fly airplanes if he couldn't speak it, but once he had the motivation, it was surprisingly easy to pick up.  Today he speaks clear (if accented) English, and it helped him have a long and successful career as an airline pilot.

    [The question is whether people hacking out software in their basement for fun should be held to the same standard as professional programmers. Do we want to limit recreational programming to people who have the linguistic aptitude, access to education, and motivation to learn English? (The .NET people appear to believe the answer is "No". Like I said, that decision has been controversial.) -Raymond]
  5. Joshua says:

    [You'd be surprised that many people doing .NET programming are not comfortable reading English. That said, I understand that the decision is controversial. -Raymond]

    Dude, translate the message but not the class name. If they can't find the class names, they're sunk.

  6. Gabe says:

    How does a class name like "NullReferenceException" end up getting localized in the first place?

  7. alegr1 says:

    Dude, translate the message but not the class name. If they can't find the class names, they're sunk.

    And this is why ALL the translations MUST be approved by programmers or other people who have a clue. Otherwise it brings awful and ridiculous monstrosities.

  8. @Mason Wheeler says:

    Last try to get this through the comment system… Fourth try now, and the last three haven't given me the confirmation message.

    You're claiming that people who don't want to learn English are too stupid to write good code. I'm honestly not sure how to respond to that.

    Imagine if your first "SYNTAX ERROR IN LINE 10" was in Russian, and you realized that you had to learn a whole new language just to understand how to write in BASIC. This is before you learned that you want to make a career of programming, because you haven't even written a program yet. Do you really think that you would have taken the time to learn Russian just to get started in the hobby? Wouldn't you have appreciated an English localization of the programming tools?

  9. Joshua says:

    @@Mason Wheeler:

    It was: ?SN 10

    Sorry, gotta use the book anyway. I would have thrown up my hands if it wasn't in my character set though.

  10. SpecLad says:

    Sometimes things get translated that really shouldn't be. For example, <msdn.microsoft.com/…/dd798683(v=vs.85).aspx>:

    cdaudio type track number Returns the type of the specified track number. This can be "audio" or "other."

    "audio" and "other" were translated in at least Win98 through XP, even though they're part of the interface.

  11. mh says:

    The Language Interface Packs were introduced before Vista. For example, Czech Windows XP could be partially translated to Slovak by installing a LIP: http://www.microsoft.com/…/details.aspx

  12. Mason Wheeler says:

    >Do we want to limit recreational programming to people who have the linguistic aptitude, access to education, and motivation to learn English?

    Well, with the worldwide Internet, access to education is trivial these days.  And it takes a non-trivial degree of linguistic aptitude to pick up a programming language at all.

    As for motivation, I can't speak for everyone but most of the kids learning to write code that I've ever known–myself included–were doing it because they wanted to become professional programmers one day.  From the day I first discovered BASIC I knew that that was what I wanted to do with my life, and now I'm doing it.

    Niklaus Wirth apparently thought it was a good idea.  He was Swiss, but when he created Pascal with the specific intention of making an educational language that was easy to learn to code in, he did the whole thing in English, and this was decades ago before the rise of the Internet.  It's only become more important since then.  As one of the smartest and most influential guys in the history of programming language design, that's worth considering IMO.

    And WRT the last bit of the question, it could be generalized as "do we want to limit programming to only people with certain intellectual qualifications?"  And I'm sorry if this upsets anyone, but I would answer that with a resounding "YES!"  Because I'm not just a computer programmer, but also a computer *user*, and I'm sick of using software that feels like it was was written by morons.  Having barriers to entry in place to keep out people who shouldn't be writing code in the first place can only be a good thing, for much the same reason as we have medical licenses to keep incompetent people from becoming doctors.

    (Yes, I know you were writing about hobbyist programmers.  But when anyone can get free or nearly-free hosting and post something they wrote on the Web for folks to download, it sort of blurs the distinction between hobbyists and professionals in terms of their ability to reach an audience with their work.)

    [Second attempt to post this.]

  13. JM says:

    @@Mason Wheeler (I wish people would stop using "@someone" as a name): I didn't know English when I started programming. For the longest time I had no idea what "?ILLEGAL QUANTITY  ERROR" meant, and I certainly had no clue how to pronounce it. All I knew is that "?ILLEGAL QUANTITY  ERROR" appeared because I did something very specific wrong, because I'd never seen it before (unlike "?SYNTAX  ERROR").

    This doesn't steepen the learning curve as much as you might think. The computer starts out as a mysterious device that operates on arcane incantations producing results that, while repeatable, are not initially comprehensible to the uninitiated mind. Having mnemonics in your native tongue is not a particularly big help in overcoming this essential obstacle and may even be a hindrance. The first thing you learn is exactly the limited subset necessary to program, which barely even resembles a natural language.

    The basic *idea* behind programming I of course learned from material in my native tongue, but this has nothing to do with localization — the equivalent would be an English manual to go with your Russian machine, that may even helpfully display the squiggly bits the computer shows and explains under what circumstances they appear, without mentioning Russian at all. Nobody would dispute that that's a useful thing to have.

    By the same token, though, I guess I'm arguing against both Mason and Raymond (or rather the people he's proxying for) as well. Because, no, I didn't do anything (and that includes learning English) because I wanted to be a professional computer programmer. I did it because, well, computers are the coolest thing ever. And if you're the sort of hobbyist who thinks that, then having localization (or not) isn't the kind of thing that matters. If you're really into it because you want to be "professional" one day, then I guess it might.

    I did, obviously, learn actual English that humans use, but this had little to do with computers.

  14. cheong00 says:

    @JM: That kind of remind me that when I was 6, I was trying to play a game on 5 1/4 inch disk, and greeted with some "ABORT, RETRY or IGNORE?" error message.

    I have no idea of what to do at that time (English is not my native language).

    Year later I developed interest on computer programming. I went dive in English computing books section of local library, and a few years later, my English subject acedemic result was way better than most of my classmates.

    It's only a matter of need.

  15. Drak says:

    I hate that some programs (drivers mainly, I think) don't listen to the USER langauge but revert to the SYSTEM language. I have a Dutch windows 7 ultimate, with an English language pack for myself (because computers should be in English, not Dutch :P). But some popups, tooltips and other interface elements appear in Dutch anyway.. Blerrgh.

  16. ender says:

    Speaking of things that shouldn't be translated, in Slovenian Windows 7 you can see #IME_ZADNJEGA_PROGRAMA# in Action Center – somebody translated the #LAST_PROGRAM_NAME# placeholder.

    And since we're at localization, the Windows built-in MUI support is clearly inadequate when it comes to plurals – there's a bunch of weird phrasing around the UI everywhere where counted elements are involved.

  17. xpclient says:

    Language Interface Packs precede Vista. They were there in the XP timeframe too.

  18. Neil says:

    The solution is to use numeric error codes everywhere à la the ZX81.

  19. As we talk about the localization, almost everything is translated in Windows when you use a localized version. Language Packs do translate most things you see; the most notable exception is that device names stay in the localized language.

    I have to agree with @ender, support for plurals is not adequate. For example, in Russian plurals are not formed by adding '-(e)s' to the end of a word. The things get even more complicated when you have to display: 0 items, 1 item, 2 items, 5 items — you have use different forms of the noun depending on the number: 0 элементов, 1 элемент, 2 элемента, 5 элементов.

    Even more to it, Russian version of Windows 7 had the famous hole in Start menu. Fortunately, the hole has been fixed with SP1.

    Many translated strings look as though taken out of context, sometimes they don't fit into the dialog boxes, some menus become too wide. I understand the number of the strings to translate grows with every new version, but it appears the localization gets less attention and then localized product does not look as smooth as the original English version.

  20. Jonathan says:

    @Drak: You can change the "System Locale" to English, and then get most system-wide components to adhere to he.

    I learned to program on a ZX81 Spectrum at the age of 10, when my English language knowledge was quite limited. I didn't need "PRINT", "GOSUB" or "SYNTAX ERROR" translated to my native langauge – Hebrew. I did have Hebrew-language documentation (a book), and that was helpful.

  21. voo says:

    @@Mason Wheeler: Does my first "SYNTAX ERROR IN LINE 10" (well I didn't start with VB, lucky me, so not that exact message) in English count because I'm german? I'd think so. And as you see, I managed just fine, as I'm sure all good programmers will. After all learning new things (APIs, languages, programming concepts,..) is an integral part of programming and a bit inquisitiveness (how does this work?) is more than just helpful too.

    So basically the only people we "lose" here are those that aren't interested in learning new things anyhow and those really don't make good programmers in my experience. And the millions of non-native English speaking programmers around the world show that it's easy enough to learn programming if you want to anyhow.

    On the other hand those annoying translations caused me having to track down the IT guy at my first work and get him to change the language on my machine, because I certainly didn't want to having translate every error message in my head from german into its likely english counterpart (also I really prefer the whole GUI in english to begin with).

  22. anonymous2 says:

    Looks like some strings are never localized (for example the product name – Windows)

  23. Drak says:

    @Jonathan: good tip, I'll give it a try this evening! Thanks!

  24. 640k says:

    Windows is a registered trademark. Trademarks are not translatable.

  25. Trademarks are still made available to the localizability system because some trademarks have local variants.

Comments are closed.