András Tóth‘s professional blog
banditoth.net

Hey there 👋, I’m banditoth a .NET MAUI developer from Hungary.
I write about software development with .NET technologies.

You can find me on:
LinkedIn | Github | StackOverflow | X / Twitter | Threads

Tag: uwp multilanguage

  • Xamarin UWP: Use multilanguage resource files properly

    This content has 3 years. Some of the information in this post may be out of date or no longer work. Please, read this page keeping its age in your mind.

    IIf you are experiencing the oddity that the UWP version of your application can’t find the correct language version of your ‘resx’ files, then you have probably fallen into the same error I did.

    The language management of UWP apps works differently to its Android and iOS counterparts.

    Reade more about it at: https://docs.microsoft.com/en-us/windows/apps/design/globalizing/manage-language-and-region

    How the UWP deals with multilingualism in brief

    Only the union can be set as UI language

    Two different lists are considered as the list of languages supported by the application. One is the list of languages supported by windows (language pack installed), and the other is the list of languages supported by the application (resx files created for them). The intersection of these can only be handled by the language switching code.

    Where to define all of the supported languages by the app

    Easily, without mainting it you can define them in only one line making a change in ‘Package.appxmanifest‘ file.

      <Resources>
        <Resource Language="x-generate" />
      </Resources>
    

    The x-generate value will collect all of the available languages on compile time.

    Otherwise, you will need to list all of them one by one:

      <Resources>
        <Resource Language="EN-US" />
        <Resource Language="JA-JP" />
        <Resource Language="FR-FR" />
      </Resources>
    

    Best practice?

    Perhaps, if the application is running on UWP platform, you should make an if statement for the runtime platform and filter out languages that are not supported by windows.

    // Get all of the supported language by windows in BCP-47 language tag (i.e. "en-US")
    IReadOnlyList<string> userLanguages = Windows.System.UserProfile.GlobalizationPreferences.Languages;