У меня проблема с локализацией приложения 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 ярлыки не переводятся