// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. #pragma once namespace CalculatorApp { namespace Common { namespace LocalizationServiceProperties { static constexpr std::wstring_view DefaultCurrencyCode{ L"USD" }; } public enum class LanguageFontType { UIText, UICaption, }; public ref class LocalizationService sealed { public: DEPENDENCY_PROPERTY_OWNER(LocalizationService); DEPENDENCY_PROPERTY_ATTACHED_WITH_DEFAULT_AND_CALLBACK(LanguageFontType, FontType, LanguageFontType::UIText); DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(double, FontSize); internal: static LocalizationService^ GetInstance(); Windows::UI::Xaml::FlowDirection GetFlowDirection(); bool IsRtlLayout(); bool GetOverrideFontApiValues(); Platform::String^ GetLanguage(); Windows::UI::Xaml::Media::FontFamily^ GetLanguageFontFamilyForType(LanguageFontType fontType); Platform::String^ GetFontFamilyOverride(); Windows::UI::Text::FontWeight GetFontWeightOverride(); double GetFontScaleFactorOverride(LanguageFontType fontType); static Windows::Globalization::NumberFormatting::DecimalFormatter^ GetRegionalSettingsAwareDecimalFormatter(); static Windows::Globalization::DateTimeFormatting::DateTimeFormatter^ GetRegionalSettingsAwareDateTimeFormatter(_In_ Platform::String^ format); static Windows::Globalization::DateTimeFormatting::DateTimeFormatter^ GetRegionalSettingsAwareDateTimeFormatter( _In_ Platform::String^ format, _In_ Platform::String^ calendarIdentifier, _In_ Platform::String^ clockIdentifier); static Windows::Globalization::NumberFormatting::CurrencyFormatter^ GetRegionalSettingsAwareCurrencyFormatter(); static Platform::String^ GetNarratorReadableToken(Platform::String^ rawToken); static Platform::String^ GetNarratorReadableString(Platform::String^ rawString); private: Windows::Globalization::Fonts::LanguageFont^ GetLanguageFont(LanguageFontType fontType); Windows::UI::Text::FontWeight ParseFontWeight(Platform::String^ fontWeight); static Windows::Foundation::Collections::IIterable^ GetLanguageIdentifiers(); // Attached property callbacks static void OnFontTypePropertyChanged(Windows::UI::Xaml::DependencyObject^ target, LanguageFontType oldValue, LanguageFontType newValue); static void OnFontWeightPropertyChanged(Windows::UI::Xaml::DependencyObject^ target, Windows::UI::Text::FontWeight oldValue, Windows::UI::Text::FontWeight newValue); static void OnFontSizePropertyChanged(Windows::UI::Xaml::DependencyObject^ target, double oldValue, double newValue); static void UpdateFontFamilyAndSize(Windows::UI::Xaml::DependencyObject^ target); static std::unordered_map GetTokenToReadableNameMap(); private: LocalizationService(); static LocalizationService^ s_singletonInstance; Windows::Globalization::Fonts::LanguageFontGroup^ m_fontGroup; Platform::String^ m_language; Windows::UI::Xaml::FlowDirection m_flowDirection; bool m_overrideFontApiValues; Platform::String^ m_fontFamilyOverride; Windows::UI::Text::FontWeight m_fontWeightOverride; double m_uiTextFontScaleFactorOverride; double m_uiCaptionFontScaleFactorOverride; }; }}