0

在我的应用程序中,用户可以像这样在运行时切换语言:

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = language;

之后 ResourceContext 也会被重置:

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

问题是除了默认的切换开关 OnContent 和 OffContent 文本(“on”和“off”)之外,所有内容都直接翻译。

这可以在不重新启动应用程序并且不为我的项目中的每个 ToggleSwitch 创建文本资源的情况下解决吗?

4

1 回答 1

0

答案是不。看到这里,左宗棠已经在评论里说了。

由于 ToggleSwitch 的默认行为不会反映运行时的语言变化,我通过编写一个转换器来解决这个问题,该转换器从 ResourceLoader 获取特定于语言的翻译并将 ToggleSwitch 的OnContentOffContent属性绑定到其IsOn属性。您必须在特定语言的资源字符串文件中提供“开”和“关”文本的翻译。

转换器:

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 回答