2011-08-30 65 views
0

我想使用卫星组件来本地化我的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 使用Web客户端和存储在目录它,它的应用PhoneApp2。现在该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); 
    } 

} 

我有项[装配:NeutralResourcesLanguageAttribute( “IT-IT”,UltimateResourceFallbackLocation.Satellite)汇编文件中。

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

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

但是,如果我编译stringlibrary.it-It.resx与PhoneApp2代替卫星组件,在MessageBox正确 显示意大利文本时培养是意大利语和英语为英语百家姓。我在部署卫星组件时错过了什么?请让我知道。

问候, 塞特希

回答

0

我还没有试过,你正在做的方式定位。对我来说似乎过于复杂。但是我已经定位了几个应用程序,并且鉴于我很难找到一个完整的源代码如何去做,所以我给它写了博客。这里是我的博客:http://hopnet.mobi/website/Blog.aspx

基本上你这样做:

  1. 创建项目
  2. 编辑的.csproj文件在记事本中所期望的文化添加到标记。
  3. 在项目的属性中选择一个中立的文化
  4. 资源添加到项目在Solution Explorer
  5. 创建一个类来访问这些资源
  6. 那类添加到App.xaml中的标记文件
  7. 将字符串放入资源文件
  8. 使用xaml中的资源绑定绑定到这些字符串。
  9. 如果使用ApplicationBar,则必须在代码中执行此操作,因为它无法在xaml中进行绑定。
  10. 为每个支持的文化创建另一个资源文件。
  11. 为每种支持的语言创建dll文件,因此标题在拼贴和程序列表上是正确的。
+0

感谢您的信息。我已经完成了你所描述的任何步骤,并且它工作正常。但是现在我想给用户下载dll(资源文件)的选项,以便只有几组DLL。我这样做是为了尽量减少.xap文件的大小。 – Senthil

+0

您所描述的过程和我已经完成的过程将始终包含所有的DLL。但我想有设置按钮,用户可以在其中选择文化,只有那些DLL将从Web服务器下载并存储在应用程序的独立存储中,按照[assembly:NeutralResourcesLanguageAttribute(“it-IT”,UltimateResourceFallbackLocation卫星)。 – Senthil

+0

这将查找意大利语言资源文件的IT目录。希望我已经说清楚了,因为我想要做 – Senthil

1

您不能在您的应用程序中使用程序集下载到独立存储中。只有Microsoft签署的程序集(因此在提交时已经存在于XAP中的程序集)才能在运行时加载/执行。

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

+1

好的。感谢您的信息。我将尝试直接下载resx文件并解析它。 – Senthil