【发布时间】:2014-02-17 06:56:56
【问题描述】:
我正在使用适用于 Windows 桌面和 Windows 商店的应用程序,将来我可能会添加 Windows Phone。我将大部分逻辑放在一个库中,并为不同的平台创建不同的 GUI。
我想本地化我的应用程序并希望在平台之间共享字符串资源。但是我该怎么做呢?
对于 Windows 桌面,最常见的方法似乎是使用 resx 文件。这是一个简短的例子:
http://compositeextensions.codeplex.com/discussions/52910
对于 Windows 商店应用程序 resw 文件,请改为使用以下示例:
http://msdn.microsoft.com/en-us/library/windows/apps/hh965326.aspx
这两种解决方案都是特定于平台的,我不喜欢 :-(。我真的希望将我的所有字符串放在一个文件/语言中,并能够在所有平台上使用它。有什么解决方案吗?
2014 年 2 月 17 日更新:据我了解,resx 和 resw 文件格式相同。 Windows 商店应用程序中缺少的是没有为 resw 文件生成类文件。如果我能得到这样的文件,我的问题就会得到解决。然后我可以将该类的一个实例放在我的视图模型中,并通过属性访问所有文本。
在 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 日更新:我错了!使用 Portable 类库,一切都很好。如果我使用它,我可以在我的视图模型中放置一个自动生成的 C# 类的实例并访问该对象的所有字符串。
但是,如果我使用普通库,Windows 应用商店应用程序将无法正常工作(WPF 很好)。我试图将所有文件从工作的便携式类库复制到 Windows 商店类库。当我尝试创建自动生成文件的实例时,我总是得到:
“System.Resources.MissingManifestResourceException”类型的异常发生在 mscorlib.dll 中,但未在用户代码中处理
附加信息:无法为包中的资源文件“MetroLib.StringResources”加载资源...
很烦人,因为我使用的是 Visual Studio 的快速版本,其中没有可移植类库。所以我可能会开发自己的解决方案来从资源文件生成类(这也给了我一些其他好处)。但我仍然很好奇我做错了什么。
【问题讨论】:
标签: wpf localization windows-runtime windows-phone embedded-resource