使用资源本地化Silverlight应用程序

Joh*_*ohn 6 localization silverlight-4.0 windows-phone-7 localizable.strings

我使用资源本地化Silverlight应用程序时遇到问题.我想让我的多语言机制成为跨平台,这就是为什么我将所有可本地化的资源放在Portable Class Library类型的项目中.在这个项目中,我创建了两个资源文件Localization.resx和Localization.en.resx,并在两个文件中将public和"access modifier"设置为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
}
Run Code Online (Sandbox Code Playgroud)

在下一步中,我修改了Silverlight csproj文件,并为支持的类型添加了"en"文化

<SupportedCultures>en</SupportedCultures>
Run Code Online (Sandbox Code Playgroud)

此外,在我创建的应用程序资源和LocalizationProxy类的实例中

 <Application.Resources>
        <Localization:LocalizationProxy x:Key="LocalizationProxy"></Localization:LocalizationProxy>
    </Application.Resources>
Run Code Online (Sandbox Code Playgroud)

我还将汇编信息中的"中性语言"改为"波兰语" - 这应该是默认的应用语言.在最后一步中,我从视图到资源中创建了一些值

<TextBlock TextWrapping="Wrap" x:Name="PageTitle" Text="{Binding Source={StaticResource LocalizationProxy},Path=LocalizationManager.Title,Mode=TwoWay}" />
Run Code Online (Sandbox Code Playgroud)

不幸的是,尽管Thread.CurrentThread.CurrentCulture是"pl-PL",我的应用程序仍然是英语.但是如果我在Windows Phone应用程序中使用相同的代码一切正常 - 我甚至可以在运行时更改应用程序语言.本地化Silverlight应用程序和本地化Windows Phone应用程序有什么区别吗?

这是我的申请

http://www.fileserve.com/file/TkQkAhV/LocalizationSolution.rar

正如我之前提到的,Windows Phone中的本地化工作正常,但在Silverlight中,应用程序标签不会被翻译

Hen*_*rtz 0

您应该使用完全合格的 ISO 3166 和 639 代码以及连字符,如Rumlin所描述的。