diff options
Diffstat (limited to 'src/corelib/text/qlocale_wasm.cpp')
-rw-r--r-- | src/corelib/text/qlocale_wasm.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/corelib/text/qlocale_wasm.cpp b/src/corelib/text/qlocale_wasm.cpp new file mode 100644 index 0000000000..6b011af4a7 --- /dev/null +++ b/src/corelib/text/qlocale_wasm.cpp @@ -0,0 +1,54 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include "qlocale_p.h" + +#include <emscripten/val.h> + +#include <string> +#include <vector> + +QT_BEGIN_NAMESPACE + +#ifndef QT_NO_SYSTEMLOCALE + +namespace { + +QStringList navigatorLanguages() +{ + using emscripten::val; + const val navigator = val::global("navigator"); + const auto languages = emscripten::vecFromJSArray<std::string>(navigator["languages"]); + QStringList qtLanguages; + for (const std::string& language : languages) + qtLanguages.append(QString::fromStdString(language)); + return qtLanguages; +} + +} + +QVariant QSystemLocale::query(QueryType query, QVariant &&in) const +{ + Q_UNUSED(in); + + switch (query) { + case QSystemLocale::UILanguages: + return QVariant(navigatorLanguages()); + default: + break; + } + + return QVariant(); +} + +QLocale QSystemLocale::fallbackLocale() const +{ + const QStringList languages = navigatorLanguages(); + if (languages.isEmpty()) + return QLocale(u"en-US"); + return QLocale(languages[0]); +} + +#endif // QT_NO_SYSTEMLOCALE + +QT_END_NAMESPACE |