2010-09-08 132 views
2

我有一个多语言应用程序,客户想要编辑他想要的Resources.resx文件。 我创建Silverlight项目并添加一些文件:在Silverlight中从文件夹加载资源“.resx”

  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文件???

+2

也许,将资源类型更改为资源而不是嵌入式资源? – 2010-09-08 08:29:12

+1

然后我有错误:无法找到任何适合指定文化或中性文化的资源。确保在编译时将“Infopulse.MSEA.BPSurvey.TypesEditor.Resources.TypesEditorResources.resources”正确嵌入或链接到程序集“TypesEditor”中,或者所有需要的附属程序集均可加载并完全签名 – Evgeny 2010-09-08 08:35:55

+2

这些资源是否仅用于本地化字符串,还是他们还有其他资源类型? – 2010-09-08 08:49:52

回答

3

由于这只是一个字符串定位问题,只是想和你选择一整套本地化内容的灵活性,有几种方法了那里你的字符串绑定到资源管理器。 他们大多是期望的结果过于复杂:

考虑以下几点:

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

一个简单得多的方法是简单地将您的字符串,如名称值对,在全球应用字典和通过短/简单静态资源例如结合引用它们

Text={StaticResource L_MenuHome} 

剩下的问题是,然后就如何得到另一套语言字符串进入App词典(这其实很简单):

  • 直接把你的默认语言的字符串到您的App.xaml (这有助于开发,因为丢失的键将导致异常)。
  • 通过任何方便的方式(XML文件,XAML文件,CSV或通过webservice从数据库中取出任何新选择的语言)
  • 用新加载的数据替换字典条目。您唯一要做的就是确保密钥已经存在,或者您必须添加一个条目或设置一个条目。
  • 刷新当前页面(带他们回到主页的语言变化后?)

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

无论如何,只是试图将一些常识性语言带回本地化。它适合我们。随意使用,忽略,建议改进等。

希望这会有所帮助。

+1

@Hi Tech:感谢您的想法。我目前将所有字符串存储在本地独立存储数据库(从服务器下载)中。我的老板想要的一件事就是记录所有未翻译的语言字符串 - 所以当我正常工作在用户界面上时,如果找不到它,则会打电话来翻译它,但并不是这样它需要本地化。 我现在用一个转换器来做到这一点 - 在每个字符串上它调用一个方法,如果它不在那里,它会标记它。你能想出任何如何使用静态资源并标记尚未翻译的字符串的方法吗?谢谢 – Rodney 2011-03-01 22:06:14

+1

其实 - 您能否详细说明如何将语言字符串加载到App.xaml中?我目前使用的是一个Converter,它调用一个方法在我的字典对象中查找字符串 - 问题在于我无法确定它是否已经被转换。 – Rodney 2011-03-01 23:42:25

+1

@Rodney:我们只在启动时加载本地化(进入全球应用程序字典)。为了填充我们的数据库,我们采用其他方式:为了确定哪些字符串存在本地化,我们分别扫描项目中的所有XAML文件,并将缺少的条目添加到我们的“开发英语”语言表中。我们称之为“开发英语”是我们的出发点(编码器放在XAML中)。我们假设真正的英语将由商业伙伴翻译成“开发英语”......不能相信编码人员知道营销要求:) – 2011-03-02 16:03:50

2

您可以尝试下载相应的文件并将其存储在您的独立存储中,然后尝试从此处读取它。你可以这样做在应用程序启动

既然你只有在你的RESX字符串,我建议您复制资源的项目与一些预定义的格式简单的文本,并从那里阅读。如果您需要任何具体实施细节方面的帮助,请告知我。