手动创建不适用于应用程序的字符串资源文件
我正在开发一个项目,其中本地化的字符串稍后将被插入到实时ASP.NET(MVC4)站点/应用程序中。 我们计划实现此目的的方式(用于验证消息等)是从客户端获取字符串,将其放入.resx文件中,将此.resx文件编译为.resources文件,然后编译为.dll文件。 最后,将这个.dll文件放在现场的相关语言文件夹中。 但是,该手动创建的.dll不被应用程序拾取。 相反,它会回落到默认语言.dll。 另一方面,如果.resx文件是通过Visual Studio(2012)编译的,那么该应用程序会愉快地获取该.dll文件,并显示其中的本地化文本。
我猜测问题在于我手动创建.dll的方式,尽管我找不到任何问题。 以下是我在命令行控制台中运行的内容:
resgen Strings.fr-FR.resx Strings.fr-FR.resources
然后,
al /t:lib /culture:fr-FR /embed:Strings.fr-FR.resources /out:MyApplication.resources.dll
这可能是由于在生成法语本地化资源DLL时使用的名称空间,与您的应用程序对资源文件使用的名称空间不同。
您必须将您的资源文件从Strings.fr-FR.resources
重命名为MyApplication.Namespace.Where.My.Resource.Files.Are.Located.Resources.fr-FR.resources
。
默认情况下,资源文件位于“属性”文件夹中。 这意味着您可以使用全限定名MyApplication.Properties.Resources.MyString
访问本地化的字符串。
如果您的应用程序名为MyApplication,并且您的资源文件位于Properties文件夹下,请按以下方式生成资源文件:
resgen Strings.fr-FR.resx MyApplication.Properties.Resources.fr-FR.resources
然后以这种方式生成DLL:
al /t:lib /Culture:fr-FR /embed:MyApplication.Properties.Resources.fr-FR.resources /out:MyApplication.resources.dll
现在,当您将它放入应用程序的bin文件夹中的fr-FR文件夹中时,应该可以识别它。
看看你之前生成的程序集的清单以及现在使用ildasm.exe生成的清单。 在第二种情况下,您将看到以下行.mresource public 'MyApplication.Properties.Resources.fr-FR.resources'
在第一种情况下它应该是这样的.mresource public 'Strings.fr-FR.resources'
。 由于您的应用程序在本地化的字符串中查找命名空间'MyApplication.Properties',它找不到它......当然,将'MyApplication.Properties.Resources'改为适用于您的应用程序的任何东西(可能是'MyApplication.Localization .Strings')。
上一篇: Manual creation of strings resource file not working with Application
下一篇: Trying to make a wrapped type family into a something Functor