C#-.NET本地化
作者:互联网
我正在开发一个支持多种语言环境的应用程序.
这是通过一个单独的dll完成的,该dll具有每种语言的资源,每种资源都将字符串翻译成特定的语言.
这在WPF应用程序上工作得很好,每次在应用程序上需要一个字符串时,都会向dll发出请求,并根据在应用程序上选择的语言返回文本.如果更改了语言,则从语言dll返回的文本将反映出更改.
现在,我正在使用MVC在ASP.Net中创建一个使用相同语言dll的网站.
问题是,据我所了解,语言dll上的resourcemanager总是返回系统文化的文本.我更改了资源管理器使用的cultureinfo,但是它不起作用.
有谁知道如何解决这个问题?
谢谢
更新:
这么晚才回复很抱歉.周末无法访问互联网…这是我第一次有一个项目同时对Web和Windows使用相同的dll,并且我希望行为相同,但事实并非如此.基本上,我有一个全局类来存储用户和应用程序设置,其中之一是当前的cultureinfo,当用户对其进行更改时,语言管理器更新是当前的cultureinfo变量.当我调用代码获取字符串的语言时,
resmgr.GetString(label, ci);
其中resmgr是语言管理器的ResourceManager对象,ci是cultureinfo对象,并标记了我想要获取的字符串,它返回标签/语言的文本.
对于项目支持的每种区域性,我都有一个resx文件,对于不变式/默认值,我有一个resx文件
在Windows应用程序中工作正常,但在Web上以及在我进行的某些单元测试中却没有,即使您将ci值更改为新的区域性,结果也始终相同,即不变区域性的字符串.
我试图更改当前的线程文化和当前的ui文化,但是没有用
更新2:
为什么资源管理器方法GetResourceSet返回正确的资源集,以适应传入wpf应用程序但在单元测试或Web中使用相同代码返回不变资源集的区域性.
我错过了一些东西,只是不知道它是什么.
更新3:由于我们使用的是IOC,并且由于未引用语言porject,而是在完成编译时将其复制到该文件夹,因此我发现为每个资源创建的文件夹没有被复制到单元测试调试文件夹,并且到网站bin文件夹.我更正了,现在正在复制文件,但问题仍然存在.
解决方法:
看到这个multipart tutorial,因为它是一个扩展的主题.
标签:globalization,wpf,asp-net,c,net 来源: https://codeday.me/bug/20191102/1989969.html