因此,我尝试将本地化添加到正在处理的UWP应用程序中。通过在线研究,我可以使用Mulitlingual App Toolkit进行添加。我遇到的一个问题是资源文件中的重复值。例如,假设我需要用相同的值标记2个不同的控件。控件是一个按钮(使用属性button.Content)和一个文本块(使用textBlock.Text)。我只想在资源文件中有一个名称/值对,即可用于这两个控件。有没有办法做到这一点?我也想能够在xaml中设置这些值。提前致谢。
一般而言,UWP的本地化
首先,国际化(i18n)和本地化(l10n)的默认方式是对每种语言使用不同的语言.resw
(或.resx
用于其他环境,例如Xamarin)。在这些文件中,您将存储带有某些标识符键的转换后的字符串。
Mulitlingual App Toolkit是一种工具,用于促进和某种程度上管理(例如,跟踪审阅状态)与可能不是实际开发团队成员的人员实际翻译字符串的周围过程。但是最后,它也只是.resw
像手动完成一样生成文件。因此,您不必使用MAT来本地化您的App。
实施它
实现所需功能的方法是使用某种绑定。
我个人喜欢使用自定义标记扩展名,以便能够区分实际的动态数据和硬编码的国际化字符串。此外,它使绑定很短。然后看起来像Title="{i18n:Translate GlossaryPageTitle}"
。
不幸的是,到目前为止,UWP中似乎还没有Markup Extensions(源代码)。
因此,可以使用的方法(无论如何都更简单)是使用Converter并将所需文本的Key作为参数传递。像这样:Title="{x:Bind Converter={StaticResource LocalizationConverter}, ConverterParameter=GlossaryPageTitle}"
。
转换器的实现如下所示:
public class LocalizationConverter : IValueConverter
{
private readonly ResourceLoader _resourceLoader = ResourceLoader.GetForViewIndependentUse("/Resources");
public object Convert(object value, Type targetType, object parameter, string language)
{
if (parameter is string resourceId)
{
return _resourceLoader.GetString(resourceId);
}
return DependencyProperty.UnsetValue;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotSupportedException();
}
}
然后在应用程序中的某个位置(按视图或全局)注册Converter,就可以了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句