0

私のアプリでは、ユーザーは次のように実行時に言語を切り替えることができます。

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = language;

その後、 ResourceContext もリセットされます。

Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();

問題は、デフォルトのトグルスイッチ OnContent と OffContent テキスト (「オン」と「オフ」) を除いて、すべてが直接翻訳されることです。

アプリを再起動したり、プロジェクト内の各 ToggleSwitch のテキスト リソースを作成したりせずに、これを解決できますか?

4

1 に答える 1

0

答えはノーだ。ここを参照してください。ジェイ・ズオはすでにコメントで述べています。

ToggleSwitch のデフォルトの動作は実行時の言語の変更を反映しないため、ResourceLoader から言語固有の翻訳を取得し、ToggleSwitch のプロパティOnContentとプロパティをそのプロパティにバインドするコンバータを作成することで、これを回避しました。言語固有のリソース文字列ファイルで、「オン」および「オフ」テキストの翻訳を提供する必要があります。OffContentIsOn

コンバータ:

class BoolToToggleSwitchOnOffContentConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value is bool boolValue)
        {
            var resourceLoader = ResourceLoader.GetForCurrentView();
            var resourceString = "ToggleSwitch" + (boolValue ? "On" : "Off");
            return resourceLoader.GetString(resourceString);
        }

        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        // I'm afraid I can't do that, Dave!
        throw new NotImplementedException();
    }
}

XAML:

<ToggleSwitch
            IsOn="{Binding SomeIsOnBinding, Mode=TwoWay}"
            OnContent="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsOn, Converter={StaticResource BoolToToggleSwitchOnOffContentConverter}"
            OffContent="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsOn, Converter={StaticResource BoolToToggleSwitchOnOffContentConverter}" />
于 2019-05-08T10:00:36.783 に答える