gpt4 book ai didi

windows - 如何本地化 Windows 商店应用程序中的通知和组合框? (C#/XAML,多语言应用工具包)

转载 作者:可可西里 更新时间:2023-11-01 09:29:00 25 4
gpt4 key购买 nike

我有几个关于 Windows 应用商店应用程序本地化的问题。我能够本地化 Xaml 内容,例如 TextBlock.Text 或 Button.Content( I'm doing it in the same way as shown here ),但我不知道如何本地化以下内容:

1).我的 ComboBox 中的项目。

<ComboBox x:Name="comboBoxTopAppBar" Width="120" Margin="10,0,0,0" MinWidth="200"
SelectedItem="{Binding SelectedStatus, Mode=TwoWay}">
<x:String>Item 1</x:String>
<x:String>Item 2</x:String>
<x:String>Item 3</x:String>
</ComboBox>

2). C# 代码中的 MessageDialogs(由于 catch block 而没有等待)

new MessageDialog("Something went wrong. Please, check your login/password and internet connection.").ShowAsync();

3). C# 代码中的 Toast 通知(我使用的是“Windows Runtime via C#”一书中的类库)

ToastNotificationManager.CreateToastNotifier()
.Show(new ToastNotification(new ToastTemplate(ToastTemplateType.ToastText01)
{
Text = {"Fetching your data. Please, wait."},
Duration = ToastDuration.Short,
}));

如何本地化它?

最佳答案

有趣的是,它们都联系在一起。

对于 2) 和 3),您需要创建一个 Controller 来保存一个 ResourceLoader 对象。您可以使用(如果使用 Windows 8.1)ResourceLoader.GetForIndependentUse()

在您的 ResourceController 中创建一个名为 GetTranslation(string resource) 的方法。它看起来像这样:

private static ResourceLoader resourceLoader = ResourceLoader.GetForIndependentUse();

public static string GetTranslation(string resource)
{
return resourceLoader.GetString(resource);
}

然后,每当您需要静态编码翻译时,只需调用 ResourceController.GetString(*key of the string you want*)

这非常适合简单的代码调用,但不能直接用于 Xaml,例如场景 1)。不过不要害怕,因为您拥有转换器的魔力!

public class ResourceTranslationConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var valString = value as string;

// If what is being converted is a string, return the resource translation
// Else return something else, such as the object itself
return valString == null ? value : ResourceController.GetString(valString);
}

public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}

然后,您所要做的就是定义一次转换器(可能是从您的所有 xaml 中访问的某个地方,可能是合并到您的 App.xaml 中的字典),您可以在随时绑定(bind)!

对于这个例子,像这样:

<!-- This is defined somewhere accessible, or just in the Page Resources -->
<!-- 'converters' is whichever namespace definition your converter is in -->
<converters:ResourceTranslationConverter x:Key="ResourceTranslationConverter"/>

<ComboBox x:Name="comboBoxTopAppBar" Width="120" Margin="10,0,0,0" MinWidth="200"
SelectedItem="{Binding SelectedStatus, Mode=TwoWay}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource ResourceTranslationConverter}}"
</DataTemplate>
<ComboBox.ItemTemplate>

<x:String>Item 1</x:String>
<x:String>Item 2</x:String>
<x:String>Item 3</x:String>
</ComboBox>

这样,您的所有文本都会在运行时自动通过您的 ResourceLoader 传递。您定义的任何新项目也将自动翻译(只要它们在您的资源中有条目并且已翻译)。

希望这对您有所帮助,祝您编码愉快!

关于windows - 如何本地化 Windows 商店应用程序中的通知和组合框? (C#/XAML,多语言应用工具包),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23516939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com