【问题标题】:Satellite Assembly deployment卫星组装部署
【发布时间】:2011-08-30 11:26:01
【问题描述】:

我正在尝试使用卫星程序集本地化我的 windows phone 7 应用程序。我已经建好了

(al /t:lib /embed:stringlibrary.it-It.resx /culture:it /out:PhoneApp2.resources.dll /template:PhoneApp2.dll)

来自资源文件stringlibrary.it-It.resx 的应用程序PhoneApp2 的dll“PhoneApp2.resources.dll”,然后我下载了该dll 使用 webclient 并存储在应用 PhoneApp2 的目录 it-IT 中。现在 dll 驻留在 phoneapp2 的隔离存储中。

我有另一个资源文件 stringlibrary.resx,它总是与应用程序一起编译,并有英文支持条目(默认)。

using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("it-IT\\"+resfile, System.IO.FileMode.Create, file))
{
    byte[] buffer = new byte[1024];
    while (e.Result.Read(buffer, 0, buffer.Length) > 0)
    {
        stream.Write(buffer, 0, buffer.Length);
    }

}

我在程序集文件中也有条目 [assembly: NeutralResourcesLanguageAttribute("it-IT", UltimateResourceFallbackLocation.Satellite)]。

即使当前的语言和文化是意大利语,它总是在消息框中向我显示中性语言文本(英语)。 这意味着它无法找到卫星组件。

rm = new ResourceManager("PhoneApp2.stringlibrary", Assembly.GetExecutingAssembly());
string greeting = rm.GetString("String1");
MessageBox.Show(greeting);

但是,如果我使用 PhoneApp2 而不是卫星程序集编译 stringlibrary.it-It.resx,则消息框会正确显示意大利语文本 当文化是意大利语和英语时的英语文化。我在部署卫星程序集时遗漏了什么吗?请告诉我。

问候, 森提尔

【问题讨论】:

    标签: c# windows-phone-7 windows-phone


    【解决方案1】:

    您不能在已下载到隔离存储的应用程序中使用程序集。只有由 Microsoft 签名的程序集(因此提交时已在您的 XAP 中的程序集)可以在运行时加载/执行。

    如果您想在之后下载其他翻译,您应该使用 resx-files 或任何其他您可以自行解析的格式。我的建议是对所有资源字符串使用某种数据库,然后将新下载的数据添加到这个数据库中。这比你想要完成的更灵活:)

    【讨论】:

    • 好的。谢谢你提供的详情。我将尝试直接下载 resx 文件并解析它。
    【解决方案2】:

    我没有尝试过按照您的方式进行本地化。对我来说,这似乎过于复杂。但是我已经本地化了几个应用程序,并且考虑到我很难找到完整的源代码如何做到这一点,我写了博客。这是我的博客:http://hopnet.mobi/website/Blog.aspx

    基本上你这样做:

    1. 创建项目
    2. 在记事本中编辑 .csproj 文件,将所需的文化添加到标签中。
    3. 在项目属性中选择中性文化
    4. 在解决方案资源管理器中向项目添加资源
    5. 创建一个类来访问这些资源
    6. 将该类添加到 App.xaml 文件的标记中
    7. 将字符串放入资源文件中
    8. 使用 xaml 中的资源绑定绑定到这些字符串。
    9. 如果使用 ApplicationBar,则必须在代码中这样做,因为它不能在 xaml 中绑定。
    10. 为每种支持的文化创建另一个资源文件。
    11. 为每种支持的语言创建 dll 文件,这样标题在磁贴和程序列表上就会正确。

    【讨论】:

    • 感谢您的信息。我已经完成了您所描述的任何步骤,并且工作正常。但是现在我想为用户提供下载 dll(资源文件)的选项,以便只有少数 DLL 集。我这样做是为了最小化.xap 文件的大小。
    • 您描述的过程和我已经完成的过程将始终包含所有 DLL。但我希望有设置按钮,用户可以在其中选择文化,并且只有那些 DLL 将从网络服务器下载并存储在应用程序的隔离存储中,按照 [assembly: NeutralResourcesLanguageAttribute("it-IT", UltimateResourceFallbackLocation .卫星)。
    • 这将在 it-IT 目录中查找意大利语资源文件。希望我已经明确了我想要做什么
    猜你喜欢
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多