获取系统语言 UWP C++/WinRT

Getting system language UWP C++/WinRT

我想在 C++/WinRT 应用程序中获取系统语言(不是输入语言,而是整个系统语言),但找不到这样做的方法。我搜索了一下,发现在 Unity 中可以使用 System.Globalization.CultureInfo.CurrentCulture 结构来完成,这在 C++ 代码中是不可用的。有人熟悉这个吗?

Getting system language UWP C++/WinRT

您可以使用LanguageClass获取系统语言。首先,您需要包含它需要的头文件。例如:

#include <winrt/Windows.System.UserProfile.h>
#include <winrt/Windows.Globalization.h>

void MainPage::ClickHandler(IInspectable const&, RoutedEventArgs const&)
{
    auto topUserLaunghage = Windows::System::UserProfile::GlobalizationPreferences::Languages().GetAt(0);
    Windows::Globalization::Language language{topUserLaunghage};
    hstring displayName = language.DisplayName();
}

更新:

当您更改区域格式时,日期、时间等将更改其格式,您可以使用 DateTimeFormatter 的 ResolvedLanguage 获取最近用于格式化日期和时间的语言。例如:

Windows::Globalization::GeographicRegion userRegion{};
hstring regionCode = userRegion.CodeTwoLetter();
Windows::Foundation::Collections::IVector<hstring> coll{ winrt::single_threaded_vector<hstring>() };
coll.Append(regionCode);
auto dateTimeFormatter = Windows::Globalization::DateTimeFormatting::DateTimeFormatter(L"longdate", coll);
auto regionInfoName = dateTimeFormatter.ResolvedLanguage(); // This is the language from the Regional format