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

时间:2010-09-08 08:23:37

标签: c# .net wpf silverlight resources

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

  1. Resources.resx
  2. Resources.en-US.resx1。
  3. Resources.uk-UA.resx2。
  4. 他们都有构建行动“嵌入式资源”

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

鉴于以下内容:

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

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

Text={StaticResource L_MenuHome}

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

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

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

无论如何,只是试图将一些常识重新置于本地化中。它对我们有用。随意使用,忽略,建议改进等。

希望这有帮助。

答案 1 :(得分:2)

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

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