我在使用资源本地化 Silverlight 应用程序时遇到问题。我想让我的多语言机制成为跨平台的,这就是为什么我将所有可本地化的资源放在 Portable Class Library 类型的项目中。在这个项目中,我创建了两个资源文件 Localization.resx 和 Localization.en.resx,并在这两个文件中将“访问修饰符”设置为 public。然后我创建了一个名为“LocalizationProxy”的代理类,它是一个启用绑定的代理类。
public class LocalizationProxy : INotifyPropertyChanged
{
public Localization LocalizationManager { get; private set; }
public LocalizationProxy()
{
LocalizationManager = new Localization();
}
public void ResetResources()
{
OnPropertyChanged(() => LocalizationManager);
}
#region INotifyPropertyChanged region
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged<T>(Expression<Func<T>> selector)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(GetPropertyNameFromExpression(selector)));
}
}
public static string GetPropertyNameFromExpression<T>(Expression<Func<T>> property)
{
var lambda = (LambdaExpression)property;
MemberExpression memberExpression;
if (lambda.Body is UnaryExpression)
{
var unaryExpression = (UnaryExpression)lambda.Body;
memberExpression = (MemberExpression)unaryExpression.Operand;
}
else
{
memberExpression = (MemberExpression)lambda.Body;
}
return memberExpression.Member.Name;
}
#endregion
}
在下一步中,我修改了 Silverlight csproj 文件并将“en”文化添加到支持的类型
<SupportedCultures>en</SupportedCultures>
此外,在我创建的应用程序资源和 LocalizationProxy 类的实例中
<Application.Resources>
<Localization:LocalizationProxy x:Key="LocalizationProxy"></Localization:LocalizationProxy>
</Application.Resources>
我还将汇编信息中的“中性语言”更改为“波兰语”——这应该是默认的应用程序语言。在最后一步中,我将一些值从视图绑定到资源
<TextBlock TextWrapping="Wrap" x:Name="PageTitle" Text="{Binding Source={StaticResource LocalizationProxy},Path=LocalizationManager.Title,Mode=TwoWay}" />
不幸的是,尽管 Thread.CurrentThread.CurrentCulture 是“pl-PL”,但我的应用程序仍然是英语语言。但是,如果我在 Windows Phone 应用程序中使用相同的代码,一切正常 - 我什至可以在运行时更改应用程序语言。本地化 Silverlight 应用程序和本地化 Windows Phone 应用程序有什么区别吗?
这是我的申请
http://www.fileserve.com/file/TkQkAhV/LocalizationSolution.rar
正如我之前提到的,Windows Phone 中的本地化工作正常,但在 Silverlight 应用程序标签中没有翻译