Wpf 在Windows桌面和Windows应用商店应用程序之间共享字符串资源

Wpf 在Windows桌面和Windows应用商店应用程序之间共享字符串资源,wpf,localization,windows-runtime,windows-phone,embedded-resource,Wpf,Localization,Windows Runtime,Windows Phone,Embedded Resource,我正在使用适用于Windows桌面和Windows应用商店的应用程序,将来可能会添加Windows Phone。我将我的大部分逻辑放在一个库中,并为不同的平台创建不同的GUI 我希望本地化我的应用程序,并希望在平台之间共享字符串资源。但是我该怎么做呢 对于Windows桌面,最常见的方法似乎是使用resx文件。下面是一个简短的例子: 对于使用Windows应用商店应用程序resw文件,以下是一个示例: 这两种解决方案都是特定于平台的,我不喜欢:-(。我真的想把我所有的字符串放在一个文件/语言

我正在使用适用于Windows桌面和Windows应用商店的应用程序,将来可能会添加Windows Phone。我将我的大部分逻辑放在一个库中,并为不同的平台创建不同的GUI

我希望本地化我的应用程序,并希望在平台之间共享字符串资源。但是我该怎么做呢

对于Windows桌面,最常见的方法似乎是使用resx文件。下面是一个简短的例子:

对于使用Windows应用商店应用程序resw文件,以下是一个示例:

这两种解决方案都是特定于平台的,我不喜欢:-(。我真的想把我所有的字符串放在一个文件/语言中,并且能够在所有平台上使用。有什么解决方案吗

更新2014年2月17日:据我所知,resx和resw文件的格式相同。Windows应用商店应用程序中缺少的是没有为resw文件生成类文件。如果我能得到这样的文件,我的问题就会得到解决。然后我可以将该类的一个实例放在我的视图模型中,并通过prope访问所有文本皮质类固醇

WPF应用程序中生成的类文件几乎可以正常工作。问题是这行代码看起来像这样:

global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ResxTest.Properties.StringTest", typeof(StringTest).Assembly);
要将其编译,我需要将其更改为:

global::System.Resources.ResourceManager temp = new System.Resources.ResourceManager("ResxTest.Properties.StringTest", typeof(StringTest).GetTypeInfo().Assembly);
但是资源ResxTest.Properties.StringTest无法加载到我的Windows应用商店应用程序中。出于某种原因,我需要将我的资源重命名为resource.resw并使用名称“resource”加载。我尝试了所有类型的名称,但这是唯一有效的名称。使用名称MyApplication.MyResource永远不会起作用

我不确定我是否走上了正确的道路。我几乎绝望地认为,如果我将一个包含所有字符串的XML文件转换为一个具有属性的大型类,我可以使用该类在没有任何资源文件的情况下获取所有字符串,我将制定自己的解决方案。但我认为这是丑陋和欺骗,因此我希望有人能给我一个更好的主意:-)

2014年2月24日更新:我错了!在可移植类库中工作得非常好。如果我使用它,我可以在视图模型中放置一个自动生成的C#类的实例,并访问该对象中的所有字符串

但如果我使用一个普通的库,Windows应用商店应用程序中的东西就不能正常工作(WPF可以)。我已尝试将所有文件从工作的可移植类库复制到Windows应用商店类库。当我尝试创建自动生成文件的实例时,我始终会得到:

mscorlib.dll中发生“System.Resources.MissingManifestResourceException”类型的异常,但未在用户代码中处理

其他信息:无法加载包中资源文件“MetroLib.StringResources”的资源


非常恼人,因为我使用的是Visual Studio的快速版,而便携式类库不可用。因此,我可能会开发自己的解决方案,从资源文件生成类(这也给了我一些其他好处)。但我还是很好奇我做错了什么

您可以将所有资源放在一个可移植类库中,并在所有平台上使用这些库。您可能需要检查正在使用的.NET framework的版本。并非所有平台的所有版本都提供可移植库


你看过那张照片了吗?它将翻译保持在行业标准中,可以为Windows和Windows Phone生成资源文件。

我终于解决了这个问题。我只是开发了一个简单的工具(ResToCode)来将资源文件转换为纯C#类。与Visual Studio resgen.exe的功能非常相似,但有一些额外的功能。它工作得非常好,所以我很高兴:-)

CodeProject的任何人都可以使用该工具:


对于可移植类库的MissingManifestResourceException,我也有同样的问题。今天,我用另一个名称创建了一个新的可移植类库(其中没有字符串“Resources”):它的工作方式很有魅力。不知道为什么这以前不起作用(可能是资源的名称)。

谢谢。我已经在使用可移植类库了,我把所有的逻辑都放在里面了。但我没有足够的资源来正常工作。我可以添加一个resx文件并在Windows桌面上使用,但我还没有在Windows应用商店中使用它。或者我根本不知道如何正确地编写语法:-)。有什么想法吗?这也适用于多种语言吗?您将公开方法以返回可移植库中的资源。只需从windows应用商店应用程序中调用这些方法即可。这里给出了本地化资源的一个示例。如果我只想在代码中获取字符串,那就太好了。但是我可以在xaml文件中使用它吗?在桌面应用程序中,我可以写一些类似的东西,但Windows应用商店应用程序呢?谢谢,它看起来很有前途。但后来我发现桌面应用程序不受支持:-(。但我希望他们继续开发它。我喜欢这个想法。目前我认为这比应该的更难处理:-(。