从Silverlight中的文件夹加载资源“.resx”

我有一个多语言应用程序,客户想要编辑他想要的Resources.resx文件。 我创建了silverlight项目并添加了一些文件:

  1. Resources.resx
  2. Resources.en-US.resx1。
  3. Resources.uk-UA.resx2。

他们都有构建行动“嵌入式资源”

一切正常,但这些文件嵌入到XAP文件中。 客户无法编辑它们。

我的资源经理我是这样的:

private static ResourceManager manager; public static ResourceManager Manager { get { if (manager == null) manager = new ResourceManager("Project.Resources", Assembly.GetExecutingAssembly()); return manager; } } 

如何从某个文件夹获取此资源,而不是将它们构建为.xap文件???

由于这只是一个字符串本地化问题,并且您只想要选择整套本地化内容的灵活性,因此有几种方法可以将字符串绑定到资源管理器。 其中大多数都过于复杂,无法达到预期效果

鉴于以下内容:

  • 我见过的大多数解决方案都要求每个条目都有大约80个字符长的绑定语句。 这包括巧妙的转换器使用的结束。
  • 我见过的大多数解决方案都将每个字符串实现为一个通知属性(这对于几乎没有变化的字符串来说似乎是一个巨大的开
  • 本地化通常不需要即时更新(您可以随时刷新当前页面)。

一种更简单的方法是简单地将字符串作为名称值对放在全局App字典中,并通过简短/简单的StaticResource绑定引用它们,例如

 Text={StaticResource L_MenuHome} 

剩下的问题就是如何将另一组语言字符串添加到App字典中(这实际上非常简单):

  • 将您的默认语言字符串直接放入App.xaml中(这有助于开发,因为缺少的键会导致exception)。
  • 通过任何方便的方式(XML文件,XAML文件,CSV或通过webservice从数据库)从服务器中删除任何新选择的语言
  • 用新加载的数据替换字典条目。 您必须做的唯一事情是确保密钥已经存在,或者您必须添加条目或设置密钥。
  • 重新加载当前页面(语言更改后将它们带回主页?)

我不知道为什么每个人似乎都喜欢真正复杂的解决方案,当StaticResources做得很好而且工作量少得多。 我们还倾向于使用Web服务从数据库中获取一组语言字符串,因为它通常小于200K,并且数据库更新更灵活。

无论如何,只是想把一些常识放回本地化。 它适用于我们。 随意使用,忽略,建议改进等。

希望这可以帮助。

您可以尝试下载相应的文件并将其存储在隔离存储中,然后尝试从那里读取。 你可以在应用程序启动时这样做

由于您在resx中只有字符串,我建议您将资源项复制到具有某种预定义格式的简单文本中并从那里读取。 如果您需要有关任何具体实施细节的帮助,请与我们联系。