我正在创建一个将在模块中构建的应用程序(DLL's
)。其中一个DLL为不同语言的应用程序提供Strings
。
DLL具有以下结构:
GetText
函数,该函数根据集合String
返回Culture
。) 请告诉我这是一个很好的方法。 因此,从Languages.cs
我可以根据集合String
从资源文件中获取C#
中所需的Culture
。
以下是一个例子:
Languages.Language.SetCulture("nl-BE");
Name
:Language.GetText(" Name"); String
Naam
。那是C#
。 Xaml
获取资源Label.Text
似乎是一个更大的问题。
我将Name
添加到我的xmlns:l="clr-namespace:My.Languages.;assembly=My.Languages"
文件中,但这是我得到的。我无法找到如何在xaml
中找到类似Language.GetText("Name")
的方式。
此时我唯一的解决方案是将每个Binding
绑定到我的Label.Text
代码中的属性,并从那里获取正确的C#
。这将产生很多"不需要"绑定/属性,很难维护。
有什么建议吗?
答案 0 :(得分:1)
我对Xaml的方法是使用一个Converter来调用你的Language.GetText(键);
e.g。 XAML
<TextBlock Text={Binding FallbackValue='Naam', ConverterParameter='Name' Converter={StaticResource Translate}}" />
C#
public class TranslateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
return DependencyProperty.UnsetValue;
string localizedValue = string.Empty;
if (parameter is string)
{
localizedValue = Language.GetText(parameter as string);
return localizedValue;
}
else
{
return DependencyProperty.UnsetValue;
}
}
}