我在解决方案AppResources的单独项目中拥有我的本地化文本资源。这允许付费翻译人员在没有整个应用程序源代码的情况下处理资源转换。
在我的窗口中,我声明了名称空间:
xmlns:viewProperties="clr-namespace:AppResources.Properties;assembly=AppResources"
示例控件:
<TextBlock VerticalAlignment="Center"
Margin="3"
Text="{x:Static viewProperties:Resources.TextBlockUserName}" />
这一切都正常。我改变了文化,使用了适当的资源。我试图通过XAML中的自动完成来保持viewProperties:Resources中的键可以获得的好处,所以我们知道它在那里。
我希望在这里添加某种转换器来拦截资源字符串值,并执行以下两项操作之一:
这样做的原因是提供一个应用程序选项进入&#34;翻译模式&#34;而不是显示翻译的资源文本,如确定,取消,保存等,应用程序将显示键名称(例如Button_OK,Button_Cancel,File_Save或其他任何键名称)。这对于了解译者试图理解的内容非常方便。
无论如何,我试图使用的转换器有效,但并不理想:
public class TranslationKeyInterceptor : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
//Can do this, but this is horrible
string resourceName = value.ToString().Replace("x:Static viewProperties:Resources.", string.Empty);
string resourceString = string.Empty;
if (AppOptions.DisplayLanguageKeys)
{
resourceString = resourceName;
}
else
{
resourceString = AppResources.Properties.Resources.ResourceManager.GetString(resourceName);
}
return resourceString;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
它获得的值是来自XAML的整个路径,因此我无法解析出密钥名称。
同样,XAML变得有点麻烦,因为我需要
<TextBlock VerticalAlignment="Center"
Margin="3"
Text="{x:Static viewProperties:Resources.TextBlockUserName,
Converter={StaticResource Converter_Translate}}" />
其中
<wpfTools:TranslationKeyInterceptor x:Key="Converter_Translate"/>
在我的Window的资源中声明。
所以我的问题是: