リソースを使用した Silverlight アプリケーションのローカライズに問題があります。多言語メカニズムをクロスプラットフォームにしたかったので、すべてのローカライズ可能なリソースをポータブル クラス ライブラリ タイプのプロジェクトに配置しました。このプロジェクトでは、2 つのリソース ファイル 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 アプリケーションのラベルは翻訳されません。