我正在开发一个支持多种语言环境的应用程序。
这是通过使用单独的dll来实现的,每种语言都有一个资源,每个资源存储了一个字符串到特定语言的翻译。在WPF应用程序中,这很好地运作着:每当应用程序需要一个字符串时,它会请求dll,并返回根据应用程序选择的语言而变化的文本。如果语言被更改,则从语言dll返回的文本反映出更改。
现在我正在创建一个使用相同语言dll的ASP.Net MVC网站。
问题在于,对于语言dll上的资源管理器,据我所知,它总是返回系统文化的文本。我更改了资源管理器使用的CultureInfo,但它不起作用。有人有解决这个问题的想法吗?
抱歉回复晚了。周末没有上网......这是我第一次拥有一个项目同时使用Web和Windows,我期望行为相同,但它并不是这样。基本上,我有一个全局类,存储用户和应用程序设置,其中之一是当前的CultureInfo,当用户更改它时,语言管理器更新其当前的CultureInfo变量。当我调用获取语言字符串的代码时:
resmgr.GetString(label, ci);
其中resmgr是语言管理器的ResourceManager对象,ci是CultureInfo对象,label是我想要获取的字符串,它会返回标签/语言的文本。我为项目支持的每种文化有一个resx文件和一个不变/默认的resx文件。在Windows应用程序中运行良好,但在Web和某些单元测试中,尽管我将ci值更改为新的Culture,结果始终是相同的,来自不变的文化的字符串。我尝试更改当前线程文化和当前UI文化,但它没有起作用。
为什么ResourceManager方法GetResourceSet在WPF应用程序中返回传递到特定文化的正确资源集,但在单元测试或Web中使用相同代码时返回不变的资源集。我错过了什么,只是不知道它是什么......由于使用IOC并且因为语言项目未被引用而是在编译完成后复制到文件夹中,我发现为每个资源创建的文件夹没有复制到单元测试调试文件夹和网站bin文件夹中。我纠正了这一点,现在文件已经被复制,但问题仍然存在。
这是通过使用单独的dll来实现的,每种语言都有一个资源,每个资源存储了一个字符串到特定语言的翻译。在WPF应用程序中,这很好地运作着:每当应用程序需要一个字符串时,它会请求dll,并返回根据应用程序选择的语言而变化的文本。如果语言被更改,则从语言dll返回的文本反映出更改。
现在我正在创建一个使用相同语言dll的ASP.Net MVC网站。
问题在于,对于语言dll上的资源管理器,据我所知,它总是返回系统文化的文本。我更改了资源管理器使用的CultureInfo,但它不起作用。有人有解决这个问题的想法吗?
抱歉回复晚了。周末没有上网......这是我第一次拥有一个项目同时使用Web和Windows,我期望行为相同,但它并不是这样。基本上,我有一个全局类,存储用户和应用程序设置,其中之一是当前的CultureInfo,当用户更改它时,语言管理器更新其当前的CultureInfo变量。当我调用获取语言字符串的代码时:
resmgr.GetString(label, ci);
其中resmgr是语言管理器的ResourceManager对象,ci是CultureInfo对象,label是我想要获取的字符串,它会返回标签/语言的文本。我为项目支持的每种文化有一个resx文件和一个不变/默认的resx文件。在Windows应用程序中运行良好,但在Web和某些单元测试中,尽管我将ci值更改为新的Culture,结果始终是相同的,来自不变的文化的字符串。我尝试更改当前线程文化和当前UI文化,但它没有起作用。
为什么ResourceManager方法GetResourceSet在WPF应用程序中返回传递到特定文化的正确资源集,但在单元测试或Web中使用相同代码时返回不变的资源集。我错过了什么,只是不知道它是什么......由于使用IOC并且因为语言项目未被引用而是在编译完成后复制到文件夹中,我发现为每个资源创建的文件夹没有复制到单元测试调试文件夹和网站bin文件夹中。我纠正了这一点,现在文件已经被复制,但问题仍然存在。