卫星装配部署

本文关键字:部署 | 更新日期: 2023-09-27 18:06:56

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

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

一个dll" PhoneApp2.resources.dll"为我的应用程序PhoneApp2从资源文件stringlibrary.it-It.resx,然后我下载了dll现在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)]。

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

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

但是,如果我用PhoneApp2而不是卫星汇编编译stringlibrary.it-It.resx,则消息框将正确显示意大利语文本当文化是意大利语,英语是英语文化。我在部署卫星组件时遗漏了什么吗?请让我知道。

问候,Senthil

卫星装配部署

不能在下载到隔离存储的应用程序中使用程序集。只有经过Microsoft签名的程序集(即提交时已经在XAP中的程序集)才能在运行时加载/执行。

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

我没有尝试过用你的方式进行本地化。对我来说,这似乎过于复杂了。但我已经本地化了几款应用,考虑到我很难找到完整的方法,我把它写在了博客上。这是我的博客:http://hopnet.mobi/website/Blog.aspx

基本上你可以这样做:

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