Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-139433

QLocale::uiLanguages() order broken by Qt 6.10 on Windows only?

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Out of scope
    • Icon: Not Evaluated Not Evaluated
    • None
    • 6.10.0 Beta3
    • Core: Locales (i18n)
    • None
    • Windows Server 2022 and Windows Server 2024, as provided by GitHub hosted runners.
    • Windows

      Hi, I haven't had time to narrow this down to a small test case yet, but wanted to get it into Jira quickly in case is does indicate something Qt might consider as a blocker for the Qt 6.10 release.

      Basically, on Windows only (tested x86-64 Windows Server 2022 and 2025), with MSVC, GCC and LLVM, it appears that Qt 6.10 has broken some locale detection.

      Specifically, an open source project of mine executes some L10n tests like:

      declare -Ar languages=(
        [en_AU]='Australia|Unrecognised'
        [en_GB]='United Kingdom|Unrecognised'
        [en_US]='United States|Unrecognized'
      )
      for langId in "${!languages[@]}"; do
        ...
        output=$(
          LANG="${langId}.UTF-8" \
          "$RUNNER_TEMP/release/src/cli/dokit" calibrate --debug --temperature x 2>&1 || :)
        ...
      done

      And the code within the main function includes:

      const QLocale locale;
      ...
      qCDebug(lc).noquote() << "Locale:" << locale << locale.uiLanguages();
      ...

      On all other versions of Qt, the output is something like:

      Checking: United Kingdom (en_GB)
      qt.core.qtranslator: Searching translation for cli/QLocale::system()/* English, Latin, United Kingdom */ in :/i18n
      qt.core.qtranslator: Requested UI languages QList("en_Latn_GB", "en_GB", "en_Latn_US", "en_US", "en_Latn", "en")
      qt.core.qtranslator: Testing file ":/i18n/cli/en_Latn_GB.qm" false
      qt.core.qtranslator: Testing file ":/i18n/cli/en_Latn_GB" false
      qt.core.qtranslator: Testing file ":/i18n/cli/en_latn_gb.qm" false
      qt.core.qtranslator: Testing file ":/i18n/cli/en_latn_gb" false
      qt.core.qtranslator: Testing file ":/i18n/cli/en_GB.qm" true
      qt.core.qtranslator: Searching translation for lib/QLocale::system()/* English, Latin, United Kingdom */ in :/i18n
      qt.core.qtranslator: Requested UI languages QList("en_Latn_GB", "en_GB", "en_Latn_US", "en_US", "en_Latn", "en")
      qt.core.qtranslator: Testing file ":/i18n/lib/en_Latn_GB.qm" false
      qt.core.qtranslator: Testing file ":/i18n/lib/en_Latn_GB" false
      qt.core.qtranslator: Testing file ":/i18n/lib/en_latn_gb.qm" false
      qt.core.qtranslator: Testing file ":/i18n/lib/en_latn_gb" false
      qt.core.qtranslator: Testing file ":/i18n/lib/en_GB.qm" true
           0.002 8236 debug dokit.cli.main: Dokit 0.5.6-pre+1664.win2025.x86-64.msvc.qt-6.9.1
           0.002 8236 debug dokit.cli.main: Qt 6.9.1 compile-time
           0.002 8236 debug dokit.cli.main: Qt 6.9.1 runtime
           0.002 8236 debug dokit.cli.main: Locale: QLocale::system()/* English, Latin, United Kingdom */ QList(en-Latn-GB, en-GB, en-Latn-US, en-US, en-Latn, en)

      There you can see Qt's "Requested UI languages" list correctly starts with *_GB entries.

      However, with for Qt 6.10 only (on Windows), the output is like

      Checking: United Kingdom (en_GB)
      qt.core.qtranslator: Requested UI languages QList("en_Latn_US", "en_US", "en_Latn", "en", "en_Latn_GB", "en_GB")
      qt.core.qtranslator: Searching translation for cli/QList(en_Latn_US, en_US, en_Latn, en, en_Latn_GB, en_GB) in :/i18n
      qt.core.qtranslator: Requested UI languages QList("en_Latn_US", "en_US", "en_Latn", "en", "en_Latn_GB", "en_GB")
      qt.core.qtranslator: Searching translation for lib/QList(en_Latn_US, en_US, en_Latn, en, en_Latn_GB, en_GB) in :/i18n
           0.000 4044 debug dokit.cli.main: Dokit 0.5.6-pre+1664.win2025.x86-64.msvc.qt-6.10.0
           0.000 4044 debug dokit.cli.main: Qt 6.10.0 compile-time
           0.000 4044 debug dokit.cli.main: Qt 6.10.0 runtime
           0.000 4044 debug dokit.cli.main: Locale: QLocale::system()/* English, Latin, United Kingdom */ QList(en-Latn-US, en-US, en-Latn, en, en-Latn-GB, en-GB)

      As you can see, for whatever reason, the "Requested UI languages" list is now in the wrong order (at least as far as I read it).  And there's some earlier logging for the qt.core.qtranslator category that isn't happening either - not sure if that's relevant.

      I suspect, this may be related to the following change mentioned on the "What's new in 6.10" page:

      QLocale::uiLanguages() now includes truncated entries and is better-ordered"

      As I mentioned above, there's no issues with any previous version of Qt, not does 6.10 have any issues on Linux (or macOS).  So this definitely appears to be a change in Qt 6.10, but is it expected, or a regression?

      I'll hopefully get some time to investigate further in a day or two, but in the meantime, any indication that this is expected or not would be much appreciated Thanks!

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            Eddy Edward Welbourne
            paul Paul Colby
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:

                There are no open Gerrit changes