我想本地化我的应用程序,并希望在平台之间共享字符串资源.但是我该如何做呢?
对于Windows桌面,最常见的方法似乎是使用resx文件.这是一个简短的例子:
http://compositeextensions.codeplex.com/discussions/52910
对于Windows存储应用程序转换文件而言,这里是一个例子:
http://msdn.microsoft.com/en-us/library/windows/apps/hh965326.aspx
这两个解决方案都是平台特定的,我不喜欢:-(我真的希望把所有的字符串都放在一个文件/语言中,并且能够在所有的平台上使用这个解决方案.
更新2014年2月17日:据了解,resx和resw文件格式相同. Windows商店应用程序中缺少的是没有为文件生成类文件.如果我可以得到一个这样的文件,我的问题将被解决.然后我可以在我的视图模型中放置该类的一个实例,并通过属性访问所有文本.
在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 Store应用程序中.由于某些原因,我需要将资源重命名为Resource.resw,并将其以“资源”的名称加载.我尝试了所有的名字,但这是唯一的名字.使用名称MyApplication.MyResource从不工作.
我不知道我是否在正确的轨道上.我几乎非常绝望,我将自己的解决方案是将我需要的所有字符串的XML文件转换为一个具有属性的巨大类,可以使用它来获取所有字符串,而不需要任何资源文件.但我认为这是丑陋和欺骗,所以我希望有人可以给我一个更好的想法:-).
更新2014年2月24日:我错了!事情正在与Portable类库相当好的工作.如果我使用它,我可以在我的视图模型中放置一个自动生成的C#类的实例,并访问该对象的所有字符串.
但如果我使用普通的图书馆的东西在Windows Store应用程序(WPF是好的)不正常工作.我已经尝试将所有文件从一个可移植的类库中复制到Windows存储类库中.当我尝试创建一个自动生成的文件的实例我总是得到:
An exception of type ‘System.Resources.MissingManifestResourceException’ occurred in mscorlib.dll but was not handled in user code
Additional information: Unable to load resources for resource file “MetroLib.StringResources” in package…
非常讨厌,因为我使用的Visual Studio的便携式类库不可用的快速版本.所以可能我会开发自己的解决方案,从资源文件生成类(这也给了我一些其他好处).但我仍然好奇我做错了什么
该工具可用于CodeProject的任何人:
http://www.codeproject.com/Articles/744528/ResToCode-Localization-tool-for-Windows-Desktop-St