Figuring out which set of language resources to use in an app at runtime can be a tricky thing for the OS to do at runtime, especially if the app has multiple resource files for the same base language.

Fortunately, there’s a topic in the documentation that came out close to GA of Windows 8 last year that explains all this: Language matching. Totally recommended if you’re creating a multilingual app.


Although swapping out language resources is something that happens somewhat automatically when the user changes system language, sometimes you want to know that directly.

There are a number of APIs in WinRT that relate to this (thanks to Erik Fortune for this):

That said, you’ll notice that none of these just say “this is the language that’s in use across the system.” What a number of developers have done, then, instead of trying to infer this from the above APIs, is to simply include a language tag in your localized resources. Because one set of resources will be loaded for the current language–assuming there’s not an override–you need only retrieve that string and you know the language in use.

Do note that all of this applies only to language; if you want to know where the user actually is, always use Windows.System.UserProfile.GlobalizationPreferences.HomeGeographicRegion. That is, people can be using any language in a system regardless of where they’re located in the world, so you need to use the specific region instead.